From 42d3a4de3fecf5e69616158a1fdf4848c7cb02f1 Mon Sep 17 00:00:00 2001 From: woodser Date: Sun, 1 Oct 2023 12:38:06 -0400 Subject: [PATCH] update typedocs --- docs/ConnectionType.html | 656 - docs/GenUtils.html | 14400 ---------- docs/HttpClient.html | 786 - docs/LibraryUtils.html | 1956 -- docs/MoneroAccount.html | 1350 - docs/MoneroAccountTag.html | 678 - docs/MoneroAddressBookEntry.html | 930 - docs/MoneroAltChain.html | 1098 - docs/MoneroBan.html | 930 - docs/MoneroBlock.html | 4600 ---- docs/MoneroBlockHeader.html | 3691 --- docs/MoneroBlockTemplate.html | 2022 -- docs/MoneroCheck.html | 342 - docs/MoneroCheckReserve.html | 783 - docs/MoneroCheckTx.html | 951 - docs/MoneroConnectionManager.html | 3851 --- docs/MoneroConnectionManagerListener.html | 311 - docs/MoneroConnectionSpan.html | 1434 - docs/MoneroDaemon.html | 9924 ------- docs/MoneroDaemonConnection.html | 3282 --- docs/MoneroDaemonConnectionSpan.html | 1434 - docs/MoneroDaemonInfo.html | 5802 ---- docs/MoneroDaemonListener.html | 421 - docs/MoneroDaemonPeer.html | 1797 -- docs/MoneroDaemonRpc.html | 9920 ------- docs/MoneroDaemonSyncInfo.html | 1602 -- docs/MoneroDaemonUpdateCheckResult.html | 1197 - docs/MoneroDaemonUpdateDownloadResult.html | 421 - docs/MoneroDestination.html | 847 - docs/MoneroError.html | 418 - docs/MoneroFeeEstimate.html | 986 - docs/MoneroHardForkInfo.html | 1938 -- docs/MoneroIncomingTransfer.html | 1988 -- docs/MoneroIntegratedAddress.html | 846 - docs/MoneroKeyImage.html | 928 - docs/MoneroKeyImageImportResult.html | 762 - docs/MoneroKeyImageSpentStatus.html | 350 - docs/MoneroMessageSignatureResult.html | 930 - docs/MoneroMessageSignatureType.html | 288 - docs/MoneroMinerTxSum.html | 594 - docs/MoneroMiningStatus.html | 1098 - docs/MoneroMultisigInfo.html | 930 - docs/MoneroMultisigInitResult.html | 596 - docs/MoneroMultisigSignResult.html | 594 - docs/MoneroNetworkType.html | 919 - docs/MoneroOutgoingTransfer.html | 1865 -- docs/MoneroOutput.html | 1574 -- docs/MoneroOutputHistogramEntry.html | 930 - docs/MoneroOutputQuery.html | 3634 --- docs/MoneroOutputWallet.html | 2488 -- docs/MoneroPeer.html | 4653 ---- docs/MoneroPruneResult.html | 594 - docs/MoneroRpcConnection.html | 2980 --- docs/MoneroRpcError.html | 548 - docs/MoneroSubaddress.html | 1854 -- docs/MoneroSubmitTxResult.html | 2778 -- docs/MoneroSyncResult.html | 510 - docs/MoneroTransfer.html | 1312 - docs/MoneroTransferQuery.html | 3233 --- docs/MoneroTx.html | 7042 ----- docs/MoneroTxConfig.html | 4199 --- docs/MoneroTxPoolStats.html | 2442 -- docs/MoneroTxPriority.html | 412 - docs/MoneroTxQuery.html | 12375 --------- docs/MoneroTxSet.html | 1103 - docs/MoneroTxWallet.html | 10033 ------- docs/MoneroUtils.html | 3893 --- docs/MoneroVersion.html | 744 - docs/MoneroWallet.html | 19152 -------------- docs/MoneroWalletConfig.html | 5060 ---- docs/MoneroWalletFull.html | 21837 ---------------- docs/MoneroWalletKeys.html | 3070 --- docs/MoneroWalletListener.html | 979 - docs/MoneroWalletRpc.html | 20312 -------------- docs/SslOptions.html | 1014 - docs/TaskLooper.html | 831 - docs/ThreadPool.html | 496 - docs/fonts/OpenSans-Bold-webfont.eot | Bin 19544 -> 0 bytes docs/fonts/OpenSans-Bold-webfont.svg | 1830 -- docs/fonts/OpenSans-Bold-webfont.woff | Bin 22432 -> 0 bytes docs/fonts/OpenSans-BoldItalic-webfont.eot | Bin 20133 -> 0 bytes docs/fonts/OpenSans-BoldItalic-webfont.svg | 1830 -- docs/fonts/OpenSans-BoldItalic-webfont.woff | Bin 23048 -> 0 bytes docs/fonts/OpenSans-Italic-webfont.eot | Bin 20265 -> 0 bytes docs/fonts/OpenSans-Italic-webfont.svg | 1830 -- docs/fonts/OpenSans-Italic-webfont.woff | Bin 23188 -> 0 bytes docs/fonts/OpenSans-Light-webfont.eot | Bin 19514 -> 0 bytes docs/fonts/OpenSans-Light-webfont.svg | 1831 -- docs/fonts/OpenSans-Light-webfont.woff | Bin 22248 -> 0 bytes docs/fonts/OpenSans-LightItalic-webfont.eot | Bin 20535 -> 0 bytes docs/fonts/OpenSans-LightItalic-webfont.svg | 1835 -- docs/fonts/OpenSans-LightItalic-webfont.woff | Bin 23400 -> 0 bytes docs/fonts/OpenSans-Regular-webfont.eot | Bin 19836 -> 0 bytes docs/fonts/OpenSans-Regular-webfont.svg | 1831 -- docs/fonts/OpenSans-Regular-webfont.woff | Bin 22660 -> 0 bytes docs/global.html | 2696 -- docs/index.html | 65 - docs/index.js.html | 338 - docs/scripts/linenumber.js | 25 - docs/scripts/prettify/Apache-License-2.0.txt | 202 - docs/scripts/prettify/lang-css.js | 2 - docs/scripts/prettify/prettify.js | 28 - docs/src_main_js_common_Filter.js.html | 81 - docs/src_main_js_common_GenUtils.js.html | 1578 -- docs/src_main_js_common_HttpClient.js.html | 546 - docs/src_main_js_common_LibraryUtils.js.html | 306 - ..._js_common_MoneroConnectionManager.js.html | 696 - ...on_MoneroConnectionManagerListener.js.html | 64 - docs/src_main_js_common_MoneroError.js.html | 80 - ...main_js_common_MoneroRpcConnection.js.html | 467 - .../src_main_js_common_MoneroRpcError.js.html | 87 - docs/src_main_js_common_MoneroUtils.js.html | 503 - ...src_main_js_common_MoneroWebWorker.js.html | 1037 - docs/src_main_js_common_SslOptions.js.html | 106 - docs/src_main_js_common_TaskLooper.js.html | 128 - docs/src_main_js_common_ThreadPool.js.html | 115 - docs/src_main_js_common_biginteger.js.html | 1686 -- docs/src_main_js_daemon_MoneroDaemon.js.html | 761 - ...src_main_js_daemon_MoneroDaemonRpc.js.html | 1955 -- ...ain_js_daemon_model_ConnectionType.js.html | 102 - ...ain_js_daemon_model_MoneroAltChain.js.html | 116 - ...src_main_js_daemon_model_MoneroBan.js.html | 101 - ...c_main_js_daemon_model_MoneroBlock.js.html | 208 - ..._js_daemon_model_MoneroBlockHeader.js.html | 313 - ...s_daemon_model_MoneroBlockTemplate.js.html | 172 - ..._daemon_model_MoneroConnectionSpan.js.html | 128 - ...aemon_model_MoneroDaemonConnection.js.html | 232 - ...n_model_MoneroDaemonConnectionSpan.js.html | 128 - ...n_js_daemon_model_MoneroDaemonInfo.js.html | 374 - ..._daemon_model_MoneroDaemonListener.js.html | 76 - ...n_js_daemon_model_MoneroDaemonPeer.js.html | 157 - ..._daemon_model_MoneroDaemonSyncInfo.js.html | 175 - ...odel_MoneroDaemonUpdateCheckResult.js.html | 144 - ...l_MoneroDaemonUpdateDownloadResult.js.html | 82 - ..._js_daemon_model_MoneroFeeEstimate.js.html | 129 - ...js_daemon_model_MoneroHardForkInfo.js.html | 160 - ...ain_js_daemon_model_MoneroKeyImage.js.html | 120 - ...on_model_MoneroKeyImageSpentStatus.js.html | 73 - ...n_js_daemon_model_MoneroMinerTxSum.js.html | 93 - ...js_daemon_model_MoneroMiningStatus.js.html | 114 - ..._js_daemon_model_MoneroNetworkType.js.html | 123 - ..._main_js_daemon_model_MoneroOutput.js.html | 181 - ...n_model_MoneroOutputHistogramEntry.js.html | 106 - ...rc_main_js_daemon_model_MoneroPeer.js.html | 310 - ..._js_daemon_model_MoneroPruneResult.js.html | 87 - ..._daemon_model_MoneroSubmitTxResult.js.html | 208 - .../src_main_js_daemon_model_MoneroTx.js.html | 656 - ..._js_daemon_model_MoneroTxPoolStats.js.html | 190 - ...main_js_daemon_model_MoneroVersion.js.html | 95 - docs/src_main_js_wallet_MoneroWallet.js.html | 1468 -- ...rc_main_js_wallet_MoneroWalletFull.js.html | 2740 -- ...rc_main_js_wallet_MoneroWalletKeys.js.html | 398 - ...src_main_js_wallet_MoneroWalletRpc.js.html | 2630 -- ...main_js_wallet_model_MoneroAccount.js.html | 181 - ...n_js_wallet_model_MoneroAccountTag.js.html | 90 - ...allet_model_MoneroAddressBookEntry.js.html | 101 - ...c_main_js_wallet_model_MoneroCheck.js.html | 72 - ...js_wallet_model_MoneroCheckReserve.js.html | 93 - ...main_js_wallet_model_MoneroCheckTx.js.html | 100 - ..._js_wallet_model_MoneroDestination.js.html | 121 - ...allet_model_MoneroIncomingTransfer.js.html | 146 - ...llet_model_MoneroIntegratedAddress.js.html | 96 - ...t_model_MoneroKeyImageImportResult.js.html | 100 - ...model_MoneroMessageSignatureResult.js.html | 111 - ...t_model_MoneroMessageSignatureType.js.html | 68 - ...js_wallet_model_MoneroMultisigInfo.js.html | 98 - ...let_model_MoneroMultisigInitResult.js.html | 85 - ...let_model_MoneroMultisigSignResult.js.html | 81 - ...allet_model_MoneroOutgoingTransfer.js.html | 159 - ..._js_wallet_model_MoneroOutputQuery.js.html | 189 - ...js_wallet_model_MoneroOutputWallet.js.html | 159 - ...n_js_wallet_model_MoneroSubaddress.js.html | 177 - ...n_js_wallet_model_MoneroSyncResult.js.html | 80 - ...ain_js_wallet_model_MoneroTransfer.js.html | 178 - ...s_wallet_model_MoneroTransferQuery.js.html | 271 - ...ain_js_wallet_model_MoneroTxConfig.js.html | 390 - ...n_js_wallet_model_MoneroTxPriority.js.html | 78 - ...main_js_wallet_model_MoneroTxQuery.js.html | 350 - ...c_main_js_wallet_model_MoneroTxSet.js.html | 163 - ...ain_js_wallet_model_MoneroTxWallet.js.html | 464 - ...js_wallet_model_MoneroWalletConfig.js.html | 360 - ..._wallet_model_MoneroWalletListener.js.html | 102 - docs/styles/jsdoc-default.css | 358 - docs/styles/prettify-jsdoc.css | 111 - docs/styles/prettify-tomorrow.css | 132 - docs/typedocs/.nojekyll | 1 + docs/typedocs/assets/highlight.css | 92 + docs/typedocs/assets/main.js | 59 + docs/typedocs/assets/navigation.js | 1 + docs/typedocs/assets/search.js | 1 + docs/typedocs/assets/style.css | 1383 + docs/typedocs/classes/GenUtils.html | 2455 ++ docs/typedocs/classes/HttpClient.html | 294 + docs/typedocs/classes/LibraryUtils.html | 513 + docs/typedocs/classes/MoneroAccount.html | 357 + docs/typedocs/classes/MoneroAccountTag.html | 204 + .../classes/MoneroAddressBookEntry.html | 246 + docs/typedocs/classes/MoneroAltChain.html | 278 + docs/typedocs/classes/MoneroBan.html | 246 + docs/typedocs/classes/MoneroBlock.html | 977 + docs/typedocs/classes/MoneroBlockHeader.html | 747 + .../typedocs/classes/MoneroBlockTemplate.html | 438 + docs/typedocs/classes/MoneroCheck.html | 143 + docs/typedocs/classes/MoneroCheckReserve.html | 220 + docs/typedocs/classes/MoneroCheckTx.html | 252 + .../classes/MoneroConnectionManager.html | 896 + .../MoneroConnectionManagerListener.html | 117 + .../classes/MoneroConnectionSpan.html | 342 + docs/typedocs/classes/MoneroDaemon.html | 1420 + docs/typedocs/classes/MoneroDaemonConfig.html | 262 + docs/typedocs/classes/MoneroDaemonInfo.html | 1174 + .../classes/MoneroDaemonListener.html | 143 + docs/typedocs/classes/MoneroDaemonRpc.html | 2122 ++ .../classes/MoneroDaemonSyncInfo.html | 374 + .../MoneroDaemonUpdateCheckResult.html | 290 + .../MoneroDaemonUpdateDownloadResult.html | 342 + docs/typedocs/classes/MoneroDestination.html | 218 + docs/typedocs/classes/MoneroError.html | 232 + docs/typedocs/classes/MoneroFeeEstimate.html | 239 + docs/typedocs/classes/MoneroHardForkInfo.html | 438 + .../classes/MoneroIncomingTransfer.html | 421 + .../classes/MoneroIntegratedAddress.html | 224 + docs/typedocs/classes/MoneroKeyImage.html | 230 + .../classes/MoneroKeyImageImportResult.html | 214 + .../classes/MoneroMessageSignatureResult.html | 246 + docs/typedocs/classes/MoneroMinerTxSum.html | 182 + docs/typedocs/classes/MoneroMiningStatus.html | 278 + docs/typedocs/classes/MoneroMultisigInfo.html | 246 + .../classes/MoneroMultisigInitResult.html | 184 + .../classes/MoneroMultisigSignResult.html | 182 + docs/typedocs/classes/MoneroNetworkType.html | 237 + .../classes/MoneroOutgoingTransfer.html | 411 + docs/typedocs/classes/MoneroOutput.html | 358 + .../classes/MoneroOutputHistogramEntry.html | 246 + docs/typedocs/classes/MoneroOutputQuery.html | 709 + docs/typedocs/classes/MoneroOutputWallet.html | 542 + docs/typedocs/classes/MoneroPeer.html | 923 + docs/typedocs/classes/MoneroPruneResult.html | 182 + .../typedocs/classes/MoneroRpcConnection.html | 628 + docs/typedocs/classes/MoneroRpcError.html | 277 + docs/typedocs/classes/MoneroSubaddress.html | 421 + .../classes/MoneroSubmitTxResult.html | 598 + docs/typedocs/classes/MoneroSyncResult.html | 174 + docs/typedocs/classes/MoneroTransfer.html | 304 + .../typedocs/classes/MoneroTransferQuery.html | 630 + docs/typedocs/classes/MoneroTx.html | 1640 ++ docs/typedocs/classes/MoneroTxConfig.html | 775 + docs/typedocs/classes/MoneroTxPoolStats.html | 534 + docs/typedocs/classes/MoneroTxQuery.html | 2847 ++ docs/typedocs/classes/MoneroTxSet.html | 280 + docs/typedocs/classes/MoneroTxWallet.html | 2460 ++ docs/typedocs/classes/MoneroUtils.html | 686 + docs/typedocs/classes/MoneroVersion.html | 194 + docs/typedocs/classes/MoneroWallet.html | 2673 ++ docs/typedocs/classes/MoneroWalletConfig.html | 781 + docs/typedocs/classes/MoneroWalletFull.html | 3406 +++ docs/typedocs/classes/MoneroWalletKeys.html | 2915 +++ .../classes/MoneroWalletListener.html | 229 + docs/typedocs/classes/MoneroWalletRpc.html | 3676 +++ docs/typedocs/classes/SslOptions.html | 268 + docs/typedocs/classes/TaskLooper.html | 236 + docs/typedocs/classes/ThreadPool.html | 169 + docs/typedocs/enums/ConnectionType.html | 130 + .../enums/MoneroKeyImageSpentStatus.html | 110 + .../enums/MoneroMessageSignatureType.html | 99 + docs/typedocs/enums/MoneroTxPriority.html | 119 + .../functions/connectToDaemonRpc.html | 108 + .../functions/connectToWalletRpc.html | 112 + docs/typedocs/functions/createWalletFull.html | 106 + docs/typedocs/functions/createWalletKeys.html | 87 + docs/typedocs/functions/getVersion.html | 69 + docs/typedocs/functions/openWalletFull.html | 92 + docs/typedocs/index.html | 200 + docs/typedocs/modules.html | 149 + 274 files changed, 51713 insertions(+), 277720 deletions(-) delete mode 100644 docs/ConnectionType.html delete mode 100644 docs/GenUtils.html delete mode 100644 docs/HttpClient.html delete mode 100644 docs/LibraryUtils.html delete mode 100644 docs/MoneroAccount.html delete mode 100644 docs/MoneroAccountTag.html delete mode 100644 docs/MoneroAddressBookEntry.html delete mode 100644 docs/MoneroAltChain.html delete mode 100644 docs/MoneroBan.html delete mode 100644 docs/MoneroBlock.html delete mode 100644 docs/MoneroBlockHeader.html delete mode 100644 docs/MoneroBlockTemplate.html delete mode 100644 docs/MoneroCheck.html delete mode 100644 docs/MoneroCheckReserve.html delete mode 100644 docs/MoneroCheckTx.html delete mode 100644 docs/MoneroConnectionManager.html delete mode 100644 docs/MoneroConnectionManagerListener.html delete mode 100644 docs/MoneroConnectionSpan.html delete mode 100644 docs/MoneroDaemon.html delete mode 100644 docs/MoneroDaemonConnection.html delete mode 100644 docs/MoneroDaemonConnectionSpan.html delete mode 100644 docs/MoneroDaemonInfo.html delete mode 100644 docs/MoneroDaemonListener.html delete mode 100644 docs/MoneroDaemonPeer.html delete mode 100644 docs/MoneroDaemonRpc.html delete mode 100644 docs/MoneroDaemonSyncInfo.html delete mode 100644 docs/MoneroDaemonUpdateCheckResult.html delete mode 100644 docs/MoneroDaemonUpdateDownloadResult.html delete mode 100644 docs/MoneroDestination.html delete mode 100644 docs/MoneroError.html delete mode 100644 docs/MoneroFeeEstimate.html delete mode 100644 docs/MoneroHardForkInfo.html delete mode 100644 docs/MoneroIncomingTransfer.html delete mode 100644 docs/MoneroIntegratedAddress.html delete mode 100644 docs/MoneroKeyImage.html delete mode 100644 docs/MoneroKeyImageImportResult.html delete mode 100644 docs/MoneroKeyImageSpentStatus.html delete mode 100644 docs/MoneroMessageSignatureResult.html delete mode 100644 docs/MoneroMessageSignatureType.html delete mode 100644 docs/MoneroMinerTxSum.html delete mode 100644 docs/MoneroMiningStatus.html delete mode 100644 docs/MoneroMultisigInfo.html delete mode 100644 docs/MoneroMultisigInitResult.html delete mode 100644 docs/MoneroMultisigSignResult.html delete mode 100644 docs/MoneroNetworkType.html delete mode 100644 docs/MoneroOutgoingTransfer.html delete mode 100644 docs/MoneroOutput.html delete mode 100644 docs/MoneroOutputHistogramEntry.html delete mode 100644 docs/MoneroOutputQuery.html delete mode 100644 docs/MoneroOutputWallet.html delete mode 100644 docs/MoneroPeer.html delete mode 100644 docs/MoneroPruneResult.html delete mode 100644 docs/MoneroRpcConnection.html delete mode 100644 docs/MoneroRpcError.html delete mode 100644 docs/MoneroSubaddress.html delete mode 100644 docs/MoneroSubmitTxResult.html delete mode 100644 docs/MoneroSyncResult.html delete mode 100644 docs/MoneroTransfer.html delete mode 100644 docs/MoneroTransferQuery.html delete mode 100644 docs/MoneroTx.html delete mode 100644 docs/MoneroTxConfig.html delete mode 100644 docs/MoneroTxPoolStats.html delete mode 100644 docs/MoneroTxPriority.html delete mode 100644 docs/MoneroTxQuery.html delete mode 100644 docs/MoneroTxSet.html delete mode 100644 docs/MoneroTxWallet.html delete mode 100644 docs/MoneroUtils.html delete mode 100644 docs/MoneroVersion.html delete mode 100644 docs/MoneroWallet.html delete mode 100644 docs/MoneroWalletConfig.html delete mode 100644 docs/MoneroWalletFull.html delete mode 100644 docs/MoneroWalletKeys.html delete mode 100644 docs/MoneroWalletListener.html delete mode 100644 docs/MoneroWalletRpc.html delete mode 100644 docs/SslOptions.html delete mode 100644 docs/TaskLooper.html delete mode 100644 docs/ThreadPool.html delete mode 100644 docs/fonts/OpenSans-Bold-webfont.eot delete mode 100644 docs/fonts/OpenSans-Bold-webfont.svg delete mode 100644 docs/fonts/OpenSans-Bold-webfont.woff delete mode 100644 docs/fonts/OpenSans-BoldItalic-webfont.eot delete mode 100644 docs/fonts/OpenSans-BoldItalic-webfont.svg delete mode 100644 docs/fonts/OpenSans-BoldItalic-webfont.woff delete mode 100644 docs/fonts/OpenSans-Italic-webfont.eot delete mode 100644 docs/fonts/OpenSans-Italic-webfont.svg delete mode 100644 docs/fonts/OpenSans-Italic-webfont.woff delete mode 100644 docs/fonts/OpenSans-Light-webfont.eot delete mode 100644 docs/fonts/OpenSans-Light-webfont.svg delete mode 100644 docs/fonts/OpenSans-Light-webfont.woff delete mode 100644 docs/fonts/OpenSans-LightItalic-webfont.eot delete mode 100644 docs/fonts/OpenSans-LightItalic-webfont.svg delete mode 100644 docs/fonts/OpenSans-LightItalic-webfont.woff delete mode 100644 docs/fonts/OpenSans-Regular-webfont.eot delete mode 100644 docs/fonts/OpenSans-Regular-webfont.svg delete mode 100644 docs/fonts/OpenSans-Regular-webfont.woff delete mode 100644 docs/global.html delete mode 100644 docs/index.html delete mode 100644 docs/index.js.html delete mode 100644 docs/scripts/linenumber.js delete mode 100644 docs/scripts/prettify/Apache-License-2.0.txt delete mode 100644 docs/scripts/prettify/lang-css.js delete mode 100644 docs/scripts/prettify/prettify.js delete mode 100644 docs/src_main_js_common_Filter.js.html delete mode 100644 docs/src_main_js_common_GenUtils.js.html delete mode 100644 docs/src_main_js_common_HttpClient.js.html delete mode 100644 docs/src_main_js_common_LibraryUtils.js.html delete mode 100644 docs/src_main_js_common_MoneroConnectionManager.js.html delete mode 100644 docs/src_main_js_common_MoneroConnectionManagerListener.js.html delete mode 100644 docs/src_main_js_common_MoneroError.js.html delete mode 100644 docs/src_main_js_common_MoneroRpcConnection.js.html delete mode 100644 docs/src_main_js_common_MoneroRpcError.js.html delete mode 100644 docs/src_main_js_common_MoneroUtils.js.html delete mode 100644 docs/src_main_js_common_MoneroWebWorker.js.html delete mode 100644 docs/src_main_js_common_SslOptions.js.html delete mode 100644 docs/src_main_js_common_TaskLooper.js.html delete mode 100644 docs/src_main_js_common_ThreadPool.js.html delete mode 100644 docs/src_main_js_common_biginteger.js.html delete mode 100644 docs/src_main_js_daemon_MoneroDaemon.js.html delete mode 100644 docs/src_main_js_daemon_MoneroDaemonRpc.js.html delete mode 100644 docs/src_main_js_daemon_model_ConnectionType.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroAltChain.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroBan.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroBlock.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroBlockHeader.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroBlockTemplate.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroConnectionSpan.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroDaemonConnection.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroDaemonConnectionSpan.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroDaemonInfo.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroDaemonListener.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroDaemonPeer.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroDaemonSyncInfo.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroDaemonUpdateCheckResult.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroDaemonUpdateDownloadResult.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroFeeEstimate.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroHardForkInfo.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroKeyImage.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroKeyImageSpentStatus.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroMinerTxSum.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroMiningStatus.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroNetworkType.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroOutput.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroOutputHistogramEntry.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroPeer.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroPruneResult.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroSubmitTxResult.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroTx.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroTxPoolStats.js.html delete mode 100644 docs/src_main_js_daemon_model_MoneroVersion.js.html delete mode 100644 docs/src_main_js_wallet_MoneroWallet.js.html delete mode 100644 docs/src_main_js_wallet_MoneroWalletFull.js.html delete mode 100644 docs/src_main_js_wallet_MoneroWalletKeys.js.html delete mode 100644 docs/src_main_js_wallet_MoneroWalletRpc.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroAccount.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroAccountTag.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroAddressBookEntry.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroCheck.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroCheckReserve.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroCheckTx.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroDestination.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroIncomingTransfer.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroIntegratedAddress.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroKeyImageImportResult.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroMessageSignatureResult.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroMessageSignatureType.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroMultisigInfo.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroMultisigInitResult.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroMultisigSignResult.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroOutgoingTransfer.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroOutputQuery.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroOutputWallet.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroSubaddress.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroSyncResult.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroTransfer.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroTransferQuery.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroTxConfig.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroTxPriority.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroTxQuery.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroTxSet.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroTxWallet.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroWalletConfig.js.html delete mode 100644 docs/src_main_js_wallet_model_MoneroWalletListener.js.html delete mode 100644 docs/styles/jsdoc-default.css delete mode 100644 docs/styles/prettify-jsdoc.css delete mode 100644 docs/styles/prettify-tomorrow.css create mode 100644 docs/typedocs/.nojekyll create mode 100644 docs/typedocs/assets/highlight.css create mode 100644 docs/typedocs/assets/main.js create mode 100644 docs/typedocs/assets/navigation.js create mode 100644 docs/typedocs/assets/search.js create mode 100644 docs/typedocs/assets/style.css create mode 100644 docs/typedocs/classes/GenUtils.html create mode 100644 docs/typedocs/classes/HttpClient.html create mode 100644 docs/typedocs/classes/LibraryUtils.html create mode 100644 docs/typedocs/classes/MoneroAccount.html create mode 100644 docs/typedocs/classes/MoneroAccountTag.html create mode 100644 docs/typedocs/classes/MoneroAddressBookEntry.html create mode 100644 docs/typedocs/classes/MoneroAltChain.html create mode 100644 docs/typedocs/classes/MoneroBan.html create mode 100644 docs/typedocs/classes/MoneroBlock.html create mode 100644 docs/typedocs/classes/MoneroBlockHeader.html create mode 100644 docs/typedocs/classes/MoneroBlockTemplate.html create mode 100644 docs/typedocs/classes/MoneroCheck.html create mode 100644 docs/typedocs/classes/MoneroCheckReserve.html create mode 100644 docs/typedocs/classes/MoneroCheckTx.html create mode 100644 docs/typedocs/classes/MoneroConnectionManager.html create mode 100644 docs/typedocs/classes/MoneroConnectionManagerListener.html create mode 100644 docs/typedocs/classes/MoneroConnectionSpan.html create mode 100644 docs/typedocs/classes/MoneroDaemon.html create mode 100644 docs/typedocs/classes/MoneroDaemonConfig.html create mode 100644 docs/typedocs/classes/MoneroDaemonInfo.html create mode 100644 docs/typedocs/classes/MoneroDaemonListener.html create mode 100644 docs/typedocs/classes/MoneroDaemonRpc.html create mode 100644 docs/typedocs/classes/MoneroDaemonSyncInfo.html create mode 100644 docs/typedocs/classes/MoneroDaemonUpdateCheckResult.html create mode 100644 docs/typedocs/classes/MoneroDaemonUpdateDownloadResult.html create mode 100644 docs/typedocs/classes/MoneroDestination.html create mode 100644 docs/typedocs/classes/MoneroError.html create mode 100644 docs/typedocs/classes/MoneroFeeEstimate.html create mode 100644 docs/typedocs/classes/MoneroHardForkInfo.html create mode 100644 docs/typedocs/classes/MoneroIncomingTransfer.html create mode 100644 docs/typedocs/classes/MoneroIntegratedAddress.html create mode 100644 docs/typedocs/classes/MoneroKeyImage.html create mode 100644 docs/typedocs/classes/MoneroKeyImageImportResult.html create mode 100644 docs/typedocs/classes/MoneroMessageSignatureResult.html create mode 100644 docs/typedocs/classes/MoneroMinerTxSum.html create mode 100644 docs/typedocs/classes/MoneroMiningStatus.html create mode 100644 docs/typedocs/classes/MoneroMultisigInfo.html create mode 100644 docs/typedocs/classes/MoneroMultisigInitResult.html create mode 100644 docs/typedocs/classes/MoneroMultisigSignResult.html create mode 100644 docs/typedocs/classes/MoneroNetworkType.html create mode 100644 docs/typedocs/classes/MoneroOutgoingTransfer.html create mode 100644 docs/typedocs/classes/MoneroOutput.html create mode 100644 docs/typedocs/classes/MoneroOutputHistogramEntry.html create mode 100644 docs/typedocs/classes/MoneroOutputQuery.html create mode 100644 docs/typedocs/classes/MoneroOutputWallet.html create mode 100644 docs/typedocs/classes/MoneroPeer.html create mode 100644 docs/typedocs/classes/MoneroPruneResult.html create mode 100644 docs/typedocs/classes/MoneroRpcConnection.html create mode 100644 docs/typedocs/classes/MoneroRpcError.html create mode 100644 docs/typedocs/classes/MoneroSubaddress.html create mode 100644 docs/typedocs/classes/MoneroSubmitTxResult.html create mode 100644 docs/typedocs/classes/MoneroSyncResult.html create mode 100644 docs/typedocs/classes/MoneroTransfer.html create mode 100644 docs/typedocs/classes/MoneroTransferQuery.html create mode 100644 docs/typedocs/classes/MoneroTx.html create mode 100644 docs/typedocs/classes/MoneroTxConfig.html create mode 100644 docs/typedocs/classes/MoneroTxPoolStats.html create mode 100644 docs/typedocs/classes/MoneroTxQuery.html create mode 100644 docs/typedocs/classes/MoneroTxSet.html create mode 100644 docs/typedocs/classes/MoneroTxWallet.html create mode 100644 docs/typedocs/classes/MoneroUtils.html create mode 100644 docs/typedocs/classes/MoneroVersion.html create mode 100644 docs/typedocs/classes/MoneroWallet.html create mode 100644 docs/typedocs/classes/MoneroWalletConfig.html create mode 100644 docs/typedocs/classes/MoneroWalletFull.html create mode 100644 docs/typedocs/classes/MoneroWalletKeys.html create mode 100644 docs/typedocs/classes/MoneroWalletListener.html create mode 100644 docs/typedocs/classes/MoneroWalletRpc.html create mode 100644 docs/typedocs/classes/SslOptions.html create mode 100644 docs/typedocs/classes/TaskLooper.html create mode 100644 docs/typedocs/classes/ThreadPool.html create mode 100644 docs/typedocs/enums/ConnectionType.html create mode 100644 docs/typedocs/enums/MoneroKeyImageSpentStatus.html create mode 100644 docs/typedocs/enums/MoneroMessageSignatureType.html create mode 100644 docs/typedocs/enums/MoneroTxPriority.html create mode 100644 docs/typedocs/functions/connectToDaemonRpc.html create mode 100644 docs/typedocs/functions/connectToWalletRpc.html create mode 100644 docs/typedocs/functions/createWalletFull.html create mode 100644 docs/typedocs/functions/createWalletKeys.html create mode 100644 docs/typedocs/functions/getVersion.html create mode 100644 docs/typedocs/functions/openWalletFull.html create mode 100644 docs/typedocs/index.html create mode 100644 docs/typedocs/modules.html diff --git a/docs/ConnectionType.html b/docs/ConnectionType.html deleted file mode 100644 index c2bf08a1b..000000000 --- a/docs/ConnectionType.html +++ /dev/null @@ -1,656 +0,0 @@ - - - - - JSDoc: Class: ConnectionType - - - - - - - - - - -
- -

Class: ConnectionType

- - - - - - -
- -
- -

ConnectionType

- -
Enumerates connection types. - -Based on enums.h in monero-project.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -

Members

- - - -

(static) I2P

- - - - -
- I2P connection type (value=4). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) INVALID

- - - - -
- Invalid connection type (value=0). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) IPV4

- - - - -
- IPV4 connection type (value=1). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) IPV6

- - - - -
- IPV6 connection type (value=2). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) TOR

- - - - -
- TOR connection type (value=3). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - -

Methods

- - - - - - - -

(static) isValid()

- - - - - - -
- Indicates if the given connection type is valid or not. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) validate()

- - - - - - -
- Asserts that the given connection type is valid. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/GenUtils.html b/docs/GenUtils.html deleted file mode 100644 index ca9d3e739..000000000 --- a/docs/GenUtils.html +++ /dev/null @@ -1,14400 +0,0 @@ - - - - - JSDoc: Class: GenUtils - - - - - - - - - - -
- -

Class: GenUtils

- - - - - - -
- -
- -

GenUtils()

- -
Collection of general purpose utilities. - -TODO: could pull in assert and remove these asserts -TODO: needs cleanup as ES6+ utility class
- - -
- -
-
- - - - -

Constructor

- - - -

new GenUtils()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(static) arrToCsv(arr)

- - - - - - -
- Converts the given array to a CSV string. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr - - is a 2-dimensional array of strings
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the CSV string -
- - - - - - - - - - - - - - - -

(static) arrayContains(arr, obj, compareByReference)

- - - - - - -
- Indicates if the given array contains the given object. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr - - -Array.<object> - - - - array that may or may not contain the object
obj - - -object - - - - object to check for inclusion in the array
compareByReference - - -boolean - - - - compare strictly by reference, forgoing deep equality check
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the array contains the object, false otherwise -
- - - - - - - - - - - - - - - -

(static) arraysEqual(arr1, arr2)

- - - - - - -
- Determines if two arrays are equal. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr1 - - is an array to compare
arr2 - - is an array to compare
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the arrays are equal, false otherwise -
- - - - - - - - - - - - - - - -

(static) assertArray(arg, msg)

- - - - - - -
- Asserts that the given argument is an array. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as an array
msg - - is the message to throw if the argument is not an array
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertBase58(arg, msg)

- - - - - - -
- Asserts that the given argument is base58. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as base58
msg - - is the message to throw if the argument is not base58
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertBase64(arg, msg)

- - - - - - -
- Asserts that the given argument is base64. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as base64
msg - - is the message to throw if the argument is not base64
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertBoolean(arg, msg)

- - - - - - -
- Asserts that the given argument is a boolean. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as a boolean
msg - - is the message to throw if the argument is not a boolean
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertDefined(arg, msg)

- - - - - - -
- Asserts that the given argument is defined. Throws an exception if undefined. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert defined
msg - - is the message to throw if arg is undefined (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertEquals(arg1, arg2, msg)

- - - - - - -
- Asserts that the given arguments are equal. Throws an exception if not equal. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg1 - - is an argument to assert as equal
arg2 - - is an argument to assert as equal
msg - - is the message to throw if the arguments are not equal
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertFalse(bool, msg)

- - - - - - -
- Asserts that the given boolean is false. Throws an exception if not a boolean or true. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
bool - - is the boolean to assert false
msg - - is the message to throw if bool is true (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertFunction(arg, msg)

- - - - - - -
- Asserts that the given argument is a static. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as a static
msg - - is the message to throw if the argument is not a static
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertHex(arg, msg)

- - - - - - -
- Asserts that the given argument is hex. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as hex
msg - - is the message to throw if the argument is not hex
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertInitialized(arg, msg)

- - - - - - -
- Asserts that the given argument is initialized. Throws an exception if not initialized. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as initialized
msg - - is the message to throw if arg is not initialized (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertInt(arg, msg)

- - - - - - -
- Asserts that the given argument is an integer. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as an integer
msg - - is the message to throw if the argument is not an integer
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertNotEquals(arg1, arg2, msg)

- - - - - - -
- Asserts that the given arguments are not equal. Throws an exception if equal. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg1 - - is an argument to assert as not equal
arg2 - - is an argument to assert as not equal
msg - - is the message to throw if the arguments are equal
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertNotNull(arg, msg)

- - - - - - -
- Asserts that the given argument is not null. Throws an exception if null. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert not null
msg - - is the message to throw if arg is null (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertNull(arg, msg)

- - - - - - -
- Asserts that the given argument is null. Throws an exception if not null. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert null
msg - - is the message to throw if arg is not null (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertNumber(arg, msg)

- - - - - - -
- Asserts that the given argument is a number. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as a number
msg - - is the message to throw if the argument is not a number
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertObject(arg, obj, msg)

- - - - - - -
- Asserts that the given argument is an object with the given name. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to test
obj - - is an object to assert arg instanceof obj (optional)
msg - - is the message to throw if the argument is not the specified object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertString(arg, msg)

- - - - - - -
- Asserts that the given argument is a string. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as a string
msg - - is the message to throw if the argument is not a string
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertTrue(bool, msg)

- - - - - - -
- Asserts that the given boolean is true. Throws an exception if not a boolean or false. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
bool - - is the boolean to assert true
msg - - is the message to throw if bool is false (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertUndefined(arg, msg)

- - - - - - -
- Asserts that the given argument is undefined. Throws an exception if defined. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert undefined
msg - - is the message to throw if arg is defined (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) assertUninitialized(arg, msg)

- - - - - - -
- Asserts that the given argument is uninitialized. Throws an exception if initialized. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to assert as uninitialized
msg - - is the message to throw if arg is initialized (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) buildHtmlDocument(content)

- - - - - - -
- Manually builds an HTML document string. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
content - - specifies optional document content - content.div is a pre-existing div to stringify and add to the body - content.title is the title of the new tab - content.dependencyPaths specifies paths to js, css, or img paths - content.internalCss is css to embed in the html document - content.metas are meta elements with keys/values to include
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- str is the document string -
- - - - - - - - - - - - - - - -

(static) copyArray(arr)

- - - - - - -
- Copies the given array. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr - - is the array to copy
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- a copy of the given array -
- - - - - - - - - - - - - - - -

(static) copyProperties(obj)

- - - - - - -
- Copies properties in the given object to a new object. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
obj - - is object to copy properties for
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- a new object with properties copied from the given object -
- - - - - - - - - - - - - - - -

(static) countNonWhitespaceCharacters(str)

- - - - - - -
- Counts the number of non-whitespace characters in the given string. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
str - - is the string to count the number of non-whitespace characters in
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- int is the number of non-whitespace characters in the given string -
- - - - - - - - - - - - - - - -

(static) csvToArr(csv)

- - - - - - -
- Converts a CSV string to a 2-dimensional array of strings. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
csv - - is the CSV string to convert
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- a 2-dimensional array of strings -
- - - - - - - - - - - - - - - -

(static) deleteProperties(obj)

- - - - - - -
- Deletes all properties in the given object. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
obj - - is the object to delete properties from
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) deleteUndefinedKeys(obj)

- - - - - - -
- Deletes properties from the object that are undefined. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
obj - - is the object to delete undefined keys from
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) equals(arg1, arg2)

- - - - - - -
- Determines if two arguments are deep equal. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg1 - - is an argument to compare
arg2 - - is an argument to compare
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the arguments are deep equals, false otherwise -
- - - - - - - - - - - - - - - -

(static) fail(msg)

- - - - - - -
- Throws an exception with the given message. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
msg - - defines the message to throw the exception with (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getCombinations(arr, combinationSize)

- - - - - - -
- Returns combinations of the given array of the given size. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr - - is the array to get combinations from
combinationSize - - specifies the size of each combination
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getDownloadableA(name, contents)

- - - - - - -
- Gets an 'a' element that is downloadable when clicked. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
name - - is the name of the file to download
contents - - are the string contents of the file to download
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- 'a' dom element with downloadable file -
- - - - - - - - - - - - - - - -

(static) getIEVersion()

- - - - - - -
- Gets the IE version number. - -Credit: https://stackoverflow.com/questions/19999388/check-if-user-is-using-ie-with-jquery/21712356#21712356 -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the IE version number or null if not IE -
- - - - - - - - - - - - - - - -

(static) getImages(paths, onDone(err,)

- - - - - - -
- Fetches the given list of images. - -Prerequisite: async.js. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
paths - - are the paths to the images to fetch
onDone(err, - - images) is called when done
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getIndent(length) → {string}

- - - - - - -
- Returns a string indentation of the given length; -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
length - - is the length of the indentation
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is an indentation string of the given length -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(static) getIndices(size)

- - - - - - -
- Returns an array of indices of the given size. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
size - - specifies the size to get indices for
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- array of the given size with indices starting at 0 -
- - - - - - - - - - - - - - - -

(static) getInternalStyleSheet()

- - - - - - -
- Returns the document's first stylesheet which has no href. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- StyleSheet is the internal stylesheet -
- - - - - - - - - - - - - - - -

(static) getInternalStyleSheetText()

- - - - - - -
- Returns the document's internal stylesheet as text. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- str is the document's internal stylesheet -
- - - - - - - - - - - - - - - -

(static) getLines(str, string[)

- - - - - - -
- Returns lines separated by newlines from the given string. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
str - - is the string to get lines from
string[ - - are the lines separated by newlines within the string
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getOuterHtml(node)

- - - - - - -
- Returns the given node's outer HTML. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
node - - is the node to get outer HTML for
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the outer HTML of the given node -
- - - - - - - - - - - - - - - -

(static) getParameterByName(name, url)

- - - - - - -
- Gets a parameter value. - -Credit: https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
name - - is the name of the parameter to get the value of
url - - is a URL to get the parameter from, uses the window's current href if not given
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the parameter's value -
- - - - - - - - - - - - - - - -

(static) getPowerSet(arr)

- - - - - - -
- Returns the power set of the given array. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr - - is the array to get the power set of
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- [][] is the power set of the given array -
- - - - - - - - - - - - - - - -

(static) getPowerSetOfLength(arr, size)

- - - - - - -
- Returns the power set of the given array whose elements are the given size. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr - - is the array to get the power set of
size - - is the required size of the elements within the power set -returns [][] is the power set of the given array whose elements are the given size
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getRandomInt(min, max)

- - - - - - -
- Gets a non-cryptographically secure random number within a given range. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
min - - is the minimum range of the int to generate, inclusive
max - - is the maximum range of the int to generate, inclusive - -Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getRandomInts(min, max, count)

- - - - - - -
- Gets random ints. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
min - - is the minimum range of the ints to generate, inclusive
max - - is the maximum range of the ints to generate, inclusive
count - - is the number of random ints to get
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getUUID()

- - - - - - -
- Generates a v4 UUID. - -Source: https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getUniqueRandomInts(min, max, count)

- - - - - - -
- Gets a given number of unique random ints within a range. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
min - - is the minimum range of the ints to generate, inclusive
max - - is the maximum range of the ints to generate, inclusive
count - - is the number of unique random ints to get
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getWhitespaceTokens(str)

- - - - - - -
- Returns tokens separated by whitespace from the given string. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
str - - is the string to get tokens from
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- string[] are the tokens separated by whitespace within the string -
- - - - - - - - - - - - - - - -

(static) hasWhitespace(str)

- - - - - - -
- Indicates if the given string contains whitespace. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
str - - is the string to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the string contains whitespace, false otherwise -
- - - - - - - - - - - - - - - -

(static) imgToDataUrl(img, quality)

- - - - - - -
- Converts the given image to a base64 encoded data url. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
img - - is the image to convert
quality - - is a number between 0 and 1 specifying the image quality
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) inheritsFrom(child, parent)

- - - - - - -
- Sets the child's prototype to the parent's prototype. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
child - - is the child class
parent - - is the parent class
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) initPolyfills()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) invoke()

- - - - - - -
- Invokes functions with arguments. - -arguments[0] is assumed to be an array of functions to invoke -arguments[1...n] are args to invoke the functions with -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) isArray(arg)

- - - - - - -
- Indicates if the given argument is an array. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to test as being an array
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the argument is an array, false otherwise -
- - - - - - - - - - - - - - - -

(static) isBase32()

- - - - - - -
- Determines if the given string is base32. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) isBase58()

- - - - - - -
- Determines if the given string is base58. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) isBase64()

- - - - - - -
- Determines if the given string is base64. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) isBoolean(arg)

- - - - - - -
- Determines if the given argument is a boolean. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to test as being a boolean
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the argument is a boolean, false otherwise -
- - - - - - - - - - - - - - - -

(static) isBrowser() → {boolean}

- - - - - - -
- Indicates if the current environment is a browser. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the environment is a browser, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(static) isCsvFile(file)

- - - - - - -
- Determines if the given file is a csv file. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
file - - is a file
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given file is a csv file, false otherwise -
- - - - - - - - - - - - - - - -

(static) isDefined(arg)

- - - - - - -
- Indicates if the given argument is defined. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the arg to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given arg is defined, false otherwise -
- - - - - - - - - - - - - - - -

(static) isFirefox() → {boolean}

- - - - - - -
- Indicates if the current environment is a firefox-based browser. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the environment is a firefox-based browser, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(static) isFunction(arg)

- - - - - - -
- Determines if the given argument is a static. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to test as being a static
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the argument is a static, false otherwise -
- - - - - - - - - - - - - - - -

(static) isHex(str)

- - - - - - -
- Indicates if the given argument is a hexidemal string. - -Credit: https://github.com/roryrjb/is-hex/blob/master/is-hex.js. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
str - - is the string to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given string is hexidecimal, false otherwise -
- - - - - - - - - - - - - - - -

(static) isImageAccessible(url, timeout, onDone(bool))

- - - - - - -
- Determines if the image at the given URL is accessible. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
url - - is the url to an image
timeout - - is the maximum time to wait
onDone(bool) - - when the image is determined to be accessible or not
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) isInitialized(arg)

- - - - - - -
- Indicates if the given arg is initialized. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the arg to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given arg is initialized, false otherwise -
- - - - - - - - - - - - - - - -

(static) isInt(arg)

- - - - - - -
- Indicates if the given argument is an integer. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given argument is an integer, false otherwise -
- - - - - - - - - - - - - - - -

(static) isJsonFile(file)

- - - - - - -
- Determines if the given file is a json file. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
file - - is a file
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given file is a json file, false otherwise -
- - - - - - - - - - - - - - - -

(static) isLowerCase(str, true)

- - - - - - -
- Determines if all alphabet characters in the given string are lower case. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
str - - is the string to test
true - - if the string is lower case, false otherwise
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) isNewline(char)

- - - - - - -
- Indicates if the given character is a newline. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
char - - is the character to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given character is a newline, false otherwise -
- - - - - - - - - - - - - - - -

(static) isNumber(arg)

- - - - - - -
- Indicates if the given argument is a number. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the argument is a number, false otherwise -
- - - - - - - - - - - - - - - -

(static) isObject(arg, obj)

- - - - - - -
- Indicates if the given argument is an object and optionally if it has the given constructor name. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to test
obj - - is an object to test arg instanceof obj (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given argument is an object and optionally has the given constructor name -
- - - - - - - - - - - - - - - -

(static) isString(arg)

- - - - - - -
- Indicates if the given argument is a string. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the argument to test as being a string
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the argument is a string, false otherwise -
- - - - - - - - - - - - - - - -

(static) isTxtFile(file)

- - - - - - -
- Determines if the given file is a txt file. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
file - - is a file
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given file is a txt file, false otherwise -
- - - - - - - - - - - - - - - -

(static) isUndefined(arg)

- - - - - - -
- Indicates if the given argument is undefined. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the arg to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given arg is undefined, false otherwise -
- - - - - - - - - - - - - - - -

(static) isUninitialized(arg)

- - - - - - -
- Indicates if the given arg is uninitialized. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arg - - is the arg to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given arg is uninitialized, false otherwise -
- - - - - - - - - - - - - - - -

(static) isUpperCase(str)

- - - - - - -
- Determines if all alphabet characters in the given string are upper case. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
str - - is the string to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the string is upper case, false otherwise -
- - - - - - - - - - - - - - - -

(static) isWhitespace(char)

- - - - - - -
- Indicates if the given character is whitespace. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
char - - is the character to test
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given character is whitespace, false otherwise -
- - - - - - - - - - - - - - - -

(static) isZipFile(file)

- - - - - - -
- Determines if the given file is a zip file. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
file - - is a file
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the given file is a zip file, false otherwise -
- - - - - - - - - - - - - - - -

(async, static) killProcess(process, signal) → {Promise.<(number|undefined)>}

- - - - - - -
- Kill the given nodejs child process. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
process - - -process - - - - the nodejs child process to kill
signal - - -string -| - -undefined - - - - the kill signal, e.g. SIGTERM, SIGKILL, SIGINT (default)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the exit code from killing the process -
- - - -
-
- Type -
-
- -Promise.<(number|undefined)> - - -
-
- - - - - - - - - - - - - -

(static) kvLine(key, value, indent, newline, ignoreUndefined) → {string}

- - - - - - -
- Returns a human-friendly key value line. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
key - - - - is the key
value - - - - is the value
indent - - - - 0 - - indents the line
newline - - - - true - - specifies if the string should be terminated with a newline or not
ignoreUndefined - - - - true - - specifies if undefined values should return an empty string
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the human-friendly key value line -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(static) listify(arrOrElem)

- - - - - - -
- Listifies the given argument. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arrOrElem - - is an array or an element in the array
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- an array which is the given arg if it's an array or an array with the given arg as an element -
- - - - - - - - - - - - - - - -

(static) newWindow(content, onLoad(err,)

- - - - - - -
- Opens the given div in a new window. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
content - - specifies optional window content - content.div is a pre-existing div to stringify and add to the body - content.title is the title of the new tab - content.dependencyPaths specifies paths to js, css, or img paths - content.internalCss is css to embed in the html document - content.metas are meta elements with keys/values to include
onLoad(err, - - window) is invoked with a reference to the window when available
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) normalizeUri(uri) → {string}

- - - - - - -
- Normalize a URI. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - the URI to normalize
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the normalized URI -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(static) objectsEqual(map1, map2)

- - - - - - -
- Determines if two objects are deep equal. - -Undefined values are considered equal to non-existent keys. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
map1 - - is a map to compare
map2 - - is a map to compare
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the maps have identical keys and values, false otherwise -
- - - - - - - - - - - - - - - -

(static) printStackTrace(msg)

- - - - - - -
- Print the current stack trace. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
msg - - -string - - - - optional message to print with the trace
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) reconcile(val1, val2, config, errMsg)

- - - - - - -
- Reconciles two values. - -TODO: remove custom error message -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
val1 - - is a value to reconcile
val2 - - is a value to reconcile
config - - specifies reconciliation configuration - config.resolveDefined uses defined value if true or undefined, undefined if false - config.resolveTrue uses true over false if true, false over true if false, must be equal if undefined - config.resolveMax uses max over min if true, min over max if false, must be equal if undefined
errMsg - - is the error message to throw if the values cannot be reconciled (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the reconciled value if reconcilable, throws error otherwise -
- - - - - - - - - - - - - - - -

(static) remove(arr, val)

- - - - - - -
- Removes every instance of the given value from the given array. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr - - is the array to remove the value from
val - - is the value to remove from the array
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the value is found and removed, false otherwise -
- - - - - - - - - - - - - - - -

(static) safeSet(obj, getFn, setFn, val, config, errMsg)

- - - - - - -
- Sets the given value ensuring a previous value is not overwritten. - -TODO: remove for portability because function passing not supported in other languages, use reconcile only -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
obj - - is the object to invoke the getter and setter on
getFn - - gets the current value
setFn - - sets the current value
val - - is the value to set iff it does not overwrite a previous value
config - - specifies reconciliation configuration - config.resolveDefined uses defined value if true or undefined, undefined if false - config.resolveTrue uses true over false if true, false over true if false, must be equal if undefined - config.resolveMax uses max over min if true, min over max if false, must be equal if undefined
errMsg - - is the error message to throw if the values cannot be reconciled (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) shuffle()

- - - - - - -
- Randomize array element order in-place using Durstenfeld shuffle algorithm. - -Credit: https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) sort(the)

- - - - - - -
- Sorts an array by natural ordering. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
the - - array to sort
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) strContains(str, substring)

- - - - - - -
- Indicates if the given string contains the given substring. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
str - - is the string to search for a substring
substring - - is the substring to searchin within the string
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the substring is within the string, false otherwise -
- - - - - - - - - - - - - - - -

(static) stringifyBIs(str) → {string}

- - - - - - -
- Replace big integers (16 or more consecutive digits) with strings in order -to preserve numeric precision. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
str - - -string - - - - is the string to be modified
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the modified string with big numbers converted to strings -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(static) toLowerCaseArray(arr)

- - - - - - -
- Returns a copy of the given array where each element is lowercase. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr - - is the array to convert to lowercase
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- a copy of the given array where each element is lowercase -
- - - - - - - - - - - - - - - -

(static) toUniqueArray(arr)

- - - - - - -
- Returns a new array containing unique elements of the given array. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
arr - - is the array to return unique elements from
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- a new array with the given array's unique elements -
- - - - - - - - - - - - - - - -

(async, static) waitFor(durationMs)

- - - - - - -
- Wait for the duration. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
durationMs - - -number - - - - the duration to wait for in milliseconds
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/HttpClient.html b/docs/HttpClient.html deleted file mode 100644 index 35e084bd9..000000000 --- a/docs/HttpClient.html +++ /dev/null @@ -1,786 +0,0 @@ - - - - - JSDoc: Class: HttpClient - - - - - - - - - - -
- -

Class: HttpClient

- - - - - - -
- -
- -

HttpClient

- -
Handle HTTP requests with a uniform interface.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(static) digestAuthRequest()

- - - - - - -
- Modification of digest auth request by @inorganik. - -Dependent on CryptoJS MD5 hashing: http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js - -MIT licensed. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) request(request) → {object|string|object|Uint8Array|number|String|object}

- - - - - - -
-

Make a HTTP request.

-

- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
request - - -object - - - - configures the request to make -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
method - - -string - - - - HTTP method ("GET", "PUT", "POST", "DELETE", etc)
uri - - -string - - - - uri to request
body - - -string -| - -object -| - -Uint8Array - - - - request body
username - - -string - - - - username to authenticate the request (optional)
password - - -string - - - - password to authenticate the request (optional)
headers - - -object - - - - headers to add to the request (optional)
requestApi - - -string - - - - one of "fetch" or "xhr" (default "fetch")
resolveWithFullResponse - - -boolean - - - - return full response if true, else body only (default false)
rejectUnauthorized - - -boolean - - - - whether or not to reject self-signed certificates (default true)
timeout - - -number - - - - maximum time allowed in milliseconds
proxyToWorker - - -number - - - - proxy request to worker thread
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
-
    -
  • -
    - response - the response object -
    - - - -
    -
    - Type -
    -
    - -object - - -
    -
    -
  • - -
  • -
    - response.body - the response body -
    - - - -
    -
    - Type -
    -
    - -string -| - -object -| - -Uint8Array - - -
    -
    -
  • - -
  • -
    - response.statusCode - the response code -
    - - - -
    -
    - Type -
    -
    - -number - - -
    -
    -
  • - -
  • -
    - response.statusText - the response message -
    - - - -
    -
    - Type -
    -
    - -String - - -
    -
    -
  • - -
  • -
    - response.headers - the response headers -
    - - - -
    -
    - Type -
    -
    - -object - - -
    -
    -
  • -
- - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/LibraryUtils.html b/docs/LibraryUtils.html deleted file mode 100644 index 7c1ce4e25..000000000 --- a/docs/LibraryUtils.html +++ /dev/null @@ -1,1956 +0,0 @@ - - - - - JSDoc: Class: LibraryUtils - - - - - - - - - - -
- -

Class: LibraryUtils

- - - - - - -
- -
- -

LibraryUtils

- -
Collection of helper utilities for the library.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(static) deserializeError()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) getLogLevel() → {int}

- - - - - - -
- Get the library's log level. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the library's log level -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async, static) getWasmMemoryUsed() → {int}

- - - - - - -
- Get the total memory used by WebAssembly. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the total memory used by WebAssembly -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(static) getWasmModule()

- - - - - - -
- Get the WebAssembly module in the current context (nodejs, browser main thread or worker). -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) getWorker() → {Worker}

- - - - - - -
- Get a singleton instance of a worker to share. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- a worker to share among wallet instances -
- - - -
-
- Type -
-
- -Worker - - -
-
- - - - - - - - - - - - - -

(async, static) invokeWorker(objectId, fnName, args) → {any}

- - - - - - -
- Invoke a worker function and get the result with error handling. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
objectId - - -string - - - - identifies the worker object to invoke (default random id)
fnName - - -string - - - - is the name of the function to invoke
args - - -Array.<any> - - - - are function arguments to invoke with
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- resolves with response payload from the worker or an error -
- - - -
-
- Type -
-
- -any - - -
-
- - - - - - - - - - - - - -

(static) isRejectUnauthorized(fnId)

- - - - - - -
- Indicate if unauthorized requests should be rejected. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
fnId - - -string - - - - uniquely identifies the function
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) loadFullModule()

- - - - - - -
- Load the WebAssembly full module with caching. - -The full module is a superset of the keys module and overrides it. - -TODO: this is separate static function from loadKeysModule() because webpack cannot bundle worker using runtime param for conditional import -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) loadKeysModule()

- - - - - - -
- Load the WebAssembly keys module with caching. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) log(level, msg)

- - - - - - -
- Log a message. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
level - - -int - - - - log level of the message
msg - - -string - - - - message to log
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) serializeError()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) setLogLevel(level)

- - - - - - -
- Set the library's log level with 0 being least verbose. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
level - - -int - - - - the library's log level
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) setRejectUnauthorizedFn(fnId, fn)

- - - - - - -
- Register a function by id which informs if unauthorized requests (e.g. -self-signed certificates) should be rejected. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
fnId - - -string - - - - unique identifier for the function
fn - - -function - - - - function to inform if unauthorized requests should be rejected
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) setWorkerDistPath(workerDistPath)

- - - - - - -
- Set the path to load the worker. Defaults to "/monero_web_worker.js" in the browser -and "./MoneroWebWorker.js" in node. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
workerDistPath - - -string - - - - path to load the worker
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) terminateWorker()

- - - - - - -
- Terminate monero-javascript's singleton worker. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroAccount.html b/docs/MoneroAccount.html deleted file mode 100644 index 261b35ba6..000000000 --- a/docs/MoneroAccount.html +++ /dev/null @@ -1,1350 +0,0 @@ - - - - - JSDoc: Class: MoneroAccount - - - - - - - - - - -
- -

Class: MoneroAccount

- - - - - - -
- -
- -

MoneroAccount()

- -
Monero account model.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroAccount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getBalance()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrimaryAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubaddresses()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTag()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUnlockedBalance()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBalance()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrimaryAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddresses()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTag()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUnlockedBalance()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroAccountTag.html b/docs/MoneroAccountTag.html deleted file mode 100644 index 0b12a74f1..000000000 --- a/docs/MoneroAccountTag.html +++ /dev/null @@ -1,678 +0,0 @@ - - - - - JSDoc: Class: MoneroAccountTag - - - - - - - - - - -
- -

Class: MoneroAccountTag

- - - - - - -
- -
- -

MoneroAccountTag()

- -
Represents an account tag.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroAccountTag()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAccountIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLabel()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTag()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAccountIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLabel()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTag()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroAddressBookEntry.html b/docs/MoneroAddressBookEntry.html deleted file mode 100644 index 5a9e2ba6b..000000000 --- a/docs/MoneroAddressBookEntry.html +++ /dev/null @@ -1,930 +0,0 @@ - - - - - JSDoc: Class: MoneroAddressBookEntry - - - - - - - - - - -
- -

Class: MoneroAddressBookEntry

- - - - - - -
- -
- -

MoneroAddressBookEntry()

- -
Monero address book entry model
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroAddressBookEntry()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDescription()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDescription()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroAltChain.html b/docs/MoneroAltChain.html deleted file mode 100644 index caa7b103c..000000000 --- a/docs/MoneroAltChain.html +++ /dev/null @@ -1,1098 +0,0 @@ - - - - - JSDoc: Class: MoneroAltChain - - - - - - - - - - -
- -

Class: MoneroAltChain

- - - - - - -
- -
- -

MoneroAltChain()

- -
Models an alternative chain seen by the node.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroAltChain()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getBlockHashes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLength()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMainChainParentBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBlockHashes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLength()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMainChainParentBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroBan.html b/docs/MoneroBan.html deleted file mode 100644 index c87997d8f..000000000 --- a/docs/MoneroBan.html +++ /dev/null @@ -1,930 +0,0 @@ - - - - - JSDoc: Class: MoneroBan - - - - - - - - - - -
- -

Class: MoneroBan

- - - - - - -
- -
- -

MoneroBan()

- -
Monero banhammer.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroBan()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSeconds()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isBanned()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsBanned()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSeconds()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroBlock.html b/docs/MoneroBlock.html deleted file mode 100644 index 585c5a036..000000000 --- a/docs/MoneroBlock.html +++ /dev/null @@ -1,4600 +0,0 @@ - - - - - JSDoc: Class: MoneroBlock - - - - - - - - - - -
- -

Class: MoneroBlock

- - - - - - -
- -
- -

MoneroBlock(state, txType)

- -
Models a Monero block in the blockchain.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroBlock(state, txType)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroBlock -| - -MoneroBlockHeader -| - -object - - - - is existing state to initialize from (optional)
txType - - -MoneroBlock.DeserializationType - - - - informs the tx deserialization type (MoneroTx, MoneroTxWallet, MoneroTxQuery)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCumulativeDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDepth()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight() → {number}

- - - - - - -
- Return the block's height which is the total number of blocks that have occurred before. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the block's height -
- - - -
-
- Type -
-
- -number - - -
-
- - - - - - - - - - - - - -

getHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLongTermWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMajorVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMinerTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMinerTxHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMinorVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNonce()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOrphanStatus()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPowHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrevHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReward()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTxHashes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCumulativeDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDepth()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight(height) → {MoneroBlockHeader}

- - - - - - -
- Set the block's height which is the total number of blocks that have occurred before. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -number - - - - is the block's height to set
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- a reference to this header for chaining -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

setHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLongTermWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMajorVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMinerTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMinerTxHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMinorVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNonce()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOrphanStatus()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPowHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrevHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReward()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTxHashes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroBlockHeader.html b/docs/MoneroBlockHeader.html deleted file mode 100644 index 621d2ce88..000000000 --- a/docs/MoneroBlockHeader.html +++ /dev/null @@ -1,3691 +0,0 @@ - - - - - JSDoc: Class: MoneroBlockHeader - - - - - - - - - - -
- -

Class: MoneroBlockHeader

- - - - - - -
- -
- -

MoneroBlockHeader(state)

- -
Models a Monero block header which contains information about the block.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroBlockHeader(state)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroBlockHeader -| - -object - - - - is existing state to initialize from (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCumulativeDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDepth()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight() → {number}

- - - - - - -
- Return the block's height which is the total number of blocks that have occurred before. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the block's height -
- - - -
-
- Type -
-
- -number - - -
-
- - - - - - - - - - - - - -

getLongTermWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMajorVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMinerTxHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMinorVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNonce()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOrphanStatus()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPowHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrevHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReward()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCumulativeDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDepth()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight(height) → {MoneroBlockHeader}

- - - - - - -
- Set the block's height which is the total number of blocks that have occurred before. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -number - - - - is the block's height to set
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- a reference to this header for chaining -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

setLongTermWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMajorVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMinerTxHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMinorVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNonce()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOrphanStatus()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPowHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrevHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReward()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroBlockTemplate.html b/docs/MoneroBlockTemplate.html deleted file mode 100644 index bedf6115d..000000000 --- a/docs/MoneroBlockTemplate.html +++ /dev/null @@ -1,2022 +0,0 @@ - - - - - JSDoc: Class: MoneroBlockTemplate - - - - - - - - - - -
- -

Class: MoneroBlockTemplate

- - - - - - -
- -
- -

MoneroBlockTemplate()

- -
Monero block template to mine.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroBlockTemplate()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getBlockHashingBlob()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBlockTemplateBlob()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getExpectedReward()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNextSeedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrevHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReservedOffset()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSeedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSeedHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBlockHashingBlob()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBlockTemplateBlob()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setExpectedReward()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNextSeedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrevHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReservedOffset()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSeedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSeedHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroCheck.html b/docs/MoneroCheck.html deleted file mode 100644 index a7f6f5b8a..000000000 --- a/docs/MoneroCheck.html +++ /dev/null @@ -1,342 +0,0 @@ - - - - - JSDoc: Class: MoneroCheck - - - - - - - - - - -
- -

Class: MoneroCheck

- - - - - - -
- -
- -

MoneroCheck()

- -
Base class for results from checking a transaction or reserve proof.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroCheck()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

isGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroCheckReserve.html b/docs/MoneroCheckReserve.html deleted file mode 100644 index 765e4786c..000000000 --- a/docs/MoneroCheckReserve.html +++ /dev/null @@ -1,783 +0,0 @@ - - - - - JSDoc: Class: MoneroCheckReserve - - - - - - - - - - -
- -

Class: MoneroCheckReserve

- - - - - - -
- -
- -

MoneroCheckReserve()

- -
Results from checking a reserve proof.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroCheckReserve()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getTotalAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUnconfirmedSpentAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTotalAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUnconfirmedSpentAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroCheckTx.html b/docs/MoneroCheckTx.html deleted file mode 100644 index 72f62ba0b..000000000 --- a/docs/MoneroCheckTx.html +++ /dev/null @@ -1,951 +0,0 @@ - - - - - JSDoc: Class: MoneroCheckTx - - - - - - - - - - -
- -

Class: MoneroCheckTx

- - - - - - -
- -
- -

MoneroCheckTx()

- -
Results from checking a transaction key.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroCheckTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getNumConfirmations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReceivedAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

inTxPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInTxPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumConfirmations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReceivedAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroConnectionManager.html b/docs/MoneroConnectionManager.html deleted file mode 100644 index cace26b1c..000000000 --- a/docs/MoneroConnectionManager.html +++ /dev/null @@ -1,3851 +0,0 @@ - - - - - JSDoc: Class: MoneroConnectionManager - - - - - - - - - - -
- -

Class: MoneroConnectionManager

- - - - - - -
- -
- -

MoneroConnectionManager(proxyToWorker)

- -

Manages a collection of prioritized connections to daemon or wallet RPC endpoints.

- -

Example usage:

- - -// imports
-const monerojs = require("monero-javascript");
-const MoneroRpcConnection = monerojs.MoneroRpcConnection;
-const MoneroConnectionManager = monerojs.MoneroConnectionManager;
-const MoneroConnectionManagerListener = monerojs.MoneroConnectionManagerListener;

- -// create connection manager
-let connectionManager = new MoneroConnectionManager();

- -// add managed connections with priorities
-connectionManager.addConnection(new MoneroRpcConnection("http://localhost:38081").setPriority(1)); // use localhost as first priority
-connectionManager.addConnection(new MoneroRpcConnection("http://example.com")); // default priority is prioritized last

- -// set current connection
-connectionManager.setConnection(new MoneroRpcConnection("http://foo.bar", "admin", "password")); // connection is added if new

- -// check connection status
-await connectionManager.checkConnection();
-console.log("Connection manager is connected: " + connectionManager.isConnected());
-console.log("Connection is online: " + connectionManager.getConnection().isOnline());
-console.log("Connection is authenticated: " + connectionManager.getConnection().isAuthenticated());

- -// receive notifications of any changes to current connection
-connectionManager.addListener(new class extends MoneroConnectionManagerListener {
-   onConnectionChanged(connection) {
-     console.log("Connection changed to: " + connection);
-   }
-});

- -// start polling for best connection every 10 seconds and automatically switch
-connectionManager.startPolling(10000);

- -// automatically switch to best available connection if disconnected
-connectionManager.setAutoSwitch(true);

- -// get best available connection in order of priority then response time
-let bestConnection = await connectionManager.getBestAvailableConnection();

- -// check status of all connections
-await connectionManager.checkConnections();

- -// get connections in order of current connection, online status from last check, priority, and name
-let connections = connectionManager.getConnections();

- -// clear connection manager
-connectionManager.clear(); -
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroConnectionManager(proxyToWorker)

- - - - - - -
- Construct a connection manager. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
proxyToWorker - - -boolean - - - - configure all connections to proxy to worker (default true)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -

Members

- - - -

PollType

- - - - -
- Specify behavior when polling. - -One of PRIORITIZED (poll connections in order of priority until connected; default), CURRENT (poll current connection), or ALL (poll all connections). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - -

Methods

- - - - - - - -

(async) addConnection(uriOrConnection) → {Promise.<MoneroConnectionManager>}

- - - - - - -
- Add a connection. The connection may have an elevated priority for this manager to use. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uriOrConnection - - -string -| - -MoneroRpcConnection - - - - uri or connection to add
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -Promise.<MoneroConnectionManager> - - -
-
- - - - - - - - - - - - - -

addListener(listener) → {MoneroConnectionManager}

- - - - - - -
- Add a listener to receive notifications when the connection changes. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroConnectionManagerListener - - - - the listener to add
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -MoneroConnectionManager - - -
-
- - - - - - - - - - - - - -

(async) checkConnection() → {Promise.<MoneroConnectionManager>}

- - - - - - -
- Check the current connection. If disconnected and auto switch enabled, switches to best available connection. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -Promise.<MoneroConnectionManager> - - -
-
- - - - - - - - - - - - - -

checkConnectionPromises() → {Array.<Promise>}

- - - - - - -
- Check all managed connections, returning a promise for each connection check. -Does not auto switch if disconnected. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- a promise for each connection in the order of getConnections(). -
- - - -
-
- Type -
-
- -Array.<Promise> - - -
-
- - - - - - - - - - - - - -

(async) checkConnections() → {Promise.<MoneroConnectionManager>}

- - - - - - -
- Check all managed connections. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -Promise.<MoneroConnectionManager> - - -
-
- - - - - - - - - - - - - -

(async) clear() → {Promise.<MoneroConnectonManager>}

- - - - - - -
- Remove all connections. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -Promise.<MoneroConnectonManager> - - -
-
- - - - - - - - - - - - - -

(async) disconnect() → {Promise.<MoneroConnectionManager>}

- - - - - - -
- Disconnect from the current connection. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -Promise.<MoneroConnectionManager> - - -
-
- - - - - - - - - - - - - -

getAutoSwitch() → {boolean}

- - - - - - -
- Get if auto switch is enabled or disabled. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if auto switch enabled, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) getBestAvailableConnection(excludedConnections) → {Promise.<MoneroRpcConnection>}

- - - - - - -
- Get the best available connection in order of priority then response time. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
excludedConnections - - -Array.<MoneroRpcConnection> - - - - connections to be excluded from consideration (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the best available connection in order of priority then response time, undefined if no connections available -
- - - -
-
- Type -
-
- -Promise.<MoneroRpcConnection> - - -
-
- - - - - - - - - - - - - -

getConnection() → {MoneroRpcConnection}

- - - - - - -
- Get the current connection. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the current connection or undefined if no connection set -
- - - -
-
- Type -
-
- -MoneroRpcConnection - - -
-
- - - - - - - - - - - - - -

getConnectionByUri(uri) → {MoneroRpcConnection}

- - - - - - -
- Get a connection by URI. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - is the URI of the connection to get
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the connection with the URI or undefined if no connection with the URI exists -
- - - -
-
- Type -
-
- -MoneroRpcConnection - - -
-
- - - - - - - - - - - - - -

getConnections() → {Array.<MoneroRpcConnection>}

- - - - - - -
- Get all connections in order of current connection (if applicable), online status, priority, and name. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the list of sorted connections -
- - - -
-
- Type -
-
- -Array.<MoneroRpcConnection> - - -
-
- - - - - - - - - - - - - -

getListeners() → {Array.<MoneroConnectionManagerListener>}

- - - - - - -
- Get all listeners. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- all listeners -
- - - -
-
- Type -
-
- -Array.<MoneroConnectionManagerListener> - - -
-
- - - - - - - - - - - - - -

(async) getPeerConnections() → {Promise.<Array.<MoneroRpcConnection>>}

- - - - - - -
- Collect connectable peers of the managed connections. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- connectable peers -
- - - -
-
- Type -
-
- -Promise.<Array.<MoneroRpcConnection>> - - -
-
- - - - - - - - - - - - - -

getTimeout() → {int}

- - - - - - -
- Get the request timeout. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the request timeout before a connection is considered offline -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

hasConnection(uri) → {boolean}

- - - - - - -
- Indicates if this manager has a connection with the given URI. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - URI of the connection to check
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if this manager has a connection with the given URI, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

isConnected() → {boolean|undefined}

- - - - - - -
- Indicates if the connection manager is connected to a node. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the current connection is set, online, and not unauthenticated, undefined if unknown, false otherwise -
- - - -
-
- Type -
-
- -boolean -| - -undefined - - -
-
- - - - - - - - - - - - - -

(async) removeConnection(uri) → {Promise.<MoneroConnectionManager>}

- - - - - - -
- Remove a connection. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - of the the connection to remove
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -Promise.<MoneroConnectionManager> - - -
-
- - - - - - - - - - - - - -

removeListener(listener) → {MoneroConnectionManager}

- - - - - - -
- Remove a listener. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroConnectionManagerListener - - - - the listener to remove
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -MoneroConnectionManager - - -
-
- - - - - - - - - - - - - -

removeListeners() → {MoneroConnectionManager}

- - - - - - -
- Remove all listeners. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -MoneroConnectionManager - - -
-
- - - - - - - - - - - - - -

reset() → {MoneroConnectonManager}

- - - - - - -
- Reset to default state. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -MoneroConnectonManager - - -
-
- - - - - - - - - - - - - -

setAutoSwitch(autoSwitch) → {MoneroConnectionManager}

- - - - - - -
- Automatically switch to the best available connection as connections are polled, based on priority, response time, and consistency. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
autoSwitch - - -boolean - - - - specifies if the connection should auto switch to a better connection
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -MoneroConnectionManager - - -
-
- - - - - - - - - - - - - -

(async) setConnection(uriOrConnection) → {Promise.<MoneroConnectionManager>}

- - - - - - -
- Set the current connection. -Provide a URI to select an existing connection without updating its credentials. -Provide a MoneroRpcConnection to add new connection or replace existing connection with the same URI. -Notify if current connection changes. -Does not check the connection. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uriOrConnection - - -string -| - -MoneroRpcConnection - - - - is the uri of the connection or the connection to make current (default undefined for no current connection)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -Promise.<MoneroConnectionManager> - - -
-
- - - - - - - - - - - - - -

setTimeout(timeoutMs) → {MoneroConnectionManager}

- - - - - - -
- Set the maximum request time before its connection is considered offline. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
timeoutMs - - -int - - - - the timeout before the connection is considered offline
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -MoneroConnectionManager - - -
-
- - - - - - - - - - - - - -

startPolling(periodMs, autoSwitch, timeoutMs, pollType, excludedConnections) → {MoneroConnectionManager}

- - - - - - -
- Start polling connections. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
periodMs - - -number - - - - poll period in milliseconds (default 20s)
autoSwitch - - -boolean - - - - specifies to automatically switch to the best connection (default true unless changed)
timeoutMs - - -number - - - - specifies the timeout to poll a single connection (default 5s unless changed)
pollType - - -number - - - - one of PRIORITIZED (poll connections in order of priority until connected; default), CURRENT (poll current connection), or ALL (poll all connections)
excludedConnections - - -Array.<MoneroRpcConnection> - - - - connections excluded from being polled
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -MoneroConnectionManager - - -
-
- - - - - - - - - - - - - -

stopPolling() → {MoneroConnectionManager}

- - - - - - -
- Stop polling connections. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection manager for chaining -
- - - -
-
- Type -
-
- -MoneroConnectionManager - - -
-
- - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroConnectionManagerListener.html b/docs/MoneroConnectionManagerListener.html deleted file mode 100644 index c03ad340e..000000000 --- a/docs/MoneroConnectionManagerListener.html +++ /dev/null @@ -1,311 +0,0 @@ - - - - - JSDoc: Class: MoneroConnectionManagerListener - - - - - - - - - - -
- -

Class: MoneroConnectionManagerListener

- - - - - - -
- -
- -

MoneroConnectionManagerListener()

- -
Default connection manager listener which takes no action on notifications.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroConnectionManagerListener()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(async) onConnectionChanged(connection)

- - - - - - -
- Notified on connection change events. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
connection - - -MoneroRpcConnection - - - - the connection manager's current connection
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroConnectionSpan.html b/docs/MoneroConnectionSpan.html deleted file mode 100644 index abdb63dca..000000000 --- a/docs/MoneroConnectionSpan.html +++ /dev/null @@ -1,1434 +0,0 @@ - - - - - JSDoc: Class: MoneroConnectionSpan - - - - - - - - - - -
- -

Class: MoneroConnectionSpan

- - - - - - -
- -
- -

MoneroConnectionSpan()

- -
Monero daemon connection span.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroConnectionSpan()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getConnectionId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumBlocks()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRate()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRemoteAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSpeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getStartHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setConnectionId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumBlocks()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRate()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRemoteAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSpeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setStartHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroDaemon.html b/docs/MoneroDaemon.html deleted file mode 100644 index bbeec3b70..000000000 --- a/docs/MoneroDaemon.html +++ /dev/null @@ -1,9924 +0,0 @@ - - - - - JSDoc: Interface: MoneroDaemon - - - - - - - - - - -
- -

Interface: MoneroDaemon

- - - - - - -
- -
- -

MoneroDaemon

- -
Monero daemon interface and default implementations.
- - -
- -
-
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(async) addListener(listener)

- - - - - - -
- Register a listener to receive daemon notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroDaemonListener - - - - listener to receive daemon notifications
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) checkForUpdate() → {MoneroDaemonUpdateCheckResult}

- - - - - - -
- Check for update. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result -
- - - -
-
- Type -
-
- -MoneroDaemonUpdateCheckResult - - -
-
- - - - - - - - - - - - - -

(async) downloadUpdate(path) → {MoneroDaemonUpdateDownloadResult}

- - - - - - -
- Download an update. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path to download the update (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result -
- - - -
-
- Type -
-
- -MoneroDaemonUpdateDownloadResult - - -
-
- - - - - - - - - - - - - -

(async) flushTxPool(hashes)

- - - - - - -
- Flush transactions from the tx pool. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
hashes - - -string -| - -Array.<string> - - - - specific transactions to flush (defaults to all)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) getAltBlockHashes() → {Array.<string>}

- - - - - - -
- Get known block hashes which are not on the main chain. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- known block hashes which are not on the main chain -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getAltChains() → {Array.<MoneroAltChain>}

- - - - - - -
- Get alternative chains seen by the node. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- alternative chains -
- - - -
-
- Type -
-
- -Array.<MoneroAltChain> - - -
-
- - - - - - - - - - - - - -

(async) getBlockByHash(blockHash) → {MoneroBlock}

- - - - - - -
- Get a block by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockHash - - -string - - - - hash of the block to get
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- with the given hash -
- - - -
-
- Type -
-
- -MoneroBlock - - -
-
- - - - - - - - - - - - - -

(async) getBlockByHeight(height) → {MoneroBlock}

- - - - - - -
- Get a block by height. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -int - - - - height of the block to get
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- with the given height -
- - - -
-
- Type -
-
- -MoneroBlock - - -
-
- - - - - - - - - - - - - -

(async) getBlockHash(height) → {string}

- - - - - - -
- Get a block's hash by its height. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -int - - - - height of the block hash to get
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the block's hash at the given height -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getBlockHashes(blockHashes, startHeight) → {Array.<string>}

- - - - - - -
- Get block hashes as a binary request to the daemon. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockHashes - - -Array.<string> - - - - specify block hashes to fetch; first 10 blocks hash goes - sequential, next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64 - and so on, and the last one is always genesis block
startHeight - - -int - - - - starting height of block hashes to return
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- requested block hashes -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getBlockHeaderByHash(blockHash) → {MoneroBlockHeader}

- - - - - - -
- Get a block header by its hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockHash - - -string - - - - hash of the block to get the header of
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- block's header -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

(async) getBlockHeaderByHeight(height) → {MoneroBlockHeader}

- - - - - - -
- Get a block header by its height. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -int - - - - height of the block to get the header of
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- block's header -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

(async) getBlockHeadersByRange(startHeight, endHeight) → {Array.<MoneroBlockHeader>}

- - - - - - -
- Get block headers for the given range. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
startHeight - - -int - - - - start height lower bound inclusive (optional)
endHeight - - -int - - - - end height upper bound inclusive (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- for the given range -
- - - -
-
- Type -
-
- -Array.<MoneroBlockHeader> - - -
-
- - - - - - - - - - - - - -

(async) getBlockTemplate(walletAddress, reserveSize) → {MoneroBlockTemplate}

- - - - - - -
- Get a block template for mining a new block. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
walletAddress - - -string - - - - address of the wallet to receive miner transactions if block is successfully mined
reserveSize - - -int - - - - reserve size (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is a block template for mining a new block -
- - - -
-
- Type -
-
- -MoneroBlockTemplate - - -
-
- - - - - - - - - - - - - -

(async) getBlocksByHash(blockHashes, startHeight, prune) → {Array.<MoneroBlock>}

- - - - - - -
- Get blocks by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockHashes - - -Array.<string> - - - - array of hashes; first 10 blocks hashes goes sequential, - next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64 and so on, - and the last one is always genesis block
startHeight - - -int - - - - start height to get blocks by hash
prune - - -boolean - - - - specifies if returned blocks should be pruned (defaults to false) // TODO: test default
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- retrieved blocks -
- - - -
-
- Type -
-
- -Array.<MoneroBlock> - - -
-
- - - - - - - - - - - - - -

(async) getBlocksByHeight(heights) → {Array.<MoneroBlock>}

- - - - - - -
- Get blocks at the given heights. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
heights - - -Array.<int> - - - - heights of the blocks to get
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are blocks at the given heights -
- - - -
-
- Type -
-
- -Array.<MoneroBlock> - - -
-
- - - - - - - - - - - - - -

(async) getBlocksByRange(startHeight, endHeight) → {Array.<MoneroBlock>}

- - - - - - -
- Get blocks in the given height range. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
startHeight - - -int - - - - start height lower bound inclusive (optional)
endHeight - - -int - - - - end height upper bound inclusive (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are blocks in the given height range -
- - - -
-
- Type -
-
- -Array.<MoneroBlock> - - -
-
- - - - - - - - - - - - - -

(async) getBlocksByRangeChunked(startHeight, endHeight, maxChunkSize) → {Array.<MoneroBlock>}

- - - - - - -
- Get blocks in the given height range as chunked requests so that each request is -not too big. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
startHeight - - -int - - - - start height lower bound inclusive (optional)
endHeight - - -int - - - - end height upper bound inclusive (optional)
maxChunkSize - - -int - - - - maximum chunk size in any one request (default 3,000,000 bytes)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- blocks in the given height range -
- - - -
-
- Type -
-
- -Array.<MoneroBlock> - - -
-
- - - - - - - - - - - - - -

(async) getDownloadLimit() → {int}

- - - - - - -
- Get the download bandwidth limit. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- download bandwidth limit -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getFeeEstimate(graceBlocks) → {MoneroFeeEstimate}

- - - - - - -
- Get mining fee estimates per kB. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
graceBlocks - - -number - - - - TODO
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- mining fee estimates per kB -
- - - -
-
- Type -
-
- -MoneroFeeEstimate - - -
-
- - - - - - - - - - - - - -

(async) getHardForkInfo() → {MoneroHardForkInfo}

- - - - - - -
- Look up information regarding hard fork voting and readiness. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- contains hard fork information -
- - - -
-
- Type -
-
- -MoneroHardForkInfo - - -
-
- - - - - - - - - - - - - -

(async) getHeight() → {int}

- - - - - - -
- Get the number of blocks in the longest chain known to the node. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of blocks -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getInfo() → {MoneroDaemonInfo}

- - - - - - -
- Get general information about the state of the node and the network. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is general information about the node and network -
- - - -
-
- Type -
-
- -MoneroDaemonInfo - - -
-
- - - - - - - - - - - - - -

(async) getKeyImageSpentStatus(keyImage) → {MoneroKeyImageSpentStatus}

- - - - - - -
- Get the spent status of the given key image. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image hex to get the status of
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- status of the key image -
- - - -
-
- Type -
-
- -MoneroKeyImageSpentStatus - - -
-
- - - - - - - - - - - - - -

(async) getKeyImageSpentStatuses(keyImages) → {Array.<MoneroKeyImageSpentStatus>}

- - - - - - -
- Get the spent status of each given key image. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImages - - -Array.<string> - - - - are hex key images to get the statuses of
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- status for each key image -
- - - -
-
- Type -
-
- -Array.<MoneroKeyImageSpentStatus> - - -
-
- - - - - - - - - - - - - -

(async) getKnownPeers() → {Array.<MoneroPeer>}

- - - - - - -
- Get known peers including their last known online status. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the daemon's known peers -
- - - -
-
- Type -
-
- -Array.<MoneroPeer> - - -
-
- - - - - - - - - - - - - -

(async) getLastBlockHeader() → {MoneroBlockHeader}

- - - - - - -
- Get the last block's header. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- last block's header -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

getListeners() → {Array.<MoneroDaemonListener>}

- - - - - - -
- Get the listeners registered with the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the registered listeners -
- - - -
-
- Type -
-
- -Array.<MoneroDaemonListener> - - -
-
- - - - - - - - - - - - - -

(async) getMinerTxSum(height, numBlocks) → {MoneroMinerTxSum}

- - - - - - -
- Gets the total emissions and fees from the genesis block to the current height. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -int - - - - height to start computing the miner sum
numBlocks - - -int - - - - number of blocks to include in the sum
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- encapsulates the total emissions and fees since the genesis block -
- - - -
-
- Type -
-
- -MoneroMinerTxSum - - -
-
- - - - - - - - - - - - - -

(async) getMiningStatus() → {MoneroMiningStatus}

- - - - - - -
- Get the daemon's mining status. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- daemon's mining status -
- - - -
-
- Type -
-
- -MoneroMiningStatus - - -
-
- - - - - - - - - - - - - -

(async) getOutputDistribution(amounts, cumulative, startHeight, endHeight) → {Array.<MoneroOutputDistributionEntry>}

- - - - - - -
- Creates an output distribution. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
amounts - - -Array.<BigInteger> - - - - amounts of outputs to make the distribution with
cumulative - - -boolean - - - - specifies if the results should be cumulative (defaults to TODO)
startHeight - - -int - - - - start height lower bound inclusive (optional)
endHeight - - -int - - - - end height upper bound inclusive (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are entries meeting the parameters -
- - - -
-
- Type -
-
- -Array.<MoneroOutputDistributionEntry> - - -
-
- - - - - - - - - - - - - -

(async) getOutputHistogram(amounts, minCount, maxCount, isUnlocked, recentCutoff) → {Array.<MoneroOutputHistogramEntry>}

- - - - - - -
- Get a histogram of output amounts. For all amounts (possibly filtered by -parameters), gives the number of outputs on the chain for that amount. -RingCT outputs counts as 0 amount. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
amounts - - -Array.<BigInteger> - - - - amounts of outputs to make the histogram with
minCount - - -int - - - - TODO
maxCount - - -int - - - - TODO
isUnlocked - - -boolean - - - - makes a histogram with outputs with the specified lock state
recentCutoff - - -int - - - - TODO
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are entries meeting the parameters -
- - - -
-
- Type -
-
- -Array.<MoneroOutputHistogramEntry> - - -
-
- - - - - - - - - - - - - -

(async) getOutputs(outputs) → {Array.<MoneroOutput>}

- - - - - - -
- Get outputs identified by a list of output amounts and indices as a binary -request. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
outputs - - -Array.<MoneroOutput> - - - - identify each output by amount and index
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- identified outputs -
- - - -
-
- Type -
-
- -Array.<MoneroOutput> - - -
-
- - - - - - - - - - - - - -

(async) getPeerBans() → {Array.<MoneroBan>}

- - - - - - -
- Get peer bans. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- entries about banned peers -
- - - -
-
- Type -
-
- -Array.<MoneroBan> - - -
-
- - - - - - - - - - - - - -

(async) getPeers() → {Array.<MoneroPeer>}

- - - - - - -
- Get peers with active incoming or outgoing connections to the node. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the daemon's peers -
- - - -
-
- Type -
-
- -Array.<MoneroPeer> - - -
-
- - - - - - - - - - - - - -

(async) getSyncInfo() → {MoneroDaemonSyncInfo}

- - - - - - -
- Get synchronization information. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- contains sync information -
- - - -
-
- Type -
-
- -MoneroDaemonSyncInfo - - -
-
- - - - - - - - - - - - - -

(async) getTx(txHash, prune) → {MoneroTx}

- - - - - - -
- Get a transaction by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
txHash - - -string - - - - - - hash of the transaction to get
prune - - -boolean - - - - - - false - - specifies if the returned tx should be pruned (defaults to false)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- transaction with the given hash or undefined if not found -
- - - -
-
- Type -
-
- -MoneroTx - - -
-
- - - - - - - - - - - - - -

(async) getTxHex(txHash, prune) → {string}

- - - - - - -
- Get a transaction hex by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
txHash - - -string - - - - - - hash of the transaction to get hex from
prune - - -boolean - - - - - - false - - specifies if the returned tx hex should be pruned (defaults to false)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- tx hex with the given hash -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxHexes(txHashes, prune) → {Array.<string>}

- - - - - - -
- Get transaction hexes by hashes. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
txHashes - - -Array.<string> - - - - - - hashes of transactions to get hexes from
prune - - -boolean - - - - - - false - - specifies if the returned tx hexes should be pruned (defaults to false)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- tx hexes -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getTxPool() → {Array.<MoneroTx>}

- - - - - - -
- Get valid transactions seen by the node but not yet mined into a block, as well -as spent key image information for the tx pool. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are transactions in the transaction pool -
- - - -
-
- Type -
-
- -Array.<MoneroTx> - - -
-
- - - - - - - - - - - - - -

(async) getTxPoolBacklog() → {Array.<MoneroTxBacklogEntry>}

- - - - - - -
- Get all transaction pool backlog. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- backlog entries -
- - - -
-
- Type -
-
- -Array.<MoneroTxBacklogEntry> - - -
-
- - - - - - - - - - - - - -

(async) getTxPoolHashes() → {Array.<string>}

- - - - - - -
- Get hashes of transactions in the transaction pool. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are hashes of transactions in the transaction pool -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getTxPoolStats() → {MoneroTxPoolStats}

- - - - - - -
- Get transaction pool statistics. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- contains statistics about the transaction pool -
- - - -
-
- Type -
-
- -MoneroTxPoolStats - - -
-
- - - - - - - - - - - - - -

(async) getTxs(txHashes, prune) → {Array.<MoneroTx>}

- - - - - - -
- Get transactions by hashes. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
txHashes - - -Array.<string> - - - - - - hashes of transactions to get
prune - - -boolean - - - - - - false - - specifies if the returned txs should be pruned (defaults to false)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- found transactions with the given hashes -
- - - -
-
- Type -
-
- -Array.<MoneroTx> - - -
-
- - - - - - - - - - - - - -

(async) getUploadLimit() → {int}

- - - - - - -
- Get the upload bandwidth limit. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- upload bandwidth limit -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getVersion() → {MoneroVersion}

- - - - - - -
- Gets the version of the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the version of the daemon -
- - - -
-
- Type -
-
- -MoneroVersion - - -
-
- - - - - - - - - - - - - -

(async) isConnected() → {boolean}

- - - - - - -
- Indicates if the client is connected to the daemon via RPC. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the client is connected to the daemon, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isTrusted() → {boolean}

- - - - - - -
- Indicates if the daemon is trusted xor untrusted. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the daemon is trusted, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) pruneBlockchain(check) → {MoneroPruneResult}

- - - - - - -
- Prune the blockchain. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
check - - -boolean - - - - specifies to check the pruning (default false)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the prune result -
- - - -
-
- Type -
-
- -MoneroPruneResult - - -
-
- - - - - - - - - - - - - -

(async) relayTxByHash(txHash)

- - - - - - -
- Relays a transaction by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - hash of the transaction to relay
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) relayTxsByHash(txHashes)

- - - - - - -
- Relays transactions by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - hashes of the transactinos to relay
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) removeListener(listener)

- - - - - - -
- Unregister a listener to receive daemon notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroDaemonListener - - - - listener to unregister
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) resetDownloadLimit() → {int}

- - - - - - -
- Reset the download bandwidth limit. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- download bandwidth limit after resetting -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) resetUploadLimit() → {int}

- - - - - - -
- Reset the upload bandwidth limit. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- upload bandwidth limit after resetting -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) setDownloadLimit(limit) → {int}

- - - - - - -
- Set the download bandwidth limit. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
limit - - -int - - - - download limit to set (-1 to reset to default)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- new download limit after setting -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) setIncomingPeerLimit(limit)

- - - - - - -
- Limit number of incoming peers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
limit - - -int - - - - maximum number of incoming peers
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setOutgoingPeerLimit(limit)

- - - - - - -
- Limit number of outgoing peers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
limit - - -int - - - - maximum number of outgoing peers
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setPeerBan(ban)

- - - - - - -
- Ban a peer node. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
ban - - -MoneroBan - - - - contains information about a node to ban
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setPeerBans(bans)

- - - - - - -
- Ban peers nodes. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
bans - - -Array.<MoneroBan> - - - - specify which peers to ban
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setUploadLimit(limit) → {int}

- - - - - - -
- Set the upload bandwidth limit. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
limit - - upload limit to set (-1 to reset to default)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- new upload limit after setting -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) startMining(address, numThreads, isBackground, ignoreBattery)

- - - - - - -
- Start mining. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - address given miner rewards if the daemon mines a block
numThreads - - -integer - - - - number of mining threads to run
isBackground - - -boolean - - - - specifies if the miner should run in the background or not
ignoreBattery - - -boolean - - - - specifies if the battery state (e.g. on laptop) should be ignored or not
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stop()

- - - - - - -
- Safely disconnect and shut down the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stopMining()

- - - - - - -
- Stop mining. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) submitBlock(blockBlob)

- - - - - - -
- Submit a mined block to the network. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockBlob - - -string - - - - mined block to submit
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) submitBlocks(blockBlobs)

- - - - - - -
- Submit mined blocks to the network. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockBlobs - - -Array.<string> - - - - mined blocks to submit
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) submitTxHex(txHex, doNotRelay) → {MoneroSubmitTxResult}

- - - - - - -
- Submits a transaction to the daemon's pool. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHex - - -string - - - - raw transaction hex to submit
doNotRelay - - -boolean - - - - specifies if the tx should be relayed (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- contains submission results -
- - - -
-
- Type -
-
- -MoneroSubmitTxResult - - -
-
- - - - - - - - - - - - - -

(async) waitForNextBlockHeader() → {MoneroBlockHeader}

- - - - - - -
- Get the header of the next block added to the chain. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- header of the next block added to the chain -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

(static) parseNetworkType(network) → {MoneroNetworkType}

- - - - - - -
- Parses a network string to an enumerated type. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
network - - -string - - - - network string to parse
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- enumerated network type -
- - - -
-
- Type -
-
- -MoneroNetworkType - - -
-
- - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroDaemonConnection.html b/docs/MoneroDaemonConnection.html deleted file mode 100644 index 484da565a..000000000 --- a/docs/MoneroDaemonConnection.html +++ /dev/null @@ -1,3282 +0,0 @@ - - - - - JSDoc: Class: MoneroDaemonConnection - - - - - - - - - - -
- -

Class: MoneroDaemonConnection

- - - - - - -
- -
- -

MoneroDaemonConnection()

- -
Monero daemon connection.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroDaemonConnection()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAvgDownload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAvgUpload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCurrentDownload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCurrentUpload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLiveTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumReceives()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumSends()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumSupportFlags()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPeer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReceiveIdleTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSendIdleTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getState()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isLocalHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isLocalIp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAvgDownload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAvgUpload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCurrentDownload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCurrentUpload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsLocalHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsLocalIp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLiveTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumReceives()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumSends()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumSupportFlags()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPeer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReceiveIdleTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSendIdleTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setState()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.6.7 on Thu Dec 30 2021 13:46:54 GMT-0500 (Eastern Standard Time) -
- - - - - \ No newline at end of file diff --git a/docs/MoneroDaemonConnectionSpan.html b/docs/MoneroDaemonConnectionSpan.html deleted file mode 100644 index 23648c849..000000000 --- a/docs/MoneroDaemonConnectionSpan.html +++ /dev/null @@ -1,1434 +0,0 @@ - - - - - JSDoc: Class: MoneroDaemonConnectionSpan - - - - - - - - - - -
- -

Class: MoneroDaemonConnectionSpan

- - - - - - -
- -
- -

MoneroDaemonConnectionSpan()

- -
Monero daemon connection span.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroDaemonConnectionSpan()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getConnectionId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumBlocks()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRate()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRemoteAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSpeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getStartHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setConnectionId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumBlocks()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRate()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRemoteAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSpeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setStartHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.6.7 on Thu Dec 30 2021 13:46:54 GMT-0500 (Eastern Standard Time) -
- - - - - \ No newline at end of file diff --git a/docs/MoneroDaemonInfo.html b/docs/MoneroDaemonInfo.html deleted file mode 100644 index 5478772d9..000000000 --- a/docs/MoneroDaemonInfo.html +++ /dev/null @@ -1,5802 +0,0 @@ - - - - - JSDoc: Class: MoneroDaemonInfo - - - - - - - - - - -
- -

Class: MoneroDaemonInfo

- - - - - - -
- -
- -

MoneroDaemonInfo()

- -
Monero daemon info.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroDaemonInfo()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAdjustedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBlockSizeLimit()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBlockSizeMedian()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBlockWeightLimit()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBlockWeightMedian()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBootstrapDaemonAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCredits()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCumulativeDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDatabaseSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFreeSpace()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeightWithoutBootstrap()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNetworkType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumAltBlocks()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumIncomingConnections()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumOfflinePeers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumOnlinePeers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumOutgoingConnections()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumRpcConnections()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumTxsPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getStartTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTarget()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTargetHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTopBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUpdateAvailable()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getWasBootstrapEverUsed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isBusySyncing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOffline()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isRestricted()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isSynchronized()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAdjustedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBlockSizeLimit()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBlockSizeMedian()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBlockWeightLimit()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBlockWeightMedian()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBootstrapDaemonAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCredits()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCumulativeDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDatabaseSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDifficulty()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFreeSpace()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeightWithoutBootstrap()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsBusySyncing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsOffline()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsRestricted()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsSynchronized()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNetworkType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumAltBlocks()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumIncomingConnections()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumOfflinePeers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumOnlinePeers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumOutgoingConnections()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumRpcConnections()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumTxsPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setStartTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTarget()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTargetHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTopBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUpdateAvailable()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setWasBootstrapEverUsed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroDaemonListener.html b/docs/MoneroDaemonListener.html deleted file mode 100644 index db7574c36..000000000 --- a/docs/MoneroDaemonListener.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - - JSDoc: Class: MoneroDaemonListener - - - - - - - - - - -
- -

Class: MoneroDaemonListener

- - - - - - -
- -
- -

MoneroDaemonListener()

- -
Receives notifications as a daemon is updated.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroDaemonListener()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getLastBlockHeader() → {MoneroBlockHeader}

- - - - - - -
- Get the last notified block header. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the last notified block header -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

(async) onBlockHeader(header)

- - - - - - -
- Called when a new block is added to the chain. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
header - - -MoneroBlockHeader - - - - the header of the block added to the chain
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroDaemonPeer.html b/docs/MoneroDaemonPeer.html deleted file mode 100644 index 435ed132b..000000000 --- a/docs/MoneroDaemonPeer.html +++ /dev/null @@ -1,1797 +0,0 @@ - - - - - JSDoc: Class: MoneroDaemonPeer - - - - - - - - - - -
- -

Class: MoneroDaemonPeer

- - - - - - -
- -
- -

MoneroDaemonPeer()

- -
Models a peer to the daemon.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroDaemonPeer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastSeenTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPort()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPruningSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRpcCreditsPerHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRpcPort()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOnline() → {boolean}

- - - - - - -
- Indicates if the peer was online when last checked (aka "white listed" as -opposed to "gray listed"). -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if peer was online when last checked, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

setAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsOnline()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastSeenTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPort()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPruningSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRpcCreditsPerHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRpcPort()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.6.7 on Thu Dec 30 2021 13:46:54 GMT-0500 (Eastern Standard Time) -
- - - - - \ No newline at end of file diff --git a/docs/MoneroDaemonRpc.html b/docs/MoneroDaemonRpc.html deleted file mode 100644 index 02c99a204..000000000 --- a/docs/MoneroDaemonRpc.html +++ /dev/null @@ -1,9920 +0,0 @@ - - - - - JSDoc: Class: MoneroDaemonRpc - - - - - - - - - - -
- -

Class: MoneroDaemonRpc

- - - - - - -
- -
- -

MoneroDaemonRpc

- -
Implements a MoneroDaemon as a client of monerod.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(async) addListener(listener)

- - - - - - -
- Register a listener to receive daemon notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroDaemonListener - - - - listener to receive daemon notifications
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) checkForUpdate() → {MoneroDaemonUpdateCheckResult}

- - - - - - -
- Check for update. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result -
- - - -
-
- Type -
-
- -MoneroDaemonUpdateCheckResult - - -
-
- - - - - - - - - - - - - -

(async) downloadUpdate(path) → {MoneroDaemonUpdateDownloadResult}

- - - - - - -
- Download an update. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path to download the update (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result -
- - - -
-
- Type -
-
- -MoneroDaemonUpdateDownloadResult - - -
-
- - - - - - - - - - - - - -

(async) flushTxPool(hashes)

- - - - - - -
- Flush transactions from the tx pool. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
hashes - - -string -| - -Array.<string> - - - - specific transactions to flush (defaults to all)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) getAltBlockHashes() → {Array.<string>}

- - - - - - -
- Get known block hashes which are not on the main chain. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- known block hashes which are not on the main chain -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getAltChains() → {Array.<MoneroAltChain>}

- - - - - - -
- Get alternative chains seen by the node. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- alternative chains -
- - - -
-
- Type -
-
- -Array.<MoneroAltChain> - - -
-
- - - - - - - - - - - - - -

(async) getBlockByHash(blockHash) → {MoneroBlock}

- - - - - - -
- Get a block by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockHash - - -string - - - - hash of the block to get
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- with the given hash -
- - - -
-
- Type -
-
- -MoneroBlock - - -
-
- - - - - - - - - - - - - -

(async) getBlockByHeight(height) → {MoneroBlock}

- - - - - - -
- Get a block by height. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -int - - - - height of the block to get
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- with the given height -
- - - -
-
- Type -
-
- -MoneroBlock - - -
-
- - - - - - - - - - - - - -

(async) getBlockHash(height) → {string}

- - - - - - -
- Get a block's hash by its height. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -int - - - - height of the block hash to get
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the block's hash at the given height -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getBlockHeaderByHash(blockHash) → {MoneroBlockHeader}

- - - - - - -
- Get a block header by its hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockHash - - -string - - - - hash of the block to get the header of
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- block's header -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

(async) getBlockHeaderByHeight(height) → {MoneroBlockHeader}

- - - - - - -
- Get a block header by its height. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -int - - - - height of the block to get the header of
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- block's header -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

(async) getBlockHeadersByRange(startHeight, endHeight) → {Array.<MoneroBlockHeader>}

- - - - - - -
- Get block headers for the given range. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
startHeight - - -int - - - - start height lower bound inclusive (optional)
endHeight - - -int - - - - end height upper bound inclusive (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- for the given range -
- - - -
-
- Type -
-
- -Array.<MoneroBlockHeader> - - -
-
- - - - - - - - - - - - - -

(async) getBlockTemplate(walletAddress, reserveSize) → {MoneroBlockTemplate}

- - - - - - -
- Get a block template for mining a new block. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
walletAddress - - -string - - - - address of the wallet to receive miner transactions if block is successfully mined
reserveSize - - -int - - - - reserve size (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is a block template for mining a new block -
- - - -
-
- Type -
-
- -MoneroBlockTemplate - - -
-
- - - - - - - - - - - - - -

(async) getBlocksByHeight(heights) → {Array.<MoneroBlock>}

- - - - - - -
- Get blocks at the given heights. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
heights - - -Array.<int> - - - - heights of the blocks to get
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are blocks at the given heights -
- - - -
-
- Type -
-
- -Array.<MoneroBlock> - - -
-
- - - - - - - - - - - - - -

(async) getBlocksByRange(startHeight, endHeight) → {Array.<MoneroBlock>}

- - - - - - -
- Get blocks in the given height range. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
startHeight - - -int - - - - start height lower bound inclusive (optional)
endHeight - - -int - - - - end height upper bound inclusive (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are blocks in the given height range -
- - - -
-
- Type -
-
- -Array.<MoneroBlock> - - -
-
- - - - - - - - - - - - - -

(async) getBlocksByRangeChunked(startHeight, endHeight, maxChunkSize) → {Array.<MoneroBlock>}

- - - - - - -
- Get blocks in the given height range as chunked requests so that each request is -not too big. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
startHeight - - -int - - - - start height lower bound inclusive (optional)
endHeight - - -int - - - - end height upper bound inclusive (optional)
maxChunkSize - - -int - - - - maximum chunk size in any one request (default 3,000,000 bytes)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- blocks in the given height range -
- - - -
-
- Type -
-
- -Array.<MoneroBlock> - - -
-
- - - - - - - - - - - - - -

(async) getDownloadLimit() → {int}

- - - - - - -
- Get the download bandwidth limit. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- download bandwidth limit -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getFeeEstimate(graceBlocks) → {MoneroFeeEstimate}

- - - - - - -
- Get mining fee estimates per kB. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
graceBlocks - - -number - - - - TODO
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- mining fee estimates per kB -
- - - -
-
- Type -
-
- -MoneroFeeEstimate - - -
-
- - - - - - - - - - - - - -

(async) getHardForkInfo() → {MoneroHardForkInfo}

- - - - - - -
- Look up information regarding hard fork voting and readiness. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- contains hard fork information -
- - - -
-
- Type -
-
- -MoneroHardForkInfo - - -
-
- - - - - - - - - - - - - -

(async) getHeight() → {int}

- - - - - - -
- Get the number of blocks in the longest chain known to the node. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of blocks -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getInfo() → {MoneroDaemonInfo}

- - - - - - -
- Get general information about the state of the node and the network. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is general information about the node and network -
- - - -
-
- Type -
-
- -MoneroDaemonInfo - - -
-
- - - - - - - - - - - - - -

(async) getKeyImageSpentStatus(keyImage) → {MoneroKeyImageSpentStatus}

- - - - - - -
- Get the spent status of the given key image. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image hex to get the status of
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- status of the key image -
- - - -
-
- Type -
-
- -MoneroKeyImageSpentStatus - - -
-
- - - - - - - - - - - - - -

(async) getKeyImageSpentStatuses(keyImages) → {Array.<MoneroKeyImageSpentStatus>}

- - - - - - -
- Get the spent status of each given key image. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImages - - -Array.<string> - - - - are hex key images to get the statuses of
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- status for each key image -
- - - -
-
- Type -
-
- -Array.<MoneroKeyImageSpentStatus> - - -
-
- - - - - - - - - - - - - -

(async) getKnownPeers() → {Array.<MoneroPeer>}

- - - - - - -
- Get known peers including their last known online status. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the daemon's known peers -
- - - -
-
- Type -
-
- -Array.<MoneroPeer> - - -
-
- - - - - - - - - - - - - -

(async) getLastBlockHeader() → {MoneroBlockHeader}

- - - - - - -
- Get the last block's header. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- last block's header -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -

getListeners() → {Array.<MoneroDaemonListener>}

- - - - - - -
- Get the listeners registered with the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the registered listeners -
- - - -
-
- Type -
-
- -Array.<MoneroDaemonListener> - - -
-
- - - - - - - - - - - - - -

(async) getMinerTxSum(height, numBlocks) → {MoneroMinerTxSum}

- - - - - - -
- Gets the total emissions and fees from the genesis block to the current height. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -int - - - - height to start computing the miner sum
numBlocks - - -int - - - - number of blocks to include in the sum
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- encapsulates the total emissions and fees since the genesis block -
- - - -
-
- Type -
-
- -MoneroMinerTxSum - - -
-
- - - - - - - - - - - - - -

(async) getMiningStatus() → {MoneroMiningStatus}

- - - - - - -
- Get the daemon's mining status. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- daemon's mining status -
- - - -
-
- Type -
-
- -MoneroMiningStatus - - -
-
- - - - - - - - - - - - - -

(async) getOutputDistribution(amounts, cumulative, startHeight, endHeight) → {Array.<MoneroOutputDistributionEntry>}

- - - - - - -
- Creates an output distribution. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
amounts - - -Array.<BigInteger> - - - - amounts of outputs to make the distribution with
cumulative - - -boolean - - - - specifies if the results should be cumulative (defaults to TODO)
startHeight - - -int - - - - start height lower bound inclusive (optional)
endHeight - - -int - - - - end height upper bound inclusive (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are entries meeting the parameters -
- - - -
-
- Type -
-
- -Array.<MoneroOutputDistributionEntry> - - -
-
- - - - - - - - - - - - - -

(async) getOutputHistogram(amounts, minCount, maxCount, isUnlocked, recentCutoff) → {Array.<MoneroOutputHistogramEntry>}

- - - - - - -
- Get a histogram of output amounts. For all amounts (possibly filtered by -parameters), gives the number of outputs on the chain for that amount. -RingCT outputs counts as 0 amount. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
amounts - - -Array.<BigInteger> - - - - amounts of outputs to make the histogram with
minCount - - -int - - - - TODO
maxCount - - -int - - - - TODO
isUnlocked - - -boolean - - - - makes a histogram with outputs with the specified lock state
recentCutoff - - -int - - - - TODO
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are entries meeting the parameters -
- - - -
-
- Type -
-
- -Array.<MoneroOutputHistogramEntry> - - -
-
- - - - - - - - - - - - - -

(async) getPeerBans() → {Array.<MoneroBan>}

- - - - - - -
- Get peer bans. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- entries about banned peers -
- - - -
-
- Type -
-
- -Array.<MoneroBan> - - -
-
- - - - - - - - - - - - - -

(async) getPeers() → {Array.<MoneroPeer>}

- - - - - - -
- Get peers with active incoming or outgoing connections to the node. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the daemon's peers -
- - - -
-
- Type -
-
- -Array.<MoneroPeer> - - -
-
- - - - - - - - - - - - - -

getProcess()

- - - - - - -
- Get the internal process running monerod. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the process running monerod, undefined if not created from new process -
- - - - - - - - - - - - - - - -

(async) getRpcConnection() → {MoneroRpcConnection}

- - - - - - -
- Get the daemon's RPC connection. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the daemon's rpc connection -
- - - -
-
- Type -
-
- -MoneroRpcConnection - - -
-
- - - - - - - - - - - - - -

(async) getSyncInfo() → {MoneroDaemonSyncInfo}

- - - - - - -
- Get synchronization information. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- contains sync information -
- - - -
-
- Type -
-
- -MoneroDaemonSyncInfo - - -
-
- - - - - - - - - - - - - -

(async) getTx(txHash, prune) → {MoneroTx}

- - - - - - -
- Get a transaction by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
txHash - - -string - - - - - - hash of the transaction to get
prune - - -boolean - - - - - - false - - specifies if the returned tx should be pruned (defaults to false)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- transaction with the given hash or undefined if not found -
- - - -
-
- Type -
-
- -MoneroTx - - -
-
- - - - - - - - - - - - - -

(async) getTxHex(txHash, prune) → {string}

- - - - - - -
- Get a transaction hex by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
txHash - - -string - - - - - - hash of the transaction to get hex from
prune - - -boolean - - - - - - false - - specifies if the returned tx hex should be pruned (defaults to false)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- tx hex with the given hash -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxHexes(txHashes, prune) → {Array.<string>}

- - - - - - -
- Get transaction hexes by hashes. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
txHashes - - -Array.<string> - - - - - - hashes of transactions to get hexes from
prune - - -boolean - - - - - - false - - specifies if the returned tx hexes should be pruned (defaults to false)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- tx hexes -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getTxPool() → {Array.<MoneroTx>}

- - - - - - -
- Get valid transactions seen by the node but not yet mined into a block, as well -as spent key image information for the tx pool. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are transactions in the transaction pool -
- - - -
-
- Type -
-
- -Array.<MoneroTx> - - -
-
- - - - - - - - - - - - - -

(async) getTxPoolBacklog() → {Array.<MoneroTxBacklogEntry>}

- - - - - - -
- Get all transaction pool backlog. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- backlog entries -
- - - -
-
- Type -
-
- -Array.<MoneroTxBacklogEntry> - - -
-
- - - - - - - - - - - - - -

(async) getTxPoolHashes() → {Array.<string>}

- - - - - - -
- Get hashes of transactions in the transaction pool. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- are hashes of transactions in the transaction pool -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getTxPoolStats() → {MoneroTxPoolStats}

- - - - - - -
- Get transaction pool statistics. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- contains statistics about the transaction pool -
- - - -
-
- Type -
-
- -MoneroTxPoolStats - - -
-
- - - - - - - - - - - - - -

(async) getTxs(txHashes, prune) → {Array.<MoneroTx>}

- - - - - - -
- Get transactions by hashes. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
txHashes - - -Array.<string> - - - - - - hashes of transactions to get
prune - - -boolean - - - - - - false - - specifies if the returned txs should be pruned (defaults to false)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- found transactions with the given hashes -
- - - -
-
- Type -
-
- -Array.<MoneroTx> - - -
-
- - - - - - - - - - - - - -

(async) getUploadLimit() → {int}

- - - - - - -
- Get the upload bandwidth limit. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- upload bandwidth limit -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getVersion() → {MoneroVersion}

- - - - - - -
- Gets the version of the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the version of the daemon -
- - - -
-
- Type -
-
- -MoneroVersion - - -
-
- - - - - - - - - - - - - -

(async) isConnected() → {boolean}

- - - - - - -
- Indicates if the client is connected to the daemon via RPC. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the client is connected to the daemon, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isTrusted() → {boolean}

- - - - - - -
- Indicates if the daemon is trusted xor untrusted. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the daemon is trusted, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) pruneBlockchain(check) → {MoneroPruneResult}

- - - - - - -
- Prune the blockchain. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
check - - -boolean - - - - specifies to check the pruning (default false)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the prune result -
- - - -
-
- Type -
-
- -MoneroPruneResult - - -
-
- - - - - - - - - - - - - -

(async) relayTxsByHash(txHashes)

- - - - - - -
- Relays transactions by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - hashes of the transactinos to relay
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) removeListener(listener)

- - - - - - -
- Unregister a listener to receive daemon notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroDaemonListener - - - - listener to unregister
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) resetDownloadLimit() → {int}

- - - - - - -
- Reset the download bandwidth limit. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- download bandwidth limit after resetting -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) resetUploadLimit() → {int}

- - - - - - -
- Reset the upload bandwidth limit. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- upload bandwidth limit after resetting -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) setDownloadLimit(limit) → {int}

- - - - - - -
- Set the download bandwidth limit. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
limit - - -int - - - - download limit to set (-1 to reset to default)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- new download limit after setting -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) setIncomingPeerLimit(limit)

- - - - - - -
- Limit number of incoming peers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
limit - - -int - - - - maximum number of incoming peers
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setOutgoingPeerLimit(limit)

- - - - - - -
- Limit number of outgoing peers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
limit - - -int - - - - maximum number of outgoing peers
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setPeerBan(ban)

- - - - - - -
- Ban a peer node. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
ban - - -MoneroBan - - - - contains information about a node to ban
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setPeerBans(bans)

- - - - - - -
- Ban peers nodes. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
bans - - -Array.<MoneroBan> - - - - specify which peers to ban
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setUploadLimit(limit) → {int}

- - - - - - -
- Set the upload bandwidth limit. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
limit - - upload limit to set (-1 to reset to default)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- new upload limit after setting -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) startMining(address, numThreads, isBackground, ignoreBattery)

- - - - - - -
- Start mining. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - address given miner rewards if the daemon mines a block
numThreads - - -integer - - - - number of mining threads to run
isBackground - - -boolean - - - - specifies if the miner should run in the background or not
ignoreBattery - - -boolean - - - - specifies if the battery state (e.g. on laptop) should be ignored or not
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stop()

- - - - - - -
- Safely disconnect and shut down the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stopMining()

- - - - - - -
- Stop mining. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stopProcess(force) → {Promise.<(number|undefined)>}

- - - - - - -
- Stop the internal process running monerod, if applicable. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
force - - -boolean - - - - specifies if the process should be destroyed forcibly
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the exit code from stopping the process -
- - - -
-
- Type -
-
- -Promise.<(number|undefined)> - - -
-
- - - - - - - - - - - - - -

(async) submitBlock(blockBlob)

- - - - - - -
- Submit a mined block to the network. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockBlob - - -string - - - - mined block to submit
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) submitBlocks(blockBlobs)

- - - - - - -
- Submit mined blocks to the network. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
blockBlobs - - -Array.<string> - - - - mined blocks to submit
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) submitTxHex(txHex, doNotRelay) → {MoneroSubmitTxResult}

- - - - - - -
- Submits a transaction to the daemon's pool. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHex - - -string - - - - raw transaction hex to submit
doNotRelay - - -boolean - - - - specifies if the tx should be relayed (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- contains submission results -
- - - -
-
- Type -
-
- -MoneroSubmitTxResult - - -
-
- - - - - - - - - - - - - -

(async) waitForNextBlockHeader() → {MoneroBlockHeader}

- - - - - - -
- Get the header of the next block added to the chain. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- header of the next block added to the chain -
- - - -
-
- Type -
-
- -MoneroBlockHeader - - -
-
- - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroDaemonSyncInfo.html b/docs/MoneroDaemonSyncInfo.html deleted file mode 100644 index 9a6d12e54..000000000 --- a/docs/MoneroDaemonSyncInfo.html +++ /dev/null @@ -1,1602 +0,0 @@ - - - - - JSDoc: Class: MoneroDaemonSyncInfo - - - - - - - - - - -
- -

Class: MoneroDaemonSyncInfo

- - - - - - -
- -
- -

MoneroDaemonSyncInfo()

- -
Models daemon synchronization information.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroDaemonSyncInfo()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getCredits()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNextNeededPruningSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOverview()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPeers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSpans()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTargetHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTopBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCredits()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNextNeededPruningSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOverview()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPeers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSpans()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTargetHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTopBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroDaemonUpdateCheckResult.html b/docs/MoneroDaemonUpdateCheckResult.html deleted file mode 100644 index 609bb0bbe..000000000 --- a/docs/MoneroDaemonUpdateCheckResult.html +++ /dev/null @@ -1,1197 +0,0 @@ - - - - - JSDoc: Class: MoneroDaemonUpdateCheckResult - - - - - - - - - - -
- -

Class: MoneroDaemonUpdateCheckResult

- - - - - - -
- -
- -

MoneroDaemonUpdateCheckResult(is)

- -
Models the result of checking for a daemon update.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroDaemonUpdateCheckResult(is)

- - - - - - -
- Deep copy constructor. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
is - - -MoneroDaemonUpdateCheckResult - - - - an existing result to deep copy from
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAutoUri() → {string}

- - - - - - -
- Get the uri to automatically download the update. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the uri to automatically download the update -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getHash() → {string}

- - - - - - -
- Get the update's hash. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the update's hash -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getUserUri() → {string}

- - - - - - -
- Get the uri to manually download the update. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the uri to manually download the update -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getVersion() → {string}

- - - - - - -
- Get the update's version. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the update's version -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

isUpdateAvailable() → {boolean}

- - - - - - -
- Indicates if an update is available. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if an update is available, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

setAutoUri()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsUpdateAvailable()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUserUri()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroDaemonUpdateDownloadResult.html b/docs/MoneroDaemonUpdateDownloadResult.html deleted file mode 100644 index aa5e266d9..000000000 --- a/docs/MoneroDaemonUpdateDownloadResult.html +++ /dev/null @@ -1,421 +0,0 @@ - - - - - JSDoc: Class: MoneroDaemonUpdateDownloadResult - - - - - - - - - - -
- -

Class: MoneroDaemonUpdateDownloadResult

- - - - - - -
- -
- -

MoneroDaemonUpdateDownloadResult(is)

- -
Models the result of downloading an update.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroDaemonUpdateDownloadResult(is)

- - - - - - -
- Construct a download result. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
is - - -MoneroDaemonUpdateCheckResult - - - - an existing result to copy from
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getDownloadPath() → {string}

- - - - - - -
- Get the path the update was downloaded to. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the path the update was downloaded to -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

setDownloadPath()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroDestination.html b/docs/MoneroDestination.html deleted file mode 100644 index 3b58f23b5..000000000 --- a/docs/MoneroDestination.html +++ /dev/null @@ -1,847 +0,0 @@ - - - - - JSDoc: Class: MoneroDestination - - - - - - - - - - -
- -

Class: MoneroDestination

- - - - - - -
- -
- -

MoneroDestination(stateOrAddress, amount)

- -
Models an outgoing transfer destination.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroDestination(stateOrAddress, amount)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
stateOrAddress - - -MoneroDestination -| - -object -| - -string - - - - is a MoneroDestination, JS object, or hex string to initialize from (optional)
amount - - -BigInteger -| - -string - - - - the destination amount
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroError.html b/docs/MoneroError.html deleted file mode 100644 index 30fa7b915..000000000 --- a/docs/MoneroError.html +++ /dev/null @@ -1,418 +0,0 @@ - - - - - JSDoc: Class: MoneroError - - - - - - - - - - -
- -

Class: MoneroError

- - - - - - -
- -
- -

MoneroError(message, code)

- -
Exception when interacting with a Monero wallet or daemon.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroError(message, code)

- - - - - - -
- Constructs the error. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - -string - - - - is a human-readable message of the error
code - - -int - - - - is the error code (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getCode()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroFeeEstimate.html b/docs/MoneroFeeEstimate.html deleted file mode 100644 index f68d31daa..000000000 --- a/docs/MoneroFeeEstimate.html +++ /dev/null @@ -1,986 +0,0 @@ - - - - - JSDoc: Class: MoneroFeeEstimate - - - - - - - - - - -
- -

Class: MoneroFeeEstimate

- - - - - - -
- -
- -

MoneroFeeEstimate(state)

- -
Models a Monero fee estimate.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroFeeEstimate(state)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroFeeEstimate -| - -object - - - - MoneroFeeEstimate or JS object
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFees()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getQuantizationMask()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFees()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setQuantizationMask()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroHardForkInfo.html b/docs/MoneroHardForkInfo.html deleted file mode 100644 index c917ac28b..000000000 --- a/docs/MoneroHardForkInfo.html +++ /dev/null @@ -1,1938 +0,0 @@ - - - - - JSDoc: Class: MoneroHardForkInfo - - - - - - - - - - -
- -

Class: MoneroHardForkInfo

- - - - - - -
- -
- -

MoneroHardForkInfo()

- -
Monero hard fork info.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroHardForkInfo()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getCredits()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getEarliestHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumVotes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getState()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getThreshold()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTopBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getVoting()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getWindow()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isEnabled()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCredits()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setEarliestHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsEnabled()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumVotes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setState()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setThreshold()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTopBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setVoting()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setWindow()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroIncomingTransfer.html b/docs/MoneroIncomingTransfer.html deleted file mode 100644 index 652137286..000000000 --- a/docs/MoneroIncomingTransfer.html +++ /dev/null @@ -1,1988 +0,0 @@ - - - - - JSDoc: Class: MoneroIncomingTransfer - - - - - - - - - - -
- -

Class: MoneroIncomingTransfer

- - - - - - -
- -
- -

MoneroIncomingTransfer(state)

- -
Models an incoming transfer of funds to the wallet.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroIncomingTransfer(state)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroTransfer -| - -object - - - - is existing state to initialize from (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumSuggestedConfirmations() → {number}

- - - - - - -
- Return how many confirmations till it's not economically worth re-writing the chain. -That is, the number of confirmations before the transaction is highly unlikely to be -double spent or overwritten and may be considered settled, e.g. for a merchant to trust -as finalized. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the number of confirmations before it's not worth rewriting the chain -
- - - -
-
- Type -
-
- -number - - -
-
- - - - - - - - - - - - - -

getSubaddressIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOutgoing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge(transfer)

- - - - - - -
- Updates this transaction by merging the latest information from the given -transaction. - -Merging can modify or build references to the transfer given so it -should not be re-used or it should be copied before calling this method. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
transfer - - -MoneroIncomingTransfer - - - - is the transfer to merge into this one
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumSuggestedConfirmations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroIntegratedAddress.html b/docs/MoneroIntegratedAddress.html deleted file mode 100644 index 4f17f5290..000000000 --- a/docs/MoneroIntegratedAddress.html +++ /dev/null @@ -1,846 +0,0 @@ - - - - - JSDoc: Class: MoneroIntegratedAddress - - - - - - - - - - -
- -

Class: MoneroIntegratedAddress

- - - - - - -
- -
- -

MoneroIntegratedAddress()

- -
Monero integrated address model.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroIntegratedAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getIntegratedAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getStandardAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIntegratedAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setStandardAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroKeyImage.html b/docs/MoneroKeyImage.html deleted file mode 100644 index 3ba5ff61b..000000000 --- a/docs/MoneroKeyImage.html +++ /dev/null @@ -1,928 +0,0 @@ - - - - - JSDoc: Class: MoneroKeyImage - - - - - - - - - - -
- -

Class: MoneroKeyImage

- - - - - - -
- -
- -

MoneroKeyImage(stateOrHex, signature)

- -
Models a Monero key image.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroKeyImage(stateOrHex, signature)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
stateOrHex - - -MoneroKeyImage -| - -object -| - -string - - - - is a MoneroKeyImage, JS object, or hex string to initialize from (optional)
signature - - -string - - - - is the key image's signature
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSignature()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSignature()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroKeyImageImportResult.html b/docs/MoneroKeyImageImportResult.html deleted file mode 100644 index 031ef2630..000000000 --- a/docs/MoneroKeyImageImportResult.html +++ /dev/null @@ -1,762 +0,0 @@ - - - - - JSDoc: Class: MoneroKeyImageImportResult - - - - - - - - - - -
- -

Class: MoneroKeyImageImportResult

- - - - - - -
- -
- -

MoneroKeyImageImportResult()

- -
Models results from importing key images.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroKeyImageImportResult()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSpentAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUnspentAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSpentAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUnspentAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroKeyImageSpentStatus.html b/docs/MoneroKeyImageSpentStatus.html deleted file mode 100644 index ff32e2a7e..000000000 --- a/docs/MoneroKeyImageSpentStatus.html +++ /dev/null @@ -1,350 +0,0 @@ - - - - - JSDoc: Class: MoneroKeyImageSpentStatus - - - - - - - - - - -
- -

Class: MoneroKeyImageSpentStatus

- - - - - - -
- -
- -

MoneroKeyImageSpentStatus

- -
Enumerate key image spent statuses.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -

Members

- - - -

(static) CONFIRMED

- - - - -
- Key image is confirmed (value=1). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) NOT_SPENT

- - - - -
- Key image is not spent (value=0). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) TX_POOL

- - - - -
- Key image is in the pool (value=2). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroMessageSignatureResult.html b/docs/MoneroMessageSignatureResult.html deleted file mode 100644 index 887c155f5..000000000 --- a/docs/MoneroMessageSignatureResult.html +++ /dev/null @@ -1,930 +0,0 @@ - - - - - JSDoc: Class: MoneroMessageSignatureResult - - - - - - - - - - -
- -

Class: MoneroMessageSignatureResult

- - - - - - -
- -
- -

MoneroMessageSignatureResult()

- -
Message signature verification result.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroMessageSignatureResult()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getSignatureType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOld()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsOld()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSignatureType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroMessageSignatureType.html b/docs/MoneroMessageSignatureType.html deleted file mode 100644 index 2e333a030..000000000 --- a/docs/MoneroMessageSignatureType.html +++ /dev/null @@ -1,288 +0,0 @@ - - - - - JSDoc: Class: MoneroMessageSignatureType - - - - - - - - - - -
- -

Class: MoneroMessageSignatureType

- - - - - - -
- -
- -

MoneroMessageSignatureType

- -
Enumerate message signature types.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -

Members

- - - -

(static) SIGN_WITH_SPEND_KEY

- - - - -
- Sign with spend key (value=0). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) SIGN_WITH_VIEW_KEY

- - - - -
- Sign with the view key (value=1). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroMinerTxSum.html b/docs/MoneroMinerTxSum.html deleted file mode 100644 index 2a0293600..000000000 --- a/docs/MoneroMinerTxSum.html +++ /dev/null @@ -1,594 +0,0 @@ - - - - - JSDoc: Class: MoneroMinerTxSum - - - - - - - - - - -
- -

Class: MoneroMinerTxSum

- - - - - - -
- -
- -

MoneroMinerTxSum()

- -
Model for the summation of miner emissions and fees.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroMinerTxSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getEmissionSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFeeSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setEmissionSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFeeSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroMiningStatus.html b/docs/MoneroMiningStatus.html deleted file mode 100644 index 073f25d27..000000000 --- a/docs/MoneroMiningStatus.html +++ /dev/null @@ -1,1098 +0,0 @@ - - - - - JSDoc: Class: MoneroMiningStatus - - - - - - - - - - -
- -

Class: MoneroMiningStatus

- - - - - - -
- -
- -

MoneroMiningStatus()

- -
Models daemon mining status.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroMiningStatus()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumThreads()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSpeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isActive()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isBackground()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsActive()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsBackground()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumThreads()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSpeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroMultisigInfo.html b/docs/MoneroMultisigInfo.html deleted file mode 100644 index 47f2a7652..000000000 --- a/docs/MoneroMultisigInfo.html +++ /dev/null @@ -1,930 +0,0 @@ - - - - - JSDoc: Class: MoneroMultisigInfo - - - - - - - - - - -
- -

Class: MoneroMultisigInfo

- - - - - - -
- -
- -

MoneroMultisigInfo()

- -
Models information about a multisig wallet.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroMultisigInfo()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getNumParticipants()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getThreshold()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isMultisig()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isReady()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsMultisig()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsReady()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumParticipants()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setThreshold()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroMultisigInitResult.html b/docs/MoneroMultisigInitResult.html deleted file mode 100644 index d8b28f9b0..000000000 --- a/docs/MoneroMultisigInitResult.html +++ /dev/null @@ -1,596 +0,0 @@ - - - - - JSDoc: Class: MoneroMultisigInitResult - - - - - - - - - - -
- -

Class: MoneroMultisigInitResult

- - - - - - -
- -
- -

MoneroMultisigInitResult()

- -
Models the result of initializing a multisig wallet which results in the -multisig wallet's address xor another multisig hex to share with -participants to create the wallet.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroMultisigInitResult()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMultisigHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMultisigHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroMultisigSignResult.html b/docs/MoneroMultisigSignResult.html deleted file mode 100644 index a453cf6cf..000000000 --- a/docs/MoneroMultisigSignResult.html +++ /dev/null @@ -1,594 +0,0 @@ - - - - - JSDoc: Class: MoneroMultisigSignResult - - - - - - - - - - -
- -

Class: MoneroMultisigSignResult

- - - - - - -
- -
- -

MoneroMultisigSignResult()

- -
Models the result of signing multisig tx hex.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroMultisigSignResult()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getSignedMultisigTxHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTxHashes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSignedMultisigTxHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTxHashes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroNetworkType.html b/docs/MoneroNetworkType.html deleted file mode 100644 index bc1cf4324..000000000 --- a/docs/MoneroNetworkType.html +++ /dev/null @@ -1,919 +0,0 @@ - - - - - JSDoc: Class: MoneroNetworkType - - - - - - - - - - -
- -

Class: MoneroNetworkType

- - - - - - -
- -
- -

MoneroNetworkType

- -
Defines the Monero network types (mainnet, testnet, and stagenet).
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -

Members

- - - -

(static) MAINNET

- - - - -
- Mainnet (value=0). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) STAGENET

- - - - -
- Stagnet (value=2). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) TESTNET

- - - - -
- Testnet (value=1). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - -

Methods

- - - - - - - -

(static) isValid(networkType) → {boolean}

- - - - - - -
- Indicates if the given network type is valid or not. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
networkType - - -int - - - - the network type to validate as a numeric
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the network type is valid, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(static) parse(networkTypeStr) → {int}

- - - - - - -
- Parse the given string as a network type. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
networkTypeStr - - -string - - - - "mainnet", "testnet", or "stagenet" (case insensitive)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the network type as a numeric -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(static) toString() → {string}

- - - - - - -
- Get the network type in human-readable form. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the network type in human-readable form -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(static) validate(networkType)

- - - - - - -
- Validates the given network type. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
networkType - - -int - - - - the network type to validate as a numeric
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroOutgoingTransfer.html b/docs/MoneroOutgoingTransfer.html deleted file mode 100644 index 03a0bfbc7..000000000 --- a/docs/MoneroOutgoingTransfer.html +++ /dev/null @@ -1,1865 +0,0 @@ - - - - - JSDoc: Class: MoneroOutgoingTransfer - - - - - - - - - - -
- -

Class: MoneroOutgoingTransfer

- - - - - - -
- -
- -

MoneroOutgoingTransfer(state)

- -
Models an outgoing transfer of funds from the wallet.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroOutgoingTransfer(state)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroOutgoingTranser -| - -object - - - - is existing state to initialize from (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAddresses()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDestinations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubaddressIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOutgoing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge(transfer)

- - - - - - -
- Updates this transaction by merging the latest information from the given -transaction. - -Merging can modify or build references to the transfer given so it -should not be re-used or it should be copied before calling this method. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
transfer - - is the transfer to merge into this one
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddresses()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDestinations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroOutput.html b/docs/MoneroOutput.html deleted file mode 100644 index 1fa49ebb4..000000000 --- a/docs/MoneroOutput.html +++ /dev/null @@ -1,1574 +0,0 @@ - - - - - JSDoc: Class: MoneroOutput - - - - - - - - - - -
- -

Class: MoneroOutput

- - - - - - -
- -
- -

MoneroOutput(state)

- -
Models a Monero transaction output.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroOutput(state)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroOutput -| - -object - - - - is existing state to initialize from (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getKeyImage()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRingOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getStealthPublicKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setKeyImage()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRingOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setStealthPublicKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroOutputHistogramEntry.html b/docs/MoneroOutputHistogramEntry.html deleted file mode 100644 index b0f8c919b..000000000 --- a/docs/MoneroOutputHistogramEntry.html +++ /dev/null @@ -1,930 +0,0 @@ - - - - - JSDoc: Class: MoneroOutputHistogramEntry - - - - - - - - - - -
- -

Class: MoneroOutputHistogramEntry

- - - - - - -
- -
- -

MoneroOutputHistogramEntry()

- -
Entry in a Monero output histogram (see get_output_histogram of Daemon RPC documentation).
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroOutputHistogramEntry()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumInstances()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumRecentInstances()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumUnlockedInstances()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumInstances()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumRecentInstances()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumUnlockedInstances()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroOutputQuery.html b/docs/MoneroOutputQuery.html deleted file mode 100644 index eab7885e2..000000000 --- a/docs/MoneroOutputQuery.html +++ /dev/null @@ -1,3634 +0,0 @@ - - - - - JSDoc: Class: MoneroOutputQuery - - - - - - - - - - -
- -

Class: MoneroOutputQuery

- - - - - - -
- -
- -

MoneroOutputQuery(config)

- -
Configuration to query wallet outputs.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroOutputQuery(config)

- - - - - - -
-

Construct the output query.

- -

Example:

- - -// get available outputs in account 0 with a minimum amount
-let outputs = await wallet.getOutputs({
-   isSpent: false,
-   isLocked: false,
-   accountIndex: 0,
-   minAmount: new BigInteger("750000")
-}); -
- -

All configuration is optional. All outputs are returned except those that don't meet criteria defined in this query.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -object - - - - output query configuration (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIndex - - -int - - - - get outputs in this account index
subaddressIndex - - -int - - - - get outputs in this subaddress index
subaddressIndices - - -Array.<int> - - - - get outputs in these subaddress indices
amount - - -BigInteger - - - - get outputs with this amount
minAmount - - -BigInteger - - - - get outputs with amount greater than or equal to this amount
maxAmount - - -BigInteger - - - - get outputs with amount less than or equal to this amount
isSpent - - -boolean - - - - get spent xor unspent outputs
isFrozen - - -boolean - - - - get frozen xor thawed outputs
keyImage - - -object -| - -MoneroKeyImage - - - - get outputs with a key image matching fields defined in this key image -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
hex - - -string - - - - get outputs with this key image hex
signature - - -string - - - - get outputs with this key image signature
- -
txQuery - - -object -| - -MoneroTxQuery - - - - get outputs whose tx match this tx query
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getKeyImage()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMaxAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMinAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRingOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getStealthPublicKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubaddressIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubaddressIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTxQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isFrozen()

- - - - - - -
- Indicates if this output has been deemed 'malicious' and will therefore -not be spent by the wallet. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- Boolean is whether or not this output is frozen -
- - - - - - - - - - - - - - - -

isLocked()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isSpent()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

meetsCriteria()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge(output)

- - - - - - -
- Updates this output by merging the latest information from the given -output. - -Merging can modify or build references to the output given so it -should not be re-used or it should be copied before calling this method. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
output - - is the output to merge into this one
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsFrozen()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsSpent()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setKeyImage()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMaxAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMinAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRingOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setStealthPublicKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTxQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroOutputWallet.html b/docs/MoneroOutputWallet.html deleted file mode 100644 index 0da0923e8..000000000 --- a/docs/MoneroOutputWallet.html +++ /dev/null @@ -1,2488 +0,0 @@ - - - - - JSDoc: Class: MoneroOutputWallet - - - - - - - - - - -
- -

Class: MoneroOutputWallet

- - - - - - -
- -
- -

MoneroOutputWallet(state)

- -
Models a Monero output with wallet extensions.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroOutputWallet(state)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroOutputWallet -| - -object - - - - is existing state to initialize from (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getKeyImage()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRingOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getStealthPublicKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubaddressIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isFrozen()

- - - - - - -
- Indicates if this output has been deemed 'malicious' and will therefore -not be spent by the wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- Boolean is whether or not this output is frozen -
- - - - - - - - - - - - - - - -

isLocked()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isSpent()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge(output)

- - - - - - -
- Updates this output by merging the latest information from the given -output. - -Merging can modify or build references to the output given so it -should not be re-used or it should be copied before calling this method. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
output - - is the output to merge into this one
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsFrozen()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsSpent()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setKeyImage()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRingOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setStealthPublicKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroPeer.html b/docs/MoneroPeer.html deleted file mode 100644 index 5ffb07b7d..000000000 --- a/docs/MoneroPeer.html +++ /dev/null @@ -1,4653 +0,0 @@ - - - - - JSDoc: Class: MoneroPeer - - - - - - - - - - -
- -

Class: MoneroPeer

- - - - - - -
- -
- -

MoneroPeer()

- -
Models a peer to the daemon.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroPeer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAvgDownload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAvgUpload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCurrentDownload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCurrentUpload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastSeenTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLiveTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumReceives()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumSends()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumSupportFlags()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPort()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPruningSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReceiveIdleTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRpcCreditsPerHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRpcPort()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSendIdleTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getState()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isLocalHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isLocalIp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOnline() → {boolean}

- - - - - - -
- Indicates if the peer was online when last checked (aka "white listed" as -opposed to "gray listed"). -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if peer was online when last checked, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

setAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAvgDownload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAvgUpload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCurrentDownload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCurrentUpload()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsLocalHost()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsLocalIp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsOnline()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastSeenTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLiveTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumReceives()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumSends()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumSupportFlags()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPort()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPruningSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReceiveIdleTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRpcCreditsPerHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRpcPort()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSendIdleTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setState()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroPruneResult.html b/docs/MoneroPruneResult.html deleted file mode 100644 index 7e45930e1..000000000 --- a/docs/MoneroPruneResult.html +++ /dev/null @@ -1,594 +0,0 @@ - - - - - JSDoc: Class: MoneroPruneResult - - - - - - - - - - -
- -

Class: MoneroPruneResult

- - - - - - -
- -
- -

MoneroPruneResult()

- -
Result of pruning the blockchain.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroPruneResult()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getPruningSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isPruned()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsPruned()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPruningSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroRpcConnection.html b/docs/MoneroRpcConnection.html deleted file mode 100644 index c2ac2ff21..000000000 --- a/docs/MoneroRpcConnection.html +++ /dev/null @@ -1,2980 +0,0 @@ - - - - - JSDoc: Class: MoneroRpcConnection - - - - - - - - - - -
- -

Class: MoneroRpcConnection

- - - - - - -
- -
- -

MoneroRpcConnection(uriOrConfigOrConnection, username, password, rejectUnauthorized)

- -
Maintains a connection and sends requests to a Monero RPC API.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroRpcConnection(uriOrConfigOrConnection, username, password, rejectUnauthorized)

- - - - - - -
-

Construct a RPC connection.

- -

Examples:

- - -let connection1 = new MoneroRpcConnection("http://localhost:38081", "daemon_user", "daemon_password_123")

- -let connection2 = new MoneroRpcConnection({
-   uri: http://localhost:38081,
-   username: "daemon_user",
-   password: "daemon_password_123",
-   rejectUnauthorized: false, // accept self-signed certificates e.g. for local development
-   proxyToWorker: true // proxy request to worker (default false)
-}); -
-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uriOrConfigOrConnection - - -string -| - -object -| - -MoneroRpcConnection - - - - RPC endpoint URI, MoneroRpcConnection, or equivalent JS object -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - URI of the RPC endpoint
username - - -string - - - - username to authenticate with the RPC endpoint (optional)
password - - -string - - - - password to authenticate with the RPC endpoint (optional)
rejectUnauthorized - - -boolean - - - - rejects self-signed certificates if true (default true)
proxyToWorker - - -boolean - - - - proxy requests to worker
- -
username - - -string - - - - username to authenticate with the RPC endpoint (optional)
password - - -string - - - - password to authenticate with the RPC endpoint (optional)
rejectUnauthorized - - -boolean - - - - reject self-signed certificates if true (default true)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -

Members

- - - -

(static) DEFAULT_CONFIG

- - - - -
- Default RPC configuration. -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - -

Methods

- - - - - - - -

(async) checkConnection(timeoutInMs) → {Promise.<boolean>}

- - - - - - -
- Check the connection status to update isOnline, isAuthenticated, and response time. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
timeoutInMs - - -int - - - - maximum response time before considered offline
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if there is a change in status, false otherwise -
- - - -
-
- Type -
-
- -Promise.<boolean> - - -
-
- - - - - - - - - - - - - -

getAttribute()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getConfig()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPassword()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPriority()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getProxyToWorker()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRejectUnauthorized()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getResponseTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUri()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUsername()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isAuthenticated() → {boolean|undefined}

- - - - - - -
- Indicates if the connection is authenticated according to the last call to checkConnection().

- -Note: must call checkConnection() manually unless using MoneroConnectionManager. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if authenticated or no authentication, false if not authenticated, or undefined if checkConnection() has not been called -
- - - -
-
- Type -
-
- -boolean -| - -undefined - - -
-
- - - - - - - - - - - - - -

isConnected() → {boolean|undefined}

- - - - - - -
- Indicates if the connection is connected according to the last call to checkConnection().

- -Note: must call checkConnection() manually unless using MoneroConnectionManager. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true or false to indicate if connected, or undefined if checkConnection() has not been called -
- - - -
-
- Type -
-
- -boolean -| - -undefined - - -
-
- - - - - - - - - - - - - -

isOnline() → {boolean|undefined}

- - - - - - -
- Indicates if the connection is online according to the last call to checkConnection().

- -Note: must call checkConnection() manually unless using MoneroConnectionManager. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true or false to indicate if online, or undefined if checkConnection() has not been called -
- - - -
-
- Type -
-
- -boolean -| - -undefined - - -
-
- - - - - - - - - - - - - -

(async) sendBinaryRequest(path, params, timeoutInMs) → {Uint8Array}

- - - - - - -
- Send a binary RPC request. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path of the binary RPC method to invoke
params - - -object - - - - request parameters
timeoutInMs - - -int - - - - request timeout in milliseconds
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the binary response -
- - - -
-
- Type -
-
- -Uint8Array - - -
-
- - - - - - - - - - - - - -

(async) sendJsonRequest(method, params, timeoutInMs) → {object}

- - - - - - -
- Send a JSON RPC request. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
method - - -string - - - - JSON RPC method to invoke
params - - -object - - - - request parameters
timeoutInMs - - -int - - - - request timeout in milliseconds
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the response map -
- - - -
-
- Type -
-
- -object - - -
-
- - - - - - - - - - - - - -

(async) sendPathRequest(path, params, timeoutInMs) → {object}

- - - - - - -
- Send a RPC request to the given path and with the given paramters. - -E.g. "/get_transactions" with params -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - JSON RPC path to invoke
params - - -object - - - - request parameters
timeoutInMs - - -int - - - - request timeout in milliseconds
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the response map -
- - - -
-
- Type -
-
- -object - - -
-
- - - - - - - - - - - - - -

setAttribute()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCredentials()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPriority(priority) → {MoneroRpcConnection}

- - - - - - -
- Set the connection's priority relative to other connections. Priority 1 is highest, -then priority 2, etc. The default priority of 0 is lowest priority. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
priority - - -int - - - - the connection priority (default 0)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this connection -
- - - -
-
- Type -
-
- -MoneroRpcConnection - - -
-
- - - - - - - - - - - - - -

setProxyToWorker()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroRpcError.html b/docs/MoneroRpcError.html deleted file mode 100644 index e3ea68661..000000000 --- a/docs/MoneroRpcError.html +++ /dev/null @@ -1,548 +0,0 @@ - - - - - JSDoc: Class: MoneroRpcError - - - - - - - - - - -
- -

Class: MoneroRpcError

- - - - - - -
- -
- -

MoneroRpcError(rpcDescription, rpcCode, rpcMethod, rpcParams)

- -
Error when interacting with Monero RPC.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroRpcError(rpcDescription, rpcCode, rpcMethod, rpcParams)

- - - - - - -
- Constructs the error. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
rpcDescription - - -string - - - - is a description of the error from rpc
rpcCode - - -int - - - - is the error code from rpc
rpcMethod - - -string - - - - is the rpc method invoked
rpcParams - - -object - - - - are parameters sent with the rpc request
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getRpcMethod()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRpcParams()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroSubaddress.html b/docs/MoneroSubaddress.html deleted file mode 100644 index 1e944c2c0..000000000 --- a/docs/MoneroSubaddress.html +++ /dev/null @@ -1,1854 +0,0 @@ - - - - - JSDoc: Class: MoneroSubaddress - - - - - - - - - - -
- -

Class: MoneroSubaddress

- - - - - - -
- -
- -

MoneroSubaddress()

- -
Monero subaddress model.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroSubaddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBalance()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLabel()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumBlocksToUnlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumUnspentOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUnlockedBalance()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isUsed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBalance()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsUsed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLabel()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumBlocksToUnlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumUnspentOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUnlockedBalance()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroSubmitTxResult.html b/docs/MoneroSubmitTxResult.html deleted file mode 100644 index bd88eaf4f..000000000 --- a/docs/MoneroSubmitTxResult.html +++ /dev/null @@ -1,2778 +0,0 @@ - - - - - JSDoc: Class: MoneroSubmitTxResult - - - - - - - - - - -
- -

Class: MoneroSubmitTxResult

- - - - - - -
- -
- -

MoneroSubmitTxResult()

- -
Models the result from submitting a tx to a daemon.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroSubmitTxResult()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getCredits()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReason()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSanityCheckFailed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTopBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

hasInvalidInput()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

hasInvalidOutput()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

hasTooFewOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isDoubleSpendSeen()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isFeeTooLow()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isMixinTooLow()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOverspend()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isTooBig()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isTxExtraTooBig()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCredits()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHasInvalidInput()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHasInvalidOutput()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHasTooFewOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsDoubleSpend()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsFeeTooLow()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsGood()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsMixinTooLow()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsOverspend()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsTooBig()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsTxExtraTooBig()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReason()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSanityCheckFailed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTopBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroSyncResult.html b/docs/MoneroSyncResult.html deleted file mode 100644 index 51d07f0bb..000000000 --- a/docs/MoneroSyncResult.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - JSDoc: Class: MoneroSyncResult - - - - - - - - - - -
- -

Class: MoneroSyncResult

- - - - - - -
- -
- -

MoneroSyncResult()

- -
Result from syncing a Monero wallet.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroSyncResult()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getNumBlocksFetched()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReceivedMoney()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumBlocksFetched()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReceivedMoney()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroTransfer.html b/docs/MoneroTransfer.html deleted file mode 100644 index fdf706ae9..000000000 --- a/docs/MoneroTransfer.html +++ /dev/null @@ -1,1312 +0,0 @@ - - - - - JSDoc: Class: MoneroTransfer - - - - - - - - - - -
- -

Class: MoneroTransfer

- - - - - - -
- -
- -

MoneroTransfer(state)

- -
Models a base transfer of funds to or from the wallet.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroTransfer(state)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroTransfer -| - -object - - - - is existing state to initialize from (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOutgoing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge(transfer) → {MoneroTransfer}

- - - - - - -
- Updates this transaction by merging the latest information from the given -transaction. - -Merging can modify or build references to the transfer given so it -should not be re-used or it should be copied before calling this method. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
transfer - - is the transfer to merge into this one
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the merged transfer -
- - - -
-
- Type -
-
- -MoneroTransfer - - -
-
- - - - - - - - - - - - - -

setAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroTransferQuery.html b/docs/MoneroTransferQuery.html deleted file mode 100644 index 7db52a123..000000000 --- a/docs/MoneroTransferQuery.html +++ /dev/null @@ -1,3233 +0,0 @@ - - - - - JSDoc: Class: MoneroTransferQuery - - - - - - - - - - -
- -

Class: MoneroTransferQuery

- - - - - - -
- -
- -

MoneroTransferQuery(config)

- -
Configuration to query wallet transfers.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroTransferQuery(config)

- - - - - - -
-

Construct the transfer query.

- -

Example:

- - -// get incoming transfers to account 0, subaddress 1
-let transfers = await wallet.getTransfers({
-   accountIndex: 0,
-   subaddressIndex: 0
-}); -
- -

All configuration is optional. All transfers are returned except those that don't meet criteria defined in this query.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -object - - - - transfer query configuration (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
amount - - -BigInteger - - - - get transfers with this amount
accountIndex - - -int - - - - get transfers to/from this account index
subaddressIndex - - -int - - - - get transfers to/from this subaddress index
subaddressIndices - - -Array.<int> - - - - get transfers to/from these subaddress indices
address - - -string - - - - get transfers to/from this wallet address
addresses - - -Array.<string> - - - - get transfers to/from these wallet addresses
isIncoming - - -boolean - - - - get transfers which are incoming if true
isOutgoing - - -boolean - - - - get transfers which are outgoing if true
hasDestinations - - -boolean - - - - get transfers with known destinations if true (destinations are only stored locally with the wallet)
txQuery - - -object -| - -MoneroTxQuery - - - - get transfers whose tx match this tx query
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAddresses()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDestinations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubaddressIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubaddressIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTxQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

hasDestinations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOutgoing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

meetsCriteria()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge(transfer) → {MoneroTransfer}

- - - - - - -
- Updates this transaction by merging the latest information from the given -transaction. - -Merging can modify or build references to the transfer given so it -should not be re-used or it should be copied before calling this method. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
transfer - - is the transfer to merge into this one
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the merged transfer -
- - - -
-
- Type -
-
- -MoneroTransfer - - -
-
- - - - - - - - - - - - - -

setAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddresses()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDestinations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHasDestinations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsLocked(isLocked) → {MoneroOutputQuery}

- - - - - - -
- Convenience method to query outputs by the locked state of their tx. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
isLocked - - specifies if the output's tx must be locked or unlocked (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this query for chaining -
- - - -
-
- Type -
-
- -MoneroOutputQuery - - -
-
- - - - - - - - - - - - - -

setIsOutgoing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTxQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroTx.html b/docs/MoneroTx.html deleted file mode 100644 index b695a9f42..000000000 --- a/docs/MoneroTx.html +++ /dev/null @@ -1,7042 +0,0 @@ - - - - - JSDoc: Class: MoneroTx - - - - - - - - - - -
- -

Class: MoneroTx

- - - - - - -
- -
- -

MoneroTx(state)

- -
Represents a transaction on the Monero network.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroTx(state)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroTx -| - -object - - - - is existing state to initialize from (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getExtra()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFullHex() → {string}

- - - - - - -
- Get full transaction hex. Full hex = pruned hex + prunable hex. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is full transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getInputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastFailedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastFailedHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastRelayedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMaxUsedBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMaxUsedBlockHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMetadata()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumConfirmations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrunableHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrunableHex() → {string}

- - - - - - -
- Get prunable transaction hex which is hex that is removed from a pruned -transaction. Full hex = pruned hex + prunable hex. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the prunable transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getPrunedHex() → {string}

- - - - - - -
- Get pruned transaction hex. Full hex = pruned hex + prunable hex. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is pruned transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getRctSigPrunable()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRctSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReceivedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRelay()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRingSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUnlockTime() → {BigInteger}

- - - - - - -
- Get the minimum height or timestamp for the transactions to unlock. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the minimum height or timestamp for the transactin to unlock -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

getVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

inTxPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isConfirmed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isDoubleSpendSeen()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isFailed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isKeptByBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isMinerTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge(tx) → {MoneroTx}

- - - - - - -
- Updates this transaction by merging the latest information from the given -transaction. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tx - - is the transaction to update this transaction with
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this for method chaining -
- - - -
-
- Type -
-
- -MoneroTx - - -
-
- - - - - - - - - - - - - -

setBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setExtra()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFullHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInTxPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsConfirmed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsDoubleSpend()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsFailed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsKeptByBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsMinerTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastFailedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastFailedHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastRelayedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMaxUsedBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMaxUsedBlockHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMetadata()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumConfirmations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrunableHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrunableHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrunedHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRctSigPrunable()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRctSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReceivedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRelay()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRingSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUnlockTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroTxConfig.html b/docs/MoneroTxConfig.html deleted file mode 100644 index 21f49e7af..000000000 --- a/docs/MoneroTxConfig.html +++ /dev/null @@ -1,4199 +0,0 @@ - - - - - JSDoc: Class: MoneroTxConfig - - - - - - - - - - -
- -

Class: MoneroTxConfig

- - - - - - -
- -
- -

MoneroTxConfig(config)

- -
Configures a transaction to send, sweep, or create a payment URI.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroTxConfig(config)

- - - - - - -
-

Generic request to transfer funds from a wallet.

- -

Examples:

- - -let config1 = new MoneroTxConfig({
-   accountIndex: 0,
-   address: "59aZULsUF3YN...",
-   amount: new BigInteger("500000"),
-   priority: MoneroTxPriority.NORMAL,
-   relay: true
-});

-
-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transaction to create (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address
amount - - -BigInteger - - - - single destination amount
accountIndex - - -int - - - - source account index to transfer funds from
subaddressIndex - - -int - - - - source subaddress index to transfer funds from
subaddressIndices - - -Array.<int> - - - - source subaddress indices to transfer funds from
relay - - -boolean - - - - relay the transaction to peers to commit to the blockchain
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
destinations - - -Array.<MoneroDestination> - - - - addresses and amounts in a multi-destination tx
subtractFeeFrom - - -Array.<int> - - - - list of destination indices to split the transaction fee
paymentId - - -string - - - - transaction payment ID
unlockTime - - -BigInteger - - - - minimum height or timestamp for the transaction to unlock (default 0)
note - - -string - - - - transaction note saved locally with the wallet
recipientName - - -string - - - - recipient name saved locally with the wallet
canSplit - - -boolean - - - - allow funds to be transferred using multiple transactions
belowAmount - - -BigInteger - - - - for sweep requests, include outputs below this amount when sweeping wallet, account, subaddress, or all unlocked funds
sweepEachSubaddress - - -boolean - - - - for sweep requests, sweep each subaddress individually instead of together if true
keyImage - - -string - - - - key image to sweep (ignored except in sweepOutput() requests)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

addDestination()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAddress() → {string}

- - - - - - -
- Get the address of a single-destination configuration. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the address of the single destination -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getAmount() → {BigInteger}

- - - - - - -
- Get the amount of a single-destination configuration. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the amount of the single destination -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

getBelowAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCanSplit()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getDestinations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getKeyImage()

- - - - - - -
- Get the key image hex of the output to sweep. - -return {string} is the key image hex of the output to sweep -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNote()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPriority()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRecipientName()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRelay()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubaddressIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubtractFeeFrom()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSweepEachSubaddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUnlockTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAccountIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAddress(address) → {MoneroTxConfig}

- - - - - - -
- Set the address of a single-destination configuration. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - the address to set for the single destination
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this configuration for chaining -
- - - -
-
- Type -
-
- -MoneroTxConfig - - -
-
- - - - - - - - - - - - - -

setAmount(amount) → {MoneroTxConfig}

- - - - - - -
- Set the amount of a single-destination configuration. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
amount - - -BigInteger -| - -string - - - - the amount to set for the single destination
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this configuration for chaining -
- - - -
-
- Type -
-
- -MoneroTxConfig - - -
-
- - - - - - - - - - - - - -

setBelowAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCanSplit()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDestination()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setDestinations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setKeyImage(keyImage)

- - - - - - -
- Set the key image hex of the output to sweep. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - is the key image hex of the output to sweep
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNote()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPriority()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRecipientName()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRelay()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressIndex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubtractFeeFrom()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSweepEachSubaddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUnlockTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroTxPoolStats.html b/docs/MoneroTxPoolStats.html deleted file mode 100644 index aef2316c5..000000000 --- a/docs/MoneroTxPoolStats.html +++ /dev/null @@ -1,2442 +0,0 @@ - - - - - JSDoc: Class: MoneroTxPoolStats - - - - - - - - - - -
- -

Class: MoneroTxPoolStats

- - - - - - -
- -
- -

MoneroTxPoolStats()

- -
Models transaction pool statistics.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroTxPoolStats()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getBytesMax()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBytesMed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBytesMin()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBytesTotal()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFeeTotal()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHisto()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHisto98pc()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNum10m()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumDoubleSpends()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumFailing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumNotRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOldestTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBytesMax()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBytesMed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBytesMin()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBytesTotal()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFeeTotal()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHisto()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHisto98pc()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNum10m()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumDoubleSpends()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumFailing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumNotRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOldestTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroTxPriority.html b/docs/MoneroTxPriority.html deleted file mode 100644 index 1bde31131..000000000 --- a/docs/MoneroTxPriority.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - - JSDoc: Class: MoneroTxPriority - - - - - - - - - - -
- -

Class: MoneroTxPriority

- - - - - - -
- -
- -

MoneroTxPriority

- -
Enumerates send priorities.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -

Members

- - - -

(static) DEFAULT

- - - - -
- Default priority (i.e. normal) (value=0). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) ELEVATED

- - - - -
- Elevated priority (value=3). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) NORMAL

- - - - -
- Normal priority (value=2). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - -

(static) UNIMPORTANT

- - - - -
- Unimportant priority (value=1). -
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroTxQuery.html b/docs/MoneroTxQuery.html deleted file mode 100644 index e49dd3b58..000000000 --- a/docs/MoneroTxQuery.html +++ /dev/null @@ -1,12375 +0,0 @@ - - - - - JSDoc: Class: MoneroTxQuery - - - - - - - - - - -
- -

Class: MoneroTxQuery

- - - - - - -
- -
- -

MoneroTxQuery(config)

- -

Configuration to query transactions.

- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroTxQuery(config)

- - - - - - -
-

Construct the transaction query.

- -

Example:

- - -// get transactions with unlocked incoming transfers to account 0
-let txs = await wallet.getTxs({
-   isLocked: false,
-   transferQuery: {
-     isIncoming: true,
-     accountIndex: 0
-   }
-}); -
- -

All configuration is optional. All transactions are returned except those that don't meet criteria defined in this query.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -object - - - - tx query configuration -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
hash - - -string - - - - get a tx with this hash
txHashes - - -Array.<string> - - - - get txs with these hashes
height - - -int - - - - get txs with this height
minHeight - - -int - - - - get txs with height greater than or equal to this height
maxHeight - - -int - - - - get txs with height less than or equal to this height
isConfirmed - - -boolean - - - - get confirmed or unconfirmed txs
inTxPool - - -boolean - - - - get txs in or out of the tx pool
relay - - -boolean - - - - get txs with the same relay status
isRelayed - - -boolean - - - - get relayed or non-relayed txs
isFailed - - -boolean - - - - get failed or non-failed txs
isMinerTx - - -boolean - - - - get miner or non-miner txs
isLocked - - -boolean - - - - get locked or unlocked txs
isIncoming - - -boolean - - - - get txs with or without incoming transfers
isOutgoing - - -boolean - - - - get txs with or without outgoing transfers
paymentId - - -string - - - - get txs with this payment ID
paymentIds - - -string - - - - get txs with a payment ID among these payment IDs
hasPaymentId - - -boolean - - - - get txs with or without payment IDs
transferQuery - - -object -| - -MoneroTransferQuery - - - - get txs with transfers matching this transfer query
inputQuery - - -object -| - -MoneroOutputQuery - - - - get txs with inputs matching this input query
outputQuery - - -object -| - -MoneroOutputQuery - - - - get txs with outputs matching this output query
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

filterOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

filterTransfers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getChangeAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getChangeAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getExtra()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getExtraHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFullHex() → {string}

- - - - - - -
- Get full transaction hex. Full hex = pruned hex + prunable hex. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is full transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHashes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIncludeOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIncomingAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIncomingTransfers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getInputQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getInputSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getInputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastFailedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastFailedHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastRelayedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMaxHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMaxUsedBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMaxUsedBlockHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMetadata()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMinHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNote()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumConfirmations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumDummyOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutgoingAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutgoingTransfer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutputQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutputSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPaymentIds()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrunableHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrunableHex() → {string}

- - - - - - -
- Get prunable transaction hex which is hex that is removed from a pruned -transaction. Full hex = pruned hex + prunable hex. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the prunable transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getPrunedHex() → {string}

- - - - - - -
- Get pruned transaction hex. Full hex = pruned hex + prunable hex. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is pruned transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getRctSigPrunable()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRctSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReceivedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRelay()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRingSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTransferQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTransfers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTxSet()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUnlockTime() → {BigInteger}

- - - - - - -
- Get the minimum height or timestamp for the transactions to unlock. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the minimum height or timestamp for the transactin to unlock -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

getVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

hasPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

inTxPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isConfirmed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isDoubleSpendSeen()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isFailed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isKeptByBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isLocked()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isMinerTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOutgoing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

meetsCriteria()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge(tx)

- - - - - - -
- Updates this transaction by merging the latest information from the given -transaction. - -Merging can modify or build references to the transaction given so it -should not be re-used or it should be copied before calling this method. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tx - - is the transaction to merge into this transaction
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setChangeAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setChangeAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setExtra()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setExtraHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFullHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHasPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHashes()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInTxPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIncludeOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIncomingTransfers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInputQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInputSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsConfirmed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsDoubleSpend()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsFailed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsKeptByBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsLocked()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsMinerTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsOutgoing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastFailedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastFailedHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastRelayedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMaxHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMaxUsedBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMaxUsedBlockHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMetadata()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMinHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNote()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumConfirmations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumDummyOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutgoingTransfer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutputQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutputSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPaymentIds()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrunableHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrunableHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrunedHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRctSigPrunable()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRctSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReceivedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRelay()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRingSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTransferQuery()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTxSet()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUnlockTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroTxSet.html b/docs/MoneroTxSet.html deleted file mode 100644 index bbafe9540..000000000 --- a/docs/MoneroTxSet.html +++ /dev/null @@ -1,1103 +0,0 @@ - - - - - JSDoc: Class: MoneroTxSet - - - - - - - - - - -
- -

Class: MoneroTxSet

- - - - - - -
- -
- -

MoneroTxSet()

- -
Groups transactions who share common hex data which is needed in order to -sign and submit the transactions. - -For example, multisig transactions created from createTxs() share a common -hex string which is needed in order to sign and submit the multisig -transactions.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroTxSet()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getMultisigTxHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSignedTxHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUnsignedTxHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMultisigTxHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSignedTxHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTxs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUnsignedTxHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroTxWallet.html b/docs/MoneroTxWallet.html deleted file mode 100644 index 3e1161621..000000000 --- a/docs/MoneroTxWallet.html +++ /dev/null @@ -1,10033 +0,0 @@ - - - - - JSDoc: Class: MoneroTxWallet - - - - - - - - - - -
- -

Class: MoneroTxWallet

- - - - - - -
- -
- -

MoneroTxWallet(state)

- -
Models a Monero transaction with wallet extensions.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroTxWallet(state)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
state - - -MoneroTxWallet -| - -object - - - - is existing state to initialize from (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

filterOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

filterTransfers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getChangeAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getChangeAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getExtra()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getExtraHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFullHex() → {string}

- - - - - - -
- Get full transaction hex. Full hex = pruned hex + prunable hex. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is full transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIncomingAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getIncomingTransfers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getInputSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getInputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastFailedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastFailedHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLastRelayedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMaxUsedBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMaxUsedBlockHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getMetadata()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNote()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumConfirmations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumDummyOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutgoingAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutgoingTransfer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutputSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrunableHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrunableHex() → {string}

- - - - - - -
- Get prunable transaction hex which is hex that is removed from a pruned -transaction. Full hex = pruned hex + prunable hex. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the prunable transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getPrunedHex() → {string}

- - - - - - -
- Get pruned transaction hex. Full hex = pruned hex + prunable hex. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is pruned transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getRctSigPrunable()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRctSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getReceivedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRelay()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRingSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTransfers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getTxSet()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getUnlockTime() → {BigInteger}

- - - - - - -
- Get the minimum height or timestamp for the transactions to unlock. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the minimum height or timestamp for the transactin to unlock -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

getVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

inTxPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isConfirmed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isDoubleSpendSeen()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isFailed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isKeptByBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isLocked()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isMinerTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isOutgoing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

merge(tx)

- - - - - - -
- Updates this transaction by merging the latest information from the given -transaction. - -Merging can modify or build references to the transaction given so it -should not be re-used or it should be copied before calling this method. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tx - - is the transaction to merge into this transaction
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setChangeAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setChangeAmount()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setExtra()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setExtraHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFee()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFullHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInTxPool()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIncomingTransfers()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInputSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setInputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsConfirmed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsDoubleSpend()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsFailed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsIncoming()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsKeptByBlock()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsLocked()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsMinerTx()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsOutgoing()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsRelayed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastFailedHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastFailedHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLastRelayedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMaxUsedBlockHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMaxUsedBlockHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setMetadata()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNote()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumConfirmations()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumDummyOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutgoingTransfer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutputIndices()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutputSum()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setOutputs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPaymentId()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrunableHash()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrunableHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrunedHex()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRctSigPrunable()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRctSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setReceivedTimestamp()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRelay()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRingSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSignatures()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSize()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setTxSet()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setUnlockTime()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setVersion()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setWeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toString()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroUtils.html b/docs/MoneroUtils.html deleted file mode 100644 index b94652048..000000000 --- a/docs/MoneroUtils.html +++ /dev/null @@ -1,3893 +0,0 @@ - - - - - JSDoc: Class: MoneroUtils - - - - - - - - - - -
- -

Class: MoneroUtils

- - - - - - -
- -
- -

MoneroUtils

- -
Collection of Monero utilities. Runs in a worker thread by default.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(static) atomicUnitsToXmr(amountAtomicUnits) → {number}

- - - - - - -
- Convert atomic units to XMR. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
amountAtomicUnits - - -BigInteger -| - -string - - - - amount in atomic units to convert to XMR
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- amount in XMR -
- - - -
-
- Type -
-
- -number - - -
-
- - - - - - - - - - - - - -

(async, static) binaryBlocksToJson(uint8arr) → {Promise.<object>}

- - - - - - -
- Convert the binary response from daemon RPC block retrieval to JSON. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uint8arr - - -Uint8Array - - - - binary response from daemon RPC when getting blocks
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- JSON object with the blocks data -
- - - -
-
- Type -
-
- -Promise.<object> - - -
-
- - - - - - - - - - - - - -

(async, static) binaryToJson(uint8arr) → {Promise.<object>}

- - - - - - -
- Convert the given portable storage binary to JSON. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uint8arr - - -Uint8Array - - - - binary data in Monero's portable storage format
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- JSON object converted from the binary data -
- - - -
-
- Type -
-
- -Promise.<object> - - -
-
- - - - - - - - - - - - - -

(async, static) getIntegratedAddress(networkType, standardAddress, paymentId) → {Promise.<MoneroIntegratedAddress>}

- - - - - - -
- Get an integrated address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
networkType - - -MoneroNetworkType - - - - network type of the integrated address
standardAddress - - -string - - - - address to derive the integrated address from
paymentId - - -string - - - - optionally specifies the integrated address's payment id (defaults to random payment id)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the integrated address -
- - - -
-
- Type -
-
- -Promise.<MoneroIntegratedAddress> - - -
-
- - - - - - - - - - - - - -

(async, static) getLastTxPubKey(byte[]opt) → {string}

- - - - - - -
- Decode tx extra according to https://cryptonote.org/cns/cns005.txt and -returns the last tx pub key. - -TODO: use c++ bridge for this -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeAttributesDescription
byte[] - - - - <optional>
- - - - - -
txExtra - array of tx extra bytes
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the last pub key as a hexidecimal string -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(static) getVersion() → {string}

- - - - - - -
-

Get the version of the monero-javascript library.

-

- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the version of this monero-javascript library -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async, static) isValidAddress(address, networkType) → {Promise.<boolean>}

- - - - - - -
- Determine if the given address is valid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - address
networkType - - -MoneroNetworkType - - - - network type of the address to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the address is valid, false otherwise -
- - - -
-
- Type -
-
- -Promise.<boolean> - - -
-
- - - - - - - - - - - - - -

(async, static) isValidPaymentId(paymentId) → {Promise.<bool>}

- - - - - - -
- Determine if the given payment id is valid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
paymentId - - -string - - - - payment id to determine if valid
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the payment id is valid, false otherwise -
- - - -
-
- Type -
-
- -Promise.<bool> - - -
-
- - - - - - - - - - - - - -

(async, static) isValidPrivateSpendKey(privateSpendKey) → {Promise.<bool>}

- - - - - - -
- Indicates if a private spend key is valid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
privateSpendKey - - -string - - - - is the private spend key to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the private spend key is valid, false otherwise -
- - - -
-
- Type -
-
- -Promise.<bool> - - -
-
- - - - - - - - - - - - - -

(async, static) isValidPrivateViewKey(privateViewKey) → {Promise.<bool>}

- - - - - - -
- Indicates if a private view key is valid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
privateViewKey - - -string - - - - is the private view key to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the private view key is valid, false otherwise -
- - - -
-
- Type -
-
- -Promise.<bool> - - -
-
- - - - - - - - - - - - - -

(async, static) isValidPublicSpendKey(publicSpendKey) → {Promise.<bool>}

- - - - - - -
- Indicates if a public spend key is valid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
publicSpendKey - - -string - - - - is the public spend key to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the public spend key is valid, false otherwise -
- - - -
-
- Type -
-
- -Promise.<bool> - - -
-
- - - - - - - - - - - - - -

(async, static) isValidPublicViewKey(publicViewKey) → {Promise.<bool>}

- - - - - - -
- Indicates if a public view key is valid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
publicViewKey - - -string - - - - is the public view key to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the public view key is valid, false otherwise -
- - - -
-
- Type -
-
- -Promise.<bool> - - -
-
- - - - - - - - - - - - - -

(async, static) jsonToBinary(json) → {Promise.<Uint8Array>}

- - - - - - -
- Convert the given JSON to a binary Uint8Array using Monero's portable storage format. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
json - - -object - - - - json to convert to binary
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the json converted to portable storage binary -
- - - -
-
- Type -
-
- -Promise.<Uint8Array> - - -
-
- - - - - - - - - - - - - -

(static) mergeTx(txs, tx)

- - - - - - -
- Merges a transaction into a list of existing transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txs - - -Array.<MoneroTx> - - - - existing transactions to merge into
tx - - -MoneroTx - - - - transaction to merge into the list
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) paymentIdsEqual(paymentId1, paymentId2) → {bool}

- - - - - - -
- Determines if two payment ids are functionally equal. - -For example, 03284e41c342f032 and 03284e41c342f032000000000000000000000000000000000000000000000000 are considered equal. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
paymentId1 - - -string - - - - is a payment id to compare
paymentId2 - - -string - - - - is a payment id to compare
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the payment ids are equal, false otherwise -
- - - -
-
- Type -
-
- -bool - - -
-
- - - - - - - - - - - - - -

(static) setProxyToWorker(proxyToWorker)

- - - - - - -
- Enable or disable proxying these utilities to a worker thread. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
proxyToWorker - - -boolean - - - - specifies if utilities should be proxied to a worker
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) validateAddress(address, networkType)

- - - - - - -
- Validate the given address, throw an error if invalid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - address to validate
networkType - - -MoneroNetworkType - - - - network type of the address to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) validateMnemonic(mnemonic)

- - - - - - -
- Validate the given mnemonic, throw an error if invalid. - -TODO: improve validation, use network type -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
mnemonic - - -string - - - - mnemonic to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) validatePaymentId(paymentId)

- - - - - - -
- Validate the given payment id, throw an error if invalid. - -TODO: improve validation -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
paymentId - - -string - - - - payment id to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) validatePrivateSpendKey(privateSpendKey)

- - - - - - -
- Validate the given private spend key, throw an error if invalid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
privateSpendKey - - -string - - - - private spend key to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) validatePrivateViewKey(privateViewKey)

- - - - - - -
- Validate the given private view key, throw an error if invalid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
privateViewKey - - -string - - - - private view key to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) validatePublicSpendKey(publicSpendKey)

- - - - - - -
- Validate the given public spend key, throw an error if invalid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
publicSpendKey - - -string - - - - public spend key to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) validatePublicViewKey(publicViewKey)

- - - - - - -
- Validate the given public view key, throw an error if invalid. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
publicViewKey - - -string - - - - public view key to validate
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(static) xmrToAtomicUnits(amountXmr) → {BigInteger}

- - - - - - -
- Convert XMR to atomic units. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
amountXmr - - -number -| - -string - - - - amount in XMR to convert to atomic units
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- amount in atomic units -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroVersion.html b/docs/MoneroVersion.html deleted file mode 100644 index b1b32e3f7..000000000 --- a/docs/MoneroVersion.html +++ /dev/null @@ -1,744 +0,0 @@ - - - - - JSDoc: Class: MoneroVersion - - - - - - - - - - -
- -

Class: MoneroVersion

- - - - - - -
- -
- -

MoneroVersion(number, isRelease)

- -
Models a Monero version.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroVersion(number, isRelease)

- - - - - - -
- Construct the model. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
number - - is the version number
isRelease - - indicates if this version is a release
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNumber()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isRelease()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsRelease()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNumber()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroWallet.html b/docs/MoneroWallet.html deleted file mode 100644 index ccbb6268a..000000000 --- a/docs/MoneroWallet.html +++ /dev/null @@ -1,19152 +0,0 @@ - - - - - JSDoc: Interface: MoneroWallet - - - - - - - - - - -
- -

Interface: MoneroWallet

- - - - - - -
- -
- -

MoneroWallet

- -
Monero wallet interface and default implementations.
- - -
- -
-
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(async) addAddressBookEntry(address, description) → {int}

- - - - - - -
- Add an address book entry. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - entry address
description - - -string - - - - entry description (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the index of the added entry -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) addListener(listener)

- - - - - - -
- Register a listener to receive wallet notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroWalletListener - - - - listener to receive wallet notifications
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) changePassword(oldPassword, newPassword)

- - - - - - -
- Change the wallet password. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
oldPassword - - -string - - - - the wallet's old password
newPassword - - -string - - - - the wallet's new password
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) checkReserveProof(address, message, signature) → {MoneroCheckReserve}

- - - - - - -
- Proves a wallet has a disposable reserve using a signature. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - public wallet address
message - - -string - - - - message included with the signature to further authenticate the proof (optional)
signature - - -string - - - - reserve proof signature to check
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of checking the signature proof -
- - - -
-
- Type -
-
- -MoneroCheckReserve - - -
-
- - - - - - - - - - - - - -

(async) checkSpendProof(txHash, message, signature) → {boolean}

- - - - - - -
- Prove a spend using a signature. Unlike proving a transaction, it does not require the destination public address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
message - - -string - - - - message included with the signature to further authenticate the proof (optional)
signature - - -string - - - - transaction signature to confirm
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the signature is good, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) checkTxKey(txHash, txKey, address) → {MoneroCheckTx}

- - - - - - -
- Check a transaction in the blockchain with its secret key. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to check
txKey - - -string - - - - transaction's secret key
address - - -string - - - - destination public address of the transaction
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of the check -
- - - -
-
- Type -
-
- -MoneroCheckTx - - -
-
- - - - - - - - - - - - - -

(async) checkTxProof(txHash, address, message, signature) → {MoneroCheckTx}

- - - - - - -
- Prove a transaction by checking its signature. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
address - - -string - - - - destination public address of the transaction
message - - -string - - - - message included with the signature to further authenticate the proof (optional)
signature - - -string - - - - transaction signature to confirm
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of the check -
- - - -
-
- Type -
-
- -MoneroCheckTx - - -
-
- - - - - - - - - - - - - -

(async) close(save)

- - - - - - -
- Optionally save then close the wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
save - - -boolean - - - - specifies if the wallet should be saved before being closed (default false)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) createAccount(label) → {MoneroAccount}

- - - - - - -
- Create a new account with a label for the first subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
label - - -string - - - - label for account's first subaddress (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created account -
- - - -
-
- Type -
-
- -MoneroAccount - - -
-
- - - - - - - - - - - - - -

(async) createSubaddress(accountIdx, label) → {MoneroSubaddress}

- - - - - - -
- Create a subaddress within an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to create the subaddress within
label - - -string - - - - the label for the subaddress (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created subaddress -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) createTx(config) → {MoneroTxWallet}

- - - - - - -
- Create a transaction to transfer funds from this wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transaction to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required unless `destinations` provided)
amount - - -BigInteger -| - -string - - - - single destination amount (required unless `destinations` provided)
accountIndex - - -int - - - - source account index to transfer funds from (required)
subaddressIndex - - -int - - - - source subaddress index to transfer funds from (optional)
subaddressIndices - - -Array.<int> - - - - source subaddress indices to transfer funds from (optional)
relay - - -boolean - - - - relay the transaction to peers to commit to the blockchain (default false)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
destinations - - -Array.<MoneroDestination> - - - - addresses and amounts in a multi-destination tx (required unless `address` and `amount` provided)
subtractFeeFrom - - -Array.<int> - - - - list of destination indices to split the transaction fee (optional)
paymentId - - -string - - - - transaction payment ID (optional)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transaction to unlock (default 0)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transaction -
- - - -
-
- Type -
-
- -MoneroTxWallet - - -
-
- - - - - - - - - - - - - -

(async) createTxs(config) → {Array.<MoneroTxWallet>}

- - - - - - -
- Create one or more transactions to transfer funds from this wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transactions to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required unless `destinations` provided)
amount - - -BigInteger -| - -string - - - - single destination amount (required unless `destinations` provided)
accountIndex - - -int - - - - source account index to transfer funds from (required)
subaddressIndex - - -int - - - - source subaddress index to transfer funds from (optional)
subaddressIndices - - -Array.<int> - - - - source subaddress indices to transfer funds from (optional)
relay - - -boolean - - - - relay the transactions to peers to commit to the blockchain (default false)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
destinations - - -Array.<MoneroDestination> - - - - addresses and amounts in a multi-destination tx (required unless `address` and `amount` provided)
paymentId - - -string - - - - transaction payment ID (optional)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transactions to unlock (default 0)
canSplit - - -boolean - - - - allow funds to be transferred using multiple transactions (default true)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transactions -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) decodeIntegratedAddress(integratedAddress) → {MoneroIntegratedAddress}

- - - - - - -
- Decode an integrated address to get its standard address and payment id. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
integratedAddress - - -string - - - - integrated address to decode
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the decoded integrated address including standard address and payment id -
- - - -
-
- Type -
-
- -MoneroIntegratedAddress - - -
-
- - - - - - - - - - - - - -

(async) deleteAddressBookEntry(entryIdx)

- - - - - - -
- Delete an address book entry. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
entryIdx - - -int - - - - index of the entry to delete
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) describeMultisigTxSet(multisigTxHex) → {MoneroTxSet}

- - - - - - -
- Describe a tx set from multisig tx hex. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigTxHex - - -string - - - - multisig tx hex
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the tx set containing structured transactions -
- - - -
-
- Type -
-
- -MoneroTxSet - - -
-
- - - - - - - - - - - - - -

(async) describeTxSet(txSet) → {MoneroTxSet}

- - - - - - -
- Describe a tx set containing unsigned or multisig tx hex to a new tx set containing structured transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txSet - - -MoneroTxSet - - - - a tx set containing unsigned or multisig tx hex
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the tx set containing structured transactions -
- - - -
-
- Type -
-
- -MoneroTxSet - - -
-
- - - - - - - - - - - - - -

(async) describeUnsignedTxSet(unsignedTxHex) → {MoneroTxSet}

- - - - - - -
- Describe a tx set from unsigned tx hex. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
unsignedTxHex - - -string - - - - unsigned tx hex
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the tx set containing structured transactions -
- - - -
-
- Type -
-
- -MoneroTxSet - - -
-
- - - - - - - - - - - - - -

(async) editAddressBookEntry(index, setAddress, address, setDescription, description)

- - - - - - -
- Edit an address book entry. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
index - - -number - - - - index of the address book entry to edit
setAddress - - -boolean - - - - specifies if the address should be updated
address - - -string - - - - updated address
setDescription - - -boolean - - - - specifies if the description should be updated
description - - -string - - - - updated description
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) exchangeMultisigKeys(multisigHexes, password) → {MoneroMultisigInitResult}

- - - - - - -
- Exchange multisig hex with participants in a M/N multisig wallet. - -This process must be repeated with participants exactly N-M times. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigHexes - - -Array.<string> - - - - are multisig hex from each participant
password - - -string - - - - wallet's password // TODO monero-project: redundant? wallet is created with password
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result which has the multisig's address xor this wallet's multisig hex to share with participants iff not done -
- - - -
-
- Type -
-
- -MoneroMultisigInitResult - - -
-
- - - - - - - - - - - - - -

(async) exportKeyImages(all) → {Array.<MoneroKeyImage>}

- - - - - - -
- Export signed key images. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
all - - -boolean - - - - export all key images if true, else export the key images since the last export
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's signed key images -
- - - -
-
- Type -
-
- -Array.<MoneroKeyImage> - - -
-
- - - - - - - - - - - - - -

(async) exportMultisigHex() → {string}

- - - - - - -
- Export this wallet's multisig info as hex for other participants. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet's multisig info as hex for other participants -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) exportOutputs(all) → {string}

- - - - - - -
- Export outputs in hex format. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
all - - -boolean - - - - export all outputs if true, else export the outputs since the last export
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- outputs in hex format -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) freezeOutput(keyImage)

- - - - - - -
- Freeze an output. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image of the output to freeze
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) getAccount(accountIdx, includeSubaddresses) → {MoneroAccount}

- - - - - - -
- Get an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to get
includeSubaddresses - - -boolean - - - - include subaddresses if true
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved account -
- - - -
-
- Type -
-
- -MoneroAccount - - -
-
- - - - - - - - - - - - - -

(async) getAccountTags() → {Array.<MoneroAccountTag>}

- - - - - - -
- Return all account tags. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's account tags -
- - - -
-
- Type -
-
- -Array.<MoneroAccountTag> - - -
-
- - - - - - - - - - - - - -

(async) getAccounts(includeSubaddresses, tag) → {Array.<MoneroAccount>}

- - - - - - -
- Get accounts with a given tag. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
includeSubaddresses - - -boolean - - - - include subaddresses if true
tag - - -string - - - - tag for filtering accounts, all accounts if undefined
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- all accounts with the given tag -
- - - -
-
- Type -
-
- -Array.<MoneroAccount> - - -
-
- - - - - - - - - - - - - -

(async) getAddress(accountIdx, subaddressIdx) → {string}

- - - - - - -
- Get the address of a specific subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - the account index of the address's subaddress
subaddressIdx - - -int - - - - the subaddress index within the account
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the receive address of the specified subaddress -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getAddressBookEntries(entryIndices) → {Array.<MoneroAddressBookEntry>}

- - - - - - -
- Get address book entries. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
entryIndices - - -Array.<int> - - - - indices of the entries to get
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the address book entries -
- - - -
-
- Type -
-
- -Array.<MoneroAddressBookEntry> - - -
-
- - - - - - - - - - - - - -

(async) getAddressIndex(address) → {MoneroSubaddress}

- - - - - - -
- Get the account and subaddress index of the given address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - address to get the account and subaddress index from
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the account and subaddress indices -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) getAttribute(key) → {string}

- - - - - - -
- Get an attribute. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
key - - -string - - - - attribute to get the value of
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the attribute's value -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getBalance(accountIdx, subaddressIdx) → {BigInteger}

- - - - - - -
- Get the balance of the wallet, account, or subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to get the balance of (default all accounts)
subaddressIdx - - -int - - - - index of the subaddress to get the balance of (default all subaddresses)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the balance of the wallet, account, or subaddress -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

getConnectionManager() → {MoneroConnectionManager}

- - - - - - -
- Get the wallet's daemon connection manager. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's daemon connection manager -
- - - -
-
- Type -
-
- -MoneroConnectionManager - - -
-
- - - - - - - - - - - - - -

(async) getDaemonConnection() → {MoneroRpcConnection}

- - - - - - -
- Get the wallet's daemon connection. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's daemon connection -
- - - -
-
- Type -
-
- -MoneroRpcConnection - - -
-
- - - - - - - - - - - - - -

(async) getDaemonHeight() → {int}

- - - - - - -
- Get the blockchain's height. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the blockchain's height -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getHeight() → {int}

- - - - - - -
- Get the block height that the wallet is synced to. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the block height that the wallet is synced to -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getHeightByDate(year, month, day)

- - - - - - -
- Get the blockchain's height by date as a conservative estimate for scanning. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
year - - -int - - - - year of the height to get
month - - -int - - - - month of the height to get as a number between 1 and 12
day - - -int - - - - day of the height to get as a number between 1 and 31
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the blockchain's approximate height at the given date -
- - - - - - - - - - - - - - - -

(async) getIncomingTransfers(query) → {Array.<MoneroIncomingTransfer>}

- - - - - - -
- Get incoming transfers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTransferQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - get incoming transfers to a specific address in the wallet (optional)
accountIndex - - -int - - - - get incoming transfers to a specific account index (optional)
subaddressIndex - - -int - - - - get incoming transfers to a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get transfers destined for specific subaddress indices (optional)
amount - - -BigInteger - - - - amount being transferred (optional)
txQuery - - -MoneroTxQuery - - - - get transfers whose transaction meets this query (optional)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- incoming transfers that meet the query -
- - - -
-
- Type -
-
- -Array.<MoneroIncomingTransfer> - - -
-
- - - - - - - - - - - - - -

(async) getIntegratedAddress(standardAddress, paymentId) → {MoneroIntegratedAddress}

- - - - - - -
- Get an integrated address based on the given standard address and payment -ID. Uses the wallet's primary address if an address is not given. -Generates a random payment ID if a payment ID is not given. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
standardAddress - - -string - - - - is the standard address to generate the integrated address from (wallet's primary address if undefined)
paymentId - - -string - - - - is the payment ID to generate an integrated address from (randomly generated if undefined)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the integrated address -
- - - -
-
- Type -
-
- -MoneroIntegratedAddress - - -
-
- - - - - - - - - - - - - -

getListeners() → {Array.<MoneroWalletListener>}

- - - - - - -
- Get the listeners registered with the wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the registered listeners -
- - - -
-
- Type -
-
- -Array.<MoneroWalletListener> - - -
-
- - - - - - - - - - - - - -

(async) getMultisigInfo() → {MoneroMultisigInfo}

- - - - - - -
- Get multisig info about this wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- multisig info about this wallet -
- - - -
-
- Type -
-
- -MoneroMultisigInfo - - -
-
- - - - - - - - - - - - - -

(async) getNewKeyImagesFromLastImport() → {Array.<MoneroKeyImage>}

- - - - - - -
- Get new key images from the last imported outputs. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the key images from the last imported outputs -
- - - -
-
- Type -
-
- -Array.<MoneroKeyImage> - - -
-
- - - - - - - - - - - - - -

(async) getNumBlocksToUnlock() → {Array.<int>}

- - - - - - -
- Get the number of blocks until the next and last funds unlock. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of blocks until the next and last funds unlock in elements 0 and 1, respectively, or undefined if no balance -
- - - -
-
- Type -
-
- -Array.<int> - - -
-
- - - - - - - - - - - - - -

(async) getOutgoingTransfers(query) → {Array.<MoneroOutgoingTransfer>}

- - - - - - -
- Get outgoing transfers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTransferQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - get outgoing transfers from a specific address in the wallet (optional)
accountIndex - - -int - - - - get outgoing transfers from a specific account index (optional)
subaddressIndex - - -int - - - - get outgoing transfers from a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get outgoing transfers from specific subaddress indices (optional)
amount - - -BigInteger - - - - amount being transferred (optional)
destinations - - -Array.<MoneroDestination> - - - - individual destinations of an outgoing transfer, which is local wallet data and NOT recoverable from the blockchain (optional)
hasDestinations - - -boolean - - - - get transfers that have destinations or not (optional)
txQuery - - -MoneroTxQuery - - - - get transfers whose transaction meets this query (optional)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- outgoing transfers that meet the query -
- - - -
-
- Type -
-
- -Array.<MoneroOutgoingTransfer> - - -
-
- - - - - - - - - - - - - -

(async) getOutputs(query) → {Array.<MoneroOutputWallet>}

- - - - - - -
-

Get outputs created from previous transactions that belong to the wallet -(i.e. that the wallet can spend one time). Outputs are part of -transactions which are stored in blocks on the blockchain.

- -

Results can be filtered by passing a query object. Outputs must -meet every criteria defined in the query in order to be returned. All -filtering is optional and no filtering is applied when not defined.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroOutputQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIndex - - -int - - - - get outputs associated with a specific account index (optional)
subaddressIndex - - -int - - - - get outputs associated with a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get outputs associated with specific subaddress indices (optional)
amount - - -BigInteger - - - - get outputs with a specific amount (optional)
minAmount - - -BigInteger - - - - get outputs greater than or equal to a minimum amount (optional)
maxAmount - - -BigInteger - - - - get outputs less than or equal to a maximum amount (optional)
isSpent - - -boolean - - - - get outputs that are spent or not (optional)
keyImage - - -string -| - -MoneroKeyImage - - - - get output with a key image or which matches fields defined in a MoneroKeyImage (optional)
txQuery - - -MoneroTxQuery - - - - get outputs whose transaction meets this filter (optional)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the queried outputs -
- - - -
-
- Type -
-
- -Array.<MoneroOutputWallet> - - -
-
- - - - - - - - - - - - - -

(async) getPath() → {string}

- - - - - - -
- Get the wallet's path. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the path the wallet can be opened with -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPaymentUri(config) → {string}

- - - - - - -
- Creates a payment URI from a send configuration. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig - - - - specifies configuration for a potential tx
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the payment uri -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrimaryAddress() → {string}

- - - - - - -
- Get the wallet's primary address. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's primary address -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrivateSpendKey() → {string}

- - - - - - -
- Get the wallet's private spend key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's private spend key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrivateViewKey() → {string}

- - - - - - -
- Get the wallet's private view key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's private view key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPublicSpendKey() → {string}

- - - - - - -
- Get the wallet's public spend key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's public spend key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPublicViewKey() → {string}

- - - - - - -
- Get the wallet's public view key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's public view key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getReserveProofAccount(accountIdx, amount, message) → {string}

- - - - - - -
- Generate a signature to prove an available amount in an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - account to prove ownership of the amount
amount - - -BigInteger - - - - minimum amount to prove as available in the account
message - - -string - - - - message to include with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the reserve proof signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getReserveProofWallet(message)

- - - - - - -
- Generate a signature to prove the entire balance of the wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - message included with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the reserve proof signature -
- - - - - - - - - - - - - - - -

(async) getSeed() → {string}

- - - - - - -
- Get the wallet's mnemonic phrase or seed. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's mnemonic phrase or seed. -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSeedLanguage() → {string}

- - - - - - -
- Get the language of the wallet's mnemonic phrase or seed. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the language of the wallet's mnemonic phrase or seed. -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSpendProof(txHash, message) → {string}

- - - - - - -
- Generate a signature to prove a spend. Unlike proving a transaction, it does not require the destination public address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
message - - -string - - - - message to include with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the transaction signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSubaddress(accountIdx, subaddressIdx) → {MoneroSubaddress}

- - - - - - -
- Get a subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the subaddress's account
subaddressIdx - - -int - - - - index of the subaddress within the account
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved subaddress -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) getSubaddresses(accountIdx, subaddressIndices) → {Array.<MoneroSubaddress>}

- - - - - - -
- Get subaddresses in an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - account to get subaddresses within
subaddressIndices - - -Array.<int> - - - - indices of subaddresses to get (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved subaddresses -
- - - -
-
- Type -
-
- -Array.<MoneroSubaddress> - - -
-
- - - - - - - - - - - - - -

(async) getTransfers(query) → {Array.<MoneroTransfer>}

- - - - - - -
-

Get incoming and outgoing transfers to and from this wallet. An outgoing -transfer represents a total amount sent from one or more subaddresses -within an account to individual destination addresses, each with their -own amount. An incoming transfer represents a total amount received into -a subaddress within an account. Transfers belong to transactions which -are stored on the blockchain.

- -

Results can be filtered by passing a query object. Transfers must -meet every criteria defined in the query in order to be returned. All -criteria are optional and no filtering is applied when not defined.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTransferQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
isOutgoing - - -boolean - - - - get transfers that are outgoing or not (optional)
isIncoming - - -boolean - - - - get transfers that are incoming or not (optional)
address - - -string - - - - wallet's address that a transfer either originated from (if outgoing) or is destined for (if incoming) (optional)
accountIndex - - -int - - - - get transfers that either originated from (if outgoing) or are destined for (if incoming) a specific account index (optional)
subaddressIndex - - -int - - - - get transfers that either originated from (if outgoing) or are destined for (if incoming) a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get transfers that either originated from (if outgoing) or are destined for (if incoming) specific subaddress indices (optional)
amount - - -BigInteger - - - - amount being transferred (optional)
destinations - - -Array.<MoneroDestination> - - - - individual destinations of an outgoing transfer, which is local wallet data and NOT recoverable from the blockchain (optional)
hasDestinations - - -boolean - - - - get transfers that have destinations or not (optional)
txQuery - - -MoneroTxQuery - - - - get transfers whose transaction meets this query (optional)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- wallet transfers that meet the query -
- - - -
-
- Type -
-
- -Array.<MoneroTransfer> - - -
-
- - - - - - - - - - - - - -

(async) getTx(txHash) → {MoneroTxWallet}

- - - - - - -
- Get a wallet transaction by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - hash of a transaction to get
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the identified transaction or undefined if not found -
- - - -
-
- Type -
-
- -MoneroTxWallet - - -
-
- - - - - - - - - - - - - -

(async) getTxKey(txHash) → {string}

- - - - - - -
- Get a transaction's secret key from its hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction's hash
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- - transaction's secret key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxNote(txHash) → {string}

- - - - - - -
- Get a transaction note. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to get the note of
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the tx note -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxNotes(txHashes) → {Array.<string>}

- - - - - - -
- Get notes for multiple transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - hashes of the transactions to get notes for
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- notes for the transactions -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getTxProof(txHash, address, message) → {string}

- - - - - - -
- Get a transaction signature to prove it. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
address - - -string - - - - destination public address of the transaction
message - - -string - - - - message to include with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the transaction signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxs(query) → {Array.<MoneroTxWallet>}

- - - - - - -
-

Get wallet transactions. Wallet transactions contain one or more -transfers that are either incoming or outgoing to the wallet.

- -

Results can be filtered by passing a query object. Transactions must -meet every criteria defined in the query in order to be returned. All -criteria are optional and no filtering is applied when not defined.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTxQuery -| - -Array.<string> -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
isConfirmed - - -boolean - - - - get txs that are confirmed or not (optional)
inTxPool - - -boolean - - - - get txs that are in the tx pool or not (optional)
isRelayed - - -boolean - - - - get txs that are relayed or not (optional)
isFailed - - -boolean - - - - get txs that are failed or not (optional)
isMinerTx - - -boolean - - - - get miner txs or not (optional)
hash - - -string - - - - get a tx with the hash (optional)
hashes - - -Array.<string> - - - - get txs with the hashes (optional)
paymentId - - -string - - - - get transactions with the payment id (optional)
paymentIds - - -Array.<string> - - - - get transactions with the payment ids (optional)
hasPaymentId - - -boolean - - - - get transactions with a payment id or not (optional)
minHeight - - -int - - - - get txs with height >= the given height (optional)
maxHeight - - -int - - - - get txs with height <= the given height (optional)
isOutgoing - - -boolean - - - - get txs with an outgoing transfer or not (optional)
isIncoming - - -boolean - - - - get txs with an incoming transfer or not (optional)
transferQuery - - -MoneroTransferQuery - - - - get txs that have a transfer that meets this query (optional)
includeOutputs - - -boolean - - - - specifies that tx outputs should be returned with tx results (optional)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- wallet transactions per the configuration -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) getUnlockedBalance(accountIdx, subaddressIdx) → {BigInteger}

- - - - - - -
- Get the unlocked balance of the wallet, account, or subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to get the unlocked balance of (optional)
subaddressIdx - - -int - - - - index of the subaddress to get the unlocked balance of (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the unlocked balance of the wallet, account, or subaddress -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

(async) getVersion() → {MoneroVersion}

- - - - - - -
- Gets the version of the wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the version of the wallet -
- - - -
-
- Type -
-
- -MoneroVersion - - -
-
- - - - - - - - - - - - - -

(async) importKeyImages(keyImages) → {MoneroKeyImageImportResult}

- - - - - - -
- Import signed key images and verify their spent status. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImages - - -Array.<MoneroKeyImage> - - - - images to import and verify (requires hex and signature)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- results of the import -
- - - -
-
- Type -
-
- -MoneroKeyImageImportResult - - -
-
- - - - - - - - - - - - - -

(async) importMultisigHex(multisigHexes) → {int}

- - - - - - -
- Import multisig info as hex from other participants. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigHexes - - -Array.<string> - - - - multisig hex from each participant
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of outputs signed with the given multisig hex -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) importOutputs(outputsHex) → {int}

- - - - - - -
- Import outputs in hex format. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
outputsHex - - -string - - - - outputs in hex format
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of outputs imported -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) isClosed() → {boolean}

- - - - - - -
- Indicates if this wallet is closed or not. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is closed, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isConnectedToDaemon() → {boolean}

- - - - - - -
- Indicates if the wallet is connected to daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is connected to a daemon, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isMultisig() → {boolean}

- - - - - - -
- Indicates if this wallet is a multisig wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if this is a multisig wallet, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isMultisigImportNeeded() → {boolean}

- - - - - - -
- Indicates if importing multisig data is needed for returning a correct balance. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if importing multisig data is needed for returning a correct balance, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isOutputFrozen(keyImage) → {boolean}

- - - - - - -
- Check if an output is frozen. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image of the output to check if frozen
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the output is frozen, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isViewOnly() → {bool}

- - - - - - -
- Indicates if the wallet is view-only, meaning it does not have the private -spend key and can therefore only observe incoming outputs. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is view-only, false otherwise -
- - - -
-
- Type -
-
- -bool - - -
-
- - - - - - - - - - - - - -

(async) makeMultisig(multisigHexes, threshold, password) → {string}

- - - - - - -
- Make this wallet multisig by importing multisig hex from participants. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigHexes - - -Array.<String> - - - - multisig hex from each participant
threshold - - -int - - - - number of signatures needed to sign transfers
password - - -string - - - - wallet password
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet's multisig hex to share with participants -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) parsePaymentUri(uri) → {MoneroTxConfig}

- - - - - - -
- Parses a payment URI to a tx config. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - payment uri to parse
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the send configuration parsed from the uri -
- - - -
-
- Type -
-
- -MoneroTxConfig - - -
-
- - - - - - - - - - - - - -

(async) prepareMultisig() → {string}

- - - - - - -
- Get multisig info as hex to share with participants to begin creating a -multisig wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet's multisig hex to share with participants -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) relayTx(txOrMetadata) → {string}

- - - - - - -
- Relay a previously created transaction. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txOrMetadata - - -MoneroTxWallet -| - -string - - - - transaction or its metadata to relay
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the hash of the relayed tx -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) relayTxs(txsOrMetadatas) → {Array.<string>}

- - - - - - -
- Relay previously created transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txsOrMetadatas - - -Array.<MoneroTxWallet> -| - -Array.<string> - - - - transactions or their metadata to relay
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the hashes of the relayed txs -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) removeListener(listener)

- - - - - - -
- Unregister a listener to receive wallet notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroWalletListener - - - - listener to unregister
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) rescanBlockchain()

- - - - - - -
-

Rescan the blockchain from scratch, losing any information which cannot be recovered from -the blockchain itself.

- -

WARNING: This method discards local wallet data like destination addresses, tx secret keys, -tx notes, etc.

-
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) rescanSpent()

- - - - - - -
-

Rescan the blockchain for spent outputs.

- -

Note: this can only be called with a trusted daemon.

- -

Example use case: peer multisig hex is import when connected to an untrusted daemon, -so the wallet will not rescan spent outputs. Then the wallet connects to a trusted -daemon. This method should be manually invoked to rescan outputs.

-
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

save()

- - - - - - -
- Save the wallet at its current path. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) scanTxs(txHashes)

- - - - - - -
- Scan transactions by their hash/id. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - tx hashes to scan
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setAccountLabel(accountIdx, label)

- - - - - - -
- Set an account label. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -number - - - - index of the account to set the label for
label - - -string - - - - the label to set
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setAccountTagLabel(tag, label)

- - - - - - -
- Sets a human-readable description for a tag. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tag - - -string - - - - tag to set a description for
label - - -string - - - - label to set for the tag
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setAttribute(key, val)

- - - - - - -
- Set an arbitrary attribute. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
key - - -string - - - - attribute key
val - - -string - - - - attribute value
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setConnectionManager(connectionManager)

- - - - - - -
- Set the wallet's daemon connection manager. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
connectionManager - - -MoneroConnectionManager - - - - manages connections to monerod
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setDaemonConnection(uriOrConnection, username, password)

- - - - - - -
- Set the wallet's daemon connection. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uriOrConnection - - -string -| - -MoneroRpcConnection - - - - daemon's URI or connection (defaults to offline)
username - - -string - - - - username to authenticate with the daemon (optional)
password - - -string - - - - password to authenticate with the daemon (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setSubaddressLabel(accountIdx, subaddressIdx, label)

- - - - - - -
- Set a subaddress label. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -number - - - - index of the account to set the label for
subaddressIdx - - -number - - - - index of the subaddress to set the label for
label - - -string - - - - the label to set
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setTxNote(txHash, note)

- - - - - - -
- Set a note for a specific transaction. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - hash of the transaction to set a note for
note - - -string - - - - the transaction note
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setTxNotes(txHashes, notes)

- - - - - - -
- Set notes for multiple transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - transactions to set notes for
notes - - -Array.<string> - - - - notes to set for the transactions
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) signMessage(message, signatureType, accountIdx, subaddressIdx) → {string}

- - - - - - -
- Sign a message. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - -string - - - - the message to sign
signatureType - - -MoneroMessageSignatureType - - - - sign with spend key or view key (default spend key)
accountIdx - - -int - - - - the account index of the message signature (default 0)
subaddressIdx - - -int - - - - the subaddress index of the message signature (default 0)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) signMultisigTxHex(multisigTxHex) → {MoneroMultisigSignResult}

- - - - - - -
- Sign multisig transactions from a multisig wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigTxHex - - -string - - - - unsigned multisig transactions as hex
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of signing the multisig transactions -
- - - -
-
- Type -
-
- -MoneroMultisigSignResult - - -
-
- - - - - - - - - - - - - -

(async) signTxs(unsignedTxHex) → {string}

- - - - - - -
- Sign unsigned transactions from a view-only wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
unsignedTxHex - - -string - - - - unsigned transaction hex from when the transactions were created
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the signed transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) startMining(numThreads, backgroundMining, ignoreBattery)

- - - - - - -
- Start mining. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
numThreads - - -int - - - - number of threads created for mining (optional)
backgroundMining - - -boolean - - - - specifies if mining should occur in the background (optional)
ignoreBattery - - -boolean - - - - specifies if the battery should be ignored for mining (optional)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) startSyncing(syncPeriodInMs)

- - - - - - -
- Start background synchronizing with a maximum period between syncs. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
syncPeriodInMs - - -int - - - - maximum period between syncs in milliseconds (default is wallet-specific)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stopMining()

- - - - - - -
- Stop mining. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stopSyncing()

- - - - - - -
- Stop synchronizing the wallet with the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) submitMultisigTxHex(signedMultisigTxHex) → {Array.<string>}

- - - - - - -
- Submit signed multisig transactions from a multisig wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
signedMultisigTxHex - - -string - - - - signed multisig hex returned from signMultisigTxHex()
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the resulting transaction hashes -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) submitTxs(signedTxHex) → {Array.<string>}

- - - - - - -
- Submit signed transactions from a view-only wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
signedTxHex - - -string - - - - signed transaction hex from signTxs()
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the resulting transaction hashes -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) sweepDust(relay) → {Array.<MoneroTxWallet>}

- - - - - - -
-

Sweep all unmixable dust outputs back to the wallet to make them easier to spend and mix.

- -

NOTE: Dust only exists pre RCT, so this method will throw "no dust to sweep" on new wallets.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
relay - - -boolean - - - - specifies if the resulting transaction should be relayed (default false)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transactions -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) sweepOutput(config) → {MoneroTxWallet}

- - - - - - -
- Sweep an output by key image. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig - - - - configures the transaction to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required)
keyImage - - -string - - - - key image to sweep (required)
relay - - -boolean - - - - relay the transaction to peers to commit to the blockchain (default false)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transaction to unlock (default 0)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transaction -
- - - -
-
- Type -
-
- -MoneroTxWallet - - -
-
- - - - - - - - - - - - - -

(async) sweepUnlocked(config) → {Array.<MoneroTxWallet>}

- - - - - - -
- Sweep all unlocked funds according to the given configuration. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transactions to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required)
accountIndex - - -int - - - - source account index to sweep from (optional, defaults to all accounts)
subaddressIndex - - -int - - - - source subaddress index to sweep from (optional, defaults to all subaddresses)
subaddressIndices - - -Array.<int> - - - - source subaddress indices to sweep from (optional)
relay - - -boolean - - - - relay the transactions to peers to commit to the blockchain (default false)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transactions to unlock (default 0)
sweepEachSubaddress - - -boolean - - - - sweep each subaddress individually if true (default false)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transactions -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) sync(listenerOrStartHeight, startHeight)

- - - - - - -
- Synchronize the wallet with the daemon as a one-time synchronous process. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listenerOrStartHeight - - -MoneroWalletListener -| - -number - - - - listener xor start height (defaults to no sync listener, the last synced block)
startHeight - - -number - - - - startHeight if not given in first arg (defaults to last synced block)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) tagAccounts(tag, accountIndices)

- - - - - - -
- Tag accounts. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tag - - -string - - - - tag to apply to the specified accounts
accountIndices - - -Array.<int> - - - - indices of the accounts to tag
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) thawOutput(keyImage)

- - - - - - -
- Thaw a frozen output. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image of the output to thaw
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) untagAccounts(accountIndices)

- - - - - - -
- Untag accounts. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIndices - - -Array.<int> - - - - indices of the accounts to untag
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) verifyMessage(message, address, signature) → {MoneroMessageSignatureResult}

- - - - - - -
- Verify a signature on a message. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - -string - - - - signed message
address - - -string - - - - signing address
signature - - -string - - - - signature
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the signature is good, false otherwise -
- - - -
-
- Type -
-
- -MoneroMessageSignatureResult - - -
-
- - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroWalletConfig.html b/docs/MoneroWalletConfig.html deleted file mode 100644 index b916aaf9a..000000000 --- a/docs/MoneroWalletConfig.html +++ /dev/null @@ -1,5060 +0,0 @@ - - - - - JSDoc: Class: MoneroWalletConfig - - - - - - - - - - -
- -

Class: MoneroWalletConfig

- - - - - - -
- -
- -

MoneroWalletConfig(config)

- -
Configuration to create a Monero wallet.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroWalletConfig(config)

- - - - - - -
- Construct a configuration to open or create a wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -object -| - -MoneroWalletConfig - - - - MoneroWalletConfig or equivalent config object -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path of the wallet to open or create
password - - -string - - - - password of the wallet to open
networkType - - -string -| - -number - - - - network type of the wallet to open (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
seed - - -string - - - - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
seedOffset - - -string - - - - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
isMultisig - - -boolean - - - - restore multisig wallet from seed
primaryAddress - - -string - - - - primary address of the wallet to create (only provide if restoring from keys)
privateViewKey - - -string - - - - private view key of the wallet to create (optional)
privateSpendKey - - -string - - - - private spend key of the wallet to create (optional)
restoreHeight - - -number - - - - block height to start scanning from (defaults to 0 unless generating random wallet)
language - - -string - - - - language of the wallet's seed phrase (defaults to "English" or auto-detected)
accountLookahead - - -number - - - - number of accounts to scan (optional)
subaddressLookahead - - -number - - - - number of subaddresses to scan per account (optional)
server - - -MoneroRpcConnection -| - -object - - - - MoneroRpcConnection or equivalent JS object configuring the server connection (optional)
serverUri - - -string - - - - uri of the wallet's server (optional)
serverUsername - - -string - - - - username of the wallet's server (optional)
serverPassword - - -string - - - - password of the wallet's server (optional)
connectionManager - - -MoneroConnectionManager - - - - manage connections to monerod (optional)
rejectUnauthorized - - -boolean - - - - reject self-signed server certificates if true (default true)
keysData - - -Uint8Array - - - - wallet keys data to open (optional)
cacheData - - -Uint8Array - - - - wallet cache data to open (optional)
proxyToWorker - - -boolean - - - - proxies wallet operations to a worker in order to not block the main thread (default true)
fs - - -fs - - - - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
saveCurrent - - -boolean - - - - specifies if the current RPC wallet should be saved before being closed
accountLookahead - - -number - - - - number of accounts to scan (optional)
subaddressLookahead - - -number - - - - number of subaddresses to scan per account (optional)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

copy()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAccountLookahead()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCacheData()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getConnectionManager()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getFs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getKeysData()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getLanguage()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getNetworkType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPassword()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPath()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrimaryAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrivateSpendKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrivateViewKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getProxyToWorker()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRejectUnauthorized()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getRestoreHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSaveCurrent()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSeedOffset()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getServer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getServerPassword()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getServerUri()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getServerUsername()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getSubaddressLookahead()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

isMultisig()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAccountLookahead()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCacheData()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setConnectionManager()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setFs()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setIsMultisig()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setKeysData()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setLanguage()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setNetworkType()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPassword()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPath()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrimaryAddress()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrivateSpendKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrivateViewKey()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setProxyToWorker()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRejectUnauthorized()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setRestoreHeight()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSaveCurrent()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSeed()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSeedOffset()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setServer()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setServerPassword()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setServerUri()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setServerUsername()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setSubaddressLookahead()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

toJson()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroWalletFull.html b/docs/MoneroWalletFull.html deleted file mode 100644 index 0212758f0..000000000 --- a/docs/MoneroWalletFull.html +++ /dev/null @@ -1,21837 +0,0 @@ - - - - - JSDoc: Class: MoneroWalletFull - - - - - - - - - - -
- -

Class: MoneroWalletFull

- - - - - - -
- -
- -

MoneroWalletFull

- -
Implements a Monero wallet using fully client-side WebAssembly bindings to monero-project's wallet2 in C++.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - -

Extends

- - - - - - - - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(async) addAddressBookEntry(address, description) → {int}

- - - - - - -
- Add an address book entry. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - entry address
description - - -string - - - - entry description (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the index of the added entry -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) addListener(listener)

- - - - - - -
- Register a listener to receive wallet notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroWalletListener - - - - listener to receive wallet notifications
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) changePassword(oldPassword, newPassword)

- - - - - - -
- Change the wallet password. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
oldPassword - - -string - - - - the wallet's old password
newPassword - - -string - - - - the wallet's new password
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) checkReserveProof(address, message, signature) → {MoneroCheckReserve}

- - - - - - -
- Proves a wallet has a disposable reserve using a signature. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - public wallet address
message - - -string - - - - message included with the signature to further authenticate the proof (optional)
signature - - -string - - - - reserve proof signature to check
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of checking the signature proof -
- - - -
-
- Type -
-
- -MoneroCheckReserve - - -
-
- - - - - - - - - - - - - -

(async) checkSpendProof(txHash, message, signature) → {boolean}

- - - - - - -
- Prove a spend using a signature. Unlike proving a transaction, it does not require the destination public address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
message - - -string - - - - message included with the signature to further authenticate the proof (optional)
signature - - -string - - - - transaction signature to confirm
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the signature is good, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) checkTxKey(txHash, txKey, address) → {MoneroCheckTx}

- - - - - - -
- Check a transaction in the blockchain with its secret key. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to check
txKey - - -string - - - - transaction's secret key
address - - -string - - - - destination public address of the transaction
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of the check -
- - - -
-
- Type -
-
- -MoneroCheckTx - - -
-
- - - - - - - - - - - - - -

(async) checkTxProof(txHash, address, message, signature) → {MoneroCheckTx}

- - - - - - -
- Prove a transaction by checking its signature. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
address - - -string - - - - destination public address of the transaction
message - - -string - - - - message included with the signature to further authenticate the proof (optional)
signature - - -string - - - - transaction signature to confirm
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of the check -
- - - -
-
- Type -
-
- -MoneroCheckTx - - -
-
- - - - - - - - - - - - - -

(async) close(save)

- - - - - - -
- Optionally save then close the wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
save - - -boolean - - - - specifies if the wallet should be saved before being closed (default false)
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) createAccount(label) → {MoneroAccount}

- - - - - - -
- Create a new account with a label for the first subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
label - - -string - - - - label for account's first subaddress (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created account -
- - - -
-
- Type -
-
- -MoneroAccount - - -
-
- - - - - - - - - - - - - -

(async) createSubaddress(accountIdx, label) → {MoneroSubaddress}

- - - - - - -
- Create a subaddress within an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to create the subaddress within
label - - -string - - - - the label for the subaddress (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created subaddress -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) createTx(config) → {MoneroTxWallet}

- - - - - - -
- Create a transaction to transfer funds from this wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transaction to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required unless `destinations` provided)
amount - - -BigInteger -| - -string - - - - single destination amount (required unless `destinations` provided)
accountIndex - - -int - - - - source account index to transfer funds from (required)
subaddressIndex - - -int - - - - source subaddress index to transfer funds from (optional)
subaddressIndices - - -Array.<int> - - - - source subaddress indices to transfer funds from (optional)
relay - - -boolean - - - - relay the transaction to peers to commit to the blockchain (default false)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
destinations - - -Array.<MoneroDestination> - - - - addresses and amounts in a multi-destination tx (required unless `address` and `amount` provided)
subtractFeeFrom - - -Array.<int> - - - - list of destination indices to split the transaction fee (optional)
paymentId - - -string - - - - transaction payment ID (optional)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transaction to unlock (default 0)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transaction -
- - - -
-
- Type -
-
- -MoneroTxWallet - - -
-
- - - - - - - - - - - - - -

(async) createTxs(config) → {Array.<MoneroTxWallet>}

- - - - - - -
- Create one or more transactions to transfer funds from this wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transactions to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required unless `destinations` provided)
amount - - -BigInteger -| - -string - - - - single destination amount (required unless `destinations` provided)
accountIndex - - -int - - - - source account index to transfer funds from (required)
subaddressIndex - - -int - - - - source subaddress index to transfer funds from (optional)
subaddressIndices - - -Array.<int> - - - - source subaddress indices to transfer funds from (optional)
relay - - -boolean - - - - relay the transactions to peers to commit to the blockchain (default false)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
destinations - - -Array.<MoneroDestination> - - - - addresses and amounts in a multi-destination tx (required unless `address` and `amount` provided)
paymentId - - -string - - - - transaction payment ID (optional)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transactions to unlock (default 0)
canSplit - - -boolean - - - - allow funds to be transferred using multiple transactions (default true)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transactions -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) decodeIntegratedAddress(integratedAddress) → {MoneroIntegratedAddress}

- - - - - - -
- Decode an integrated address to get its standard address and payment id. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
integratedAddress - - -string - - - - integrated address to decode
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the decoded integrated address including standard address and payment id -
- - - -
-
- Type -
-
- -MoneroIntegratedAddress - - -
-
- - - - - - - - - - - - - -

(async) deleteAddressBookEntry(entryIdx)

- - - - - - -
- Delete an address book entry. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
entryIdx - - -int - - - - index of the entry to delete
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) describeTxSet(txSet) → {MoneroTxSet}

- - - - - - -
- Describe a tx set containing unsigned or multisig tx hex to a new tx set containing structured transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txSet - - -MoneroTxSet - - - - a tx set containing unsigned or multisig tx hex
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the tx set containing structured transactions -
- - - -
-
- Type -
-
- -MoneroTxSet - - -
-
- - - - - - - - - - - - - -

(async) editAddressBookEntry(index, setAddress, address, setDescription, description)

- - - - - - -
- Edit an address book entry. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
index - - -number - - - - index of the address book entry to edit
setAddress - - -boolean - - - - specifies if the address should be updated
address - - -string - - - - updated address
setDescription - - -boolean - - - - specifies if the description should be updated
description - - -string - - - - updated description
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) exchangeMultisigKeys(multisigHexes, password) → {MoneroMultisigInitResult}

- - - - - - -
- Exchange multisig hex with participants in a M/N multisig wallet. - -This process must be repeated with participants exactly N-M times. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigHexes - - -Array.<string> - - - - are multisig hex from each participant
password - - -string - - - - wallet's password // TODO monero-project: redundant? wallet is created with password
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result which has the multisig's address xor this wallet's multisig hex to share with participants iff not done -
- - - -
-
- Type -
-
- -MoneroMultisigInitResult - - -
-
- - - - - - - - - - - - - -

(async) exportKeyImages(all) → {Array.<MoneroKeyImage>}

- - - - - - -
- Export signed key images. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
all - - -boolean - - - - export all key images if true, else export the key images since the last export
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's signed key images -
- - - -
-
- Type -
-
- -Array.<MoneroKeyImage> - - -
-
- - - - - - - - - - - - - -

(async) exportMultisigHex() → {string}

- - - - - - -
- Export this wallet's multisig info as hex for other participants. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet's multisig info as hex for other participants -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) exportOutputs(all) → {string}

- - - - - - -
- Export outputs in hex format. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
all - - -boolean - - - - export all outputs if true, else export the outputs since the last export
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- outputs in hex format -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) freezeOutput(keyImage)

- - - - - - -
- Freeze an output. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image of the output to freeze
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) getAccount(accountIdx, includeSubaddresses) → {MoneroAccount}

- - - - - - -
- Get an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to get
includeSubaddresses - - -boolean - - - - include subaddresses if true
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved account -
- - - -
-
- Type -
-
- -MoneroAccount - - -
-
- - - - - - - - - - - - - -

(async) getAccountTags() → {Array.<MoneroAccountTag>}

- - - - - - -
- Return all account tags. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's account tags -
- - - -
-
- Type -
-
- -Array.<MoneroAccountTag> - - -
-
- - - - - - - - - - - - - -

(async) getAccounts(includeSubaddresses, tag) → {Array.<MoneroAccount>}

- - - - - - -
- Get accounts with a given tag. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
includeSubaddresses - - -boolean - - - - include subaddresses if true
tag - - -string - - - - tag for filtering accounts, all accounts if undefined
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- all accounts with the given tag -
- - - -
-
- Type -
-
- -Array.<MoneroAccount> - - -
-
- - - - - - - - - - - - - -

(async) getAddress(accountIdx, subaddressIdx) → {string}

- - - - - - -
- Get the address of a specific subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - the account index of the address's subaddress
subaddressIdx - - -int - - - - the subaddress index within the account
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the receive address of the specified subaddress -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getAddressBookEntries(entryIndices) → {Array.<MoneroAddressBookEntry>}

- - - - - - -
- Get address book entries. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
entryIndices - - -Array.<int> - - - - indices of the entries to get
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the address book entries -
- - - -
-
- Type -
-
- -Array.<MoneroAddressBookEntry> - - -
-
- - - - - - - - - - - - - -

(async) getAddressIndex(address) → {MoneroSubaddress}

- - - - - - -
- Get the account and subaddress index of the given address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - address to get the account and subaddress index from
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the account and subaddress indices -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) getAttribute(key) → {string}

- - - - - - -
- Get an attribute. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
key - - -string - - - - attribute to get the value of
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the attribute's value -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getBalance(accountIdx, subaddressIdx) → {BigInteger}

- - - - - - -
- Get the balance of the wallet, account, or subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to get the balance of (default all accounts)
subaddressIdx - - -int - - - - index of the subaddress to get the balance of (default all subaddresses)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the balance of the wallet, account, or subaddress -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

(async) getDaemonConnection() → {MoneroRpcConnection}

- - - - - - -
- Get the wallet's daemon connection. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's daemon connection -
- - - -
-
- Type -
-
- -MoneroRpcConnection - - -
-
- - - - - - - - - - - - - -

(async) getDaemonHeight() → {int}

- - - - - - -
- Get the blockchain's height. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the blockchain's height -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getDaemonMaxPeerHeight() → {number}

- - - - - - -
- Get the maximum height of the peers the wallet's daemon is connected to. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the maximum height of the peers the wallet's daemon is connected to -
- - - -
-
- Type -
-
- -number - - -
-
- - - - - - - - - - - - - -

(async) getData() → {Array.<DataView>}

- - - - - - -
- Get the wallet's keys and cache data. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- is the keys and cache data, respectively -
- - - -
-
- Type -
-
- -Array.<DataView> - - -
-
- - - - - - - - - - - - - -

(async) getHeight() → {int}

- - - - - - -
- Get the block height that the wallet is synced to. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the block height that the wallet is synced to -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getHeightByDate(year, month, day)

- - - - - - -
- Get the blockchain's height by date as a conservative estimate for scanning. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
year - - -int - - - - year of the height to get
month - - -int - - - - month of the height to get as a number between 1 and 12
day - - -int - - - - day of the height to get as a number between 1 and 31
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the blockchain's approximate height at the given date -
- - - - - - - - - - - - - - - -

(async) getIncomingTransfers(query) → {Array.<MoneroIncomingTransfer>}

- - - - - - -
- Get incoming transfers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTransferQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - get incoming transfers to a specific address in the wallet (optional)
accountIndex - - -int - - - - get incoming transfers to a specific account index (optional)
subaddressIndex - - -int - - - - get incoming transfers to a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get transfers destined for specific subaddress indices (optional)
amount - - -BigInteger - - - - amount being transferred (optional)
txQuery - - -MoneroTxQuery - - - - get transfers whose transaction meets this query (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- incoming transfers that meet the query -
- - - -
-
- Type -
-
- -Array.<MoneroIncomingTransfer> - - -
-
- - - - - - - - - - - - - -

(async) getIntegratedAddress(standardAddress, paymentId) → {MoneroIntegratedAddress}

- - - - - - -
- Get an integrated address based on the given standard address and payment -ID. Uses the wallet's primary address if an address is not given. -Generates a random payment ID if a payment ID is not given. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
standardAddress - - -string - - - - is the standard address to generate the integrated address from (wallet's primary address if undefined)
paymentId - - -string - - - - is the payment ID to generate an integrated address from (randomly generated if undefined)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the integrated address -
- - - -
-
- Type -
-
- -MoneroIntegratedAddress - - -
-
- - - - - - - - - - - - - -

getListeners() → {Array.<MoneroWalletListener>}

- - - - - - -
- Get the listeners registered with the wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the registered listeners -
- - - -
-
- Type -
-
- -Array.<MoneroWalletListener> - - -
-
- - - - - - - - - - - - - -

(async) getMultisigInfo() → {MoneroMultisigInfo}

- - - - - - -
- Get multisig info about this wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- multisig info about this wallet -
- - - -
-
- Type -
-
- -MoneroMultisigInfo - - -
-
- - - - - - - - - - - - - -

(async) getNetworkType() → {MoneroNetworkType}

- - - - - - -
- Get the wallet's network type (mainnet, testnet, or stagenet). -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's network type -
- - - -
-
- Type -
-
- -MoneroNetworkType - - -
-
- - - - - - - - - - - - - -

(async) getNewKeyImagesFromLastImport() → {Array.<MoneroKeyImage>}

- - - - - - -
- Get new key images from the last imported outputs. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the key images from the last imported outputs -
- - - -
-
- Type -
-
- -Array.<MoneroKeyImage> - - -
-
- - - - - - - - - - - - - -

(async) getNumBlocksToUnlock() → {Array.<int>}

- - - - - - -
- Get the number of blocks until the next and last funds unlock. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of blocks until the next and last funds unlock in elements 0 and 1, respectively, or undefined if no balance -
- - - -
-
- Type -
-
- -Array.<int> - - -
-
- - - - - - - - - - - - - -

(async) getOutgoingTransfers(query) → {Array.<MoneroOutgoingTransfer>}

- - - - - - -
- Get outgoing transfers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTransferQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - get outgoing transfers from a specific address in the wallet (optional)
accountIndex - - -int - - - - get outgoing transfers from a specific account index (optional)
subaddressIndex - - -int - - - - get outgoing transfers from a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get outgoing transfers from specific subaddress indices (optional)
amount - - -BigInteger - - - - amount being transferred (optional)
destinations - - -Array.<MoneroDestination> - - - - individual destinations of an outgoing transfer, which is local wallet data and NOT recoverable from the blockchain (optional)
hasDestinations - - -boolean - - - - get transfers that have destinations or not (optional)
txQuery - - -MoneroTxQuery - - - - get transfers whose transaction meets this query (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- outgoing transfers that meet the query -
- - - -
-
- Type -
-
- -Array.<MoneroOutgoingTransfer> - - -
-
- - - - - - - - - - - - - -

(async) getOutputs(query) → {Array.<MoneroOutputWallet>}

- - - - - - -
-

Get outputs created from previous transactions that belong to the wallet -(i.e. that the wallet can spend one time). Outputs are part of -transactions which are stored in blocks on the blockchain.

- -

Results can be filtered by passing a query object. Outputs must -meet every criteria defined in the query in order to be returned. All -filtering is optional and no filtering is applied when not defined.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroOutputQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIndex - - -int - - - - get outputs associated with a specific account index (optional)
subaddressIndex - - -int - - - - get outputs associated with a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get outputs associated with specific subaddress indices (optional)
amount - - -BigInteger - - - - get outputs with a specific amount (optional)
minAmount - - -BigInteger - - - - get outputs greater than or equal to a minimum amount (optional)
maxAmount - - -BigInteger - - - - get outputs less than or equal to a maximum amount (optional)
isSpent - - -boolean - - - - get outputs that are spent or not (optional)
keyImage - - -string -| - -MoneroKeyImage - - - - get output with a key image or which matches fields defined in a MoneroKeyImage (optional)
txQuery - - -MoneroTxQuery - - - - get outputs whose transaction meets this filter (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the queried outputs -
- - - -
-
- Type -
-
- -Array.<MoneroOutputWallet> - - -
-
- - - - - - - - - - - - - -

(async) getPath() → {string}

- - - - - - -
- Get the wallet's path. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
  • - MoneroWalletKeys#getPath -
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the path the wallet can be opened with -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPaymentUri(config) → {string}

- - - - - - -
- Creates a payment URI from a send configuration. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig - - - - specifies configuration for a potential tx
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the payment uri -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrimaryAddress() → {string}

- - - - - - -
- Get the wallet's primary address. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's primary address -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrivateSpendKey() → {string}

- - - - - - -
- Get the wallet's private spend key. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's private spend key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrivateViewKey() → {string}

- - - - - - -
- Get the wallet's private view key. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's private view key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPublicSpendKey() → {string}

- - - - - - -
- Get the wallet's public spend key. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's public spend key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPublicViewKey() → {string}

- - - - - - -
- Get the wallet's public view key. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's public view key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getReserveProofAccount(accountIdx, amount, message) → {string}

- - - - - - -
- Generate a signature to prove an available amount in an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - account to prove ownership of the amount
amount - - -BigInteger - - - - minimum amount to prove as available in the account
message - - -string - - - - message to include with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the reserve proof signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getReserveProofWallet(message)

- - - - - - -
- Generate a signature to prove the entire balance of the wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - message included with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the reserve proof signature -
- - - - - - - - - - - - - - - -

(async) getRestoreHeight() → {number}

- - - - - - -
- Get the height of the first block that the wallet scans. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the height of the first block that the wallet scans -
- - - -
-
- Type -
-
- -number - - -
-
- - - - - - - - - - - - - -

(async) getSeed() → {string}

- - - - - - -
- Get the wallet's mnemonic phrase or seed. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's mnemonic phrase or seed. -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSeedLanguage() → {string}

- - - - - - -
- Get the language of the wallet's mnemonic phrase or seed. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the language of the wallet's mnemonic phrase or seed. -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSpendProof(txHash, message) → {string}

- - - - - - -
- Generate a signature to prove a spend. Unlike proving a transaction, it does not require the destination public address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
message - - -string - - - - message to include with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the transaction signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSubaddress(accountIdx, subaddressIdx) → {MoneroSubaddress}

- - - - - - -
- Get a subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the subaddress's account
subaddressIdx - - -int - - - - index of the subaddress within the account
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved subaddress -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) getSubaddresses(accountIdx, subaddressIndices) → {Array.<MoneroSubaddress>}

- - - - - - -
- Get subaddresses in an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - account to get subaddresses within
subaddressIndices - - -Array.<int> - - - - indices of subaddresses to get (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved subaddresses -
- - - -
-
- Type -
-
- -Array.<MoneroSubaddress> - - -
-
- - - - - - - - - - - - - -

(async) getTransfers(query) → {Array.<MoneroTransfer>}

- - - - - - -
-

Get incoming and outgoing transfers to and from this wallet. An outgoing -transfer represents a total amount sent from one or more subaddresses -within an account to individual destination addresses, each with their -own amount. An incoming transfer represents a total amount received into -a subaddress within an account. Transfers belong to transactions which -are stored on the blockchain.

- -

Results can be filtered by passing a query object. Transfers must -meet every criteria defined in the query in order to be returned. All -criteria are optional and no filtering is applied when not defined.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTransferQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
isOutgoing - - -boolean - - - - get transfers that are outgoing or not (optional)
isIncoming - - -boolean - - - - get transfers that are incoming or not (optional)
address - - -string - - - - wallet's address that a transfer either originated from (if outgoing) or is destined for (if incoming) (optional)
accountIndex - - -int - - - - get transfers that either originated from (if outgoing) or are destined for (if incoming) a specific account index (optional)
subaddressIndex - - -int - - - - get transfers that either originated from (if outgoing) or are destined for (if incoming) a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get transfers that either originated from (if outgoing) or are destined for (if incoming) specific subaddress indices (optional)
amount - - -BigInteger - - - - amount being transferred (optional)
destinations - - -Array.<MoneroDestination> - - - - individual destinations of an outgoing transfer, which is local wallet data and NOT recoverable from the blockchain (optional)
hasDestinations - - -boolean - - - - get transfers that have destinations or not (optional)
txQuery - - -MoneroTxQuery - - - - get transfers whose transaction meets this query (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- wallet transfers that meet the query -
- - - -
-
- Type -
-
- -Array.<MoneroTransfer> - - -
-
- - - - - - - - - - - - - -

(async) getTx(txHash) → {MoneroTxWallet}

- - - - - - -
- Get a wallet transaction by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - hash of a transaction to get
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the identified transaction or undefined if not found -
- - - -
-
- Type -
-
- -MoneroTxWallet - - -
-
- - - - - - - - - - - - - -

(async) getTxKey(txHash) → {string}

- - - - - - -
- Get a transaction's secret key from its hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction's hash
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- - transaction's secret key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxNote(txHash) → {string}

- - - - - - -
- Get a transaction note. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to get the note of
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the tx note -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxNotes(txHashes) → {Array.<string>}

- - - - - - -
- Get notes for multiple transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - hashes of the transactions to get notes for
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- notes for the transactions -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getTxProof(txHash, address, message) → {string}

- - - - - - -
- Get a transaction signature to prove it. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
address - - -string - - - - destination public address of the transaction
message - - -string - - - - message to include with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the transaction signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxs(query) → {Array.<MoneroTxWallet>}

- - - - - - -
-

Get wallet transactions. Wallet transactions contain one or more -transfers that are either incoming or outgoing to the wallet.

- -

Results can be filtered by passing a query object. Transactions must -meet every criteria defined in the query in order to be returned. All -criteria are optional and no filtering is applied when not defined.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTxQuery -| - -Array.<string> -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
isConfirmed - - -boolean - - - - get txs that are confirmed or not (optional)
inTxPool - - -boolean - - - - get txs that are in the tx pool or not (optional)
isRelayed - - -boolean - - - - get txs that are relayed or not (optional)
isFailed - - -boolean - - - - get txs that are failed or not (optional)
isMinerTx - - -boolean - - - - get miner txs or not (optional)
hash - - -string - - - - get a tx with the hash (optional)
hashes - - -Array.<string> - - - - get txs with the hashes (optional)
paymentId - - -string - - - - get transactions with the payment id (optional)
paymentIds - - -Array.<string> - - - - get transactions with the payment ids (optional)
hasPaymentId - - -boolean - - - - get transactions with a payment id or not (optional)
minHeight - - -int - - - - get txs with height >= the given height (optional)
maxHeight - - -int - - - - get txs with height <= the given height (optional)
isOutgoing - - -boolean - - - - get txs with an outgoing transfer or not (optional)
isIncoming - - -boolean - - - - get txs with an incoming transfer or not (optional)
transferQuery - - -MoneroTransferQuery - - - - get txs that have a transfer that meets this query (optional)
includeOutputs - - -boolean - - - - specifies that tx outputs should be returned with tx results (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- wallet transactions per the configuration -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) getUnlockedBalance(accountIdx, subaddressIdx) → {BigInteger}

- - - - - - -
- Get the unlocked balance of the wallet, account, or subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to get the unlocked balance of (optional)
subaddressIdx - - -int - - - - index of the subaddress to get the unlocked balance of (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the unlocked balance of the wallet, account, or subaddress -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

(async) getVersion() → {MoneroVersion}

- - - - - - -
- Gets the version of the wallet. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the version of the wallet -
- - - -
-
- Type -
-
- -MoneroVersion - - -
-
- - - - - - - - - - - - - -

(async) importKeyImages(keyImages) → {MoneroKeyImageImportResult}

- - - - - - -
- Import signed key images and verify their spent status. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImages - - -Array.<MoneroKeyImage> - - - - images to import and verify (requires hex and signature)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- results of the import -
- - - -
-
- Type -
-
- -MoneroKeyImageImportResult - - -
-
- - - - - - - - - - - - - -

(async) importMultisigHex(multisigHexes) → {int}

- - - - - - -
- Import multisig info as hex from other participants. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigHexes - - -Array.<string> - - - - multisig hex from each participant
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of outputs signed with the given multisig hex -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) importOutputs(outputsHex) → {int}

- - - - - - -
- Import outputs in hex format. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
outputsHex - - -string - - - - outputs in hex format
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of outputs imported -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) isClosed() → {boolean}

- - - - - - -
- Indicates if this wallet is closed or not. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is closed, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isConnectedToDaemon() → {boolean}

- - - - - - -
- Indicates if the wallet is connected to daemon. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is connected to a daemon, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isDaemonSynced() → {boolean}

- - - - - - -
- Indicates if the wallet's daemon is synced with the network. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the daemon is synced with the network, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isMultisig() → {boolean}

- - - - - - -
- Indicates if this wallet is a multisig wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if this is a multisig wallet, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isMultisigImportNeeded() → {boolean}

- - - - - - -
- Indicates if importing multisig data is needed for returning a correct balance. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if importing multisig data is needed for returning a correct balance, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isOutputFrozen(keyImage) → {boolean}

- - - - - - -
- Check if an output is frozen. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image of the output to check if frozen
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the output is frozen, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isSynced() → {boolean}

- - - - - - -
- Indicates if the wallet is synced with the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is synced with the daemon, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isViewOnly() → {bool}

- - - - - - -
- Indicates if the wallet is view-only, meaning it does not have the private -spend key and can therefore only observe incoming outputs. -
- - - - - - - - - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is view-only, false otherwise -
- - - -
-
- Type -
-
- -bool - - -
-
- - - - - - - - - - - - - -

(async) makeMultisig(multisigHexes, threshold, password) → {string}

- - - - - - -
- Make this wallet multisig by importing multisig hex from participants. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigHexes - - -Array.<String> - - - - multisig hex from each participant
threshold - - -int - - - - number of signatures needed to sign transfers
password - - -string - - - - wallet password
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet's multisig hex to share with participants -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) moveTo(path)

- - - - - - -
- Move the wallet from its current path to the given path. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - the wallet's destination path
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) parsePaymentUri(uri) → {MoneroTxConfig}

- - - - - - -
- Parses a payment URI to a tx config. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - payment uri to parse
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the send configuration parsed from the uri -
- - - -
-
- Type -
-
- -MoneroTxConfig - - -
-
- - - - - - - - - - - - - -

(async) prepareMultisig() → {string}

- - - - - - -
- Get multisig info as hex to share with participants to begin creating a -multisig wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet's multisig hex to share with participants -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) relayTx(txOrMetadata) → {string}

- - - - - - -
- Relay a previously created transaction. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txOrMetadata - - -MoneroTxWallet -| - -string - - - - transaction or its metadata to relay
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the hash of the relayed tx -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) relayTxs(txsOrMetadatas) → {Array.<string>}

- - - - - - -
- Relay previously created transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txsOrMetadatas - - -Array.<MoneroTxWallet> -| - -Array.<string> - - - - transactions or their metadata to relay
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the hashes of the relayed txs -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) removeListener(listener)

- - - - - - -
- Unregister a listener to receive wallet notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroWalletListener - - - - listener to unregister
- - - - - - -
- - - - - - - - -
Overrides:
-
- - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) rescanBlockchain()

- - - - - - -
-

Rescan the blockchain from scratch, losing any information which cannot be recovered from -the blockchain itself.

- -

WARNING: This method discards local wallet data like destination addresses, tx secret keys, -tx notes, etc.

-
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) rescanSpent()

- - - - - - -
-

Rescan the blockchain for spent outputs.

- -

Note: this can only be called with a trusted daemon.

- -

Example use case: peer multisig hex is import when connected to an untrusted daemon, -so the wallet will not rescan spent outputs. Then the wallet connects to a trusted -daemon. This method should be manually invoked to rescan outputs.

-
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) save()

- - - - - - -
- Save the wallet at its current path. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) scanTxs(txHashes)

- - - - - - -
- Scan transactions by their hash/id. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - tx hashes to scan
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setAccountTagLabel(tag, label)

- - - - - - -
- Sets a human-readable description for a tag. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tag - - -string - - - - tag to set a description for
label - - -string - - - - label to set for the tag
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setAttribute(key, val)

- - - - - - -
- Set an arbitrary attribute. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
key - - -string - - - - attribute key
val - - -string - - - - attribute value
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setDaemonConnection(uriOrConnection, username, password)

- - - - - - -
- Set the wallet's daemon connection. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uriOrConnection - - -string -| - -MoneroRpcConnection - - - - daemon's URI or connection (defaults to offline)
username - - -string - - - - username to authenticate with the daemon (optional)
password - - -string - - - - password to authenticate with the daemon (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setRestoreHeight(restoreHeight)

- - - - - - -
- Set the height of the first block that the wallet scans. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
restoreHeight - - -number - - - - height of the first block that the wallet scans
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setSubaddressLabel(accountIdx, subaddressIdx, label)

- - - - - - -
- Set a subaddress label. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -number - - - - index of the account to set the label for
subaddressIdx - - -number - - - - index of the subaddress to set the label for
label - - -string - - - - the label to set
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setTxNote(txHash, note)

- - - - - - -
- Set a note for a specific transaction. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - hash of the transaction to set a note for
note - - -string - - - - the transaction note
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setTxNotes(txHashes, notes)

- - - - - - -
- Set notes for multiple transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - transactions to set notes for
notes - - -Array.<string> - - - - notes to set for the transactions
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) signMessage(message, signatureType, accountIdx, subaddressIdx) → {string}

- - - - - - -
- Sign a message. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - -string - - - - the message to sign
signatureType - - -MoneroMessageSignatureType - - - - sign with spend key or view key (default spend key)
accountIdx - - -int - - - - the account index of the message signature (default 0)
subaddressIdx - - -int - - - - the subaddress index of the message signature (default 0)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) signMultisigTxHex(multisigTxHex) → {MoneroMultisigSignResult}

- - - - - - -
- Sign multisig transactions from a multisig wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigTxHex - - -string - - - - unsigned multisig transactions as hex
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of signing the multisig transactions -
- - - -
-
- Type -
-
- -MoneroMultisigSignResult - - -
-
- - - - - - - - - - - - - -

(async) signTxs(unsignedTxHex) → {string}

- - - - - - -
- Sign unsigned transactions from a view-only wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
unsignedTxHex - - -string - - - - unsigned transaction hex from when the transactions were created
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the signed transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) startMining(numThreads, backgroundMining, ignoreBattery)

- - - - - - -
- Start mining. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
numThreads - - -int - - - - number of threads created for mining (optional)
backgroundMining - - -boolean - - - - specifies if mining should occur in the background (optional)
ignoreBattery - - -boolean - - - - specifies if the battery should be ignored for mining (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) startSyncing(syncPeriodInMs)

- - - - - - -
- Start background synchronizing with a maximum period between syncs. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
syncPeriodInMs - - -int - - - - maximum period between syncs in milliseconds (default is wallet-specific)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stopMining()

- - - - - - -
- Stop mining. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stopSyncing()

- - - - - - -
- Stop synchronizing the wallet with the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) submitMultisigTxHex(signedMultisigTxHex) → {Array.<string>}

- - - - - - -
- Submit signed multisig transactions from a multisig wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
signedMultisigTxHex - - -string - - - - signed multisig hex returned from signMultisigTxHex()
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the resulting transaction hashes -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) submitTxs(signedTxHex) → {Array.<string>}

- - - - - - -
- Submit signed transactions from a view-only wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
signedTxHex - - -string - - - - signed transaction hex from signTxs()
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the resulting transaction hashes -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) sweepDust(relay) → {Array.<MoneroTxWallet>}

- - - - - - -
-

Sweep all unmixable dust outputs back to the wallet to make them easier to spend and mix.

- -

NOTE: Dust only exists pre RCT, so this method will throw "no dust to sweep" on new wallets.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
relay - - -boolean - - - - specifies if the resulting transaction should be relayed (default false)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transactions -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) sweepOutput(config) → {MoneroTxWallet}

- - - - - - -
- Sweep an output by key image. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig - - - - configures the transaction to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required)
keyImage - - -string - - - - key image to sweep (required)
relay - - -boolean - - - - relay the transaction to peers to commit to the blockchain (default false)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transaction to unlock (default 0)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transaction -
- - - -
-
- Type -
-
- -MoneroTxWallet - - -
-
- - - - - - - - - - - - - -

(async) sweepUnlocked(config) → {Array.<MoneroTxWallet>}

- - - - - - -
- Sweep all unlocked funds according to the given configuration. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transactions to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required)
accountIndex - - -int - - - - source account index to sweep from (optional, defaults to all accounts)
subaddressIndex - - -int - - - - source subaddress index to sweep from (optional, defaults to all subaddresses)
subaddressIndices - - -Array.<int> - - - - source subaddress indices to sweep from (optional)
relay - - -boolean - - - - relay the transactions to peers to commit to the blockchain (default false)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transactions to unlock (default 0)
sweepEachSubaddress - - -boolean - - - - sweep each subaddress individually if true (default false)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transactions -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) sync(listenerOrStartHeight, startHeight, allowConcurrentCalls)

- - - - - - -
- Synchronize the wallet with the daemon as a one-time synchronous process. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listenerOrStartHeight - - -MoneroWalletListener -| - -number - - - - listener xor start height (defaults to no sync listener, the last synced block)
startHeight - - -number - - - - startHeight if not given in first arg (defaults to last synced block)
allowConcurrentCalls - - -bool - - - - allow other wallet methods to be processed simultaneously during sync (default false)

WARNING: enabling this option will crash wallet execution if another call makes a simultaneous network request. TODO: possible to sync wasm network requests in http_client_wasm.cpp?
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) tagAccounts(tag, accountIndices)

- - - - - - -
- Tag accounts. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tag - - -string - - - - tag to apply to the specified accounts
accountIndices - - -Array.<int> - - - - indices of the accounts to tag
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) thawOutput(keyImage)

- - - - - - -
- Thaw a frozen output. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image of the output to thaw
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) untagAccounts(accountIndices)

- - - - - - -
- Untag accounts. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIndices - - -Array.<int> - - - - indices of the accounts to untag
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) verifyMessage(message, address, signature) → {MoneroMessageSignatureResult}

- - - - - - -
- Verify a signature on a message. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - -string - - - - signed message
address - - -string - - - - signing address
signature - - -string - - - - signature
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the signature is good, false otherwise -
- - - -
-
- Type -
-
- -MoneroMessageSignatureResult - - -
-
- - - - - - - - - - - - - -

(async, static) createWallet(config) → {MoneroWalletFull}

- - - - - - -
-

Create a wallet using WebAssembly bindings to wallet2.h.

- -

Example:

- - -let wallet = await MoneroWalletFull.createWallet({
-   path: "./test_wallets/wallet1", // leave blank for in-memory wallet
-   password: "supersecretpassword",
-   networkType: MoneroNetworkType.STAGENET,
-   seed: "coexist igloo pamphlet lagoon...",
-   restoreHeight: 1543218,
-   server: new MoneroRpcConnection("http://localhost:38081", "daemon_user", "daemon_password_123"),
-}); -
-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -object -| - -MoneroWalletConfig - - - - MoneroWalletConfig or equivalent config object -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path of the wallet to create (optional, in-memory wallet if not given)
password - - -string - - - - password of the wallet to create
networkType - - -string -| - -number - - - - network type of the wallet to create (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
seed - - -string - - - - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
seedOffset - - -string - - - - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
isMultisig - - -boolean - - - - restore multisig wallet from seed
primaryAddress - - -string - - - - primary address of the wallet to create (only provide if restoring from keys)
privateViewKey - - -string - - - - private view key of the wallet to create (optional)
privateSpendKey - - -string - - - - private spend key of the wallet to create (optional)
restoreHeight - - -number - - - - block height to start scanning from (defaults to 0 unless generating random wallet)
language - - -string - - - - language of the wallet's seed phrase (defaults to "English" or auto-detected)
accountLookahead - - -number - - - - number of accounts to scan (optional)
subaddressLookahead - - -number - - - - number of subaddresses to scan per account (optional)
server - - -MoneroRpcConnection -| - -object - - - - MoneroRpcConnection or equivalent JS object providing daemon configuration (optional)
serverUri - - -string - - - - uri of the wallet's daemon (optional)
serverUsername - - -string - - - - username to authenticate with the daemon (optional)
serverPassword - - -string - - - - password to authenticate with the daemon (optional)
connectionManager - - -MoneroConnectionManager - - - - manage connections to monerod (optional)
rejectUnauthorized - - -boolean - - - - reject self-signed server certificates if true (defaults to true)
proxyToWorker - - -boolean - - - - proxies wallet operations to a worker in order to not block the main thread (default true)
fs - - -fs - - - - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created wallet -
- - - -
-
- Type -
-
- -MoneroWalletFull - - -
-
- - - - - - - - - - - - - -

(async, static) getSeedLanguages()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) openWallet(configOrPath, password, networkType, daemonUriOrConnection, proxyToWorker, fs) → {MoneroWalletFull}

- - - - - - -
-

Open an existing wallet using WebAssembly bindings to wallet2.h.

- -

Examples:

- - -let wallet1 = await MoneroWalletFull.openWallet(
-   "./wallets/wallet1",
-   "supersecretpassword",
-   MoneroNetworkType.STAGENET,
-   "http://localhost:38081" // daemon uri
-);

- -let wallet2 = await MoneroWalletFull.openWallet({
-   path: "./wallets/wallet2",
-   password: "supersecretpassword",
-   networkType: MoneroNetworkType.STAGENET,
-   serverUri: "http://localhost:38081", // daemon configuration
-   serverUsername: "superuser",
-   serverPassword: "abctesting123"
-}); -
-

- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
configOrPath - - -MoneroWalletConfig -| - -object -| - -string - - - - MoneroWalletConfig or equivalent config object or a path to a wallet to open -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path of the wallet to open (optional if 'keysData' provided)
password - - -string - - - - password of the wallet to open
networkType - - -string -| - -number - - - - network type of the wallet to open (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
keysData - - -Uint8Array - - - - wallet keys data to open (optional if path provided)
cacheData - - -Uint8Array - - - - wallet cache data to open (optional)
server - - -MoneroRpcConnection -| - -object - - - - MoneroRpcConnection or equivalent JS object configuring the daemon connection (optional)
serverUri - - -string - - - - uri of the wallet's daemon (optional)
serverUsername - - -string - - - - username to authenticate with the daemon (optional)
serverPassword - - -string - - - - password to authenticate with the daemon (optional)
rejectUnauthorized - - -boolean - - - - reject self-signed server certificates if true (default true)
proxyToWorker - - -boolean - - - - proxies wallet operations to a worker in order to not block the main thread (default true)
fs - - -fs - - - - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
- -
password - - -string - - - - password of the wallet to open
networkType - - -string -| - -number - - - - network type of the wallet to open
daemonUriOrConnection - - -string -| - -MoneroRpcConnection - - - - daemon URI or MoneroRpcConnection
proxyToWorker - - -boolean - - - - proxies wallet operations to a worker in order to not block the main thread (default true)
fs - - -fs - - - - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the opened wallet -
- - - -
-
- Type -
-
- -MoneroWalletFull - - -
-
- - - - - - - - - - - - - -

(static) walletExists(path, fs) → {boolean}

- - - - - - -
- Check if a wallet exists at a given path. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path of the wallet on the file system
fs - - -fs - - - - Node.js compatible file system to use (optional, defaults to disk if nodejs)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if a wallet exists at the given path, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroWalletKeys.html b/docs/MoneroWalletKeys.html deleted file mode 100644 index 6499b6689..000000000 --- a/docs/MoneroWalletKeys.html +++ /dev/null @@ -1,3070 +0,0 @@ - - - - - JSDoc: Class: MoneroWalletKeys - - - - - - - - - - -
- -

Class: MoneroWalletKeys

- - - - - - -
- -
- -

MoneroWalletKeys

- -
Implements a MoneroWallet which only manages keys using WebAssembly.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(async) addListener(listener)

- - - - - - -
- Register a listener to receive wallet notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroWalletListener - - - - listener to receive wallet notifications
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) close(save)

- - - - - - -
- Optionally save then close the wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
save - - -boolean - - - - specifies if the wallet should be saved before being closed (default false)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAccounts(includeSubaddresses, tag) → {Array.<MoneroAccount>}

- - - - - - -
- Get accounts with a given tag. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
includeSubaddresses - - -boolean - - - - include subaddresses if true
tag - - -string - - - - tag for filtering accounts, all accounts if undefined
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- all accounts with the given tag -
- - - -
-
- Type -
-
- -Array.<MoneroAccount> - - -
-
- - - - - - - - - - - - - -

(async) getAddress(accountIdx, subaddressIdx) → {string}

- - - - - - -
- Get the address of a specific subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - the account index of the address's subaddress
subaddressIdx - - -int - - - - the subaddress index within the account
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the receive address of the specified subaddress -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getAddressIndex(address) → {MoneroSubaddress}

- - - - - - -
- Get the account and subaddress index of the given address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - address to get the account and subaddress index from
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the account and subaddress indices -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) getPrimaryAddress() → {string}

- - - - - - -
- Get the wallet's primary address. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's primary address -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrivateSpendKey() → {string}

- - - - - - -
- Get the wallet's private spend key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's private spend key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrivateViewKey() → {string}

- - - - - - -
- Get the wallet's private view key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's private view key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPublicSpendKey() → {string}

- - - - - - -
- Get the wallet's public spend key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's public spend key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPublicViewKey() → {string}

- - - - - - -
- Get the wallet's public view key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's public view key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSeed() → {string}

- - - - - - -
- Get the wallet's mnemonic phrase or seed. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's mnemonic phrase or seed. -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSeedLanguage() → {string}

- - - - - - -
- Get the language of the wallet's mnemonic phrase or seed. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the language of the wallet's mnemonic phrase or seed. -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSubaddress(accountIdx, subaddressIdx) → {MoneroSubaddress}

- - - - - - -
- Get a subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the subaddress's account
subaddressIdx - - -int - - - - index of the subaddress within the account
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved subaddress -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) getVersion() → {MoneroVersion}

- - - - - - -
- Gets the version of the wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the version of the wallet -
- - - -
-
- Type -
-
- -MoneroVersion - - -
-
- - - - - - - - - - - - - -

(async) isClosed() → {boolean}

- - - - - - -
- Indicates if this wallet is closed or not. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is closed, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isConnectedToDaemon() → {boolean}

- - - - - - -
- Indicates if the wallet is connected to daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is connected to a daemon, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isViewOnly() → {bool}

- - - - - - -
- Indicates if the wallet is view-only, meaning it does not have the private -spend key and can therefore only observe incoming outputs. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is view-only, false otherwise -
- - - -
-
- Type -
-
- -bool - - -
-
- - - - - - - - - - - - - -

(async) removeListener(listener)

- - - - - - -
- Unregister a listener to receive wallet notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroWalletListener - - - - listener to unregister
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async, static) createWallet(config) → {MoneroWalletKeys}

- - - - - - -
-

Create a wallet using WebAssembly bindings to monero-project.

- -

Example:

- - -let wallet = await MoneroWalletKeys.createWallet({
-   password: "abc123",
-   networkType: MoneroNetworkType.STAGENET,
-   seed: "coexist igloo pamphlet lagoon..."
-}); -
-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroWalletConfig -| - -object - - - - MoneroWalletConfig or equivalent config object -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
networkType - - -string -| - -number - - - - network type of the wallet to create (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
seed - - -string - - - - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
seedOffset - - -string - - - - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
primaryAddress - - -string - - - - primary address of the wallet to create (only provide if restoring from keys)
privateViewKey - - -string - - - - private view key of the wallet to create (optional)
privateSpendKey - - -string - - - - private spend key of the wallet to create (optional)
language - - -string - - - - language of the wallet's seed (defaults to "English" or auto-detected)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created wallet -
- - - -
-
- Type -
-
- -MoneroWalletKeys - - -
-
- - - - - - - - - - - - - -

(async, static) getSeedLanguages()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroWalletListener.html b/docs/MoneroWalletListener.html deleted file mode 100644 index 86046602c..000000000 --- a/docs/MoneroWalletListener.html +++ /dev/null @@ -1,979 +0,0 @@ - - - - - JSDoc: Class: MoneroWalletListener - - - - - - - - - - -
- -

Class: MoneroWalletListener

- - - - - - -
- -
- -

MoneroWalletListener()

- -
Default wallet listener which takes no action on notifications.
- - -
- -
-
- - - - -

Constructor

- - - -

new MoneroWalletListener()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(async) onBalancesChanged(newBalance, newUnlockedBalance)

- - - - - - -
- Invoked when the wallet's balances change. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
newBalance - - -BigInteger - - - - new wallet balance
newUnlockedBalance - - -BigInteger - - - - new unlocked wallet balance
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) onNewBlock(height)

- - - - - - -
- Invoked when a new block is added to the chain. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -int - - - - the height of the new block (i.e. the number of blocks before it).
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) onOutputReceived(output)

- - - - - - -
- Invoked 3 times per received output: once when unconfirmed, once when confirmed, and -once when unlocked. - -The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
output - - -MoneroOutputWallet - - - - the received output
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) onOutputSpent(output)

- - - - - - -
- Invoked twice per spent output: once when confirmed and once when unlocked. - -The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
output - - -MoneroOutputWallet - - - - the spent output
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) onSyncProgress(height, startHeight, endHeight, percentDone, message)

- - - - - - -
- Invoked as the wallet is synchronized. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
height - - -number - - - - height of the synced block
startHeight - - -number - - - - starting height of the sync request
endHeight - - -number - - - - ending height of the sync request
percentDone - - -number - - - - sync progress as a percentage
message - - -string - - - - human-readable description of the current progress
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/MoneroWalletRpc.html b/docs/MoneroWalletRpc.html deleted file mode 100644 index fe00a73a6..000000000 --- a/docs/MoneroWalletRpc.html +++ /dev/null @@ -1,20312 +0,0 @@ - - - - - JSDoc: Class: MoneroWalletRpc - - - - - - - - - - -
- -

Class: MoneroWalletRpc

- - - - - - -
- -
- -

MoneroWalletRpc

- -
Implements a MoneroWallet as a client of monero-wallet-rpc.
- - -
- -
-
- - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(async) addAddressBookEntry(address, description) → {int}

- - - - - - -
- Add an address book entry. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - entry address
description - - -string - - - - entry description (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the index of the added entry -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) addListener(listener)

- - - - - - -
- Register a listener to receive wallet notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroWalletListener - - - - listener to receive wallet notifications
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) changePassword(oldPassword, newPassword)

- - - - - - -
- Change the wallet password. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
oldPassword - - -string - - - - the wallet's old password
newPassword - - -string - - - - the wallet's new password
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) checkReserveProof(address, message, signature) → {MoneroCheckReserve}

- - - - - - -
- Proves a wallet has a disposable reserve using a signature. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - public wallet address
message - - -string - - - - message included with the signature to further authenticate the proof (optional)
signature - - -string - - - - reserve proof signature to check
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of checking the signature proof -
- - - -
-
- Type -
-
- -MoneroCheckReserve - - -
-
- - - - - - - - - - - - - -

(async) checkSpendProof(txHash, message, signature) → {boolean}

- - - - - - -
- Prove a spend using a signature. Unlike proving a transaction, it does not require the destination public address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
message - - -string - - - - message included with the signature to further authenticate the proof (optional)
signature - - -string - - - - transaction signature to confirm
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the signature is good, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) checkTxKey(txHash, txKey, address) → {MoneroCheckTx}

- - - - - - -
- Check a transaction in the blockchain with its secret key. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to check
txKey - - -string - - - - transaction's secret key
address - - -string - - - - destination public address of the transaction
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of the check -
- - - -
-
- Type -
-
- -MoneroCheckTx - - -
-
- - - - - - - - - - - - - -

(async) checkTxProof(txHash, address, message, signature) → {MoneroCheckTx}

- - - - - - -
- Prove a transaction by checking its signature. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
address - - -string - - - - destination public address of the transaction
message - - -string - - - - message included with the signature to further authenticate the proof (optional)
signature - - -string - - - - transaction signature to confirm
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of the check -
- - - -
-
- Type -
-
- -MoneroCheckTx - - -
-
- - - - - - - - - - - - - -

(async) close(save)

- - - - - - -
- Optionally save then close the wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
save - - -boolean - - - - specifies if the wallet should be saved before being closed (default false)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) createAccount(label) → {MoneroAccount}

- - - - - - -
- Create a new account with a label for the first subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
label - - -string - - - - label for account's first subaddress (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created account -
- - - -
-
- Type -
-
- -MoneroAccount - - -
-
- - - - - - - - - - - - - -

(async) createSubaddress(accountIdx, label) → {MoneroSubaddress}

- - - - - - -
- Create a subaddress within an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to create the subaddress within
label - - -string - - - - the label for the subaddress (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created subaddress -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) createTx(config) → {MoneroTxWallet}

- - - - - - -
- Create a transaction to transfer funds from this wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transaction to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required unless `destinations` provided)
amount - - -BigInteger -| - -string - - - - single destination amount (required unless `destinations` provided)
accountIndex - - -int - - - - source account index to transfer funds from (required)
subaddressIndex - - -int - - - - source subaddress index to transfer funds from (optional)
subaddressIndices - - -Array.<int> - - - - source subaddress indices to transfer funds from (optional)
relay - - -boolean - - - - relay the transaction to peers to commit to the blockchain (default false)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
destinations - - -Array.<MoneroDestination> - - - - addresses and amounts in a multi-destination tx (required unless `address` and `amount` provided)
subtractFeeFrom - - -Array.<int> - - - - list of destination indices to split the transaction fee (optional)
paymentId - - -string - - - - transaction payment ID (optional)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transaction to unlock (default 0)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transaction -
- - - -
-
- Type -
-
- -MoneroTxWallet - - -
-
- - - - - - - - - - - - - -

(async) createTxs(config) → {Array.<MoneroTxWallet>}

- - - - - - -
- Create one or more transactions to transfer funds from this wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transactions to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required unless `destinations` provided)
amount - - -BigInteger -| - -string - - - - single destination amount (required unless `destinations` provided)
accountIndex - - -int - - - - source account index to transfer funds from (required)
subaddressIndex - - -int - - - - source subaddress index to transfer funds from (optional)
subaddressIndices - - -Array.<int> - - - - source subaddress indices to transfer funds from (optional)
relay - - -boolean - - - - relay the transactions to peers to commit to the blockchain (default false)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
destinations - - -Array.<MoneroDestination> - - - - addresses and amounts in a multi-destination tx (required unless `address` and `amount` provided)
paymentId - - -string - - - - transaction payment ID (optional)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transactions to unlock (default 0)
canSplit - - -boolean - - - - allow funds to be transferred using multiple transactions (default true)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transactions -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) createWallet(config) → {MoneroWalletRpc}

- - - - - - -
-

Create and open a wallet on the monero-wallet-rpc server.

- -

Example:

- - -// construct client to monero-wallet-rpc
-let walletRpc = new MoneroWalletRpc("http://localhost:38084", "rpc_user", "abc123");

- -// create and open wallet on monero-wallet-rpc
-await walletRpc.createWallet({
-   path: "mywallet",
-   password: "abc123",
-   seed: "coexist igloo pamphlet lagoon...",
-   restoreHeight: 1543218l
-}); -
-

- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -object -| - -MoneroWalletConfig - - - - MoneroWalletConfig or equivalent JS object -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path of the wallet to create (optional, in-memory wallet if not given)
password - - -string - - - - password of the wallet to create
seed - - -string - - - - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
seedOffset - - -string - - - - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed
isMultisig - - -boolean - - - - restore multisig wallet from seed
primaryAddress - - -string - - - - primary address of the wallet to create (only provide if restoring from keys)
privateViewKey - - -string - - - - private view key of the wallet to create (optional)
privateSpendKey - - -string - - - - private spend key of the wallet to create (optional)
restoreHeight - - -number - - - - block height to start scanning from (defaults to 0 unless generating random wallet)
language - - -string - - - - language of the wallet's mnemonic phrase or seed (defaults to "English" or auto-detected)
server - - -MoneroRpcConnection - - - - MoneroRpcConnection to a monero daemon (optional)
serverUri - - -string - - - - uri of a daemon to use (optional, monero-wallet-rpc usually started with daemon config)
serverUsername - - -string - - - - username to authenticate with the daemon (optional)
serverPassword - - -string - - - - password to authenticate with the daemon (optional)
connectionManager - - -MoneroConnectionManager - - - - manage connections to monerod (optional)
rejectUnauthorized - - -boolean - - - - reject self-signed server certificates if true (defaults to true)
server - - -MoneroRpcConnection -| - -object - - - - MoneroRpcConnection or equivalent JS object providing daemon configuration (optional)
saveCurrent - - -boolean - - - - specifies if the current RPC wallet should be saved before being closed (default true)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet client -
- - - -
-
- Type -
-
- -MoneroWalletRpc - - -
-
- - - - - - - - - - - - - -

(async) decodeIntegratedAddress(integratedAddress) → {MoneroIntegratedAddress}

- - - - - - -
- Decode an integrated address to get its standard address and payment id. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
integratedAddress - - -string - - - - integrated address to decode
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the decoded integrated address including standard address and payment id -
- - - -
-
- Type -
-
- -MoneroIntegratedAddress - - -
-
- - - - - - - - - - - - - -

(async) deleteAddressBookEntry(entryIdx)

- - - - - - -
- Delete an address book entry. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
entryIdx - - -int - - - - index of the entry to delete
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) describeTxSet(txSet) → {MoneroTxSet}

- - - - - - -
- Describe a tx set containing unsigned or multisig tx hex to a new tx set containing structured transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txSet - - -MoneroTxSet - - - - a tx set containing unsigned or multisig tx hex
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the tx set containing structured transactions -
- - - -
-
- Type -
-
- -MoneroTxSet - - -
-
- - - - - - - - - - - - - -

(async) editAddressBookEntry(index, setAddress, address, setDescription, description)

- - - - - - -
- Edit an address book entry. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
index - - -number - - - - index of the address book entry to edit
setAddress - - -boolean - - - - specifies if the address should be updated
address - - -string - - - - updated address
setDescription - - -boolean - - - - specifies if the description should be updated
description - - -string - - - - updated description
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) exchangeMultisigKeys(multisigHexes, password) → {MoneroMultisigInitResult}

- - - - - - -
- Exchange multisig hex with participants in a M/N multisig wallet. - -This process must be repeated with participants exactly N-M times. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigHexes - - -Array.<string> - - - - are multisig hex from each participant
password - - -string - - - - wallet's password // TODO monero-project: redundant? wallet is created with password
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result which has the multisig's address xor this wallet's multisig hex to share with participants iff not done -
- - - -
-
- Type -
-
- -MoneroMultisigInitResult - - -
-
- - - - - - - - - - - - - -

(async) exportKeyImages(all) → {Array.<MoneroKeyImage>}

- - - - - - -
- Export signed key images. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
all - - -boolean - - - - export all key images if true, else export the key images since the last export
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's signed key images -
- - - -
-
- Type -
-
- -Array.<MoneroKeyImage> - - -
-
- - - - - - - - - - - - - -

(async) exportMultisigHex() → {string}

- - - - - - -
- Export this wallet's multisig info as hex for other participants. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet's multisig info as hex for other participants -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) exportOutputs(all) → {string}

- - - - - - -
- Export outputs in hex format. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
all - - -boolean - - - - export all outputs if true, else export the outputs since the last export
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- outputs in hex format -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) freezeOutput(keyImage)

- - - - - - -
- Freeze an output. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image of the output to freeze
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) getAccount(accountIdx, includeSubaddresses) → {MoneroAccount}

- - - - - - -
- Get an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to get
includeSubaddresses - - -boolean - - - - include subaddresses if true
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved account -
- - - -
-
- Type -
-
- -MoneroAccount - - -
-
- - - - - - - - - - - - - -

(async) getAccountTags() → {Array.<MoneroAccountTag>}

- - - - - - -
- Return all account tags. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's account tags -
- - - -
-
- Type -
-
- -Array.<MoneroAccountTag> - - -
-
- - - - - - - - - - - - - -

(async) getAccounts(includeSubaddresses, tag) → {Array.<MoneroAccount>}

- - - - - - -
- Get accounts with a given tag. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
includeSubaddresses - - -boolean - - - - include subaddresses if true
tag - - -string - - - - tag for filtering accounts, all accounts if undefined
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- all accounts with the given tag -
- - - -
-
- Type -
-
- -Array.<MoneroAccount> - - -
-
- - - - - - - - - - - - - -

(async) getAddress(accountIdx, subaddressIdx) → {string}

- - - - - - -
- Get the address of a specific subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - the account index of the address's subaddress
subaddressIdx - - -int - - - - the subaddress index within the account
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the receive address of the specified subaddress -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getAddressBookEntries(entryIndices) → {Array.<MoneroAddressBookEntry>}

- - - - - - -
- Get address book entries. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
entryIndices - - -Array.<int> - - - - indices of the entries to get
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the address book entries -
- - - -
-
- Type -
-
- -Array.<MoneroAddressBookEntry> - - -
-
- - - - - - - - - - - - - -

(async) getAddressIndex(address) → {MoneroSubaddress}

- - - - - - -
- Get the account and subaddress index of the given address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - address to get the account and subaddress index from
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the account and subaddress indices -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) getAttribute(key) → {string}

- - - - - - -
- Get an attribute. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
key - - -string - - - - attribute to get the value of
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the attribute's value -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getBalance(accountIdx, subaddressIdx) → {BigInteger}

- - - - - - -
- Get the balance of the wallet, account, or subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to get the balance of (default all accounts)
subaddressIdx - - -int - - - - index of the subaddress to get the balance of (default all subaddresses)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the balance of the wallet, account, or subaddress -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

(async) getDaemonConnection() → {MoneroRpcConnection}

- - - - - - -
- Get the wallet's daemon connection. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's daemon connection -
- - - -
-
- Type -
-
- -MoneroRpcConnection - - -
-
- - - - - - - - - - - - - -

(async) getDaemonHeight() → {int}

- - - - - - -
- Get the blockchain's height. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the blockchain's height -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getHeight() → {int}

- - - - - - -
- Get the block height that the wallet is synced to. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the block height that the wallet is synced to -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) getHeightByDate(year, month, day)

- - - - - - -
- Get the blockchain's height by date as a conservative estimate for scanning. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
year - - -int - - - - year of the height to get
month - - -int - - - - month of the height to get as a number between 1 and 12
day - - -int - - - - day of the height to get as a number between 1 and 31
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the blockchain's approximate height at the given date -
- - - - - - - - - - - - - - - -

(async) getIncomingTransfers(query) → {Array.<MoneroIncomingTransfer>}

- - - - - - -
- Get incoming transfers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTransferQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - get incoming transfers to a specific address in the wallet (optional)
accountIndex - - -int - - - - get incoming transfers to a specific account index (optional)
subaddressIndex - - -int - - - - get incoming transfers to a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get transfers destined for specific subaddress indices (optional)
amount - - -BigInteger - - - - amount being transferred (optional)
txQuery - - -MoneroTxQuery - - - - get transfers whose transaction meets this query (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- incoming transfers that meet the query -
- - - -
-
- Type -
-
- -Array.<MoneroIncomingTransfer> - - -
-
- - - - - - - - - - - - - -

(async) getIntegratedAddress(standardAddress, paymentId) → {MoneroIntegratedAddress}

- - - - - - -
- Get an integrated address based on the given standard address and payment -ID. Uses the wallet's primary address if an address is not given. -Generates a random payment ID if a payment ID is not given. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
standardAddress - - -string - - - - is the standard address to generate the integrated address from (wallet's primary address if undefined)
paymentId - - -string - - - - is the payment ID to generate an integrated address from (randomly generated if undefined)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the integrated address -
- - - -
-
- Type -
-
- -MoneroIntegratedAddress - - -
-
- - - - - - - - - - - - - -

getListeners() → {Array.<MoneroWalletListener>}

- - - - - - -
- Get the listeners registered with the wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the registered listeners -
- - - -
-
- Type -
-
- -Array.<MoneroWalletListener> - - -
-
- - - - - - - - - - - - - -

(async) getMultisigInfo() → {MoneroMultisigInfo}

- - - - - - -
- Get multisig info about this wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- multisig info about this wallet -
- - - -
-
- Type -
-
- -MoneroMultisigInfo - - -
-
- - - - - - - - - - - - - -

(async) getNewKeyImagesFromLastImport() → {Array.<MoneroKeyImage>}

- - - - - - -
- Get new key images from the last imported outputs. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the key images from the last imported outputs -
- - - -
-
- Type -
-
- -Array.<MoneroKeyImage> - - -
-
- - - - - - - - - - - - - -

(async) getNumBlocksToUnlock() → {Array.<int>}

- - - - - - -
- Get the number of blocks until the next and last funds unlock. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of blocks until the next and last funds unlock in elements 0 and 1, respectively, or undefined if no balance -
- - - -
-
- Type -
-
- -Array.<int> - - -
-
- - - - - - - - - - - - - -

(async) getOutgoingTransfers(query) → {Array.<MoneroOutgoingTransfer>}

- - - - - - -
- Get outgoing transfers. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTransferQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - get outgoing transfers from a specific address in the wallet (optional)
accountIndex - - -int - - - - get outgoing transfers from a specific account index (optional)
subaddressIndex - - -int - - - - get outgoing transfers from a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get outgoing transfers from specific subaddress indices (optional)
amount - - -BigInteger - - - - amount being transferred (optional)
destinations - - -Array.<MoneroDestination> - - - - individual destinations of an outgoing transfer, which is local wallet data and NOT recoverable from the blockchain (optional)
hasDestinations - - -boolean - - - - get transfers that have destinations or not (optional)
txQuery - - -MoneroTxQuery - - - - get transfers whose transaction meets this query (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- outgoing transfers that meet the query -
- - - -
-
- Type -
-
- -Array.<MoneroOutgoingTransfer> - - -
-
- - - - - - - - - - - - - -

(async) getOutputs(query) → {Array.<MoneroOutputWallet>}

- - - - - - -
-

Get outputs created from previous transactions that belong to the wallet -(i.e. that the wallet can spend one time). Outputs are part of -transactions which are stored in blocks on the blockchain.

- -

Results can be filtered by passing a query object. Outputs must -meet every criteria defined in the query in order to be returned. All -filtering is optional and no filtering is applied when not defined.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroOutputQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIndex - - -int - - - - get outputs associated with a specific account index (optional)
subaddressIndex - - -int - - - - get outputs associated with a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get outputs associated with specific subaddress indices (optional)
amount - - -BigInteger - - - - get outputs with a specific amount (optional)
minAmount - - -BigInteger - - - - get outputs greater than or equal to a minimum amount (optional)
maxAmount - - -BigInteger - - - - get outputs less than or equal to a maximum amount (optional)
isSpent - - -boolean - - - - get outputs that are spent or not (optional)
keyImage - - -string -| - -MoneroKeyImage - - - - get output with a key image or which matches fields defined in a MoneroKeyImage (optional)
txQuery - - -MoneroTxQuery - - - - get outputs whose transaction meets this filter (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the queried outputs -
- - - -
-
- Type -
-
- -Array.<MoneroOutputWallet> - - -
-
- - - - - - - - - - - - - -

(async) getPath() → {string}

- - - - - - -
- Get the wallet's path. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the path the wallet can be opened with -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPaymentUri(config) → {string}

- - - - - - -
- Creates a payment URI from a send configuration. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig - - - - specifies configuration for a potential tx
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the payment uri -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrivateSpendKey() → {string}

- - - - - - -
- Get the wallet's private spend key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's private spend key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getPrivateViewKey() → {string}

- - - - - - -
- Get the wallet's private view key. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's private view key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

getProcess()

- - - - - - -
- Get the internal process running monero-wallet-rpc. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the process running monero-wallet-rpc, undefined if not created from new process -
- - - - - - - - - - - - - - - -

(async) getReserveProofAccount(accountIdx, amount, message) → {string}

- - - - - - -
- Generate a signature to prove an available amount in an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - account to prove ownership of the amount
amount - - -BigInteger - - - - minimum amount to prove as available in the account
message - - -string - - - - message to include with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the reserve proof signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getReserveProofWallet(message)

- - - - - - -
- Generate a signature to prove the entire balance of the wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - message included with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the reserve proof signature -
- - - - - - - - - - - - - - - -

getRpcConnection() → {MoneroWalletRpc}

- - - - - - -
- Get the wallet's RPC connection. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's rpc connection -
- - - -
-
- Type -
-
- -MoneroWalletRpc - - -
-
- - - - - - - - - - - - - -

(async) getSeed() → {string}

- - - - - - -
- Get the wallet's mnemonic phrase or seed. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet's mnemonic phrase or seed. -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSeedLanguage() → {string}

- - - - - - -
- Get the language of the wallet's mnemonic phrase or seed. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the language of the wallet's mnemonic phrase or seed. -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSeedLanguages() → {Array.<string>}

- - - - - - -
- Get a list of available languages for the wallet's seed. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the available languages for the wallet's seed. -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getSpendProof(txHash, message) → {string}

- - - - - - -
- Generate a signature to prove a spend. Unlike proving a transaction, it does not require the destination public address. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
message - - -string - - - - message to include with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the transaction signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getSubaddress(accountIdx, subaddressIdx) → {MoneroSubaddress}

- - - - - - -
- Get a subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the subaddress's account
subaddressIdx - - -int - - - - index of the subaddress within the account
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved subaddress -
- - - -
-
- Type -
-
- -MoneroSubaddress - - -
-
- - - - - - - - - - - - - -

(async) getSubaddresses(accountIdx, subaddressIndices) → {Array.<MoneroSubaddress>}

- - - - - - -
- Get subaddresses in an account. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - account to get subaddresses within
subaddressIndices - - -Array.<int> - - - - indices of subaddresses to get (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the retrieved subaddresses -
- - - -
-
- Type -
-
- -Array.<MoneroSubaddress> - - -
-
- - - - - - - - - - - - - -

(async) getTransfers(query) → {Array.<MoneroTransfer>}

- - - - - - -
-

Get incoming and outgoing transfers to and from this wallet. An outgoing -transfer represents a total amount sent from one or more subaddresses -within an account to individual destination addresses, each with their -own amount. An incoming transfer represents a total amount received into -a subaddress within an account. Transfers belong to transactions which -are stored on the blockchain.

- -

Results can be filtered by passing a query object. Transfers must -meet every criteria defined in the query in order to be returned. All -criteria are optional and no filtering is applied when not defined.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTransferQuery -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
isOutgoing - - -boolean - - - - get transfers that are outgoing or not (optional)
isIncoming - - -boolean - - - - get transfers that are incoming or not (optional)
address - - -string - - - - wallet's address that a transfer either originated from (if outgoing) or is destined for (if incoming) (optional)
accountIndex - - -int - - - - get transfers that either originated from (if outgoing) or are destined for (if incoming) a specific account index (optional)
subaddressIndex - - -int - - - - get transfers that either originated from (if outgoing) or are destined for (if incoming) a specific subaddress index (optional)
subaddressIndices - - -Array.<int> - - - - get transfers that either originated from (if outgoing) or are destined for (if incoming) specific subaddress indices (optional)
amount - - -BigInteger - - - - amount being transferred (optional)
destinations - - -Array.<MoneroDestination> - - - - individual destinations of an outgoing transfer, which is local wallet data and NOT recoverable from the blockchain (optional)
hasDestinations - - -boolean - - - - get transfers that have destinations or not (optional)
txQuery - - -MoneroTxQuery - - - - get transfers whose transaction meets this query (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- wallet transfers that meet the query -
- - - -
-
- Type -
-
- -Array.<MoneroTransfer> - - -
-
- - - - - - - - - - - - - -

(async) getTx(txHash) → {MoneroTxWallet}

- - - - - - -
- Get a wallet transaction by hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - hash of a transaction to get
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the identified transaction or undefined if not found -
- - - -
-
- Type -
-
- -MoneroTxWallet - - -
-
- - - - - - - - - - - - - -

(async) getTxKey(txHash) → {string}

- - - - - - -
- Get a transaction's secret key from its hash. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction's hash
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- - transaction's secret key -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxNote(txHash) → {string}

- - - - - - -
- Get a transaction note. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to get the note of
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the tx note -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxNotes(txHashes) → {Array.<string>}

- - - - - - -
- Get notes for multiple transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - hashes of the transactions to get notes for
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- notes for the transactions -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) getTxProof(txHash, address, message) → {string}

- - - - - - -
- Get a transaction signature to prove it. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - transaction to prove
address - - -string - - - - destination public address of the transaction
message - - -string - - - - message to include with the signature to further authenticate the proof (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the transaction signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) getTxs(query) → {Array.<MoneroTxWallet>}

- - - - - - -
-

Get wallet transactions. Wallet transactions contain one or more -transfers that are either incoming or outgoing to the wallet.

- -

Results can be filtered by passing a query object. Transactions must -meet every criteria defined in the query in order to be returned. All -criteria are optional and no filtering is applied when not defined.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
query - - -MoneroTxQuery -| - -Array.<string> -| - -object - - - - configures the query (optional) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
isConfirmed - - -boolean - - - - get txs that are confirmed or not (optional)
inTxPool - - -boolean - - - - get txs that are in the tx pool or not (optional)
isRelayed - - -boolean - - - - get txs that are relayed or not (optional)
isFailed - - -boolean - - - - get txs that are failed or not (optional)
isMinerTx - - -boolean - - - - get miner txs or not (optional)
hash - - -string - - - - get a tx with the hash (optional)
hashes - - -Array.<string> - - - - get txs with the hashes (optional)
paymentId - - -string - - - - get transactions with the payment id (optional)
paymentIds - - -Array.<string> - - - - get transactions with the payment ids (optional)
hasPaymentId - - -boolean - - - - get transactions with a payment id or not (optional)
minHeight - - -int - - - - get txs with height >= the given height (optional)
maxHeight - - -int - - - - get txs with height <= the given height (optional)
isOutgoing - - -boolean - - - - get txs with an outgoing transfer or not (optional)
isIncoming - - -boolean - - - - get txs with an incoming transfer or not (optional)
transferQuery - - -MoneroTransferQuery - - - - get txs that have a transfer that meets this query (optional)
includeOutputs - - -boolean - - - - specifies that tx outputs should be returned with tx results (optional)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- wallet transactions per the configuration -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) getUnlockedBalance(accountIdx, subaddressIdx) → {BigInteger}

- - - - - - -
- Get the unlocked balance of the wallet, account, or subaddress. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -int - - - - index of the account to get the unlocked balance of (optional)
subaddressIdx - - -int - - - - index of the subaddress to get the unlocked balance of (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the unlocked balance of the wallet, account, or subaddress -
- - - -
-
- Type -
-
- -BigInteger - - -
-
- - - - - - - - - - - - - -

(async) getVersion() → {MoneroVersion}

- - - - - - -
- Gets the version of the wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the version of the wallet -
- - - -
-
- Type -
-
- -MoneroVersion - - -
-
- - - - - - - - - - - - - -

(async) importKeyImages(keyImages) → {MoneroKeyImageImportResult}

- - - - - - -
- Import signed key images and verify their spent status. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImages - - -Array.<MoneroKeyImage> - - - - images to import and verify (requires hex and signature)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- results of the import -
- - - -
-
- Type -
-
- -MoneroKeyImageImportResult - - -
-
- - - - - - - - - - - - - -

(async) importMultisigHex(multisigHexes) → {int}

- - - - - - -
- Import multisig info as hex from other participants. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigHexes - - -Array.<string> - - - - multisig hex from each participant
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of outputs signed with the given multisig hex -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) importOutputs(outputsHex) → {int}

- - - - - - -
- Import outputs in hex format. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
outputsHex - - -string - - - - outputs in hex format
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the number of outputs imported -
- - - -
-
- Type -
-
- -int - - -
-
- - - - - - - - - - - - - -

(async) isClosed() → {boolean}

- - - - - - -
- Indicates if this wallet is closed or not. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is closed, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isConnectedToDaemon() → {boolean}

- - - - - - -
- Indicates if the wallet is connected to daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is connected to a daemon, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isMultisigImportNeeded() → {boolean}

- - - - - - -
- Indicates if importing multisig data is needed for returning a correct balance. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if importing multisig data is needed for returning a correct balance, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isOutputFrozen(keyImage) → {boolean}

- - - - - - -
- Check if an output is frozen. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image of the output to check if frozen
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the output is frozen, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

(async) isViewOnly() → {bool}

- - - - - - -
- Indicates if the wallet is view-only, meaning it does not have the private -spend key and can therefore only observe incoming outputs. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the wallet is view-only, false otherwise -
- - - -
-
- Type -
-
- -bool - - -
-
- - - - - - - - - - - - - -

(async) makeMultisig(multisigHexes, threshold, password) → {string}

- - - - - - -
- Make this wallet multisig by importing multisig hex from participants. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigHexes - - -Array.<String> - - - - multisig hex from each participant
threshold - - -int - - - - number of signatures needed to sign transfers
password - - -string - - - - wallet password
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet's multisig hex to share with participants -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) openWallet(pathOrConfig, password) → {MoneroWalletRpc}

- - - - - - -
-

Open an existing wallet on the monero-wallet-rpc server.

- -

Example:

- - -let wallet = new MoneroWalletRpc("http://localhost:38084", "rpc_user", "abc123");
-await wallet.openWallet("mywallet1", "supersecretpassword");
-await wallet.openWallet({
-   path: "mywallet2",
-   password: "supersecretpassword",
-   serverUri: "http://locahost:38081",
-   rejectUnauthorized: false
-});
-
-

- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
pathOrConfig - - -string -| - -object -| - -MoneroWalletConfig - - - - the wallet's name or configuration to open -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path of the wallet to create (optional, in-memory wallet if not given)
password - - -string - - - - password of the wallet to create
serverUri - - -string - - - - uri of a daemon to use (optional, monero-wallet-rpc usually started with daemon config)
serverUsername - - -string - - - - username to authenticate with the daemon (optional)
serverPassword - - -string - - - - password to authenticate with the daemon (optional)
rejectUnauthorized - - -boolean - - - - reject self-signed server certificates if true (defaults to true)
server - - -MoneroRpcConnection -| - -object - - - - MoneroRpcConnection or equivalent JS object providing daemon configuration (optional)
- -
password - - -string - - - - is the wallet's password
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet client -
- - - -
-
- Type -
-
- -MoneroWalletRpc - - -
-
- - - - - - - - - - - - - -

(async) parsePaymentUri(uri) → {MoneroTxConfig}

- - - - - - -
- Parses a payment URI to a tx config. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - payment uri to parse
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the send configuration parsed from the uri -
- - - -
-
- Type -
-
- -MoneroTxConfig - - -
-
- - - - - - - - - - - - - -

(async) prepareMultisig() → {string}

- - - - - - -
- Get multisig info as hex to share with participants to begin creating a -multisig wallet. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this wallet's multisig hex to share with participants -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) relayTx(txOrMetadata) → {string}

- - - - - - -
- Relay a previously created transaction. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txOrMetadata - - -MoneroTxWallet -| - -string - - - - transaction or its metadata to relay
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the hash of the relayed tx -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) relayTxs(txsOrMetadatas) → {Array.<string>}

- - - - - - -
- Relay previously created transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txsOrMetadatas - - -Array.<MoneroTxWallet> -| - -Array.<string> - - - - transactions or their metadata to relay
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the hashes of the relayed txs -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) removeListener(listener)

- - - - - - -
- Unregister a listener to receive wallet notifications. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listener - - -MoneroWalletListener - - - - listener to unregister
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) rescanBlockchain()

- - - - - - -
-

Rescan the blockchain from scratch, losing any information which cannot be recovered from -the blockchain itself.

- -

WARNING: This method discards local wallet data like destination addresses, tx secret keys, -tx notes, etc.

-
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) rescanSpent()

- - - - - - -
-

Rescan the blockchain for spent outputs.

- -

Note: this can only be called with a trusted daemon.

- -

Example use case: peer multisig hex is import when connected to an untrusted daemon, -so the wallet will not rescan spent outputs. Then the wallet connects to a trusted -daemon. This method should be manually invoked to rescan outputs.

-
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) save()

- - - - - - -
- Save the wallet at its current path. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) scanTxs(txHashes)

- - - - - - -
- Scan transactions by their hash/id. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - tx hashes to scan
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setAccountTagLabel(tag, label)

- - - - - - -
- Sets a human-readable description for a tag. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tag - - -string - - - - tag to set a description for
label - - -string - - - - label to set for the tag
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setAttribute(key, val)

- - - - - - -
- Set an arbitrary attribute. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
key - - -string - - - - attribute key
val - - -string - - - - attribute value
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setDaemonConnection(uriOrConnection, isTrusted, sslOptions)

- - - - - - -
- Set the wallet's daemon connection. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uriOrConnection - - -string -| - -MoneroRpcConnection - - - - the daemon's URI or connection (defaults to offline)
isTrusted - - -boolean - - - - indicates if the daemon in trusted
sslOptions - - -SslOptions - - - - custom SSL configuration
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setSubaddressLabel(accountIdx, subaddressIdx, label)

- - - - - - -
- Set a subaddress label. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIdx - - -number - - - - index of the account to set the label for
subaddressIdx - - -number - - - - index of the subaddress to set the label for
label - - -string - - - - the label to set
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setTxNote(txHash, note)

- - - - - - -
- Set a note for a specific transaction. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHash - - -string - - - - hash of the transaction to set a note for
note - - -string - - - - the transaction note
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) setTxNotes(txHashes, notes)

- - - - - - -
- Set notes for multiple transactions. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
txHashes - - -Array.<string> - - - - transactions to set notes for
notes - - -Array.<string> - - - - notes to set for the transactions
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) signMessage(message, signatureType, accountIdx, subaddressIdx) → {string}

- - - - - - -
- Sign a message. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - -string - - - - the message to sign
signatureType - - -MoneroMessageSignatureType - - - - sign with spend key or view key (default spend key)
accountIdx - - -int - - - - the account index of the message signature (default 0)
subaddressIdx - - -int - - - - the subaddress index of the message signature (default 0)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the signature -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) signMultisigTxHex(multisigTxHex) → {MoneroMultisigSignResult}

- - - - - - -
- Sign multisig transactions from a multisig wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
multisigTxHex - - -string - - - - unsigned multisig transactions as hex
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the result of signing the multisig transactions -
- - - -
-
- Type -
-
- -MoneroMultisigSignResult - - -
-
- - - - - - - - - - - - - -

(async) signTxs(unsignedTxHex) → {string}

- - - - - - -
- Sign unsigned transactions from a view-only wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
unsignedTxHex - - -string - - - - unsigned transaction hex from when the transactions were created
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the signed transaction hex -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

(async) startMining(numThreads, backgroundMining, ignoreBattery)

- - - - - - -
- Start mining. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
numThreads - - -int - - - - number of threads created for mining (optional)
backgroundMining - - -boolean - - - - specifies if mining should occur in the background (optional)
ignoreBattery - - -boolean - - - - specifies if the battery should be ignored for mining (optional)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) startSyncing(syncPeriodInMs)

- - - - - - -
- Start background synchronizing with a maximum period between syncs. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
syncPeriodInMs - - -int - - - - maximum period between syncs in milliseconds (default is wallet-specific)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stop()

- - - - - - -
- Save and close the current wallet and stop the RPC server. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stopMining()

- - - - - - -
- Stop mining. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) stopProcess(force) → {Promise.<(number|undefined)>}

- - - - - - -
- Stop the internal process running monero-wallet-rpc, if applicable. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
force - - -boolean - - - - specifies if the process should be destroyed forcibly
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the exit code from stopping the process -
- - - -
-
- Type -
-
- -Promise.<(number|undefined)> - - -
-
- - - - - - - - - - - - - -

(async) stopSyncing()

- - - - - - -
- Stop synchronizing the wallet with the daemon. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) submitMultisigTxHex(signedMultisigTxHex) → {Array.<string>}

- - - - - - -
- Submit signed multisig transactions from a multisig wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
signedMultisigTxHex - - -string - - - - signed multisig hex returned from signMultisigTxHex()
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the resulting transaction hashes -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) submitTxs(signedTxHex) → {Array.<string>}

- - - - - - -
- Submit signed transactions from a view-only wallet. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
signedTxHex - - -string - - - - signed transaction hex from signTxs()
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the resulting transaction hashes -
- - - -
-
- Type -
-
- -Array.<string> - - -
-
- - - - - - - - - - - - - -

(async) sweepDust(relay) → {Array.<MoneroTxWallet>}

- - - - - - -
-

Sweep all unmixable dust outputs back to the wallet to make them easier to spend and mix.

- -

NOTE: Dust only exists pre RCT, so this method will throw "no dust to sweep" on new wallets.

-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
relay - - -boolean - - - - specifies if the resulting transaction should be relayed (default false)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transactions -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) sweepOutput(config) → {MoneroTxWallet}

- - - - - - -
- Sweep an output by key image. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig - - - - configures the transaction to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required)
keyImage - - -string - - - - key image to sweep (required)
relay - - -boolean - - - - relay the transaction to peers to commit to the blockchain (default false)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transaction to unlock (default 0)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transaction -
- - - -
-
- Type -
-
- -MoneroTxWallet - - -
-
- - - - - - - - - - - - - -

(async) sweepUnlocked(config) → {Array.<MoneroTxWallet>}

- - - - - - -
- Sweep all unlocked funds according to the given configuration. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroTxConfig -| - -object - - - - configures the transactions to create (required) -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
address - - -string - - - - single destination address (required)
accountIndex - - -int - - - - source account index to sweep from (optional, defaults to all accounts)
subaddressIndex - - -int - - - - source subaddress index to sweep from (optional, defaults to all subaddresses)
subaddressIndices - - -Array.<int> - - - - source subaddress indices to sweep from (optional)
relay - - -boolean - - - - relay the transactions to peers to commit to the blockchain (default false)
priority - - -MoneroTxPriority - - - - transaction priority (default MoneroTxPriority.NORMAL)
unlockTime - - -BigInteger -| - -string - - - - minimum height or timestamp for the transactions to unlock (default 0)
sweepEachSubaddress - - -boolean - - - - sweep each subaddress individually if true (default false)
- -
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created transactions -
- - - -
-
- Type -
-
- -Array.<MoneroTxWallet> - - -
-
- - - - - - - - - - - - - -

(async) sync(listenerOrStartHeight, startHeight)

- - - - - - -
- Synchronize the wallet with the daemon as a one-time synchronous process. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
listenerOrStartHeight - - -MoneroWalletListener -| - -number - - - - listener xor start height (defaults to no sync listener, the last synced block)
startHeight - - -number - - - - startHeight if not given in first arg (defaults to last synced block)
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) tagAccounts(tag, accountIndices)

- - - - - - -
- Tag accounts. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
tag - - -string - - - - tag to apply to the specified accounts
accountIndices - - -Array.<int> - - - - indices of the accounts to tag
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) thawOutput(keyImage)

- - - - - - -
- Thaw a frozen output. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
keyImage - - -string - - - - key image of the output to thaw
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) untagAccounts(accountIndices)

- - - - - - -
- Untag accounts. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
accountIndices - - -Array.<int> - - - - indices of the accounts to untag
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

(async) verifyMessage(message, address, signature) → {MoneroMessageSignatureResult}

- - - - - - -
- Verify a signature on a message. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
message - - -string - - - - signed message
address - - -string - - - - signing address
signature - - -string - - - - signature
- - - - - - -
- - - - - - - - - - - - -
Implements:
-
- - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if the signature is good, false otherwise -
- - - -
-
- Type -
-
- -MoneroMessageSignatureResult - - -
-
- - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/SslOptions.html b/docs/SslOptions.html deleted file mode 100644 index d20fe6b26..000000000 --- a/docs/SslOptions.html +++ /dev/null @@ -1,1014 +0,0 @@ - - - - - JSDoc: Class: SslOptions - - - - - - - - - - -
- -

Class: SslOptions

- - - - - - -
- -
- -

SslOptions()

- -
SSL options for remote endpoints.
- - -
- -
-
- - - - -

Constructor

- - - -

new SslOptions()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getAllowAnyCert()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getAllowedFingerprints()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCertificateAuthorityFile()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getCertificatePath()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

getPrivateKeyPath()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAllowAnyCert()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setAllowedFingerprints()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCertificateAuthorityFile()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setCertificatePath()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

setPrivateKeyPath()

- - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/TaskLooper.html b/docs/TaskLooper.html deleted file mode 100644 index ce47f1d6a..000000000 --- a/docs/TaskLooper.html +++ /dev/null @@ -1,831 +0,0 @@ - - - - - JSDoc: Class: TaskLooper - - - - - - - - - - -
- -

Class: TaskLooper

- - - - - - -
- -
- -

TaskLooper(task)

- -
Run a task in a fixed period loop.
- - -
- -
-
- - - - -

Constructor

- - - -

new TaskLooper(task)

- - - - - - -
- Build the looper with a function to invoke on a fixed period loop. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
task - - -function - - - - the task function to invoke
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

getTask() → {function}

- - - - - - -
- Get the task function to invoke on a fixed period loop. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the task function -
- - - -
-
- Type -
-
- -function - - -
-
- - - - - - - - - - - - - -

isStarted() → {boolean}

- - - - - - -
- Indicates if looping. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- true if looping, false otherwise -
- - - -
-
- Type -
-
- -boolean - - -
-
- - - - - - - - - - - - - -

setPeriodInMs(periodInMs)

- - - - - - -
- Set the loop period in milliseconds. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
periodInMs - - -int - - - - the loop period in milliseconds
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

start(periodInMs) → {TaskLooper}

- - - - - - -
- Start the task loop. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
periodInMs - - -int - - - - the loop period in milliseconds
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- this class for chaining -
- - - -
-
- Type -
-
- -TaskLooper - - -
-
- - - - - - - - - - - - - -

stop()

- - - - - - -
- Stop the task loop. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/ThreadPool.html b/docs/ThreadPool.html deleted file mode 100644 index d85503b53..000000000 --- a/docs/ThreadPool.html +++ /dev/null @@ -1,496 +0,0 @@ - - - - - JSDoc: Class: ThreadPool - - - - - - - - - - -
- -

Class: ThreadPool

- - - - - - -
- -
- -

ThreadPool(maxConcurrency)

- -
Simple thread pool using the async library.
- - -
- -
-
- - - - -

Constructor

- - - -

new ThreadPool(maxConcurrency)

- - - - - - -
- Construct the thread pool. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
maxConcurrency - - -int - - - - maximum number of threads in the pool (default 1)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

(async) awaitAll() → {Promise}

- - - - - - -
- Await all functions to complete. -
- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- resolves when all functions complete -
- - - -
-
- Type -
-
- -Promise - - -
-
- - - - - - - - - - - - - -

(async) submit(asyncFn) → {Promise}

- - - - - - -
- Submit an asynchronous function to run using the thread pool. -
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
asyncFn - - -function - - - - asynchronous function to run with the thread pool
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- resolves when the function completes execution -
- - - -
-
- Type -
-
- -Promise - - -
-
- - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/fonts/OpenSans-Bold-webfont.eot b/docs/fonts/OpenSans-Bold-webfont.eot deleted file mode 100644 index 5d20d916338a5890a033952e2e07ba7380f5a7d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19544 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 diff --git a/docs/fonts/OpenSans-Bold-webfont.svg b/docs/fonts/OpenSans-Bold-webfont.svg deleted file mode 100644 index 3ed7be4bc..000000000 --- a/docs/fonts/OpenSans-Bold-webfont.svg +++ /dev/null @@ -1,1830 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/fonts/OpenSans-Bold-webfont.woff b/docs/fonts/OpenSans-Bold-webfont.woff deleted file mode 100644 index 1205787b0ed50db71ebd4f8a7f85d106721ff258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22432 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 ig3W - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/fonts/OpenSans-BoldItalic-webfont.woff b/docs/fonts/OpenSans-BoldItalic-webfont.woff deleted file mode 100644 index ed760c0628b6a0026041f5b8bba466a0471fd2e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23048 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/fonts/OpenSans-Italic-webfont.woff b/docs/fonts/OpenSans-Italic-webfont.woff deleted file mode 100644 index ff652e64356b538c001423b6aedefcf1ee66cd17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23188 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 diff --git a/docs/fonts/OpenSans-Light-webfont.svg b/docs/fonts/OpenSans-Light-webfont.svg deleted file mode 100644 index 11a472ca8..000000000 --- a/docs/fonts/OpenSans-Light-webfont.svg +++ /dev/null @@ -1,1831 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/fonts/OpenSans-Light-webfont.woff b/docs/fonts/OpenSans-Light-webfont.woff deleted file mode 100644 index e786074813a27d0a7a249047832988d5bf0fe756..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22248 zcmZsh1B_-}@aEgLZQHi(Y1_7KW7@WDOqPg|;+~g#c zTn|MF2_RsgpQU~Rg!-RNT>BsYzy1HaBqY@2fq;N3epI~wFj1RzkQ5V__|b-ce1ac{ zfboIAB$X6Zf3!m&Ah2Q}Am}`LXG{@E)n6h&KoF5XF+o366qrO7DylNF00BY5{rLJn z7#4V@A(_}2IsRz2Klw#KKp-%vH*Cr#?yf{Xb&!5yn10}+rURcbceJqk(S&|_y#3h3 z7+7y%3nQ1GTm-(K7^wdZl7+38`HvGnn`na|ZCO>gXKYf5#e%Pm@MS-(3 z^8E2tq<-><{sR;j#M$1+&g@6C{E0dHIb*DcNj9~kgNrK=keb?$_WDx~4Q1c$gXgoLPPM$A|b23vuQ89}D~g&=h~s?0Y}FgUqqZGapfmNBxwIuVFm(k ze2_5J1XP7GNR!Ub>HZ>jTD#<+>v|6A@Ps=rubqHZd2a9KgyVR&^O181UPYR$*uv^8jHMb|3VJelk8s&^2FN|ruFH*b0P-=Pxx z)n&d4)334G1?Ye~Q~-z$@yO0)EPiZm>;@5h&oDPs1QBS&9@GP>1JDlZFdytO5p0Mf z0mF?w6vH4nRycA8NUE&3+j`oFx2aVo;#l_bC3x_^QC zOIwCIWC%j+h!TDPjSlof`zj7nbHRVUC^89-V-ah|_Am14(ubnMne6_`PxvYvvpOVTMneb_yNnzE-NHsp$uk~E4o=th_|)1p<|5PC5H40YZHHZK-0b~`fdbVqJ0;h^LkIPchf2cz+yFG$aT z@DGbUJX0g2nIZ6P_yO?_upuT84MViLL9EyzcI!?A&RvR4?ajT7?&c*9@UShNC>D%g zbkUyp_`i6o+|@2C0Lra`zc3u!ksLzWwU(G7!V%!{ad_BVPb}tVi}J+a_!{n}qp>W~|28eomjC7^3R6XCBh(RU@wByCnk>!cCyG+VX=Bte zYU%#}!v9H8K*;?#<#4raxn*02CxZ3@H1hlPE*zzH|+~{B8@12|ap3}yg zAn`i=x1~J2YI*7A(S3-RGo}N{t(H0vi%hWoWf7SK=H3~n^NR^NGyzFG!35uS?VmGs z#O~2+m3{oxh>~A|GwHKj@^xCC#?&r*Wd@ku3Sl}MJ}=oDv{v)e=O*)`catXcw6a6> zIjNhA|EiRtXtcUS98TojtJQHI(4JQ*w%MFEdJ5Egiqjt%+9a|YTLDGxJw*yNDujmh z)?FRVkId@D`hL}`kNE24COmcC*q>vkgmXm55o|RadVe`=#EQN1zdKBpc;j2o)BKNC zG0P(>k~Ou}`%wH4-VYVy!*$z!?x_E{!;B-1#|#afobI8Ge#_L+O&BRjGs;Yx&rM3x zjhi$W8Uj}ty?hf&8Ja*dF}=RMQ!zn-y}pA;H&BhK{mq$r5Q9KKf{oSc_r?k$iG}kv z%mTM;MhZa-0U6?jFo#ft2ncUC1Vrq?gQEU^#*umh`o+TH2?A7PfrI^Xm;QGK^F+fX zBSSMoqudeess4T{#KKHQmJ;UPJwxMtb8{1OGb3YTum1jr?I2;|te_xa&`4}J{E*xr zv}*^9ww3@ZI5<3Mxi1*F*n44Tx~H0rz!VTrRv|@MiU!hiGAPzM z)@~MdW*``9Cx{_ZV?$G;i=(sC{mtDiEEEiMOk{MFtdxxOx>gk zSUl#;Xsk>n=^=XQszVLN8Ya#Jk-0kWM3t3pZ+oPx4x4{`?pGATLnQP00v=u-aleR#fDQRn(B-T3VH;M z;RhWOM2;`%!_}Jo3IIKf_y_>qW9?{w0RiIlM#A+3eqSd>6Z?Iw#)o+F0^cf)3N zDwrP&rN?5jq8V`~*29CU1=A~`bN$Cl_^#D=MBQ@yKq^@K9G@PVmbb`3DS17UUEQwR zgB@ccR;mc<6vv}>=S-BkJgRak5QW>h_pdQ&fXIGKeV^J2wKZ96+?JC!MOJslJ+%h4 zCi&JGsk)qImX-WbIA^f9LxU1P1d!@slSWa*6O?Y@3VETD2BF3d<4QFTN2!`8N~=OJ zlZntTPK?ZkP~pINtQaclB&4~*o9!%Zg)l5}P9@cC)VDk8a^ksZf|Ra7y|CktZQN^o zQ?3%CktiemUZdt##(_{7QHjuwDjt&a-;!jhtN~{+L!+f}Lma-mD&J^}JS|+jbyKcp zQ(c~RlbE+nh?m3{^BUt&p!`=h(-y(FDyLlQJ~G_~n#t@)P0l*+hXU-HA(dMVskz(; zQ)0hFh;EUe07{m$PW8(R=2F>#sM*|tk)dqs(p3B?;o)BBXllm3``+>70q2HM^Shfm z=g*0S5?lWK%5)*cruPOap=EkReE%|C$%xU3v;k>9XWUn2!*+MJfb^*l(zc5oy z6I@_r`Z&~4Tf+{b#lG-R8a3V(Nqk<7ito0vLKA@Yy&T1eH&z;zch#h;i|S#u)poOY z>Ta;5&3YDI`fv9%% zVtRy)z*h_1cGTi))g8RZm+i%`Idzga1P(TF&jWxVtp< z>@d>ppQ%o3ICIHhOwl>5v{!ta`vE5TFZJ!11?yK|lsnT^M^Vek6@EDPP-=Ov$cR-n zY8k}Vl;R7dh;}qH0>_CESncrP4g@zuYn$QILT@ZwSmN-)mL8-ADQZ3Rot6oYTY_pE zz=`L6^o=VicT}XJQ|c#`XH|8vzbmAjezSe0kxc5@slb8i#d({bnmSJ9!Nmyu@&NmE zr-Z`D1L|v*<`yo3_OlQoI-&fW)URpgPUZ=$I5YXz>_CRU6AoCl+O~ZW@0H0d(Z4*9 zll@%w33A-q4b1w|TqeglzX1j9ak{rIWJm4dK>^1?7il%Y-WDuKCcxaVI74fLhX_M% zaE#|S0dfl8eekd`hgz4GIn%0yb&0VweNJdNY=3F5=j zu<(A@2HXV1`td-Me{ zI_AYB-$W}FhJ_e0o+R# zu}kX=W$X-v;%pDfM-j0L%?)OdEP4}{SdE(5_fLc)u($byLdm)uB8CGaGtmb1NdPm= z&k%V%0wdAe^zbe8Ed^HgbDKmZpdoUJFm5wLDPVt4C7>;G$$*aJG4r<6o$O!gfXnv$ zK>n3c?ayTMGm!v)e*+pClbdwnc_Zj&Vg zoqc~>63J~>*HxdNRfQ|5NI>OM#gTz1OQjzNxn4HwAftZeK6lgk0W8{uZguXu`vub0 zM!V3t8%t;H4fEga2(o8Q?o;N`=-~+#vPu#$^XO3(k-((eba@~@OM9R=W63ISU$A3| zfc8p5RSJ`!f@P^>zE-L zfs7xqH~Z2or}b&!Iu+CtIK))LB}?KHDN-QdG6fuPQ%5%{$W(C!W7UTx!(hIY0t_5~ z@h_cuY-{_B9iEM98GWtOJ-8UJ=+LT-J8*U*? zPW3>S2*!yhD!19sO8Pbt12uIj7NXJgrtWZ$oeCsTN-gCq(US=63_AmvDpE=XqrMDD zm~3!vG7lMyC76D--aUT^(U+Tpw2ygfPpP#Tzw z$44<#KlWvtc(CKqnhU8!Kna3>pZoOI8Ev)%p5Jiu*{f={`DVB8URD1WH|MMY(0e*R zzTcHjRw^4eJ)$ZWGT3HGr~#MFqJI0k*4>Cj*zD{E^_r1-<~8TP5;k~ir=keIo_ zn*v6uM`V~7DIrg?eTm#<%o{PXIL>s71X;`WAb4ceXzPrYj9giy3Q4pxd7@dmZd!8k zB7J!_DLp+qJ^gex4o32&qs05Y?bc#XWz%6wPvxmpz91vc%jgP1e%1gi;ZhtgpV37J z4_A-91eII|nU6)&Y zz3!wb8hAq=^6Bqi*yzu3fe`?SUQ)32Fu4Qk7L z`x|N+oVB~%rT(Z-tVPTYz`^y`5S^q(QQHW-7GvHhD3wOvxOo9Cpaow*D_}?Nr0q6n z9WLW3d*$596R1}xR%_cJ+&xJusal(KaEQ(vRhtUg!wig?pqtjob6Q_4 ztpUCx!jHArozN&Cu0&a?VwRpeg=x(31!fLw`guS*o#Q!Oy#7k-qquDj*oMWloTJss zD!lDeyF*&XonFn1&MvsM<4Vq1_#v8i{_br_Z4+J%hXzDgb{r1p3~muE>gm9Ia)N^m zK%c!D{xoq^-fYyau3rcrp@-fg{*CH>?#r;~4=(tcH%2BLCmsqcL-k&a9l%4-XG+4W zBq6}*JgyIfy%$3HfPeP7UHW-RYbj@?{}c={8{Q^%yQMmw13nqi}YfxaMbnU?~=&EhEX}?q2+W?;Jp6n<-Xgu z@j_{Q*Vp@f_U$UGI2ZIsrgrc-OTsvo|`gfwB; z(H3*?K|#_0Ki}}1YuQdkEXXOdrI5fx+?!ut=Q&vFH%q@_JA0^Psb&5{=&xntl`ME= zXahZ1EuPQj`BCO~EK#0H?0MupDabeZAQsOSlqlh7SI}9auAa;(Tnk|VH09pMRJbiA zC2(B=W!p@I$+k`X7Qffta_<|~=dmuvn)$EyvNo}$ zRl*owvJQWW)8Z$wGAPT;xp&Fkvpp)iMzB&L;etoFX&E&+`_W*$r&6zlg{I&y3TR!0 z`Q!;b1${&@M%=qchdD87Z1ESXmYad*=PN+HU%4JvbL-jXeEIk7NI5R&C4cL|)v1s9 zzxa>6vUWlA(QP*(h4}6Jxv1t;RG#CWo8c_@19!fLo3BCP(pB}|3Df*IzHC~2k*^Ku zJispq5|Jnp)kKz9=na8Q8|QQsU^62lqbH`WMf1^GQxV-BU(!OI2OrxN5JnsgC;Q2@ zz|=hLxgxtbHf~BtZNs`Yl%uq0XIU`Ya0W_WM2IBpK6TQ*8mf0N=UQzHL=Y#f-+Jbz z=}IW@AP?fUO1@$hl61q!W9$S9;O!tt7^z&BiF?svC`7`-v`LgC8*?q~w{cO+10bmc zY)|<}g?>K%Z@A=(dA(Py4uS!nZ9Z=gMfKnuN47}j{{9yiVHZ>5;Oo~Hp8G-)5Pq(@ z1?0*JBWWag`kREzWVtC7BPvCVXwf9+QWUU0YXQ!n7xU~l(2 zh05vNlM~OPAR#bGCjTh48Q(fmF2b~Aax`U*>eLRbErBV-U2DTlbAe!+STzdY?bt^U zK`*4wRhm2&!8@1*k|Gu8Q;h=8=oBtPy#+a(o}HJCMTjh6OeA5hvcH{C z*@3Ky#>A)x1_H~Cg~&nztYY>Te2aeZ3$jfPpAnup*axUM;zY=pSZeV>qI( z&tG1HkEf%afc$DNPJ+!pUJEYCqkQCW3j&K6_>tA|vBAZpdOekT8Jx&7 zY;1=fr-OS4!h~3%8{*R|Jq3}vB6Ythd`)G}RX}JG*;%GyXK4_|Z({f_z(vk^=2HKR z4JTD#`7vM7jEb(Xd21UW`*CZ|r4yP@ynws~%ROkm?y`iO*kO}gSb51(0m0hRgeKH4 zmRTp@u!JraX?Uv6o~oJ8!>uYJw-(X?;|5JghxwOFjVQvCr zY6&H$eFT(Pa`P(pkqFD{!Kr+e|5xc3hX6OtKXUOp7 znuXKkkO%7CI?k`HtsSnFEU_uNM+eW0B@f0m5;%G?+pXsQro`Z*=BPdo1n=vLd&v4l8CF9 zV0W^2#C>wZ6LuwgC4;gdzJnEW$w%`Cx|<*ziZIA8oL^|;)u$eS9zgDb{-waB@(FktCfk<#uJ+(_hdS1{njaOdGRm-aTahyQpxjENsLmov z8xaM?hwMx5znb589ckN`8NvohPx0`+TpSG(fs@XHtkS=dv2_;+>}jRSG_W{vk%;@0 zZ@}K>Awd?g8X)UPJAF&&uHLY;p{f^t+g(bhfH+ z_to=UD666OD1w&l3PQn+_eu*;j~ci&o%e5p2ghlI?uqR6@VLB68l70_yXkLYiR=;i z;)XLh7SH-S-FYan(WMBQ7o*#t6iHALZm?1bR>vjEv@qM^ShrJ6ZuKBfqn~j38Q-2M zFaj2lNhGIAq(pveA?)v_3Pnug#qAYw0!Ds|p?z|sReA|mK;un~S>-|224H>S&#n9ujyxHe#H=^^v^jer7uF@a{Km!Ia7QwgLbiD;&-aii0 z;>vEqC5*al^N7~_a#vZvFkg*k&G&#d?&U@~Kh`(XJYBcsi3@jRaa-su)fB9Cc6m-9 zyp%i|VT^?!P&>5lO7)g{i^^{^D;qH4hOjh?B36W2TnVyH0giZZbB+4Q|Ci&p+ZBKxR=M`+o{4tR) z8>ydcce|0jjAmg45(Y@w+?a4`i0XErsxhoRtZfE97rI6TzY`e{=u)40AD=!QJP_Cx zM%WbvzLrG2b0VBJydG4o$RsZhC3vw&i(`zVl9W)4-vLGb4sGeQa6D6Jy?Z_lzw^>@ z;BhU<7^T&?>OWm2-n}0GeqX*8eE*FQ^ugG@eAa)s-0FO7-S*(Sy?8QeFx=Vk=1ddt zlKl73c_nI~+4axVYx=iad%R`U#j?*4O?*E1Yf6x>ie_AB7((|0w(*6V>Hv&310p_) z)_qh|7GiUoQ)dr%s88VjJBPWX7Po?68k9;%-$vy0`Hf6$xx&6Q`BdO3aJqaEpqxtM zGG_eyW8>YRI4iZ?(m;gd57~t+_4ls9P7V@66T9YAb7O1#&_XB*MO%RaX*`IC1#>)M z(H1|$aDv*7gN0`W zqt=Ie7n&3_m#o8Q_?|o(=wso8=5krCytVyFx|PF(=63~Gx_lIM9}}+c*GVLuR3;rq zZ4Lh8>qx-CK05zs0$!RIW=H5N{au|EC`U}L+ZQun;t!#a559R)onif@dlv&3>+ZKd zE9>e%m)1Q%;JTy2xetFhyiJ)+&uNz-wau8 zz_;-n8KNyGB0nj;Cp4*U^n^6dVm}sk&-2OK8qyMfZqSW0RFfto(H4%!RuO0z%Fv=v z9efGU$11^3VT}E}9Lukj=TQolt?+Q(B^+2FTLir%%CXYR7UXS8C4#EEe7do&8%>D0 z8X2kXO@bZ$qF`l|cS-D{ixA~c>d=STOi(mKND5uy$CKlq##-w&fVfszIjH3pA0`H^ZV+2KFE_@sup#w2(AG zf%xAkB^@mDEe4{uNOazu+hItOCzP4O5@RP`K|%q+rw!O z!H)IkK^I28db11P^EnMk42OIc>&dK9cj>#pN8IYFY6Lv^!-s(T*UGX6@OHMDqqYFX zBM4DbN&q3Em)#8mt#b)&B9r!Ss-ik5SGs+?@ka7gio@1yD+e)Z*$HhjEWX-~i^>NF$HDN;aItgzp zID3c$M{M0Yn<4La`%Z5-VrJTuq!uG;^>2*~$xJ3c=M3cqxKrxhJ?{L@4)xAk#HkvLzEZ9KtnL5ZRQp8LA_wJ)d2*IUIa4 z={O(a*y-P%E}oBPuKa;1u6Mp-HGgfn-h*`9x4Y;d8g8N@IL%dF4L)mc@62pyD?q-I z`6e_u7ah|m$Jk-Xues6EA=5~;r~{Kmu#i!lqr|uu#>F~~NRCR1hcb_I4_H|z=kO!* zbrxMi|s7(SJ zfm%O~{cinj(qFx6cJC1!aedCf>mK&yw7Sky3KZWpO3w5B@;$$*+69r&eaO>v+JoMH zuS>tT>VR=nW0WDlG)doLWM6;x0p6qhw)I1Ps zB=qy(NR&bP@s|5OU^|g8D=7QRDRYEp7H`Ox1eL#rxK&AP5xV5vP45GlGfrW5%hoxK zp&q|{?FO%)QPH^Maa-(z*q7S1bm(|>{8toCUxexQDSyM^moj0>yI$&iOxGp-1Wkd;DP4S#1s#_hlBOW@K@Ua7=rSx$edN?TXaqc7g7 zMR3wls5#UKe>%B5I^jy{aA@hePO4^8wDNTsiG<0{tn(ln7G!)6=4^GH>LhHne_I+- ze?s6n_@j7g)9LdTJ>6tPMJN=RV|yoX0Yq(321Mf!XcF?*qP9%BbhEd<2=X}e>YT@> zk(SFQI}SPY65R+_QCDFpnG0J%Jl?f~W-HJOy2@XtI8dQlVfdMUX@B0r3(fjVFtpn8 zcUsKOb3R{ii|_-yE|*{mW&^>SS`b@c^Yyx4*4GUJj2e*uox~js_qC$S!Y7A9MgY)^ zwTZZzs_nClP2#+Tk(;LZrb+xfu=$`xi$CEB>4fEXZ zhwS{X>qenS7P%$3pdk!6~*{&ra9AUEj!OPDNhKTSn=rtb?3sA+uRSLLo@GdFv zx_^8`QpKtLq-vtOXWZ=(Rckrz@n%>dXh8xdB zrUkb@U()D(2m`FwMHM&oy^X)?;(FyL)9o}H&cAqNh`)LzWy{s&YHKr=i=W3TMKQNk zRWwvo1)3VU0uI^olJ$5bF{M78MvPk(v2IucqH%MXTEq&qM7kyuwu)u6QWo5=;;qrp zu?M_@fy+=*FAvDQU2{)vV+LkXg)P`}a5e(^*L>0izdZ8@qg#jA%~tl96ZoVNA1Ao$ zKh^QEdNl>}x5MA#qelk(W?n?HUjD}Ki|lUn(0FQMbj}iMmd=rKx6Km!j%2Mqv#YKD zGmov(h#CQQn*?wwEM~<-tlEYAdeF2{V6+`&AJX(7Z>H<8L~Zs`E+sK!8!v+RFv=J* zO1@Yp&{w&6HZ;>*D~huZU9&+stg(%>Taq|HiF#(+VUNh`@yr-f_)BGqI~Y&-#~O2q zdu4ErtT7%K7{@G;1=d_e`%;}R%43%?duX7l5`+R-xql`E&sRL+i;~tl@^+_d(Ntq5 z0Un?;%?pd~eEl+erU2hCQ3k9-X-znf2w6+eLh(E9rRL>0HUOa%5u)tNM#>Jt|!C?p`|_6TxQks9@<`VO4#wXVqq-rM!Hx zZmH@qupLwoY&)X9#WSQlEBT%+{PYj}a~gWHih6)ytIzx{!~NbbZ`~t#7cNcU(IbyF zcoZ!Ig4Gui?YWo76tF*wZU&szjXe>H_zTSe^(p~gPG(#S?aJ?Ed+KT{^O$xCa_4(h zZSL6*QIwjX$Y)3q)k{J}{_PMXORXO=>ELbih@khU6UKX|S^H@?xosksM0(VhBWr(} zv(PbRwMIdC7s+dKBlv+Xl#+Q%9V@4fhQBYcz-2q+^=u7XXU7c%eAX}_(iclkHuin!lv@BTG$Wi!8$U#XoKf*| zl4TS&*yF-ok0=ieojDGkIIZt%s?BN}Ff&MeXC=<&@D?kYgLz^5De3e2`(Db^dJtsv z?w(U7)Mx`?bJ9Cy<+RgW255s^{HqGd&%p%@LU~es{b+kQJC@DGtyA=7VmpV$~YN61m@T45ibeRM8 z2d$Fr34ErPihf3i?VB-@H$9{4M%I1aXBxH9e^sClSnkzrcn}4NM$9$(Rw8^7ZQ2%U z>imHtmnU{MmM;xVPQ9wvW(5xVzIs{4YzjcHKz3iyr}#_hjaBrz66~&$M9C&l=-_E) zZvV6}+S^@SnerEAZON#E$$M_$In!Ogg2{>hjBb22)c+VxTGImVD4@%u2 z6>_+gkpDbvAM#T4eaz_iq;0bw%-=+dO8E3wD^CW1|eRuKhFXko2*ZB(PG620YiH01S!m;&$I zNOQYn>t9z8XRi2lzlY(+H^qp?5Qd{*>OUBw55r*fl*FXW#V(zpxMP(asc=W}sj(na zNU$t0o3U9S?I`dAYYC|%GfTA>J-&ZCBg*SedYTaW447Z%A63&1o&hPm`rIuS@uKx} zhy*!JRkQpie>WE`e%*JzTR`;XSH9}&`LCYW@3^hnL}H#BXGXp!TL@*m1EpjD%T0wf z-~sxOOGI4R8=SwZnGH&|5p9O(sLe*?2=wN zqtrZL7Ua;g;kEOc0dfmaB z-)z6s#Tgqwig}yp+hZ&TW}zbpfh<>$F9BjhC|q7fH9*fWInarN6kzY3wu(x)p>DwD za)8UmGawASc|51*Fy+LprKpQT?+6eN(9hyu8z$ZKo;|R+uFhIq`?%x%=3)xSsxSOE zbHMau_w?A=_R2`vIxYE^4{^)=I=rqce_5fsLzefC4xNwLM$pzeJGa62Cu5&m{nR|c zVZCMcjzE>&=cIH6Z<~%!0H==)rR(~4_Y=dJ`k&oGvxV%AbUxEg94k?`CXfx4q^YGU z)T&<~N%XQr#eTo$Y^5xzWB=e&E;7^yZ^W^SvbFL{^6>qt*4AR@7rh>$xxy+8u)&6%W?^H~>bCA^;k(h^y+f}OTS70Tk#)8=idqwdbE1TS$3m;CGJ>b;{}Esk_4!pG`X`&NmCqh0m{ zZ}R>JEUw8Ar2<-2c35iR*mDkg8KpUMw&eyHvlQiVxisa~WpU9j1HYr2IxWNYbCVC3 z%vJ29ZQY0m*Y*{(r$o|XnG-)3_&fsPmZBwy>bCwS7Ylqo$=T)#070;5`qB2#&Qf}$MB z*3uCS(m)9kR>T^O)??H6J|3TQ=SgmBPSUxH zDYz*oY9L)>(@LKFI}>^ZF4)S|Fh!msu|o!NIYC{-7+4@$L>QXJm_EHun$a1!0gssr zY*5_Jyhx(+?v#iJ^VTETbs3jHLTBS4u6V?-T_EL85BA%i~VK#{Txp?m4cO!+RTZQZ6ue{V_?mHA_^9o@mT8L|y!L8aqkVfZHx3Mz?0S9f9a& z0k(3iahK-pGxn*c<_GcF7W6-UWz!ofT5?9onsS(;#=14z$7Yvbmv?slG8qGtvPfO~ z`uyiJyaFDB&V6i!di(sYa>BFo|7r?`kJ(x<8b#cbs8~M4;b>kHsc4PP`#uN7k+kv&&R)!UP$$3y+cjQ#;vTtCJ5#PD+K?l#wUB~rR8_4&Mg?_T2A#Lr zgWMNzf{?cJ}&>|#YYuvTCd+(Pt z;7qb_jsCsPIbXbQCdMkm-?eyks@kwk@-h$_tI@F0wm8=(qQz!%cNO*A9Isp0PJ^uQ z7{tE{6MgKc5`628J9!_Rt2=8WVS|&<8Q}ZXuwpv(BE7Q9N3_*p^>`-9QS;|mIj;Bn zYxs1LGTMbO!03H3+v9Sx=o6-_R5p#M1NbDO8~^h+HVd8zu+$r2u!c_rH_6y4!P2%- zJk(uf&Gc-zc}7+(eWb&?db+H`18Z|h&(zZc#fq!*VgQtO0izW&i#oBvB5RPJX{fe6 zGi|U43NRXGBt;?Fl$<;kj%u>zXr`I4#sG+^cp)iS&oDA3CI&`2O8Ov$b}oYY1WXKE zOl;%&AZqhtD|1kq{lY53flc4UYIy!DfD?+P&aYPc?@F4qFCI9wC=9p>74~N`UEC3E zwum~%U#p?P1wU!%#;X*^ssY3s-B^hN#pZra-Lekvlf_7r=Ig=E$VUGA}D%w zVXm+SCbh^qLzwiAb(m2&Zkph5oqn>2?6Wxps_xVFVq#iyBcnSg^@ObR+A=#aB)s)$l6GV1(yF=YvQKl@}3G3W(B6psOU1Km(^4?Xt zsC?N@=kS-6)O6TOxPW|JK^R7XMC9)e{N|z%+U7$8{g}tWG?} zriZRAO5+?Got7Rb4e*qhs(r&UY-KHls+8Tc@4Xua((PODW3A%S6Vwb=7FK(e=uCI=kb3)ghd-C7bF}DqdFA z7YCY(bd$eE?=qME{OmfteSwrm<{tP;Ax)9MgfEtX(lBja)I<%HIP0ZOg9L(ET!7RO zsxOkv_&MPtk6$8m84p})n{=q{o>P-iumUG>4!P56D%SA0L@-rZi>1;;VK)F<8wa?^ z(0OCuUG+7XDya@V4T`A5@r+aG^`yPX8}oUJ+qRQAt(V%UJ&AZe(6{(HQdiL9DYqw1 zMIP;1*2H`}vSh8Z1IA|YlMWU`O*Dk|Go^VOgG&n>V^V-V%}+Pe9(g;K4Kc&cj$~j> z=9d<-e=C->`9&EP>#FE1lCwyF9R9Q@zg5PihtXY*^_aZplXQ@6by0DwJcuPLwoy@2 zz=ftITno80y<_91Oc-`(4KmG7aaG6j>YrV8fw@p-TMTIK1mr8 zgUTd$4%pZ4E?f2hjefX2C~f2FvXSqh=0w?-hv&LA48yCsRI6u z#;+KXQqZ=I?L&tBPuwY@dXsG~kWqGz9gOK>nY#;7gMy8HE_k8N=)%^3)9?O86Hp&G zeze(Qe*48_-64`$@d=2E&)}YGBSQ+9aE!-cW0>+L!#$Hye8Api+Z0?rCpWVI0|j7Z zd^@Urbc00Yfq&9x8=m`|gFrio;GCQV!U{FT>6+uql&6rooH4BkyFBF!cf!UHqz$kberT==L9GjtR-~Q0?{F zp}0v>6yQC%(rrq}a>jl>9lv-sJJ#&=T$&OWE2*U$y_~#k6B|m9HuchL=ck+`?S`n( zwg@6sKGBsW%G3Y$pN7MX`NEa&kI-ZJOfc?37~MAG&JR-o;J{sh_%>y2g57#rsI^@b zHLK-MsY8cEFY4v_*MG6S;PS1(KGz6bJ0kGw@*VxL6tv4QB&YmSe5p(^E(RW!OPQhx ztcERhi>@qtoq~-QF*mv8n-h`V32p-+_P%Z!h`UyhAb{g^)p#cC2DvWP-=19tpYeJ& zl^WDxM!BZcKSD}-iaEJ$o&CGx_V2cA{E#gNTElLk0Al{qipaGE9g z2X5fUKmPM@d%XRRp1*T@dEUdRyH^E6&N?Pt!~%h9SmmG>hR-|;X#6X^IGbLFkofko z#UTU+(DowTyl=Au{1Pifn|am=!b?9x>Xl>^#Ytwif`2fVTtkb3| z|G*YC^;Fj`xPlBZi7U6Hga=psiQsOT|@+=^|uK&P}dJV3^kE8x%#Un-hk??^x?bh?CYhug4t!^h4sz}>3;shar^q&uKP zPJv=ey4BhVLHET2^1}zh6AN z*OhE}<4fdO9_U{w*FZMHE9|*Xho{e7& z=lRlxLy_xsVt_QM!?}!yso14GDQ5t+EY03?C7q4EXXD{$A}mC5OLNP@xIXW|CoZ$Y zczguK={i2d#E@C5s$(~n~+>${Awf;*MGVz#*F@YiO5m+seK^5aj zoO8C~a8sx2%afg9W=#-&jr1gQdEHy&E@8ZO|47HBJm~*@3(#iY%1_S(ChPOj59$LN zD&L&aRdiM%39nMnQR@)Lkmf0o6gQKl4pxSN;U|zaIzFq}+B%zm=Mo85AQHcERm2pW z7qF(|{hABE#MIvIw0Z?icyqr1lFs$A|Aq|m#p1tfJ1xGp(Yl*DXAE$5ENqZ^XNii} zzXof%D5JdgGi@Kol78Jyd0NyMYQ19ScGH4(t8Jzp)VKRP&{z0zY@_hM0s$8O={9r0 zkMklxvtdZdiR~L0z zeh1fiy*aL!mnib(xFVv6ZV=a6-J=jLe^^LYo)5mEbFJ0?EIkJG({>e7O^y%#olw-{cW<7B#=y!t!A=Yv0P4e zuwen!=pSpn3Iqk3;qxS?rHVG=GB^EtB6k7JkTBQFD2V2no?YqQ+Dq0$O#b!k-!2CJ zKJBr7qIyF6G56={**W)5I-C3UBM(n`ecMZWUfKD=%e1R@PJ183Z@vVfq?khFD~}Gn zuc+sUenXa5EqG9y_RW1yzV+^bljn6k<-PqFbFiFdFQ?4ZnD)!7W?quT{>r`r!iyXkN2}RSVbmejUye_Xhu4_ zsM-4cUF^2dtAN%kGCp3B5y(uiie7OY?+10Wx&YCyaH=Qh2HAX1EiyskhtTYdO_Z)> z*AuY#M$s>qQjE)`T93EduG^X^>?G3qP>YR{Lr9dFk+nX^I*hu<^KQn!HDs~Ri3R? zZ2)nxXcvNZz|8Hy)o`2F$Z(5w@&kvC!AB4`=FWcyw~%9sKgKOFA;$eDaXS`C$gTU5 z;+#Soav{M+D0b$nVb?C$Fy1g<4Lt{dCnX_11VKwMH{&?sKI@2MbELkTgP=oV3(J+4 z0bo%@0;UG7tArWnifoo3#0QVoCG;5~v(+dxn6hLC5p0+c1w*fNB1=S)d5a#OH{izm zvY~@`)oYy461n-RqY2D{#jyDV{iN2I(c&|hDP*ZJ$ZP^hp$Z=(XK9o^c^*7baEDCV zmj;)<{FN&{ZJa}LJY3N(LgHgxDbXoxUeo5ZrFksQZ0HfZd$o1K%celcXcxrJ(LVj= zr@!h0UK13!{;7T1mcu)q71kXJ&UEQhUM8X~_@!khoA3JTZ+14{736hD6&nkUxzCR_xCeC<_Z%mzroa0)I>C>!j^vFqzuQLwUj1h}qnBSJ&^pRLg#;_GlL>S8{YRKYC2_ zSi{`eSs({5@p88wbW3>!HsfwDd3PXu$V7e(&=|-opF;l?m`$4k57E^vqo?;RnxS3L zzJ^#U+zZ!1J*=|n2jG!*@kgunymnkWs_iuV+c_l}O#!>h+|OpbtzcFX1q_Cg_$)dx zqmMO}l%KG+mU31_o}>}HtO zNzG`t-P3-QK6G@`r;pW38#kOT=zZ*AeTehH<2`49=e2(XWO{TrAF;pi#nC-G_a4~3 z=ZLs@{mv-5YK!yErMIjIj&|O?65MR+{_C&#)IH7r?Bf5v{_MA3e*4SoZ2F$G*4|wm zYVXaL{-U38>ScF+p(=(e#F(=Wmd{z}Z@1g^zzPFi@grfj>_G+0-Di>Y>tl3#7|z>l zTRR3Vykn3}Adj!z<8(M!V;bujjCQ-c?9xFmWEZW>YAD;;f8m5_v-^wRmF_OR@iptD z<~d{7k?i&2CxTC2%6m>dYEp1=g7=dRBdv22!K<`FyU9XWEck95KmJDcrEMHsR5ZA} zchO*J*Z3Q57(aIIyfGz%2bZXWhj6;$alKR0TO^iogrG~LXlO?9YwcN1!@zVjw|$gOD<_nGmzhY>SNGl(Byn zBS@Ji_zg6Mr#5sdNh*ob%0sBV5hCjwv=18F$ZlIxAy&4g8K{mTqucnWIH1gALN;1W z)`)P<0lAF>9=F_q6|g%Zts#@G-NqE>E!z1}4Up5Q+XmzhogKoT)0{tITL9 zByPOf44~7?c_kbD)!(27#tWO+UcJ1FH7%9e+I5D1Gh*Pt5fuXlRM2y^^<%3?jvLGS zVlSPO++>&D7fV=IqK$VY+Tc5Gt!%;v2s2J~i~O#}O7`!E@cZfcFIJggvzUwFDDMk3 z&a@pJh7v+Y5!g&3K7Szed83CE4qT~al`!Z-w6f{cj)IFL2`Y?GwYhYV){U24UP>Bb^|f$QZRQ6G&JVipGu+jRRy! zEU}<4_4zIn2#P-66^>#Kt0eqnMUsO5h6j-Jv{X+@azZ?7$+PjXfA$Y8kWSDkLZ5|1 zpRKr@%zZN(sLw+Z!JF?-&o98=?c5tG>4JCXmsxOLqoN3hwSGze+W)}H5i76#Qv0sc zp6#NzeSZd|d|Y$i;Eda)xflOa(G=4+y5ggs`i@PFW%u7yqz`Va04wCBW>yc-&w(xU zE6L6GObp8fto%NCGZ@V+`sH;PzOm!rFpEhN*#(pO-wAFdQ;aFb9gS?Zv!*+1cnojo zMziJx!Ruy0ZanXKF7OJ_v-%@y`GnS-mc@$2r$1XJtqTC=yRsqL@#amQ+5<{be5I3-v3r878>y?4{nXVNZd*`jE%&?i$~ZO?wdq} zvRY1N`!|v8nt^<`454g$-=x|j!6Zb1S;RcRjOn{18qPYS?ZO?xPOu0&z|ybRQTTN> za`1K$ewnP9O@jX3bG2$jS}O0__Zb~!25w6(!)+MHZOhIf%tgcay;MNkk;9a<7^cpDb-bM^v^XeB23N;e5%OdNay15`_p2)(ZrX^_sh zrva_fKt==OGym6^9#o^#B59=Hi=t6t5~3cJsL(cE=UDhZ8Dr+Slc=c3N)j3AEH%kg zU`RxSQHDmi61+q_3}v|1ggKTRQg~ zNQ5Z(lA=taBytLvJou*(?LReS;?)U@FjGcZ5W_HNM~)6V&BE==u=Wq}H(^8@={}uw zCZYCEl8A`5=TJ(nD^MKC`xy28WBgKfOCa?dSC&i2{{!xrcAR+HV_;-pU|^J-B{kuW zXFR{nR|a_w1`s%VRs0By{sUCK86W2MHC!a}%qo-Ek$2(yg&&^6|@0Z-78KPY*-)JKHh z-Z8%q(a{{MlOQQ}Z3-Q~$F(DB7$vC=m2tAfeQ#reIUl49gl=I*(yViyY_pD6sM<4A zXZZj7CKU{%tTrW%6=|Vv+9*I+)fmy}*j}-VvFow7aTsx=actxG$7#Zu zz}d!mjq@Lu7?%@Q9#;?739cX9cHBkW$9TASqIjx!*6>{6mE!f_&EuWLyNCA%?+-pX zJ`27Sz9alm{Br~h1eye{2u2C661*fNB9tQ3B6LldPuNR%iSR!WE0H#lQ=%-QMxu41 z>qI|@$%rM1wTPV(=K(?!@d@G&Btj%+Nt}@klB|*ZC6y-CC$&N9jI@VzlJqp`L(>0b z0%U4r4#{%JD#?b(R>-cBy&@+h=Os5o?t{FHyoY>={0jL?^8XYZ6lN%#Q23#!p%|uE zr?^bJ$pIZDTrJ}Ijx`zRMEUr}LD(NT#~X;E3D@n?Wb~%! z9n!m@f6TziAj4pe!4*Rh98k&7z|hVx%CO9Ej^P2rJ4Rwg0Y*heQ;fC&;W?uh#w0003r z0cQXN00DT~om0y$1VI!%Jw4u!AR-nby|kEVJtGpa^NL3%BnTEZt!IoG^N^kv;S;QU zft3Y+!q!Jv`3R?O-@!0Qq*B$VZryw8o_nhS4C5I#tYi;>kTb>>Cb^4o0)x0wY-0_# zij#2hqPPR&)~Mo6Ojs$!UAVK>6nA6FdR5$qxkS^yABTyY;sN4&#e>+jlZuBhVjn0T zMz38~{D?6-Qv3wZzQ!_2C~`)eS12G4htucYCkjx<87`^Kc%9Jd;DIv>4;jw1q6|{B zuF|_szY2LAED?u{HmfiEb<|jcE!ql14t8j-p+S^;=ila85$ELa8MnaGK)mx@Lwcq; ze`j#8$oLW&j24rn_h&@wt$T7;Lo+rUuJANjnjGm*9PMr>$!h8tNezsKs@!l&TOG&W zYUYblN4zfiJrZju*%`J-GK;%ZlG_5Ym~O@UGF61)o97z5*S$dv->ccaM@COX>pZ48 zE@ZeoZ;cK#))iEx=YQiOYCRKG1*v+GzHtX!;jFScIZ;y(C9(eVPdXy{nMy5?$ERPs zYmG54^lN9cyutf1?+-3laxU_;(!$xGC5Ls^aRr;~{EGY$Zrd04@mBVEa>VYN93p*R zo>+~p4N>NB%*t7od1W!jb(Y`ezc=#+t4Fo!004N}ZO~P0({T{M@$YS2+qt{rPXGV5 z>xQ?i#oe93R)MjNjsn98u7Qy72Ekr{;2QJ+2yVei;2DPp;1#;{#~b(Z$z5`nyCaI0 z_~XUP|KbNoltdGaff$UKFcV80@g$H)63L{HN*d{8kVzKVW(;E)$9N_%kx5Ku3R9WJbY?J++~YA1c*r9@hQIfWCp_f@ zzVOd>@{;Ggz|UvCvWYnan9DqBsbe4Y%%_1Mjf7ahLKg9f#VnzTr7UL|7unBBRON ztxB8Ht}IhJl;z5Q^PCYiHCNN(ya8V*SW{iq=#P|iPei-YVKcZx!TRRJt@iP_BKw5Z zl~$$A+;Xk>&S-A)R2moUsumK}PumdA-uop!jAWOIa z4pB?622)yCurwR6C|O`;Ac|F3umUAvumMG5BVw=uBSf+b0R}3v3 diff --git a/docs/fonts/OpenSans-LightItalic-webfont.eot b/docs/fonts/OpenSans-LightItalic-webfont.eot deleted file mode 100644 index 8f445929ffb03b50e98c2a2f7d831a0cb1b276a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20535 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 Z%0#`NexefPFV?Xj51H#Y#AC7WXn+Jg($4?@ diff --git a/docs/fonts/OpenSans-LightItalic-webfont.svg b/docs/fonts/OpenSans-LightItalic-webfont.svg deleted file mode 100644 index 431d7e354..000000000 --- a/docs/fonts/OpenSans-LightItalic-webfont.svg +++ /dev/null @@ -1,1835 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/fonts/OpenSans-LightItalic-webfont.woff b/docs/fonts/OpenSans-LightItalic-webfont.woff deleted file mode 100644 index 43e8b9e6cc061ff17fd2903075cbde12715512b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23400 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
- -

Global

- - - - - - -
- -
- -

- - -
- -
-
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - -

Methods

- - - - - - - -

connectToDaemonRpc(uriOrConfig, username, password, rejectUnauthorized, pollInterval, proxyToWorker) → {MoneroDaemonRpc}

- - - - - - -
-

Create a client connected to monerod.

- -

Examples:

- - -let daemon = await monerojs.connectToDaemonRpc("http://localhost:38081", "superuser", "abctesting123");

- -let daemon = await monerojs.connectToDaemonRpc({
-   uri: "http://localhost:38081",
-   username: "superuser",
-   password: "abctesting123"
-}); -
-

- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uriOrConfig - - -string -| - -object -| - -MoneroRpcConnection - - - - uri of monerod or JS config object or MoneroRpcConnection -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - uri of monerod
username - - -string - - - - username to authenticate with monerod (optional)
password - - -string - - - - password to authenticate with monerod (optional)
rejectUnauthorized - - -boolean - - - - rejects self-signed certificates if true (default true)
pollInterval - - -number - - - - poll interval to query for updates in ms (default 5000)
proxyToWorker - - -boolean - - - - run the daemon client in a web worker if true (default true)
- -
username - - -string - - - - username to authenticate with monerod (optional)
password - - -string - - - - password to authenticate with monerod (optional)
rejectUnauthorized - - -boolean - - - - rejects self-signed certificates if true (default true)
pollInterval - - -number - - - - poll interval to query for updates in ms (default 5000)
proxyToWorker - - -boolean - - - - runs the daemon client in a web worker if true (default true)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the daemon RPC client -
- - - -
-
- Type -
-
- -MoneroDaemonRpc - - -
-
- - - - - - - - - - - - - -

connectToWalletRpc(uriOrConfig, username, password, rejectUnauthorized) → {MoneroWalletRpc}

- - - - - - -
-

Create a client connected to monero-wallet-rpc.

- -

Examples:

- - -let walletRpc = await monerojs.connectToWalletRpc("http://localhost:38081", "superuser", "abctesting123");

- -let walletRpc = await monerojs.connectToWalletRpc({
-   uri: "http://localhost:38081",
-   username: "superuser",
-   password: "abctesting123",
-   rejectUnauthorized: false // e.g. local development
-});

- -// connect to monero-wallet-rpc running as internal process
-let walletRpc = await monerojs.connectToWalletRpc([
-   "/path/to/monero-wallet-rpc",
-   "--stagenet",
-   "--daemon-address", "http://localhost:38081",
-   "--daemon-login", "superuser:abctesting123",
-   "--rpc-bind-port", "38085",
-   "--rpc-login", "rpc_user:abc123",
-   "--wallet-dir", "/path/to/wallets", // defaults to monero-wallet-rpc directory
-   "--rpc-access-control-origins", "http://localhost:8080"
-  ]); - -
-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uriOrConfig - - -string -| - -Array.<string> -| - -object -| - -MoneroRpcConnection - - - - uri of monero-wallet-rpc or terminal parameters or JS config object or MoneroRpcConnection -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
uri - - -string - - - - uri of monero-wallet-rpc
username - - -string - - - - username to authenticate with monero-wallet-rpc (optional)
password - - -string - - - - password to authenticate with monero-wallet-rpc (optional)
rejectUnauthorized - - -boolean - - - - rejects self-signed certificates if true (default true)
- -
username - - -string - - - - username to authenticate with monero-wallet-rpc (optional)
password - - -string - - - - password to authenticate with monero-wallet-rpc (optional)
rejectUnauthorized - - -boolean - - - - rejects self-signed certificates if true (default true)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the wallet RPC client -
- - - -
-
- Type -
-
- -MoneroWalletRpc - - -
-
- - - - - - - - - - - - - -

createWalletFull(config) → {MoneroWalletFull}

- - - - - - -
-

Create a Monero wallet using fully client-side WebAssembly bindings to monero-project's wallet2 in C++.

- -

Example:

- - -let wallet = await monerojs.createWalletFull({
-   path: "./test_wallets/wallet1", // leave blank for in-memory wallet
-   password: "supersecretpassword",
-   networkType: MoneroNetworkType.STAGENET,
-   seed: "coexist igloo pamphlet lagoon...",
-   restoreHeight: 1543218,
-   server: new monerojs.MoneroRpcConnection("http://localhost:38081", "daemon_user", "daemon_password_123"),
-}); -
-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -object -| - -MoneroWalletConfig - - - - MoneroWalletConfig or equivalent config object -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path of the wallet to create (optional, in-memory wallet if not given)
password - - -string - - - - password of the wallet to create
networkType - - -string -| - -number - - - - network type of the wallet to create (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
seed - - -string - - - - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
seedOffset - - -string - - - - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
primaryAddress - - -string - - - - primary address of the wallet to create (only provide if restoring from keys)
privateViewKey - - -string - - - - private view key of the wallet to create (optional)
privateSpendKey - - -string - - - - private spend key of the wallet to create (optional)
restoreHeight - - -number - - - - block height to start scanning frsom (defaults to 0 unless generating random wallet)
language - - -string - - - - language of the wallet's seed (defaults to "English" or auto-detected)
accountLookahead - - -number - - - - number of accounts to scan (optional)
subaddressLookahead - - -number - - - - number of subaddresses to scan per account (optional)
server - - -MoneroRpcConnection -| - -object - - - - MoneroRpcConnection or equivalent JS object providing daemon configuration (optional)
serverUri - - -string - - - - uri of the wallet's daemon (optional)
serverUsername - - -string - - - - username to authenticate with the daemon (optional)
serverPassword - - -string - - - - password to authenticate with the daemon (optional)
rejectUnauthorized - - -boolean - - - - reject self-signed server certificates if true (defaults to true)
proxyToWorker - - -boolean - - - - proxies wallet operations to a web worker in order to not block the main thread (default true)
fs - - -fs - - - - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created wallet -
- - - -
-
- Type -
-
- -MoneroWalletFull - - -
-
- - - - - - - - - - - - - -

createWalletKeys(config) → {MoneroWalletKeys}

- - - - - - -
-

Create a wallet using WebAssembly bindings to monero-project.

- -

Example:

- - -let wallet = await monerojs.createWalletKeys({
-   password: "abc123",
-   networkType: MoneroNetworkType.STAGENET,
-   seed: "coexist igloo pamphlet lagoon..."
-}); -
-
- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
config - - -MoneroWalletConfig -| - -object - - - - MoneroWalletConfig or equivalent config object -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
networkType - - -string -| - -number - - - - network type of the wallet to create (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
seed - - -string - - - - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
seedOffset - - -string - - - - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
primaryAddress - - -string - - - - primary address of the wallet to create (only provide if restoring from keys)
privateViewKey - - -string - - - - private view key of the wallet to create (optional)
privateSpendKey - - -string - - - - private spend key of the wallet to create (optional)
language - - -string - - - - language of the wallet's seed phrase (defaults to "English" or auto-detected)
- -
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the created wallet -
- - - -
-
- Type -
-
- -MoneroWalletKeys - - -
-
- - - - - - - - - - - - - -

getVersion() → {string}

- - - - - - -
-

Get the version of the monero-javascript library.

-

- - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the version of this monero-javascript library -
- - - -
-
- Type -
-
- -string - - -
-
- - - - - - - - - - - - - -

openWalletFull(configOrPath, password, networkType, daemonUriOrConnection, proxyToWorker, fs) → {MoneroWalletFull}

- - - - - - -
-

Open an existing Monero wallet using fully client-side WebAssembly bindings to monero-project's wallet2 in C++.

- -

Examples:

- - -let wallet1 = await monerojs.openWalletFull(
-   "./wallets/wallet1",
-   "supersecretpassword",
-   MoneroNetworkType.STAGENET,
-   "http://localhost:38081" // daemon uri
-);

- -let wallet2 = await monerojs.openWalletFull({
-   path: "./wallets/wallet2",
-   password: "supersecretpassword",
-   networkType: MoneroNetworkType.STAGENET,
-   serverUri: "http://localhost:38081", // daemon configuration
-   serverUsername: "superuser",
-   serverPassword: "abctesting123"
-}); -
-

- - - - - - - - - -
Parameters:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
configOrPath - - -MoneroWalletConfig -| - -object -| - -string - - - - MoneroWalletConfig or equivalent config object or a path to a wallet to open -
Properties
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDescription
path - - -string - - - - path of the wallet to open (optional if 'keysData' provided)
password - - -string - - - - password of the wallet to open
networkType - - -string -| - -number - - - - network type of the wallet to open (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
keysData - - -Uint8Array - - - - wallet keys data to open (optional if path provided)
cacheData - - -Uint8Array - - - - wallet cache data to open (optional)
server - - -MoneroRpcConnection -| - -object - - - - MoneroRpcConnection or equivalent JS object configuring the daemon connection (optional)
serverUri - - -string - - - - uri of the wallet's daemon (optional)
serverUsername - - -string - - - - username to authenticate with the daemon (optional)
serverPassword - - -string - - - - password to authenticate with the daemon (optional)
rejectUnauthorized - - -boolean - - - - reject self-signed server certificates if true (defaults to true)
proxyToWorker - - -boolean - - - - proxies wallet operations to a web worker in order to not block the main thread (default true)
fs - - -fs - - - - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
- -
password - - -string - - - - password of the wallet to open
networkType - - -string -| - -number - - - - network type of the wallet to open
daemonUriOrConnection - - -string -| - -MoneroRpcConnection - - - - daemon URI or MoneroRpcConnection
proxyToWorker - - -boolean - - - - proxies wallet operations to a web worker in order to not block the main thread (default true)
fs - - -fs - - - - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
- - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
Source:
-
- - - - - - - -
- - - - - - - - - - - - - - - -
Returns:
- - -
- the opened wallet -
- - - -
-
- Type -
-
- -MoneroWalletFull - - -
-
- - - - - - - - - - - - - -
- -
- - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index e9b364665..000000000 --- a/docs/index.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - JSDoc: Home - - - - - - - - - - -
- -

Home

- - - - - - - - -

- - - - - - - - - - - - - - - - - - - - -
- - - -
- - - - - - - \ No newline at end of file diff --git a/docs/index.js.html b/docs/index.js.html deleted file mode 100644 index 294e603e9..000000000 --- a/docs/index.js.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - JSDoc: Source: index.js - - - - - - - - - - -
- -

Source: index.js

- - - - - - -
-
-
'use strict'
-
-/**
- * Export all library models.
- * 
- * See the full model specification: http://moneroecosystem.org/monero-java/monero-spec.pdf
- */
-module.exports = {};
-
-// export common models
-module.exports.GenUtils = require("./src/main/js/common/GenUtils");
-module.exports.BigInteger = require("./src/main/js/common/biginteger").BigInteger;
-module.exports.Filter = require("./src/main/js/common/Filter");
-module.exports.MoneroError = require("./src/main/js/common/MoneroError");
-module.exports.HttpClient = require("./src/main/js/common/HttpClient");
-module.exports.LibraryUtils = require("./src/main/js/common/LibraryUtils");
-module.exports.MoneroRpcConnection = require("./src/main/js/common/MoneroRpcConnection");
-module.exports.MoneroRpcError = require("./src/main/js/common/MoneroRpcError");
-module.exports.SslOptions = require("./src/main/js/common/SslOptions");
-module.exports.TaskLooper = require("./src/main/js/common/TaskLooper");
-module.exports.ThreadPool = require("./src/main/js/common/ThreadPool");
-
-// export daemon models
-module.exports.ConnectionType = require("./src/main/js/daemon/model/ConnectionType");
-module.exports.MoneroAltChain = require("./src/main/js/daemon/model/MoneroAltChain");
-module.exports.MoneroBan = require("./src/main/js/daemon/model/MoneroBan");
-module.exports.MoneroBlockHeader = require("./src/main/js/daemon/model/MoneroBlockHeader");
-module.exports.MoneroBlock = require("./src/main/js/daemon/model/MoneroBlock");
-module.exports.MoneroBlockTemplate = require("./src/main/js/daemon/model/MoneroBlockTemplate");
-module.exports.MoneroConnectionSpan = require("./src/main/js/daemon/model/MoneroConnectionSpan");
-module.exports.MoneroDaemonInfo = require("./src/main/js/daemon/model/MoneroDaemonInfo");
-module.exports.MoneroDaemonListener = require("./src/main/js/daemon/model/MoneroDaemonListener");
-module.exports.MoneroDaemonSyncInfo = require("./src/main/js/daemon/model/MoneroDaemonSyncInfo");
-module.exports.MoneroDaemonUpdateCheckResult = require("./src/main/js/daemon/model/MoneroDaemonUpdateCheckResult");
-module.exports.MoneroDaemonUpdateDownloadResult = require("./src/main/js/daemon/model/MoneroDaemonUpdateDownloadResult");
-module.exports.MoneroFeeEstimate = require("./src/main/js/daemon/model/MoneroFeeEstimate");
-module.exports.MoneroHardForkInfo = require("./src/main/js/daemon/model/MoneroHardForkInfo");
-module.exports.MoneroKeyImage = require("./src/main/js/daemon/model/MoneroKeyImage");
-module.exports.MoneroKeyImageSpentStatus = require("./src/main/js/daemon/model/MoneroKeyImageSpentStatus");
-module.exports.MoneroMinerTxSum = require("./src/main/js/daemon/model/MoneroMinerTxSum");
-module.exports.MoneroMiningStatus = require("./src/main/js/daemon/model/MoneroMiningStatus");
-module.exports.MoneroNetworkType = require("./src/main/js/daemon/model/MoneroNetworkType");
-module.exports.MoneroOutput = require("./src/main/js/daemon/model/MoneroOutput");
-module.exports.MoneroOutputHistogramEntry = require("./src/main/js/daemon/model/MoneroOutputHistogramEntry");
-module.exports.MoneroPruneResult = require("./src/main/js/daemon/model/MoneroPruneResult");
-module.exports.MoneroSubmitTxResult = require("./src/main/js/daemon/model/MoneroSubmitTxResult");
-module.exports.MoneroTx = require("./src/main/js/daemon/model/MoneroTx");
-module.exports.MoneroTxPoolStats = require("./src/main/js/daemon/model/MoneroTxPoolStats");
-module.exports.MoneroVersion = require("./src/main/js/daemon/model/MoneroVersion");
-module.exports.MoneroPeer = require("./src/main/js/daemon/model/MoneroPeer");
-
-// export wallet models
-module.exports.MoneroAccount = require("./src/main/js/wallet/model/MoneroAccount");
-module.exports.MoneroAccountTag = require("./src/main/js/wallet/model/MoneroAccountTag");
-module.exports.MoneroAddressBookEntry = require("./src/main/js/wallet/model/MoneroAddressBookEntry");
-module.exports.MoneroCheck = require("./src/main/js/wallet/model/MoneroCheck");
-module.exports.MoneroCheckReserve = require("./src/main/js/wallet/model/MoneroCheckReserve");
-module.exports.MoneroCheckTx = require("./src/main/js/wallet/model/MoneroCheckTx");
-module.exports.MoneroDestination = require("./src/main/js/wallet/model/MoneroDestination");
-module.exports.MoneroIntegratedAddress = require("./src/main/js/wallet/model/MoneroIntegratedAddress");
-module.exports.MoneroKeyImageImportResult = require("./src/main/js/wallet/model/MoneroKeyImageImportResult");
-module.exports.MoneroMultisigInfo = require("./src/main/js/wallet/model/MoneroMultisigInfo");
-module.exports.MoneroMultisigInitResult = require("./src/main/js/wallet/model/MoneroMultisigInitResult");
-module.exports.MoneroMultisigSignResult = require("./src/main/js/wallet/model/MoneroMultisigSignResult");
-module.exports.MoneroOutputWallet = require("./src/main/js/wallet/model/MoneroOutputWallet");
-module.exports.MoneroOutputQuery = require("./src/main/js/wallet/model/MoneroOutputQuery");
-module.exports.MoneroTxPriority = require("./src/main/js/wallet/model/MoneroTxPriority");
-module.exports.MoneroTxConfig = require("./src/main/js/wallet/model/MoneroTxConfig");
-module.exports.MoneroSubaddress = require("./src/main/js/wallet/model/MoneroSubaddress");
-module.exports.MoneroSyncResult = require("./src/main/js/wallet/model/MoneroSyncResult");
-module.exports.MoneroTransfer = require("./src/main/js/wallet/model/MoneroTransfer");
-module.exports.MoneroIncomingTransfer = require("./src/main/js/wallet/model/MoneroIncomingTransfer");
-module.exports.MoneroOutgoingTransfer = require("./src/main/js/wallet/model/MoneroOutgoingTransfer");
-module.exports.MoneroTransferQuery = require("./src/main/js/wallet/model/MoneroTransferQuery");
-module.exports.MoneroTxSet = require("./src/main/js/wallet/model/MoneroTxSet");
-module.exports.MoneroTxWallet = require("./src/main/js/wallet/model/MoneroTxWallet");
-module.exports.MoneroTxQuery = require("./src/main/js/wallet/model/MoneroTxQuery");
-module.exports.MoneroWalletListener = require("./src/main/js/wallet/model/MoneroWalletListener");
-module.exports.MoneroWalletConfig = require("./src/main/js/wallet/model/MoneroWalletConfig");
-module.exports.MoneroMessageSignatureType = require("./src/main/js/wallet/model/MoneroMessageSignatureType");
-module.exports.MoneroMessageSignatureResult = require("./src/main/js/wallet/model/MoneroMessageSignatureResult");
-
-// export connection manager
-module.exports.MoneroConnectionManager = require("./src/main/js/common/MoneroConnectionManager");
-module.exports.MoneroConnectionManagerListener = require("./src/main/js/common/MoneroConnectionManagerListener");
-
-// export daemon, wallet, and utils classes
-module.exports.MoneroUtils = require("./src/main/js/common/MoneroUtils");
-module.exports.MoneroDaemon = require("./src/main/js/daemon/MoneroDaemon");
-module.exports.MoneroWallet = require("./src/main/js/wallet/MoneroWallet");
-module.exports.MoneroDaemonRpc = require("./src/main/js/daemon/MoneroDaemonRpc");
-module.exports.MoneroWalletRpc = require("./src/main/js/wallet/MoneroWalletRpc");
-module.exports.MoneroWalletKeys = require("./src/main/js/wallet/MoneroWalletKeys");
-module.exports.MoneroWalletFull = require("./src/main/js/wallet/MoneroWalletFull");
-
-// ---------------------------- GLOBAL FUNCTIONS ------------------------------
-
-/**
- * <p>Get the version of the monero-javascript library.<p>
- * 
- * @return {string} the version of this monero-javascript library
- */
-module.exports.getVersion = function() {
-    return module.exports.MoneroUtils.getVersion();
-}
-
-/**
- * <p>Create a client connected to monerod.<p>
- * 
- * <p>Examples:<p>
- * 
- * <code>
- * let daemon = await monerojs.connectToDaemonRpc("http://localhost:38081", "superuser", "abctesting123");<br><br>
- * 
- * let daemon = await monerojs.connectToDaemonRpc({<br>
- * &nbsp;&nbsp; uri: "http://localhost:38081",<br>
- * &nbsp;&nbsp; username: "superuser",<br>
- * &nbsp;&nbsp; password: "abctesting123"<br>
- * });
- * </code>
- * 
- * @param {string|object|MoneroRpcConnection} uriOrConfig - uri of monerod or JS config object or MoneroRpcConnection
- * @param {string} uriOrConfig.uri - uri of monerod
- * @param {string} uriOrConfig.username - username to authenticate with monerod (optional)
- * @param {string} uriOrConfig.password - password to authenticate with monerod (optional)
- * @param {boolean} uriOrConfig.rejectUnauthorized - rejects self-signed certificates if true (default true)
- * @param {number} uriOrConfig.pollInterval - poll interval to query for updates in ms (default 5000)
- * @param {boolean} uriOrConfig.proxyToWorker - run the daemon client in a web worker if true (default true)
- * @param {string} username - username to authenticate with monerod (optional)
- * @param {string} password - password to authenticate with monerod (optional)
- * @param {boolean} rejectUnauthorized - rejects self-signed certificates if true (default true)
- * @param {number} pollInterval - poll interval to query for updates in ms (default 5000)
- * @param {boolean} proxyToWorker - runs the daemon client in a web worker if true (default true)
- * @return {MoneroDaemonRpc} the daemon RPC client
- */
-module.exports.connectToDaemonRpc = function() { return module.exports.MoneroDaemonRpc._connectToDaemonRpc(...arguments); }
-
-/**
- * <p>Create a client connected to monero-wallet-rpc.</p>
- * 
- * <p>Examples:</p>
- * 
- * <code>
- * let walletRpc = await monerojs.connectToWalletRpc("http://localhost:38081", "superuser", "abctesting123");<br><br>
- * 
- * let walletRpc = await monerojs.connectToWalletRpc({<br>
- * &nbsp;&nbsp; uri: "http://localhost:38081",<br>
- * &nbsp;&nbsp; username: "superuser",<br>
- * &nbsp;&nbsp; password: "abctesting123",<br>
- * &nbsp;&nbsp; rejectUnauthorized: false // e.g. local development<br>
- * });<br><br>
- * 
- * // connect to monero-wallet-rpc running as internal process<br>
- * let walletRpc = await monerojs.connectToWalletRpc([<br>
- * &nbsp;&nbsp; "/path/to/monero-wallet-rpc",<br>
- * &nbsp;&nbsp; "--stagenet",<br>
- * &nbsp;&nbsp; "--daemon-address", "http://localhost:38081",<br>
- * &nbsp;&nbsp; "--daemon-login", "superuser:abctesting123",<br>
- * &nbsp;&nbsp; "--rpc-bind-port", "38085",<br>
- * &nbsp;&nbsp; "--rpc-login", "rpc_user:abc123",<br>
- * &nbsp;&nbsp; "--wallet-dir", "/path/to/wallets", // defaults to monero-wallet-rpc directory<br>
- * &nbsp;&nbsp; "--rpc-access-control-origins", "http://localhost:8080"<br>
- * &nbsp; ]);
- * 
- * </code>
- * 
- * @param {string|string[]|object|MoneroRpcConnection} uriOrConfig - uri of monero-wallet-rpc or terminal parameters or JS config object or MoneroRpcConnection
- * @param {string} uriOrConfig.uri - uri of monero-wallet-rpc
- * @param {string} uriOrConfig.username - username to authenticate with monero-wallet-rpc (optional)
- * @param {string} uriOrConfig.password - password to authenticate with monero-wallet-rpc (optional)
- * @param {boolean} uriOrConfig.rejectUnauthorized - rejects self-signed certificates if true (default true)
- * @param {string} username - username to authenticate with monero-wallet-rpc (optional)
- * @param {string} password - password to authenticate with monero-wallet-rpc (optional)
- * @param {boolean} rejectUnauthorized - rejects self-signed certificates if true (default true)
- * @return {MoneroWalletRpc} the wallet RPC client
- */
-module.exports.connectToWalletRpc = function() { return module.exports.MoneroWalletRpc._connectToWalletRpc(...arguments); }
-
-/**
- * <p>Create a Monero wallet using fully client-side WebAssembly bindings to monero-project's wallet2 in C++.<p>
- * 
- * <p>Example:</p>
- * 
- * <code>
- * let wallet = await monerojs.createWalletFull({<br>
- * &nbsp;&nbsp; path: "./test_wallets/wallet1", // leave blank for in-memory wallet<br>
- * &nbsp;&nbsp; password: "supersecretpassword",<br>
- * &nbsp;&nbsp; networkType: MoneroNetworkType.STAGENET,<br>
- * &nbsp;&nbsp; seed: "coexist igloo pamphlet lagoon...",<br>
- * &nbsp;&nbsp; restoreHeight: 1543218,<br>
- * &nbsp;&nbsp; server: new monerojs.MoneroRpcConnection("http://localhost:38081", "daemon_user", "daemon_password_123"),<br>
- * });
- * </code>
- * 
- * @param {object|MoneroWalletConfig} config - MoneroWalletConfig or equivalent config object
- * @param {string} config.path - path of the wallet to create (optional, in-memory wallet if not given)
- * @param {string} config.password - password of the wallet to create
- * @param {string|number} config.networkType - network type of the wallet to create (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
- * @param {string} config.seed - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
- * @param {string} config.seedOffset - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
- * @param {string} config.primaryAddress - primary address of the wallet to create (only provide if restoring from keys)
- * @param {string} config.privateViewKey - private view key of the wallet to create (optional)
- * @param {string} config.privateSpendKey - private spend key of the wallet to create (optional)
- * @param {number} config.restoreHeight - block height to start scanning frsom (defaults to 0 unless generating random wallet)
- * @param {string} config.language - language of the wallet's seed (defaults to "English" or auto-detected)
- * @param {number} config.accountLookahead -  number of accounts to scan (optional)
- * @param {number} config.subaddressLookahead - number of subaddresses to scan per account (optional)
- * @param {MoneroRpcConnection|object} config.server - MoneroRpcConnection or equivalent JS object providing daemon configuration (optional)
- * @param {string} config.serverUri - uri of the wallet's daemon (optional)
- * @param {string} config.serverUsername - username to authenticate with the daemon (optional)
- * @param {string} config.serverPassword - password to authenticate with the daemon (optional)
- * @param {boolean} config.rejectUnauthorized - reject self-signed server certificates if true (defaults to true)
- * @param {boolean} config.proxyToWorker - proxies wallet operations to a web worker in order to not block the main thread (default true)
- * @param {fs} config.fs - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
- * @return {MoneroWalletFull} the created wallet
- */
-module.exports.createWalletFull = function() { return module.exports.MoneroWalletFull.createWallet(...arguments); }
-
-/**
- * <p>Open an existing Monero wallet using fully client-side WebAssembly bindings to monero-project's wallet2 in C++.<p>
- * 
- * <p>Examples:<p>
- * 
- * <code>
- * let wallet1 = await monerojs.openWalletFull(<br>
- * &nbsp;&nbsp; "./wallets/wallet1",<br>
- * &nbsp;&nbsp; "supersecretpassword",<br>
- * &nbsp;&nbsp; MoneroNetworkType.STAGENET,<br>
- * &nbsp;&nbsp; "http://localhost:38081" // daemon uri<br>
- * );<br><br>
- * 
- * let wallet2 = await monerojs.openWalletFull({<br>
- * &nbsp;&nbsp; path: "./wallets/wallet2",<br>
- * &nbsp;&nbsp; password: "supersecretpassword",<br>
- * &nbsp;&nbsp; networkType: MoneroNetworkType.STAGENET,<br>
- * &nbsp;&nbsp; serverUri: "http://localhost:38081", // daemon configuration<br>
- * &nbsp;&nbsp; serverUsername: "superuser",<br>
- * &nbsp;&nbsp; serverPassword: "abctesting123"<br>
- * });
- * </code>
- * 
- * @param {MoneroWalletConfig|object|string} configOrPath - MoneroWalletConfig or equivalent config object or a path to a wallet to open
- * @param {string} configOrPath.path - path of the wallet to open (optional if 'keysData' provided)
- * @param {string} configOrPath.password - password of the wallet to open
- * @param {string|number} configOrPath.networkType - network type of the wallet to open (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
- * @param {Uint8Array} configOrPath.keysData - wallet keys data to open (optional if path provided)
- * @param {Uint8Array} configOrPath.cacheData - wallet cache data to open (optional)
- * @param {MoneroRpcConnection|object} configOrPath.server - MoneroRpcConnection or equivalent JS object configuring the daemon connection (optional)
- * @param {string} configOrPath.serverUri - uri of the wallet's daemon (optional)
- * @param {string} configOrPath.serverUsername - username to authenticate with the daemon (optional)
- * @param {string} configOrPath.serverPassword - password to authenticate with the daemon (optional)
- * @param {boolean} configOrPath.rejectUnauthorized - reject self-signed server certificates if true (defaults to true)
- * @param {boolean} configOrPath.proxyToWorker - proxies wallet operations to a web worker in order to not block the main thread (default true)
- * @param {fs} configOrPath.fs - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
- * @param {string} password - password of the wallet to open
- * @param {string|number} networkType - network type of the wallet to open
- * @param {string|MoneroRpcConnection} daemonUriOrConnection - daemon URI or MoneroRpcConnection
- * @param {boolean} proxyToWorker - proxies wallet operations to a web worker in order to not block the main thread (default true)
- * @param {fs} fs - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
- * @return {MoneroWalletFull} the opened wallet
- */
-module.exports.openWalletFull = function() { return module.exports.MoneroWalletFull.openWallet(...arguments); }
-
-/**
- * <p>Create a wallet using WebAssembly bindings to monero-project.</p>
- * 
- * <p>Example:</p>
- * 
- * <code>
- * let wallet = await monerojs.createWalletKeys({<br>
- * &nbsp;&nbsp; password: "abc123",<br>
- * &nbsp;&nbsp; networkType: MoneroNetworkType.STAGENET,<br>
- * &nbsp;&nbsp; seed: "coexist igloo pamphlet lagoon..."<br>
- * });
- * </code>
- * 
- * @param {MoneroWalletConfig|object} config - MoneroWalletConfig or equivalent config object
- * @param {string|number} config.networkType - network type of the wallet to create (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
- * @param {string} config.seed - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
- * @param {string} config.seedOffset - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
- * @param {string} config.primaryAddress - primary address of the wallet to create (only provide if restoring from keys)
- * @param {string} config.privateViewKey - private view key of the wallet to create (optional)
- * @param {string} config.privateSpendKey - private spend key of the wallet to create (optional)
- * @param {string} config.language - language of the wallet's seed phrase (defaults to "English" or auto-detected)
- * @return {MoneroWalletKeys} the created wallet
- */
-module.exports.createWalletKeys = function() { return module.exports.MoneroWalletKeys.createWallet(...arguments); }
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/scripts/linenumber.js b/docs/scripts/linenumber.js deleted file mode 100644 index 4354785ce..000000000 --- a/docs/scripts/linenumber.js +++ /dev/null @@ -1,25 +0,0 @@ -/*global document */ -(() => { - const source = document.getElementsByClassName('prettyprint source linenums'); - let i = 0; - let lineNumber = 0; - let lineId; - let lines; - let totalLines; - let anchorHash; - - if (source && source[0]) { - anchorHash = document.location.hash.substring(1); - lines = source[0].getElementsByTagName('li'); - totalLines = lines.length; - - for (; i < totalLines; i++) { - lineNumber++; - lineId = `line${lineNumber}`; - lines[i].id = lineId; - if (lineId === anchorHash) { - lines[i].className += ' selected'; - } - } - } -})(); diff --git a/docs/scripts/prettify/Apache-License-2.0.txt b/docs/scripts/prettify/Apache-License-2.0.txt deleted file mode 100644 index d64569567..000000000 --- a/docs/scripts/prettify/Apache-License-2.0.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/docs/scripts/prettify/lang-css.js b/docs/scripts/prettify/lang-css.js deleted file mode 100644 index 041e1f590..000000000 --- a/docs/scripts/prettify/lang-css.js +++ /dev/null @@ -1,2 +0,0 @@ -PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", -/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/docs/scripts/prettify/prettify.js b/docs/scripts/prettify/prettify.js deleted file mode 100644 index eef5ad7e6..000000000 --- a/docs/scripts/prettify/prettify.js +++ /dev/null @@ -1,28 +0,0 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p - - - - JSDoc: Source: src/main/js/common/Filter.js - - - - - - - - - - -
- -

Source: src/main/js/common/Filter.js

- - - - - - -
-
-
/**
- * Base filter.
- * 
- * @private
- */
-class Filter {
-  
-  /**
-   * Indicates if the given value meets the criteria of this filter.
-   * 
-   * @param val is the value to test
-   * @return true if the value meets the criteria of this filter, false otherwise
-   */
-  meetsCriteria(val) {
-    throw new Error("Subclass must implement");
-  }
-  
-  /**
-   * Returns a new array comprised of elements from the given array that meet
-   * the filter's criteria.
-   * 
-   * @param filter implements meetsCriteria(elem) to filter the given array
-   * @param array is the array to apply the filter to
-   * @return the new array of filtered elements
-   */
-  static apply(filter, array) {
-    return array.filter(elem => !filter || filter.meetsCriteria(elem));
-  }
-}
-
-module.exports = Filter;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_GenUtils.js.html b/docs/src_main_js_common_GenUtils.js.html deleted file mode 100644 index 2441babd5..000000000 --- a/docs/src_main_js_common_GenUtils.js.html +++ /dev/null @@ -1,1578 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/GenUtils.js - - - - - - - - - - -
- -

Source: src/main/js/common/GenUtils.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("./biginteger").BigInteger;
-
-/**
- * MIT License
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- * 
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- * 
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/**
- * Collection of general purpose utilities.
- * 
- * TODO: could pull in assert and remove these asserts
- * TODO: needs cleanup as ES6+ utility class
- */
-class GenUtils {
-  
-  /**
-   * Indicates if the given argument is defined.
-   * 
-   * @param arg is the arg to test
-   * @returns true if the given arg is defined, false otherwise
-   */
-  static isDefined(arg) {
-    return typeof arg !== 'undefined';
-  }
-
-  /**
-   * Indicates if the given argument is undefined.
-   * 
-   * @param arg is the arg to test
-   * @returns true if the given arg is undefined, false otherwise
-   */
-  static isUndefined(arg) {
-    return typeof arg === 'undefined';
-  }
-
-  /**
-   * Indicates if the given arg is initialized.
-   * 
-   * @param arg is the arg to test
-   * @returns true if the given arg is initialized, false otherwise
-   */
-  static isInitialized(arg) {
-    return arg !== undefined && arg !== null;
-  }
-
-  /**
-   * Indicates if the given arg is uninitialized.
-   * 
-   * @param arg is the arg to test
-   * @returns true if the given arg is uninitialized, false otherwise
-   */
-  static isUninitialized(arg) {
-    if (!arg) return true;
-    return false;
-  }
-
-  /**
-   * Indicates if the given argument is a number.
-   * 
-   * @param arg is the argument to test
-   * @returns true if the argument is a number, false otherwise
-   */
-  static isNumber(arg) {
-    return !isNaN(parseFloat(arg)) && isFinite(arg);
-  }
-
-  /**
-   * Indicates if the given argument is an integer.
-   * 
-   * @param arg is the argument to test
-   * @returns true if the given argument is an integer, false otherwise
-   */
-  static isInt(arg) {
-    return arg === parseInt(Number(arg)) && !isNaN(arg) && !isNaN(parseInt(arg, 10));
-  }
-
-  /**
-   * Indicates if the given argument is an array.
-   * 
-   * @param arg is the argument to test as being an array
-   * @returns true if the argument is an array, false otherwise
-   */
-  static isArray(arg) {
-    return arg instanceof Array && Array.isArray(arg);
-  }
-
-  /**
-   * Indicates if the given argument is a string.
-   * 
-   * @param arg is the argument to test as being a string
-   * @returns true if the argument is a string, false otherwise
-   */
-  static isString(arg) {
-    return typeof arg === 'string';
-  }
-
-  /**
-   * Determines if the given argument is a boolean.
-   * 
-   * @param arg is the argument to test as being a boolean
-   * @returns true if the argument is a boolean, false otherwise
-   */
-  static isBoolean(arg) {
-    return typeof(arg) == typeof(true);
-  }
-
-  /**
-   * Determines if the given argument is a static.
-   * 
-   * @param arg is the argument to test as being a static
-   * @returns true if the argument is a static, false otherwise
-   */
-  static isFunction(arg) {
-    return typeof arg === "static";
-  }
-
-  /**
-   * Indicates if the given argument is an object and optionally if it has the given constructor name.
-   * 
-   * @param arg is the argument to test
-   * @param obj is an object to test arg instanceof obj (optional)
-   * @returns true if the given argument is an object and optionally has the given constructor name
-   */
-  static isObject(arg, obj) {
-    if (!arg) return false;
-    if (typeof arg !== 'object') return false;
-    if (obj && !(arg instanceof obj)) return false;
-    return true;
-  }
-
-  /**
-   * Determines if all alphabet characters in the given string are upper case.
-   * 
-   * @param str is the string to test
-   * @returns true if the string is upper case, false otherwise
-   */
-  static isUpperCase(str) {
-    return str.toUpperCase() === str;
-  }
-
-  /**
-   * Determines if all alphabet characters in the given string are lower case.
-   * 
-   * @param str is the string to test
-   * @param true if the string is lower case, false otherwise
-   */
-  static isLowerCase(str) {
-    return str.toLowerCase() === str;
-  }
-
-  /**
-   * Asserts that the given argument is hex.
-   * 
-   * @param arg is the argument to assert as hex
-   * @param msg is the message to throw if the argument is not hex
-   */
-  static assertHex(str, msg) {
-    GenUtils.assertTrue(isHex(str), msg ? msg : "Argument asserted as hex but is not hex");
-  }
-
-  /**
-   * Indicates if the given argument is a hexidemal string.
-   * 
-   * Credit: https://github.com/roryrjb/is-hex/blob/master/is-hex.js.
-   * 
-   * @param str is the string to test
-   * @returns true if the given string is hexidecimal, false otherwise
-   */
-  static isHex(arg) {
-    if (typeof arg !== 'string') return false;
-    if (arg.length === 0) return false;
-    return (arg.match(/([0-9]|[a-f])/gim) || []).length === arg.length;
-  }
-
-  /**
-   * Determines if the given string is base32.
-   */
-  static isBase32(str) {
-    if (typeof str !== 'string') return false;
-    GenUtils.assertTrue(str.length > 0, "Cannot determine if empty string is base32");
-    return /^[ABCDEFGHIJKLMNOPQRSTUVWXYZ234567]+$/.test(str);
-  }
-
-  /**
-   * Asserts that the given argument is base58.
-   * 
-   * @param arg is the argument to assert as base58
-   * @param msg is the message to throw if the argument is not base58
-   */
-  static assertBase58(str, msg) {
-    GenUtils.assertTrue(isBase58(str), msg ? msg : "Argument asserted as base58 but is not base58");
-  }
-
-  /**
-   * Determines if the given string is base58.
-   */
-  static isBase58(str) {
-    if (typeof str !== 'string') return false;
-    GenUtils.assertTrue(str.length > 0, "Cannot determine if empty string is base58");
-    return /^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/.test(str);
-  }
-
-  /**
-   * Asserts that the given argument is base64.
-   * 
-   * @param arg is the argument to assert as base64
-   * @param msg is the message to throw if the argument is not base64
-   */
-  static assertBase64(str, msg) {
-    GenUtils.assertTrue(isBase64(str), msg ? msg : "Argument asserted as base64 but is not base64");
-  }
-
-  /**
-   * Determines if the given string is base64.
-   */
-  static isBase64(str) {
-    if (typeof str !== 'string') return false;
-    GenUtils.assertTrue(str.length > 0, "Cannot determine if empty string is base64");
-    try {
-      return btoa(atob(str)) == str;
-    } catch (err) {
-      return false;
-    }
-  }
-
-  /**
-   * Throws an exception with the given message.
-   * 
-   * @param msg defines the message to throw the exception with (optional)
-   */
-  static fail(msg) {
-    throw new Error(msg ? msg : "Failure (no message)");
-  }
-
-  /**
-   * Asserts that the given boolean is true.  Throws an exception if not a boolean or false.
-   * 
-   * @param bool is the boolean to assert true
-   * @param msg is the message to throw if bool is false (optional)
-   */
-  static assertTrue(bool, msg) {
-    if (typeof bool !== 'boolean') throw new Error("Argument is not a boolean");
-    if (!bool) throw new Error(msg ? msg : "Boolean asserted as true but was false");
-  }
-
-  /**
-   * Asserts that the given boolean is false.  Throws an exception if not a boolean or true.
-   * 
-   * @param bool is the boolean to assert false
-   * @param msg is the message to throw if bool is true (optional)
-   */
-  static assertFalse(bool, msg) {
-    if (typeof bool !== 'boolean') throw new Error("Argument is not a boolean");
-    if (bool) throw new Error(msg ? msg : "Boolean asserted as false but was true");
-  }
-
-  /**
-   * Asserts that the given argument is null.  Throws an exception if not null.
-   * 
-   * @param arg is the argument to assert null
-   * @param msg is the message to throw if arg is not null (optional)
-   */
-  static assertNull(arg, msg) {
-    if (arg !== null) throw new Error(msg ? msg : "Argument asserted as null but was not null: " + arg);
-  }
-
-  /**
-   * Asserts that the given argument is not null.  Throws an exception if null.
-   * 
-   * @param arg is the argument to assert not null
-   * @param msg is the message to throw if arg is null (optional)
-   */
-  static assertNotNull(arg, msg) {
-    if (arg === null) throw new Error(msg ? msg : "Argument asserted as not null but was null");
-  }
-
-  /**
-   * Asserts that the given argument is defined.  Throws an exception if undefined.
-   * 
-   * @param arg is the argument to assert defined
-   * @param msg is the message to throw if arg is undefined (optional)
-   */
-  static assertDefined(arg, msg) {
-    if (GenUtils.isUndefined(arg)) throw new Error(msg ? msg : "Argument asserted as defined but was undefined");
-  }
-
-  /**
-   * Asserts that the given argument is undefined.  Throws an exception if defined.
-   * 
-   * @param arg is the argument to assert undefined
-   * @param msg is the message to throw if arg is defined (optional)
-   */
-  static assertUndefined(arg, msg) {
-    if (GenUtils.isDefined(arg)) throw new Error(msg ? msg : "Argument asserted as undefined but was defined: " + arg);
-  }
-
-  /**
-   * Asserts that the given argument is initialized.  Throws an exception if not initialized.
-   * 
-   * @param arg is the argument to assert as initialized
-   * @param msg is the message to throw if arg is not initialized (optional)
-   */
-  static assertInitialized(arg, msg) {
-    if (GenUtils.isUninitialized(arg)) {
-      throw new Error(msg ? msg : "Argument asserted as initialized but was " + arg);
-    }
-  }
-
-  /**
-   * Asserts that the given argument is uninitialized.  Throws an exception if initialized.
-   * 
-   * @param arg is the argument to assert as uninitialized
-   * @param msg is the message to throw if arg is initialized (optional)
-   */
-  static assertUninitialized(arg, msg) {
-    if (GenUtils.isInitialized(arg)) throw new Error(msg ? msg : "Argument asserted as uninitialized but was initialized");
-  }
-
-  /**
-   * Asserts that the given arguments are equal.  Throws an exception if not equal.
-   * 
-   * @param arg1 is an argument to assert as equal
-   * @param arg2 is an argument to assert as equal
-   * @param msg is the message to throw if the arguments are not equal
-   */
-  static assertEquals(arg1, arg2, msg) {
-    GenUtils.assertTrue(GenUtils.equals(arg1, arg2), msg ? msg : "Arguments asserted as equal but are not equal: " + arg1 + " vs " + arg2);
-  }
-
-  /**
-   * Asserts that the given arguments are not equal.  Throws an exception if equal.
-   * 
-   * @param arg1 is an argument to assert as not equal
-   * @param arg2 is an argument to assert as not equal
-   * @param msg is the message to throw if the arguments are equal
-   */
-  static assertNotEquals(arg1, arg2, msg) {
-    if (arg1 === arg2) throw new Error(msg ? msg : "Arguments asserted as not equal but are equal: " + arg1 + " vs " + arg2);
-  }
-
-  /**
-   * Asserts that the given argument is an integer.
-   * 
-   * @param arg is the argument to assert as an integer
-   * @param msg is the message to throw if the argument is not an integer
-   */
-  static assertInt(arg, msg) {
-    if (!GenUtils.isInt(arg)) throw new Error(msg ? msg : "Argument asserted as an integer but is not an integer");
-  }
-
-  /**
-   * Asserts that the given argument is a number.
-   * 
-   * @param arg is the argument to assert as a number
-   * @param msg is the message to throw if the argument is not a number
-   */
-  static assertNumber(arg, msg) {
-    if (!GenUtils.isNumber(arg)) throw new Error(msg ? msg : "Argument asserted as a number but is not a number");
-  }
-
-  /**
-   * Asserts that the given argument is a boolean.
-   * 
-   * @param arg is the argument to assert as a boolean
-   * @param msg is the message to throw if the argument is not a boolean
-   */
-  static assertBoolean(arg, msg) {
-    if (!GenUtils.isBoolean(arg)) throw new Error(msg ? msg : "Argument asserted as a boolean but is not a boolean");
-  }
-
-  /**
-   * Asserts that the given argument is a string.
-   * 
-   * @param arg is the argument to assert as a string
-   * @param msg is the message to throw if the argument is not a string
-   */
-  static assertString(arg, msg) {
-    if (!GenUtils.isString(arg)) throw new Error(msg ? msg : "Argument asserted as a string but is not a string: " + arg);
-  }
-
-  /**
-   * Asserts that the given argument is an array.
-   * 
-   * @param arg is the argument to assert as an array
-   * @param msg is the message to throw if the argument is not an array
-   */
-  static assertArray(arg, msg) {
-    if (!GenUtils.isArray(arg)) throw new Error(msg ? msg : "Argument asserted as an array but is not an array");
-  }
-
-  /**
-   * Asserts that the given argument is a static.
-   * 
-   * @param arg is the argument to assert as a static
-   * @param msg is the message to throw if the argument is not a static
-   */
-  static assertFunction(arg, msg) {
-    if (!GenUtils.isFunction(arg)) throw new Error(msg ? msg : "Argument asserted as a static but is not a static");
-  }
-
-  /**
-   * Asserts that the given argument is an object with the given name.
-   * 
-   * @param arg is the argument to test
-   * @param obj is an object to assert arg instanceof obj (optional)
-   * @param msg is the message to throw if the argument is not the specified object
-   */
-  static assertObject(arg, obj, msg) {
-    GenUtils.assertInitialized(arg, msg);
-    if (obj) {
-      if (!isObject(arg, obj)) throw new Error(msg ? msg : "Argument asserted as object '" + obj.name + "' but was not");
-    } else {
-      if (!isObject(arg)) throw new Error(msg ? msg : "Argument asserted as object but was not");
-    }
-  }
-
-  /**
-   * Sets the child's prototype to the parent's prototype.
-   * 
-   * @param child is the child class
-   * @param parent is the parent class
-   */
-  static inheritsFrom(child, parent) {
-    child.prototype = Object.create(parent.prototype);
-    child.prototype.constructor = child;
-  }
-
-  /**
-   * Invokes functions with arguments.
-   * 
-   * arguments[0] is assumed to be an array of functions to invoke
-   * arguments[1...n] are args to invoke the functions with
-   */
-  static invoke() {
-    let fns = arguments[0];
-    let args = [];
-    for (let i = 1; i < arguments.length; i++) args.push(arguments[i]);
-    for (let i = 0; i < fns.length; i++) {
-      assertFunction(fns[i], "Functions[" + i + "] is not a static");
-      fns[i].apply(null, args);
-    }
-  }
-
-  /**
-   * Returns the power set of the given array.
-   * 
-   * @param arr is the array to get the power set of
-   * @returns [][] is the power set of the given array
-   */
-  static getPowerSet(arr) {
-    let fn = function(n, src, got, all) {
-      if (n == 0) {
-        if (got.length > 0) {
-          all[all.length] = got;
-        }
-        return;
-      }
-      for (let j = 0; j < src.length; j++) {
-        fn(n - 1, src.slice(j + 1), got.concat([ src[j] ]), all);
-      }
-      return;
-    }
-    let all = [];
-    all.push([]);
-    for (let i = 0; i < arr.length; i++) {
-      fn(i, arr, [], all);
-    }
-    all.push(arr);
-    return all;
-  }
-
-  /**
-   * Returns the power set of the given array whose elements are the given size.
-   * 
-   * @param arr is the array to get the power set of
-   * @param size is the required size of the elements within the power set
-   * returns [][] is the power set of the given array whose elements are the given size 
-   */
-  static getPowerSetOfLength(arr, size) {
-    assertInitialized(arr);
-    assertInitialized(size);
-    GenUtils.assertTrue(size >= 1);
-    let powerSet = getPowerSet(arr);
-    let powerSetOfLength = [];
-    for (let i = 0; i < powerSet.length; i++) {
-      if (powerSet[i].length === size) {
-        powerSetOfLength.push(powerSet[i]);
-      }
-    }
-    return powerSetOfLength;
-  }
-
-  /**
-   * Returns an array of indices of the given size.
-   * 
-   * @param size specifies the size to get indices for
-   * @returns array of the given size with indices starting at 0
-   */
-  static getIndices(size) {
-    let indices = [];
-    for (let i = 0; i < size; i++) {
-      indices.push(i);
-    }
-    return indices;
-  }
-
-  /**
-   * Returns a new array containing unique elements of the given array.
-   * 
-   * @param arr is the array to return unique elements from
-   * @returns a new array with the given array's unique elements
-   */
-  static toUniqueArray(arr) {
-    return arr.filter(function(value, index, self) {
-      return self.indexOf(value) === index;
-    });
-  }
-
-  /**
-   * Copies the given array.
-   * 
-   * @param arr is the array to copy
-   * @returns a copy of the given array
-   */
-  static copyArray(arr) {
-    GenUtils.assertArray(arr);
-    let copy = [];
-    for (let i = 0; i < arr.length; i++) copy.push(arr[i]);
-    return copy;
-  }
-  
-  /**
-   * Removes every instance of the given value from the given array.
-   * 
-   * @param arr is the array to remove the value from
-   * @param val is the value to remove from the array
-   * @returns true if the value is found and removed, false otherwise
-   */
-  static remove(arr, val) {
-    let found = false;
-    for (let i = arr.length - 1; i >= 0; i--) {
-      if (arr[i] === val) {
-        arr.splice(i, 1);
-        found = true;
-        i--;
-      }
-    }
-    return found;
-  }
-
-  /**
-   * Returns a copy of the given array where each element is lowercase.
-   * 
-   * @param arr is the array to convert to lowercase
-   * @returns a copy of the given array where each element is lowercase
-   */
-  static toLowerCaseArray(arr) {
-    let arr2 = [];
-    for (let i = 0; i < arr.length; i++) {
-      arr2.push(arr[i].toLowerCase());
-    }
-    return arr2;
-  }
-
-  /**
-   * Listifies the given argument.
-   * 
-   * @param arrOrElem is an array or an element in the array
-   * @returns an array which is the given arg if it's an array or an array with the given arg as an element
-   */
-  static listify(arrOrElem) {
-    return GenUtils.isArray(arrOrElem) ? arrOrElem : [arrOrElem];
-  }
-
-  /**
-   * Indicates if the given array contains the given object.
-   * 
-   * @param {object[]} arr - array that may or may not contain the object
-   * @param {object} obj - object to check for inclusion in the array
-   * @param {boolean} compareByReference - compare strictly by reference, forgoing deep equality check
-   * @returns true if the array contains the object, false otherwise
-   */
-  static arrayContains(arr, obj, compareByReference) {
-    GenUtils.assertTrue(GenUtils.isArray(arr));
-    for (let i = 0; i < arr.length; i++) {
-      if (arr[i] === obj) return true;
-      if (!compareByReference && GenUtils.equals(arr[i], obj)) return true;
-    }
-    return false;
-  }
-
-  /**
-   * Indicates if the given string contains the given substring.
-   * 
-   * @param str is the string to search for a substring
-   * @param substring is the substring to searchin within the string
-   * @returns true if the substring is within the string, false otherwise
-   */
-  static strContains(str, substring) {
-    return str.indexOf(substring) > -1;
-  }
-
-  /**
-   * Determines if two arrays are equal.
-   * 
-   * @param arr1 is an array to compare
-   * @param arr2 is an array to compare
-   * @returns true if the arrays are equal, false otherwise
-   */
-  static arraysEqual(arr1, arr2) {
-    if (arr1 === arr2) return true;
-    if (arr1 == null && arr2 == null) return true;
-    if (arr1 == null || arr2 == null) return false;
-    if (typeof arr1 === 'undefined' && typeof arr2 === 'undefined') return true;
-    if (typeof arr1 === 'undefined' || typeof arr2 === 'undefined') return false;
-    if (!GenUtils.isArray(arr1)) throw new Error("First argument is not an array");
-    if (!GenUtils.isArray(arr2)) throw new Error("Second argument is not an array");
-    if (arr1.length != arr2.length) return false;
-    for (let i = 0; i < arr1.length; ++i) {
-      if (!GenUtils.equals(arr1[i], arr2[i])) return false;
-    }
-    return true;
-  }
-
-  /**
-   * Determines if two arguments are deep equal.
-   * 
-   * @param arg1 is an argument to compare
-   * @param arg2 is an argument to compare
-   * @returns true if the arguments are deep equals, false otherwise
-   */
-  static equals(arg1, arg2) {
-    if (GenUtils.isArray(arg1) && GenUtils.isArray(arg2)) return GenUtils.arraysEqual(arg1, arg2);
-    if (GenUtils.isObject(arg1) && GenUtils.isObject(arg2)) return GenUtils.objectsEqual(arg1, arg2);
-    return arg1 === arg2;
-  }
-  
-  /**
-   * Determines if two objects are deep equal.
-   * 
-   * Undefined values are considered equal to non-existent keys.
-   * 
-   * @param map1 is a map to compare
-   * @param map2 is a map to compare
-   * @returns true if the maps have identical keys and values, false otherwise
-   */
-  static objectsEqual(map1, map2) {
-    let keys1 = Object.keys(map1);
-    let keys2 = Object.keys(map2);
-    
-    // compare each key1 to keys2
-    for (let key1 of keys1) {
-      let found = false;
-      for (let key2 of keys2) {
-        if (key1 === key2) {
-          if (!GenUtils.equals(map1[key1], map2[key2])) return false;
-          found = true;
-          break;
-        }
-      }
-      if (!found && map1[key1] !== undefined) return false; // allows undefined values to equal non-existent keys
-    }
-    
-    // compare each key2 to keys1
-    for (let key2 of keys2) {
-      let found = false;
-      for (let key1 of keys1) {
-        if (key1 === key2) {
-          found = true; // no need to re-compare which was done earlier
-          break;
-        }
-      }
-      if (!found && map2[key2] !== undefined) return false; // allows undefined values to equal non-existent keys
-    }
-    return true;
-    
-    // TODO: support strict option?
-//    if (strict) {
-//      let keys1 = Object.keys(map1);
-//      if (keys1.length !== Object.keys(map2).length) return false;
-//      for (let i = 0; i < keys1.length; i++) {
-//        let key = Object.keys(map1)[i];
-//        if (!GenUtils.equals(map1[key], map2[key])) return false;
-//      }
-//    }
-  }
-  
-  /**
-   * Deletes properties from the object that are undefined.
-   * 
-   * @param obj is the object to delete undefined keys from
-   */
-  static deleteUndefinedKeys(obj) {
-    for (let key of Object.keys(obj)) {
-      if (obj[key] === undefined) delete obj[key];
-    }
-  }
-
-  /**
-   * Returns combinations of the given array of the given size.
-   * 
-   * @param arr is the array to get combinations from
-   * @param combinationSize specifies the size of each combination
-   */
-  static getCombinations(arr, combinationSize) {
-    
-    // validate input
-    assertInitialized(arr);
-    assertInitialized(combinationSize);
-    GenUtils.assertTrue(combinationSize >= 1);
-    
-    // get combinations of array indices of the given size
-    let indexCombinations = getPowerSetOfLength(getIndices(arr.length), combinationSize);
-    
-    // collect combinations from each combination of array indices
-    let combinations = [];
-    for (let indexCombinationsIdx = 0; indexCombinationsIdx < indexCombinations.length; indexCombinationsIdx++) {
-      
-      // get combination of array indices
-      let indexCombination = indexCombinations[indexCombinationsIdx];
-      
-      // build combination from array
-      let combination = [];
-      for (let indexCombinationIdx = 0; indexCombinationIdx < indexCombination.length; indexCombinationIdx++) {
-        combination.push(arr[indexCombination[indexCombinationIdx]]);
-      }
-      
-      // add to combinations
-      combinations.push(combination);
-    }
-    
-    return combinations;
-  }
-
-  /**
-   * Gets an 'a' element that is downloadable when clicked.
-   * 
-   * @param name is the name of the file to download
-   * @param contents are the string contents of the file to download
-   * @returns 'a' dom element with downloadable file
-   */
-  static getDownloadableA(name, contents) {
-    let a = window.document.createElement('a');
-    a.href = window.URL.createObjectURL(new Blob([contents], {type: 'text/plain'}));
-    a.download = name;
-    a.target="_blank";
-    a.innerHTML = name;
-    return a;
-  }
-
-  /**
-   * Returns the given node's outer HTML.
-   * 
-   * @param node is the node to get outer HTML for
-   * @returns the outer HTML of the given node
-   */
-  static getOuterHtml(node) {
-    return $('<div>').append($(node).clone()).html();
-  }
-
-  /**
-   * Copies properties in the given object to a new object.
-   * 
-   * @param obj is object to copy properties for
-   * @returns a new object with properties copied from the given object
-   */
-  static copyProperties(obj) {
-    return JSON.parse(JSON.stringify(obj))
-  }
-
-  /**
-   * Deletes all properties in the given object.
-   * 
-   * @param obj is the object to delete properties from
-   */
-  static deleteProperties(obj) {
-    let props = [];
-    for (let prop in obj) props.push(prop); // TODO: if (obj.hasOwnProperty(prop)) { ...
-    for (i = 0; i < props.length; i++) delete obj[props[i].toString()];
-  }
-
-  /**
-   * Converts a CSV string to a 2-dimensional array of strings.
-   * 
-   * @param csv is the CSV string to convert
-   * @returns a 2-dimensional array of strings
-   */
-  static csvToArr(csv) {
-    return $.csv.toArrays(csv);
-  }
-
-  /**
-   * Converts the given array to a CSV string.
-   * 
-   * @param arr is a 2-dimensional array of strings
-   * @returns the CSV string
-   */
-  static arrToCsv(arr) {
-    return $.csv.fromObjects(arr, {headers: false});
-  }
-
-  /**
-   * Indicates if the given string contains whitespace.
-   * 
-   * @param str is the string to test
-   * @returns true if the string contains whitespace, false otherwise
-   */
-  static hasWhitespace(str) {
-    return /\s/g.test(str);
-  }
-
-  /**
-   * Indicates if the given character is whitespace.
-   * 
-   * @param char is the character to test
-   * @returns true if the given character is whitespace, false otherwise
-   */
-  static isWhitespace(char) {
-    return /\s/.test(char);
-  }
-
-  /**
-   * Indicates if the given character is a newline.
-   * 
-   * @param char is the character to test
-   * @returns true if the given character is a newline, false otherwise
-   */
-  static isNewline(char) {
-    return char === '\n' || char === '\r';
-  }
-
-  /**
-   * Counts the number of non-whitespace characters in the given string.
-   * 
-   * @param str is the string to count the number of non-whitespace characters in
-   * @returns int is the number of non-whitespace characters in the given string
-   */
-  static countNonWhitespaceCharacters(str) {
-    let count = 0;
-    for (let i = 0; i < str.length; i++) {
-      if (!isWhitespace(str.charAt(i))) count++;
-    }
-    return count;
-  }
-
-  /**
-   * Returns tokens separated by whitespace from the given string.
-   * 
-   * @param str is the string to get tokens from
-   * @returns string[] are the tokens separated by whitespace within the string
-   */
-  static getWhitespaceTokens(str) {
-    return str.match(/\S+/g);
-  }
-
-  /**
-   * Returns lines separated by newlines from the given string.
-   * 
-   * @param str is the string to get lines from
-   * @param string[] are the lines separated by newlines within the string
-   */
-  static getLines(str) {
-    return str.match(/[^\r\n]+/g);
-  }
-
-  /**
-   * Returns the document's first stylesheet which has no href.
-   * 
-   * @returns StyleSheet is the internal stylesheet
-   */
-  static getInternalStyleSheet() {
-    for (let i = 0; i < document.styleSheets.length; i++) {
-      let styleSheet = document.styleSheets[i];
-      if (!styleSheet.href) return styleSheet;
-    }
-    return null;
-  }
-
-  /**
-   * Returns the document's internal stylesheet as text.
-   * 
-   * @returns str is the document's internal stylesheet
-   */
-  static getInternalStyleSheetText() {
-    let internalCss = "";
-    let internalStyleSheet = getInternalStyleSheet();
-    if (!internalStyleSheet) return null;
-    for (let i = 0; i < internalStyleSheet.cssRules.length; i++) {
-      internalCss += internalStyleSheet.cssRules[i].cssText + "\n";
-    }
-    return internalCss;
-  }
-
-  /**
-   * Manually builds an HTML document string.
-   * 
-   * @param content specifies optional document content
-   *        content.div is a pre-existing div to stringify and add to the body
-   *        content.title is the title of the new tab
-   *        content.dependencyPaths specifies paths to js, css, or img paths
-   *        content.internalCss is css to embed in the html document
-   *        content.metas are meta elements with keys/values to include
-   * @returns str is the document string
-   */
-  static buildHtmlDocument(content) {
-    let str = "<!DOCTYPE HTML>";
-    str += "<html><head>";
-    
-    // add metas
-    if (content.metas) {
-      let metas = listify(content.metas);
-      for (let i = 0; i < metas.length; i++) {
-        let meta = metas[i];
-        let elem = document.createElement("meta");
-        for (let prop in meta) {
-          if (meta.hasOwnProperty(prop)) {
-            elem.setAttribute(prop.toString(), meta[prop.toString()]);
-          }
-        }
-        str += elem.outerHTML;
-      }
-    }
-    
-    // add title and internal css
-    str += content.title ? "<title>" + content.title + "</title>" : "";
-    str += content.internalCss ? "<style>" + content.internalCss + "</style>" : "";
-    
-    // add dependency paths
-    if (content.dependencyPaths) {
-      let dependencyPaths = listify(content.dependencyPaths);
-      for (let i = 0; i < dependencyPaths.length; i++) {
-        let dependencyPath = dependencyPaths[i];
-        if (dependencyPath.endsWith(".js")) str += "<script src='" + dependencyPath + "'></script>";
-        else if (dependencyPath.endsWith(".css")) str += "<link rel='stylesheet' type='text/css' href='" + dependencyPath + "'/>";
-        else if (dependencyPath.endsWith(".png") || dependencyPath.endsWith(".img"))  str += "<img src='" + dependencyPath + "'>";
-        else throw new Error("Unrecognized dependency path extension: " + dependencyPath);      
-      }
-    }
-    str += "</head><body>";
-    if (content.div) str += $("<div>").append(content.div.clone()).html();  // add cloned div as string
-    str += "</body></html>";
-    return str;
-  }
-
-  /**
-   * Opens the given div in a new window.
-   * 
-   * @param content specifies optional window content
-   *        content.div is a pre-existing div to stringify and add to the body
-   *        content.title is the title of the new tab
-   *        content.dependencyPaths specifies paths to js, css, or img paths
-   *        content.internalCss is css to embed in the html document
-   *        content.metas are meta elements with keys/values to include
-   * @param onLoad(err, window) is invoked with a reference to the window when available
-   */
-  static newWindow(content, onLoad) {
-    let onLoadCalled = false;
-    let w = window.open();
-    if (!isInitialized(w) || !isInitialized(w.document)) {
-      onLoadOnce(new Error("Could not get window reference"));
-      return;
-    }
-    w.opener = null;
-    w.document.write(buildHtmlDocument(content));
-    w.addEventListener('load', function() {
-      onLoadOnce(null, w);
-    });
-    w.document.close();
-    
-    // prevents onLoad() from being called multiple times
-    function onLoadOnce(err, window) {
-      if (onLoadCalled) return;
-      onLoadCalled = true;
-      if (onLoad) onLoad(err, window);
-    }
-  }
-
-  /**
-   * Converts the given image to a base64 encoded data url.
-   * 
-   * @param img is the image to convert
-   * @param quality is a number between 0 and 1 specifying the image quality
-   */
-  static imgToDataUrl(img, quality) {
-    let canvas = document.createElement('canvas');
-    canvas.height = img.naturalHeight;
-    canvas.width = img.naturalWidth;
-    let context = canvas.getContext('2d');
-    context.drawImage(img, 0, 0);
-    return canvas.toDataURL(quality);
-  }
-
-  /**
-   * Determines if the image at the given URL is accessible.
-   * 
-   * @param url is the url to an image
-   * @param timeout is the maximum time to wait
-   * @param onDone(bool) when the image is determined to be accessible or not
-   */
-  static isImageAccessible(url, timeout, onDone) {
-    
-    // track return so it only executes once
-    let returned = false;
-    
-    // attempt to load favicon
-    let img = new Image();
-    img.onload = onResponse;
-    img.onerror = onResponse;
-    img.src = url + "?" + (+new Date()); // trigger image load with cache buster
-    
-    // nest failure timeouts to give response a chance when browser is under load
-    setTimeout(function() {
-      setImmediate(function() {
-        setImmediate(function() {
-          setImmediate(function() {
-            if (!returned) {
-              returned = true;
-              onDone(false);
-            }
-          });
-        });
-      });
-    }, timeout);
-    
-    function onResponse(e) {
-      if (returned) return;
-      returned = true;
-      if (typeof e === 'undefined' || e.type === "error") onDone(false);
-      else onDone(true);
-    }
-  }
-
-  /**
-   * Determines if the given file is a zip file.
-   * 
-   * @param file is a file
-   * @returns true if the given file is a zip file, false otherwise
-   */
-  static isZipFile(file) {
-    return file.name.endsWith(".zip") || file.type === 'application/zip';
-  }
-
-  /**
-   * Determines if the given file is a json file.
-   * 
-   * @param file is a file
-   * @returns true if the given file is a json file, false otherwise
-   */
-  static isJsonFile(file) {
-    return file.name.endsWith(".json") || file.type === 'application/json';
-  }
-
-  /**
-   * Determines if the given file is a csv file.
-   * 
-   * @param file is a file
-   * @returns true if the given file is a csv file, false otherwise
-   */
-  static isCsvFile(file) {
-    return file.name.endsWith(".csv") || file.type === 'text/csv';
-  }
-
-  /**
-   * Determines if the given file is a txt file.
-   * 
-   * @param file is a file
-   * @returns true if the given file is a txt file, false otherwise
-   */
-  static isTxtFile(file) {
-    return file.name.endsWith(".txt") || file.type === 'text/plain';
-  }
-
-  /**
-   * Fetches the given list of images.
-   * 
-   * Prerequisite: async.js.
-   * 
-   * @param paths are the paths to the images to fetch
-   * @param onDone(err, images) is called when done
-   */
-  static getImages(paths, onDone) {
-    
-    // listify paths
-    if (!GenUtils.isArray(paths)) {
-      GenUtils.assertTrue(isString(paths));
-      paths = [paths];
-    }
-    
-    // collect functions to fetch images
-    let funcs = [];
-    for (let i = 0; i < paths.length; i++) {
-      funcs.push(loadFunc(paths[i]));
-    }
-    
-    // fetch in parallel
-    async.parallel(funcs, onDone);
-    
-    // callback static to fetch a single image
-    function loadFunc(path) {
-      return function(onDone) {
-        let img = new Image();
-        img.onload = function() { onDone(null, img); }
-        img.onerror = function() { onDone(new Error("Cannot load image: " + path)); }
-        img.src = path;
-      }
-    }
-  }
-  
-  /**
-   * Returns a string indentation of the given length;
-   * 
-   * @param length is the length of the indentation
-   * @returns {string} is an indentation string of the given length
-   */
-  static getIndent(length) {
-    let str = "";
-    for (let i = 0; i < length; i++) str += '  '; // two spaces
-    return str;
-  }
-  
-  static initPolyfills() {
-    
-    // Polyfill Object.assign()
-    // Credit: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
-    if (typeof Object.assign != 'static') {
-      // Must be writable: true, enumerable: false, configurable: true
-      Object.defineProperty(Object, "assign", {
-        value: function assign(target, varArgs) { // .length of static is 2
-          'use strict';
-          if (target == null) { // TypeError if undefined or null
-            throw new TypeError('Cannot convert undefined or null to object');
-          }
-
-          let to = Object(target);
-
-          for (let index = 1; index < arguments.length; index++) {
-            let nextSource = arguments[index];
-
-            if (nextSource != null) { // Skip over if undefined or null
-              for (let nextKey in nextSource) {
-                // Avoid bugs when hasOwnProperty is shadowed
-                if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
-                  to[nextKey] = nextSource[nextKey];
-                }
-              }
-            }
-          }
-          return to;
-        },
-        writable: true,
-        configurable: true
-      });
-    }
-    
-    /**
-     * Polyfill str.replaceAt(idx, replacement).
-     */
-    String.prototype.replaceAt=function(idx, replacement) {
-      return this.substr(0, idx) + replacement + this.substr(idx + replacement.length);
-    }
-
-    /**
-     * Polyfill str.startsWith(searchString, position).
-     * 
-     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith#Polyfill
-     */
-    String.prototype.startsWith = function(searchString, position) {
-      return this.substr(position || 0, searchString.length) === searchString;
-    };
-
-    /**
-     * Polyfill str.endsWith(searchString, position).
-     * 
-     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith#Polyfill
-     */
-    String.prototype.endsWith = function(searchString, position) {
-      if (!(position < this.length)) position = this.length;  // works better than >= because it compensates for NaN
-      else position |= 0; // round position
-      return this.substr(position - searchString.length, searchString.length) === searchString;
-    }
-
-    /**
-     * Removes the given value from the array.
-     * 
-     * @returns true if the value was found and removed, false otherwise
-     */
-    Array.prototype.removeVal = function(val) {
-      var found = false;
-      for (var i = 0; i < this.length; i++) {
-        if (this[i] == val) {    
-          found = true;
-          this.splice(i, 1);
-          i--;
-        }
-      }
-      return found;;
-    };
-  }
-
-  /**
-   * Generates a v4 UUID.
-   * 
-   * Source: https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
-   */
-  static getUUID() {
-    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
-      let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
-      return v.toString(16);
-    });
-  }
-  
-  /**
-   * Indicates if the current environment is a browser.
-   * 
-   * @return {boolean} true if the environment is a browser, false otherwise
-   */
-  static isBrowser() {
-    let isWorker = typeof importScripts === 'function';
-    let isBrowserMain = new Function("try {return this===window;}catch(e){return false;}")();
-    let isJsDom = isBrowserMain ? new Function("try {return window.navigator.userAgent.includes('jsdom');}catch(e){return false;}")() : false;
-    return isWorker || (isBrowserMain && !isJsDom);
-  }
-  
-  /**
-   * Indicates if the current environment is a firefox-based browser.
-   * 
-   * @return {boolean} true if the environment is a firefox-based browser, false otherwise
-   */
-  static isFirefox() {
-    return this.isBrowser() && navigator.userAgent.indexOf("Firefox") > 0;
-  }
-
-  /**
-   * Gets the IE version number.
-   * 
-   * Credit: https://stackoverflow.com/questions/19999388/check-if-user-is-using-ie-with-jquery/21712356#21712356
-   * 
-   * @returns the IE version number or null if not IE
-   */
-  static getIEVersion() {
-    let ua = window.navigator.userAgent;
-
-    let msie = ua.indexOf('MSIE ');
-    if (msie > 0) {
-        // IE 10 or older => return version number
-        return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);
-    }
-
-    let trident = ua.indexOf('Trident/');
-    if (trident > 0) {
-        // IE 11 => return version number
-        let rv = ua.indexOf('rv:');
-        return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
-    }
-
-    let edge = ua.indexOf('Edge/');
-    if (edge > 0) {
-       // Edge (IE 12+) => return version number
-       return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);
-    }
-
-    // other browser
-    return null;
-  }
-
-  /**
-   * Gets a parameter value.
-   * 
-   * Credit: https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
-   * 
-   * @param name is the name of the parameter to get the value of
-   * @param url is a URL to get the parameter from, uses the window's current href if not given
-   * @returns the parameter's value
-   */
-  static getParameterByName(name, url) {
-    if (!url) url = window.location.href;
-    name = name.replace(/[\[\]]/g, "\\$&");
-    let regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), results = regex.exec(url);
-    if (!results) return null;
-    if (!results[2]) return '';
-    return decodeURIComponent(results[2].replace(/\+/g, " "));
-  }
-  
-  /**
-   * Gets a non-cryptographically secure random number within a given range.
-   * 
-   * @param min is the minimum range of the int to generate, inclusive
-   * @param max is the maximum range of the int to generate, inclusive
-   * 
-   * Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
-   */
-  static getRandomInt(min, max) {
-    min = Math.ceil(min);
-    max = Math.floor(max);
-    return Math.floor(Math.random() * (max - min + 1)) + min;
-  }
-  
-  /**
-   * Gets random ints.
-   * 
-   * @param min is the minimum range of the ints to generate, inclusive
-   * @param max is the maximum range of the ints to generate, inclusive
-   * @param count is the number of random ints to get
-   */
-  static getRandomInts(min, max, count) {
-    GenUtils.assertTrue(typeof count === "number");
-    let ints = [];
-    for (let i = 0; i < count; i++) ints.push(GenUtils.getRandomInt(min, max));
-    return ints;
-  }
-  
-  /**
-   * Gets a given number of unique random ints within a range.
-   * 
-   * @param min is the minimum range of the ints to generate, inclusive
-   * @param max is the maximum range of the ints to generate, inclusive
-   * @param count is the number of unique random ints to get
-   */
-  static getUniqueRandomInts(min, max, count) {
-    let ints = [];
-    GenUtils.assertTrue(count >= 0);
-    GenUtils.assertTrue(max - min + 1 >= count);
-    while (ints.length < count) {
-      let randomInt = GenUtils.getRandomInt(min, max);
-      if (!ints.includes(randomInt)) ints.push(randomInt);
-    }
-    return ints;
-  }
-  
-  /**
-   * Randomize array element order in-place using Durstenfeld shuffle algorithm.
-   * 
-   * Credit: https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array
-   */
-  static shuffle(array) {
-    for (var i = array.length - 1; i > 0; i--) {
-      var j = Math.floor(Math.random() * (i + 1));
-      var temp = array[i];
-      array[i] = array[j];
-      array[j] = temp;
-    }
-  }
-  
-  /**
-   * Sorts an array by natural ordering.
-   * 
-   * @param the array to sort
-   */
-  static sort(array) {
-    array.sort((a, b) => a === b ? 0 : a > b ? 1 : -1);
-  }
-  
-  /**
-   * Sets the given value ensuring a previous value is not overwritten.
-   * 
-   * TODO: remove for portability because function passing not supported in other languages, use reconcile only
-   * 
-   * @param obj is the object to invoke the getter and setter on
-   * @param getFn gets the current value
-   * @param setFn sets the current value
-   * @param val is the value to set iff it does not overwrite a previous value
-   * @param config specifies reconciliation configuration
-   *        config.resolveDefined uses defined value if true or undefined, undefined if false
-   *        config.resolveTrue uses true over false if true, false over true if false, must be equal if undefined
-   *        config.resolveMax uses max over min if true, min over max if false, must be equal if undefined
-   * @param errMsg is the error message to throw if the values cannot be reconciled (optional)
-   */
-  static safeSet(obj, getFn, setFn, val, config, errMsg) {
-    let curVal = getFn.call(obj);
-    let reconciledVal = GenUtils.reconcile(curVal, val, config, errMsg);
-    if (curVal !== reconciledVal) setFn.call(obj, reconciledVal);
-  }
-  
-  /**
-   * Reconciles two values.
-   * 
-   * TODO: remove custom error message
-   * 
-   * @param val1 is a value to reconcile
-   * @param val2 is a value to reconcile
-   * @param config specifies reconciliation configuration
-   *        config.resolveDefined uses defined value if true or undefined, undefined if false
-   *        config.resolveTrue uses true over false if true, false over true if false, must be equal if undefined
-   *        config.resolveMax uses max over min if true, min over max if false, must be equal if undefined
-   * @param errMsg is the error message to throw if the values cannot be reconciled (optional)
-   * @returns the reconciled value if reconcilable, throws error otherwise
-   */
-  static reconcile(val1, val2, config, errMsg) {
-    
-    // check for equality
-    if (val1 === val2) return val1;
-    
-    // check for BigInteger equality
-    let comparison; // save comparison for later if applicable
-    if (val1 instanceof BigInteger && val2 instanceof BigInteger) {
-      comparison = val1.compare(val2);  
-      if (comparison === 0) return val1;
-    }
-    
-    // resolve one value defined
-    if (val1 === undefined || val2 === undefined) {
-      if (config && config.resolveDefined === false) return undefined;  // use undefined
-      else return val1 === undefined ? val2 : val1;  // use defined value
-    }
-    
-    // resolve different booleans
-    if (config && config.resolveTrue !== undefined && typeof val1 === "boolean" && typeof val2 === "boolean") {
-      assert.equal(typeof config.resolveTrue, "boolean");
-      return config.resolveTrue;
-    }
-    
-    // resolve different numbers
-    if (config && config.resolveMax !== undefined) {
-      assert.equal(typeof config.resolveMax, "boolean");
-      
-      // resolve js numbers
-      if (typeof val1 === "number" && typeof val2 === "number") {
-        return config.resolveMax ? Math.max(val1, val2) : Math.min(val1, val2);
-      }
-      
-      // resolve BigIntegers
-      if (val1 instanceof BigInteger && val2 instanceof BigInteger) {
-        return config.resolveMax ? (comparison < 0 ? val2 : val1) : (comparison < 0 ? val1 : val2);
-      }
-    }
-    
-    // assert deep equality
-    assert.deepEqual(val1, val2, errMsg ? errMsg : "Cannot reconcile values " + val1 + " and " + val2 + " with config: " + JSON.stringify(config));
-    return val1;
-  }
-  
-  /**
-   * Returns a human-friendly key value line.
-   * 
-   * @param key is the key
-   * @param value is the value
-   * @param indent indents the line
-   * @param newline specifies if the string should be terminated with a newline or not
-   * @param ignoreUndefined specifies if undefined values should return an empty string
-   * @returns {string} is the human-friendly key value line
-   */
-  static kvLine(key, value, indent = 0, newline = true, ignoreUndefined = true) {
-    if (value === undefined && ignoreUndefined) return "";
-    return GenUtils.getIndent(indent) + key + ": " + value + (newline ? '\n' : "");
-  }
-  
-  /**
-   * Replace big integers (16 or more consecutive digits) with strings in order
-   * to preserve numeric precision.
-   * 
-   * @param {string} str is the string to be modified
-   * @return {string} the modified string with big numbers converted to strings
-   */
-  static stringifyBIs(str) {
-    return str.replace(/("[^"]*"\s*:\s*)(\d{16,})/g, '$1"$2"');
-  }
-  
-  /**
-   * Print the current stack trace. 
-   * 
-   * @param {string} msg - optional message to print with the trace
-   */
-  static printStackTrace(msg) {
-    try { throw new Error(msg); }
-    catch (err) { console.error(err.stack); }
-  }
-  
-  /**
-   * Wait for the duration.
-   * 
-   * @param {number} durationMs - the duration to wait for in milliseconds
-   */
-  static async waitFor(durationMs) {
-    return new Promise(function(resolve) { setTimeout(resolve, durationMs); });
-  }
-  
-  /**
-   * Kill the given nodejs child process.
-   * 
-   * @param {process} process - the nodejs child process to kill
-   * @param {string|undefined} signal - the kill signal, e.g. SIGTERM, SIGKILL, SIGINT (default)
-   * @return {Promise<number|undefined>} the exit code from killing the process
-   */
-  static async killProcess(process, signal) {
-    return new Promise((resolve, reject) => {
-      process.on("exit", function(code, signal) { resolve(code); });
-      process.on("error", function(err) { reject(err); });
-      try {
-        if (!process.kill(signal ? signal : "SIGINT")) resolve(); // resolve immediately if not running
-      } catch (err) {
-        reject(err);
-      }
-    });
-  }
-
-  /**
-   * Normalize a URI.
-   * 
-   * @param {string} uri - the URI to normalize
-   * @return {string} the normalized URI
-   */
-  static normalizeUri(uri) {
-    if (!uri) throw Error("Must provide URI to normalize");
-    uri = uri.replace(/\/$/, ""); // strip trailing slash
-    if (!new RegExp("^\\w+://.+").test(uri)) uri= "http://" + uri; // assume http if protocol not given
-    return uri;
-  }
-}
-
-module.exports = GenUtils;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_HttpClient.js.html b/docs/src_main_js_common_HttpClient.js.html deleted file mode 100644 index 62135f146..000000000 --- a/docs/src_main_js_common_HttpClient.js.html +++ /dev/null @@ -1,546 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/HttpClient.js - - - - - - - - - - -
- -

Source: src/main/js/common/HttpClient.js

- - - - - - -
-
-
const GenUtils = require("../common/GenUtils");
-const LibraryUtils = require("./LibraryUtils");
-const MoneroUtils = require("./MoneroUtils");
-const ThreadPool = require("./ThreadPool");
-const PromiseThrottle = require("promise-throttle");
-const Request = require("request-promise");
-
-/**
- * Handle HTTP requests with a uniform interface.
- * 
- * @hideconstructor
- */
-class HttpClient {
-  
-  /**
-   * <p>Make a HTTP request.<p>
-   * 
-   * @param {object} request - configures the request to make
-   * @param {string} request.method - HTTP method ("GET", "PUT", "POST", "DELETE", etc)
-   * @param {string} request.uri - uri to request
-   * @param {string|object|Uint8Array} request.body - request body
-   * @param {string} request.username - username to authenticate the request (optional)
-   * @param {string} request.password - password to authenticate the request (optional)
-   * @param {object} request.headers - headers to add to the request (optional)
-   * @param {string} request.requestApi - one of "fetch" or "xhr" (default "fetch")
-   * @param {boolean} request.resolveWithFullResponse - return full response if true, else body only (default false)
-   * @param {boolean} request.rejectUnauthorized - whether or not to reject self-signed certificates (default true)
-   * @param {number} request.timeout - maximum time allowed in milliseconds
-   * @param {number} request.proxyToWorker - proxy request to worker thread
-   * @returns {object} response - the response object
-   * @returns {string|object|Uint8Array} response.body - the response body
-   * @returns {number} response.statusCode - the response code
-   * @returns {String} response.statusText - the response message
-   * @returns {object} response.headers - the response headers
-   */
-  static async request(request) {
-    
-    // proxy to worker if configured
-    if (request.proxyToWorker) {
-      try {
-        return await LibraryUtils.invokeWorker(undefined, "httpRequest", request);
-      } catch (err) {
-        if (err.message.length > 0 && err.message.charAt(0) === "{") {
-          let parsed = JSON.parse(err.message);
-          err.message = parsed.statusMessage;
-          err.statusCode = parsed.statusCode;
-        }
-        throw err;
-      }
-    }
-    
-    // assign defaults
-    request = Object.assign({}, HttpClient._DEFAULT_REQUEST, request);
-    
-    // validate request
-    try { request.host = new URL(request.uri).host; } // hostname:port
-    catch (err) { throw new Error("Invalid request URL: " + request.uri); }
-    if (request.body && !(typeof request.body === "string" || typeof request.body === "object")) {
-      throw new Error("Request body type is not string or object");
-    }
-    
-    // initialize one task queue per host
-    if (!HttpClient._TASK_QUEUES[request.host]) HttpClient._TASK_QUEUES[request.host] = new ThreadPool(1);
-    
-    // initialize one promise throttle per host
-    if (!HttpClient._PROMISE_THROTTLES[request.host]) {
-      HttpClient._PROMISE_THROTTLES[request.host] = new PromiseThrottle({
-        requestsPerSecond: MoneroUtils.MAX_REQUESTS_PER_SECOND, // TODO: HttpClient should not depend on MoneroUtils for configuration
-        promiseImplementation: Promise
-      });
-    }
-    
-    // request using fetch or xhr with timeout
-    let timeout = request.timeout === undefined ? HttpClient._DEFAULT_TIMEOUT : request.timeout === 0 ? HttpClient.MAX_TIMEOUT : request.timeout;
-    let requestPromise = request.requestApi === "fetch" ? HttpClient._requestFetch(request) : HttpClient._requestXhr(request);
-    let timeoutPromise = new Promise((resolve, reject) => {
-      let id = setTimeout(() => {
-        clearTimeout(id);
-        reject('Request timed out in '+ timeout + ' milliseconds')
-      }, timeout);
-    });
-    return Promise.race([requestPromise, timeoutPromise]);
-  }
-  
-  // ----------------------------- PRIVATE HELPERS ----------------------------
-  
-  static async _requestFetch(req) {
-    
-    // build request options
-    let opts = {
-      method: req.method,
-      uri: req.uri,
-      body: req.body,
-      agent: req.uri.startsWith("https") ? HttpClient._getHttpsAgent() : HttpClient._getHttpAgent(),
-      rejectUnauthorized: req.rejectUnauthorized,
-      resolveWithFullResponse: req.resolveWithFullResponse,
-      requestCert: true // TODO: part of config?
-    };
-    if (req.username) {
-      opts.forever = true;
-      opts.auth = {
-        user: req.username,
-        pass: req.password,
-        sendImmediately: false
-      }
-    }
-    if (req.body instanceof Uint8Array) opts.encoding = null;
-    
-    // queue and throttle request to execute in serial and rate limited
-    let host = req.host;
-    let resp = await HttpClient._TASK_QUEUES[host].submit(async function() {
-      return HttpClient._PROMISE_THROTTLES[host].add(function(opts) { return Request(opts); }.bind(this, opts));
-    });
-    
-    // normalize response
-    let normalizedResponse = {};
-    if (req.resolveWithFullResponse) {
-      normalizedResponse.statusCode = resp.statusCode;
-      normalizedResponse.statusText = resp.statusMessage;
-      normalizedResponse.headers = resp.headers;
-      normalizedResponse.body = resp.body;
-    } else {
-      normalizedResponse.body = resp;
-    }
-    return normalizedResponse;
-  }
-  
-  static async _requestXhr(req) {
-    if (req.headers) throw new Error("Custom headers not implemented in XHR request");  // TODO
-    
-    // collect params from request which change on await
-    let method = req.method;
-    let uri = req.uri;
-    let host = req.host;
-    let username = req.username;
-    let password = req.password;
-    let body = req.body;
-    let isBinary = body instanceof Uint8Array;
-    
-    // queue and throttle requests to execute in serial and rate limited per host
-    let resp = await HttpClient._TASK_QUEUES[host].submit(async function() {
-      return HttpClient._PROMISE_THROTTLES[host].add(function() {
-        return new Promise(function(resolve, reject) {
-          let digestAuthRequest = new HttpClient.digestAuthRequest(method, uri, username, password);
-          digestAuthRequest.request(function(resp) {
-            resolve(resp);
-          }, function(resp) {
-            if (resp.status) resolve(resp);
-            else reject(new Error("Request failed without response: " + method + " " + uri));
-          }, body);
-        });
-      }.bind(this));
-    });
-    
-    // normalize response
-    let normalizedResponse = {};
-    normalizedResponse.statusCode = resp.status;
-    normalizedResponse.statusText = resp.statusText;
-    normalizedResponse.headers = HttpClient._parseXhrResponseHeaders(resp.getAllResponseHeaders());
-    normalizedResponse.body = isBinary ? new Uint8Array(resp.response) : resp.response;
-    if (normalizedResponse.body instanceof ArrayBuffer) normalizedResponse.body = new Uint8Array(normalizedResponse.body);  // handle empty binary request
-    return normalizedResponse;
-  }
-  
-  /**
-   * Get a singleton instance of an HTTP client to share.
-   * 
-   * @return {http.Agent} a shared agent for network requests among library instances
-   */
-  static _getHttpAgent() {
-    if (!HttpClient.HTTP_AGENT) {
-      let http = require('http');
-      HttpClient.HTTP_AGENT = new http.Agent({keepAlive: true});
-    }
-    return HttpClient.HTTP_AGENT;
-  }
-  
-  /**
-   * Get a singleton instance of an HTTPS client to share.
-   * 
-   * @return {https.Agent} a shared agent for network requests among library instances
-   */
-  static _getHttpsAgent() {
-    if (!HttpClient.HTTPS_AGENT) {
-      let https = require('https');
-      HttpClient.HTTPS_AGENT = new https.Agent({keepAlive: true});
-    }
-    return HttpClient.HTTPS_AGENT;
-  }
-  
-  
-  static _parseXhrResponseHeaders(headersStr) {
-    let headerMap = {};
-    let headers = headersStr.trim().split(/[\r\n]+/);
-    for (let header of headers) {
-      let headerVals = header.split(": ");
-      headerMap[headerVals[0]] = headerVals[1];
-    }
-    return headerMap;
-  }
-}
-
-/**
- * Modification of digest auth request by @inorganik.
- * 
- * Dependent on CryptoJS MD5 hashing: http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js
- * 
- * MIT licensed.
- */
-HttpClient.digestAuthRequest = function(method, url, username, password) {
-  var self = this;
-
-  if (typeof CryptoJS === 'undefined' && typeof require === 'function') {
-    var CryptoJS = require('crypto-js');
-  }
-
-  this.scheme = null; // we just echo the scheme, to allow for 'Digest', 'X-Digest', 'JDigest' etc
-  this.nonce = null; // server issued nonce
-  this.realm = null; // server issued realm
-  this.qop = null; // "quality of protection" - '' or 'auth' or 'auth-int'
-  this.response = null; // hashed response to server challenge
-  this.opaque = null; // hashed response to server challenge
-  this.nc = 1; // nonce count - increments with each request used with the same nonce
-  this.cnonce = null; // client nonce
-
-  // settings
-  this.timeout = 60000; // timeout
-  this.loggingOn = false; // toggle console logging
-
-  // determine if a post, so that request will send data
-  this.post = false;
-  if (method.toLowerCase() === 'post' || method.toLowerCase() === 'put') {
-    this.post = true;
-  }
-
-  // start here
-  // successFn - will be passed JSON data
-  // errorFn - will be passed the failed authenticatedRequest
-  // data - optional, for POSTS
-  this.request = function(successFn, errorFn, data) {
-    
-    // stringify json
-    if (data) {
-      try {
-        self.data = data instanceof Uint8Array || typeof data === "string" ? data : JSON.stringify(data);
-      } catch (err) {
-        console.error(err);
-        throw err;
-      }
-    }
-    self.successFn = successFn;
-    self.errorFn = errorFn;
-
-    if (!self.nonce) {
-      self.makeUnauthenticatedRequest(self.data);
-    } else {
-      self.makeAuthenticatedRequest();
-    }
-  }
-  this.makeUnauthenticatedRequest = function(data) {
-    self.firstRequest = new XMLHttpRequest();
-    self.firstRequest.open(method, url, true);
-    self.firstRequest.timeout = self.timeout;
-    // if we are posting, add appropriate headers
-    if (self.post && data) {
-      if (typeof data === "string") {
-        self.firstRequest.setRequestHeader('Content-type', 'text/plain');
-      } else {
-        self.firstRequest.responseType = "arraybuffer";
-      }
-    }
-
-    self.firstRequest.onreadystatechange = function() {
-
-      // 2: received headers,  3: loading, 4: done
-      if (self.firstRequest.readyState === 2) {
-
-        var responseHeaders = self.firstRequest.getAllResponseHeaders();
-        responseHeaders = responseHeaders.split('\n');
-        // get authenticate header
-        var digestHeaders;
-        for(var i = 0; i < responseHeaders.length; i++) {
-          if (responseHeaders[i].match(/www-authenticate/i) != null) {
-            digestHeaders = responseHeaders[i];
-          }
-        }
-
-        if (digestHeaders != null) {
-          // parse auth header and get digest auth keys
-          digestHeaders = digestHeaders.slice(digestHeaders.indexOf(':') + 1, -1);
-          digestHeaders = digestHeaders.split(',');
-          self.scheme = digestHeaders[0].split(/\s/)[1];
-          for (var i = 0; i < digestHeaders.length; i++) {
-            var equalIndex = digestHeaders[i].indexOf('='),
-              key = digestHeaders[i].substring(0, equalIndex),
-              val = digestHeaders[i].substring(equalIndex + 1);
-            val = val.replace(/['"]+/g, '');
-            // find realm
-            if (key.match(/realm/i) != null) {
-              self.realm = val;
-            }
-            // find nonce
-            if (key.match(/nonce/i) != null) {
-              self.nonce = val;
-            }
-            // find opaque
-            if (key.match(/opaque/i) != null) {
-              self.opaque = val;
-            }
-            // find QOP
-            if (key.match(/qop/i) != null) {
-              self.qop = val;
-            }
-          }
-          // client generated keys
-          self.cnonce = self.generateCnonce();
-          self.nc++;
-          // if logging, show headers received:
-          self.log('received headers:');
-          self.log('  realm: '+self.realm);
-          self.log('  nonce: '+self.nonce);
-          self.log('  opaque: '+self.opaque);
-          self.log('  qop: '+self.qop);
-          // now we can make an authenticated request
-          self.makeAuthenticatedRequest();
-        }
-      }
-      if (self.firstRequest.readyState === 4) {
-        if (self.firstRequest.status === 200) {
-          self.log('Authentication not required for '+url);
-          if (data instanceof Uint8Array) {
-            self.successFn(self.firstRequest);
-          } else {
-            if (self.firstRequest.responseText !== 'undefined') {
-              if (self.firstRequest.responseText.length > 0) {
-                // If JSON, parse and return object
-                if (self.isJson(self.firstRequest.responseText)) {  // TODO: redundant
-                  self.successFn(self.firstRequest);
-                } else {
-                  self.successFn(self.firstRequest);
-                }
-              }
-            } else {
-              self.successFn();
-            }
-          }
-        }
-      }
-    }
-    // send
-    if (self.post) {
-      // in case digest auth not required
-      self.firstRequest.send(self.data);
-    } else {
-      self.firstRequest.send();
-    }
-    self.log('Unauthenticated request to '+url);
-
-    // handle error
-    self.firstRequest.onerror = function() {
-      if (self.firstRequest.status !== 401) {
-        self.log('Error ('+self.firstRequest.status+') on unauthenticated request to '+url);
-        self.errorFn(self.firstRequest);
-      }
-    }
-  }
-  this.makeAuthenticatedRequest= function() {
-
-    self.response = self.formulateResponse();
-    self.authenticatedRequest = new XMLHttpRequest();
-    self.authenticatedRequest.open(method, url, true);
-    self.authenticatedRequest.timeout = self.timeout;
-    var digestAuthHeader = self.scheme+' '+
-      'username="'+username+'", '+
-      'realm="'+self.realm+'", '+
-      'nonce="'+self.nonce+'", '+
-      'uri="'+url+'", '+
-      'response="'+self.response+'", '+
-      'opaque="'+self.opaque+'", '+
-      'qop='+self.qop+', '+
-      'nc='+('00000000' + self.nc).slice(-8)+', '+
-      'cnonce="'+self.cnonce+'"';
-    self.authenticatedRequest.setRequestHeader('Authorization', digestAuthHeader);
-    self.log('digest auth header response to be sent:');
-    self.log(digestAuthHeader);
-    // if we are posting, add appropriate headers
-    if (self.post && self.data) {
-      if (typeof self.data === "string") {
-        self.authenticatedRequest.setRequestHeader('Content-type', 'text/plain');
-      } else {
-        self.authenticatedRequest.responseType = "arraybuffer";        
-      }
-    }
-    self.authenticatedRequest.onload = function() {
-      // success
-      if (self.authenticatedRequest.status >= 200 && self.authenticatedRequest.status < 400) {
-        // increment nonce count
-        self.nc++;
-        // return data
-        if (self.data instanceof Uint8Array) {
-          self.successFn(self.authenticatedRequest);
-        } else {
-          if (self.authenticatedRequest.responseText !== 'undefined' && self.authenticatedRequest.responseText.length > 0 ) {
-            // If JSON, parse and return object
-            if (self.isJson(self.authenticatedRequest.responseText)) {  // TODO: redundant from not parsing
-              self.successFn(self.authenticatedRequest);
-            } else {
-              self.successFn(self.authenticatedRequest);
-            }
-          } else {
-           self.successFn();
-          }
-        }
-      }
-      // failure
-      else {
-        self.nonce = null;
-        self.errorFn(self.authenticatedRequest);
-      }
-    }
-    // handle errors
-    self.authenticatedRequest.onerror = function() {
-      self.log('Error ('+self.authenticatedRequest.status+') on authenticated request to '+url);
-      self.nonce = null;
-      self.errorFn(self.authenticatedRequest);
-    };
-    // send
-    if (self.post) {
-      self.authenticatedRequest.send(self.data);
-    } else {
-      self.authenticatedRequest.send();
-    }
-    self.log('Authenticated request to '+url);
-  }
-  // hash response based on server challenge
-  this.formulateResponse = function() {
-    var HA1 = CryptoJS.MD5(username+':'+self.realm+':'+password).toString();
-    var HA2 = CryptoJS.MD5(method+':'+url).toString();
-    var response = CryptoJS.MD5(HA1+':'+
-      self.nonce+':'+
-      ('00000000' + self.nc).slice(-8)+':'+
-      self.cnonce+':'+
-      self.qop+':'+
-      HA2).toString();
-    return response;
-  }
-  // generate 16 char client nonce
-  this.generateCnonce = function() {
-    var characters = 'abcdef0123456789';
-    var token = '';
-    for (var i = 0; i < 16; i++) {
-      var randNum = Math.round(Math.random() * characters.length);
-      token += characters.substr(randNum, 1);
-    }
-    return token;
-  }
-  this.abort = function() {
-    self.log('[digestAuthRequest] Aborted request to '+url);
-    if (self.firstRequest != null) {
-      if (self.firstRequest.readyState != 4) self.firstRequest.abort();
-    }
-    if (self.authenticatedRequest != null) {
-      if (self.authenticatedRequest.readyState != 4) self.authenticatedRequest.abort();
-    }
-  }
-  this.isJson = function(str) {
-    try {
-      JSON.parse(str);
-    } catch (err) {
-      return false;
-    }
-    return true;
-  }
-  this.log = function(str) {
-    if (self.loggingOn) {
-      console.log('[digestAuthRequest] '+str);
-    }
-  }
-  this.version = function() { return '0.8.0' }
-}
-
-// default request config
-HttpClient._DEFAULT_REQUEST = {
-  method: "GET",
-  requestApi: "fetch",
-  resolveWithFullResponse: false,
-  rejectUnauthorized: true
-}
-
-// rate limit requests per host
-HttpClient._PROMISE_THROTTLES = [];
-HttpClient._TASK_QUEUES = [];
-HttpClient._DEFAULT_TIMEOUT = 60000;
-HttpClient.MAX_TIMEOUT = 2147483647; // max 32-bit signed number
-
-module.exports = HttpClient;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_LibraryUtils.js.html b/docs/src_main_js_common_LibraryUtils.js.html deleted file mode 100644 index 6ab6d8883..000000000 --- a/docs/src_main_js_common_LibraryUtils.js.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/LibraryUtils.js - - - - - - - - - - -
- -

Source: src/main/js/common/LibraryUtils.js

- - - - - - -
-
-
const assert = require("assert");
-const GenUtils = require("./GenUtils");
-const MoneroError = require("./MoneroError");
-const ThreadPool = require("./ThreadPool");
-
-/**
- * Collection of helper utilities for the library.
- * 
- * @hideconstructor
- */
-class LibraryUtils {
-  
-  /**
-   * Log a message.
-   *
-   * @param {int} level - log level of the message
-   * @param {string} msg - message to log
-   */
-  static log(level, msg) {
-    assert(level === parseInt(level, 10) && level >= 0, "Log level must be an integer >= 0");
-    if (LibraryUtils.LOG_LEVEL >= level) console.log(msg);
-  }
-  
-  /**
-   * Set the library's log level with 0 being least verbose.
-   *
-   * @param {int} level - the library's log level
-   */
-  static async setLogLevel(level) {
-    assert(level === parseInt(level, 10) && level >= 0, "Log level must be an integer >= 0");
-    LibraryUtils.LOG_LEVEL = level;
-    if (LibraryUtils.WASM_MODULE) LibraryUtils.WASM_MODULE.set_log_level(level);
-    if (LibraryUtils.WORKER) await LibraryUtils.invokeWorker(undefined, "setLogLevel", [level]);
-  }
-  
-  /**
-   * Get the library's log level.
-   *
-   * @return {int} the library's log level
-   */
-  static getLogLevel() {
-    return LibraryUtils.LOG_LEVEL;
-  }
-  
-  /**
-   * Get the total memory used by WebAssembly.
-   * 
-   * @return {int} the total memory used by WebAssembly
-   */
-  static async getWasmMemoryUsed() {
-    let total = 0;
-    if (LibraryUtils.WORKER) total += await LibraryUtils.invokeWorker(undefined, "getWasmMemoryUsed", []);
-    if (LibraryUtils.getWasmModule() && LibraryUtils.getWasmModule().HEAP8) total += LibraryUtils.getWasmModule().HEAP8.length;
-    return total;
-  }
-  
-  /**
-   * Get the WebAssembly module in the current context (nodejs, browser main thread or worker).
-   */
-  static getWasmModule() {
-    return LibraryUtils.WASM_MODULE;
-  }
-  
-  /**
-   * Load the WebAssembly keys module with caching.
-   */
-  static async loadKeysModule() {
-    
-    // use cache if suitable, full module supersedes keys module because it is superset
-    if (LibraryUtils.WASM_MODULE) return LibraryUtils.WASM_MODULE;
-    
-    // load module
-    delete LibraryUtils.WASM_MODULE;
-    LibraryUtils.WASM_MODULE = require("../../../../dist/monero_wallet_keys")();
-    return new Promise(function(resolve, reject) {
-      LibraryUtils.WASM_MODULE.then(module => {
-        LibraryUtils.WASM_MODULE = module
-        delete LibraryUtils.WASM_MODULE.then;
-        LibraryUtils._initWasmModule(LibraryUtils.WASM_MODULE);
-        resolve(LibraryUtils.WASM_MODULE);
-      });
-    });
-  }
-  
-  /**
-   * Load the WebAssembly full module with caching.
-   * 
-   * The full module is a superset of the keys module and overrides it.
-   * 
-   * TODO: this is separate static function from loadKeysModule() because webpack cannot bundle worker using runtime param for conditional import
-   */
-  static async loadFullModule() {
-    
-    // use cache if suitable, full module supersedes keys module because it is superset
-    if (LibraryUtils.WASM_MODULE && LibraryUtils.FULL_LOADED) return LibraryUtils.WASM_MODULE;
-    
-    // load module
-    delete LibraryUtils.WASM_MODULE;
-    LibraryUtils.WASM_MODULE = require("../../../../dist/monero_wallet_full")();
-    return new Promise(function(resolve, reject) {
-      LibraryUtils.WASM_MODULE.then(module => {
-        LibraryUtils.WASM_MODULE = module;
-        delete LibraryUtils.WASM_MODULE.then;
-        LibraryUtils.FULL_LOADED = true;
-        LibraryUtils._initWasmModule(LibraryUtils.WASM_MODULE);
-        resolve(LibraryUtils.WASM_MODULE);
-      });
-    });
-  }
-  
-  /**
-   * Register a function by id which informs if unauthorized requests (e.g.
-   * self-signed certificates) should be rejected.
-   * 
-   * @param {string} fnId - unique identifier for the function
-   * @param {function} fn - function to inform if unauthorized requests should be rejected
-   */
-  static setRejectUnauthorizedFn(fnId, fn) {
-    if (!LibraryUtils.REJECT_UNAUTHORIZED_FNS) LibraryUtils.REJECT_UNAUTHORIZED_FNS = [];
-    if (fn === undefined) delete LibraryUtils.REJECT_UNAUTHORIZED_FNS[fnId];
-    else LibraryUtils.REJECT_UNAUTHORIZED_FNS[fnId] = fn;
-  }
-  
-  /**
-   * Indicate if unauthorized requests should be rejected.
-   * 
-   * @param {string} fnId - uniquely identifies the function
-   */
-  static isRejectUnauthorized(fnId) {
-    if (!LibraryUtils.REJECT_UNAUTHORIZED_FNS[fnId]) throw new Error("No function registered with id " + fnId + " to inform if unauthorized reqs should be rejected");
-    return LibraryUtils.REJECT_UNAUTHORIZED_FNS[fnId]();
-  }
-  
-  /**
-   * Set the path to load the worker. Defaults to "/monero_web_worker.js" in the browser
-   * and "./MoneroWebWorker.js" in node.
-   * 
-   * @param {string} workerDistPath - path to load the worker
-   */
-  static setWorkerDistPath(workerDistPath) {
-    let path = LibraryUtils._prefixWindowsPath(workerDistPath ? workerDistPath : LibraryUtils.WORKER_DIST_PATH_DEFAULT);
-    if (path !== LibraryUtils.WORKER_DIST_PATH) delete LibraryUtils.WORKER;
-    LibraryUtils.WORKER_DIST_PATH = path;
-  }
-
-  /**
-   * Get a singleton instance of a worker to share.
-   * 
-   * @return {Worker} a worker to share among wallet instances
-   */
-  static async getWorker() {
-    
-    // one time initialization
-    if (!LibraryUtils.WORKER) {
-      if (GenUtils.isBrowser()) LibraryUtils.WORKER = new Worker(LibraryUtils.WORKER_DIST_PATH);
-      else { 
-       const Worker = require("web-worker"); // import web worker if nodejs
-       LibraryUtils.WORKER = new Worker(LibraryUtils.WORKER_DIST_PATH);
-      }
-      LibraryUtils.WORKER_OBJECTS = {};  // store per object running in the worker
-      
-      // receive worker errors
-      LibraryUtils.WORKER.onerror = function(err) {
-        console.error("Error posting message to MoneroWebWorker.js; is it copied to the app's build directory (e.g. in the root)?");
-        console.log(err);
-      };
-      
-      // receive worker messages
-      LibraryUtils.WORKER.onmessage = function(e) {
-        
-        // lookup object id, callback function, and this arg
-        let thisArg = null;
-        let callbackFn = LibraryUtils.WORKER_OBJECTS[e.data[0]].callbacks[e.data[1]]; // look up by object id then by function name
-        if (callbackFn === undefined) throw new Error("No worker callback function defined for key '" + e.data[1] + "'");
-        if (callbackFn instanceof Array) {  // this arg may be stored with callback function
-          thisArg = callbackFn[1];
-          callbackFn = callbackFn[0];
-        }
-        
-        // invoke callback function with this arg and arguments
-        callbackFn.apply(thisArg, e.data.slice(2));
-      }
-    }
-    return LibraryUtils.WORKER;
-  }
-  
-  /**
-   * Terminate monero-javascript's singleton worker.
-   */
-  static async terminateWorker() {
-    if (LibraryUtils.WORKER) {
-      LibraryUtils.WORKER.terminate();
-      delete LibraryUtils.WORKER;
-      LibraryUtils.WORKER = undefined;
-    }
-  }
-  
-  /**
-   * Invoke a worker function and get the result with error handling.
-   * 
-   * @param {string} objectId identifies the worker object to invoke (default random id)
-   * @param {string} fnName is the name of the function to invoke
-   * @param {any[]} args are function arguments to invoke with
-   * @return {any} resolves with response payload from the worker or an error
-   */
-  static async invokeWorker(objectId, fnName, args) {
-    assert(fnName.length >= 2);
-    let worker = await LibraryUtils.getWorker();
-    let randomObject = objectId === undefined;
-    if (randomObject) objectId = GenUtils.getUUID();
-    if (!LibraryUtils.WORKER_OBJECTS[objectId]) LibraryUtils.WORKER_OBJECTS[objectId] = {callbacks: {}};
-    return await new Promise(function(resolve, reject) {
-      let callbackId = GenUtils.getUUID();
-      LibraryUtils.WORKER_OBJECTS[objectId].callbacks[callbackId] = function(resp) {  // TODO: this defines function once per callback
-        resp ? (resp.error ? reject(LibraryUtils.deserializeError(resp.error)) : resolve(resp.result)) : resolve();
-        delete LibraryUtils.WORKER_OBJECTS[objectId].callbacks[callbackId];
-        if (randomObject) delete LibraryUtils.WORKER_OBJECTS[objectId];
-      };
-      worker.postMessage([objectId, fnName, callbackId].concat(args === undefined ? [] : GenUtils.listify(args)));
-    });
-  }
-
-  static serializeError(err) {
-    const serializedErr = { name: err.name, message: err.message, stack: err.stack };
-    if (err instanceof MoneroError) serializedErr.type = "MoneroError";
-    return serializedErr;
-  }
-
-  static deserializeError(serializedErr) {
-    const err = serializedErr.type === "MoneroError" ? new MoneroError(serializedErr.message) : new Error(serializedErr.message);
-    err.name = serializedErr.name;
-    err.stack = serializedErr.stack;
-    return err;
-  }
-  
-  // ------------------------------ PRIVATE HELPERS ---------------------------
-  
-  static _initWasmModule(wasmModule) {
-    wasmModule.taskQueue = new ThreadPool(1);
-    wasmModule.queueTask = async function(asyncFn) { return wasmModule.taskQueue.submit(asyncFn); }
-  }
-  
-  static _prefixWindowsPath(path) {
-    if (/^[A-Z]:/.test(path) && path.indexOf("file://") == -1) path = "file://" + path; // prepend e.g. C: paths with file://
-    return path;
-  }
-}
-
-LibraryUtils.LOG_LEVEL = 0;
-LibraryUtils.WORKER_DIST_PATH_DEFAULT = GenUtils.isBrowser() ? "/monero_web_worker.js" : function() {
-    const path = require("path");
-    return LibraryUtils._prefixWindowsPath(path.join(__dirname, "./MoneroWebWorker.js"));
-}();
-LibraryUtils.WORKER_DIST_PATH = LibraryUtils.WORKER_DIST_PATH_DEFAULT;
-
-module.exports = LibraryUtils;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_MoneroConnectionManager.js.html b/docs/src_main_js_common_MoneroConnectionManager.js.html deleted file mode 100644 index a11dc46cb..000000000 --- a/docs/src_main_js_common_MoneroConnectionManager.js.html +++ /dev/null @@ -1,696 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/MoneroConnectionManager.js - - - - - - - - - - -
- -

Source: src/main/js/common/MoneroConnectionManager.js

- - - - - - -
-
-
const GenUtils = require("./GenUtils");
-const MoneroError = require("./MoneroError");
-const MoneroRpcConnection = require("./MoneroRpcConnection");
-const TaskLooper = require("./TaskLooper");
-const ThreadPool = require("./ThreadPool");
-
-/**
- * <p>Manages a collection of prioritized connections to daemon or wallet RPC endpoints.</p>
- *
- * <p>Example usage:</p>
- * 
- * <code>
- * // imports<br>
- * const monerojs = require("monero-javascript");<br>
- * const MoneroRpcConnection = monerojs.MoneroRpcConnection;<br>
- * const MoneroConnectionManager = monerojs.MoneroConnectionManager;<br>
- * const MoneroConnectionManagerListener = monerojs.MoneroConnectionManagerListener;<br><br>
- * 
- * // create connection manager<br>
- * let connectionManager = new MoneroConnectionManager();<br><br>
- * 
- * // add managed connections with priorities<br>
- * connectionManager.addConnection(new MoneroRpcConnection("http://localhost:38081").setPriority(1)); // use localhost as first priority<br>
- * connectionManager.addConnection(new MoneroRpcConnection("http://example.com")); // default priority is prioritized last<br><br>
- * 
- * // set current connection<br>
- * connectionManager.setConnection(new MoneroRpcConnection("http://foo.bar", "admin", "password")); // connection is added if new<br><br>
- * 
- * // check connection status<br>
- * await connectionManager.checkConnection();<br>
- * console.log("Connection manager is connected: " + connectionManager.isConnected());<br>
- * console.log("Connection is online: " + connectionManager.getConnection().isOnline());<br>
- * console.log("Connection is authenticated: " + connectionManager.getConnection().isAuthenticated());<br><br>
- * 
- * // receive notifications of any changes to current connection<br>
- * connectionManager.addListener(new class extends MoneroConnectionManagerListener {<br>
- * &nbsp;&nbsp; onConnectionChanged(connection) {<br>
- * &nbsp;&nbsp;&nbsp;&nbsp; console.log("Connection changed to: " + connection);<br>
- * &nbsp;&nbsp; }<br>
- * });<br><br>
- *  
- * // start polling for best connection every 10 seconds and automatically switch<br>
- * connectionManager.startPolling(10000);<br><br>
- * 
- * // automatically switch to best available connection if disconnected<br>
- * connectionManager.setAutoSwitch(true);<br><br>
- * 
- * // get best available connection in order of priority then response time<br>
- * let bestConnection = await connectionManager.getBestAvailableConnection();<br><br>
- * 
- * // check status of all connections<br>
- * await connectionManager.checkConnections();<br><br>
- * 
- * // get connections in order of current connection, online status from last check, priority, and name<br>
- * let connections = connectionManager.getConnections();<br><br>
- * 
- * // clear connection manager<br>
- * connectionManager.clear();
- * <code>
- */
-class MoneroConnectionManager {
-
-  /**
-   * Specify behavior when polling.
-   * 
-   * One of PRIORITIZED (poll connections in order of priority until connected; default), CURRENT (poll current connection), or ALL (poll all connections).
-   */
-  static PollType = {
-    PRIORITIZED: 0,
-    CURRENT: 1,
-    ALL: 2
-  }
-  
-  /**
-   * Construct a connection manager.
-   * 
-   * @param {boolean} proxyToWorker - configure all connections to proxy to worker (default true)
-   */
-  constructor(proxyToWorker) {
-    this._proxyToWorker = proxyToWorker !== false;
-    this._timeoutMs = MoneroConnectionManager.DEFAULT_TIMEOUT;
-    this._autoSwitch = MoneroConnectionManager.DEFAULT_AUTO_SWITCH;
-    this._connections = [];
-    this._responseTimes = new Map();
-    this._listeners = [];
-  }
-  
-  /**
-   * Add a listener to receive notifications when the connection changes.
-   * 
-   * @param {MoneroConnectionManagerListener} listener - the listener to add
-   * @return {MoneroConnectionManager} this connection manager for chaining
-   */
-  addListener(listener) {
-    this._listeners.push(listener);
-    return this;
-  }
-  
-  /**
-   * Remove a listener.
-   * 
-   * @param {MoneroConnectionManagerListener} listener - the listener to remove
-   * @return {MoneroConnectionManager} this connection manager for chaining
-   */
-  removeListener(listener) {
-    if (!GenUtils.remove(this._listeners, listener)) throw new MoneroError("Monero connection manager does not contain listener to remove");
-    return this;
-  }
-  
-  /**
-   * Remove all listeners.
-   * 
-   * @return {MoneroConnectionManager} this connection manager for chaining
-   */
-  removeListeners() {
-    this._listeners.splice(0, this._listeners.length);
-    return this;
-  }
-
-  /**
-   * Get all listeners.
-   * 
-   * @return {MoneroConnectionManagerListener[]} all listeners
-   */
-  getListeners() {
-    return this._listeners
-  }
-
-  /**
-   * Add a connection. The connection may have an elevated priority for this manager to use.
-   * 
-   * @param {string|MoneroRpcConnection} uriOrConnection - uri or connection to add
-   * @return {Promise<MoneroConnectionManager>} this connection manager for chaining
-   */
-  async addConnection(uriOrConnection) {
-    let connection = typeof uriOrConnection === "string" ? new MoneroRpcConnection(uriOrConnection) : uriOrConnection;
-    for (let aConnection of this._connections) {
-      if (aConnection.getUri() === connection.getUri()) throw new MoneroError("Connection URI already exists");
-    }
-    if (this._proxyToWorker !== undefined) connection.setProxyToWorker(this._proxyToWorker);
-    this._connections.push(connection);
-    return this;
-  }
-  
-  /**
-   * Remove a connection.
-   * 
-   * @param {string} uri - of the the connection to remove
-   * @return {Promise<MoneroConnectionManager>} this connection manager for chaining
-   */
-  async removeConnection(uri) {
-    let connection = this.getConnectionByUri(uri);
-    if (!connection) throw new MoneroError("No connection exists with URI: " + uri);
-    GenUtils.remove(this._connections, connection);
-    this._responseTimes.delete(connection.getUri());
-    if (connection === this._currentConnection) {
-      this._currentConnection = undefined;
-      await this._onConnectionChanged(this._currentConnection);
-    }
-    return this;
-  }
-  
-  /**
-   * Set the current connection.
-   * Provide a URI to select an existing connection without updating its credentials.
-   * Provide a MoneroRpcConnection to add new connection or replace existing connection with the same URI.
-   * Notify if current connection changes.
-   * Does not check the connection.
-   * 
-   * @param {string|MoneroRpcConnection} uriOrConnection - is the uri of the connection or the connection to make current (default undefined for no current connection)
-   * @return {Promise<MoneroConnectionManager>} this connection manager for chaining
-   */
-  async setConnection(uriOrConnection) {
-    
-    // handle uri
-    if (uriOrConnection && typeof uriOrConnection === "string") {
-      let connection = this.getConnectionByUri(uriOrConnection);
-      return this.setConnection(connection === undefined ? new MoneroRpcConnection(uriOrConnection) : connection);
-    }
-    
-    // handle connection
-    let connection = uriOrConnection;
-    if (this._currentConnection === connection) return this;
-    
-    // check if setting undefined connection
-    if (!connection) {
-      this._currentConnection = undefined;
-      await this._onConnectionChanged(undefined);
-      return this;
-    }
-    
-    // validate connection
-    if (!(connection instanceof MoneroRpcConnection)) throw new MoneroError("Must provide string or MoneroRpcConnection to set connection");
-    if (!connection.getUri()) throw new MoneroError("Connection is missing URI");
-
-    // add or replace connection
-    let prevConnection = this.getConnectionByUri(connection.getUri());
-    if (prevConnection) GenUtils.remove(this._connections, prevConnection);
-    await this.addConnection(connection);
-    this._currentConnection = connection;
-    await this._onConnectionChanged(this._currentConnection);
-    
-    return this;
-  }
-
-  /**
-   * Get the current connection.
-   * 
-   * @return {MoneroRpcConnection} the current connection or undefined if no connection set
-   */
-  getConnection() {
-    return this._currentConnection;
-  }
-
-  /**
-   * Indicates if this manager has a connection with the given URI.
-   * 
-   * @param {string} uri URI of the connection to check
-   * @return {boolean} true if this manager has a connection with the given URI, false otherwise
-   */
-  hasConnection(uri) {
-    return this.getConnectionByUri(uri) !== undefined;
-  }
-  
-  /**
-   * Get a connection by URI.
-   * 
-   * @param {string} uri is the URI of the connection to get
-   * @return {MoneroRpcConnection} the connection with the URI or undefined if no connection with the URI exists
-   */
-  getConnectionByUri(uri) {
-    for (let connection of this._connections) if (connection.getUri() === uri) return connection;
-    return undefined;
-  }
-  
-  /**
-   * Get all connections in order of current connection (if applicable), online status, priority, and name.
-   * 
-   * @return {MoneroRpcConnection[]} the list of sorted connections
-   */
-  getConnections() {
-    let sortedConnections = GenUtils.copyArray(this._connections);
-    sortedConnections.sort(this._compareConnections.bind(this));
-    return sortedConnections;
-  }
-
-  /**
-   * Indicates if the connection manager is connected to a node.
-   * 
-   * @return {boolean|undefined} true if the current connection is set, online, and not unauthenticated, undefined if unknown, false otherwise
-   */
-  isConnected() {
-    if (!this._currentConnection) return false;
-    return this._currentConnection.isConnected();
-  }
-
-  /**
-   * Start polling connections.
-   * 
-   * @param {number} periodMs poll period in milliseconds (default 20s)
-   * @param {boolean} autoSwitch specifies to automatically switch to the best connection (default true unless changed)
-   * @param {number} timeoutMs specifies the timeout to poll a single connection (default 5s unless changed)
-   * @param {number} pollType one of PRIORITIZED (poll connections in order of priority until connected; default), CURRENT (poll current connection), or ALL (poll all connections)
-   * @param {MoneroRpcConnection[]} excludedConnections connections excluded from being polled
-   * @return {MoneroConnectionManager} this connection manager for chaining
-   */
-  startPolling(periodMs, autoSwitch, timeoutMs, pollType, excludedConnections) {
-
-    // apply defaults
-    if (periodMs == undefined) periodMs = MoneroConnectionManager.DEFAULT_POLL_PERIOD;
-    if (autoSwitch !== undefined) this.setAutoSwitch(autoSwitch);
-    if (timeoutMs !== undefined) this.setTimeout(timeoutMs);
-    if (pollType === undefined) pollType = MoneroConnectionManager.PollType.PRIORITIZED;
-
-    // stop polling
-    this.stopPolling();
-
-    // start polling
-    switch (pollType) {
-      case MoneroConnectionManager.PollType.CURRENT:
-        this._startPollingConnection(periodMs);
-        break;
-      case MoneroConnectionManager.PollType.ALL:
-        this._startPollingConnections(periodMs);
-        break;
-      case MoneroConnectionManager.PollType.PRIORITIZED:
-      default:
-        this._startPollingPrioritizedConnections(periodMs, excludedConnections);
-    }
-    return this;
-  }
-
-  /**
-   * Stop polling connections.
-   * 
-   * @return {MoneroConnectionManager} this connection manager for chaining
-   */
-  stopPolling() {
-    if (this._poller) this._poller.stop();
-    this._poller = undefined;
-    return this;
-  }
-
-  /**
-   * Check the current connection. If disconnected and auto switch enabled, switches to best available connection.
-   * 
-   * @return {Promise<MoneroConnectionManager>} this connection manager for chaining
-   */
-  async checkConnection() {
-    let connectionChanged = false;
-    let connection = this.getConnection();
-    if (connection) {
-      if (await connection.checkConnection(this._timeoutMs)) connectionChanged = true;
-      await this._processResponses([connection]);
-    }
-    if (this._autoSwitch && !this.isConnected()) {
-      let bestConnection = await this.getBestAvailableConnection([connection]);
-      if (bestConnection) {
-        await this.setConnection(bestConnection);
-        return this;
-      }
-    }
-    if (connectionChanged) await this._onConnectionChanged(connection);   
-    return this;
-  }
-  
-  /**
-   * Check all managed connections.
-   * 
-   * @return {Promise<MoneroConnectionManager>} this connection manager for chaining
-   */
-  async checkConnections() {
-    return this._checkConnections(this.getConnections());
-  }
-
-  /**
-   * Check all managed connections, returning a promise for each connection check.
-   * Does not auto switch if disconnected.
-   *
-   * @return {Promise[]} a promise for each connection in the order of getConnections().
-   */
-  checkConnectionPromises() {
-    let that = this;
-    let checkPromises = [];
-    let pool = new ThreadPool(this._connections.length);
-    for (let connection of this.getConnections()) {
-      checkPromises.push(pool.submit(async function() {
-        try {
-          if (await connection.checkConnection(that._timeoutMs) && connection === this._currentConnection) await that._onConnectionChanged(connection);
-        } catch (err) {
-          // ignore error
-        }
-      }));
-    }
-    Promise.all(checkPromises);
-    return checkPromises;
-  }
-  
-  /**
-   * Get the best available connection in order of priority then response time.
-   * 
-   * @param {MoneroRpcConnection[]} excludedConnections - connections to be excluded from consideration (optional)
-   * @return {Promise<MoneroRpcConnection>} the best available connection in order of priority then response time, undefined if no connections available
-   */
-  async getBestAvailableConnection(excludedConnections) {
-    
-    // try connections within each ascending priority
-    for (let prioritizedConnections of this._getConnectionsInAscendingPriority()) {
-      try {
-        
-        // create promises to check connections
-        let that = this;
-        let checkPromises = [];
-        for (let connection of prioritizedConnections) {
-          if (excludedConnections && GenUtils.arrayContains(excludedConnections, connection)) continue;
-          checkPromises.push(new Promise(async function(resolve, reject) {
-            await connection.checkConnection(that._timeoutMs);
-            if (connection.isConnected()) resolve(connection);
-            else reject();
-          }));
-        }
-        
-        // use first available connection
-        let firstAvailable = await Promise.any(checkPromises);
-        if (firstAvailable) return firstAvailable;
-      } catch (err) {
-        if (!(err instanceof AggregateError)) throw new MoneroError(err);
-      }
-    }
-    return undefined;
-  }
-  
-  /**
-   * Automatically switch to the best available connection as connections are polled, based on priority, response time, and consistency.
-   * 
-   * @param {boolean} autoSwitch specifies if the connection should auto switch to a better connection
-   * @return {MoneroConnectionManager} this connection manager for chaining
-   */
-  setAutoSwitch(autoSwitch) {
-    this._autoSwitch = autoSwitch;
-    return this;
-  }
-  
-  /**
-   * Get if auto switch is enabled or disabled.
-   * 
-   * @return {boolean} true if auto switch enabled, false otherwise
-   */
-  getAutoSwitch() {
-    return this._autoSwitch;
-  }
-  
-  /**
-   * Set the maximum request time before its connection is considered offline.
-   * 
-   * @param {int} timeoutMs - the timeout before the connection is considered offline
-   * @return {MoneroConnectionManager} this connection manager for chaining
-   */
-  setTimeout(timeoutMs) {
-    this._timeoutMs = timeoutMs;
-    return this;
-  }
-  
-  /**
-   * Get the request timeout.
-   * 
-   * @return {int} the request timeout before a connection is considered offline
-   */
-  getTimeout() {
-    return this._timeoutMs;
-  }
-  
-  /**
-   * Collect connectable peers of the managed connections.
-   *
-   * @return {Promise<MoneroRpcConnection[]>} connectable peers
-   */
-  async getPeerConnections() {
-    throw new MoneroError("Not implemented");
-  }
-  
-  /**
-   * Disconnect from the current connection.
-   * 
-   * @return {Promise<MoneroConnectionManager>} this connection manager for chaining
-   */
-  async disconnect() {
-    await this.setConnection(undefined);
-    return this;
-  }
-  
-  /**
-   * Remove all connections.
-   * 
-   * @return {Promise<MoneroConnectonManager>} this connection manager for chaining
-   */
-  async clear() {
-    this._connections.splice(0, this._connections.length);
-    if (this._currentConnection) {
-      this._currentConnection = undefined;
-      await this._onConnectionChanged(undefined);
-    }
-    return this;
-  }
-  
-  /**
-   * Reset to default state.
-   * 
-   * @return {MoneroConnectonManager} this connection manager for chaining
-   */
-  reset() {
-    this.removeListeners();
-    this.stopPolling();
-    this.clear();
-    this._timeoutMs = MoneroConnectionManager.DEFAULT_TIMEOUT;
-    this._autoSwitch = MoneroConnectionManager.DEFAULT_AUTOSWITCH;
-    return this;
-  }
-
-  // ------------------------------ PRIVATE HELPERS ---------------------------
-  
-  async _onConnectionChanged(connection) {
-    let promises = [];
-    for (let listener of this._listeners) promises.push(listener.onConnectionChanged(connection));
-    return Promise.all(promises);
-  }
-  
-  _getConnectionsInAscendingPriority() {
-    let connectionPriorities = new Map();
-    for (let connection of this._connections) {
-      if (!connectionPriorities.has(connection.getPriority())) connectionPriorities.set(connection.getPriority(), []);
-      connectionPriorities.get(connection.getPriority()).push(connection);
-    }
-    let ascendingPriorities = new Map([...connectionPriorities].sort((a, b) => parseInt(a[0]) - parseInt(b[0]))); // create map in ascending order
-    let ascendingPrioritiesList = [];
-    for (let priorityConnections of ascendingPriorities.values()) ascendingPrioritiesList.push(priorityConnections);
-    if (connectionPriorities.has(0)) ascendingPrioritiesList.push(ascendingPrioritiesList.splice(0, 1)[0]); // move priority 0 to end
-    return ascendingPrioritiesList;
-  }
-  
-  _compareConnections(c1, c2) {
-    
-      // current connection is first
-      if (c1 === this._currentConnection) return -1;
-      if (c2 === this._currentConnection) return 1;
-      
-      // order by availability then priority then by name
-      if (c1.isOnline() === c2.isOnline()) {
-        if (c1.getPriority() === c2.getPriority()) return c1.getUri().localeCompare(c2.getUri());
-        else return c1.getPriority() == 0 ? 1 : c2.getPriority() == 0 ? -1 : c1.getPriority() - c2.getPriority();
-      } else {
-        if (c1.isOnline()) return -1;
-        else if (c2.isOnline()) return 1;
-        else if (c1.isOnline() === undefined) return -1;
-        else return 1; // c1 is offline
-      }
-  }
-
-  _startPollingConnection(periodMs) {
-    this._poller = new TaskLooper(async () => {
-      try { await this.checkConnection(); }
-      catch (err) { console.error("Error checking connection: " + err.message); }
-    });
-    this._poller.start(periodMs);
-    return this;
-  }
-
-  _startPollingConnections(periodMs) {
-    this._poller = new TaskLooper(async () => {
-      try { await this.checkConnections(); }
-      catch (err) { console.error("Error checking connections: " + err.message); }
-    });
-    this._poller.start(periodMs);
-    return this;
-  }
-
-  _startPollingPrioritizedConnections(periodMs, excludedConnections) {
-    this._poller = new TaskLooper(async () => {
-      try { await this._checkPrioritizedConnections(excludedConnections); }
-      catch (err) { console.error("Error checking connections: " + err.message); }
-    });
-    this._poller.start(periodMs);
-    return this;
-  }
-
-  async _checkPrioritizedConnections(excludedConnections) {
-    for (let prioritizedConnections of this._getConnectionsInAscendingPriority()) {
-      let hasConnection = await this._checkConnections(prioritizedConnections, excludedConnections);
-      if (hasConnection) return;
-    }
-  }
-
-  async _checkConnections(connections, excludedConnections) {
-    try {
-
-      // check connections in parallel
-      let that = this;
-      let checkPromises = [];
-      let hasConnection = false;
-      for (let connection of connections) {
-        if (excludedConnections && GenUtils.arrayContains(excludedConnections, connection)) continue;
-        checkPromises.push(new Promise(async function(resolve, reject) {
-          try {
-            let change = await connection.checkConnection(that._timeoutMs);
-            if (change && connection === that.getConnection()) await that._onConnectionChanged(connection);
-            if (connection.isConnected() && !hasConnection) {
-              hasConnection = true;
-              if (!that.isConnected() && that._autoSwitch) await that.setConnection(connection); // set first available connection if disconnected
-            }
-            resolve();
-          } catch (err) {
-            reject(err);
-          }
-        }));
-      }
-      await Promise.all(checkPromises);
-
-      // process responses
-      await this._processResponses(connections);
-      return hasConnection;
-    } catch (err) {
-      throw new MoneroError(err);
-    }
-  }
-
-  async _processResponses(responses) {
-
-    // add non-existing connections
-    for (let connection of responses) {
-      if (!this._responseTimes.has(connection.getUri())) this._responseTimes.set(connection.getUri(), []);
-    }
-
-    // insert response times or undefined
-    this._responseTimes.forEach((times, connection) => {
-      times.unshift(GenUtils.arrayContains(responses, connection) ? connection.getResponseTime() : undefined);
-
-      // remove old response times
-      if (times.length > MoneroConnectionManager.MIN_BETTER_RESPONSES) times.pop();
-    });
-
-    // update best connection based on responses and priority
-    await this._updateBestConnectionInPriority();
-  }
-
-  async _updateBestConnectionInPriority() {
-    if (!this._autoSwitch) return;
-    for (let prioritizedConnections of this._getConnectionsInAscendingPriority()) {
-      if (await this._updateBestConnectionFromResponses(prioritizedConnections)) break;
-    }
-  }
-
- async _updateBestConnectionFromResponses(responses) {
-    let bestConnection = this.isConnected() ? this.getConnection() : undefined;
-    if (bestConnection && (this._responseTimes.has(bestConnection.getUri()) || this._responseTimes.get(bestConnection.getUri()).length < MoneroConnectionManager.MIN_BETTER_RESPONSES)) return bestConnection;
-    if (this.isConnected()) {
-
-      // check if connection is consistently better
-      for (let connection of responses) {
-        if (connection === bestConnection) continue;
-        if (!this._responseTimes.has(connection.getUri()) || this._responseTimes.get(connection.getUri()).length < MIN_BETTER_RESPONSES) continue;
-        let better = true;
-        for (let i = 0; i < MIN_BETTER_RESPONSES; i++) {
-          if (this._responseTimes.get(connection.getUri())[i] === undefined || this._responseTimes.get(connection.getUri())[i] >= this._responseTimes.get(bestConnection.getUri())[i]) {
-            better = false;
-            break;
-          }
-        }
-        if (better) bestConnection = connection;
-      }
-    } else {
-      for (let connection of responses) {
-        if (connection.isConnected() && (!bestConnection || connection.getResponseTime() < bestConnection.getResponseTime())) bestConnection = connection;
-      }
-    }
-    if (bestConnection) await this.setConnection(bestConnection);
-    return bestConnection;
-  }
-}
-
-MoneroConnectionManager.DEFAULT_TIMEOUT = 5000;
-MoneroConnectionManager.DEFAULT_POLL_PERIOD = 20000;
-MoneroConnectionManager.DEFAULT_AUTO_SWITCH = true;
-MoneroConnectionManager.MIN_BETTER_RESPONSES = 3;
-
-module.exports = MoneroConnectionManager;
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_MoneroConnectionManagerListener.js.html b/docs/src_main_js_common_MoneroConnectionManagerListener.js.html deleted file mode 100644 index efce10294..000000000 --- a/docs/src_main_js_common_MoneroConnectionManagerListener.js.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/MoneroConnectionManagerListener.js - - - - - - - - - - -
- -

Source: src/main/js/common/MoneroConnectionManagerListener.js

- - - - - - -
-
-
/**
- * Default connection manager listener which takes no action on notifications.
- */
-class MoneroConnectionManagerListener {
-  
-  /**
-   * Notified on connection change events.
-   * 
-   * @param {MoneroRpcConnection} connection - the connection manager's current connection
-   */
-  async onConnectionChanged(connection) { }
-}
-
-module.exports = MoneroConnectionManagerListener;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_MoneroError.js.html b/docs/src_main_js_common_MoneroError.js.html deleted file mode 100644 index 1132bf405..000000000 --- a/docs/src_main_js_common_MoneroError.js.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/MoneroError.js - - - - - - - - - - -
- -

Source: src/main/js/common/MoneroError.js

- - - - - - -
-
-
/**
- * Exception when interacting with a Monero wallet or daemon.
- */
-class MoneroError extends Error {
-  
-  /**
-   * Constructs the error.
-   * 
-   * @param {string} message is a human-readable message of the error
-   * @param {int} code is the error code (optional)
-   */
-  constructor(message, code) {
-    super(message);
-    this.code = code;
-  }
-  
-  getCode() {
-    return this.code;
-  }
-  
-  toString() {
-    if (this.message === undefined && this.getCode() === undefined) return super.message;
-    let str = "";
-    if (this.getCode() !== undefined) str += this.getCode() + ": ";
-    str += this.message;
-    return str;
-  }
-}
-
-module.exports = MoneroError;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_MoneroRpcConnection.js.html b/docs/src_main_js_common_MoneroRpcConnection.js.html deleted file mode 100644 index 42bd98a3b..000000000 --- a/docs/src_main_js_common_MoneroRpcConnection.js.html +++ /dev/null @@ -1,467 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/MoneroRpcConnection.js - - - - - - - - - - -
- -

Source: src/main/js/common/MoneroRpcConnection.js

- - - - - - -
-
-
const GenUtils = require("./GenUtils");
-const HttpClient = require("./HttpClient");
-const LibraryUtils = require("./LibraryUtils");
-const MoneroError = require("../common/MoneroError");
-const MoneroRpcError = require("../common/MoneroRpcError");
-const MoneroUtils = require("./MoneroUtils");
-
-/**
- * Maintains a connection and sends requests to a Monero RPC API.
- */
-class MoneroRpcConnection {
-  
-  /**
-   * <p>Construct a RPC connection.</p>
-   * 
-   * <p>Examples:</p>
-   * 
-   * <code>
-   * let connection1 = new MoneroRpcConnection("http://localhost:38081", "daemon_user", "daemon_password_123")<br><br>
-   * 
-   * let connection2 = new MoneroRpcConnection({<br>
-   * &nbsp;&nbsp; uri: http://localhost:38081,<br>
-   * &nbsp;&nbsp; username: "daemon_user",<br>
-   * &nbsp;&nbsp; password: "daemon_password_123",<br>
-   * &nbsp;&nbsp; rejectUnauthorized: false, // accept self-signed certificates e.g. for local development<br>
-   * &nbsp;&nbsp; proxyToWorker: true // proxy request to worker (default false)<br>
-   * });
-   * </code>
-   * 
-   * @param {string|object|MoneroRpcConnection} uriOrConfigOrConnection - RPC endpoint URI, MoneroRpcConnection, or equivalent JS object
-   * @param {string} uriOrConfigOrConnection.uri - URI of the RPC endpoint
-   * @param {string} uriOrConfigOrConnection.username - username to authenticate with the RPC endpoint (optional)
-   * @param {string} uriOrConfigOrConnection.password - password to authenticate with the RPC endpoint (optional)
-   * @param {boolean} uriOrConfigOrConnection.rejectUnauthorized - rejects self-signed certificates if true (default true)
-   * @param {boolean} uriOrConfigOrConnection.proxyToWorker - proxy requests to worker
-   * @param {string} username - username to authenticate with the RPC endpoint (optional)
-   * @param {string} password - password to authenticate with the RPC endpoint (optional)
-   * @param {boolean} rejectUnauthorized - reject self-signed certificates if true (default true)
-   */
-  constructor(uriOrConfigOrConnection, username, password, rejectUnauthorized, proxyToWorker) {
-    
-    // validate and normalize config
-    if (typeof uriOrConfigOrConnection === "string") {
-      this._config = {uri: uriOrConfigOrConnection};
-      this.setCredentials(username, password);
-      if (rejectUnauthorized !== undefined) this._config.rejectUnauthorized = rejectUnauthorized;
-      if (proxyToWorker !== undefined) this._config.proxyToWorker = proxyToWorker;
-    } else if (typeof uriOrConfigOrConnection === "object") {
-      if (username !== undefined || password !== undefined || rejectUnauthorized !== undefined || proxyToWorker !== undefined) throw new MoneroError("Can provide config object or params but not both");
-      if (uriOrConfigOrConnection instanceof MoneroRpcConnection) this._config = Object.assign({}, uriOrConfigOrConnection.getConfig());
-      else this._config = Object.assign({}, uriOrConfigOrConnection);
-      this.setCredentials(this._config.username, this._config.password);
-    } else if (uriOrConfigOrConnection !== undefined) {
-      throw new MoneroError("Invalid configuration to MoneroRpcConnection; must be string or MoneroRpcConnection or equivalent JS object");
-    }
-    
-    // merge default config
-    this._config = Object.assign({}, MoneroRpcConnection.DEFAULT_CONFIG, this._config);
-    
-    // normalize uri
-    if (this._config.uri) this._config.uri = GenUtils.normalizeUri(this._config.uri);
-    
-    // fail with friendly message if using old api
-    if (this._config.user || this._config.pass) throw new MoneroError("Authentication fields 'user' and 'pass' have been renamed to 'username' and 'password'.  Please update to the new api");
-    
-    // check for unsupported fields
-    for (let key of Object.keys(this._config)) {
-      if (!GenUtils.arrayContains(MoneroRpcConnection.SUPPORTED_FIELDS, key)) {
-        throw new MoneroError("RPC connection includes unsupported field: '" + key + "'");
-      }
-    }
-  }
-  
-  setCredentials(username, password) {
-    if (username === "") username = undefined;
-    if (password === "") password = undefined;
-    if (username || password) {
-      if (!username) throw new MoneroError("username must be defined because password is defined");
-      if (!password) throw new MoneroError("password must be defined because username is defined");
-    }
-    if (this._config.username === "") this._config.username = undefined;
-    if (this._config.password === "") this._config.password = undefined;
-    if (this._config.username !== username || this._config.password !== password) {
-      this._isOnline = undefined;
-      this._isAuthenticated = undefined;
-    }
-    this._config.username = username;
-    this._config.password = password;
-    return this;
-  }
-  
-  getUri() {
-    return this._config.uri;
-  }
-  
-  getUsername() {
-    return this._config.username ? this._config.username : "";
-  }
-  
-  getPassword() {
-    return this._config.password ? this._config.password : "";
-  }
-  
-  getRejectUnauthorized() {
-    return this._config.rejectUnauthorized;
-  }
-  
-  setProxyToWorker(proxyToWorker) {
-    this._config.proxyToWorker = proxyToWorker;
-    return this;
-  }
-  
-  getProxyToWorker() {
-    return this._config.proxyToWorker;
-  }
-  
-  getConfig() {
-    return this._config;
-  }
-  
-  getPriority() {
-    return this._config.priority; 
-  }
-  
-  /**
-   * Set the connection's priority relative to other connections. Priority 1 is highest,
-   * then priority 2, etc. The default priority of 0 is lowest priority.
-   * 
-   * @param {int} priority - the connection priority (default 0)
-   * @return {MoneroRpcConnection} this connection
-   */
-  setPriority(priority) {
-    if (!(priority >= 0)) throw new MoneroError("Priority must be >= 0");
-    this._config.priority = priority;
-    return this;
-  }
-  
-  setAttribute(key, value) {
-    if (!this.attributes) this.attributes = new Map();
-    this.attributes.put(key, value);
-    return this;
-  }
-  
-  getAttribute(key) {
-    return this.attributes.get(key);
-  }
-  
-  /**
-   * Check the connection status to update isOnline, isAuthenticated, and response time.
-   * 
-   * @param {int} timeoutInMs - maximum response time before considered offline
-   * @return {Promise<boolean>} true if there is a change in status, false otherwise
-   */
-  async checkConnection(timeoutInMs) {
-    let isOnlineBefore = this._isOnline;
-    let isAuthenticatedBefore = this._isAuthenticated;
-    let startTime = Date.now();
-    try {
-      if (this._fakeDisconnected) throw new Error("Connection is fake disconnected");
-      let heights = [];
-      for (let i = 0; i < 100; i++) heights.push(i);
-      await this.sendBinaryRequest("get_blocks_by_height.bin", {heights: heights}); // assume daemon connection
-      this._isOnline = true;
-      this._isAuthenticated = true;
-    } catch (err) {
-      this._isOnline = false;
-      this._isAuthenticated = undefined;
-      this._responseTime = undefined;
-      if (err instanceof MoneroRpcError) {
-        if (err.getCode() === 401) {
-          this._isOnline = true;
-          this._isAuthenticated = false;
-        } else if (err.getCode() === 404) { // fallback to latency check
-          this._isOnline = true;
-          this._isAuthenticated = true;
-        }
-      }
-    }
-    if (this._isOnline) this._responseTime = Date.now() - startTime;
-    return isOnlineBefore !== this._isOnline || isAuthenticatedBefore !== this._isAuthenticated;
-  }
-  
-  /**
-   * Indicates if the connection is connected according to the last call to checkConnection().<br><br>
-   * 
-   * Note: must call checkConnection() manually unless using MoneroConnectionManager.
-   * 
-   * @return {boolean|undefined} true or false to indicate if connected, or undefined if checkConnection() has not been called
-   */
-  isConnected() {
-    return this._isOnline === undefined ? undefined : this._isOnline && this._isAuthenticated !== false;
-  }
-
-  /**
-   * Indicates if the connection is online according to the last call to checkConnection().<br><br>
-   * 
-   * Note: must call checkConnection() manually unless using MoneroConnectionManager.
-   * 
-   * @return {boolean|undefined} true or false to indicate if online, or undefined if checkConnection() has not been called
-   */
-  isOnline() {
-    return this._isOnline;
-  }
-
-  /**
-   * Indicates if the connection is authenticated according to the last call to checkConnection().<br><br>
-   * 
-   * Note: must call checkConnection() manually unless using MoneroConnectionManager.
-   * 
-   * @return {boolean|undefined} true if authenticated or no authentication, false if not authenticated, or undefined if checkConnection() has not been called
-   */
-  isAuthenticated() {
-    return this._isAuthenticated;
-  }
-
-  getResponseTime() {
-    return this._responseTime;
-  }
-  
-  /**
-   * Send a JSON RPC request.
-   * 
-   * @param {string} method - JSON RPC method to invoke
-   * @param {object} params - request parameters
-   * @param {int} timeoutInMs - request timeout in milliseconds
-   * @return {object} is the response map
-   */
-  async sendJsonRequest(method, params, timeoutInMs) {
-    try {
-      
-      // build request body
-      let body = JSON.stringify({  // body is stringified so text/plain is returned so BigIntegers are preserved
-        id: "0",
-        jsonrpc: "2.0",
-        method: method,
-        params: params
-      });
-
-      // logging
-      if (LibraryUtils.getLogLevel() >= 2) LibraryUtils.log(2, "Sending json request with method '" + method + "' and body: " + body);
-      
-      // send http request
-      let startTime = new Date().getTime();
-      let resp = await HttpClient.request({
-        method: "POST",
-        uri: this.getUri() + '/json_rpc',
-        username: this.getUsername(),
-        password: this.getPassword(),
-        body: body,
-        timeout: timeoutInMs,
-        rejectUnauthorized: this._config.rejectUnauthorized,
-        requestApi: GenUtils.isFirefox() ? "xhr" : "fetch",  // firefox issue: https://bugzilla.mozilla.org/show_bug.cgi?id=1491010
-        proxyToWorker: this._config.proxyToWorker
-      });
-      
-      // validate response
-      MoneroRpcConnection._validateHttpResponse(resp);
-      
-      // deserialize response
-      if (resp.body[0] != '{') throw resp.body;
-      resp = JSON.parse(resp.body.replace(/("[^"]*"\s*:\s*)(\d{16,})/g, '$1"$2"'));  // replace 16 or more digits with strings and parse
-      if (LibraryUtils.getLogLevel() >= 3) {
-        let respStr = JSON.stringify(resp);
-        LibraryUtils.log(3, "Received response from method='" + method + "', response=" + respStr.substring(0, Math.min(1000, respStr.length) + "(" + (new Date().getTime() - startTime) + " ms)"));
-      }
-      
-      // check rpc response for errors
-      MoneroRpcConnection._validateRpcResponse(resp, method, params);
-      return resp;
-    } catch (err) {
-      if (err instanceof MoneroRpcError) throw err;
-      else throw new MoneroRpcError(err, err.statusCode, method, params);
-    }
-  }
-  
-  /**
-   * Send a RPC request to the given path and with the given paramters.
-   * 
-   * E.g. "/get_transactions" with params
-   * 
-   * @param {string} path - JSON RPC path to invoke
-   * @param {object} params - request parameters
-   * @param {int} timeoutInMs - request timeout in milliseconds
-   * @return {object} is the response map
-   */
-  async sendPathRequest(path, params, timeoutInMs) {
-    try {
-
-      // logging
-      if (LibraryUtils.getLogLevel() >= 2) LibraryUtils.log(2, "Sending path request with path '" + path + "' and params: " + JSON.stringify(params));
-      
-      // send http request
-      let startTime = new Date().getTime();
-      let resp = await HttpClient.request({
-        method: "POST",
-        uri: this.getUri() + '/' + path,
-        username: this.getUsername(),
-        password: this.getPassword(),
-        body: JSON.stringify(params),  // body is stringified so text/plain is returned so BigIntegers are preserved
-        timeout: timeoutInMs,
-        rejectUnauthorized: this._config.rejectUnauthorized,
-        requestApi: GenUtils.isFirefox() ? "xhr" : "fetch",
-        proxyToWorker: this._config.proxyToWorker
-      });
-      
-      // validate response
-      MoneroRpcConnection._validateHttpResponse(resp);
-      
-      // deserialize response
-      if (resp.body[0] != '{') throw resp.body;
-      resp = JSON.parse(resp.body.replace(/("[^"]*"\s*:\s*)(\d{16,})/g, '$1"$2"'));  // replace 16 or more digits with strings and parse
-      if (typeof resp === "string") resp = JSON.parse(resp);  // TODO: some responses returned as strings?
-      if (LibraryUtils.getLogLevel() >= 3) {
-        let respStr = JSON.stringify(resp);
-        LibraryUtils.log(3, "Received response from path='" + method + "', response=" + respStr.substring(0, Math.min(1000, respStr.length) + "(" + (new Date().getTime() - startTime) + " ms)"));
-      }
-      
-      // check rpc response for errors
-      MoneroRpcConnection._validateRpcResponse(resp, path, params);
-      return resp;
-    } catch (err) {
-      if (err instanceof MoneroRpcError) throw err;
-      else throw new MoneroRpcError(err, err.statusCode, path, params);
-    }
-  }
-  
-  /**
-   * Send a binary RPC request.
-   * 
-   * @param {string} path - path of the binary RPC method to invoke
-   * @param {object} params - request parameters
-   * @param {int} timeoutInMs - request timeout in milliseconds
-   * @return {Uint8Array} the binary response
-   */
-  async sendBinaryRequest(path, params, timeoutInMs) {
-    
-    // serialize params
-    let paramsBin = await MoneroUtils.jsonToBinary(params);
-    
-    try {
-
-      // logging
-      if (LibraryUtils.getLogLevel() >= 2) LibraryUtils.log(2, "Sending binary request with path '" + path + "' and params: " + JSON.stringify(params));
-      
-      // send http request
-      let resp = await HttpClient.request({
-        method: "POST",
-        uri: this.getUri() + '/' + path,
-        username: this.getUsername(),
-        password: this.getPassword(),
-        body: paramsBin,
-        timeout: timeoutInMs,
-        rejectUnauthorized: this._config.rejectUnauthorized,
-        requestApi: GenUtils.isFirefox() ? "xhr" : "fetch",
-        proxyToWorker: this._config.proxyToWorker
-      });
-      
-      // validate response
-      MoneroRpcConnection._validateHttpResponse(resp);
-      
-      // process response
-      resp = resp.body;
-      if (!(resp instanceof Uint8Array)) {
-        console.error("resp is not uint8array");
-        console.error(resp);
-      }
-      if (resp.error) throw new MoneroRpcError(resp.error.message, resp.error.code, path, params);
-      return resp;
-    } catch (err) {
-      if (err instanceof MoneroRpcError) throw err;
-      else throw new MoneroRpcError(err, err.statusCode, path, params);
-    }
-  }
-
-  toJson() {
-    return this._config;
-  }
-  
-  toString() {
-    return this.getUri() + " (username=" + this.getUsername() + ", password=" + (this.getPassword() ? "***" : this.getPassword()) + ", priority=" + this.getPriority() + ", isOnline=" + this.isOnline() + ", isAuthenticated=" + this.isAuthenticated() + ")";
-  }
-  
-  // ------------------------------ PRIVATE HELPERS --------------------------
-  
-  static _validateHttpResponse(resp) {
-    let code = resp.statusCode;
-    if (code < 200 || code > 299) {
-      let content = resp.body;
-      throw new MoneroRpcError(code + " " + resp.statusText + (!content ? "" : (": " + content)), code, undefined, undefined);
-    }
-  }
-  
-  static _validateRpcResponse(resp, method, params) {
-    if (!resp.error) return;
-    throw new MoneroRpcError(resp.error.message, resp.error.code, method, params);
-  }
-  
-  _setFakeDisconnected(fakeDisconnected) { // used to test connection manager
-    this._fakeDisconnected = fakeDisconnected; 
-  }
-}
-
-/**
- * Default RPC configuration.
- */
-MoneroRpcConnection.DEFAULT_CONFIG = {
-    uri: undefined,
-    username: undefined,
-    password: undefined,
-    rejectUnauthorized: true, // reject self-signed certificates if true
-    proxyToWorker: false,
-    priority: 0
-}
-
-MoneroRpcConnection.SUPPORTED_FIELDS = ["uri", "username", "password", "rejectUnauthorized", "priority", "proxyToWorker"];
-
-module.exports = MoneroRpcConnection;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_MoneroRpcError.js.html b/docs/src_main_js_common_MoneroRpcError.js.html deleted file mode 100644 index 6660067d3..000000000 --- a/docs/src_main_js_common_MoneroRpcError.js.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/MoneroRpcError.js - - - - - - - - - - -
- -

Source: src/main/js/common/MoneroRpcError.js

- - - - - - -
-
-
const MoneroError = require("./MoneroError");
-
-/**
- * Error when interacting with Monero RPC.
- */
-class MoneroRpcError extends MoneroError {
-  
-  /**
-   * Constructs the error.
-   * 
-   * @param {string} rpcDescription is a description of the error from rpc
-   * @param {int} rpcCode is the error code from rpc
-   * @param {string} rpcMethod is the rpc method invoked
-   * @param {object} rpcParams are parameters sent with the rpc request
-   */
-  constructor(rpcDescription, rpcCode, rpcMethod, rpcParams) {
-    super(rpcDescription, rpcCode);
-    this.rpcMethod = rpcMethod;
-    this.rpcParams = rpcParams;
-  }
-  
-  getRpcMethod() {
-    return this.rpcMethod;
-  }
-  
-  getRpcParams() {
-    return this.rpcParams;
-  }
-  
-  toString() {
-    let str = super.toString();
-    if (this.rpcMethod || this.rpcParams) str += "\nRequest: '" + this.rpcMethod + "' with params: " + (typeof this.rpcParams === "object" ? JSON.stringify(this.rpcParams) : this.rpcParams);
-    return str;
-  }
-}
-
-module.exports = MoneroRpcError;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_MoneroUtils.js.html b/docs/src_main_js_common_MoneroUtils.js.html deleted file mode 100644 index 38b4148bc..000000000 --- a/docs/src_main_js_common_MoneroUtils.js.html +++ /dev/null @@ -1,503 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/MoneroUtils.js - - - - - - - - - - -
- -

Source: src/main/js/common/MoneroUtils.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("./biginteger").BigInteger;
-const GenUtils = require("./GenUtils");
-const LibraryUtils = require("./LibraryUtils");
-const MoneroError = require("./MoneroError");
-const MoneroIntegratedAddress = require("../wallet/model/MoneroIntegratedAddress");
-const MoneroNetworkType = require("../daemon/model/MoneroNetworkType");
-
-/**
- * Collection of Monero utilities. Runs in a worker thread by default.
- * 
- * @hideconstructor
- */
-class MoneroUtils {
-    
-  /**
-   * <p>Get the version of the monero-javascript library.<p>
-   * 
-   * @return {string} the version of this monero-javascript library
-   */
-  static getVersion() {
-    return "0.8.3";
-  }
-  
-  /**
-   * Enable or disable proxying these utilities to a worker thread.
-   * 
-   * @param {boolean} proxyToWorker - specifies if utilities should be proxied to a worker
-   */
-  static setProxyToWorker(proxyToWorker) {
-    MoneroUtils.PROXY_TO_WORKER = proxyToWorker || false;
-  }
-  
-  /**
-   * Validate the given mnemonic, throw an error if invalid.
-   *
-   * TODO: improve validation, use network type
-   * 
-   * @param {string} mnemonic - mnemonic to validate
-   */
-  static async validateMnemonic(mnemonic) {
-    assert(mnemonic, "Mnemonic phrase is not initialized");
-    let words = mnemonic.split(" ");
-    if (words.length !== MoneroUtils.NUM_MNEMONIC_WORDS) throw new MoneroError("Mnemonic phrase is " + words.length + " words but must be " + MoneroUtils.NUM_MNEMONIC_WORDS);
-  }
-  
-  /**
-   * Indicates if a private view key is valid.
-   * 
-   * @param {string} privateViewKey is the private view key to validate
-   * @return {Promise<bool>} true if the private view key is valid, false otherwise
-   */
-  static async isValidPrivateViewKey(privateViewKey) {
-    try {
-      await MoneroUtils.validatePrivateViewKey(privateViewKey);
-      return true;
-    } catch (e) {
-      return false;
-    }
-  }
-  
-  /**
-   * Indicates if a public view key is valid.
-   * 
-   * @param {string} publicViewKey is the public view key to validate
-   * @return {Promise<bool>} true if the public view key is valid, false otherwise
-   */
-  static async isValidPublicViewKey(publicViewKey) {
-    try {
-      await MoneroUtils.validatePublicViewKey(publicViewKey);
-      return true;
-    } catch (e) {
-      return false;
-    }
-  }
-  
-  /**
-   * Indicates if a private spend key is valid.
-   * 
-   * @param {string} privateSpendKey is the private spend key to validate
-   * @return {Promise<bool>} true if the private spend key is valid, false otherwise
-   */
-  static async isValidPrivateSpendKey(privateSpendKey) {
-    try {
-      await MoneroUtils.validatePrivateSpendKey(privateSpendKey);
-      return true;
-    } catch (e) {
-      return false;
-    }
-  }
-  
-  /**
-   * Indicates if a public spend key is valid.
-   * 
-   * @param {string} publicSpendKey is the public spend key to validate
-   * @return {Promise<bool>} true if the public spend key is valid, false otherwise
-   */
-  static async isValidPublicSpendKey(publicSpendKey) {
-    try {
-      await MoneroUtils.validatePublicSpendKey(publicSpendKey);
-      return true;
-    } catch (e) {
-      return false;
-    }
-  }
-  
-  /**
-   * Validate the given private view key, throw an error if invalid.
-   *
-   * @param {string} privateViewKey - private view key to validate
-   */
-  static async validatePrivateViewKey(privateViewKey) {
-    if (!MoneroUtils._isHex64(privateViewKey)) throw new MoneroError("private view key expected to be 64 hex characters");
-  }
-  
-  /**
-   * Validate the given public view key, throw an error if invalid.
-   *
-   * @param {string} publicViewKey - public view key to validate
-   */
-  static async validatePublicViewKey(publicViewKey) {
-    if (!MoneroUtils._isHex64(publicViewKey)) throw new MoneroError("public view key expected to be 64 hex characters");
-  }
-  
-  /**
-   * Validate the given private spend key, throw an error if invalid.
-   *
-   * @param {string} privateSpendKey - private spend key to validate
-   */
-  static async validatePrivateSpendKey(privateSpendKey) {
-    if (!MoneroUtils._isHex64(privateSpendKey)) throw new MoneroError("private spend key expected to be 64 hex characters");
-  }
-  
-  /**
-   * Validate the given public spend key, throw an error if invalid.
-   *
-   * @param {string} publicSpendKey - public spend key to validate
-   */
-  static async validatePublicSpendKey(publicSpendKey) {
-    if (!MoneroUtils._isHex64(publicSpendKey)) throw new MoneroError("public spend key expected to be 64 hex characters");
-  }
-  
-  /**
-   * Get an integrated address.
-   * 
-   * @param {MoneroNetworkType} networkType - network type of the integrated address
-   * @param {string} standardAddress - address to derive the integrated address from
-   * @param {string} paymentId - optionally specifies the integrated address's payment id (defaults to random payment id)
-   * @return {Promise<MoneroIntegratedAddress>} the integrated address
-   */
-  static async getIntegratedAddress(networkType, standardAddress, paymentId) {
-    if (MoneroUtils.PROXY_TO_WORKER) return new MoneroIntegratedAddress(await LibraryUtils.invokeWorker(undefined, "moneroUtilsGetIntegratedAddress", Array.from(arguments)));
-  
-    // validate inputs
-    MoneroNetworkType.validate(networkType);
-    assert(typeof standardAddress === "string", "Address is not string");
-    assert(standardAddress.length > 0, "Address is empty");
-    assert(GenUtils.isBase58(standardAddress), "Address is not base 58");
-    
-    // load keys module by default
-    if (LibraryUtils.getWasmModule() === undefined) await LibraryUtils.loadKeysModule();
-    
-    // get integrated address in queue
-    return LibraryUtils.getWasmModule().queueTask(async function() {
-      let integratedAddressJson = LibraryUtils.getWasmModule().get_integrated_address_util(networkType, standardAddress, paymentId ? paymentId : "");
-      if (integratedAddressJson.charAt(0) !== '{') throw new MoneroError(integratedAddressJson);
-      return new MoneroIntegratedAddress(JSON.parse(integratedAddressJson));
-    });
-  }
-  
-  /**
-   * Determine if the given address is valid.
-   * 
-   * @param {string} address - address
-   * @param {MoneroNetworkType} networkType - network type of the address to validate
-   * @return {Promise<boolean>} true if the address is valid, false otherwise
-   */
-  static async isValidAddress(address, networkType) {
-    try {
-      await MoneroUtils.validateAddress(address, networkType);
-      return true;
-    } catch (err) {
-      return false;
-    }
-  }
-  
-  /**
-   * Validate the given address, throw an error if invalid.
-   *
-   * @param {string} address - address to validate
-   * @param {MoneroNetworkType} networkType - network type of the address to validate
-   */
-  static async validateAddress(address, networkType) {
-    if (MoneroUtils.PROXY_TO_WORKER) return LibraryUtils.invokeWorker(undefined, "moneroUtilsValidateAddress", Array.from(arguments));
-    
-    // validate inputs
-    assert(typeof address === "string", "Address is not string");
-    assert(address.length > 0, "Address is empty");
-    assert(GenUtils.isBase58(address), "Address is not base 58");
-    MoneroNetworkType.validate(networkType);
-    
-    // load keys module by default
-    if (LibraryUtils.getWasmModule() === undefined) await LibraryUtils.loadKeysModule();
-    
-    // validate address in queue
-    return LibraryUtils.getWasmModule().queueTask(async function() {
-      let errMsg = LibraryUtils.getWasmModule().validate_address(address, networkType);
-      if (errMsg) throw new MoneroError(errMsg);
-    });
-  }
-  
-  /**
-   * Determine if the given payment id is valid.
-   * 
-   * @param {string} paymentId - payment id to determine if valid
-   * @return {Promise<bool>} true if the payment id is valid, false otherwise
-   */
-  static async isValidPaymentId(paymentId) {
-    try {
-      await MoneroUtils.validatePaymentId(paymentId);
-      return true;
-    } catch (e) {
-      return false;
-    }
-  }
-  
-  /**
-   * Validate the given payment id, throw an error if invalid.
-   * 
-   * TODO: improve validation
-   * 
-   * @param {string} paymentId - payment id to validate 
-   */
-  static async validatePaymentId(paymentId) {
-    assert.equal(typeof paymentId, "string");
-    assert(paymentId.length === 16 || paymentId.length === 64);
-  }
-    
-  /**
-   * Decode tx extra according to https://cryptonote.org/cns/cns005.txt and
-   * returns the last tx pub key.
-   * 
-   * TODO: use c++ bridge for this
-   * 
-   * @param [byte[]] txExtra - array of tx extra bytes
-   * @return {string} the last pub key as a hexidecimal string
-   */
-  static async getLastTxPubKey(txExtra) {
-    let lastPubKeyIdx;
-    for (let i = 0; i < txExtra.length; i++) {
-      let tag = txExtra[i];
-      if (tag === 0 || tag === 2) {
-        i += 1 + txExtra[i + 1];  // advance to next tag
-      } else if (tag === 1) {
-        lastPubKeyIdx = i + 1;
-        i += 1 + 32;              // advance to next tag
-      } else throw new MoneroError("Invalid sub-field tag: " + tag);
-    }
-    return Buffer.from(new Uint8Array(txExtra.slice(lastPubKeyIdx, lastPubKeyIdx + 32))).toString("hex");
-  }
-  
-  /**
-   * Determines if two payment ids are functionally equal.
-   * 
-   * For example, 03284e41c342f032 and 03284e41c342f032000000000000000000000000000000000000000000000000 are considered equal.
-   * 
-   * @param {string} paymentId1 is a payment id to compare
-   * @param {string} paymentId2 is a payment id to compare
-   * @return {bool} true if the payment ids are equal, false otherwise
-   */
-  static paymentIdsEqual(paymentId1, paymentId2) {
-    let maxLength = Math.max(paymentId1.length, paymentId2.length);
-    for (let i = 0; i < maxLength; i++) {
-      if (i < paymentId1.length && i < paymentId2.length && paymentId1[i] !== paymentId2[i]) return false;
-      if (i >= paymentId1.length && paymentId2[i] !== '0') return false;
-      if (i >= paymentId2.length && paymentId1[i] !== '0') return false;
-    }
-    return true;
-  }
-  
-  /**
-   * Merges a transaction into a list of existing transactions.
-   * 
-   * @param {MoneroTx[]} txs - existing transactions to merge into
-   * @param {MoneroTx} tx - transaction to merge into the list
-   */
-  static mergeTx(txs, tx) {
-    for (let aTx of txs) {
-      if (aTx.getHash() === tx.getHash()) {
-        aTx.merge(tx);
-        return;
-      }
-    }
-    txs.push(tx);
-  }
-  
-  /**
-   * Convert the given JSON to a binary Uint8Array using Monero's portable storage format.
-   * 
-   * @param {object} json - json to convert to binary
-   * @return {Promise<Uint8Array>} the json converted to portable storage binary
-   */
-  static async jsonToBinary(json) {
-    if (MoneroUtils.PROXY_TO_WORKER) return LibraryUtils.invokeWorker(undefined, "moneroUtilsJsonToBinary", Array.from(arguments));
-    
-    // load keys module by default
-    if (LibraryUtils.getWasmModule() === undefined) await LibraryUtils.loadKeysModule();
-    
-    // use wasm in queue
-    return LibraryUtils.getWasmModule().queueTask(async function() {
-      
-      // serialize json to binary which is stored in c++ heap
-      let binMemInfoStr = LibraryUtils.getWasmModule().malloc_binary_from_json(JSON.stringify(json));
-      
-      // sanitize binary memory address info
-      let binMemInfo = JSON.parse(binMemInfoStr);
-      binMemInfo.ptr = parseInt(binMemInfo.ptr);
-      binMemInfo.length = parseInt(binMemInfo.length);
-      
-      // read binary data from heap to Uint8Array
-      let view = new Uint8Array(binMemInfo.length);
-      for (let i = 0; i < binMemInfo.length; i++) {
-        view[i] = LibraryUtils.getWasmModule().HEAPU8[binMemInfo.ptr / Uint8Array.BYTES_PER_ELEMENT + i];
-      }
-      
-      // free binary on heap
-      LibraryUtils.getWasmModule()._free(binMemInfo.ptr);
-      
-      // return json from binary data
-      return view;
-    });
-  }
-  
-  /**
-   * Convert the given portable storage binary to JSON.
-   * 
-   * @param {Uint8Array} uint8arr - binary data in Monero's portable storage format
-   * @return {Promise<object>} JSON object converted from the binary data
-   */
-  static async binaryToJson(uint8arr) {
-    if (MoneroUtils.PROXY_TO_WORKER) return LibraryUtils.invokeWorker(undefined, "moneroUtilsBinaryToJson", Array.from(arguments));
-    
-    // load keys module by default
-    if (LibraryUtils.getWasmModule() === undefined) await LibraryUtils.loadKeysModule();
-    
-    // use wasm in queue
-    return LibraryUtils.getWasmModule().queueTask(async function() {
-      
-      // allocate space in c++ heap for binary
-      let ptr = LibraryUtils.getWasmModule()._malloc(uint8arr.length * uint8arr.BYTES_PER_ELEMENT);
-      let heap = new Uint8Array(LibraryUtils.getWasmModule().HEAPU8.buffer, ptr, uint8arr.length * uint8arr.BYTES_PER_ELEMENT);
-      if (ptr !== heap.byteOffset) throw new MoneroError("Memory ptr !== heap.byteOffset"); // should be equal
-      
-      // write binary to heap
-      heap.set(new Uint8Array(uint8arr.buffer));
-      
-      // create object with binary memory address info
-      let binMemInfo = { ptr: ptr, length: uint8arr.length };
-      
-      // convert binary to json str
-      const ret_string = LibraryUtils.getWasmModule().binary_to_json(JSON.stringify(binMemInfo));
-      
-      // free binary on heap
-      LibraryUtils.getWasmModule()._free(ptr);
-      
-      // parse and return json
-      return JSON.parse(ret_string);
-    });
-  }
-  
-  /**
-   * Convert the binary response from daemon RPC block retrieval to JSON.
-   * 
-   * @param {Uint8Array} uint8arr - binary response from daemon RPC when getting blocks
-   * @return {Promise<object>} JSON object with the blocks data
-   */
-  static async binaryBlocksToJson(uint8arr) {
-    if (MoneroUtils.PROXY_TO_WORKER) return LibraryUtils.invokeWorker(undefined, "moneroUtilsBinaryBlocksToJson", Array.from(arguments));
-    
-    // load keys module by default
-    if (LibraryUtils.getWasmModule() === undefined) await LibraryUtils.loadKeysModule();
-    
-    // use wasm in queue
-    return LibraryUtils.getWasmModule().queueTask(async function() {
-      
-      // allocate space in c++ heap for binary
-      let ptr = LibraryUtils.getWasmModule()._malloc(uint8arr.length * uint8arr.BYTES_PER_ELEMENT);
-      let heap = new Uint8Array(LibraryUtils.getWasmModule().HEAPU8.buffer, ptr, uint8arr.length * uint8arr.BYTES_PER_ELEMENT);
-      if (ptr !== heap.byteOffset) throw new MoneroError("Memory ptr !== heap.byteOffset"); // should be equal
-      
-      // write binary to heap
-      heap.set(new Uint8Array(uint8arr.buffer));
-      
-      // create object with binary memory address info
-      let binMemInfo = { ptr: ptr, length: uint8arr.length  }
-
-      // convert binary to json str
-      const json_str = LibraryUtils.getWasmModule().binary_blocks_to_json(JSON.stringify(binMemInfo));
-      
-      // free memory
-      LibraryUtils.getWasmModule()._free(ptr);
-      
-      // parse result to json
-      let json = JSON.parse(json_str);                                          // parsing json gives arrays of block and tx strings
-      json.blocks = json.blocks.map(blockStr => JSON.parse(blockStr));          // replace block strings with parsed blocks
-      json.txs = json.txs.map(txs => txs ? txs.map(tx => JSON.parse(tx.replace(",", "{") + "}")) : []); // modify tx string to proper json and parse // TODO: more efficient way than this json manipulation?
-      return json;
-    });
-  }
-  
-  /**
-   * Convert XMR to atomic units.
-   * 
-   * @param {number|string} amountXmr - amount in XMR to convert to atomic units
-   * @return {BigInteger} amount in atomic units
-   */
-  static xmrToAtomicUnits(amountXmr) {
-    if (typeof amountXmr === "number") amountXmr = "" + amountXmr;
-    else if (typeof amountXmr !== "string") throw new MoneroError("Must provide XMR amount as a string or js number to convert to atomic units");
-    let decimalDivisor = 1;
-    let decimalIdx = amountXmr.indexOf('.');
-    if (decimalIdx > -1) {
-      decimalDivisor = Math.pow(10, amountXmr.length - decimalIdx - 1);
-      amountXmr = amountXmr.slice(0, decimalIdx) + amountXmr.slice(decimalIdx + 1);
-    }
-    return new BigInteger(amountXmr).multiply(new BigInteger(MoneroUtils.AU_PER_XMR)).divide(new BigInteger(decimalDivisor));
-  }
-  
-  /**
-   * Convert atomic units to XMR.
-   * 
-   * @param {BigInteger|string} amountAtomicUnits - amount in atomic units to convert to XMR
-   * @return {number} amount in XMR 
-   */
-  static atomicUnitsToXmr(amountAtomicUnits) {
-    if (typeof amountAtomicUnits === "string") amountAtomicUnits = new BigInteger(amountAtomicUnits);
-    else if (!(amountAtomicUnits instanceof BigInteger)) throw new MoneroError("Must provide atomic units as BigInteger or string to convert to XMR");
-    let quotientAndRemainder = amountAtomicUnits.divRem(new BigInteger(MoneroUtils.AU_PER_XMR));
-    return Number(quotientAndRemainder[0].toJSValue() + quotientAndRemainder[1].toJSValue() / MoneroUtils.AU_PER_XMR);
-  }
-  
-  static _isHex64(str) {
-    return typeof str === "string" && str.length === 64 && GenUtils.isHex(str);
-  }
-}
-
-MoneroUtils.PROXY_TO_WORKER = true;
-MoneroUtils.NUM_MNEMONIC_WORDS = 25;
-MoneroUtils.RING_SIZE = 12;
-MoneroUtils.MAX_REQUESTS_PER_SECOND = 50;
-MoneroUtils.AU_PER_XMR = 1000000000000;
-
-module.exports = MoneroUtils;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_MoneroWebWorker.js.html b/docs/src_main_js_common_MoneroWebWorker.js.html deleted file mode 100644 index 01577b4e9..000000000 --- a/docs/src_main_js_common_MoneroWebWorker.js.html +++ /dev/null @@ -1,1037 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/MoneroWebWorker.js - - - - - - - - - - -
- -

Source: src/main/js/common/MoneroWebWorker.js

- - - - - - -
-
-
const assert = require("assert");
-const GenUtils = require("./GenUtils");
-const HttpClient = require("./HttpClient");
-const LibraryUtils = require("./LibraryUtils");
-const MoneroBan = require("../daemon/model/MoneroBan");
-const MoneroBlock = require("../daemon/model/MoneroBlock");
-const MoneroDaemonListener = require("../daemon/model/MoneroDaemonListener");
-const MoneroDaemonRpc = require("../daemon/MoneroDaemonRpc");
-const MoneroError = require("./MoneroError");
-const MoneroKeyImage = require("../daemon/model/MoneroKeyImage");
-const MoneroRpcConnection = require("./MoneroRpcConnection");
-const MoneroTxConfig = require("../wallet/model/MoneroTxConfig");
-const MoneroTxSet = require("../wallet/model/MoneroTxSet");
-const MoneroUtils = require("../common/MoneroUtils");
-const MoneroWalletConfig = require("../wallet/model/MoneroWalletConfig");
-const MoneroWalletListener = require("../wallet/model/MoneroWalletListener");
-const MoneroWalletFull = require("../wallet/MoneroWalletFull");
-
-/**
- * Worker to manage a daemon and wasm wallet off the main thread using messages.
- * 
- * Required message format: e.data[0] = object id, e.data[1] = function name, e.data[2+] = function args
- *
- * For browser applications, this file must be browserified and placed in the web app root.
- * 
- * @private
- */
-onmessage = async function(e) {
-  
-  // initialize one time
-  await self.initOneTime();
-  
-  // validate params
-  let objectId = e.data[0];
-  let fnName = e.data[1];
-  let callbackId = e.data[2];
-  assert(fnName, "Must provide function name to worker");
-  assert(callbackId, "Must provide callback id to worker");
-  if (!self[fnName]) throw new Error("Method '" + fnName + "' is not registered with worker");
-  e.data.splice(1, 2); // remove function name and callback id to apply function with arguments
-  
-  // execute worker function and post result to callback
-  try {
-    postMessage([objectId, callbackId, {result: await self[fnName].apply(null, e.data)}]);
-  } catch (e) {
-    if (!(e instanceof Error)) e = new Error(e);
-    postMessage([objectId, callbackId, {error: LibraryUtils.serializeError(e)}]);
-  }
-}
-
-self.initOneTime = async function() {
-  if (!self.isInitialized) {
-    self.WORKER_OBJECTS = {};
-    self.isInitialized = true;
-    MoneroUtils.PROXY_TO_WORKER = false;
-  }
-}
-
-// --------------------------- STATIC UTILITIES -------------------------------
-
-self.httpRequest = async function(objectId, opts) {
-  try {
-    return await HttpClient.request(Object.assign(opts, {proxyToWorker: false}));  
-  } catch (err) {
-    throw err.statusCode ? new Error(JSON.stringify({statusCode: err.statusCode, statusMessage: err.message})) : err;
-  }
-}
-
-self.setLogLevel = async function(objectId, level) {
-  return LibraryUtils.setLogLevel(level);
-}
-
-self.getWasmMemoryUsed = async function(objectId) {
-  return LibraryUtils.getWasmModule() && LibraryUtils.getWasmModule().HEAP8 ? LibraryUtils.getWasmModule().HEAP8.length : undefined;
-}
-
-// ----------------------------- MONERO UTILS ---------------------------------
-
-self.moneroUtilsGetIntegratedAddress = async function(objectId, networkType, standardAddress, paymentId) {
-  return (await MoneroUtils.getIntegratedAddress(networkType, standardAddress, paymentId)).toJson();
-}
-
-self.moneroUtilsValidateAddress = async function(objectId, address, networkType) {
-  return MoneroUtils.validateAddress(address, networkType);
-}
-
-self.moneroUtilsJsonToBinary = async function(objectId, json) {
-  return MoneroUtils.jsonToBinary(json);
-}
-
-self.moneroUtilsBinaryToJson = async function(objectId, uint8arr) {
-  return MoneroUtils.binaryToJson(uint8arr);
-}
-
-self.moneroUtilsBinaryBlocksToJson = async function(objectId, uint8arr) {
-  return MoneroUtils.binaryBlocksToJson(uint8arr);
-}
-
-// ---------------------------- DAEMON METHODS --------------------------------
-
-self.daemonAddListener = async function(daemonId, listenerId) {
-  let listener = new class extends MoneroDaemonListener {
-    async onBlockHeader(blockHeader) {
-      self.postMessage([daemonId, "onBlockHeader_" + listenerId, blockHeader.toJson()]);
-    }
-  }
-  if (!self.daemonListeners) self.daemonListeners = {};
-  self.daemonListeners[listenerId] = listener;
-  await self.WORKER_OBJECTS[daemonId].addListener(listener);
-}
-
-self.daemonRemoveListener = async function(daemonId, listenerId) {
-  if (!self.daemonListeners[listenerId]) throw new MoneroError("No daemon worker listener registered with id: " + listenerId);
-  await self.WORKER_OBJECTS[daemonId].removeListener(self.daemonListeners[listenerId]);
-  delete self.daemonListeners[listenerId];
-}
-
-self.connectDaemonRpc = async function(daemonId, config) {
-  self.WORKER_OBJECTS[daemonId] = new MoneroDaemonRpc(config);
-}
-
-self.daemonGetRpcConnection = async function(daemonId) {
-  let connection = await self.WORKER_OBJECTS[daemonId].getRpcConnection();
-  return connection ? connection.getConfig() : undefined;
-}
-
-self.daemonIsConnected = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].isConnected();
-}
-
-self.daemonGetVersion = async function(daemonId) {
-  return (await self.WORKER_OBJECTS[daemonId].getVersion()).toJson();
-}
-
-self.daemonIsTrusted = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].isTrusted();
-}
-
-self.daemonGetHeight = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].getHeight();
-}
-
-self.daemonGetBlockHash = async function(daemonId, height) {
-  return self.WORKER_OBJECTS[daemonId].getBlockHash(height);
-}
-
-self.daemonGetBlockTemplate = async function(daemonId, walletAddress, reserveSize) {
-  return (await self.WORKER_OBJECTS[daemonId].getBlockTemplate(walletAddress, reserveSize)).toJson();
-}
-
-self.daemonGetLastBlockHeader = async function(daemonId) {
-  return (await self.WORKER_OBJECTS[daemonId].getLastBlockHeader()).toJson();
-}
-
-self.daemonGetBlockHeaderByHash = async function(daemonId, hash) {
-  return (await self.WORKER_OBJECTS[daemonId].getBlockHeaderByHash(hash)).toJson();
-}
-
-self.daemonGetBlockHeaderByHeight = async function(daemonId, height) {
-  return (await self.WORKER_OBJECTS[daemonId].getBlockHeaderByHeight(height)).toJson();
-}
-
-self.daemonGetBlockHeadersByRange = async function(daemonId, startHeight, endHeight) {
-  let blockHeadersJson = [];
-  for (let blockHeader of await self.WORKER_OBJECTS[daemonId].getBlockHeadersByRange(startHeight, endHeight)) blockHeadersJson.push(blockHeader.toJson());
-  return blockHeadersJson;
-}
-
-self.daemonGetBlockByHash = async function(daemonId, blockHash) {
-  return (await self.WORKER_OBJECTS[daemonId].getBlockByHash(blockHash)).toJson();
-}
-
-self.daemonGetBlocksByHash = async function(daemonId, blockHashes, startHeight, prune) {
-  let blocksJson = [];
-  for (let block of await self.WORKER_OBJECTS[daemonId].getBlocksByHash(blockHashes, startHeight, prune)) blocksJson.push(block.toJson());
-  return blocksJson;
-}
-
-self.daemonGetBlockByHeight = async function(daemonId, height) {
-  return (await self.WORKER_OBJECTS[daemonId].getBlockByHeight(height)).toJson();
-}
-
-self.daemonGetBlocksByHeight = async function(daemonId, heights) {
-  let blocksJson = [];
-  for (let block of await self.WORKER_OBJECTS[daemonId].getBlocksByHeight(heights)) blocksJson.push(block.toJson());
-  return blocksJson;
-}
-
-self.daemonGetBlocksByRange = async function(daemonId, startHeight, endHeight) {
-  let blocksJson = [];
-  for (let block of await self.WORKER_OBJECTS[daemonId].getBlocksByRange(startHeight, endHeight)) blocksJson.push(block.toJson());
-  return blocksJson;
-}
-
-self.daemonGetBlocksByRangeChunked = async function(daemonId, startHeight, endHeight, maxChunkSize) {
-  let blocksJson = [];
-  for (let block of await self.WORKER_OBJECTS[daemonId].getBlocksByRangeChunked(startHeight, endHeight, maxChunkSize)) blocksJson.push(block.toJson());
-  return blocksJson;
-}
-
-self.daemonGetBlockHashes = async function(daemonId, blockHashes, startHeight) {
-  throw new Error("worker.getBlockHashes not implemented");
-}
-
-// TODO: factor common code with self.getTxs()
-self.daemonGetTxs = async function(daemonId, txHashes, prune) {
-  
-  // get txs
-  let txs = await self.WORKER_OBJECTS[daemonId].getTxs(txHashes, prune);
-  
-  // collect unique blocks to preserve model relationships as trees (based on monero_wasm_bridge.cpp::get_txs)
-  let blocks = [];
-  let unconfirmedBlock = undefined
-  let seenBlocks = new Set();
-  for (let tx of txs) {
-    if (!tx.getBlock()) {
-      if (!unconfirmedBlock) unconfirmedBlock = new MoneroBlock().setTxs([]);
-      tx.setBlock(unconfirmedBlock);
-      unconfirmedBlock.getTxs().push(tx);
-    }
-    if (!seenBlocks.has(tx.getBlock())) {
-      seenBlocks.add(tx.getBlock());
-      blocks.push(tx.getBlock());
-    }
-  }
-  
-  // serialize blocks to json
-  for (let i = 0; i < blocks.length; i++) blocks[i] = blocks[i].toJson();
-  return blocks;
-}
-
-self.daemonGetTxHexes = async function(daemonId, txHashes, prune) {
-  return self.WORKER_OBJECTS[daemonId].getTxHexes(txHashes, prune);
-}
-
-self.daemonGetMinerTxSum = async function(daemonId, height, numBlocks) {
-  return (await self.WORKER_OBJECTS[daemonId].getMinerTxSum(height, numBlocks)).toJson();
-}
-
-self.daemonGetFeeEstimate = async function(daemonId, graceBlocks) {
-  return (await self.WORKER_OBJECTS[daemonId].getFeeEstimate(graceBlocks)).toJson();
-}
-
-self.daemonSubmitTxHex = async function(daemonId, txHex, doNotRelay) {
-  return (await self.WORKER_OBJECTS[daemonId].submitTxHex(txHex, doNotRelay)).toJson();
-}
-
-self.daemonRelayTxsByHash = async function(daemonId, txHashes) {
-  return self.WORKER_OBJECTS[daemonId].relayTxsByHash(txHashes);
-}
-
-self.daemonGetTxPool = async function(daemonId) {
-  let txs = await self.WORKER_OBJECTS[daemonId].getTxPool();
-  let block = new MoneroBlock().setTxs(txs);
-  for (let tx of txs) tx.setBlock(block)
-  return block.toJson();
-}
-
-self.daemonGetTxPoolHashes = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].getTxPoolHashes();
-}
-
-//async getTxPoolBacklog() {
-//  throw new MoneroError("Not implemented");
-//}
-
-self.daemonGetTxPoolStats = async function(daemonId) {
-  return (await self.WORKER_OBJECTS[daemonId].getTxPoolStats()).toJson();
-}
-
-self.daemonFlushTxPool = async function(daemonId, hashes) {
-  return self.WORKER_OBJECTS[daemonId].flushTxPool(hashes);
-}
-
-self.daemonGetKeyImageSpentStatuses = async function(daemonId, keyImages) {
-  return self.WORKER_OBJECTS[daemonId].getKeyImageSpentStatuses(keyImages);
-}
-
-//
-//async getOutputs(outputs) {
-//  throw new MoneroError("Not implemented");
-//}
-
-self.daemonGetOutputHistogram = async function(daemonId, amounts, minCount, maxCount, isUnlocked, recentCutoff) {
-  let entriesJson = [];
-  for (let entry of await self.WORKER_OBJECTS[daemonId].getOutputHistogram(amounts, minCount, maxCount, isUnlocked, recentCutoff)) {
-    entriesJson.push(entry.toJson());
-  }
-  return entriesJson;
-}
-
-//
-//async getOutputDistribution(amounts, cumulative, startHeight, endHeight) {
-//  throw new MoneroError("Not implemented");
-//}
-
-self.daemonGetInfo = async function(daemonId) {
-  return (await self.WORKER_OBJECTS[daemonId].getInfo()).toJson();
-}
-
-self.daemonGetSyncInfo = async function(daemonId) {
-  return (await self.WORKER_OBJECTS[daemonId].getSyncInfo()).toJson();
-}
-
-self.daemonGetHardForkInfo = async function(daemonId) {
-  return (await self.WORKER_OBJECTS[daemonId].getHardForkInfo()).toJson();
-}
-
-self.daemonGetAltChains = async function(daemonId) {
-  let altChainsJson = [];
-  for (let altChain of await self.WORKER_OBJECTS[daemonId].getAltChains()) altChainsJson.push(altChain.toJson());
-  return altChainsJson;
-}
-
-self.daemonGetAltBlockHashes = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].getAltBlockHashes();
-}
-
-self.daemonGetDownloadLimit = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].getDownloadLimit();
-}
-
-self.daemonSetDownloadLimit = async function(daemonId, limit) {
-  return self.WORKER_OBJECTS[daemonId].setDownloadLimit(limit);
-}
-
-self.daemonResetDownloadLimit = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].resetDownloadLimit();
-}
-
-self.daemonGetUploadLimit = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].getUploadLimit();
-}
-
-self.daemonSetUploadLimit = async function(daemonId, limit) {
-  return self.WORKER_OBJECTS[daemonId].setUploadLimit(limit);
-}
-
-self.daemonResetUploadLimit = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].resetUploadLimit();
-}
-
-self.daemonGetPeers = async function(daemonId) {
-  let peersJson = [];
-  for (let peer of await self.WORKER_OBJECTS[daemonId].getPeers()) peersJson.push(peer.toJson());
-  return peersJson;
-}
-
-self.daemonGetKnownPeers = async function(daemonId) {
-  let peersJson = [];
-  for (let peer of await self.WORKER_OBJECTS[daemonId].getKnownPeers()) peersJson.push(peer.toJson());
-  return peersJson;
-}
-
-self.daemonSetOutgoingPeerLimit = async function(daemonId, limit) {
-  return self.WORKER_OBJECTS[daemonId].setOutgoingPeerLimit(limit);
-}
-
-self.daemonSetIncomingPeerLimit = async function(daemonId, limit) {
-  return self.WORKER_OBJECTS[daemonId].setIncomingPeerLimit(limit);
-}
-
-self.daemonGetPeerBans = async function(daemonId) {
-  let bansJson = [];
-  for (let ban of await self.WORKER_OBJECTS[daemonId].getPeerBans()) bansJson.push(ban.toJson());
-  return bansJson;
-}
-
-self.daemonSetPeerBans = async function(daemonId, bansJson) {
-  let bans = [];
-  for (let banJson of bansJson) bans.push(new MoneroBan(banJson));
-  return self.WORKER_OBJECTS[daemonId].setPeerBans(bans);
-}
-
-self.daemonStartMining = async function(daemonId, address, numThreads, isBackground, ignoreBattery) {
-  return self.WORKER_OBJECTS[daemonId].startMining(address, numThreads, isBackground, ignoreBattery);
-}
-
-self.daemonStopMining = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].stopMining();
-}
-
-self.daemonGetMiningStatus = async function(daemonId) {
-  return (await self.WORKER_OBJECTS[daemonId].getMiningStatus()).toJson();
-}
-
-self.daemonPruneBlockchain = async function(daemonId, check) {
-  return (await self.WORKER_OBJECTS[daemonId].pruneBlockchain(check)).toJson();
-}
-
-//
-//async submitBlocks(blockBlobs) {
-//  throw new MoneroError("Not implemented");
-//}
-//
-//async checkForUpdate() {
-//  throw new MoneroError("Not implemented");
-//}
-//
-//async downloadUpdate(path) {
-//  throw new MoneroError("Not implemented");
-//}
-
-self.daemonStop = async function(daemonId) {
-  return self.WORKER_OBJECTS[daemonId].stop();
-}
-
-self.daemonWaitForNextBlockHeader = async function(daemonId) {
-  return (await self.WORKER_OBJECTS[daemonId].waitForNextBlockHeader()).toJson();
-}
-
-//------------------------------ WALLET METHODS -------------------------------
-
-self.openWalletData = async function(walletId, path, password, networkType, keysData, cacheData, daemonUriOrConfig) {
-  let daemonConnection = daemonUriOrConfig ? new MoneroRpcConnection(daemonUriOrConfig) : undefined;
-  self.WORKER_OBJECTS[walletId] = await MoneroWalletFull.openWallet({path: "", password: password, networkType: networkType, keysData: keysData, cacheData: cacheData, server: daemonConnection, proxyToWorker: false});
-  self.WORKER_OBJECTS[walletId]._setBrowserMainPath(path);
-}
-
-self._createWallet = async function(walletId, configJson) {
-  let config = new MoneroWalletConfig(configJson);
-  let path = config.getPath();
-  config.setPath("");
-  config.setProxyToWorker(false);
-  self.WORKER_OBJECTS[walletId] = await MoneroWalletFull.createWallet(config);
-  self.WORKER_OBJECTS[walletId]._setBrowserMainPath(path);
-}
-
-self.isViewOnly = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].isViewOnly();
-}
-
-self.getNetworkType = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getNetworkType();
-}
-
-//
-//async getVersion() {
-//  throw new Error("Not implemented");
-//}
-
-self.getSeed = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getSeed();
-}
-
-self.getSeedLanguage = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getSeedLanguage();
-}
-
-self.getSeedLanguages = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getSeedLanguages();
-}
-
-self.getPrivateSpendKey = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getPrivateSpendKey();
-}
-
-self.getPrivateViewKey = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getPrivateViewKey();
-}
-
-self.getPublicViewKey = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getPublicViewKey();
-}
-
-self.getPublicSpendKey = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getPublicSpendKey();
-}
-
-self.getAddress = async function(walletId, accountIdx, subaddressIdx) {
-  return self.WORKER_OBJECTS[walletId].getAddress(accountIdx, subaddressIdx);
-}
-
-self.getAddressIndex = async function(walletId, address) {
-  return (await self.WORKER_OBJECTS[walletId].getAddressIndex(address)).toJson();
-}
-
-self.setSubaddressLabel = async function(walletId, accountIdx, subaddressIdx, label) {
-  await self.WORKER_OBJECTS[walletId].setSubaddressLabel(accountIdx, subaddressIdx, label);
-}
-
-self.getIntegratedAddress = async function(walletId, standardAddress, paymentId) {
-  return (await self.WORKER_OBJECTS[walletId].getIntegratedAddress(standardAddress, paymentId)).toJson();
-}
-
-self.decodeIntegratedAddress = async function(walletId, integratedAddress) {
-  return (await self.WORKER_OBJECTS[walletId].decodeIntegratedAddress(integratedAddress)).toJson();
-}
-
-self.setDaemonConnection = async function(walletId, config) {
-  return self.WORKER_OBJECTS[walletId].setDaemonConnection(config ? new MoneroRpcConnection(Object.assign(config, {proxyToWorker: false})) : undefined);
-}
-
-self.getDaemonConnection = async function(walletId) {
-  let connection = await self.WORKER_OBJECTS[walletId].getDaemonConnection();
-  return connection ? connection.getConfig() : undefined;
-}
-
-self.isConnectedToDaemon = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].isConnectedToDaemon();
-}
-
-self.getRestoreHeight = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getRestoreHeight();
-}
-
-self.setRestoreHeight = async function(walletId, restoreHeight) {
-  return self.WORKER_OBJECTS[walletId].setRestoreHeight(restoreHeight);
-}
-
-self.getDaemonHeight = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getDaemonHeight();
-}
-
-self.getDaemonMaxPeerHeight = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getDaemonMaxPeerHeight()
-}
-
-self.getHeightByDate = async function(walletId, year, month, day) {
-  return self.WORKER_OBJECTS[walletId].getHeightByDate(year, month, day);
-}
-
-self.isDaemonSynced = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].isDaemonSynced();
-}
-
-self.getHeight = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getHeight();
-}
-
-self.addListener = async function(walletId, listenerId) {
-  
-  /**
-   * Internal listener to bridge notifications to external listeners.
-   * 
-   * TODO: MoneroWalletListener is not defined until scripts imported
-   * 
-   * @private
-   */
-  class WalletWorkerHelperListener extends MoneroWalletListener {
-    
-    constructor(walletId, id, worker) {
-      super();
-      this.walletId = walletId;
-      this.id = id;
-      this.worker = worker;
-    }
-    
-    getId() {
-      return this.id;
-    }
-    
-    onSyncProgress(height, startHeight, endHeight, percentDone, message) {
-      this.worker.postMessage([this.walletId, "onSyncProgress_" + this.getId(), height, startHeight, endHeight, percentDone, message]);
-    }
-
-    onNewBlock(height) { 
-      this.worker.postMessage([this.walletId, "onNewBlock_" + this.getId(), height]);
-    }
-    
-    onBalancesChanged(newBalance, newUnlockedBalance) {
-      this.worker.postMessage([this.walletId, "onBalancesChanged_" + this.getId(), newBalance.toString(), newUnlockedBalance.toString()]);
-    }
-
-    onOutputReceived(output) {
-      let block = output.getTx().getBlock();
-      if (block === undefined) block = new MoneroBlock().setTxs([output.getTx()]);
-      this.worker.postMessage([this.walletId, "onOutputReceived_" + this.getId(), block.toJson()]);  // serialize from root block
-    }
-    
-    onOutputSpent(output) {
-      let block = output.getTx().getBlock();
-      if (block === undefined) block = new MoneroBlock().setTxs([output.getTx()]);
-      this.worker.postMessage([this.walletId, "onOutputSpent_" + this.getId(), block.toJson()]);     // serialize from root block
-    }
-  }
-  
-  let listener = new WalletWorkerHelperListener(walletId, listenerId, self);
-  if (!self.listeners) self.listeners = [];
-  self.listeners.push(listener);
-  await self.WORKER_OBJECTS[walletId].addListener(listener);
-}
-
-self.removeListener = async function(walletId, listenerId) {
-  for (let i = 0; i < self.listeners.length; i++) {
-    if (self.listeners[i].getId() !== listenerId) continue;
-    await self.WORKER_OBJECTS[walletId].removeListener(self.listeners[i]);
-    self.listeners.splice(i, 1);
-    return;
-  }
-  throw new MoneroError("Listener is not registered with wallet");
-}
-
-self.isSynced = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].isSynced();
-}
-
-self.sync = async function(walletId, startHeight, allowConcurrentCalls) {
-  return await self.WORKER_OBJECTS[walletId].sync(undefined, startHeight, allowConcurrentCalls);
-}
-
-self.startSyncing = async function(walletId, syncPeriodInMs) {
-  return self.WORKER_OBJECTS[walletId].startSyncing(syncPeriodInMs);
-}
-
-self.stopSyncing = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].stopSyncing();
-}
-
-self.scanTxs = async function(walletId, txHashes) {
-  return self.WORKER_OBJECTS[walletId].scanTxs(txHashes);
-}
-
-self.rescanSpent = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].rescanSpent();
-}
-
-self.rescanBlockchain = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].rescanBlockchain();
-}
-
-self.getBalance = async function(walletId, accountIdx, subaddressIdx) {
-  return (await self.WORKER_OBJECTS[walletId].getBalance(accountIdx, subaddressIdx)).toString();
-}
-
-self.getUnlockedBalance = async function(walletId, accountIdx, subaddressIdx) {
-  return (await self.WORKER_OBJECTS[walletId].getUnlockedBalance(accountIdx, subaddressIdx)).toString();
-}
-
-self.getAccounts = async function(walletId, includeSubaddresses, tag) {
-  let accountJsons = [];
-  for (let account of await self.WORKER_OBJECTS[walletId].getAccounts(includeSubaddresses, tag)) accountJsons.push(account.toJson());
-  return accountJsons;
-}
-
-self.getAccount = async function(walletId, accountIdx, includeSubaddresses) {
-  return (await self.WORKER_OBJECTS[walletId].getAccount(accountIdx, includeSubaddresses)).toJson();
-}
-
-self.createAccount = async function(walletId, label) {
-  return (await self.WORKER_OBJECTS[walletId].createAccount(label)).toJson();
-}
-
-self.getSubaddresses = async function(walletId, accountIdx, subaddressIndices) {
-  let subaddressJsons = [];
-  for (let subaddress of await self.WORKER_OBJECTS[walletId].getSubaddresses(accountIdx, subaddressIndices)) subaddressJsons.push(subaddress.toJson());
-  return subaddressJsons;
-}
-
-self.createSubaddress = async function(walletId, accountIdx, label) {
-  return (await self.WORKER_OBJECTS[walletId].createSubaddress(accountIdx, label)).toJson();
-}
-
-// TODO: easier or more efficient way than serializing from root blocks?
-self.getTxs = async function(walletId, blockJsonQuery) {
-  
-  // deserialize query which is json string rooted at block
-  let query = new MoneroBlock(blockJsonQuery, MoneroBlock.DeserializationType.TX_QUERY).getTxs()[0];
-  
-  // get txs
-  let txs = await self.WORKER_OBJECTS[walletId].getTxs(query);
-  
-  // collect unique blocks to preserve model relationships as trees (based on monero_wasm_bridge.cpp::get_txs)
-  let seenBlocks = new Set();
-  let unconfirmedBlock = undefined;
-  let blocks = [];
-  for (let tx of txs) {
-    if (!tx.getBlock()) {
-      if (!unconfirmedBlock) unconfirmedBlock = new MoneroBlock().setTxs([]);
-      tx.setBlock(unconfirmedBlock);
-      unconfirmedBlock.getTxs().push(tx);
-    }
-    if (!seenBlocks.has(tx.getBlock())) {
-      seenBlocks.add(tx.getBlock());
-      blocks.push(tx.getBlock());
-    }
-  }
-  
-  // serialize blocks to json
-  for (let i = 0; i < blocks.length; i++) blocks[i] = blocks[i].toJson();
-  return {blocks: blocks};
-}
-
-self.getTransfers = async function(walletId, blockJsonQuery) {
-  
-  // deserialize query which is json string rooted at block
-  let query = new MoneroBlock(blockJsonQuery, MoneroBlock.DeserializationType.TX_QUERY).getTxs()[0].getTransferQuery();
-  
-  // get transfers
-  let transfers = await self.WORKER_OBJECTS[walletId].getTransfers(query);
-  
-  // collect unique blocks to preserve model relationships as tree
-  let unconfirmedBlock = undefined;
-  let blocks = [];
-  let seenBlocks = new Set();
-  for (let transfer of transfers) {
-    let tx = transfer.getTx();
-    if (!tx.getBlock()) {
-      if (!unconfirmedBlock) unconfirmedBlock = new MoneroBlock().setTxs([]);
-      tx.setBlock(unconfirmedBlock);
-      unconfirmedBlock.getTxs().push(tx);
-    }
-    if (!seenBlocks.has(tx.getBlock())) {
-      seenBlocks.add(tx.getBlock());
-      blocks.push(tx.getBlock());
-    }
-  }
-  
-  // serialize blocks to json
-  for (let i = 0; i < blocks.length; i++) blocks[i] = blocks[i].toJson();
-  return blocks;
-}
-
-self.getOutputs = async function(walletId, blockJsonQuery) {
-
-  // deserialize query which is json string rooted at block
-  let query = new MoneroBlock(blockJsonQuery, MoneroBlock.DeserializationType.TX_QUERY).getTxs()[0].getOutputQuery();
-  
-  // get outputs
-  let outputs = await self.WORKER_OBJECTS[walletId].getOutputs(query);
-  
-  // collect unique blocks to preserve model relationships as tree
-  let unconfirmedBlock = undefined;
-  let blocks = [];
-  let seenBlocks = new Set();
-  for (let output of outputs) {
-    let tx = output.getTx();
-    if (!tx.getBlock()) {
-      if (!unconfirmedBlock) unconfirmedBlock = new MoneroBlock().setTxs([]);
-      tx.setBlock(unconfirmedBlock);
-      unconfirmedBlock.getTxs().push(tx);
-    }
-    if (!seenBlocks.has(tx.getBlock())) {
-      seenBlocks.add(tx.getBlock());
-      blocks.push(tx.getBlock());
-    }
-  }
-  
-  // serialize blocks to json
-  for (let i = 0; i < blocks.length; i++) blocks[i] = blocks[i].toJson();
-  return blocks;
-}
-
-self.exportOutputs = async function(walletId, all) {
-  return self.WORKER_OBJECTS[walletId].exportOutputs(all);
-}
-
-self.importOutputs = async function(walletId, outputsHex) {
-  return self.WORKER_OBJECTS[walletId].importOutputs(outputsHex);
-}
-
-self.getKeyImages = async function(walletId, all) {
-  let keyImagesJson = [];
-  for (let keyImage of await self.WORKER_OBJECTS[walletId].exportKeyImages(all)) keyImagesJson.push(keyImage.toJson());
-  return keyImagesJson;
-}
-
-self.importKeyImages = async function(walletId, keyImagesJson) {
-  let keyImages = [];
-  for (let keyImageJson of keyImagesJson) keyImages.push(new MoneroKeyImage(keyImageJson));
-  return (await self.WORKER_OBJECTS[walletId].importKeyImages(keyImages)).toJson();
-}
-
-//async getNewKeyImagesFromLastImport() {
-//  throw new MoneroError("Not implemented");
-//}
-
-self.freezeOutput = async function(walletId, keyImage) {
-  return self.WORKER_OBJECTS[walletId].freezeOutput(keyImage);
-}
-
-self.thawOutput = async function(walletId, keyImage) {
-  return self.WORKER_OBJECTS[walletId].thawOutput(keyImage);
-}
-
-self.isOutputFrozen = async function(walletId, keyImage) {
-  return self.WORKER_OBJECTS[walletId].isOutputFrozen(keyImage);
-}
-
-self.createTxs = async function(walletId, config) {
-  if (typeof config === "object") config = new MoneroTxConfig(config);
-  let txs = await self.WORKER_OBJECTS[walletId].createTxs(config);
-  return txs[0].getTxSet().toJson();
-}
-
-self.sweepOutput = async function(walletId, config) {
-  if (typeof config === "object") config = new MoneroTxConfig(config);
-  let tx = await self.WORKER_OBJECTS[walletId].sweepOutput(config);
-  return tx.getTxSet().toJson();
-}
-
-self.sweepUnlocked = async function(walletId, config) {
-  if (typeof config === "object") config = new MoneroTxConfig(config);
-  let txs = await self.WORKER_OBJECTS[walletId].sweepUnlocked(config);
-  let txSets = [];
-  for (let tx of txs) if (!GenUtils.arrayContains(txSets, tx.getTxSet())) txSets.push(tx.getTxSet());
-  let txSetsJson = [];
-  for (let txSet of txSets) txSetsJson.push(txSet.toJson());
-  return txSetsJson;
-}
-
-self.sweepDust = async function(walletId, relay) {
-  let txs = await self.WORKER_OBJECTS[walletId].sweepDust(relay);
-  return txs.length === 0 ? {} : txs[0].getTxSet().toJson();
-}
-
-self.relayTxs = async function(walletId, txMetadatas) {
-  return self.WORKER_OBJECTS[walletId].relayTxs(txMetadatas);
-}
-
-self.describeTxSet = async function(walletId, txSetJson) {
-  return (await self.WORKER_OBJECTS[walletId].describeTxSet(new MoneroTxSet(txSetJson))).toJson();
-}
-
-self.signTxs = async function(walletId, unsignedTxHex) {
-  return self.WORKER_OBJECTS[walletId].signTxs(unsignedTxHex);
-}
-
-self.submitTxs = async function(walletId, signedTxHex) {
-  return self.WORKER_OBJECTS[walletId].submitTxs(signedTxHex);
-}
-
-self.signMessage = async function(walletId, message, signatureType, accountIdx, subaddressIdx) {
-  return self.WORKER_OBJECTS[walletId].signMessage(message, signatureType, accountIdx, subaddressIdx);
-}
-
-self.verifyMessage = async function(walletId, message, address, signature) {
-  return (await self.WORKER_OBJECTS[walletId].verifyMessage(message, address, signature)).toJson();
-}
-
-self.getTxKey = async function(walletId, txHash) {
-  return self.WORKER_OBJECTS[walletId].getTxKey(txHash);
-}
-
-self.checkTxKey = async function(walletId, txHash, txKey, address) {
-  return (await self.WORKER_OBJECTS[walletId].checkTxKey(txHash, txKey, address)).toJson();
-}
-
-self.getTxProof = async function(walletId, txHash, address, message) {
-  return self.WORKER_OBJECTS[walletId].getTxProof(txHash, address, message);
-}
-
-self.checkTxProof = async function(walletId, txHash, address, message, signature) {
-  return (await self.WORKER_OBJECTS[walletId].checkTxProof(txHash, address, message, signature)).toJson();
-}
-
-self.getSpendProof = async function(walletId, txHash, message) {
-  return self.WORKER_OBJECTS[walletId].getSpendProof(txHash, message);
-}
-
-self.checkSpendProof = async function(walletId, txHash, message, signature) {
-  return self.WORKER_OBJECTS[walletId].checkSpendProof(txHash, message, signature);
-}
-
-self.getReserveProofWallet = async function(walletId, message) {
-  return self.WORKER_OBJECTS[walletId].getReserveProofWallet(message);
-}
-
-self.getReserveProofAccount = async function(walletId, accountIdx, amountStr, message) {
-  return self.WORKER_OBJECTS[walletId].getReserveProofAccount(accountIdx, amountStr, message);
-}
-
-self.checkReserveProof = async function(walletId, address, message, signature) {
-  return (await self.WORKER_OBJECTS[walletId].checkReserveProof(address, message, signature)).toJson();
-}
-
-self.getTxNotes = async function(walletId, txHashes) {
-  return self.WORKER_OBJECTS[walletId].getTxNotes(txHashes);
-}
-
-self.setTxNotes = async function(walletId, txHashes, txNotes) {
-  return self.WORKER_OBJECTS[walletId].setTxNotes(txHashes, txNotes);
-}
-
-self.getAddressBookEntries = async function(walletId, entryIndices) {
-  let entriesJson = [];
-  for (let entry of await self.WORKER_OBJECTS[walletId].getAddressBookEntries(entryIndices)) entriesJson.push(entry.toJson());
-  return entriesJson;
-}
-
-self.addAddressBookEntry = async function(walletId, address, description) {
-  return self.WORKER_OBJECTS[walletId].addAddressBookEntry(address, description);
-}
-
-self.editAddressBookEntry = async function(walletId, index, setAddress, address, setDescription, description) {
-  return self.WORKER_OBJECTS[walletId].editAddressBookEntry(index, setAddress, address, setDescription, description);
-}
-
-self.deleteAddressBookEntry = async function(walletId, index) {
-  return self.WORKER_OBJECTS[walletId].deleteAddressBookEntry(index);
-}
-
-self.tagAccounts = async function(walletId, tag, accountIndices) {
-  throw new Error("Not implemented");
-}
-
-self.untagAccounts = async function(walletId, accountIndices) {
-  throw new Error("Not implemented");
-}
-
-self.getAccountTags = async function(walletId) {
-  throw new Error("Not implemented");
-}
-
-self.setAccountTagLabel = async function(walletId, tag, label) {
-  throw new Error("Not implemented");
-}
-
-self.getPaymentUri = async function(walletId, configJson) {
-  return self.WORKER_OBJECTS[walletId].getPaymentUri(new MoneroTxConfig(configJson));
-}
-
-self.parsePaymentUri = async function(walletId, uri) {
-  return (await self.WORKER_OBJECTS[walletId].parsePaymentUri(uri)).toJson();
-}
-
-self.getAttribute = async function(walletId, key) {
-  return self.WORKER_OBJECTS[walletId].getAttribute(key);
-}
-
-self.setAttribute = async function(walletId, key, value) {
-  return self.WORKER_OBJECTS[walletId].setAttribute(key, value);
-}
-
-self.startMining = async function(walletId, numThreads, backgroundMining, ignoreBattery) {
-  return self.WORKER_OBJECTS[walletId].startMining(numThreads, backgroundMining, ignoreBattery);
-}
-
-self.stopMining = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].stopMining();
-}
-
-self.isMultisigImportNeeded = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].isMultisigImportNeeded();
-}
-
-self.isMultisig = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].isMultisig();
-}
-
-self.getMultisigInfo = async function(walletId) {
-  return (await self.WORKER_OBJECTS[walletId].getMultisigInfo()).toJson();
-}
-
-self.prepareMultisig = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].prepareMultisig();
-}
-
-self.makeMultisig = async function(walletId, multisigHexes, threshold, password) {
-  return await self.WORKER_OBJECTS[walletId].makeMultisig(multisigHexes, threshold, password);
-}
-
-self.exchangeMultisigKeys = async function(walletId, multisigHexes, password) {
-  return (await self.WORKER_OBJECTS[walletId].exchangeMultisigKeys(multisigHexes, password)).toJson();
-}
-
-self.exportMultisigHex = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].exportMultisigHex();
-}
-
-self.importMultisigHex = async function(walletId, multisigHexes) {
-  return self.WORKER_OBJECTS[walletId].importMultisigHex(multisigHexes);
-}
-
-self.signMultisigTxHex = async function(walletId, multisigTxHex) {
-  return (await self.WORKER_OBJECTS[walletId].signMultisigTxHex(multisigTxHex)).toJson();
-}
-
-self.submitMultisigTxHex = async function(walletId, signedMultisigTxHex) {
-  return self.WORKER_OBJECTS[walletId].submitMultisigTxHex(signedMultisigTxHex);
-}
-
-self.getData = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].getData();
-}
-
-self.changePassword = async function(walletId, oldPassword, newPassword) {
-  return self.WORKER_OBJECTS[walletId].changePassword(oldPassword, newPassword);
-}
-
-self.isClosed = async function(walletId) {
-  return self.WORKER_OBJECTS[walletId].isClosed();
-}
-
-self.close = async function(walletId, save) {
-  return self.WORKER_OBJECTS[walletId].close(save); // TODO: remove listeners and delete wallet from WORKER_OBJECTS
-}
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_SslOptions.js.html b/docs/src_main_js_common_SslOptions.js.html deleted file mode 100644 index c3e0e0578..000000000 --- a/docs/src_main_js_common_SslOptions.js.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/SslOptions.js - - - - - - - - - - -
- -

Source: src/main/js/common/SslOptions.js

- - - - - - -
-
-
/**
- * SSL options for remote endpoints.
- */
-class SslOptions {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-  
-  getPrivateKeyPath() {
-    return this.state.privateKeyPath;
-  }
-  
-  setPrivateKeyPath(privateKeyPath) {
-    this.state.privateKeyPath = privateKeyPath;
-    return this;
-  }
-  
-  getCertificatePath() {
-    return this.state.certificatePath;
-  }
-  
-  setCertificatePath(certificatePath) {
-    this.state.certificatePath = certificatePath;
-    return this;
-  }
-  
-  getCertificateAuthorityFile() {
-    return this.state.certificateAuthorityFile;
-  }
-  
-  setCertificateAuthorityFile(certificateAuthorityFile) {
-    this.state.certificateAuthorityFile = certificateAuthorityFile;
-    return this;
-  }
-  
-  getAllowedFingerprints() {
-    return this.state.allowedFingerprints;
-  }
-  
-  setAllowedFingerprints(allowedFingerprints) {
-    this.state.allowedFingerprints = allowedFingerprints;
-    return this;
-  }
-  
-  getAllowAnyCert() {
-    return this.state.allowAnyCert;
-  }
-  
-  setAllowAnyCert(allowAnyCert) {
-    this.state.allowAnyCert = allowAnyCert;
-    return this;
-  }
-}
-
-module.exports = SslOptions;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_TaskLooper.js.html b/docs/src_main_js_common_TaskLooper.js.html deleted file mode 100644 index 56b3ed0da..000000000 --- a/docs/src_main_js_common_TaskLooper.js.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/TaskLooper.js - - - - - - - - - - -
- -

Source: src/main/js/common/TaskLooper.js

- - - - - - -
-
-
/**
- * Run a task in a fixed period loop.
- */
-class TaskLooper {
-  
-  /**
-   * Build the looper with a function to invoke on a fixed period loop.
-   * 
-   * @param {function} task - the task function to invoke
-   */
-  constructor(task) {
-    this._task = task;
-  }
-
-  /**
-   * Get the task function to invoke on a fixed period loop.
-   * 
-   * @return {function} the task function
-   */
-  getTask() {
-    return this._task;
-  }
-  
-  /**
-   * Start the task loop.
-   * 
-   * @param {int} periodInMs the loop period in milliseconds
-   * @return {TaskLooper} this class for chaining
-   */
-  start(periodInMs) {
-    this._periodInMs = periodInMs;
-    if (this._isStarted) return this;
-    this._isStarted = true;
-    
-    // start looping
-    this._runLoop();
-    return this;
-  }
-
-  /**
-   * Indicates if looping.
-   * 
-   * @return {boolean} true if looping, false otherwise
-   */
-  isStarted() {
-    return this._isStarted;
-  }
-  
-  /**
-   * Stop the task loop.
-   */
-  stop() {
-    this._isStarted = false;
-  }
-  
-  /**
-   * Set the loop period in milliseconds.
-   * 
-   * @param {int} periodInMs the loop period in milliseconds
-   */
-  setPeriodInMs(periodInMs) {
-    this._periodInMs = periodInMs;
-  }
-  
-  async _runLoop() {
-    if (this._isLooping) return;
-    this._isLooping = true;
-    let that = this;
-    while (this._isStarted) {
-      let startTime = Date.now();
-      await this._task();
-      if (this._isStarted) await new Promise(function(resolve) { setTimeout(resolve, that._periodInMs - (Date.now() - startTime)); });
-    }
-    this._isLooping = false;
-  }
-}
-
-module.exports = TaskLooper;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_ThreadPool.js.html b/docs/src_main_js_common_ThreadPool.js.html deleted file mode 100644 index 851bb6050..000000000 --- a/docs/src_main_js_common_ThreadPool.js.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/ThreadPool.js - - - - - - - - - - -
- -

Source: src/main/js/common/ThreadPool.js

- - - - - - -
-
-
const GenUtils = require("./GenUtils");
-
-/**
- * Simple thread pool using the async library.
- */
-class ThreadPool {
-  
-  /**
-   * Construct the thread pool.
-   * 
-   * @param {int} maxConcurrency - maximum number of threads in the pool (default 1)
-   */
-  constructor(maxConcurrency) {
-    if (maxConcurrency === undefined) maxConcurrency = 1;
-    if (maxConcurrency < 1) throw new Error("Max concurrency must be greater than or equal to 1");
-    
-    // manager concurrency with async queue
-    const async = require("async");
-    this.taskQueue = async.queue(function(asyncFn, callback) {
-      if (asyncFn.then) asyncFn.then(resp => { callback(resp); }).catch(err => { callback(undefined, err); });
-      else asyncFn().then(resp => { callback(resp); }).catch(err => { callback(undefined, err); });
-    }, maxConcurrency);
-    
-    // use drain listeners to support await all
-    let that = this;
-    this.drainListeners = [];
-    this.taskQueue.drain = function() {
-      for (let listener of that.drainListeners) listener();
-    }
-  }
-  
-  /**
-   * Submit an asynchronous function to run using the thread pool.
-   * 
-   * @param {function} asyncFn - asynchronous function to run with the thread pool
-   * @return {Promise} resolves when the function completes execution
-   */
-  async submit(asyncFn) {
-    let that = this;
-    return new Promise(function(resolve, reject) {
-      that.taskQueue.push(asyncFn, function(resp, err) {
-        if (err !== undefined) reject(err);
-        else resolve(resp);
-      });
-    });
-  }
-  
-  /**
-   * Await all functions to complete.
-   * 
-   * @return {Promise} resolves when all functions complete
-   */
-  async awaitAll() {
-    if (this.taskQueue.length === 0) return;
-    let that = this;
-    return new Promise(function(resolve) {
-      that.drainListeners.push(function() {
-        GenUtils.remove(that.drainListeners, this);
-        resolve();
-      })
-    });
-  }
-}
-
-module.exports = ThreadPool;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_common_biginteger.js.html b/docs/src_main_js_common_biginteger.js.html deleted file mode 100644 index 3d38b1e73..000000000 --- a/docs/src_main_js_common_biginteger.js.html +++ /dev/null @@ -1,1686 +0,0 @@ - - - - - JSDoc: Source: src/main/js/common/biginteger.js - - - - - - - - - - -
- -

Source: src/main/js/common/biginteger.js

- - - - - - -
-
-
/*
-	JavaScript BigInteger library version 0.9.1
-	http://silentmatt.com/biginteger/
-
-	Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
-	Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
-	Licensed under the MIT license.
-
-	Support for arbitrary internal representation base was added by
-	Vitaly Magerya.
-*/
-/*
-
-This file has been modified by Paul Shapiro:
-
-1. to bring in the function lowVal which was written by Lucas Jones
-2. to expose CONSTRUCT
-
-*/
-/*
-	File: biginteger.js
-
-	Exports:
-
-		<BigInteger>
-*/
-(function(exports) {
-"use strict";
-/*
-	Class: BigInteger
-	An arbitrarily-large integer.
-
-	<BigInteger> objects should be considered immutable. None of the "built-in"
-	methods modify *this* or their arguments. All properties should be
-	considered private.
-
-	All the methods of <BigInteger> instances can be called "statically". The
-	static versions are convenient if you don't already have a <BigInteger>
-	object.
-
-	As an example, these calls are equivalent.
-
-	> BigInteger(4).multiply(5); // returns BigInteger(20);
-	> BigInteger.multiply(4, 5); // returns BigInteger(20);
-
-	> var a = 42;
-	> var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
-*/
-
-var CONSTRUCT = {}; // Unique token to call "private" version of constructor
-
-/*
-	Constructor: BigInteger()
-	Convert a value to a <BigInteger>.
-
-	Although <BigInteger()> is the constructor for <BigInteger> objects, it is
-	best not to call it as a constructor. If *n* is a <BigInteger> object, it is
-	simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
-	without a radix argument.
-
-	> var n0 = BigInteger();	  // Same as <BigInteger.ZERO>
-	> var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
-	> var n2 = BigInteger(123);   // Create a new <BigInteger> with value 123
-	> var n3 = BigInteger(n2);	// Return n2, unchanged
-
-	The constructor form only takes an array and a sign. *n* must be an
-	array of numbers in little-endian order, where each digit is between 0
-	and BigInteger.base.  The second parameter sets the sign: -1 for
-	negative, +1 for positive, or 0 for zero. The array is *not copied and
-	may be modified*. If the array contains only zeros, the sign parameter
-	is ignored and is forced to zero.
-
-	> new BigInteger([5], -1): create a new BigInteger with value -5
-
-	Parameters:
-
-		n - Value to convert to a <BigInteger>.
-
-	Returns:
-
-		A <BigInteger> value.
-
-	See Also:
-
-		<parse>, <BigInteger>
-*/
-function BigInteger(n, s, token) {
-	if (token !== CONSTRUCT) {
-		if (n instanceof BigInteger) {
-			return n;
-		}
-		else if (typeof n === "undefined") {
-			return ZERO;
-		}
-		return BigInteger.parse(n);
-	}
-
-	n = n || [];  // Provide the nullary constructor for subclasses.
-	while (n.length && !n[n.length - 1]) {
-		--n.length;
-	}
-	this._d = n;
-	this._s = n.length ? (s || 1) : 0;
-}
-BigInteger.CONSTRUCT = CONSTRUCT; // added by PS to actually use the constructor
-
-BigInteger._construct = function(n, s) {
-	return new BigInteger(n, s, CONSTRUCT);
-};
-
-// Base-10 speedup hacks in parse, toString, exp10 and log functions
-// require base to be a power of 10. 10^7 is the largest such power
-// that won't cause a precision loss when digits are multiplied.
-var BigInteger_base = 10000000;
-var BigInteger_base_log10 = 7;
-
-BigInteger.base = BigInteger_base;
-BigInteger.base_log10 = BigInteger_base_log10;
-
-var ZERO = new BigInteger([], 0, CONSTRUCT);
-// Constant: ZERO
-// <BigInteger> 0.
-BigInteger.ZERO = ZERO;
-
-var ONE = new BigInteger([1], 1, CONSTRUCT);
-// Constant: ONE
-// <BigInteger> 1.
-BigInteger.ONE = ONE;
-
-var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
-// Constant: M_ONE
-// <BigInteger> -1.
-BigInteger.M_ONE = M_ONE;
-
-// Constant: _0
-// Shortcut for <ZERO>.
-BigInteger._0 = ZERO;
-
-// Constant: _1
-// Shortcut for <ONE>.
-BigInteger._1 = ONE;
-
-/*
-	Constant: small
-	Array of <BigIntegers> from 0 to 36.
-
-	These are used internally for parsing, but useful when you need a "small"
-	<BigInteger>.
-
-	See Also:
-
-		<ZERO>, <ONE>, <_0>, <_1>
-*/
-BigInteger.small = [
-	ZERO,
-	ONE,
-	/* Assuming BigInteger_base > 36 */
-	new BigInteger( [2], 1, CONSTRUCT),
-	new BigInteger( [3], 1, CONSTRUCT),
-	new BigInteger( [4], 1, CONSTRUCT),
-	new BigInteger( [5], 1, CONSTRUCT),
-	new BigInteger( [6], 1, CONSTRUCT),
-	new BigInteger( [7], 1, CONSTRUCT),
-	new BigInteger( [8], 1, CONSTRUCT),
-	new BigInteger( [9], 1, CONSTRUCT),
-	new BigInteger([10], 1, CONSTRUCT),
-	new BigInteger([11], 1, CONSTRUCT),
-	new BigInteger([12], 1, CONSTRUCT),
-	new BigInteger([13], 1, CONSTRUCT),
-	new BigInteger([14], 1, CONSTRUCT),
-	new BigInteger([15], 1, CONSTRUCT),
-	new BigInteger([16], 1, CONSTRUCT),
-	new BigInteger([17], 1, CONSTRUCT),
-	new BigInteger([18], 1, CONSTRUCT),
-	new BigInteger([19], 1, CONSTRUCT),
-	new BigInteger([20], 1, CONSTRUCT),
-	new BigInteger([21], 1, CONSTRUCT),
-	new BigInteger([22], 1, CONSTRUCT),
-	new BigInteger([23], 1, CONSTRUCT),
-	new BigInteger([24], 1, CONSTRUCT),
-	new BigInteger([25], 1, CONSTRUCT),
-	new BigInteger([26], 1, CONSTRUCT),
-	new BigInteger([27], 1, CONSTRUCT),
-	new BigInteger([28], 1, CONSTRUCT),
-	new BigInteger([29], 1, CONSTRUCT),
-	new BigInteger([30], 1, CONSTRUCT),
-	new BigInteger([31], 1, CONSTRUCT),
-	new BigInteger([32], 1, CONSTRUCT),
-	new BigInteger([33], 1, CONSTRUCT),
-	new BigInteger([34], 1, CONSTRUCT),
-	new BigInteger([35], 1, CONSTRUCT),
-	new BigInteger([36], 1, CONSTRUCT)
-];
-
-// Used for parsing/radix conversion
-BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
-
-/*
-	Method: toString
-	Convert a <BigInteger> to a string.
-
-	When *base* is greater than 10, letters are upper case.
-
-	Parameters:
-
-		base - Optional base to represent the number in (default is base 10).
-			   Must be between 2 and 36 inclusive, or an Error will be thrown.
-
-	Returns:
-
-		The string representation of the <BigInteger>.
-*/
-BigInteger.prototype.toString = function(base) {
-	base = +base || 10;
-	if (base < 2 || base > 36) {
-		throw new Error("illegal radix " + base + ".");
-	}
-	if (this._s === 0) {
-		return "0";
-	}
-	if (base === 10) {
-		var str = this._s < 0 ? "-" : "";
-		str += this._d[this._d.length - 1].toString();
-		for (var i = this._d.length - 2; i >= 0; i--) {
-			var group = this._d[i].toString();
-			while (group.length < BigInteger_base_log10) group = '0' + group;
-			str += group;
-		}
-		return str;
-	}
-	else {
-		var numerals = BigInteger.digits;
-		base = BigInteger.small[base];
-		var sign = this._s;
-
-		var n = this.abs();
-		var digits = [];
-		var digit;
-
-		while (n._s !== 0) {
-			var divmod = n.divRem(base);
-			n = divmod[0];
-			digit = divmod[1];
-			// TODO: This could be changed to unshift instead of reversing at the end.
-			// Benchmark both to compare speeds.
-			digits.push(numerals[digit.valueOf()]);
-		}
-		return (sign < 0 ? "-" : "") + digits.reverse().join("");
-	}
-};
-
-// Verify strings for parsing
-BigInteger.radixRegex = [
-	/^$/,
-	/^$/,
-	/^[01]*$/,
-	/^[012]*$/,
-	/^[0-3]*$/,
-	/^[0-4]*$/,
-	/^[0-5]*$/,
-	/^[0-6]*$/,
-	/^[0-7]*$/,
-	/^[0-8]*$/,
-	/^[0-9]*$/,
-	/^[0-9aA]*$/,
-	/^[0-9abAB]*$/,
-	/^[0-9abcABC]*$/,
-	/^[0-9a-dA-D]*$/,
-	/^[0-9a-eA-E]*$/,
-	/^[0-9a-fA-F]*$/,
-	/^[0-9a-gA-G]*$/,
-	/^[0-9a-hA-H]*$/,
-	/^[0-9a-iA-I]*$/,
-	/^[0-9a-jA-J]*$/,
-	/^[0-9a-kA-K]*$/,
-	/^[0-9a-lA-L]*$/,
-	/^[0-9a-mA-M]*$/,
-	/^[0-9a-nA-N]*$/,
-	/^[0-9a-oA-O]*$/,
-	/^[0-9a-pA-P]*$/,
-	/^[0-9a-qA-Q]*$/,
-	/^[0-9a-rA-R]*$/,
-	/^[0-9a-sA-S]*$/,
-	/^[0-9a-tA-T]*$/,
-	/^[0-9a-uA-U]*$/,
-	/^[0-9a-vA-V]*$/,
-	/^[0-9a-wA-W]*$/,
-	/^[0-9a-xA-X]*$/,
-	/^[0-9a-yA-Y]*$/,
-	/^[0-9a-zA-Z]*$/
-];
-
-/*
-	Function: parse
-	Parse a string into a <BigInteger>.
-
-	*base* is optional but, if provided, must be from 2 to 36 inclusive. If
-	*base* is not provided, it will be guessed based on the leading characters
-	of *s* as follows:
-
-	- "0x" or "0X": *base* = 16
-	- "0c" or "0C": *base* = 8
-	- "0b" or "0B": *base* = 2
-	- else: *base* = 10
-
-	If no base is provided, or *base* is 10, the number can be in exponential
-	form. For example, these are all valid:
-
-	> BigInteger.parse("1e9");			  // Same as "1000000000"
-	> BigInteger.parse("1.234*10^3");	   // Same as 1234
-	> BigInteger.parse("56789 * 10 ** -2"); // Same as 567
-
-	If any characters fall outside the range defined by the radix, an exception
-	will be thrown.
-
-	Parameters:
-
-		s - The string to parse.
-		base - Optional radix (default is to guess based on *s*).
-
-	Returns:
-
-		a <BigInteger> instance.
-*/
-BigInteger.parse = function(s, base) {
-	// Expands a number in exponential form to decimal form.
-	// expandExponential("-13.441*10^5") === "1344100";
-	// expandExponential("1.12300e-1") === "0.112300";
-	// expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
-	function expandExponential(str) {
-		str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
-
-		return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
-			c = +c;
-			var l = c < 0;
-			var i = n.length + c;
-			x = (l ? n : f).length;
-			c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
-			var z = (new Array(c + 1)).join("0");
-			var r = n + f;
-			return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
-		});
-	}
-
-	s = s.toString();
-	if (typeof base === "undefined" || +base === 10) {
-		s = expandExponential(s);
-	}
-
-	var prefixRE;
-	if (typeof base === "undefined") {
-		prefixRE = '0[xcb]';
-	}
-	else if (base == 16) {
-		prefixRE = '0x';
-	}
-	else if (base == 8) {
-		prefixRE = '0c';
-	}
-	else if (base == 2) {
-		prefixRE = '0b';
-	}
-	else {
-		prefixRE = '';
-	}
-	var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
-	if (parts) {
-		var sign = parts[1] || "+";
-		var baseSection = parts[2] || "";
-		var digits = parts[3] || "";
-
-		if (typeof base === "undefined") {
-			// Guess base
-			if (baseSection === "0x" || baseSection === "0X") { // Hex
-				base = 16;
-			}
-			else if (baseSection === "0c" || baseSection === "0C") { // Octal
-				base = 8;
-			}
-			else if (baseSection === "0b" || baseSection === "0B") { // Binary
-				base = 2;
-			}
-			else {
-				base = 10;
-			}
-		}
-		else if (base < 2 || base > 36) {
-			throw new Error("Illegal radix " + base + ".");
-		}
-
-		base = +base;
-
-		// Check for digits outside the range
-		if (!(BigInteger.radixRegex[base].test(digits))) {
-			throw new Error("Bad digit for radix " + base);
-		}
-
-		// Strip leading zeros, and convert to array
-		digits = digits.replace(/^0+/, "").split("");
-		if (digits.length === 0) {
-			return ZERO;
-		}
-
-		// Get the sign (we know it's not zero)
-		sign = (sign === "-") ? -1 : 1;
-
-		// Optimize 10
-		if (base == 10) {
-			var d = [];
-			while (digits.length >= BigInteger_base_log10) {
-				d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
-			}
-			d.push(parseInt(digits.join(''), 10));
-			return new BigInteger(d, sign, CONSTRUCT);
-		}
-
-		// Do the conversion
-		var d = ZERO;
-		base = BigInteger.small[base];
-		var small = BigInteger.small;
-		for (var i = 0; i < digits.length; i++) {
-			d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
-		}
-		return new BigInteger(d._d, sign, CONSTRUCT);
-	}
-	else {
-		throw new Error("Invalid BigInteger format: " + s);
-	}
-};
-
-/*
-	Function: add
-	Add two <BigIntegers>.
-
-	Parameters:
-
-		n - The number to add to *this*. Will be converted to a <BigInteger>.
-
-	Returns:
-
-		The numbers added together.
-
-	See Also:
-
-		<subtract>, <multiply>, <quotient>, <next>
-*/
-BigInteger.prototype.add = function(n) {
-	if (this._s === 0) {
-		return BigInteger(n);
-	}
-
-	n = BigInteger(n);
-	if (n._s === 0) {
-		return this;
-	}
-	if (this._s !== n._s) {
-		n = n.negate();
-		return this.subtract(n);
-	}
-
-	var a = this._d;
-	var b = n._d;
-	var al = a.length;
-	var bl = b.length;
-	var sum = new Array(Math.max(al, bl) + 1);
-	var size = Math.min(al, bl);
-	var carry = 0;
-	var digit;
-
-	for (var i = 0; i < size; i++) {
-		digit = a[i] + b[i] + carry;
-		sum[i] = digit % BigInteger_base;
-		carry = (digit / BigInteger_base) | 0;
-	}
-	if (bl > al) {
-		a = b;
-		al = bl;
-	}
-	for (i = size; carry && i < al; i++) {
-		digit = a[i] + carry;
-		sum[i] = digit % BigInteger_base;
-		carry = (digit / BigInteger_base) | 0;
-	}
-	if (carry) {
-		sum[i] = carry;
-	}
-
-	for ( ; i < al; i++) {
-		sum[i] = a[i];
-	}
-
-	return new BigInteger(sum, this._s, CONSTRUCT);
-};
-
-/*
-	Function: negate
-	Get the additive inverse of a <BigInteger>.
-
-	Returns:
-
-		A <BigInteger> with the same magnatude, but with the opposite sign.
-
-	See Also:
-
-		<abs>
-*/
-BigInteger.prototype.negate = function() {
-	return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
-};
-
-/*
-	Function: abs
-	Get the absolute value of a <BigInteger>.
-
-	Returns:
-
-		A <BigInteger> with the same magnatude, but always positive (or zero).
-
-	See Also:
-
-		<negate>
-*/
-BigInteger.prototype.abs = function() {
-	return (this._s < 0) ? this.negate() : this;
-};
-
-/*
-	Function: subtract
-	Subtract two <BigIntegers>.
-
-	Parameters:
-
-		n - The number to subtract from *this*. Will be converted to a <BigInteger>.
-
-	Returns:
-
-		The *n* subtracted from *this*.
-
-	See Also:
-
-		<add>, <multiply>, <quotient>, <prev>
-*/
-BigInteger.prototype.subtract = function(n) {
-	if (this._s === 0) {
-		return BigInteger(n).negate();
-	}
-
-	n = BigInteger(n);
-	if (n._s === 0) {
-		return this;
-	}
-	if (this._s !== n._s) {
-		n = n.negate();
-		return this.add(n);
-	}
-
-	var m = this;
-	// negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
-	if (this._s < 0) {
-		m = new BigInteger(n._d, 1, CONSTRUCT);
-		n = new BigInteger(this._d, 1, CONSTRUCT);
-	}
-
-	// Both are positive => a - b
-	var sign = m.compareAbs(n);
-	if (sign === 0) {
-		return ZERO;
-	}
-	else if (sign < 0) {
-		// swap m and n
-		var t = n;
-		n = m;
-		m = t;
-	}
-
-	// a > b
-	var a = m._d;
-	var b = n._d;
-	var al = a.length;
-	var bl = b.length;
-	var diff = new Array(al); // al >= bl since a > b
-	var borrow = 0;
-	var i;
-	var digit;
-
-	for (i = 0; i < bl; i++) {
-		digit = a[i] - borrow - b[i];
-		if (digit < 0) {
-			digit += BigInteger_base;
-			borrow = 1;
-		}
-		else {
-			borrow = 0;
-		}
-		diff[i] = digit;
-	}
-	for (i = bl; i < al; i++) {
-		digit = a[i] - borrow;
-		if (digit < 0) {
-			digit += BigInteger_base;
-		}
-		else {
-			diff[i++] = digit;
-			break;
-		}
-		diff[i] = digit;
-	}
-	for ( ; i < al; i++) {
-		diff[i] = a[i];
-	}
-
-	return new BigInteger(diff, sign, CONSTRUCT);
-};
-
-(function() {
-	function addOne(n, sign) {
-		var a = n._d;
-		var sum = a.slice();
-		var carry = true;
-		var i = 0;
-
-		while (true) {
-			var digit = (a[i] || 0) + 1;
-			sum[i] = digit % BigInteger_base;
-			if (digit <= BigInteger_base - 1) {
-				break;
-			}
-			++i;
-		}
-
-		return new BigInteger(sum, sign, CONSTRUCT);
-	}
-
-	function subtractOne(n, sign) {
-		var a = n._d;
-		var sum = a.slice();
-		var borrow = true;
-		var i = 0;
-
-		while (true) {
-			var digit = (a[i] || 0) - 1;
-			if (digit < 0) {
-				sum[i] = digit + BigInteger_base;
-			}
-			else {
-				sum[i] = digit;
-				break;
-			}
-			++i;
-		}
-
-		return new BigInteger(sum, sign, CONSTRUCT);
-	}
-
-	/*
-		Function: next
-		Get the next <BigInteger> (add one).
-
-		Returns:
-
-			*this* + 1.
-
-		See Also:
-
-			<add>, <prev>
-	*/
-	BigInteger.prototype.next = function() {
-		switch (this._s) {
-		case 0:
-			return ONE;
-		case -1:
-			return subtractOne(this, -1);
-		// case 1:
-		default:
-			return addOne(this, 1);
-		}
-	};
-
-	/*
-		Function: prev
-		Get the previous <BigInteger> (subtract one).
-
-		Returns:
-
-			*this* - 1.
-
-		See Also:
-
-			<next>, <subtract>
-	*/
-	BigInteger.prototype.prev = function() {
-		switch (this._s) {
-		case 0:
-			return M_ONE;
-		case -1:
-			return addOne(this, -1);
-		// case 1:
-		default:
-			return subtractOne(this, 1);
-		}
-	};
-})();
-
-/*
-	Function: compareAbs
-	Compare the absolute value of two <BigIntegers>.
-
-	Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
-
-	Parameters:
-
-		n - The number to compare to *this*. Will be converted to a <BigInteger>.
-
-	Returns:
-
-		-1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
-
-	See Also:
-
-		<compare>, <abs>
-*/
-BigInteger.prototype.compareAbs = function(n) {
-	if (this === n) {
-		return 0;
-	}
-
-	if (!(n instanceof BigInteger)) {
-		if (!isFinite(n)) {
-			return(isNaN(n) ? n : -1);
-		}
-		n = BigInteger(n);
-	}
-
-	if (this._s === 0) {
-		return (n._s !== 0) ? -1 : 0;
-	}
-	if (n._s === 0) {
-		return 1;
-	}
-
-	var l = this._d.length;
-	var nl = n._d.length;
-	if (l < nl) {
-		return -1;
-	}
-	else if (l > nl) {
-		return 1;
-	}
-
-	var a = this._d;
-	var b = n._d;
-	for (var i = l-1; i >= 0; i--) {
-		if (a[i] !== b[i]) {
-			return a[i] < b[i] ? -1 : 1;
-		}
-	}
-
-	return 0;
-};
-
-/*
-	Function: compare
-	Compare two <BigIntegers>.
-
-	Parameters:
-
-		n - The number to compare to *this*. Will be converted to a <BigInteger>.
-
-	Returns:
-
-		-1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
-
-	See Also:
-
-		<compareAbs>, <isPositive>, <isNegative>, <isUnit>
-*/
-BigInteger.prototype.compare = function(n) {
-	if (this === n) {
-		return 0;
-	}
-
-	n = BigInteger(n);
-
-	if (this._s === 0) {
-		return -n._s;
-	}
-
-	if (this._s === n._s) { // both positive or both negative
-		var cmp = this.compareAbs(n);
-		return cmp * this._s;
-	}
-	else {
-		return this._s;
-	}
-};
-
-/*
-	Function: isUnit
-	Return true iff *this* is either 1 or -1.
-
-	Returns:
-
-		true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
-
-	See Also:
-
-		<isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
-		<BigInteger.ONE>, <BigInteger.M_ONE>
-*/
-BigInteger.prototype.isUnit = function() {
-	return this === ONE ||
-		this === M_ONE ||
-		(this._d.length === 1 && this._d[0] === 1);
-};
-
-/*
-	Function: multiply
-	Multiply two <BigIntegers>.
-
-	Parameters:
-
-		n - The number to multiply *this* by. Will be converted to a
-		<BigInteger>.
-
-	Returns:
-
-		The numbers multiplied together.
-
-	See Also:
-
-		<add>, <subtract>, <quotient>, <square>
-*/
-BigInteger.prototype.multiply = function(n) {
-	// TODO: Consider adding Karatsuba multiplication for large numbers
-	if (this._s === 0) {
-		return ZERO;
-	}
-
-	n = BigInteger(n);
-	if (n._s === 0) {
-		return ZERO;
-	}
-	if (this.isUnit()) {
-		if (this._s < 0) {
-			return n.negate();
-		}
-		return n;
-	}
-	if (n.isUnit()) {
-		if (n._s < 0) {
-			return this.negate();
-		}
-		return this;
-	}
-	if (this === n) {
-		return this.square();
-	}
-
-	var r = (this._d.length >= n._d.length);
-	var a = (r ? this : n)._d; // a will be longer than b
-	var b = (r ? n : this)._d;
-	var al = a.length;
-	var bl = b.length;
-
-	var pl = al + bl;
-	var partial = new Array(pl);
-	var i;
-	for (i = 0; i < pl; i++) {
-		partial[i] = 0;
-	}
-
-	for (i = 0; i < bl; i++) {
-		var carry = 0;
-		var bi = b[i];
-		var jlimit = al + i;
-		var digit;
-		for (var j = i; j < jlimit; j++) {
-			digit = partial[j] + bi * a[j - i] + carry;
-			carry = (digit / BigInteger_base) | 0;
-			partial[j] = (digit % BigInteger_base) | 0;
-		}
-		if (carry) {
-			digit = partial[j] + carry;
-			carry = (digit / BigInteger_base) | 0;
-			partial[j] = digit % BigInteger_base;
-		}
-	}
-	return new BigInteger(partial, this._s * n._s, CONSTRUCT);
-};
-
-// Multiply a BigInteger by a single-digit native number
-// Assumes that this and n are >= 0
-// This is not really intended to be used outside the library itself
-BigInteger.prototype.multiplySingleDigit = function(n) {
-	if (n === 0 || this._s === 0) {
-		return ZERO;
-	}
-	if (n === 1) {
-		return this;
-	}
-
-	var digit;
-	if (this._d.length === 1) {
-		digit = this._d[0] * n;
-		if (digit >= BigInteger_base) {
-			return new BigInteger([(digit % BigInteger_base)|0,
-					(digit / BigInteger_base)|0], 1, CONSTRUCT);
-		}
-		return new BigInteger([digit], 1, CONSTRUCT);
-	}
-
-	if (n === 2) {
-		return this.add(this);
-	}
-	if (this.isUnit()) {
-		return new BigInteger([n], 1, CONSTRUCT);
-	}
-
-	var a = this._d;
-	var al = a.length;
-
-	var pl = al + 1;
-	var partial = new Array(pl);
-	for (var i = 0; i < pl; i++) {
-		partial[i] = 0;
-	}
-
-	var carry = 0;
-	for (var j = 0; j < al; j++) {
-		digit = n * a[j] + carry;
-		carry = (digit / BigInteger_base) | 0;
-		partial[j] = (digit % BigInteger_base) | 0;
-	}
-	if (carry) {
-		partial[j] = carry;
-	}
-
-	return new BigInteger(partial, 1, CONSTRUCT);
-};
-
-/*
-	Function: square
-	Multiply a <BigInteger> by itself.
-
-	This is slightly faster than regular multiplication, since it removes the
-	duplicated multiplcations.
-
-	Returns:
-
-		> this.multiply(this)
-
-	See Also:
-		<multiply>
-*/
-BigInteger.prototype.square = function() {
-	// Normally, squaring a 10-digit number would take 100 multiplications.
-	// Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
-	// This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
-	// Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
-
-	if (this._s === 0) {
-		return ZERO;
-	}
-	if (this.isUnit()) {
-		return ONE;
-	}
-
-	var digits = this._d;
-	var length = digits.length;
-	var imult1 = new Array(length + length + 1);
-	var product, carry, k;
-	var i;
-
-	// Calculate diagonal
-	for (i = 0; i < length; i++) {
-		k = i * 2;
-		product = digits[i] * digits[i];
-		carry = (product / BigInteger_base) | 0;
-		imult1[k] = product % BigInteger_base;
-		imult1[k + 1] = carry;
-	}
-
-	// Calculate repeating part
-	for (i = 0; i < length; i++) {
-		carry = 0;
-		k = i * 2 + 1;
-		for (var j = i + 1; j < length; j++, k++) {
-			product = digits[j] * digits[i] * 2 + imult1[k] + carry;
-			carry = (product / BigInteger_base) | 0;
-			imult1[k] = product % BigInteger_base;
-		}
-		k = length + i;
-		var digit = carry + imult1[k];
-		carry = (digit / BigInteger_base) | 0;
-		imult1[k] = digit % BigInteger_base;
-		imult1[k + 1] += carry;
-	}
-
-	return new BigInteger(imult1, 1, CONSTRUCT);
-};
-
-/*
-	Function: quotient
-	Divide two <BigIntegers> and truncate towards zero.
-
-	<quotient> throws an exception if *n* is zero.
-
-	Parameters:
-
-		n - The number to divide *this* by. Will be converted to a <BigInteger>.
-
-	Returns:
-
-		The *this* / *n*, truncated to an integer.
-
-	See Also:
-
-		<add>, <subtract>, <multiply>, <divRem>, <remainder>
-*/
-BigInteger.prototype.quotient = function(n) {
-	return this.divRem(n)[0];
-};
-
-/*
-	Function: divide
-	Deprecated synonym for <quotient>.
-*/
-BigInteger.prototype.divide = BigInteger.prototype.quotient;
-
-/*
-	Function: remainder
-	Calculate the remainder of two <BigIntegers>.
-
-	<remainder> throws an exception if *n* is zero.
-
-	Parameters:
-
-		n - The remainder after *this* is divided *this* by *n*. Will be
-			converted to a <BigInteger>.
-
-	Returns:
-
-		*this* % *n*.
-
-	See Also:
-
-		<divRem>, <quotient>
-*/
-BigInteger.prototype.remainder = function(n) {
-	return this.divRem(n)[1];
-};
-
-/*
-	Function: divRem
-	Calculate the integer quotient and remainder of two <BigIntegers>.
-
-	<divRem> throws an exception if *n* is zero.
-
-	Parameters:
-
-		n - The number to divide *this* by. Will be converted to a <BigInteger>.
-
-	Returns:
-
-		A two-element array containing the quotient and the remainder.
-
-		> a.divRem(b)
-
-		is exactly equivalent to
-
-		> [a.quotient(b), a.remainder(b)]
-
-		except it is faster, because they are calculated at the same time.
-
-	See Also:
-
-		<quotient>, <remainder>
-*/
-BigInteger.prototype.divRem = function(n) {
-	n = BigInteger(n);
-	if (n._s === 0) {
-		throw new Error("Divide by zero");
-	}
-	if (this._s === 0) {
-		return [ZERO, ZERO];
-	}
-	if (n._d.length === 1) {
-		return this.divRemSmall(n._s * n._d[0]);
-	}
-
-	// Test for easy cases -- |n1| <= |n2|
-	switch (this.compareAbs(n)) {
-	case 0: // n1 == n2
-		return [this._s === n._s ? ONE : M_ONE, ZERO];
-	case -1: // |n1| < |n2|
-		return [ZERO, this];
-	}
-
-	var sign = this._s * n._s;
-	var a = n.abs();
-	var b_digits = this._d;
-	var b_index = b_digits.length;
-	var digits = n._d.length;
-	var quot = [];
-	var guess;
-
-	var part = new BigInteger([], 0, CONSTRUCT);
-
-	while (b_index) {
-		part._d.unshift(b_digits[--b_index]);
-		part = new BigInteger(part._d, 1, CONSTRUCT);
-
-		if (part.compareAbs(n) < 0) {
-			quot.push(0);
-			continue;
-		}
-		if (part._s === 0) {
-			guess = 0;
-		}
-		else {
-			var xlen = part._d.length, ylen = a._d.length;
-			var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
-			var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
-			if (part._d.length > a._d.length) {
-				// The length of part._d can either match a._d length,
-				// or exceed it by one.
-				highx = (highx+1)*BigInteger_base;
-			}
-			guess = Math.ceil(highx/highy);
-		}
-		do {
-			var check = a.multiplySingleDigit(guess);
-			if (check.compareAbs(part) <= 0) {
-				break;
-			}
-			guess--;
-		} while (guess);
-
-		quot.push(guess);
-		if (!guess) {
-			continue;
-		}
-		var diff = part.subtract(check);
-		part._d = diff._d.slice();
-	}
-
-	return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
-		   new BigInteger(part._d, this._s, CONSTRUCT)];
-};
-
-// Throws an exception if n is outside of (-BigInteger.base, -1] or
-// [1, BigInteger.base).  It's not necessary to call this, since the
-// other division functions will call it if they are able to.
-BigInteger.prototype.divRemSmall = function(n) {
-	var r;
-	n = +n;
-	if (n === 0) {
-		throw new Error("Divide by zero");
-	}
-
-	var n_s = n < 0 ? -1 : 1;
-	var sign = this._s * n_s;
-	n = Math.abs(n);
-
-	if (n < 1 || n >= BigInteger_base) {
-		throw new Error("Argument out of range");
-	}
-
-	if (this._s === 0) {
-		return [ZERO, ZERO];
-	}
-
-	if (n === 1 || n === -1) {
-		return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
-	}
-
-	// 2 <= n < BigInteger_base
-
-	// divide a single digit by a single digit
-	if (this._d.length === 1) {
-		var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
-		r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
-		if (sign < 0) {
-			q = q.negate();
-		}
-		if (this._s < 0) {
-			r = r.negate();
-		}
-		return [q, r];
-	}
-
-	var digits = this._d.slice();
-	var quot = new Array(digits.length);
-	var part = 0;
-	var diff = 0;
-	var i = 0;
-	var guess;
-
-	while (digits.length) {
-		part = part * BigInteger_base + digits[digits.length - 1];
-		if (part < n) {
-			quot[i++] = 0;
-			digits.pop();
-			diff = BigInteger_base * diff + part;
-			continue;
-		}
-		if (part === 0) {
-			guess = 0;
-		}
-		else {
-			guess = (part / n) | 0;
-		}
-
-		var check = n * guess;
-		diff = part - check;
-		quot[i++] = guess;
-		if (!guess) {
-			digits.pop();
-			continue;
-		}
-
-		digits.pop();
-		part = diff;
-	}
-
-	r = new BigInteger([diff], 1, CONSTRUCT);
-	if (this._s < 0) {
-		r = r.negate();
-	}
-	return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
-};
-
-/*
-	Function: isEven
-	Return true iff *this* is divisible by two.
-
-	Note that <BigInteger.ZERO> is even.
-
-	Returns:
-
-		true if *this* is even, false otherwise.
-
-	See Also:
-
-		<isOdd>
-*/
-BigInteger.prototype.isEven = function() {
-	var digits = this._d;
-	return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
-};
-
-/*
-	Function: isOdd
-	Return true iff *this* is not divisible by two.
-
-	Returns:
-
-		true if *this* is odd, false otherwise.
-
-	See Also:
-
-		<isEven>
-*/
-BigInteger.prototype.isOdd = function() {
-	return !this.isEven();
-};
-
-/*
-	Function: sign
-	Get the sign of a <BigInteger>.
-
-	Returns:
-
-		* -1 if *this* < 0
-		* 0 if *this* == 0
-		* +1 if *this* > 0
-
-	See Also:
-
-		<isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
-*/
-BigInteger.prototype.sign = function() {
-	return this._s;
-};
-
-/*
-	Function: isPositive
-	Return true iff *this* > 0.
-
-	Returns:
-
-		true if *this*.compare(<BigInteger.ZERO>) == 1.
-
-	See Also:
-
-		<sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
-*/
-BigInteger.prototype.isPositive = function() {
-	return this._s > 0;
-};
-
-/*
-	Function: isNegative
-	Return true iff *this* < 0.
-
-	Returns:
-
-		true if *this*.compare(<BigInteger.ZERO>) == -1.
-
-	See Also:
-
-		<sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
-*/
-BigInteger.prototype.isNegative = function() {
-	return this._s < 0;
-};
-
-/*
-	Function: isZero
-	Return true iff *this* == 0.
-
-	Returns:
-
-		true if *this*.compare(<BigInteger.ZERO>) == 0.
-
-	See Also:
-
-		<sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
-*/
-BigInteger.prototype.isZero = function() {
-	return this._s === 0;
-};
-
-/*
-	Function: exp10
-	Multiply a <BigInteger> by a power of 10.
-
-	This is equivalent to, but faster than
-
-	> if (n >= 0) {
-	>	 return this.multiply(BigInteger("1e" + n));
-	> }
-	> else { // n <= 0
-	>	 return this.quotient(BigInteger("1e" + -n));
-	> }
-
-	Parameters:
-
-		n - The power of 10 to multiply *this* by. *n* is converted to a
-		javascipt number and must be no greater than <BigInteger.MAX_EXP>
-		(0x7FFFFFFF), or an exception will be thrown.
-
-	Returns:
-
-		*this* * (10 ** *n*), truncated to an integer if necessary.
-
-	See Also:
-
-		<pow>, <multiply>
-*/
-BigInteger.prototype.exp10 = function(n) {
-	n = +n;
-	if (n === 0) {
-		return this;
-	}
-	if (Math.abs(n) > Number(MAX_EXP)) {
-		throw new Error("exponent too large in BigInteger.exp10");
-	}
-	// Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
-	if (this._s === 0) {
-		return ZERO;
-	}
-	if (n > 0) {
-		var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
-
-		for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
-			k._d.unshift(0);
-		}
-		if (n == 0)
-			return k;
-		k._s = 1;
-		k = k.multiplySingleDigit(Math.pow(10, n));
-		return (this._s < 0 ? k.negate() : k);
-	} else if (-n >= this._d.length*BigInteger_base_log10) {
-		return ZERO;
-	} else {
-		var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
-
-		for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
-			k._d.shift();
-		}
-		return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
-	}
-};
-
-/*
-	Function: pow
-	Raise a <BigInteger> to a power.
-
-	In this implementation, 0**0 is 1.
-
-	Parameters:
-
-		n - The exponent to raise *this* by. *n* must be no greater than
-		<BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
-
-	Returns:
-
-		*this* raised to the *nth* power.
-
-	See Also:
-
-		<modPow>
-*/
-BigInteger.prototype.pow = function(n) {
-	if (this.isUnit()) {
-		if (this._s > 0) {
-			return this;
-		}
-		else {
-			return BigInteger(n).isOdd() ? this : this.negate();
-		}
-	}
-
-	n = BigInteger(n);
-	if (n._s === 0) {
-		return ONE;
-	}
-	else if (n._s < 0) {
-		if (this._s === 0) {
-			throw new Error("Divide by zero");
-		}
-		else {
-			return ZERO;
-		}
-	}
-	if (this._s === 0) {
-		return ZERO;
-	}
-	if (n.isUnit()) {
-		return this;
-	}
-
-	if (n.compareAbs(MAX_EXP) > 0) {
-		throw new Error("exponent too large in BigInteger.pow");
-	}
-	var x = this;
-	var aux = ONE;
-	var two = BigInteger.small[2];
-
-	while (n.isPositive()) {
-		if (n.isOdd()) {
-			aux = aux.multiply(x);
-			if (n.isUnit()) {
-				return aux;
-			}
-		}
-		x = x.square();
-		n = n.quotient(two);
-	}
-
-	return aux;
-};
-
-/*
-	Function: modPow
-	Raise a <BigInteger> to a power (mod m).
-
-	Because it is reduced by a modulus, <modPow> is not limited by
-	<BigInteger.MAX_EXP> like <pow>.
-
-	Parameters:
-
-		exponent - The exponent to raise *this* by. Must be positive.
-		modulus - The modulus.
-
-	Returns:
-
-		*this* ^ *exponent* (mod *modulus*).
-
-	See Also:
-
-		<pow>, <mod>
-*/
-BigInteger.prototype.modPow = function(exponent, modulus) {
-	var result = ONE;
-	var base = this;
-
-	while (exponent.isPositive()) {
-		if (exponent.isOdd()) {
-			result = result.multiply(base).remainder(modulus);
-		}
-
-		exponent = exponent.quotient(BigInteger.small[2]);
-		if (exponent.isPositive()) {
-			base = base.square().remainder(modulus);
-		}
-	}
-
-	return result;
-};
-
-/*
-	Function: log
-	Get the natural logarithm of a <BigInteger> as a native JavaScript number.
-
-	This is equivalent to
-
-	> Math.log(this.toJSValue())
-
-	but handles values outside of the native number range.
-
-	Returns:
-
-		log( *this* )
-
-	See Also:
-
-		<toJSValue>
-*/
-BigInteger.prototype.log = function() {
-	switch (this._s) {
-	case 0:	 return -Infinity;
-	case -1: return NaN;
-	default: // Fall through.
-	}
-
-	var l = this._d.length;
-
-	if (l*BigInteger_base_log10 < 30) {
-		return Math.log(this.valueOf());
-	}
-
-	var N = Math.ceil(30/BigInteger_base_log10);
-	var firstNdigits = this._d.slice(l - N);
-	return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
-};
-
-/*
-	Function: valueOf
-	Convert a <BigInteger> to a native JavaScript integer.
-
-	This is called automatically by JavaScipt to convert a <BigInteger> to a
-	native value.
-
-	Returns:
-
-		> parseInt(this.toString(), 10)
-
-	See Also:
-
-		<toString>, <toJSValue>
-*/
-BigInteger.prototype.valueOf = function() {
-	return parseInt(this.toString(), 10);
-};
-
-/*
-	Function: toJSValue
-	Convert a <BigInteger> to a native JavaScript integer.
-
-	This is the same as valueOf, but more explicitly named.
-
-	Returns:
-
-		> parseInt(this.toString(), 10)
-
-	See Also:
-
-		<toString>, <valueOf>
-*/
-BigInteger.prototype.toJSValue = function() {
-	return parseInt(this.toString(), 10);
-};
-
-/*
-	Function: lowVal
-	Author: Lucas Jones
-*/
-BigInteger.prototype.lowVal = function () {
-	return this._d[0] || 0;
-};
-
-var MAX_EXP = BigInteger(0x7FFFFFFF);
-// Constant: MAX_EXP
-// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
-BigInteger.MAX_EXP = MAX_EXP;
-
-(function() {
-	function makeUnary(fn) {
-		return function(a) {
-			return fn.call(BigInteger(a));
-		};
-	}
-
-	function makeBinary(fn) {
-		return function(a, b) {
-			return fn.call(BigInteger(a), BigInteger(b));
-		};
-	}
-
-	function makeTrinary(fn) {
-		return function(a, b, c) {
-			return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
-		};
-	}
-
-	(function() {
-		var i, fn;
-		var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
-		var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
-		var trinary = ["modPow"];
-
-		for (i = 0; i < unary.length; i++) {
-			fn = unary[i];
-			BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
-		}
-
-		for (i = 0; i < binary.length; i++) {
-			fn = binary[i];
-			BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
-		}
-
-		for (i = 0; i < trinary.length; i++) {
-			fn = trinary[i];
-			BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
-		}
-
-		BigInteger.exp10 = function(x, n) {
-			return BigInteger(x).exp10(n);
-		};
-	})();
-})();
-
-exports.BigInteger = BigInteger;
-})(typeof exports !== 'undefined' ? exports : this);
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_MoneroDaemon.js.html b/docs/src_main_js_daemon_MoneroDaemon.js.html deleted file mode 100644 index 14b0f45f8..000000000 --- a/docs/src_main_js_daemon_MoneroDaemon.js.html +++ /dev/null @@ -1,761 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/MoneroDaemon.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/MoneroDaemon.js

- - - - - - -
-
-
const MoneroError = require("../common/MoneroError");
-
-/**
- * Copyright (c) woodser
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/**
- * Monero daemon interface and default implementations.
- * 
- * @interface
- */
-class MoneroDaemon {
-    
-  /**
-   * Register a listener to receive daemon notifications.
-   * 
-   * @param {MoneroDaemonListener} listener - listener to receive daemon notifications
-   */
-  async addListener(listener) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Unregister a listener to receive daemon notifications.
-   * 
-   * @param {MoneroDaemonListener} listener - listener to unregister
-   */
-  async removeListener(listener) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get the listeners registered with the daemon.
-   * 
-   * @return {MoneroDaemonListener[]} the registered listeners
-   */
-  getListeners() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Indicates if the client is connected to the daemon via RPC.
-   * 
-   * @return {boolean} true if the client is connected to the daemon, false otherwise
-   */
-  async isConnected() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Gets the version of the daemon.
-   * 
-   * @return {MoneroVersion} the version of the daemon
-   */
-  async getVersion() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Indicates if the daemon is trusted xor untrusted.
-   * 
-   * @return {boolean} true if the daemon is trusted, false otherwise
-   */
-  async isTrusted() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get the number of blocks in the longest chain known to the node.
-   * 
-   * @return {int} the number of blocks
-   */
-  async getHeight() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get a block's hash by its height.
-   * 
-   * @param {int} height - height of the block hash to get
-   * @return {string} the block's hash at the given height
-   */
-  async getBlockHash(height) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get a block template for mining a new block.
-   * 
-   * @param {string} walletAddress - address of the wallet to receive miner transactions if block is successfully mined
-   * @param {int} reserveSize - reserve size (optional)
-   * @return {MoneroBlockTemplate} is a block template for mining a new block
-   */
-  async getBlockTemplate(walletAddress, reserveSize) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get the last block's header.
-   * 
-   * @return {MoneroBlockHeader} last block's header
-   */
-  async getLastBlockHeader() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get a block header by its hash.
-   * 
-   * @param {string} blockHash - hash of the block to get the header of
-   * @return {MoneroBlockHeader} block's header
-   */
-  async getBlockHeaderByHash(blockHash) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get a block header by its height.
-   * 
-   * @param {int} height - height of the block to get the header of
-   * @return {MoneroBlockHeader} block's header
-   */
-  async getBlockHeaderByHeight(height) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get block headers for the given range.
-   * 
-   * @param {int} startHeight - start height lower bound inclusive (optional)
-   * @param {int} endHeight - end height upper bound inclusive (optional)
-   * @return {MoneroBlockHeader[]} for the given range
-   */
-  async getBlockHeadersByRange(startHeight, endHeight) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get a block by hash.
-   * 
-   * @param {string} blockHash - hash of the block to get
-   * @return {MoneroBlock} with the given hash
-   */
-  async getBlockByHash(blockHash) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get blocks by hash.
-   * 
-   * @param {string[]} blockHashes - array of hashes; first 10 blocks hashes goes sequential,
-   *        next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64 and so on,
-   *        and the last one is always genesis block
-   * @param {int} startHeight - start height to get blocks by hash
-   * @param {boolean} prune - specifies if returned blocks should be pruned (defaults to false)  // TODO: test default
-   * @return {MoneroBlock[]} retrieved blocks
-   */
-  async getBlocksByHash(blockHashes, startHeight, prune) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get a block by height.
-   * 
-   * @param {int} height - height of the block to get
-   * @return {MoneroBlock} with the given height
-   */
-  async getBlockByHeight(height) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get blocks at the given heights.
-   * 
-   * @param {int[]} heights - heights of the blocks to get
-   * @return {MoneroBlock[]} are blocks at the given heights
-   */
-  async getBlocksByHeight(heights) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get blocks in the given height range.
-   * 
-   * @param {int} startHeight - start height lower bound inclusive (optional)
-   * @param {int} endHeight - end height upper bound inclusive (optional)
-   * @return {MoneroBlock[]} are blocks in the given height range
-   */
-  async getBlocksByRange(startHeight, endHeight) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get blocks in the given height range as chunked requests so that each request is
-   * not too big.
-   * 
-   * @param {int} startHeight - start height lower bound inclusive (optional)
-   * @param {int} endHeight - end height upper bound inclusive (optional)
-   * @param {int} maxChunkSize - maximum chunk size in any one request (default 3,000,000 bytes)
-   * @return {MoneroBlock[]} blocks in the given height range
-   */
-  async getBlocksByRangeChunked(startHeight, endHeight, maxChunkSize) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get block hashes as a binary request to the daemon.
-   * 
-   * @param {string[]} blockHashes - specify block hashes to fetch; first 10 blocks hash goes
-   *        sequential, next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64
-   *        and so on, and the last one is always genesis block
-   * @param {int} startHeight - starting height of block hashes to return
-   * @return {string[]} requested block hashes     
-   */
-  async getBlockHashes(blockHashes, startHeight) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get a transaction by hash.
-   * 
-   * @param {string} txHash - hash of the transaction to get
-   * @param {boolean} prune - specifies if the returned tx should be pruned (defaults to false)
-   * @return {MoneroTx} transaction with the given hash or undefined if not found
-   */
-  async getTx(txHash, prune = false) {
-    return (await this.getTxs([txHash], prune))[0];
-  }
-  
-  /**
-   * Get transactions by hashes.
-   * 
-   * @param {string[]} txHashes - hashes of transactions to get
-   * @param {boolean} prune - specifies if the returned txs should be pruned (defaults to false)
-   * @return {MoneroTx[]} found transactions with the given hashes
-   */
-  async getTxs(txHashes, prune = false) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get a transaction hex by hash.
-   * 
-   * @param {string} txHash - hash of the transaction to get hex from
-   * @param {boolean} prune - specifies if the returned tx hex should be pruned (defaults to false)
-   * @return {string} tx hex with the given hash
-   */
-  async getTxHex(txHash, prune = false) {
-    return (await this.getTxHexes([txHash], prune))[0];
-  }
-  
-  /**
-   * Get transaction hexes by hashes.
-   * 
-   * @param {string[]} txHashes - hashes of transactions to get hexes from
-   * @param {boolean} prune - specifies if the returned tx hexes should be pruned (defaults to false)
-   * @return {string[]} tx hexes
-   */
-  async getTxHexes(txHashes, prune = false) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Gets the total emissions and fees from the genesis block to the current height.
-   * 
-   * @param {int} height - height to start computing the miner sum
-   * @param {int} numBlocks - number of blocks to include in the sum
-   * @return {MoneroMinerTxSum} encapsulates the total emissions and fees since the genesis block
-   */
-  async getMinerTxSum(height, numBlocks) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get mining fee estimates per kB.
-   * 
-   * @param {number} graceBlocks TODO
-   * @return {MoneroFeeEstimate} mining fee estimates per kB
-   */
-  async getFeeEstimate(graceBlocks) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Submits a transaction to the daemon's pool.
-   * 
-   * @param {string} txHex - raw transaction hex to submit
-   * @param {boolean} doNotRelay specifies if the tx should be relayed (optional)
-   * @return {MoneroSubmitTxResult} contains submission results
-   */
-  async submitTxHex(txHex, doNotRelay) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Relays a transaction by hash.
-   * 
-   * @param {string} txHash - hash of the transaction to relay
-   */
-  async relayTxByHash(txHash) {
-    const assert = require("assert");
-    assert.equal(typeof txHash, "string", "Must provide a transaction hash");
-    await this.relayTxsByHash([txHash]);
-  }
-  
-  /**
-   * Relays transactions by hash.
-   * 
-   * @param {string[]} txHashes - hashes of the transactinos to relay
-   */
-  async relayTxsByHash(txHashes) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get valid transactions seen by the node but not yet mined into a block, as well
-   * as spent key image information for the tx pool.
-   * 
-   * @return {MoneroTx[]} are transactions in the transaction pool
-   */
-  async getTxPool() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get hashes of transactions in the transaction pool.
-   * 
-   * @return {string[]} are hashes of transactions in the transaction pool
-   */
-  async getTxPoolHashes() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get all transaction pool backlog.
-   * 
-   * @return {MoneroTxBacklogEntry[]} backlog entries 
-   */
-  async getTxPoolBacklog() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get transaction pool statistics.
-   * 
-   * @return {MoneroTxPoolStats} contains statistics about the transaction pool
-   */
-  async getTxPoolStats() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Flush transactions from the tx pool.
-   * 
-   * @param {(string|string[])} hashes - specific transactions to flush (defaults to all)
-   */
-  async flushTxPool(hashes) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get the spent status of the given key image.
-   * 
-   * @param {string} keyImage - key image hex to get the status of
-   * @return {MoneroKeyImageSpentStatus} status of the key image
-   */
-  async getKeyImageSpentStatus(keyImage) {
-    return (await this.getKeyImageSpentStatuses([keyImage]))[0];
-  }
-  
-  /**
-   * Get the spent status of each given key image.
-   * 
-   * @param {string[]} keyImages are hex key images to get the statuses of
-   * @return {MoneroKeyImageSpentStatus[]} status for each key image
-   */
-  async getKeyImageSpentStatuses(keyImages) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get outputs identified by a list of output amounts and indices as a binary
-   * request.
-   * 
-   * @param {MoneroOutput[]} outputs - identify each output by amount and index
-   * @return {MoneroOutput[]} identified outputs
-   */
-  async getOutputs(outputs) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get a histogram of output amounts. For all amounts (possibly filtered by
-   * parameters), gives the number of outputs on the chain for that amount.
-   * RingCT outputs counts as 0 amount.
-   * 
-   * @param {BigInteger[]} amounts - amounts of outputs to make the histogram with
-   * @param {int} minCount - TODO
-   * @param {int} maxCount - TODO
-   * @param {boolean} isUnlocked - makes a histogram with outputs with the specified lock state
-   * @param {int} recentCutoff - TODO
-   * @return {MoneroOutputHistogramEntry[]} are entries meeting the parameters
-   */
-  async getOutputHistogram(amounts, minCount, maxCount, isUnlocked, recentCutoff) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Creates an output distribution.
-   * 
-   * @param {BigInteger[]} amounts - amounts of outputs to make the distribution with
-   * @param {boolean} cumulative - specifies if the results should be cumulative (defaults to TODO)
-   * @param {int} startHeight - start height lower bound inclusive (optional)
-   * @param {int} endHeight - end height upper bound inclusive (optional)
-   * @return {MoneroOutputDistributionEntry[]} are entries meeting the parameters
-   */
-  async getOutputDistribution(amounts, cumulative, startHeight, endHeight) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get general information about the state of the node and the network.
-   * 
-   * @return {MoneroDaemonInfo} is general information about the node and network
-   */
-  async getInfo() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get synchronization information.
-   * 
-   * @return {MoneroDaemonSyncInfo} contains sync information
-   */
-  async getSyncInfo() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Look up information regarding hard fork voting and readiness.
-   * 
-   * @return {MoneroHardForkInfo} contains hard fork information
-   */
-  async getHardForkInfo() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get alternative chains seen by the node.
-   * 
-   * @return {MoneroAltChain[]} alternative chains
-   */
-  async getAltChains() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get known block hashes which are not on the main chain.
-   * 
-   * @return {string[]} known block hashes which are not on the main chain
-   */
-  async getAltBlockHashes() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get the download bandwidth limit.
-   * 
-   * @return {int} download bandwidth limit
-   */
-  async getDownloadLimit() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Set the download bandwidth limit.
-   * 
-   * @param {int} limit - download limit to set (-1 to reset to default)
-   * @return {int} new download limit after setting
-   */
-  async setDownloadLimit(limit) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Reset the download bandwidth limit.
-   * 
-   * @return {int} download bandwidth limit after resetting
-   */
-  async resetDownloadLimit() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get the upload bandwidth limit.
-   * 
-   * @return {int} upload bandwidth limit
-   */
-  async getUploadLimit() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Set the upload bandwidth limit.
-   * 
-   * @param limit - upload limit to set (-1 to reset to default)
-   * @return {int} new upload limit after setting
-   */
-  async setUploadLimit(limit) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Reset the upload bandwidth limit.
-   * 
-   * @return {int} upload bandwidth limit after resetting
-   */
-  async resetUploadLimit() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get peers with active incoming or outgoing connections to the node.
-   * 
-   * @return {MoneroPeer[]} the daemon's peers
-   */
-  async getPeers() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get known peers including their last known online status.
-   * 
-   * @return {MoneroPeer[]} the daemon's known peers
-   */
-  async getKnownPeers() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Limit number of outgoing peers.
-   * 
-   * @param {int} limit - maximum number of outgoing peers
-   */
-  async setOutgoingPeerLimit(limit) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Limit number of incoming peers.
-   * 
-   * @param {int} limit - maximum number of incoming peers
-   */
-  async setIncomingPeerLimit(limit) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get peer bans.
-   * 
-   * @return {MoneroBan[]} entries about banned peers
-   */
-  async getPeerBans() {
-    throw new MoneroError("Subclass must implement");
-  }
-
-  /**
-   * Ban a peer node.
-   * 
-   * @param {MoneroBan} ban - contains information about a node to ban
-   */
-  async setPeerBan(ban) {
-    return await this.setPeerBans([ban]);
-  }
-  
-  /**
-   * Ban peers nodes.
-   * 
-   * @param {MoneroBan[]} bans - specify which peers to ban
-   */
-  async setPeerBans(bans) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Start mining.
-   * 
-   * @param {string} address - address given miner rewards if the daemon mines a block
-   * @param {integer} numThreads - number of mining threads to run
-   * @param {boolean} isBackground - specifies if the miner should run in the background or not
-   * @param {boolean} ignoreBattery - specifies if the battery state (e.g. on laptop) should be ignored or not
-   */
-  async startMining(address, numThreads, isBackground, ignoreBattery) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Stop mining.
-   */
-  async stopMining() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get the daemon's mining status.
-   * 
-   * @return {MoneroMiningStatus} daemon's mining status
-   */
-  async getMiningStatus() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Submit a mined block to the network.
-   * 
-   * @param {string} blockBlob - mined block to submit
-   */
-  async submitBlock(blockBlob) {
-    await this.submitBlocks([blockBlob]);
-  }
-
-  /**
-   * Prune the blockchain.
-   * 
-   * @param {boolean} check specifies to check the pruning (default false)
-   * @return {MoneroPruneResult} the prune result
-   */
-  async pruneBlockchain(check) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Submit mined blocks to the network.
-   * 
-   * @param {string[]} blockBlobs - mined blocks to submit
-   */
-  async submitBlocks(blockBlobs) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Check for update.
-   * 
-   * @return {MoneroDaemonUpdateCheckResult} the result
-   */
-  async checkForUpdate() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Download an update.
-   * 
-   * @param {string} path - path to download the update (optional)
-   * @return {MoneroDaemonUpdateDownloadResult} the result
-   */
-  async downloadUpdate(path) {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Safely disconnect and shut down the daemon.
-   */
-  async stop() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  /**
-   * Get the header of the next block added to the chain.
-   * 
-   * @return {MoneroBlockHeader} header of the next block added to the chain
-   */
-  async waitForNextBlockHeader() {
-    throw new MoneroError("Subclass must implement");
-  }
-  
-  // ----------------------------- STATIC UTILITIES ---------------------------
-  
-  /**
-   * Parses a network string to an enumerated type.
-   * 
-   * @param {string} network - network string to parse
-   * @return {MoneroNetworkType} enumerated network type
-   */
-  static parseNetworkType(network) {
-    const MoneroNetworkType = require("./model/MoneroNetworkType");
-    if (network === "mainnet") return MoneroNetworkType.MAINNET;
-    if (network === "testnet") return MoneroNetworkType.TESTNET;
-    if (network === "stagenet") return MoneroNetworkType.STAGENET;
-    throw new MoneroError("Invalid network type to parse: " + network);
-  }
-}
-
-module.exports = MoneroDaemon;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_MoneroDaemonRpc.js.html b/docs/src_main_js_daemon_MoneroDaemonRpc.js.html deleted file mode 100644 index 51c53620c..000000000 --- a/docs/src_main_js_daemon_MoneroDaemonRpc.js.html +++ /dev/null @@ -1,1955 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/MoneroDaemonRpc.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/MoneroDaemonRpc.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../common/biginteger").BigInteger;
-const GenUtils = require("../common/GenUtils");
-const LibraryUtils = require("../common/LibraryUtils");
-const TaskLooper = require("../common/TaskLooper");
-const MoneroAltChain = require("./model/MoneroAltChain");
-const MoneroBan = require("./model/MoneroBan");
-const MoneroBlock = require("./model/MoneroBlock");
-const MoneroBlockHeader = require("./model/MoneroBlockHeader");
-const MoneroBlockTemplate = require("./model/MoneroBlockTemplate");
-const MoneroDaemon = require("./MoneroDaemon");
-const MoneroDaemonInfo = require("./model/MoneroDaemonInfo");
-const MoneroDaemonListener = require("./model/MoneroDaemonListener");
-const MoneroDaemonSyncInfo = require("./model/MoneroDaemonSyncInfo");
-const MoneroError = require("../common/MoneroError");
-const MoneroFeeEstimate = require("./model/MoneroFeeEstimate");
-const MoneroHardForkInfo = require("./model/MoneroHardForkInfo");
-const MoneroKeyImage = require("./model/MoneroKeyImage");
-const MoneroMinerTxSum = require("./model/MoneroMinerTxSum");
-const MoneroMiningStatus = require("./model/MoneroMiningStatus");
-const MoneroNetworkType = require("./model/MoneroNetworkType");
-const MoneroOutput = require("./model/MoneroOutput");
-const MoneroOutputHistogramEntry = require("./model/MoneroOutputHistogramEntry");
-const MoneroPeer = require("./model/MoneroPeer");
-const MoneroPruneResult = require("./model/MoneroPruneResult");
-const MoneroRpcConnection = require("../common/MoneroRpcConnection");
-const MoneroSubmitTxResult = require("./model/MoneroSubmitTxResult");
-const MoneroTx = require("./model/MoneroTx");
-const MoneroTxPoolStats = require("./model/MoneroTxPoolStats");
-const MoneroUtils = require("../common/MoneroUtils");
-const MoneroVersion = require("./model/MoneroVersion");
-
-/**
- * Copyright (c) woodser
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/**
- * Implements a MoneroDaemon as a client of monerod.
- * 
- * @implements {MoneroDaemon}
- * @hideconstructor
- */
-class MoneroDaemonRpc extends MoneroDaemon {
-  
-  /**
-   * <p>Construct a daemon RPC client (for internal use).<p>
-   * 
-   * @param {string|object|MoneroRpcConnection} uriOrConfig - uri of monerod or JS config object or MoneroRpcConnection
-   * @param {string} uriOrConfig.uri - uri of monerod
-   * @param {string} uriOrConfig.username - username to authenticate with monerod (optional)
-   * @param {string} uriOrConfig.password - password to authenticate with monerod (optional)
-   * @param {boolean} uriOrConfig.rejectUnauthorized - rejects self-signed certificates if true (default true)
-   * @param {number} uriOrConfig.pollInterval - poll interval to query for updates in ms (default 5000)
-   * @param {string} username - username to authenticate with monerod (optional)
-   * @param {string} password - password to authenticate with monerod (optional)
-   * @param {boolean} rejectUnauthorized - rejects self-signed certificates if true (default true)
-   * @param {number} pollInterval - poll interval to query for updates in ms (default 5000)
-   * @param {boolean} proxyToWorker - runs the daemon client in a worker if true (default true)
-   */
-  constructor(uriOrConfig, username, password, rejectUnauthorized, pollInterval, proxyToWorker) {
-    super();
-    if (GenUtils.isArray(uriOrConfig)) throw new Error("Use monerojs.connectToDaemonRpc(...) to use terminal parameters");
-    this.config = MoneroDaemonRpc._normalizeConfig(uriOrConfig, username, password, rejectUnauthorized, pollInterval, proxyToWorker);
-    if (this.config.proxyToWorker) throw new Error("Use monerojs.connectToDaemonRpc(...) to proxy to worker");
-    let rpcConfig = Object.assign({}, this.config);
-    delete rpcConfig.proxyToWorker;
-    delete rpcConfig.pollInterval;
-    this.rpc = new MoneroRpcConnection(rpcConfig);
-    this.listeners = [];      // block listeners
-    this.cachedHeaders = {};  // cached headers for fetching blocks in bound chunks
-  }
-  
-  /**
-   * <p>Create a client connected to monerod (for internal use).</p>
-   * 
-   * @param {string|string[]|object|MoneroRpcConnection} uriOrConfig - uri of monerod or terminal parameters or JS config object or MoneroRpcConnection
-   * @param {string} uriOrConfig.uri - uri of monerod
-   * @param {string} uriOrConfig.username - username to authenticate with monerod (optional)
-   * @param {string} uriOrConfig.password - password to authenticate with monerod (optional)
-   * @param {boolean} uriOrConfig.rejectUnauthorized - rejects self-signed certificates if true (default true)
-   * @param {number} uriOrConfig.pollInterval - poll interval to query for updates in ms (default 5000)
-   * @param {boolean} uriOrConfig.proxyToWorker - run the daemon client in a worker if true (default true)
-   * @param {string} username - username to authenticate with monerod (optional)
-   * @param {string} password - password to authenticate with monerod (optional)
-   * @param {boolean} rejectUnauthorized - rejects self-signed certificates if true (default true)
-   * @param {number} pollInterval - poll interval to query for updates in ms (default 5000)
-   * @param {boolean} proxyToWorker - runs the daemon client in a worker if true (default true)
-   * @return {MoneroDaemonRpc} the daemon RPC client
-   */
-  static async _connectToDaemonRpc(uriOrConfig, username, password, rejectUnauthorized, pollInterval, proxyToWorker) {
-    if (GenUtils.isArray(uriOrConfig)) return MoneroDaemonRpc._startMonerodProcess(uriOrConfig, rejectUnauthorized, pollInterval, proxyToWorker); // handle array as terminal command
-    let config = MoneroDaemonRpc._normalizeConfig(uriOrConfig, username, password, rejectUnauthorized, pollInterval, proxyToWorker);
-    if (config.proxyToWorker) return MoneroDaemonRpcProxy.connect(config);
-    else return new MoneroDaemonRpc(config);
-  }
-  
-  static async _startMonerodProcess(cmd, rejectUnauthorized, pollInterval, proxyToWorker) {
-    assert(GenUtils.isArray(cmd), "Must provide string array with command line parameters");
-    
-    // start process
-    this.process = require('child_process').spawn(cmd[0], cmd.slice(1), {});
-    this.process.stdout.setEncoding('utf8');
-    this.process.stderr.setEncoding('utf8');
-    
-    // return promise which resolves after starting monerod
-    let uri;
-    let that = this;
-    let output = "";
-    return new Promise(function(resolve, reject) {
-      
-      // handle stdout
-      that.process.stdout.on('data', async function(data) {
-        let line = data.toString();
-        LibraryUtils.log(2, line);
-        output += line + '\n'; // capture output in case of error
-        
-        // extract uri from e.g. "I Binding on 127.0.0.1 (IPv4):38085"
-        let uriLineContains = "Binding on ";
-        let uriLineContainsIdx = line.indexOf(uriLineContains);
-        if (uriLineContainsIdx >= 0) {
-          let host = line.substring(uriLineContainsIdx + uriLineContains.length, line.lastIndexOf(' '));
-          let unformattedLine = line.replace(/\u001b\[.*?m/g, '').trim(); // remove color formatting
-          let port = unformattedLine.substring(unformattedLine.lastIndexOf(':') + 1);
-          let sslIdx = cmd.indexOf("--rpc-ssl");
-          let sslEnabled = sslIdx >= 0 ? "enabled" == cmd[sslIdx + 1].toLowerCase() : false;
-          uri = (sslEnabled ? "https" : "http") + "://" + host + ":" + port;
-        }
-        
-        // read success message
-        if (line.indexOf("core RPC server started ok") >= 0) {
-          
-          // get username and password from params
-          let userPassIdx = cmd.indexOf("--rpc-login");
-          let userPass = userPassIdx >= 0 ? cmd[userPassIdx + 1] : undefined;
-          let username = userPass === undefined ? undefined : userPass.substring(0, userPass.indexOf(':'));
-          let password = userPass === undefined ? undefined : userPass.substring(userPass.indexOf(':') + 1);
-          
-          // create client connected to internal process
-          let daemon = await that._connectToDaemonRpc(uri, username, password, rejectUnauthorized, pollInterval, proxyToWorker);
-          daemon.process = that.process;
-          
-          // resolve promise with client connected to internal process 
-          this.isResolved = true;
-          resolve(daemon);
-        }
-      });
-      
-      // handle stderr
-      that.process.stderr.on('data', function(data) {
-        if (LibraryUtils.getLogLevel() >= 2) console.error(data);
-      });
-      
-      // handle exit
-      that.process.on("exit", function(code) {
-        if (!this.isResolved) reject(new Error("monerod process terminated with exit code " + code + (output ? ":\n\n" + output : "")));
-      });
-      
-      // handle error
-      that.process.on("error", function(err) {
-        if (err.message.indexOf("ENOENT") >= 0) reject(new Error("monerod does not exist at path '" + cmd[0] + "'"));
-        if (!this.isResolved) reject(err);
-      });
-      
-      // handle uncaught exception
-      that.process.on("uncaughtException", function(err, origin) {
-        console.error("Uncaught exception in monerod process: " + err.message);
-        console.error(origin);
-        reject(err);
-      });
-    });
-  }
-  
-  /**
-   * Get the internal process running monerod.
-   * 
-   * @return the process running monerod, undefined if not created from new process
-   */
-  getProcess() {
-    return this.process;
-  }
-  
-  /**
-   * Stop the internal process running monerod, if applicable.
-   * 
-   * @param {boolean} force specifies if the process should be destroyed forcibly
-   * @return {Promise<number|undefined>} the exit code from stopping the process
-   */
-  async stopProcess(force) {
-    if (this.process === undefined) throw new MoneroError("MoneroDaemonRpc instance not created from new process");
-    let listenersCopy = GenUtils.copyArray(this.getListeners());
-    for (let listener of listenersCopy) await this.removeListener(listener);
-    return GenUtils.killProcess(this.process, force ? "sigkill" : undefined);
-  }
-  
-  async addListener(listener) {
-    assert(listener instanceof MoneroDaemonListener, "Listener must be instance of MoneroDaemonListener");
-    this.listeners.push(listener);
-    this._refreshListening();
-  }
-  
-  async removeListener(listener) {
-    assert(listener instanceof MoneroDaemonListener, "Listener must be instance of MoneroDaemonListener");
-    let idx = this.listeners.indexOf(listener);
-    if (idx > -1) this.listeners.splice(idx, 1);
-    else throw new MoneroError("Listener is not registered with daemon");
-    this._refreshListening();
-  }
-  
-  getListeners() {
-    return this.listeners;
-  }
-  
-  /**
-   * Get the daemon's RPC connection.
-   * 
-   * @return {MoneroRpcConnection} the daemon's rpc connection
-   */
-  async getRpcConnection() {
-    return this.rpc;
-  }
-  
-  async isConnected() {
-    try {
-      await this.getVersion();
-      return true;
-    } catch (e) {
-      return false;
-    }
-  }
-  
-  async getVersion() {
-    let resp = await this.rpc.sendJsonRequest("get_version");
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return new MoneroVersion(resp.result.version, resp.result.release);
-  }
-  
-  async isTrusted() {
-    let resp = await this.rpc.sendPathRequest("get_height");
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    return !resp.untrusted;
-  }
-  
-  async getHeight() {
-    let resp = await this.rpc.sendJsonRequest("get_block_count");
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return resp.result.count;
-  }
-  
-  async getBlockHash(height) {
-    return (await this.rpc.sendJsonRequest("on_get_block_hash", [height])).result;  // TODO monero-wallet-rpc: no status returned
-  }
-  
-  async getBlockTemplate(walletAddress, reserveSize) {
-    assert(walletAddress && typeof walletAddress === "string", "Must specify wallet address to be mined to");
-    let resp = await this.rpc.sendJsonRequest("get_block_template", {wallet_address: walletAddress, reserve_size: reserveSize});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return MoneroDaemonRpc._convertRpcBlockTemplate(resp.result);
-  }
-  
-  async getLastBlockHeader() {
-    let resp = await this.rpc.sendJsonRequest("get_last_block_header");
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return MoneroDaemonRpc._convertRpcBlockHeader(resp.result.block_header);
-  }
-  
-  async getBlockHeaderByHash(blockHash) {
-    let resp = await this.rpc.sendJsonRequest("get_block_header_by_hash", {hash: blockHash});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return MoneroDaemonRpc._convertRpcBlockHeader(resp.result.block_header);
-  }
-  
-  async getBlockHeaderByHeight(height) {
-    let resp = await this.rpc.sendJsonRequest("get_block_header_by_height", {height: height});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return MoneroDaemonRpc._convertRpcBlockHeader(resp.result.block_header);
-  }
-  
-  async getBlockHeadersByRange(startHeight, endHeight) {
-    
-    // fetch block headers
-    let resp = await this.rpc.sendJsonRequest("get_block_headers_range", {
-      start_height: startHeight,
-      end_height: endHeight
-    });
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    
-    // build headers
-    let headers = [];
-    for (let rpcHeader of resp.result.headers) {
-      headers.push(MoneroDaemonRpc._convertRpcBlockHeader(rpcHeader));
-    }
-    return headers;
-  }
-  
-  async getBlockByHash(blockHash) {
-    let resp = await this.rpc.sendJsonRequest("get_block", {hash: blockHash});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return MoneroDaemonRpc._convertRpcBlock(resp.result);
-  }
-  
-  async getBlockByHeight(height) {
-    let resp = await this.rpc.sendJsonRequest("get_block", {height: height});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return MoneroDaemonRpc._convertRpcBlock(resp.result);
-  }
-  
-  async getBlocksByHeight(heights) {
-    
-    // fetch blocks in binary
-    let respBin = await this.rpc.sendBinaryRequest("get_blocks_by_height.bin", {heights: heights});
-    
-    // convert binary blocks to json
-    let rpcBlocks = await MoneroUtils.binaryBlocksToJson(respBin);
-    MoneroDaemonRpc._checkResponseStatus(rpcBlocks);
-    
-    // build blocks with transactions
-    assert.equal(rpcBlocks.txs.length, rpcBlocks.blocks.length);    
-    let blocks = [];
-    for (let blockIdx = 0; blockIdx < rpcBlocks.blocks.length; blockIdx++) {
-      
-      // build block
-      let block = MoneroDaemonRpc._convertRpcBlock(rpcBlocks.blocks[blockIdx]);
-      block.setHeight(heights[blockIdx]);
-      blocks.push(block);
-      
-      // build transactions
-      let txs = [];
-      for (let txIdx = 0; txIdx < rpcBlocks.txs[blockIdx].length; txIdx++) {
-        let tx = new MoneroTx();
-        txs.push(tx);
-        tx.setHash(rpcBlocks.blocks[blockIdx].tx_hashes[txIdx]);
-        tx.setIsConfirmed(true);
-        tx.setInTxPool(false);
-        tx.setIsMinerTx(false);
-        tx.setRelay(true);
-        tx.setIsRelayed(true);
-        tx.setIsFailed(false);
-        tx.setIsDoubleSpend(false);
-        MoneroDaemonRpc._convertRpcTx(rpcBlocks.txs[blockIdx][txIdx], tx);
-      }
-      
-      // merge into one block
-      block.setTxs([]);
-      for (let tx of txs) {
-        if (tx.getBlock()) block.merge(tx.getBlock());
-        else block.getTxs().push(tx.setBlock(block));
-      }
-    }
-    
-    return blocks;
-  }
-  
-  async getBlocksByRange(startHeight, endHeight) {
-    if (startHeight === undefined) startHeight = 0;
-    if (endHeight === undefined) endHeight = await this.getHeight() - 1;
-    let heights = [];
-    for (let height = startHeight; height <= endHeight; height++) heights.push(height);
-    return await this.getBlocksByHeight(heights);
-  }
-  
-  async getBlocksByRangeChunked(startHeight, endHeight, maxChunkSize) {
-    if (startHeight === undefined) startHeight = 0;
-    if (endHeight === undefined) endHeight = await this.getHeight() - 1;
-    let lastHeight = startHeight - 1;
-    let blocks = [];
-    while (lastHeight < endHeight) {
-      for (let block of await this._getMaxBlocks(lastHeight + 1, endHeight, maxChunkSize)) {
-        blocks.push(block);
-      }
-      lastHeight = blocks[blocks.length - 1].getHeight();
-    }
-    return blocks;
-  }
-  
-  async getTxs(txHashes, prune) {
-        
-    // validate input
-    assert(Array.isArray(txHashes) && txHashes.length > 0, "Must provide an array of transaction hashes");
-    assert(prune === undefined || typeof prune === "boolean", "Prune must be a boolean or undefined");
-        
-    // fetch transactions
-    let resp = await this.rpc.sendPathRequest("get_transactions", {
-      txs_hashes: txHashes,
-      decode_as_json: true,
-      prune: prune
-    });
-    try {
-      MoneroDaemonRpc._checkResponseStatus(resp);
-    } catch (e) {
-      if (e.message.indexOf("Failed to parse hex representation of transaction hash") >= 0) throw new MoneroError("Invalid transaction hash");
-      throw e;
-    }
-        
-    // build transaction models
-    let txs = [];
-    if (resp.txs) {
-      for (let txIdx = 0; txIdx < resp.txs.length; txIdx++) {
-        let tx = new MoneroTx();
-        tx.setIsMinerTx(false);
-        txs.push(MoneroDaemonRpc._convertRpcTx(resp.txs[txIdx], tx));
-      }
-    }
-    
-    return txs;
-  }
-  
-  async getTxHexes(txHashes, prune) {
-    let hexes = [];
-    for (let tx of await this.getTxs(txHashes, prune)) hexes.push(prune ? tx.getPrunedHex() : tx.getFullHex());
-    return hexes;
-  }
-  
-  async getMinerTxSum(height, numBlocks) {
-    if (height === undefined) height = 0;
-    else assert(height >= 0, "Height must be an integer >= 0");
-    if (numBlocks === undefined) numBlocks = await this.getHeight();
-    else assert(numBlocks >= 0, "Count must be an integer >= 0");
-    let resp = await this.rpc.sendJsonRequest("get_coinbase_tx_sum", {height: height, count: numBlocks});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    let txSum = new MoneroMinerTxSum();
-    txSum.setEmissionSum(new BigInteger(resp.result.emission_amount));
-    txSum.setFeeSum(new BigInteger(resp.result.fee_amount));
-    return txSum;
-  }
-  
-  async getFeeEstimate(graceBlocks) {
-    let resp = await this.rpc.sendJsonRequest("get_fee_estimate", {grace_blocks: graceBlocks});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    let feeEstimate = new MoneroFeeEstimate();
-    feeEstimate.setFee(new BigInteger(resp.result.fee));
-    let fees = [];
-    for (let i = 0; i < resp.result.fees.length; i++) fees.push(new BigInteger(resp.result.fees[i]));
-    feeEstimate.setFees(fees);
-    feeEstimate.setQuantizationMask(new BigInteger(resp.result.quantization_mask));
-    return feeEstimate;
-  }
-  
-  async submitTxHex(txHex, doNotRelay) {
-    let resp = await this.rpc.sendPathRequest("send_raw_transaction", {tx_as_hex: txHex, do_not_relay: doNotRelay});
-    let result = MoneroDaemonRpc._convertRpcSubmitTxResult(resp);
-    
-    // set isGood based on status
-    try {
-      MoneroDaemonRpc._checkResponseStatus(resp); 
-      result.setIsGood(true);
-    } catch(e) {
-      result.setIsGood(false);
-    }
-    return result;
-  }
-  
-  async relayTxsByHash(txHashes) {
-    let resp = await this.rpc.sendJsonRequest("relay_tx", {txids: txHashes});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-  }
-  
-  async getTxPool() {
-    
-    // send rpc request
-    let resp = await this.rpc.sendPathRequest("get_transaction_pool");
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    
-    // build txs
-    let txs = [];
-    if (resp.transactions) {
-      for (let rpcTx of resp.transactions) {
-        let tx = new MoneroTx();
-        txs.push(tx);
-        tx.setIsConfirmed(false);
-        tx.setIsMinerTx(false);
-        tx.setInTxPool(true);
-        tx.setNumConfirmations(0);
-        MoneroDaemonRpc._convertRpcTx(rpcTx, tx);
-      }
-    }
-    
-    return txs;
-  }
-  
-  async getTxPoolHashes() {
-    throw new MoneroError("Not implemented");
-  }
-  
-  async getTxPoolBacklog() {
-    throw new MoneroError("Not implemented");
-  }
-
-  async getTxPoolStats() {
-    let resp = await this.rpc.sendPathRequest("get_transaction_pool_stats");
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    return MoneroDaemonRpc._convertRpcTxPoolStats(resp.pool_stats);
-  }
-  
-  async flushTxPool(hashes) {
-    if (hashes) hashes = GenUtils.listify(hashes);
-    let resp = await this.rpc.sendJsonRequest("flush_txpool", {txids: hashes});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-  }
-  
-  async getKeyImageSpentStatuses(keyImages) {
-    if (keyImages === undefined || keyImages.length === 0) throw new MoneroError("Must provide key images to check the status of");
-    let resp = await this.rpc.sendPathRequest("is_key_image_spent", {key_images: keyImages});
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    return resp.spent_status;
-  }
-  
-  async getOutputHistogram(amounts, minCount, maxCount, isUnlocked, recentCutoff) {
-    
-    // send rpc request
-    let resp = await this.rpc.sendJsonRequest("get_output_histogram", {
-      amounts: amounts,
-      min_count: minCount,
-      max_count: maxCount,
-      unlocked: isUnlocked,
-      recent_cutoff: recentCutoff
-    });
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    
-    // build histogram entries from response
-    let entries = [];
-    if (!resp.result.histogram) return entries;
-    for (let rpcEntry of resp.result.histogram) {
-      entries.push(MoneroDaemonRpc._convertRpcOutputHistogramEntry(rpcEntry));
-    }
-    return entries;
-  }
-  
-  async getOutputDistribution(amounts, cumulative, startHeight, endHeight) {
-    throw new MoneroError("Not implemented (response 'distribution' field is binary)");
-    
-//    let amountStrs = [];
-//    for (let amount of amounts) amountStrs.push(amount.toJSValue());
-//    console.log(amountStrs);
-//    console.log(cumulative);
-//    console.log(startHeight);
-//    console.log(endHeight);
-//    
-//    // send rpc request
-//    console.log("*********** SENDING REQUEST *************");
-//    if (startHeight === undefined) startHeight = 0;
-//    let resp = await this.rpc.sendJsonRequest("get_output_distribution", {
-//      amounts: amountStrs,
-//      cumulative: cumulative,
-//      from_height: startHeight,
-//      to_height: endHeight
-//    });
-//    
-//    console.log("RESPONSE");
-//    console.log(resp);
-//    
-//    // build distribution entries from response
-//    let entries = [];
-//    if (!resp.result.distributions) return entries; 
-//    for (let rpcEntry of resp.result.distributions) {
-//      let entry = MoneroDaemonRpc._convertRpcOutputDistributionEntry(rpcEntry);
-//      entries.push(entry);
-//    }
-//    return entries;
-  }
-  
-  async getInfo() {
-    let resp = await this.rpc.sendJsonRequest("get_info");
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return MoneroDaemonRpc._convertRpcInfo(resp.result);
-  }
-  
-  async getSyncInfo() {
-    let resp = await this.rpc.sendJsonRequest("sync_info");
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return MoneroDaemonRpc._convertRpcSyncInfo(resp.result);
-  }
-  
-  async getHardForkInfo() {
-    let resp = await this.rpc.sendJsonRequest("hard_fork_info");
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    return MoneroDaemonRpc._convertRpcHardForkInfo(resp.result);
-  }
-  
-  async getAltChains() {
-    
-//    // mocked response for test
-//    let resp = {
-//        status: "OK",
-//        chains: [
-//          {
-//            block_hash: "697cf03c89a9b118f7bdf11b1b3a6a028d7b3617d2d0ed91322c5709acf75625",
-//            difficulty: 14114729638300280,
-//            height: 1562062,
-//            length: 2
-//          }
-//        ]
-//    }
-    
-    let resp = await this.rpc.sendJsonRequest("get_alternate_chains");
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    let chains = [];
-    if (!resp.result.chains) return chains;
-    for (let rpcChain of resp.result.chains) chains.push(MoneroDaemonRpc._convertRpcAltChain(rpcChain));
-    return chains;
-  }
-  
-  async getAltBlockHashes() {
-    
-//    // mocked response for test
-//    let resp = {
-//        status: "OK",
-//        untrusted: false,
-//        blks_hashes: ["9c2277c5470234be8b32382cdf8094a103aba4fcd5e875a6fc159dc2ec00e011","637c0e0f0558e284493f38a5fcca3615db59458d90d3a5eff0a18ff59b83f46f","6f3adc174a2e8082819ebb965c96a095e3e8b63929ad9be2d705ad9c086a6b1c","697cf03c89a9b118f7bdf11b1b3a6a028d7b3617d2d0ed91322c5709acf75625"]
-//    }
-    
-    let resp = await this.rpc.sendPathRequest("get_alt_blocks_hashes");
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    if (!resp.blks_hashes) return [];
-    return resp.blks_hashes;
-  }
-  
-  async getDownloadLimit() {
-    return (await this._getBandwidthLimits())[0];
-  }
-  
-  async setDownloadLimit(limit) {
-    if (limit == -1) return await this.resetDownloadLimit();
-    if (!(GenUtils.isInt(limit) && limit > 0)) throw new MoneroError("Download limit must be an integer greater than 0");
-    return (await this._setBandwidthLimits(limit, 0))[0];
-  }
-  
-  async resetDownloadLimit() {
-    return (await this._setBandwidthLimits(-1, 0))[0];
-  }
-
-  async getUploadLimit() {
-    return (await this._getBandwidthLimits())[1];
-  }
-  
-  async setUploadLimit(limit) {
-    if (limit == -1) return await this.resetUploadLimit();
-    if (!(GenUtils.isInt(limit) && limit > 0)) throw new MoneroError("Upload limit must be an integer greater than 0");
-    return (await this._setBandwidthLimits(0, limit))[1];
-  }
-  
-  async resetUploadLimit() {
-    return (await this._setBandwidthLimits(0, -1))[1];
-  }
-  
-  async getPeers() {
-    let resp = await this.rpc.sendJsonRequest("get_connections");
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    let peers = [];
-    if (!resp.result.connections) return peers;
-    for (let rpcConnection of resp.result.connections) {
-      peers.push(MoneroDaemonRpc._convertRpcConnection(rpcConnection));
-    }
-    return peers;
-  }
-  
-  async getKnownPeers() {
-    
-    // tx config
-    let resp = await this.rpc.sendPathRequest("get_peer_list");
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    
-    // build peers
-    let peers = [];
-    if (resp.gray_list) {
-      for (let rpcPeer of resp.gray_list) {
-        let peer = MoneroDaemonRpc._convertRpcPeer(rpcPeer);
-        peer.setIsOnline(false); // gray list means offline last checked
-        peers.push(peer);
-      }
-    }
-    if (resp.white_list) {
-      for (let rpcPeer of resp.white_list) {
-        let peer = MoneroDaemonRpc._convertRpcPeer(rpcPeer);
-        peer.setIsOnline(true); // white list means online last checked
-        peers.push(peer);
-      }
-    }
-    return peers;
-  }
-  
-  async setOutgoingPeerLimit(limit) {
-    if (!(GenUtils.isInt(limit) && limit >= 0)) throw new MoneroError("Outgoing peer limit must be >= 0");
-    let resp = await this.rpc.sendPathRequest("out_peers", {out_peers: limit});
-    MoneroDaemonRpc._checkResponseStatus(resp);
-  }
-  
-  async setIncomingPeerLimit(limit) {
-    if (!(GenUtils.isInt(limit) && limit >= 0)) throw new MoneroError("Incoming peer limit must be >= 0");
-    let resp = await this.rpc.sendPathRequest("in_peers", {in_peers: limit});
-    MoneroDaemonRpc._checkResponseStatus(resp);
-  }
-  
-  async getPeerBans() {
-    let resp = await this.rpc.sendJsonRequest("get_bans");
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    let bans = [];
-    for (let rpcBan of resp.result.bans) {
-      let ban = new MoneroBan();
-      ban.setHost(rpcBan.host);
-      ban.setIp(rpcBan.ip);
-      ban.setSeconds(rpcBan.seconds);
-      bans.push(ban);
-    }
-    return bans;
-  }
-  
-  async setPeerBans(bans) {
-    let rpcBans = [];
-    for (let ban of bans) rpcBans.push(MoneroDaemonRpc._convertToRpcBan(ban));
-    let resp = await this.rpc.sendJsonRequest("set_bans", {bans: rpcBans});
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-  }
-  
-  async startMining(address, numThreads, isBackground, ignoreBattery) {
-    assert(address, "Must provide address to mine to");
-    assert(GenUtils.isInt(numThreads) && numThreads > 0, "Number of threads must be an integer greater than 0");
-    assert(isBackground === undefined || typeof isBackground === "boolean");
-    assert(ignoreBattery === undefined || typeof ignoreBattery === "boolean");
-    let resp = await this.rpc.sendPathRequest("start_mining", {
-      miner_address: address,
-      threads_count: numThreads,
-      do_background_mining: isBackground,
-      ignore_battery: ignoreBattery,
-    });
-    MoneroDaemonRpc._checkResponseStatus(resp);
-  }
-  
-  async stopMining() {
-    let resp = await this.rpc.sendPathRequest("stop_mining");
-    MoneroDaemonRpc._checkResponseStatus(resp);
-  }
-  
-  async getMiningStatus() {
-    let resp = await this.rpc.sendPathRequest("mining_status");
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    return MoneroDaemonRpc._convertRpcMiningStatus(resp);
-  }
-  
-  async submitBlocks(blockBlobs) {
-    assert(Array.isArray(blockBlobs) && blockBlobs.length > 0, "Must provide an array of mined block blobs to submit");
-    let resp = await this.rpc.sendJsonRequest("submit_block", blockBlobs);
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-  }
-
-  async pruneBlockchain(check) {
-    let resp = await this.rpc.sendJsonRequest("prune_blockchain", {check: check}, 0);
-    MoneroDaemonRpc._checkResponseStatus(resp.result);
-    let result = new MoneroPruneResult();
-    result.setIsPruned(resp.result.pruned);
-    result.setPruningSeed(resp.result.pruning_seed);
-    return result;
-  }
-  
-  async checkForUpdate() {
-    let resp = await this.rpc.sendPathRequest("update", {command: "check"});
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    return MoneroDaemonRpc._convertRpcUpdateCheckResult(resp);
-  }
-  
-  async downloadUpdate(path) {
-    let resp = await this.rpc.sendPathRequest("update", {command: "download", path: path});
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    return MoneroDaemonRpc._convertRpcUpdateDownloadResult(resp);
-  }
-  
-  async stop() {
-    let resp = await this.rpc.sendPathRequest("stop_daemon");
-    MoneroDaemonRpc._checkResponseStatus(resp);
-  }
-  
-  async waitForNextBlockHeader() {
-    let that = this;
-    return new Promise(async function(resolve) {
-      await that.addListener(new class extends MoneroDaemonListener {
-        async onBlockHeader(header) {
-          await that.removeListener(this);
-          resolve(header);
-        }
-      }); 
-    });
-  }
-  
-  // ----------- ADD JSDOC FOR SUPPORTED DEFAULT IMPLEMENTATIONS --------------
-  
-  async getTx() { return super.getTx(...arguments); }
-  async getTxHex() { return super.getTxHex(...arguments); }
-  async getKeyImageSpentStatus() { return super.getKeyImageSpentStatus(...arguments); }
-  async setPeerBan() { return super.setPeerBan(...arguments); }
-  async submitBlock() { return super.submitBlock(...arguments); }
-  
-  // ------------------------------- PRIVATE ----------------------------------
-  
-  _refreshListening() {
-    if (this.pollListener == undefined && this.listeners.length) this.pollListener = new DaemonPoller(this);
-    if (this.pollListener !== undefined) this.pollListener.setIsPolling(this.listeners.length > 0);
-  }
-  
-  async _getBandwidthLimits() {
-    let resp = await this.rpc.sendPathRequest("get_limit");
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    return [resp.limit_down, resp.limit_up];
-  }
-  
-  async _setBandwidthLimits(downLimit, upLimit) {
-    if (downLimit === undefined) downLimit = 0;
-    if (upLimit === undefined) upLimit = 0;
-    let resp = await this.rpc.sendPathRequest("set_limit", {limit_down: downLimit, limit_up: upLimit});
-    MoneroDaemonRpc._checkResponseStatus(resp);
-    return [resp.limit_down, resp.limit_up];
-  }
-  
-  /**
-   * Get a contiguous chunk of blocks starting from a given height up to a maximum
-   * height or amount of block data fetched from the blockchain, whichever comes first.
-   * 
-   * @param {number} startHeight - start height to retrieve blocks (default 0)
-   * @param {number} maxHeight - maximum end height to retrieve blocks (default blockchain height)
-   * @param {number} maxReqSize - maximum amount of block data to fetch from the blockchain in bytes (default 3,000,000 bytes)
-   * @return {MoneroBlock[]} are the resulting chunk of blocks
-   */
-  async _getMaxBlocks(startHeight, maxHeight, maxReqSize) {
-    if (startHeight === undefined) startHeight = 0;
-    if (maxHeight === undefined) maxHeight = await this.getHeight() - 1;
-    if (maxReqSize === undefined) maxReqSize = MoneroDaemonRpc.MAX_REQ_SIZE;
-    
-    // determine end height to fetch
-    let reqSize = 0;
-    let endHeight = startHeight - 1;
-    while (reqSize < maxReqSize && endHeight < maxHeight) {
-      
-      // get header of next block
-      let header = await this._getBlockHeaderByHeightCached(endHeight + 1, maxHeight);
-      
-      // block cannot be bigger than max request size
-      assert(header.getSize() <= maxReqSize, "Block exceeds maximum request size: " + header.getSize());
-      
-      // done iterating if fetching block would exceed max request size
-      if (reqSize + header.getSize() > maxReqSize) break;
-      
-      // otherwise block is included
-      reqSize += header.getSize();
-      endHeight++;
-    }
-    return endHeight >= startHeight ? await this.getBlocksByRange(startHeight, endHeight) : [];
-  }
-  
-  /**
-   * Retrieves a header by height from the cache or fetches and caches a header
-   * range if not already in the cache.
-   * 
-   * @param {number} height - height of the header to retrieve from the cache
-   * @param {number} maxHeight - maximum height of headers to cache
-   */
-  async _getBlockHeaderByHeightCached(height, maxHeight) {
-    
-    // get header from cache
-    let cachedHeader = this.cachedHeaders[height];
-    if (cachedHeader) return cachedHeader;
-    
-    // fetch and cache headers if not in cache
-    let endHeight = Math.min(maxHeight, height + MoneroDaemonRpc.NUM_HEADERS_PER_REQ - 1);  // TODO: could specify end height to cache to optimize small requests (would like to have time profiling in place though)
-    let headers = await this.getBlockHeadersByRange(height, endHeight);
-    for (let header of headers) {
-      this.cachedHeaders[header.getHeight()] = header;
-    }
-    
-    // return the cached header
-    return this.cachedHeaders[height];
-  }
-  
-  // --------------------------------- STATIC ---------------------------------
-  
-  static _normalizeConfig(uriOrConfigOrConnection, username, password, rejectUnauthorized, pollInterval, proxyToWorker) {
-    let config;
-    if (typeof uriOrConfigOrConnection === "string") config = {uri: uriOrConfigOrConnection, username: username, password: password, proxyToWorker: proxyToWorker, rejectUnauthorized: rejectUnauthorized, pollInterval: pollInterval};
-    else {
-      if (typeof uriOrConfigOrConnection !== "object") throw new MoneroError("Invalid configuration to create rpc client; must be string, object, or MoneroRpcConnection");
-      if (username || password || rejectUnauthorized || pollInterval || proxyToWorker) throw new MoneroError("Can provide config object or params or new MoneroDaemonRpc(...) but not both");
-      if (uriOrConfigOrConnection instanceof MoneroRpcConnection) config = Object.assign({}, uriOrConfigOrConnection.getConfig());
-      else config = Object.assign({}, uriOrConfigOrConnection);
-    }
-    if (config.server) {
-      config = Object.assign(config, new MoneroRpcConnection(config.server).getConfig());
-      delete config.server;
-    }
-    if (config.pollInterval === undefined) config.pollInterval = 5000; // TODO: move to config
-    if (config.proxyToWorker === undefined) config.proxyToWorker = true;
-    return config;
-  }
-  
-  static _checkResponseStatus(resp) {
-    if (resp.status !== "OK") throw new MoneroError(resp.status);
-  }
-  
-  static _convertRpcBlockHeader(rpcHeader) {
-    if (!rpcHeader) return undefined;
-    let header = new MoneroBlockHeader();
-    for (let key of Object.keys(rpcHeader)) {
-      let val = rpcHeader[key];
-      if (key === "block_size") GenUtils.safeSet(header, header.getSize, header.setSize, val);
-      else if (key === "depth") GenUtils.safeSet(header, header.getDepth, header.setDepth, val);
-      else if (key === "difficulty") { }  // handled by wide_difficulty
-      else if (key === "cumulative_difficulty") { } // handled by wide_cumulative_difficulty
-      else if (key === "difficulty_top64") { }  // handled by wide_difficulty
-      else if (key === "cumulative_difficulty_top64") { } // handled by wide_cumulative_difficulty
-      else if (key === "wide_difficulty") header.setDifficulty(GenUtils.reconcile(header.getDifficulty(), MoneroDaemonRpc._prefixedHexToBI(val)));
-      else if (key === "wide_cumulative_difficulty") header.setCumulativeDifficulty(GenUtils.reconcile(header.getCumulativeDifficulty(), MoneroDaemonRpc._prefixedHexToBI(val)));
-      else if (key === "hash") GenUtils.safeSet(header, header.getHash, header.setHash, val);
-      else if (key === "height") GenUtils.safeSet(header, header.getHeight, header.setHeight, val);
-      else if (key === "major_version") GenUtils.safeSet(header, header.getMajorVersion, header.setMajorVersion, val);
-      else if (key === "minor_version") GenUtils.safeSet(header, header.getMinorVersion, header.setMinorVersion, val);
-      else if (key === "nonce") GenUtils.safeSet(header, header.getNonce, header.setNonce, val);
-      else if (key === "num_txes") GenUtils.safeSet(header, header.getNumTxs, header.setNumTxs, val);
-      else if (key === "orphan_status") GenUtils.safeSet(header, header.getOrphanStatus, header.setOrphanStatus, val);
-      else if (key === "prev_hash" || key === "prev_id") GenUtils.safeSet(header, header.getPrevHash, header.setPrevHash, val);
-      else if (key === "reward") GenUtils.safeSet(header, header.getReward, header.setReward, BigInteger.parse(val));
-      else if (key === "timestamp") GenUtils.safeSet(header, header.getTimestamp, header.setTimestamp, val);
-      else if (key === "block_weight") GenUtils.safeSet(header, header.getWeight, header.setWeight, val);
-      else if (key === "long_term_weight") GenUtils.safeSet(header, header.getLongTermWeight, header.setLongTermWeight, val);
-      else if (key === "pow_hash") GenUtils.safeSet(header, header.getPowHash, header.setPowHash, val === "" ? undefined : val);
-      else if (key === "tx_hashes") {}  // used in block model, not header model
-      else if (key === "miner_tx") {}   // used in block model, not header model
-      else if (key === "miner_tx_hash") header.setMinerTxHash(val);
-      else console.log("WARNING: ignoring unexpected block header field: '" + key + "': " + val);
-    }
-    return header;
-  }
-  
-  static _convertRpcBlock(rpcBlock) {
-    
-    // build block
-    let block = new MoneroBlock(MoneroDaemonRpc._convertRpcBlockHeader(rpcBlock.block_header ? rpcBlock.block_header : rpcBlock));
-    block.setHex(rpcBlock.blob);
-    block.setTxHashes(rpcBlock.tx_hashes === undefined ? [] : rpcBlock.tx_hashes);
-    
-    // build miner tx
-    let rpcMinerTx = rpcBlock.json ? JSON.parse(rpcBlock.json).miner_tx : rpcBlock.miner_tx;  // may need to be parsed from json
-    let minerTx = new MoneroTx();
-    block.setMinerTx(minerTx);
-    minerTx.setIsConfirmed(true);
-    minerTx.setIsMinerTx(true);
-    MoneroDaemonRpc._convertRpcTx(rpcMinerTx, minerTx);
-    
-    return block;
-  }
-  
-  /**
-   * Transfers RPC tx fields to a given MoneroTx without overwriting previous values.
-   * 
-   * TODO: switch from safe set
-   * 
-   * @param rpcTx - RPC map containing transaction fields
-   * @param tx  - MoneroTx to populate with values (optional)
-   * @returns tx - same tx that was passed in or a new one if none given
-   */
-  static _convertRpcTx(rpcTx, tx) {
-    if (rpcTx === undefined) return undefined;
-    if (tx === undefined) tx = new MoneroTx();
-    
-//    console.log("******** BUILDING TX ***********");
-//    console.log(rpcTx);
-//    console.log(tx.toString());
-    
-    // initialize from rpc map
-    let header;
-    for (let key of Object.keys(rpcTx)) {
-      let val = rpcTx[key];
-      if (key === "tx_hash" || key === "id_hash") GenUtils.safeSet(tx, tx.getHash, tx.setHash, val);
-      else if (key === "block_timestamp") {
-        if (!header) header = new MoneroBlockHeader();
-        GenUtils.safeSet(header, header.getTimestamp, header.setTimestamp, val);
-      }
-      else if (key === "block_height") {
-        if (!header) header = new MoneroBlockHeader();
-        GenUtils.safeSet(header, header.getHeight, header.setHeight, val);
-      }
-      else if (key === "last_relayed_time") GenUtils.safeSet(tx, tx.getLastRelayedTimestamp, tx.setLastRelayedTimestamp, val);
-      else if (key === "receive_time" || key === "received_timestamp") GenUtils.safeSet(tx, tx.getReceivedTimestamp, tx.setReceivedTimestamp, val);
-      else if (key === "confirmations") GenUtils.safeSet(tx, tx.getNumConfirmations, tx.setNumConfirmations, val); 
-      else if (key === "in_pool") {
-        GenUtils.safeSet(tx, tx.isConfirmed, tx.setIsConfirmed, !val);
-        GenUtils.safeSet(tx, tx.inTxPool, tx.setInTxPool, val);
-      }
-      else if (key === "double_spend_seen") GenUtils.safeSet(tx, tx.isDoubleSpendSeen, tx.setIsDoubleSpend, val);
-      else if (key === "version") GenUtils.safeSet(tx, tx.getVersion, tx.setVersion, val);
-      else if (key === "extra") {
-        if (typeof val === "string") console.log("WARNING: extra field as string not being asigned to int[]: " + key + ": " + val); // TODO: how to set string to int[]? - or, extra is string which can encode int[]
-        else GenUtils.safeSet(tx, tx.getExtra, tx.setExtra, val);
-      }
-      else if (key === "vin") {
-        if (val.length !== 1 || !val[0].gen) {  // ignore miner input TODO: why?
-          tx.setInputs(val.map(rpcVin => MoneroDaemonRpc._convertRpcOutput(rpcVin, tx)));
-        }
-      }
-      else if (key === "vout") tx.setOutputs(val.map(rpcOutput => MoneroDaemonRpc._convertRpcOutput(rpcOutput, tx)));
-      else if (key === "rct_signatures") {
-        GenUtils.safeSet(tx, tx.getRctSignatures, tx.setRctSignatures, val);
-        if (val.txnFee) GenUtils.safeSet(tx, tx.getFee, tx.setFee, BigInteger.parse(val.txnFee));
-      } 
-      else if (key === "rctsig_prunable") GenUtils.safeSet(tx, tx.getRctSigPrunable, tx.setRctSigPrunable, val);
-      else if (key === "unlock_time") GenUtils.safeSet(tx, tx.getUnlockTime, tx.setUnlockTime, val);
-      else if (key === "as_json" || key === "tx_json") { }  // handled last so tx is as initialized as possible
-      else if (key === "as_hex" || key === "tx_blob") GenUtils.safeSet(tx, tx.getFullHex, tx.setFullHex, val ? val : undefined);
-      else if (key === "blob_size") GenUtils.safeSet(tx, tx.getSize, tx.setSize, val);
-      else if (key === "weight") GenUtils.safeSet(tx, tx.getWeight, tx.setWeight, val);
-      else if (key === "fee") GenUtils.safeSet(tx, tx.getFee, tx.setFee, BigInteger.parse(val));
-      else if (key === "relayed") GenUtils.safeSet(tx, tx.isRelayed, tx.setIsRelayed, val);
-      else if (key === "output_indices") GenUtils.safeSet(tx, tx.getOutputIndices, tx.setOutputIndices, val);
-      else if (key === "do_not_relay") GenUtils.safeSet(tx, tx.getRelay, tx.setRelay, !val);
-      else if (key === "kept_by_block") GenUtils.safeSet(tx, tx.isKeptByBlock, tx.setIsKeptByBlock, val);
-      else if (key === "signatures") GenUtils.safeSet(tx, tx.getSignatures, tx.setSignatures, val);
-      else if (key === "last_failed_height") {
-        if (val === 0) GenUtils.safeSet(tx, tx.isFailed, tx.setIsFailed, false);
-        else {
-          GenUtils.safeSet(tx, tx.isFailed, tx.setIsFailed, true);
-          GenUtils.safeSet(tx, tx.getLastFailedHeight, tx.setLastFailedHeight, val);
-        }
-      }
-      else if (key === "last_failed_id_hash") {
-        if (val === MoneroDaemonRpc.DEFAULT_ID) GenUtils.safeSet(tx, tx.isFailed, tx.setIsFailed, false);
-        else {
-          GenUtils.safeSet(tx, tx.isFailed, tx.setIsFailed, true);
-          GenUtils.safeSet(tx, tx.getLastFailedHash, tx.setLastFailedHash, val);
-        }
-      }
-      else if (key === "max_used_block_height") GenUtils.safeSet(tx, tx.getMaxUsedBlockHeight, tx.setMaxUsedBlockHeight, val);
-      else if (key === "max_used_block_id_hash") GenUtils.safeSet(tx, tx.getMaxUsedBlockHash, tx.setMaxUsedBlockHash, val);
-      else if (key === "prunable_hash") GenUtils.safeSet(tx, tx.getPrunableHash, tx.setPrunableHash, val ? val : undefined);
-      else if (key === "prunable_as_hex") GenUtils.safeSet(tx, tx.getPrunableHex, tx.setPrunableHex, val ? val : undefined);
-      else if (key === "pruned_as_hex") GenUtils.safeSet(tx, tx.getPrunedHex, tx.setPrunedHex, val ? val : undefined);
-      else console.log("WARNING: ignoring unexpected field in rpc tx: " + key + ": " + val);
-    }
-    
-    // link block and tx
-    if (header) tx.setBlock(new MoneroBlock(header).setTxs([tx]));
-    
-    // TODO monerod: unconfirmed txs misreport block height and timestamp
-    if (tx.getBlock() && tx.getBlock().getHeight() !== undefined && tx.getBlock().getHeight() === tx.getBlock().getTimestamp()) {
-      tx.setBlock(undefined);
-      tx.setIsConfirmed(false);
-    }
-    
-    // initialize remaining known fields
-    if (tx.isConfirmed()) {
-      GenUtils.safeSet(tx, tx.isRelayed, tx.setIsRelayed, true);
-      GenUtils.safeSet(tx, tx.getRelay, tx.setRelay, true);
-      GenUtils.safeSet(tx, tx.isFailed, tx.setIsFailed, false);
-    } else {
-      tx.setNumConfirmations(0);
-    }
-    if (tx.isFailed() === undefined) tx.setIsFailed(false);
-    if (tx.getOutputIndices() && tx.getOutputs())  {
-      assert.equal(tx.getOutputs().length, tx.getOutputIndices().length);
-      for (let i = 0; i < tx.getOutputs().length; i++) {
-        tx.getOutputs()[i].setIndex(tx.getOutputIndices()[i]);  // transfer output indices to outputs
-      }
-    }
-    if (rpcTx.as_json) MoneroDaemonRpc._convertRpcTx(JSON.parse(rpcTx.as_json), tx);
-    if (rpcTx.tx_json) MoneroDaemonRpc._convertRpcTx(JSON.parse(rpcTx.tx_json), tx);
-    if (!tx.isRelayed()) tx.setLastRelayedTimestamp(undefined);  // TODO monerod: returns last_relayed_timestamp despite relayed: false, self inconsistent
-    
-    // return built transaction
-    return tx;
-  }
-  
-  static _convertRpcOutput(rpcOutput, tx) {
-    let output = new MoneroOutput();
-    output.setTx(tx);
-    for (let key of Object.keys(rpcOutput)) {
-      let val = rpcOutput[key];
-      if (key === "gen") throw new MoneroError("Output with 'gen' from daemon rpc is miner tx which we ignore (i.e. each miner input is undefined)");
-      else if (key === "key") {
-        GenUtils.safeSet(output, output.getAmount, output.setAmount, new BigInteger(val.amount));
-        GenUtils.safeSet(output, output.getKeyImage, output.setKeyImage, new MoneroKeyImage(val.k_image));
-        GenUtils.safeSet(output, output.getRingOutputIndices, output.setRingOutputIndices, val.key_offsets);
-      }
-      else if (key === "amount") GenUtils.safeSet(output, output.getAmount, output.setAmount, BigInteger.parse(val));
-      else if (key === "target") {
-        let pubKey = val.key === undefined ? val.tagged_key.key : val.key; // TODO (monerod): rpc json uses {tagged_key={key=...}}, binary blocks use {key=...}
-        GenUtils.safeSet(output, output.getStealthPublicKey, output.setStealthPublicKey, pubKey);
-      }
-      else console.log("WARNING: ignoring unexpected field output: " + key + ": " + val);
-    }
-    return output;
-  }
-  
-  static _convertRpcBlockTemplate(rpcTemplate) {
-    let template = new MoneroBlockTemplate();
-    for (let key of Object.keys(rpcTemplate)) {
-      let val = rpcTemplate[key];
-      if (key === "blockhashing_blob") template.setBlockTemplateBlob(val);
-      else if (key === "blocktemplate_blob") template.setBlockHashingBlob(val);
-      else if (key === "difficulty") template.setDifficulty(BigInteger.parse(val));
-      else if (key === "expected_reward") template.setExpectedReward(val);
-      else if (key === "difficulty") { }  // handled by wide_difficulty
-      else if (key === "difficulty_top64") { }  // handled by wide_difficulty
-      else if (key === "wide_difficulty") template.setDifficulty(GenUtils.reconcile(template.getDifficulty(), MoneroDaemonRpc._prefixedHexToBI(val)));
-      else if (key === "height") template.setHeight(val);
-      else if (key === "prev_hash") template.setPrevHash(val);
-      else if (key === "reserved_offset") template.setReservedOffset(val);
-      else if (key === "status") {}  // handled elsewhere
-      else if (key === "untrusted") {}  // handled elsewhere
-      else if (key === "seed_height") template.setSeedHeight(val);
-      else if (key === "seed_hash") template.setSeedHash(val);
-      else if (key === "next_seed_hash") template.setNextSeedHash(val);
-      else console.log("WARNING: ignoring unexpected field in block template: " + key + ": " + val);
-    }
-    if ("" === template.getNextSeedHash()) template.setNextSeedHash(undefined);
-    return template;
-  }
-  
-  static _convertRpcInfo(rpcInfo) {
-    if (!rpcInfo) return undefined;
-    let info = new MoneroDaemonInfo();
-    for (let key of Object.keys(rpcInfo)) {
-      let val = rpcInfo[key];
-      if (key === "version") info.setVersion(val);
-      else if (key === "alt_blocks_count") info.setNumAltBlocks(val);
-      else if (key === "block_size_limit") info.setBlockSizeLimit(val);
-      else if (key === "block_size_median") info.setBlockSizeMedian(val);
-      else if (key === "block_weight_limit") info.setBlockWeightLimit(val);
-      else if (key === "block_weight_median") info.setBlockWeightMedian(val);
-      else if (key === "bootstrap_daemon_address") { if (val) info.setBootstrapDaemonAddress(val); }
-      else if (key === "difficulty") { }  // handled by wide_difficulty
-      else if (key === "cumulative_difficulty") { } // handled by wide_cumulative_difficulty
-      else if (key === "difficulty_top64") { }  // handled by wide_difficulty
-      else if (key === "cumulative_difficulty_top64") { } // handled by wide_cumulative_difficulty
-      else if (key === "wide_difficulty") info.setDifficulty(GenUtils.reconcile(info.getDifficulty(), MoneroDaemonRpc._prefixedHexToBI(val)));
-      else if (key === "wide_cumulative_difficulty") info.setCumulativeDifficulty(GenUtils.reconcile(info.getCumulativeDifficulty(), MoneroDaemonRpc._prefixedHexToBI(val)));
-      else if (key === "free_space") info.setFreeSpace(BigInteger.parse(val));
-      else if (key === "database_size") info.setDatabaseSize(val);
-      else if (key === "grey_peerlist_size") info.setNumOfflinePeers(val);
-      else if (key === "height") info.setHeight(val);
-      else if (key === "height_without_bootstrap") info.setHeightWithoutBootstrap(val);
-      else if (key === "incoming_connections_count") info.setNumIncomingConnections(val);
-      else if (key === "offline") info.setIsOffline(val);
-      else if (key === "outgoing_connections_count") info.setNumOutgoingConnections(val);
-      else if (key === "rpc_connections_count") info.setNumRpcConnections(val);
-      else if (key === "start_time") info.setStartTimestamp(val);
-      else if (key === "adjusted_time") info.setAdjustedTimestamp(val);
-      else if (key === "status") {}  // handled elsewhere
-      else if (key === "target") info.setTarget(val);
-      else if (key === "target_height") info.setTargetHeight(val);
-      else if (key === "top_block_hash") info.setTopBlockHash(val);
-      else if (key === "tx_count") info.setNumTxs(val);
-      else if (key === "tx_pool_size") info.setNumTxsPool(val);
-      else if (key === "untrusted") {} // handled elsewhere
-      else if (key === "was_bootstrap_ever_used") info.setWasBootstrapEverUsed(val);
-      else if (key === "white_peerlist_size") info.setNumOnlinePeers(val);
-      else if (key === "update_available") info.setUpdateAvailable(val);
-      else if (key === "nettype") GenUtils.safeSet(info, info.getNetworkType, info.setNetworkType, MoneroDaemon.parseNetworkType(val));
-      else if (key === "mainnet") { if (val) GenUtils.safeSet(info, info.getNetworkType, info.setNetworkType, MoneroNetworkType.MAINNET); }
-      else if (key === "testnet") { if (val) GenUtils.safeSet(info, info.getNetworkType, info.setNetworkType, MoneroNetworkType.TESTNET); }
-      else if (key === "stagenet") { if (val) GenUtils.safeSet(info, info.getNetworkType, info.setNetworkType, MoneroNetworkType.STAGENET); }
-      else if (key === "credits") info.setCredits(BigInteger.parse(val));
-      else if (key === "top_block_hash" || key === "top_hash") info.setTopBlockHash(GenUtils.reconcile(info.getTopBlockHash(), "" === val ? undefined : val))
-      else if (key === "busy_syncing") info.setIsBusySyncing(val);
-      else if (key === "synchronized") info.setIsSynchronized(val);
-      else if (key === "restricted") info.setIsRestricted(val);
-      else console.log("WARNING: Ignoring unexpected info field: " + key + ": " + val);
-    }
-    return info;
-  }
-  
-  /**
-   * Initializes sync info from RPC sync info.
-   * 
-   * @param rpcSyncInfo - rpc map to initialize the sync info from
-   * @return {MoneroDaemonSyncInfo} is sync info initialized from the map
-   */
-  static _convertRpcSyncInfo(rpcSyncInfo) {
-    let syncInfo = new MoneroDaemonSyncInfo();
-    for (let key of Object.keys(rpcSyncInfo)) {
-      let val = rpcSyncInfo[key];
-      if (key === "height") syncInfo.setHeight(val);
-      else if (key === "peers") {
-        syncInfo.setPeers([]);
-        let rpcConnections = val;
-        for (let rpcConnection of rpcConnections) {
-          syncInfo.getPeers().push(MoneroDaemonRpc._convertRpcConnection(rpcConnection.info));
-        }
-      }
-      else if (key === "spans") {
-        syncInfo.setSpans([]);
-        let rpcSpans = val;
-        for (let rpcSpan of rpcSpans) {
-          syncInfo.getSpans().push(MoneroDaemonRpc._convertRpcConnectionSpan(rpcSpan));
-        }
-      } else if (key === "status") {}   // handled elsewhere
-      else if (key === "target_height") syncInfo.setTargetHeight(BigInteger.parse(val));
-      else if (key === "next_needed_pruning_seed") syncInfo.setNextNeededPruningSeed(val);
-      else if (key === "overview") {  // this returns [] without pruning
-        let overview;
-        try {
-          overview = JSON.parse(val);
-          if (overview !== undefined && overview.length > 0) console.error("Ignoring non-empty 'overview' field (not implemented): " + overview); // TODO
-        } catch (e) {
-          console.error("Failed to parse 'overview' field: " + overview + ": " + e.message);
-        }
-      }
-      else if (key === "credits") syncInfo.setCredits(BigInteger.parse(val));
-      else if (key === "top_hash") syncInfo.setTopBlockHash("" === val ? undefined : val);
-      else if (key === "untrusted") {}  // handled elsewhere
-      else console.log("WARNING: ignoring unexpected field in sync info: " + key + ": " + val);
-    }
-    return syncInfo;
-  }
-  
-  static _convertRpcHardForkInfo(rpcHardForkInfo) {
-    let info = new MoneroHardForkInfo();
-    for (let key of Object.keys(rpcHardForkInfo)) {
-      let val = rpcHardForkInfo[key];
-      if (key === "earliest_height") info.setEarliestHeight(val);
-      else if (key === "enabled") info.setIsEnabled(val);
-      else if (key === "state") info.setState(val);
-      else if (key === "status") {}     // handled elsewhere
-      else if (key === "untrusted") {}  // handled elsewhere
-      else if (key === "threshold") info.setThreshold(val);
-      else if (key === "version") info.setVersion(val);
-      else if (key === "votes") info.setNumVotes(val);
-      else if (key === "voting") info.setVoting(val);
-      else if (key === "window") info.setWindow(val);
-      else if (key === "credits") info.setCredits(BigInteger.parse(val));
-      else if (key === "top_hash") info.setTopBlockHash("" === val ? undefined : val);
-      else console.log("WARNING: ignoring unexpected field in hard fork info: " + key + ": " + val);
-    }
-    return info;
-  }
-  
-  static _convertRpcConnectionSpan(rpcConnectionSpan) {
-    let span = new MoneroConnectionSpan();
-    for (let key of Object.keys(rpcConnectionSpan)) {
-      let val = rpcConnectionSpan[key];
-      if (key === "connection_id") span.setConnectionId(val);
-      else if (key === "nblocks") span.setNumBlocks(val);
-      else if (key === "rate") span.setRate(val);
-      else if (key === "remote_address") { if (val !== "") span.setRemoteAddress(val); }
-      else if (key === "size") span.setSize(val);
-      else if (key === "speed") span.setSpeed(val);
-      else if (key === "start_block_height") span.setStartHeight(val);
-      else console.log("WARNING: ignoring unexpected field in daemon connection span: " + key + ": " + val);
-    }
-    return span;
-  }
-  
-  static _convertRpcOutputHistogramEntry(rpcEntry) {
-    let entry = new MoneroOutputHistogramEntry();
-    for (let key of Object.keys(rpcEntry)) {
-      let val = rpcEntry[key];
-      if (key === "amount") entry.setAmount(BigInteger.parse(val));
-      else if (key === "total_instances") entry.setNumInstances(val);
-      else if (key === "unlocked_instances") entry.setNumUnlockedInstances(val);
-      else if (key === "recent_instances") entry.setNumRecentInstances(val);
-      else console.log("WARNING: ignoring unexpected field in output histogram: " + key + ": " + val);
-    }
-    return entry;
-  }
-  
-  static _convertRpcSubmitTxResult(rpcResult) {
-    assert(rpcResult);
-    let result = new MoneroSubmitTxResult();
-    for (let key of Object.keys(rpcResult)) {
-      let val = rpcResult[key];
-      if (key === "double_spend") result.setIsDoubleSpend(val);
-      else if (key === "fee_too_low") result.setIsFeeTooLow(val);
-      else if (key === "invalid_input") result.setHasInvalidInput(val);
-      else if (key === "invalid_output") result.setHasInvalidOutput(val);
-      else if (key === "too_few_outputs") result.setHasTooFewOutputs(val);
-      else if (key === "low_mixin") result.setIsMixinTooLow(val);
-      else if (key === "not_relayed") result.setIsRelayed(!val);
-      else if (key === "overspend") result.setIsOverspend(val);
-      else if (key === "reason") result.setReason(val === "" ? undefined : val);
-      else if (key === "too_big") result.setIsTooBig(val);
-      else if (key === "sanity_check_failed") result.setSanityCheckFailed(val);
-      else if (key === "credits") result.setCredits(BigInteger.parse(val))
-      else if (key === "status" || key === "untrusted") {}  // handled elsewhere
-      else if (key === "top_hash") result.setTopBlockHash("" === val ? undefined : val);
-      else if (key === "tx_extra_too_big") result.setIsTxExtraTooBig(val);
-      else console.log("WARNING: ignoring unexpected field in submit tx hex result: " + key + ": " + val);
-    }
-    return result;
-  }
-  
-  static _convertRpcTxPoolStats(rpcStats) {
-    assert(rpcStats);
-    let stats = new MoneroTxPoolStats();
-    for (let key of Object.keys(rpcStats)) {
-      let val = rpcStats[key];
-      if (key === "bytes_max") stats.setBytesMax(val);
-      else if (key === "bytes_med") stats.setBytesMed(val);
-      else if (key === "bytes_min") stats.setBytesMin(val);
-      else if (key === "bytes_total") stats.setBytesTotal(val);
-      else if (key === "histo_98pc") stats.setHisto98pc(val);
-      else if (key === "num_10m") stats.setNum10m(val);
-      else if (key === "num_double_spends") stats.setNumDoubleSpends(val);
-      else if (key === "num_failing") stats.setNumFailing(val);
-      else if (key === "num_not_relayed") stats.setNumNotRelayed(val);
-      else if (key === "oldest") stats.setOldestTimestamp(val);
-      else if (key === "txs_total") stats.setNumTxs(val);
-      else if (key === "fee_total") stats.setFeeTotal(BigInteger.parse(val));
-      else if (key === "histo") {
-        stats.setHisto(new Map());
-        for (let elem of val) stats.getHisto().set(elem.bytes, elem.txs);
-      }
-      else console.log("WARNING: ignoring unexpected field in tx pool stats: " + key + ": " + val);
-    }
-
-    // uninitialize some stats if not applicable
-    if (stats.getHisto98pc() === 0) stats.setHisto98pc(undefined);
-    if (stats.getNumTxs() === 0) {
-      stats.setBytesMin(undefined);
-      stats.setBytesMed(undefined);
-      stats.setBytesMax(undefined);
-      stats.setHisto98pc(undefined);
-      stats.setOldestTimestamp(undefined);
-    }
-
-    return stats;
-  }
-  
-  static _convertRpcAltChain(rpcChain) {
-    assert(rpcChain);
-    let chain = new MoneroAltChain();
-    for (let key of Object.keys(rpcChain)) {
-      let val = rpcChain[key];
-      if (key === "block_hash") {}  // using block_hashes instead
-      else if (key === "difficulty") { } // handled by wide_difficulty
-      else if (key === "difficulty_top64") { }  // handled by wide_difficulty
-      else if (key === "wide_difficulty") chain.setDifficulty(GenUtils.reconcile(chain.getDifficulty(), MoneroDaemonRpc._prefixedHexToBI(val)));
-      else if (key === "height") chain.setHeight(val);
-      else if (key === "length") chain.setLength(val);
-      else if (key === "block_hashes") chain.setBlockHashes(val);
-      else if (key === "main_chain_parent_block") chain.setMainChainParentBlockHash(val);
-      else console.log("WARNING: ignoring unexpected field in alternative chain: " + key + ": " + val);
-    }
-    return chain;
-  }
-  
-  static _convertRpcPeer(rpcPeer) {
-    assert(rpcPeer);
-    let peer = new MoneroPeer();
-    for (let key of Object.keys(rpcPeer)) {
-      let val = rpcPeer[key];
-      if (key === "host") peer.setHost(val);
-      else if (key === "id") peer.setId("" + val);  // TODO monero-wallet-rpc: peer id is BigInteger but string in `get_connections`
-      else if (key === "ip") {} // host used instead which is consistently a string
-      else if (key === "last_seen") peer.setLastSeenTimestamp(val);
-      else if (key === "port") peer.setPort(val);
-      else if (key === "rpc_port") peer.setRpcPort(val);
-      else if (key === "pruning_seed") peer.setPruningSeed(val);
-      else if (key === "rpc_credits_per_hash") peer.setRpcCreditsPerHash(BigInteger.parse(val));
-      else console.log("WARNING: ignoring unexpected field in rpc peer: " + key + ": " + val);
-    }
-    return peer;
-  }
-  
-  static _convertRpcConnection(rpcConnection) {
-    let peer = new MoneroPeer();
-    peer.setIsOnline(true);
-    for (let key of Object.keys(rpcConnection)) {
-      let val = rpcConnection[key];
-      if (key === "address") peer.setAddress(val);
-      else if (key === "avg_download") peer.setAvgDownload(val);
-      else if (key === "avg_upload") peer.setAvgUpload(val);
-      else if (key === "connection_id") peer.setId(val);
-      else if (key === "current_download") peer.setCurrentDownload(val);
-      else if (key === "current_upload") peer.setCurrentUpload(val);
-      else if (key === "height") peer.setHeight(val);
-      else if (key === "host") peer.setHost(val);
-      else if (key === "ip") {} // host used instead which is consistently a string
-      else if (key === "incoming") peer.setIsIncoming(val);
-      else if (key === "live_time") peer.setLiveTime(val);
-      else if (key === "local_ip") peer.setIsLocalIp(val);
-      else if (key === "localhost") peer.setIsLocalHost(val);
-      else if (key === "peer_id") peer.setId(val);
-      else if (key === "port") peer.setPort(parseInt(val));
-      else if (key === "rpc_port") peer.setRpcPort(val);
-      else if (key === "recv_count") peer.setNumReceives(val);
-      else if (key === "recv_idle_time") peer.setReceiveIdleTime(val);
-      else if (key === "send_count") peer.setNumSends(val);
-      else if (key === "send_idle_time") peer.setSendIdleTime(val);
-      else if (key === "state") peer.setState(val);
-      else if (key === "support_flags") peer.setNumSupportFlags(val);
-      else if (key === "pruning_seed") peer.setPruningSeed(val);
-      else if (key === "rpc_credits_per_hash") peer.setRpcCreditsPerHash(BigInteger.parse(val));
-      else if (key === "address_type") peer.setType(val);
-      else console.log("WARNING: ignoring unexpected field in peer: " + key + ": " + val);
-    }
-    return peer;
-  }
-  
-  static _convertToRpcBan(ban) {
-    let rpcBan = {};
-    rpcBan.host = ban.getHost();
-    rpcBan.ip = ban.getIp();
-    rpcBan.ban = ban.isBanned();
-    rpcBan.seconds = ban.getSeconds();
-    return rpcBan;
-  }
-  
-  static _convertRpcMiningStatus(rpcStatus) {
-    let status = new MoneroMiningStatus();
-    status.setIsActive(rpcStatus.active);
-    status.setSpeed(rpcStatus.speed);
-    status.setNumThreads(rpcStatus.threads_count);
-    if (rpcStatus.active) {
-      status.setAddress(rpcStatus.address);
-      status.setIsBackground(rpcStatus.is_background_mining_enabled);
-    }
-    return status;
-  }
-  
-  static _convertRpcUpdateCheckResult(rpcResult) {
-    assert(rpcResult);
-    let result = new MoneroDaemonUpdateCheckResult();
-    for (let key of Object.keys(rpcResult)) {
-      let val = rpcResult[key];
-      if (key === "auto_uri") result.setAutoUri(val);
-      else if (key === "hash") result.setHash(val);
-      else if (key === "path") {} // handled elsewhere
-      else if (key === "status") {} // handled elsewhere
-      else if (key === "update") result.setIsUpdateAvailable(val);
-      else if (key === "user_uri") result.setUserUri(val);
-      else if (key === "version") result.setVersion(val);
-      else if (key === "untrusted") {} // handled elsewhere
-      else console.log("WARNING: ignoring unexpected field in rpc check update result: " + key + ": " + val);
-    }
-    if (result.getAutoUri() === "") result.setAutoUri(undefined);
-    if (result.getUserUri() === "") result.setUserUri(undefined);
-    if (result.getVersion() === "") result.setVersion(undefined);
-    if (result.getHash() === "") result.setHash(undefined);
-    return result;
-  }
-  
-  static _convertRpcUpdateDownloadResult(rpcResult) {
-    let result = new MoneroDaemonUpdateDownloadResult(MoneroDaemonRpc._convertRpcUpdateCheckResult(rpcResult));
-    result.setDownloadPath(rpcResult["path"]);
-    if (result.getDownloadPath() === "") result.setDownloadPath(undefined);
-    return result;
-  }
-
-  /**
-   * Converts a '0x' prefixed hexidecimal string to a BigInteger.
-   * 
-   * @param hex is the '0x' prefixed hexidecimal string to convert
-   * @return BigInteger is the hexicedimal converted to decimal
-   */
-  static _prefixedHexToBI(hex) {
-    assert(hex.substring(0, 2) === "0x");
-    return BigInteger.parse(hex, 16);
-  }
-}
-
-// static variables
-MoneroDaemonRpc.DEFAULT_ID = "0000000000000000000000000000000000000000000000000000000000000000";  // uninitialized tx or block hash from daemon rpc
-MoneroDaemonRpc.MAX_REQ_SIZE = "3000000";  // max request size when fetching blocks from daemon
-MoneroDaemonRpc.NUM_HEADERS_PER_REQ = "750";  // number of headers to fetch and cache per request
-
-/**
- * Implements a MoneroDaemon by proxying requests to a worker.
- * 
- * @private
- */
-class MoneroDaemonRpcProxy extends MoneroDaemon {
-  
-  // --------------------------- STATIC UTILITIES -----------------------------
-  
-  static async connect(config) {
-    let daemonId = GenUtils.getUUID();
-    config = Object.assign({}, config, {proxyToWorker: false});
-    await LibraryUtils.invokeWorker(daemonId, "connectDaemonRpc", [config]);
-    return new MoneroDaemonRpcProxy(daemonId, await LibraryUtils.getWorker());
-  }
-  
-  // ---------------------------- INSTANCE METHODS ----------------------------
-  
-  constructor(daemonId, worker) {
-    super();
-    this.daemonId = daemonId;
-    this.worker = worker;
-    this.wrappedListeners = [];
-  }
-  
-  async getProcess() {
-    return undefined; // proxy does not have access to process
-  }
-  
-  async stopProcess(force) {
-    if (this.process === undefined) throw new MoneroError("MoneroDaemonRpcProxy instance not created from new process");
-    let listenersCopy = GenUtils.copyArray(this.getListeners());
-    for (let listener of listenersCopy) await this.removeListener(listener);
-    return GenUtils.killProcess(this.process, force ? "sigkill" : undefined);
-  }
-  
-  async addListener(listener) {
-    let wrappedListener = new DaemonWorkerListener(listener);
-    let listenerId = wrappedListener.getId();
-    LibraryUtils.WORKER_OBJECTS[this.daemonId].callbacks["onBlockHeader_" + listenerId] = [wrappedListener.onBlockHeader, wrappedListener];
-    this.wrappedListeners.push(wrappedListener);
-    return this._invokeWorker("daemonAddListener", [listenerId]);
-  }
-  
-  async removeListener(listener) {
-    for (let i = 0; i < this.wrappedListeners.length; i++) {
-      if (this.wrappedListeners[i].getListener() === listener) {
-        let listenerId = this.wrappedListeners[i].getId();
-        await this._invokeWorker("daemonRemoveListener", [listenerId]);
-        delete LibraryUtils.WORKER_OBJECTS[this.daemonId].callbacks["onBlockHeader_" + listenerId];
-        this.wrappedListeners.splice(i, 1);
-        return;
-      }
-    }
-    throw new MoneroError("Listener is not registered with daemon");
-  }
-  
-  getListeners() {
-    let listeners = [];
-    for (let wrappedListener of this.wrappedListeners) listeners.push(wrappedListener.getListener());
-    return listeners;
-  }
-  
-  async getRpcConnection() {
-    let config = await this._invokeWorker("daemonGetRpcConnection");
-    return new MoneroRpcConnection(config);
-  }
-  
-  async isConnected() {
-    return this._invokeWorker("daemonIsConnected");
-  }
-  
-  async getVersion() {
-    let versionJson = await this._invokeWorker("daemonGetVersion");
-    return new MoneroVersion(versionJson.number, versionJson.isRelease);
-  }
-  
-  async isTrusted() {
-    return this._invokeWorker("daemonIsTrusted");
-  }
-  
-  async getHeight() {
-    return this._invokeWorker("daemonGetHeight");
-  }
-  
-  async getBlockHash(height) {
-    return this._invokeWorker("daemonGetBlockHash", Array.from(arguments));
-  }
-  
-  async getBlockTemplate(walletAddress, reserveSize) {
-    return new MoneroBlockTemplate(await this._invokeWorker("daemonGetBlockTemplate", Array.from(arguments)));
-  }
-  
-  async getLastBlockHeader() {
-    return new MoneroBlockHeader(await this._invokeWorker("daemonGetLastBlockHeader"));
-  }
-  
-  async getBlockHeaderByHash(blockHash) {
-    return new MoneroBlockHeader(await this._invokeWorker("daemonGetBlockHeaderByHash", Array.from(arguments)));
-  }
-  
-  async getBlockHeaderByHeight(height) {
-    return new MoneroBlockHeader(await this._invokeWorker("daemonGetBlockHeaderByHeight", Array.from(arguments)));
-  }
-  
-  async getBlockHeadersByRange(startHeight, endHeight) {
-    let blockHeadersJson = await this._invokeWorker("daemonGetBlockHeadersByRange", Array.from(arguments));
-    let headers = [];
-    for (let blockHeaderJson of blockHeadersJson) headers.push(new MoneroBlockHeader(blockHeaderJson));
-    return headers;
-  }
-  
-  async getBlockByHash(blockHash) {
-    return new MoneroBlock(await this._invokeWorker("daemonGetBlockByHash", Array.from(arguments)));
-  }
-  
-  async getBlocksByHash(blockHashes, startHeight, prune) {
-    let blocksJson = await this._invokeWorker("daemonGetBlocksByHash", Array.from(arguments));
-    let blocks = [];
-    for (let blockJson of blocksJson) blocks.push(new MoneroBlock(blockJson));
-    return blocks;
-  }
-  
-  async getBlockByHeight(height) {
-    return new MoneroBlock(await this._invokeWorker("daemonGetBlockByHeight", Array.from(arguments)));
-  }
-  
-  async getBlocksByHeight(heights) {
-    let blocksJson = await this._invokeWorker("daemonGetBlocksByHeight", Array.from(arguments));
-    let blocks = [];
-    for (let blockJson of blocksJson) blocks.push(new MoneroBlock(blockJson));
-    return blocks;
-  }
-  
-  async getBlocksByRange(startHeight, endHeight) {
-    let blocksJson = await this._invokeWorker("daemonGetBlocksByRange", Array.from(arguments));
-    let blocks = [];
-    for (let blockJson of blocksJson) blocks.push(new MoneroBlock(blockJson));
-    return blocks;
-  }
-  
-  async getBlocksByRangeChunked(startHeight, endHeight, maxChunkSize) {
-    let blocksJson = await this._invokeWorker("daemonGetBlocksByRangeChunked", Array.from(arguments));
-    let blocks = [];
-    for (let blockJson of blocksJson) blocks.push(new MoneroBlock(blockJson));
-    return blocks;
-  }
-  
-  async getBlockHashes(blockHashes, startHeight) {
-    return this._invokeWorker("daemonGetBlockHashes", Array.from(arguments));
-  }
-  
-  async getTxs(txHashes, prune = false) {
-    
-    // deserialize txs from blocks
-    let blocks = [];
-    for (let blockJson of await this._invokeWorker("daemonGetTxs", Array.from(arguments))) {
-      blocks.push(new MoneroBlock(blockJson));
-    }
-    
-    // collect txs
-    let txs = [];
-    for (let block of blocks) {
-      for (let tx of block.getTxs()) {
-        if (!tx.isConfirmed()) tx.setBlock(undefined);
-        txs.push(tx);
-      }
-    }
-    return txs;
-  }
-  
-  async getTxHexes(txHashes, prune = false) {
-    return this._invokeWorker("daemonGetTxHexes", Array.from(arguments));
-  }
-  
-  async getMinerTxSum(height, numBlocks) {
-    return new MoneroMinerTxSum(await this._invokeWorker("daemonGetMinerTxSum", Array.from(arguments)));
-  }
-  
-  async getFeeEstimate(graceBlocks) {
-    return new MoneroFeeEstimate(await this._invokeWorker("daemonGetFeeEstimate", Array.from(arguments)));
-  }
-  
-  async submitTxHex(txHex, doNotRelay) {
-    return new MoneroSubmitTxResult(await this._invokeWorker("daemonSubmitTxHex", Array.from(arguments)));
-  }
-  
-  async relayTxsByHash(txHashes) {
-    return this._invokeWorker("daemonRelayTxsByHash", Array.from(arguments));
-  }
-  
-  async getTxPool() {
-    let blockJson = await this._invokeWorker("daemonGetTxPool");
-    let txs = new MoneroBlock(blockJson).getTxs();
-    for (let tx of txs) tx.setBlock(undefined);
-    return txs ? txs : [];
-  }
-  
-  async getTxPoolHashes() {
-    return this._invokeWorker("daemonGetTxPoolHashes", Array.from(arguments));
-  }
-  
-  async getTxPoolBacklog() {
-    throw new MoneroError("Not implemented");
-  }
-  
-  async getTxPoolStats() {
-    return new MoneroTxPoolStats(await this._invokeWorker("daemonGetTxPoolStats"));
-  }
-  
-  async flushTxPool(hashes) {
-    return this._invokeWorker("daemonFlushTxPool", Array.from(arguments));
-  }
-  
-  async getKeyImageSpentStatuses(keyImages) {
-    return this._invokeWorker("daemonGetKeyImageSpentStatuses", Array.from(arguments));
-  }
-  
-  async getOutputs(outputs) {
-    throw new MoneroError("Not implemented");
-  }
-  
-  async getOutputHistogram(amounts, minCount, maxCount, isUnlocked, recentCutoff) {
-    let entries = [];
-    for (let entryJson of await this._invokeWorker("daemonGetOutputHistogram", [amounts, minCount, maxCount, isUnlocked, recentCutoff])) {
-      entries.push(new MoneroOutputHistogramEntry(entryJson));
-    }
-    return entries;
-  }
-  
-  async getOutputDistribution(amounts, cumulative, startHeight, endHeight) {
-    throw new MoneroError("Not implemented");
-  }
-  
-  async getInfo() {
-    return new MoneroDaemonInfo(await this._invokeWorker("daemonGetInfo"));
-  }
-  
-  async getSyncInfo() {
-    return new MoneroDaemonSyncInfo(await this._invokeWorker("daemonGetSyncInfo"));
-  }
-  
-  async getHardForkInfo() {
-    return new MoneroHardForkInfo(await this._invokeWorker("daemonGetHardForkInfo"));
-  }
-  
-  async getAltChains() {
-    let altChains = [];
-    for (let altChainJson of await this._invokeWorker("daemonGetAltChains")) altChains.push(new MoneroAltChain(altChainJson));
-    return altChains;
-  }
-  
-  async getAltBlockHashes() {
-    return this._invokeWorker("daemonGetAltBlockHashes");
-  }
-  
-  async getDownloadLimit() {
-    return this._invokeWorker("daemonGetDownloadLimit");
-  }
-  
-  async setDownloadLimit(limit) {
-    return this._invokeWorker("daemonSetDownloadLimit", Array.from(arguments));
-  }
-  
-  async resetDownloadLimit() {
-    return this._invokeWorker("daemonResetDownloadLimit");
-  }
-  
-  async getUploadLimit() {
-    return this._invokeWorker("daemonGetUploadLimit");
-  }
-  
-  async setUploadLimit(limit) {
-    return this._invokeWorker("daemonSetUploadLimit", Array.from(arguments));
-  }
-  
-  async resetUploadLimit() {
-    return this._invokeWorker("daemonResetUploadLimit");
-  }
-  
-  async getPeers() {
-    let peers = [];
-    for (let peerJson of await this._invokeWorker("daemonGetPeers")) peers.push(new MoneroPeer(peerJson));
-    return peers;
-  }
-  
-  async getKnownPeers() {
-    let peers = [];
-    for (let peerJson of await this._invokeWorker("daemonGetKnownPeers")) peers.push(new MoneroPeer(peerJson));
-    return peers;
-  }
-  
-  async setOutgoingPeerLimit(limit) {
-    return this._invokeWorker("daemonSetIncomingPeerLimit", Array.from(arguments));
-  }
-  
-  async setIncomingPeerLimit(limit) {
-    return this._invokeWorker("daemonSetIncomingPeerLimit", Array.from(arguments));
-  }
-  
-  async getPeerBans() {
-    let bans = [];
-    for (let banJson of await this._invokeWorker("daemonGetPeerBans")) bans.push(new MoneroBan(banJson));
-    return bans;
-  }
-
-  async setPeerBans(bans) {
-    let bansJson = [];
-    for (let ban of bans) bansJson.push(ban.toJson());
-    return this._invokeWorker("daemonSetPeerBans", [bansJson]);
-  }
-  
-  async startMining(address, numThreads, isBackground, ignoreBattery) {
-    return this._invokeWorker("daemonStartMining", Array.from(arguments));
-  }
-  
-  async stopMining() {
-    await this._invokeWorker("daemonStopMining")
-  }
-  
-  async getMiningStatus() {
-    return new MoneroMiningStatus(await this._invokeWorker("daemonGetMiningStatus"));
-  }
-  
-  async submitBlocks(blockBlobs) {
-    throw new MoneroError("Not implemented");
-  }
-
-  async pruneBlockchain(check) {
-    return new MoneroPruneResult(await this._invokeWorker("daemonPruneBlockchain"));
-  }
-  
-  async checkForUpdate() {
-    throw new MoneroError("Not implemented");
-  }
-  
-  async downloadUpdate(path) {
-    throw new MoneroError("Not implemented");
-  }
-  
-  async stop() {
-    while (this.wrappedListeners.length) await this.removeBlockListener(this.wrappedListeners[0].getListener());
-    return this._invokeWorker("daemonStop");
-  }
-  
-  async waitForNextBlockHeader() {
-    return new MoneroBlockHeader(await this._invokeWorker("daemonWaitForNextBlockHeader"));
-  }
-  
-  // --------------------------- PRIVATE HELPERS ------------------------------
-  
-  // TODO: duplicated with MoneroWalletFullProxy
-  async _invokeWorker(fnName, args) {
-    return LibraryUtils.invokeWorker(this.daemonId, fnName, args);
-  }
-}
-
-/**
- * Polls a Monero daemon for updates and notifies listeners as they occur.
- * 
- * @class
- * @ignore
- */
-class DaemonPoller {
-  
-  constructor(daemon) {
-    let that = this;
-    this._daemon = daemon;
-    this._looper = new TaskLooper(async function() { await that.poll(); });
-  }
-  
-  setIsPolling(isPolling) {
-    this._isPolling = isPolling;
-    if (isPolling) this._looper.start(this._daemon.config.pollInterval);
-    else this._looper.stop();
-  }
-  
-  async poll() {
-    try {
-      
-      // get latest block header
-      let header = await this._daemon.getLastBlockHeader();
-      
-      // save first header for comparison
-      if (!this._lastHeader) {
-        this._lastHeader = await this._daemon.getLastBlockHeader();
-        return;
-      }
-      
-      // compare header to last
-      if (header.getHash() !== this._lastHeader.getHash()) {
-        this._lastHeader = header;
-        for (let listener of this._daemon.getListeners()) {
-          await listener.onBlockHeader(header); // notify listener
-        }
-      }
-    } catch (err) {
-      console.error("Failed to background poll daemon header");
-      console.error(err);
-    }
-  }
-}
-
-/**
- * Internal listener to bridge notifications to external listeners.
- * 
- * @private
- */
-class DaemonWorkerListener {
-  
-  constructor(listener) {
-    this._id = GenUtils.getUUID();
-    this._listener = listener;
-  }
-  
-  getId() {
-    return this._id;
-  }
-  
-  getListener() {
-    return this._listener;
-  }
-  
-  async onBlockHeader(headerJson) {
-    return this._listener.onBlockHeader(new MoneroBlockHeader(headerJson));
-  }
-}
-
-module.exports = MoneroDaemonRpc;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_ConnectionType.js.html b/docs/src_main_js_daemon_model_ConnectionType.js.html deleted file mode 100644 index 458a81257..000000000 --- a/docs/src_main_js_daemon_model_ConnectionType.js.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/ConnectionType.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/ConnectionType.js

- - - - - - -
-
-
const assert = require("assert");
-
-/**
- * Enumerates connection types.
- * 
- * Based on enums.h in monero-project.
- * 
- * @hideconstructor
- */
-class ConnectionType {
-    
-  /**
-   * Asserts that the given connection type is valid.
-   */
-  static validate(type) {
-    assert(type === 0 || type === 1 || type === 2 || type === 3, "Connection type is invalid: " + type);
-  }
-  
-  /**
-   * Indicates if the given connection type is valid or not.
-   */
-  static isValid(type) {
-    return type === 0 || type === 1 || type === 2 || 3;
-  }
-}
-
-/**
- * Invalid connection type (value=0).
- */
-ConnectionType.INVALID = 0;
-
-/**
- * IPV4 connection type (value=1).
- */
-ConnectionType.IPV4 = 1;
-
-/**
- * IPV6 connection type (value=2).
- */
-ConnectionType.IPV6 = 2;
-
-/**
- * TOR connection type (value=3).
- */
-ConnectionType.TOR = 3;
-
-/**
- * I2P connection type (value=4).
- */
-ConnectionType.I2P = 4;
-
-module.exports = ConnectionType;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroAltChain.js.html b/docs/src_main_js_daemon_model_MoneroAltChain.js.html deleted file mode 100644 index eb722d6e2..000000000 --- a/docs/src_main_js_daemon_model_MoneroAltChain.js.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroAltChain.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroAltChain.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Models an alternative chain seen by the node.
- */
-class MoneroAltChain {
-  
-  constructor(state) {
-    state = Object.assign({}, state);
-    if (state.difficulty !== undefined && !(state.difficulty instanceof BigInteger)) state.difficulty = BigInteger.parse(state.difficulty);
-    this.state = state;
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getDifficulty()) json.difficulty = this.getDifficulty().toString();
-    return json;
-  }
-  
-  getBlockHashes(blockHashes) {
-    return this.state.blockHashes;
-  }
-  
-  setBlockHashes(blockHashes) {
-    this.state.blockHashes = blockHashes;
-    return this;
-  }
-  
-  getDifficulty() {
-    return this.state.difficulty;
-  }
-  
-  setDifficulty(difficulty) {
-    this.state.difficulty = difficulty;
-    return this;
-  }
-  
-  getHeight() {
-    return this.state.height;
-  }
-  
-  setHeight(height) {
-    this.state.height = height;
-    return this;
-  }
-  
-  getLength() {
-    return this.state.length;
-  }
-  
-  setLength(length) {
-    this.state.length = length;
-    return this;
-  }
-  
-  getMainChainParentBlockHash() {
-    return this.state.mainChainParentBlockHash;
-  }
-  
-  setMainChainParentBlockHash(mainChainParentBlockHash) {
-    this.state.mainChainParentBlockHash = mainChainParentBlockHash;
-    return this;
-  }
-}
-
-module.exports = MoneroAltChain;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroBan.js.html b/docs/src_main_js_daemon_model_MoneroBan.js.html deleted file mode 100644 index fe35ee830..000000000 --- a/docs/src_main_js_daemon_model_MoneroBan.js.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroBan.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroBan.js

- - - - - - -
-
-
/**
- * Monero banhammer.
- */
-class MoneroBan {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-  
-  getHost() {
-    return this.state.host;
-  }
-  
-  setHost(host) {
-    this.state.host = host;
-    return this;
-  }
-  
-  getIp() {
-    return this.state.ip;
-  }
-  
-  setIp(ip) {
-    this.state.ip = ip;
-    return this;
-  }
-  
-  isBanned() {
-    return this.state.isBanned;
-  }
-  
-  setIsBanned(isBanned) {
-    this.state.isBanned = isBanned;
-    return this;
-  }
-  
-  getSeconds() {
-    return this.state.seconds;
-  }
-  
-  setSeconds(seconds) {
-    this.state.seconds = seconds;
-    return this;
-  }
-}
-
-module.exports = MoneroBan;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroBlock.js.html b/docs/src_main_js_daemon_model_MoneroBlock.js.html deleted file mode 100644 index 5ee6806d2..000000000 --- a/docs/src_main_js_daemon_model_MoneroBlock.js.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroBlock.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroBlock.js

- - - - - - -
-
-
const assert = require("assert");
-const GenUtils = require("../../common/GenUtils");
-const MoneroBlockHeader = require("./MoneroBlockHeader");
-const MoneroTx = require("./MoneroTx");
-const MoneroTxQuery = require("../../wallet/model/MoneroTxQuery");
-const MoneroTxWallet = require("../../wallet/model/MoneroTxWallet");
-
-/**
- * Models a Monero block in the blockchain.
- * 
- * @extends {MoneroBlockHeader}
- */
-class MoneroBlock extends MoneroBlockHeader {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroBlock|MoneroBlockHeader|object} state is existing state to initialize from (optional)
-   * @param {MoneroBlock.DeserializationType} txType informs the tx deserialization type (MoneroTx, MoneroTxWallet, MoneroTxQuery)
-   */
-  constructor(state, txType) {
-    super(state);
-    state = this.state;
-    
-    // deserialize miner tx
-    if (state.minerTx && !(state.minerTx instanceof MoneroTx)) state.minerTx = new MoneroTx(state.minerTx).setBlock(this);
-    
-    // deserialize non-miner txs
-    if (state.txs) {
-      for (let i = 0; i < state.txs.length; i++) {
-        if (txType === MoneroBlock.DeserializationType.TX || txType === undefined) {
-          if (!(state.txs[i] instanceof MoneroTx)) state.txs[i] = new MoneroTx(state.txs[i]).setBlock(this);
-        } else if (txType === MoneroBlock.DeserializationType.TX_WALLET) {
-          if (!(state.txs[i] instanceof MoneroTxWallet)) state.txs[i] = new MoneroTxWallet(state.txs[i]).setBlock(this);
-        } else if (txType === MoneroBlock.DeserializationType.TX_QUERY) {
-          if (!(state.txs[i] instanceof MoneroTxQuery)) state.txs[i] = new MoneroTxQuery(state.txs[i]).setBlock(this);
-        } else {
-          throw new Error("Unrecognized tx deserialization type: " + txType);
-        }
-      }
-    }
-  }
-  
-  getHex() {
-    return this.state.hex;
-  }
-  
-  setHex(hex) {
-    this.state.hex = hex;
-    return this;
-  }
-  
-  getMinerTx() {
-    return this.state.minerTx;
-  }
-  
-  setMinerTx(minerTx) {
-    this.state.minerTx = minerTx;
-    return this;
-  }
-  
-  getTxs() {
-    return this.state.txs;
-  }
-  
-  setTxs(txs) {
-    this.state.txs = txs;
-    return this;
-  }
-  
-  getTxHashes() {
-    return this.state.txHashes;
-  }
-  
-  setTxHashes(txHashes) {
-    this.state.txHashes = txHashes;
-    return this;
-  }
-  
-  copy() {
-    return new MoneroBlock(this);
-  }
-  
-  toJson() {
-    let json = super.toJson();
-    if (this.getMinerTx()) json.minerTx = this.getMinerTx().toJson();
-    if (this.getTxs()) {
-      json.txs = [];
-      for (let tx of this.getTxs()) json.txs.push(tx.toJson());
-    }
-    return json;
-  }
-  
-  merge(block) {
-    assert(block instanceof MoneroBlock);
-    if (this === block) return this;
-    
-    // merge header fields
-    super.merge(block);
-    
-    // merge reconcilable block extensions
-    this.setHex(GenUtils.reconcile(this.getHex(), block.getHex()));
-    this.setTxHashes(GenUtils.reconcile(this.getTxHashes(), block.getTxHashes()));
-    
-    // merge miner tx
-    if (this.getMinerTx() === undefined) this.setMinerTx(block.getMinerTx());
-    if (block.getMinerTx() !== undefined) {
-      block.getMinerTx().setBlock(this);
-      this.getMinerTx().merge(block.getMinerTx());
-    }
-    
-    // merge non-miner txs
-    if (block.getTxs() !== undefined) {
-      for (let tx of block.getTxs()) {
-        tx.setBlock(this);
-        MoneroBlock._mergeTx(this.getTxs(), tx);
-      }
-    }
-
-    return this;
-  }
-  
-  toString(indent = 0) {
-    let str = super.toString(indent) + "\n";
-    str += GenUtils.kvLine("Hex", this.getHex(), indent);
-    if (this.getTxs()) {
-      str += GenUtils.kvLine("Txs", "", indent);
-      for (let tx of this.getTxs()) {
-        str += tx.toString(indent + 1) + "\n";
-      }
-    }
-    if (this.getMinerTx()) {
-      str += GenUtils.kvLine("Miner tx", "", indent);
-      str += this.getMinerTx().toString(indent + 1) + "\n";
-    }
-    str += GenUtils.kvLine("Txs hashes", this.getTxHashes(), indent);
-    return str[str.length - 1] === "\n" ? str.slice(0, str.length - 1) : str  // strip last newline
-  }
-  
-  // private helper to merge txs
-  static _mergeTx(txs, tx) {
-    for (let aTx of txs) {
-      if (aTx.getHash() === tx.getHash()) {
-        aTx.merge(tx);
-        return;
-      }
-    }
-    txs.push(tx);
-  }
-}
-
-MoneroBlock.DeserializationType = {
-    TX: 0,
-    TX_WALLET: 1,
-    TX_QUERY: 2
-}
-
-module.exports = MoneroBlock;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroBlockHeader.js.html b/docs/src_main_js_daemon_model_MoneroBlockHeader.js.html deleted file mode 100644 index 260129270..000000000 --- a/docs/src_main_js_daemon_model_MoneroBlockHeader.js.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroBlockHeader.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroBlockHeader.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../../common/biginteger").BigInteger;
-const GenUtils = require("../../common/GenUtils");
-
-/**
- * Models a Monero block header which contains information about the block.
- * 
- * @class
- */
-class MoneroBlockHeader {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroBlockHeader|object} state is existing state to initialize from (optional)
-   */
-  constructor(state) {
-    
-    // initialize internal state
-    if (!state) state = {};
-    else if (state instanceof MoneroBlockHeader) state = state.toJson();
-    else if (typeof state === "object") state = Object.assign({}, state);
-    else throw new MoneroError("state must be a MoneroBlockHeader or JavaScript object");
-    this.state = state;
-    
-    // deserialize BigIntegers
-    if (state.difficulty !== undefined && !(state.difficulty instanceof BigInteger)) state.difficulty = BigInteger.parse(state.difficulty);
-    if (state.cumulativeDifficulty !== undefined && !(state.cumulativeDifficulty instanceof BigInteger)) state.cumulativeDifficulty = BigInteger.parse(state.cumulativeDifficulty);
-    if (state.reward !== undefined && !(state.reward instanceof BigInteger)) state.reward = BigInteger.parse(state.reward);
-  }
-  
-  copy() {
-    return new MoneroBlockHeader(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getDifficulty()) json.difficulty = this.getDifficulty().toString();
-    if (this.getCumulativeDifficulty()) json.cumulativeDifficulty = this.getCumulativeDifficulty().toString();
-    if (this.getReward()) json.reward = this.getReward().toString();
-    return json;
-  }
-  
-  getHash() {
-    return this.state.hash;
-  }
-  
-  setHash(hash) {
-    this.state.hash = hash;
-    return this;
-  }
-  
-  /**
-   * Return the block's height which is the total number of blocks that have occurred before.
-   * 
-   * @return {number} the block's height
-   */
-  getHeight() {
-    return this.state.height;
-  }
-  
-  /**
-   * Set the block's height which is the total number of blocks that have occurred before.
-   * 
-   * @param {number} height is the block's height to set
-   * @return {MoneroBlockHeader} a reference to this header for chaining
-   */
-  setHeight(height) {
-    this.state.height = height;
-    return this;
-  }
-  
-  getTimestamp() {
-    return this.state.timestamp;
-  }
-  
-  setTimestamp(timestamp) {
-    this.state.timestamp = timestamp;
-    return this;
-  }
-  
-  getSize() {
-    return this.state.size;
-  }
-  
-  setSize(size) {
-    this.state.size = size;
-    return this;
-  }
-  
-  getWeight() {
-    return this.state.weight;
-  }
-  
-  setWeight(weight) {
-    this.state.weight = weight;
-    return this;
-  }
-  
-  getLongTermWeight() {
-    return this.state.longTermWeight;
-  }
-  
-  setLongTermWeight(longTermWeight) {
-    this.state.longTermWeight = longTermWeight;
-    return this;
-  }
-  
-  getDepth() {
-    return this.state.depth;
-  }
-  
-  setDepth(depth) {
-    this.state.depth = depth;
-    return this;
-  }
-  
-  getDifficulty() {
-    return this.state.difficulty;
-  }
-  
-  setDifficulty(difficulty) {
-    this.state.difficulty = difficulty;
-    return this;
-  }
-  
-  getCumulativeDifficulty() {
-    return this.state.cumulativeDifficulty;
-  }
-  
-  setCumulativeDifficulty(cumulativeDifficulty) {
-    this.state.cumulativeDifficulty = cumulativeDifficulty;
-    return this;
-  }
-  
-  getMajorVersion() {
-    return this.state.majorVersion;
-  }
-  
-  setMajorVersion(majorVersion) {
-    this.state.majorVersion = majorVersion;
-    return this;
-  }
-  
-  getMinorVersion() {
-    return this.state.minorVersion;
-  }
-  
-  setMinorVersion(minorVersion) {
-    this.state.minorVersion = minorVersion;
-    return this;
-  }
-  
-  getNonce() {
-    return this.state.nonce;
-  }
-  
-  setNonce(nonce) {
-    this.state.nonce = nonce;
-    return this;
-  }
-  
-  getMinerTxHash() {
-    return this.state.minerTxHash;
-  }
-  
-  setMinerTxHash(minerTxHash) {
-    this.state.minerTxHash = minerTxHash;
-    return this;
-  }
-  
-  getNumTxs() {
-    return this.state.numTxs;
-  }
-  
-  setNumTxs(numTxs) {
-    this.state.numTxs = numTxs;
-    return this;
-  }
-  
-  getOrphanStatus() {
-    return this.state.orphanStatus;
-  }
-  
-  setOrphanStatus(orphanStatus) {
-    this.state.orphanStatus = orphanStatus;
-    return this;
-  }
-  
-  getPrevHash() {
-    return this.state.prevHash;
-  }
-  
-  setPrevHash(prevHash) {
-    this.state.prevHash = prevHash;
-    return this;
-  }
-  
-  getReward() {
-    return this.state.reward;
-  }
-  
-  setReward(reward) {
-    this.state.reward = reward;
-    return this;
-  }
-  
-  getPowHash() {
-    return this.state.powHash;
-  }
-  
-  setPowHash(powHash) {
-    this.state.powHash = powHash;
-    return this;
-  }
-  
-  merge(header) {
-    assert(header instanceof MoneroBlockHeader);
-    if (this === header) return this;
-    this.setHash(GenUtils.reconcile(this.getHash(), header.getHash()));
-    this.setHeight(GenUtils.reconcile(this.getHeight(), header.getHeight(), {resolveMax: true}));  // height can increase
-    this.setTimestamp(GenUtils.reconcile(this.getTimestamp(), header.getTimestamp(), {resolveMax: true}));  // block timestamp can increase
-    this.setSize(GenUtils.reconcile(this.getSize(), header.getSize()));
-    this.setWeight(GenUtils.reconcile(this.getWeight(), header.getWeight()));
-    this.setDepth(GenUtils.reconcile(this.getDepth(), header.getDepth()));
-    this.setDifficulty(GenUtils.reconcile(this.getDifficulty(), header.getDifficulty()));
-    this.setCumulativeDifficulty(GenUtils.reconcile(this.getCumulativeDifficulty(), header.getCumulativeDifficulty()));
-    this.setMajorVersion(GenUtils.reconcile(this.getMajorVersion(), header.getMajorVersion()));
-    this.setMinorVersion(GenUtils.reconcile(this.getMinorVersion(), header.getMinorVersion()));
-    this.setNonce(GenUtils.reconcile(this.getNonce(), header.getNonce()));
-    this.setMinerTxHash(GenUtils.reconcile(this.getMinerTxHash(), header.getMinerTxHash()));
-    this.setNumTxs(GenUtils.reconcile(this.getNumTxs(), header.getNumTxs()));
-    this.setOrphanStatus(GenUtils.reconcile(this.getOrphanStatus(), header.getOrphanStatus()));
-    this.setPrevHash(GenUtils.reconcile(this.getPrevHash(), header.getPrevHash()));
-    this.setReward(GenUtils.reconcile(this.getReward(), header.getReward()));
-    this.setPowHash(GenUtils.reconcile(this.getPowHash(), header.getPowHash()));
-    return this;
-  }
-  
-  toString(indent = 0) {
-    let str = "";
-    str += GenUtils.kvLine("Hash", this.getHash(), indent);
-    str += GenUtils.kvLine("Height", this.getHeight(), indent);
-    str += GenUtils.kvLine("Timestamp", this.getTimestamp(), indent);
-    str += GenUtils.kvLine("Size", this.getSize(), indent);
-    str += GenUtils.kvLine("Weight", this.getWeight(), indent);
-    str += GenUtils.kvLine("Depth", this.getDepth(), indent);
-    str += GenUtils.kvLine("Difficulty", this.getDifficulty(), indent);
-    str += GenUtils.kvLine("Cumulative difficulty", this.getCumulativeDifficulty(), indent);
-    str += GenUtils.kvLine("Major version", this.getMajorVersion(), indent);
-    str += GenUtils.kvLine("Minor version", this.getMinorVersion(), indent);
-    str += GenUtils.kvLine("Nonce", this.getNonce(), indent);
-    str += GenUtils.kvLine("Miner tx hash", this.getMinerTxHash(), indent);
-    str += GenUtils.kvLine("Num txs", this.getNumTxs(), indent);
-    str += GenUtils.kvLine("Orphan status", this.getOrphanStatus(), indent);
-    str += GenUtils.kvLine("Prev hash", this.getPrevHash(), indent);
-    str += GenUtils.kvLine("Reward", this.getReward(), indent);
-    str += GenUtils.kvLine("Pow hash", this.getPowHash(), indent);
-    return str[str.length - 1] === "\n" ? str.slice(0, str.length - 1) : str  // strip last newline
-  }
-}
-
-module.exports = MoneroBlockHeader;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroBlockTemplate.js.html b/docs/src_main_js_daemon_model_MoneroBlockTemplate.js.html deleted file mode 100644 index e403c7c9d..000000000 --- a/docs/src_main_js_daemon_model_MoneroBlockTemplate.js.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroBlockTemplate.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroBlockTemplate.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Monero block template to mine.
- */
-class MoneroBlockTemplate {
-  
-  constructor(state) {
-    state = Object.assign({}, state);
-    this.state = state;
-    
-    // deserialize BigIntegers
-    if (state.expectedReward !== undefined && !(state.expectedReward instanceof BigInteger)) state.expectedReward = BigInteger.parse(state.expectedReward);
-    if (state.difficulty !== undefined && !(state.difficulty instanceof BigInteger)) state.difficulty = BigInteger.parse(state.difficulty);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getExpectedReward()) json.expectedReward = this.getExpectedReward().toString();
-    if (this.getDifficulty()) json.difficulty = this.getDifficulty().toString();
-    return json;
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.expectedReward) json.expectedReward = json.expectedReward.toString();
-    if (json.difficulty) json.difficulty = json.difficulty.toString();
-    return json;
-  }
-  
-  getBlockTemplateBlob() {
-    return this.state.blockTemplateBlob;
-  }
-  
-  setBlockTemplateBlob(blockTemplateBlob) {
-    this.state.blockTemplateBlob = blockTemplateBlob;
-    return this;
-  }
-  
-  getBlockHashingBlob() {
-    return this.state.blockHashingBlob;
-  }
-  
-  setBlockHashingBlob(blockHashingBlob) {
-    this.state.blockHashingBlob = blockHashingBlob;
-    return this;
-  }
-  
-  getDifficulty() {
-    return this.state.difficulty;
-  }
-  
-  setDifficulty(difficulty) {
-    this.state.difficulty = difficulty;
-    return this;
-  }
-  
-  getExpectedReward() {
-    return this.state.expectedReward;
-  }
-  
-  setExpectedReward(expectedReward) {
-    this.state.expectedReward = expectedReward;
-    return this;
-  }
-  
-  getHeight() {
-    return this.state.height;
-  }
-  
-  setHeight(height) {
-    this.state.height = height;
-    return this;
-  }
-  
-  getPrevHash() {
-    return this.state.prevId;
-  }
-  
-  setPrevHash(prevId) {
-    this.state.prevId = prevId;
-    return this;
-  }
-  
-  getReservedOffset() {
-    return this.state.reservedOffset;
-  }
-  
-  setReservedOffset(reservedOffset) {
-    this.state.reservedOffset = reservedOffset;
-    return this;
-  }
-  
-  getSeedHeight() {
-    return this.state.height;
-  }
-  
-  setSeedHeight(seedHeight) {
-    this.state.seedHeight = seedHeight;
-    return this;
-  }
-  
-  getSeedHash() {
-    return this.state.seedHash;
-  }
-  
-  setSeedHash(seedHash) {
-    this.state.seedHash = seedHash;
-    return this;
-  }
-  
-  getNextSeedHash() {
-    return this.state.nextSeedHash
-  }
-  
-  setNextSeedHash(nextSeedHash) {
-    this.state.nextSeedHash = nextSeedHash;
-    return this;
-  }
-}
-
-module.exports = MoneroBlockTemplate;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroConnectionSpan.js.html b/docs/src_main_js_daemon_model_MoneroConnectionSpan.js.html deleted file mode 100644 index f1ca769f0..000000000 --- a/docs/src_main_js_daemon_model_MoneroConnectionSpan.js.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroConnectionSpan.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroConnectionSpan.js

- - - - - - -
-
-
/**
- * Monero daemon connection span.
- */
-class MoneroConnectionSpan {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-  
-  getConnectionId() {
-    return this.state.connectionId;
-  }
-
-  setConnectionId(connectionId) {
-    this.state.connectionId = connectionId;
-    return this;
-  }
-  
-  getNumBlocks() {
-    return this.state.numBlocks;
-  }
-
-  setNumBlocks(numBlocks) {
-    this.state.numBlocks = numBlocks;
-    return this;
-  }
-  
-  getRemoteAddress() {
-    return this.state.remoteAddress;
-  }
-
-  setRemoteAddress(remoteAddress) {
-    this.state.remoteAddress = remoteAddress;
-    return this;
-  }
-  
-  getRate() {
-    return this.state.rate;
-  }
-
-  setRate(rate) {
-    this.state.rate = rate;
-    return this;
-  }
-  
-  getSpeed() {
-    return this.state.speed;
-  }
-
-  setSpeed(speed) {
-    this.state.speed = speed;
-    return this;
-  }
-  
-  getSize() {
-    return this.state.size;
-  }
-  
-  setSize(size) {
-    this.state.size = size;
-    return this;
-  }
-  
-  getStartHeight() {
-    return this.state.startHeight;
-  }
-  
-  setStartHeight(startHeight) {
-    this.state.startHeight = startHeight;
-    return this;
-  }
-}
-
-module.exports = MoneroConnectionSpan;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroDaemonConnection.js.html b/docs/src_main_js_daemon_model_MoneroDaemonConnection.js.html deleted file mode 100644 index 2a6b028d2..000000000 --- a/docs/src_main_js_daemon_model_MoneroDaemonConnection.js.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroDaemonConnection.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroDaemonConnection.js

- - - - - - -
-
-
const MoneroDaemonPeer = require("./MoneroDaemonPeer");
-
-/**
- * Monero daemon connection.
- */
-class MoneroDaemonConnection {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-    if (this.state.peer !== undefined && !(this.state.peer instanceof MoneroDaemonPeer)) this.state.peer = new MoneroDaemonPeer(this.state.peer);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.peer) json.peer = json.peer.toJson();
-    return json;
-  }
-  
-  getPeer() {
-    return this.state.peer;
-  }
-
-  setPeer(peer) {
-    this.state.peer = peer;
-    return this;
-  }
-  
-  getId() {
-    return this.state.id;
-  }
-
-  setId(id) {
-    this.state.id = id;
-    return this;
-  }
-
-  getAvgDownload() {
-    return this.state.avgDownload;
-  }
-
-  setAvgDownload(avgDownload) {
-    this.state.avgDownload = avgDownload;
-    return this;
-  }
-
-  getAvgUpload() {
-    return this.state.avgUpload;
-  }
-
-  setAvgUpload(avgUpload) {
-    this.state.avgUpload = avgUpload;
-    return this;
-  }
-
-  getCurrentDownload() {
-    return this.state.currentDownload;
-  }
-
-  setCurrentDownload(currentDownload) {
-    this.state.currentDownload = currentDownload;
-    return this;
-  }
-
-  getCurrentUpload() {
-    return this.state.currentUpload;
-  }
-
-  setCurrentUpload(currentUpload) {
-    this.state.currentUpload = currentUpload;
-    return this;
-  }
-
-  getHeight() {
-    return this.state.height;
-  }
-
-  setHeight(height) {
-    this.state.height = height;
-    return this;
-  }
-
-  isIncoming() {
-    return this.state.isIncoming;
-  }
-
-  setIsIncoming(isIncoming) {
-    this.state.isIncoming = isIncoming;
-    return this;
-  }
-
-  getLiveTime() {
-    return this.state.liveTime;
-  }
-
-  setLiveTime(liveTime) {
-    this.state.liveTime = liveTime;
-    return this;
-  }
-
-  isLocalIp() {
-    return this.state.isLocalIp;
-  }
-
-  setIsLocalIp(isLocalIp) {
-    this.state.isLocalIp = isLocalIp;
-    return this;
-  }
-
-  isLocalHost() {
-    return this.state.isLocalHost;
-  }
-
-  setIsLocalHost(isLocalHost) {
-    this.state.isLocalHost = isLocalHost;
-    return this;
-  }
-
-  getNumReceives() {
-    return this.state.numReceives;
-  }
-
-  setNumReceives(numReceives) {
-    this.state.numReceives = numReceives;
-    return this;
-  }
-
-  getNumSends() {
-    return this.state.numSends;
-  }
-
-  setNumSends(numSends) {
-    this.state.numSends = numSends;
-    return this;
-  }
-
-  getReceiveIdleTime() {
-    return this.state.receiveIdleTime;
-  }
-
-  setReceiveIdleTime(receiveIdleTime) {
-    this.state.receiveIdleTime = receiveIdleTime;
-    return this;
-  }
-
-  getSendIdleTime() {
-    return this.state.sendIdleTime;
-  }
-
-  setSendIdleTime(sendIdleTime) {
-    this.state.sendIdleTime = sendIdleTime;
-    return this;
-  }
-
-  getState() {
-    return this.state.state;
-  }
-
-  setState(state) {
-    this.state.state = state;
-    return this;
-  }
-
-  getNumSupportFlags() {
-    return this.state.numSupportFlags;
-  }
-
-  setNumSupportFlags(numSupportFlags) {
-    this.state.numSupportFlags = numSupportFlags;
-    return this;
-  }
-  
-  getType() {
-    return this.state.type;
-  }
-  
-  setType(type) {
-    this.state.type = type;
-    return this;
-  }
-}
-
-module.exports = MoneroDaemonConnection;
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.6.7 on Thu Dec 30 2021 13:46:54 GMT-0500 (Eastern Standard Time) -
- - - - - diff --git a/docs/src_main_js_daemon_model_MoneroDaemonConnectionSpan.js.html b/docs/src_main_js_daemon_model_MoneroDaemonConnectionSpan.js.html deleted file mode 100644 index 188da7f47..000000000 --- a/docs/src_main_js_daemon_model_MoneroDaemonConnectionSpan.js.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroDaemonConnectionSpan.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroDaemonConnectionSpan.js

- - - - - - -
-
-
/**
- * Monero daemon connection span.
- */
-class MoneroDaemonConnectionSpan {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-  
-  getConnectionId() {
-    return this.state.connectionId;
-  }
-
-  setConnectionId(connectionId) {
-    this.state.connectionId = connectionId;
-    return this;
-  }
-  
-  getNumBlocks() {
-    return this.state.numBlocks;
-  }
-
-  setNumBlocks(numBlocks) {
-    this.state.numBlocks = numBlocks;
-    return this;
-  }
-  
-  getRemoteAddress() {
-    return this.state.remoteAddress;
-  }
-
-  setRemoteAddress(remoteAddress) {
-    this.state.remoteAddress = remoteAddress;
-    return this;
-  }
-  
-  getRate() {
-    return this.state.rate;
-  }
-
-  setRate(rate) {
-    this.state.rate = rate;
-    return this;
-  }
-  
-  getSpeed() {
-    return this.state.speed;
-  }
-
-  setSpeed(speed) {
-    this.state.speed = speed;
-    return this;
-  }
-  
-  getSize() {
-    return this.state.size;
-  }
-  
-  setSize(size) {
-    this.state.size = size;
-    return this;
-  }
-  
-  getStartHeight() {
-    return this.state.startHeight;
-  }
-  
-  setStartHeight(startHeight) {
-    this.state.startHeight = startHeight;
-    return this;
-  }
-}
-
-module.exports = MoneroDaemonConnectionSpan;
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.6.7 on Thu Dec 30 2021 13:46:54 GMT-0500 (Eastern Standard Time) -
- - - - - diff --git a/docs/src_main_js_daemon_model_MoneroDaemonInfo.js.html b/docs/src_main_js_daemon_model_MoneroDaemonInfo.js.html deleted file mode 100644 index 661401fe6..000000000 --- a/docs/src_main_js_daemon_model_MoneroDaemonInfo.js.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroDaemonInfo.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroDaemonInfo.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Monero daemon info.
- */
-class MoneroDaemonInfo {
-  
-  constructor(state) {
-    state = Object.assign({}, state);
-    this.state = state;
-    
-    // deserialize BigIntegers
-    if (state.difficulty !== undefined && !(state.difficulty instanceof BigInteger)) state.difficulty = BigInteger.parse(state.difficulty);
-    if (state.cumulativeDifficulty !== undefined && !(state.cumulativeDifficulty instanceof BigInteger)) state.cumulativeDifficulty = BigInteger.parse(state.cumulativeDifficulty);
-    if (state.credits !== undefined && !(state.credits instanceof BigInteger)) state.credits = BigInteger.parse(state.credits);
-  }
-  
-  toJson() {
-    let json = Object.assign([], this.state);
-    if (json.difficulty) json.difficulty = json.difficulty.toString();
-    if (json.cumulativeDifficulty) json.cumulativeDifficulty = json.cumulativeDifficulty.toString();
-    if (json.credits) json.credits = json.credits.toString();
-    return json;
-  }
-  
-  getVersion() {
-    return this.state.version;
-  }
-  
-  setVersion(version) {
-    this.state.version = version;
-    return this;
-  }
-  
-  getNumAltBlocks() {
-    return this.state.numAltBlocks;
-  }
-  
-  setNumAltBlocks(numAltBlocks) {
-    this.state.numAltBlocks = numAltBlocks;
-    return this;
-  }
-  
-  getBlockSizeLimit() {
-    return this.state.blockSizeLimit;
-  }
-  
-  setBlockSizeLimit(blockSizeLimit) {
-    this.state.blockSizeLimit = blockSizeLimit;
-    return this;
-  }
-  
-  getBlockSizeMedian() {
-    return this.state.blockSizeMedian;
-  }
-  
-  setBlockSizeMedian(blockSizeMedian) {
-    this.state.blockSizeMedian = blockSizeMedian;
-    return this;
-  }
-  
-  getBlockWeightLimit() {
-    return this.state.blockWeightLimit;
-  }
-  
-  setBlockWeightLimit(blockWeightLimit) {
-    this.state.blockWeightLimit = blockWeightLimit;
-    return this;
-  }
-  
-  getBlockWeightMedian() {
-    return this.state.blockWeightMedian;
-  }
-  
-  setBlockWeightMedian(blockWeightMedian) {
-    this.state.blockWeightMedian = blockWeightMedian;
-    return this;
-  }
-  
-  getBootstrapDaemonAddress() {
-    return this.state.bootstrapDaemonAddress;
-  }
-  
-  setBootstrapDaemonAddress(bootstrapDaemonAddress) {
-    this.state.bootstrapDaemonAddress = bootstrapDaemonAddress;
-    return this;
-  }
-  
-  getDifficulty() {
-    return this.state.difficulty;
-  }
-  
-  setDifficulty(difficulty) {
-    this.state.difficulty = difficulty;
-    return this;
-  }
-  
-  getCumulativeDifficulty() {
-    return this.state.cumulativeDifficulty;
-  }
-  
-  setCumulativeDifficulty(cumulativeDifficulty) {
-    this.state.cumulativeDifficulty = cumulativeDifficulty;
-    return this;
-  }
-  
-  getFreeSpace() {
-    return this.state.freeSpace;
-  }
-  
-  setFreeSpace(freeSpace) {
-    this.state.freeSpace = freeSpace;
-    return this;
-  }
-  
-  getNumOfflinePeers() {
-    return this.state.numOfflinePeers;
-  }
-  
-  setNumOfflinePeers(numOfflinePeers) {
-    this.state.numOfflinePeers = numOfflinePeers;
-    return this;
-  }
-  
-  getNumOnlinePeers() {
-    return this.state.numOnlinePeers;
-  }
-  
-  setNumOnlinePeers(numOnlinePeers) {
-    this.state.numOnlinePeers = numOnlinePeers;
-    return this;
-  }
-  
-  getHeight() {
-    return this.state.height;
-  }
-  
-  setHeight(height) {
-    this.state.height = height;
-    return this;
-  }
-  
-  getHeightWithoutBootstrap() {
-    return this.state.heightWithoutBootstrap;
-  }
-  
-  setHeightWithoutBootstrap(heightWithoutBootstrap) {
-    this.state.heightWithoutBootstrap = heightWithoutBootstrap;
-    return this;
-  }
-  
-  getNetworkType() {
-    return this.state.networkType;
-  }
-
-  setNetworkType(networkType) {
-    this.state.networkType = networkType;
-    return this;
-  }
-
-  isOffline() {
-    return this.state.isOffline;
-  }
-  
-  setIsOffline(isOffline) {
-    this.state.isOffline = isOffline;
-    return this;
-  }
-  
-  getNumIncomingConnections() {
-    return this.state.numIncomingConnections;
-  }
-  
-  setNumIncomingConnections(numIncomingConnections) {
-    this.state.numIncomingConnections = numIncomingConnections;
-    return this;
-  }
-  
-  getNumOutgoingConnections() {
-    return this.state.numOutgoingConnections;
-  }
-  
-  setNumOutgoingConnections(numOutgoingConnections) {
-    this.state.numOutgoingConnections = numOutgoingConnections;
-    return this;
-  }
-  
-  getNumRpcConnections() {
-    return this.state.numRpcConnections;
-  }
-  
-  setNumRpcConnections(numRpcConnections) {
-    this.state.numRpcConnections = numRpcConnections;
-    return this;
-  }
-  
-  getStartTimestamp() {
-    return this.state.startTimestamp;
-  }
-  
-  setStartTimestamp(startTimestamp) {
-    this.state.startTimestamp = startTimestamp;
-    return this;
-  }
-  
-  getAdjustedTimestamp() {
-    return this.state.adjustedTimestamp;
-  }
-  
-  setAdjustedTimestamp(adjustedTimestamp) {
-    this.state.adjustedTimestamp = adjustedTimestamp;
-    return this;
-  }
-  
-  getTarget() {
-    return this.state.target;
-  }
-  
-  setTarget(target) {
-    this.state.target = target;
-    return this;
-  }
-  
-  getTargetHeight() {
-    return this.state.targetHeight;
-  }
-  
-  setTargetHeight(targetHeight) {
-    this.state.targetHeight = targetHeight;
-    return this;
-  }
-  
-  getTopBlockHash() {
-    return this.state.topBlockHash;
-  }
-  
-  setTopBlockHash(topBlockHash) {
-    this.state.topBlockHash = topBlockHash;
-    return this;
-  }
-  
-  getNumTxs() {
-    return this.state.numTxs;
-  }
-  
-  setNumTxs(numTxs) {
-    this.state.numTxs = numTxs;
-    return this;
-  }
-  
-  getNumTxsPool() {
-    return this.state.numTxsPool;
-  }
-  
-  setNumTxsPool(numTxsPool) {
-    this.state.numTxsPool = numTxsPool;
-    return this;
-  }
-  
-  getWasBootstrapEverUsed() {
-    return this.state.wasBootstrapEverUsed;
-  }
-  
-  setWasBootstrapEverUsed(wasBootstrapEverUsed) {
-    this.state.wasBootstrapEverUsed = wasBootstrapEverUsed;
-    return this;
-  }
-  
-  getDatabaseSize() {
-    return this.state.databaseSize;
-  }
-  
-  setDatabaseSize(databaseSize) {
-    this.state.databaseSize = databaseSize;
-    return this;
-  }
-  
-  getUpdateAvailable() {
-    return this.state.updateAvailable;
-  }
-  
-  setUpdateAvailable(updateAvailable) {
-    this.state.updateAvailable = updateAvailable;
-    return this;
-  }
-  
-  getCredits() {
-    return this.state.credits;
-  }
-  
-  setCredits(credits) {
-    this.state.credits = credits;
-    return this;
-  }
-  
-  isBusySyncing() {
-    return this.state.isBusySyncing;
-  }
-  
-  setIsBusySyncing(isBusySyncing) {
-    this.state.isBusySyncing = isBusySyncing;
-    return this;
-  }
-  
-  isSynchronized() {
-    return this.state.isSynchronized;
-  }
-  
-  setIsSynchronized(isSynchronized) {
-    this.state.isSynchronized = isSynchronized;
-    return this;
-  }
-  
-  isRestricted() {
-    return this.state.isRestricted;
-  }
-  
-  setIsRestricted(isRestricted) {
-    this.state.isRestricted = isRestricted;
-    return this;
-  }
-}
-
-module.exports = MoneroDaemonInfo;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroDaemonListener.js.html b/docs/src_main_js_daemon_model_MoneroDaemonListener.js.html deleted file mode 100644 index e8f5f6510..000000000 --- a/docs/src_main_js_daemon_model_MoneroDaemonListener.js.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroDaemonListener.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroDaemonListener.js

- - - - - - -
-
-
/**
- * Receives notifications as a daemon is updated.
- */
-class MoneroDaemonListener {
-  
-  /**
-   * Called when a new block is added to the chain.
-   * 
-   * @param {MoneroBlockHeader} header - the header of the block added to the chain
-   */
-  async onBlockHeader(header) {
-    this.lastHeader = header;
-  }
-  
-  /**
-   * Get the last notified block header.
-   * 
-   * @return {MoneroBlockHeader} the last notified block header
-   */
-  getLastBlockHeader() {
-    return this.lastHeader;
-  }
-}
-
-module.exports = MoneroDaemonListener;
-
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroDaemonPeer.js.html b/docs/src_main_js_daemon_model_MoneroDaemonPeer.js.html deleted file mode 100644 index fd57e0ed7..000000000 --- a/docs/src_main_js_daemon_model_MoneroDaemonPeer.js.html +++ /dev/null @@ -1,157 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroDaemonPeer.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroDaemonPeer.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Models a peer to the daemon.
- */
-class MoneroDaemonPeer {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-    if (this.state.rpcCreditsPerHash !== undefined && !(this.state.rpcCreditsPerHash instanceof BigInteger)) this.state.rpcCreditsPerHash = BigInteger.parse(this.state.rpcCreditsPerHash);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.rpcCreditsPerHash) json.rpcCreditsPerHash = json.rpcCreditsPerHash.toString();
-    return json;
-  }
-  
-  getId() {
-    return this.state.id;
-  }
-
-  setId(id) {
-    this.state.id = id;
-    return this;
-  }
-
-  getAddress() {
-    return this.state.address;
-  }
-
-  setAddress(address) {
-    this.state.address = address;
-    return this;
-  }
-
-  getHost() {
-    return this.state.host;
-  }
-
-  setHost(host) {
-    this.state.host = host;
-    return this;
-  }
-
-  getPort() {
-    return this.state.port;
-  }
-
-  setPort(port) {
-    this.state.port = port;
-    return this;
-  }
-  
-  /**
-   * Indicates if the peer was online when last checked (aka "white listed" as
-   * opposed to "gray listed").
-   * 
-   * @return {boolean} true if peer was online when last checked, false otherwise
-   */
-  isOnline() {
-    return this.state.isOnline;
-  }
-  
-  setIsOnline(isOnline) {
-    this.state.isOnline = isOnline;
-    return this;
-  }
-  
-  getLastSeenTimestamp() {
-    return this.state.lastSeenTimestamp;
-  }
-  
-  setLastSeenTimestamp(lastSeenTimestamp) {
-    this.state.lastSeenTimestamp = lastSeenTimestamp;
-    return this;
-  }
-  
-  getPruningSeed() {
-    return this.state.pruningSeed;
-  }
-  
-  setPruningSeed(pruningSeed) {
-    this.state.pruningSeed = pruningSeed;
-    return this;
-  }
-  
-  getRpcPort() {
-    return this.state.rpcPort;
-  }
-
-  setRpcPort(rpcPort) {
-    this.state.rpcPort = rpcPort;
-    return this;
-  }
-  
-  getRpcCreditsPerHash() {
-    return this.state.rpcCreditsPerHash;
-  }
-  
-  setRpcCreditsPerHash(rpcCreditsPerHash) {
-    this.state.rpcCreditsPerHash = rpcCreditsPerHash;
-    return this;
-  }
-}
-
-module.exports = MoneroDaemonPeer;
-
-
- - - - -
- - - -
- -
- Documentation generated by JSDoc 3.6.7 on Thu Dec 30 2021 13:46:54 GMT-0500 (Eastern Standard Time) -
- - - - - diff --git a/docs/src_main_js_daemon_model_MoneroDaemonSyncInfo.js.html b/docs/src_main_js_daemon_model_MoneroDaemonSyncInfo.js.html deleted file mode 100644 index f09781dee..000000000 --- a/docs/src_main_js_daemon_model_MoneroDaemonSyncInfo.js.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroDaemonSyncInfo.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroDaemonSyncInfo.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-const MoneroConnectionSpan = require("./MoneroConnectionSpan");
-const MoneroPeer = require("./MoneroPeer");
-
-/**
- * Models daemon synchronization information.
- */
-class MoneroDaemonSyncInfo {
-  
-  constructor(state) {
-    
-    // copy state
-    state = Object.assign({}, state);
-    
-    // deserialize if necessary
-    if (state.peers) {
-      for (let i = 0; i < state.peers.length; i++) {
-        if (!(state.peers[i] instanceof MoneroPeer)) {
-          state.peers[i] = new MoneroPeer(state.peers[i]);
-        }
-      }
-    }
-    if (state.spans) {
-      for (let i = 0; i < state.spans.length; i++) {
-        if (!(state.spans[i] instanceof MoneroConnectionSpan)) {
-          state.spans[i] = new MoneroConnectionSpan(state.spans[i]);
-        }
-      }
-    }
-    if (state.credits !== undefined && !(state.credits instanceof BigInteger)) state.credits = BigInteger.parse(state.credits);
-    
-    // assign internal state
-    this.state = state;
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.peers) {
-      for (let i = 0; i < json.peers.length; i++) {
-        json.peers[i] = json.peers[i].toJson();
-      }
-    }
-    if (json.spans) {
-      for (let i = 0; i < json.spans.length; i++) {
-        json.spans[i] = json.spans[i].toJson();
-      }
-    }
-    if (json.credits) json.credits = json.credits.toString();
-    return json;
-  }
-  
-  getHeight() {
-    return this.state.height;
-  }
-  
-  setHeight(height) {
-    this.state.height = height;
-    return this;
-  }
-  
-  getPeers() {
-    return this.state.peers;
-  }
-  
-  setPeers(peers) {
-    this.state.peers = peers;
-    return this;
-  }
-  
-  getSpans() {
-    return this.state.spans;
-  }
-  
-  setSpans(spans) {
-    this.state.spans = spans;
-    return this;
-  }
-  
-  getTargetHeight() {
-    return this.state.targetHeight;
-  }
-  
-  setTargetHeight(targetHeight) {
-    this.state.targetHeight = targetHeight;
-    return this;
-  }
-  
-  getNextNeededPruningSeed() {
-    return this.state.nextNeededPruningSeed;
-  }
-  
-  setNextNeededPruningSeed(nextNeededPruningSeed) {
-    this.state.nextNeededPruningSeed = nextNeededPruningSeed;
-    return this;
-  }
-  
-  getOverview() {
-    return this.state.overview;
-  }
-  
-  setOverview(overview) {
-    this.state.overview = overview;
-    return this;
-  }
-  
-  getCredits() {
-    return this.state.credits;
-  }
-  
-  setCredits(credits) {
-    this.state.credits = credits;
-    return this;
-  }
-  
-  getTopBlockHash() {
-    return this.state.topBlockHash;
-  }
-  
-  setTopBlockHash(topBlockHash) {
-    this.state.topBlockHash = topBlockHash;
-    return this;
-  }
-}
-
-module.exports = MoneroDaemonSyncInfo;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroDaemonUpdateCheckResult.js.html b/docs/src_main_js_daemon_model_MoneroDaemonUpdateCheckResult.js.html deleted file mode 100644 index 4d07be84d..000000000 --- a/docs/src_main_js_daemon_model_MoneroDaemonUpdateCheckResult.js.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroDaemonUpdateCheckResult.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroDaemonUpdateCheckResult.js

- - - - - - -
-
-
/**
- * Models the result of checking for a daemon update.
- */
-class MoneroDaemonUpdateCheckResult {
-  
-  /**
-   * Deep copy constructor.
-   * 
-   * @param {MoneroDaemonUpdateCheckResult} is an existing result to deep copy from
-   */
-  constructor(result) {
-    this.state = {};
-    if (result !== undefined) {
-      assert(result instanceof MoneroDaemonUpdateCheckResult);
-      this.setIsUpdateAvailable(result.isUpdateAvailable());
-      this.setVersion(result.getVersion());
-      this.setHash(result.getHash());
-      this.setAutoUri(result.getAutoUri());
-      this.setUserUri(result.getUserUri());
-    }
-  }
-  
-  /**
-   * Indicates if an update is available.
-   * 
-   * @return {boolean} true if an update is available, false otherwise
-   */
-  isUpdateAvailable() {
-    return this.state.isUpdateAvailable;
-  }
-  
-  setIsUpdateAvailable(isUpdateAvailable) {
-    this.state.isUpdateAvailable = isUpdateAvailable;
-    return this;
-  }
-  
-  /**
-   * Get the update's version.
-   * 
-   * @return {string} is the update's version
-   */
-  getVersion() {
-    return this.state.version;
-  }
-  
-  setVersion(version) {
-    this.state.version = version;
-    return this;
-  }
-  
-  /**
-   * Get the update's hash.
-   * 
-   * @return {string} is the update's hash
-   */
-  getHash() {
-    return this.state.hash;
-  }
-  
-  setHash(hash) {
-    this.state.hash = hash;
-    return this;
-  }
-  
-  /**
-   * Get the uri to automatically download the update.
-   * 
-   * @return {string} is the uri to automatically download the update
-   */
-  getAutoUri() {
-    return this.state.autoUri;
-  }
-  
-  setAutoUri(autoUri) {
-    this.state.autoUri = autoUri;
-    return this;
-  }
-  
-  /**
-   * Get the uri to manually download the update.
-   * 
-   * @return {string} is the uri to manually download the update
-   */
-  getUserUri() {
-    return this.state.userUri;
-  }
-  
-  setUserUri(userUri) {
-    this.state.userUri = userUri;
-    return this;
-  }
-}
-
-module.exports = MoneroDaemonUpdateCheckResult;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroDaemonUpdateDownloadResult.js.html b/docs/src_main_js_daemon_model_MoneroDaemonUpdateDownloadResult.js.html deleted file mode 100644 index 8f5fbdb75..000000000 --- a/docs/src_main_js_daemon_model_MoneroDaemonUpdateDownloadResult.js.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroDaemonUpdateDownloadResult.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroDaemonUpdateDownloadResult.js

- - - - - - -
-
-
const MoneroDaemonUpdateCheckResult = require("./MoneroDaemonUpdateCheckResult");
-
-/**
- * Models the result of downloading an update.
- */
-class MoneroDaemonUpdateDownloadResult extends MoneroDaemonUpdateCheckResult {
-  
-  /**
-   * Construct a download result.
-   * 
-   * @param {MoneroDaemonUpdateCheckResult} is an existing result to copy from
-   */
-  constructor(result) {
-    super(result);
-  }
-  
-  /**
-   * Get the path the update was downloaded to.
-   * 
-   * @return {string} is the path the update was downloaded to
-   */
-  getDownloadPath() {
-    return this.state.downloadPath;
-  }
-  
-  setDownloadPath(downloadPath) {
-    this.state.downloadPath = downloadPath;
-    return this;
-  }
-}
-
-module.exports = MoneroDaemonUpdateDownloadResult;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroFeeEstimate.js.html b/docs/src_main_js_daemon_model_MoneroFeeEstimate.js.html deleted file mode 100644 index 0fc82fd82..000000000 --- a/docs/src_main_js_daemon_model_MoneroFeeEstimate.js.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroFeeEstimate.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroFeeEstimate.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-const GenUtils = require("../../common/GenUtils");
-
-/**
- * Models a Monero fee estimate.
- */
-class MoneroFeeEstimate {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroFeeEstimate|object} state - MoneroFeeEstimate or JS object
-   */
-  constructor(state) {
-    if (!state) this.state = {};
-    else if (state instanceof MoneroFeeEstimate) this.state = state.toJson();
-    else if (typeof state === "object") this.state = Object.assign({}, state);
-    else throw new MoneroError("state must be a MoneroFeeEstimate or JavaScript object");
-    
-    // deserialize
-    if (this.state.fee !== undefined && !(this.state.fee instanceof BigInteger)) this.state.fee = BigInteger.parse(this.state.fee);
-    if (this.state.fees !== undefined) {
-      for (let i = 0; i < this.state.fees.length; i++) {
-        if (!(this.state.fees[i] instanceof BigInteger)) this.state.fees[i] = BigInteger.parse(this.state.fees[i]);
-      }
-    }
-    if (this.state.quantizationMask !== undefined && !(this.state.quantizationMask instanceof BigInteger)) this.state.quantizationMask = BigInteger.parse(this.state.quantizationMask);
-  }
-
-  getFee() {
-    return this.state.fee;
-  }
-
-  setFee(fee) {
-    this.state.fee = fee;
-    return this;
-  }
-
-  getFees() {
-    return this.state.fees;
-  }
-
-  setFees(fees) {
-    this.state.fees = fees;
-    return this;
-  }
-  
-  getQuantizationMask() {
-    return this.state.quantizationMask;
-  }
-
-  setQuantizationMask(quantizationMask) {
-    this.state.quantizationMask = quantizationMask;
-    return this;
-  }
-  
-  copy() {
-    return new MoneroFeeEstimate(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getFee()) json.fee = this.getFee().toString();
-    if (this.getFees()) for (let i = 0; i < this.getFees().length; i++) json.fees[i] = this.getFees()[i].toString();
-    if (this.getQuantizationMask()) json.quantizationMask = this.getQuantizationMask().toString();
-    return json;
-  }
-  
-  toString(indent = 0) {
-    let str = "";
-    let json = this.toJson();
-    str += GenUtils.kvLine("Fee", json.fee, indent);
-    str += GenUtils.kvLine("Fees", json.fees, indent);
-    str += GenUtils.kvLine("Quantization mask", json.quantizationMask, indent);
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-module.exports = MoneroFeeEstimate;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroHardForkInfo.js.html b/docs/src_main_js_daemon_model_MoneroHardForkInfo.js.html deleted file mode 100644 index 446e355df..000000000 --- a/docs/src_main_js_daemon_model_MoneroHardForkInfo.js.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroHardForkInfo.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroHardForkInfo.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Monero hard fork info.
- */
-class MoneroHardForkInfo {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-    if (this.state.credits !== undefined && !(this.state.credits instanceof BigInteger)) this.state.credits = BigInteger.parse(this.state.credits);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.credits) json.credits = json.credits.toString();
-    return json;
-  }
-  
-  getEarliestHeight() {
-    return this.state.earliestHeight;
-  }
-
-  setEarliestHeight(earliestHeight) {
-    this.state.earliestHeight = earliestHeight;
-    return this;
-  }
-
-  isEnabled() {
-    return this.state.isEnabled;
-  }
-
-  setIsEnabled(isEnabled) {
-    this.state.isEnabled = isEnabled;
-    return this;
-  }
-
-  getState() {
-    return this.state.state;
-  }
-
-  setState(state) {
-    this.state.state = state;
-    return this;
-  }
-
-  getThreshold() {
-    return this.state.threshold;
-  }
-
-  setThreshold(threshold) {
-    this.state.threshold = threshold;
-    return this;
-  }
-
-  getVersion() {
-    return this.state.version;
-  }
-
-  setVersion(version) {
-    this.state.version = version;
-    return this;
-  }
-
-  getNumVotes() {
-    return this.state.numVotes;
-  }
-
-  setNumVotes(numVotes) {
-    this.state.numVotes = numVotes;
-    return this;
-  }
-
-  getWindow() {
-    return this.state.window;
-  }
-
-  setWindow(window) {
-    this.state.window = window;
-    return this;
-  }
-
-  getVoting() {
-    return this.state.voting;
-  }
-
-  setVoting(voting) {
-    this.state.voting = voting;
-    return this;
-  }
-  
-  getCredits() {
-    return this.state.credits;
-  }
-  
-  setCredits(credits) {
-    this.state.credits = credits;
-    return this;
-  }
-  
-  getTopBlockHash() {
-    return this.state.topBlockHash;
-  }
-  
-  setTopBlockHash(topBlockHash) {
-    this.state.topBlockHash = topBlockHash;
-    return this;
-  }
-}
-
-module.exports = MoneroHardForkInfo;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroKeyImage.js.html b/docs/src_main_js_daemon_model_MoneroKeyImage.js.html deleted file mode 100644 index 1eb7c3026..000000000 --- a/docs/src_main_js_daemon_model_MoneroKeyImage.js.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroKeyImage.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroKeyImage.js

- - - - - - -
-
-
const assert = require("assert");
-const GenUtils = require("../../common/GenUtils");
-
-/**
- * Models a Monero key image.
- */
-class MoneroKeyImage {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroKeyImage|object|string} stateOrHex is a MoneroKeyImage, JS object, or hex string to initialize from (optional)
-   * @param {string} signature is the key image's signature
-   */
-  constructor(stateOrHex, signature) {
-    if (!stateOrHex) this.state = {};
-    else if (stateOrHex instanceof MoneroKeyImage) this.state = stateOrHex.toJson();
-    else if (typeof stateOrHex === "object") this.state = Object.assign({}, stateOrHex);
-    else if (typeof stateOrHex === "string") {
-      this.state = {};
-      this.setHex(stateOrHex);
-      this.setSignature(signature);
-    } else {
-      throw new MoneroError("stateOrHex must be a MoneroKeyImage, JavaScript object, or string");
-    }
-  }
-
-  getHex() {
-    return this.state.hex;
-  }
-
-  setHex(hex) {
-    this.state.hex = hex;
-    return this;
-  }
-
-  getSignature() {
-    return this.state.signature;
-  }
-
-  setSignature(signature) {
-    this.state.signature = signature;
-    return this;
-  }
-  
-  copy() {
-    return new MoneroKeyImage(this);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-  
-  merge(keyImage) {
-    assert(keyImage instanceof MoneroKeyImage);
-    if (keyImage === this) return this;
-    this.setHex(GenUtils.reconcile(this.getHex(), keyImage.getHex()));
-    this.setSignature(GenUtils.reconcile(this.getSignature(), keyImage.getSignature()));
-    return this;
-  }
-  
-  toString(indent = 0) {
-    let str = "";
-    str += GenUtils.kvLine("Hex", this.getHex(), indent);
-    str += GenUtils.kvLine("Signature", this.getSignature(), indent);
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-module.exports = MoneroKeyImage;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroKeyImageSpentStatus.js.html b/docs/src_main_js_daemon_model_MoneroKeyImageSpentStatus.js.html deleted file mode 100644 index fb7b792f8..000000000 --- a/docs/src_main_js_daemon_model_MoneroKeyImageSpentStatus.js.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroKeyImageSpentStatus.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroKeyImageSpentStatus.js

- - - - - - -
-
-
/**
- * Enumerate key image spent statuses.
- * 
- * @hideconstructor
- */
-class MoneroKeyImageSpentStatus {}
-
-/**
- * Key image is not spent (value=0).
- */
-MoneroKeyImageSpentStatus.NOT_SPENT = 0;
-
-/**
- * Key image is confirmed (value=1).
- */
-MoneroKeyImageSpentStatus.CONFIRMED = 1;
-
-/**
- * Key image is in the pool (value=2).
- */
-MoneroKeyImageSpentStatus.TX_POOL = 2;
-
-module.exports = MoneroKeyImageSpentStatus;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroMinerTxSum.js.html b/docs/src_main_js_daemon_model_MoneroMinerTxSum.js.html deleted file mode 100644 index 2f006d544..000000000 --- a/docs/src_main_js_daemon_model_MoneroMinerTxSum.js.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroMinerTxSum.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroMinerTxSum.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Model for the summation of miner emissions and fees.
- */
-class MoneroMinerTxSum {
-  
-  constructor(state) {
-    state = Object.assign({}, state);
-    this.state = state;
-    
-    // deserialize BigIntegers
-    if (state.emissionSum !== undefined && !(state.emissionSum instanceof BigInteger)) state.emissionSum = BigInteger.parse(state.emissionSum);
-    if (state.feeSum !== undefined && !(state.feeSum instanceof BigInteger)) state.feeSum = BigInteger.parse(state.feeSum);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getEmissionSum()) json.emissionSum = this.getEmissionSum().toString();
-    if (this.getFeeSum()) json.feeSum = this.getFeeSum().toString();
-    return json;
-  }
-  
-  getEmissionSum() {
-    return this.state.emissionSum;
-  }
-  
-  setEmissionSum(emissionSum) {
-    this.state.emissionSum = emissionSum;
-    return this;
-  }
-  
-  getFeeSum() {
-    return this.state.feeSum;
-  }
-  
-  setFeeSum(feeSum) {
-    this.state.feeSum = feeSum;
-    return this;
-  }
-}
-
-module.exports = MoneroMinerTxSum;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroMiningStatus.js.html b/docs/src_main_js_daemon_model_MoneroMiningStatus.js.html deleted file mode 100644 index 3d48b27f3..000000000 --- a/docs/src_main_js_daemon_model_MoneroMiningStatus.js.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroMiningStatus.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroMiningStatus.js

- - - - - - -
-
-
/**
- * Models daemon mining status.
- */
-class MoneroMiningStatus {
-  
-  constructor(state) {
-    if (!state) state = {};
-    else if (state instanceof MoneroMiningStatus) state = state.toJson();
-    else if (typeof state === "object") state = Object.assign({}, state);
-    else throw new MoneroError("state must be a MoneroMiningStatus or JavaScript object");
-    this.state = state;
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-  
-  isActive() {
-    return this.state.isActive;
-  }
-  
-  setIsActive(isActive) {
-    this.state.isActive = isActive;
-    return this;
-  }
-  
-  getAddress() {
-    return this.state.address;
-  }
-  
-  setAddress(address) {
-    this.state.address = address;
-    return this;
-  }
-  
-  getSpeed() {
-    return this.state.speed;
-  }
-  
-  setSpeed(speed) {
-    this.state.speed = speed;
-    return this;
-  }
-  
-  getNumThreads() {
-    return this.state.numThreads;
-  }
-  
-  setNumThreads(numThreads) {
-    this.state.numThreads = numThreads;
-    return this;
-  }
-  
-  isBackground() {
-    return this.state.isBackground;
-  }
-  
-  setIsBackground(isBackground) {
-    this.state.isBackground = isBackground;
-    return this;
-  }
-}
-
-module.exports = MoneroMiningStatus;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroNetworkType.js.html b/docs/src_main_js_daemon_model_MoneroNetworkType.js.html deleted file mode 100644 index 35b5682d4..000000000 --- a/docs/src_main_js_daemon_model_MoneroNetworkType.js.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroNetworkType.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroNetworkType.js

- - - - - - -
-
-
const MoneroError = require("../../common/MoneroError");
-
-/**
- * Defines the Monero network types (mainnet, testnet, and stagenet).
- * 
- * @hideconstructor
- */
-class MoneroNetworkType {
-  
-  /**
-   * Validates the given network type.
-   * 
-   * @param {int} networkType - the network type to validate as a numeric
-   */
-  static validate(networkType) {
-    if (networkType !== 0 && networkType !== 1 && networkType !== 2) throw new MoneroError("Network type is invalid: " + networkType);
-  }
-  
-  /**
-   * Indicates if the given network type is valid or not.
-   * 
-   * @param {int} networkType - the network type to validate as a numeric
-   * @return {boolean} true if the network type is valid, false otherwise
-   */
-  static isValid(networkType) {
-    return networkType === 0 || networkType === 1 || networkType === 2;
-  }
-  
-  /**
-   * Parse the given string as a network type.
-   * 
-   * @param {string} networkTypeStr - "mainnet", "testnet", or "stagenet" (case insensitive)
-   * @return {int} the network type as a numeric
-   */
-  static parse(networkTypeStr) {
-    let str = ("" + networkTypeStr).toLowerCase();
-    switch (str) {
-      case "mainnet": return MoneroNetworkType.MAINNET;
-      case "testnet": return MoneroNetworkType.TESTNET;
-      case "stagenet": return MoneroNetworkType.STAGENET;
-      default: throw new MoneroError("Invalid network type to parse: '" + networkTypeStr + "'");
-    }
-  }
-  
-  /**
-   * Get the network type in human-readable form.
-   *
-   * @return {string} the network type in human-readable form
-   */
-  static toString(networkType) {
-    if (networkType === 0) return "mainnet";
-    if (networkType === 1) return "testnet";
-    if (networkType === 2) return "stagenet";
-    throw new MoneroError("Invalid network type: " + networkType);
-  }
-}
-
-/**
- * Mainnet (value=0).
- */
-MoneroNetworkType.MAINNET = 0;
-
-/**
- * Testnet (value=1).
- */
-MoneroNetworkType.TESTNET = 1;
-
-/**
- * Stagnet (value=2).
- */
-MoneroNetworkType.STAGENET = 2;
-
-module.exports = MoneroNetworkType;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroOutput.js.html b/docs/src_main_js_daemon_model_MoneroOutput.js.html deleted file mode 100644 index 12a2d6f4e..000000000 --- a/docs/src_main_js_daemon_model_MoneroOutput.js.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroOutput.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroOutput.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../../common/biginteger").BigInteger;
-const GenUtils = require("../../common/GenUtils");
-const MoneroKeyImage = require("./MoneroKeyImage");
-
-/**
- * Models a Monero transaction output.
- * 
- * @class
- */
-class MoneroOutput {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroOutput|object} state is existing state to initialize from (optional)
-   */
-  constructor(state) {
-    
-    // initialize internal state
-    if (!state) state = {};
-    else if (state instanceof MoneroOutput) state = state.toJson();
-    else if (typeof state === "object") state = Object.assign({}, state);
-    else throw new MoneroError("state must be a MoneroOutput or JavaScript object");
-    this.state = state;
-    
-    // deserialize fields if necessary
-    if (state.amount !== undefined && !(state.amount instanceof BigInteger)) state.amount = BigInteger.parse(state.amount);
-    if (state.keyImage && !(state.keyImage instanceof MoneroKeyImage)) state.keyImage = new MoneroKeyImage(state.keyImage);
-  }
-  
-  getTx() {
-    return this.state.tx;
-  }
-  
-  setTx(tx) {
-    this.state.tx = tx;
-    return this;
-  }
-  
-  getKeyImage() {
-    return this.state.keyImage;
-  }
-
-  setKeyImage(keyImage) {
-    assert(keyImage === undefined || keyImage instanceof MoneroKeyImage);
-    this.state.keyImage = keyImage;
-    return this;
-  }
-  
-  getAmount() {
-    return this.state.amount;
-  }
-
-  setAmount(amount) {
-    this.state.amount = amount;
-    return this;
-  }
-  
-  getIndex() {
-    return this.state.index;
-  }
-  
-  setIndex(index) {
-    this.state.index = index;
-    return this;
-  }
-  
-  getRingOutputIndices() {
-    return this.state.ringOutputIndices;
-  }
-  
-  setRingOutputIndices(ringOutputIndices) {
-    this.state.ringOutputIndices = ringOutputIndices;
-    return this;
-  }
-  
-  getStealthPublicKey() {
-    return this.state.stealthPublicKey;
-  }
-  
-  setStealthPublicKey(stealthPublicKey) {
-    this.state.stealthPublicKey = stealthPublicKey;
-    return this;
-  }
-  
-  copy() {
-    return new MoneroOutput(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getAmount()) json.amount = this.getAmount() ? this.getAmount().toString() : undefined;
-    if (this.getKeyImage()) json.keyImage = this.getKeyImage() ? this.getKeyImage().toJson() : undefined;
-    delete json.tx;
-    return json;
-  }
-  
-  merge(output) {
-    assert(output instanceof MoneroOutput);
-    if (this === output) return this;
-    
-    // merge txs if they're different which comes back to merging outputs
-    if (this.getTx() !== output.getTx()) this.getTx().merge(output.getTx());
-    
-    // otherwise merge output fields
-    else {
-      if (this.getKeyImage() === undefined) this.setKeyImage(output.getKeyImage());
-      else if (output.getKeyImage() !== undefined) this.getKeyImage().merge(output.getKeyImage());
-      this.setAmount(GenUtils.reconcile(this.getAmount(), output.getAmount()));
-      this.setIndex(GenUtils.reconcile(this.getIndex(), output.getIndex()));
-    }
-
-    return this;
-  }
-  
-  toString(indent = 0) {
-    let str = "";
-    if (this.getKeyImage()) {
-      str += GenUtils.kvLine("Key image", "", indent);
-      str += this.getKeyImage().toString(indent + 1) + "\n";
-    }
-    str += GenUtils.kvLine("Amount", this.getAmount(), indent);
-    str += GenUtils.kvLine("Index", this.getIndex(), indent);
-    str += GenUtils.kvLine("Ring output indices", this.getRingOutputIndices(), indent);
-    str += GenUtils.kvLine("Stealth public key", this.getStealthPublicKey(), indent);
-    return str === "" ? str : str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-module.exports = MoneroOutput;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroOutputHistogramEntry.js.html b/docs/src_main_js_daemon_model_MoneroOutputHistogramEntry.js.html deleted file mode 100644 index 49124cb7a..000000000 --- a/docs/src_main_js_daemon_model_MoneroOutputHistogramEntry.js.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroOutputHistogramEntry.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroOutputHistogramEntry.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Entry in a Monero output histogram (see get_output_histogram of Daemon RPC documentation).
- */
-class MoneroOutputHistogramEntry {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-    if (this.state.amount !== undefined && !(this.state.amount instanceof BigInteger)) this.state.amount = BigInteger.parse(this.state.amount);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.amount) json.amount = json.amount.toString();
-    return json;
-  }
-  
-  getAmount() {
-    return this.state.amount;
-  }
-  
-  setAmount(amount) {
-    this.state.amount = amount;
-    return this;
-  }
-
-  getNumInstances() {
-    return this.state.numInstances;
-  }
-
-  setNumInstances(numInstances) {
-    this.state.numInstances = numInstances;
-    return this;
-  }
-
-  getNumUnlockedInstances() {
-    return this.state.numUnlockedInstances;
-  }
-
-  setNumUnlockedInstances(numUnlockedInstances) {
-    this.state.numUnlockedInstances = numUnlockedInstances;
-    return this;
-  }
-
-  getNumRecentInstances() {
-    return this.state.numRecentInstances;
-  }
-
-  setNumRecentInstances(numRecentInstances) {
-    this.state.numRecentInstances = numRecentInstances;
-    return this;
-  }
-}
-
-module.exports = MoneroOutputHistogramEntry;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroPeer.js.html b/docs/src_main_js_daemon_model_MoneroPeer.js.html deleted file mode 100644 index b990d99b1..000000000 --- a/docs/src_main_js_daemon_model_MoneroPeer.js.html +++ /dev/null @@ -1,310 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroPeer.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroPeer.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Models a peer to the daemon.
- */
-class MoneroPeer {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-    if (this.state.rpcCreditsPerHash !== undefined && !(this.state.rpcCreditsPerHash instanceof BigInteger)) this.state.rpcCreditsPerHash = BigInteger.parse(this.state.rpcCreditsPerHash);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.rpcCreditsPerHash) json.rpcCreditsPerHash = json.rpcCreditsPerHash.toString();
-    return json;
-  }
-  
-  getId() {
-    return this.state.id;
-  }
-
-  setId(id) {
-    this.state.id = id;
-    return this;
-  }
-
-  getAddress() {
-    return this.state.address;
-  }
-
-  setAddress(address) {
-    this.state.address = address;
-    return this;
-  }
-
-  getHost() {
-    return this.state.host;
-  }
-
-  setHost(host) {
-    this.state.host = host;
-    return this;
-  }
-
-  getPort() {
-    return this.state.port;
-  }
-
-  setPort(port) {
-    this.state.port = port;
-    return this;
-  }
-  
-  /**
-   * Indicates if the peer was online when last checked (aka "white listed" as
-   * opposed to "gray listed").
-   * 
-   * @return {boolean} true if peer was online when last checked, false otherwise
-   */
-  isOnline() {
-    return this.state.isOnline;
-  }
-  
-  setIsOnline(isOnline) {
-    this.state.isOnline = isOnline;
-    return this;
-  }
-  
-  getLastSeenTimestamp() {
-    return this.state.lastSeenTimestamp;
-  }
-  
-  setLastSeenTimestamp(lastSeenTimestamp) {
-    this.state.lastSeenTimestamp = lastSeenTimestamp;
-    return this;
-  }
-  
-  getPruningSeed() {
-    return this.state.pruningSeed;
-  }
-  
-  setPruningSeed(pruningSeed) {
-    this.state.pruningSeed = pruningSeed;
-    return this;
-  }
-  
-  getRpcPort() {
-    return this.state.rpcPort;
-  }
-
-  setRpcPort(rpcPort) {
-    this.state.rpcPort = rpcPort;
-    return this;
-  }
-  
-  getRpcCreditsPerHash() {
-    return this.state.rpcCreditsPerHash;
-  }
-  
-  setRpcCreditsPerHash(rpcCreditsPerHash) {
-    this.state.rpcCreditsPerHash = rpcCreditsPerHash;
-    return this;
-  }
-  
-    getId() {
-    return this.state.id;
-  }
-
-  setId(id) {
-    this.state.id = id;
-    return this;
-  }
-
-  getAvgDownload() {
-    return this.state.avgDownload;
-  }
-
-  setAvgDownload(avgDownload) {
-    this.state.avgDownload = avgDownload;
-    return this;
-  }
-
-  getAvgUpload() {
-    return this.state.avgUpload;
-  }
-
-  setAvgUpload(avgUpload) {
-    this.state.avgUpload = avgUpload;
-    return this;
-  }
-
-  getCurrentDownload() {
-    return this.state.currentDownload;
-  }
-
-  setCurrentDownload(currentDownload) {
-    this.state.currentDownload = currentDownload;
-    return this;
-  }
-
-  getCurrentUpload() {
-    return this.state.currentUpload;
-  }
-
-  setCurrentUpload(currentUpload) {
-    this.state.currentUpload = currentUpload;
-    return this;
-  }
-
-  getHeight() {
-    return this.state.height;
-  }
-
-  setHeight(height) {
-    this.state.height = height;
-    return this;
-  }
-
-  isIncoming() {
-    return this.state.isIncoming;
-  }
-
-  setIsIncoming(isIncoming) {
-    this.state.isIncoming = isIncoming;
-    return this;
-  }
-
-  getLiveTime() {
-    return this.state.liveTime;
-  }
-
-  setLiveTime(liveTime) {
-    this.state.liveTime = liveTime;
-    return this;
-  }
-
-  isLocalIp() {
-    return this.state.isLocalIp;
-  }
-
-  setIsLocalIp(isLocalIp) {
-    this.state.isLocalIp = isLocalIp;
-    return this;
-  }
-
-  isLocalHost() {
-    return this.state.isLocalHost;
-  }
-
-  setIsLocalHost(isLocalHost) {
-    this.state.isLocalHost = isLocalHost;
-    return this;
-  }
-
-  getNumReceives() {
-    return this.state.numReceives;
-  }
-
-  setNumReceives(numReceives) {
-    this.state.numReceives = numReceives;
-    return this;
-  }
-
-  getNumSends() {
-    return this.state.numSends;
-  }
-
-  setNumSends(numSends) {
-    this.state.numSends = numSends;
-    return this;
-  }
-
-  getReceiveIdleTime() {
-    return this.state.receiveIdleTime;
-  }
-
-  setReceiveIdleTime(receiveIdleTime) {
-    this.state.receiveIdleTime = receiveIdleTime;
-    return this;
-  }
-
-  getSendIdleTime() {
-    return this.state.sendIdleTime;
-  }
-
-  setSendIdleTime(sendIdleTime) {
-    this.state.sendIdleTime = sendIdleTime;
-    return this;
-  }
-
-  getState() {
-    return this.state.state;
-  }
-
-  setState(state) {
-    this.state.state = state;
-    return this;
-  }
-
-  getNumSupportFlags() {
-    return this.state.numSupportFlags;
-  }
-
-  setNumSupportFlags(numSupportFlags) {
-    this.state.numSupportFlags = numSupportFlags;
-    return this;
-  }
-  
-  getType() {
-    return this.state.type;
-  }
-  
-  setType(type) {
-    this.state.type = type;
-    return this;
-  }
-}
-
-module.exports = MoneroPeer;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroPruneResult.js.html b/docs/src_main_js_daemon_model_MoneroPruneResult.js.html deleted file mode 100644 index 5c4d0dedc..000000000 --- a/docs/src_main_js_daemon_model_MoneroPruneResult.js.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroPruneResult.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroPruneResult.js

- - - - - - -
-
-
/**
- * Result of pruning the blockchain.
- */
-class MoneroPruneResult {
-  
-  constructor(state) {
-    state = Object.assign({}, state);
-    this.state = state;
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.isPruned()) json.isPruned = this.isPruned();
-    if (this.getPruningSeed()) json.pruningSeed = this.getPruningSeed();
-    return json;
-  }
-  
-  isPruned() {
-    return this.state.isPruned;
-  }
-  
-  setIsPruned(isPruned) {
-    this.state.isPruned = isPruned;
-    return this;
-  }
-  
-  getPruningSeed() {
-    return this.state.pruningSeed;
-  }
-  
-  setPruningSeed(pruningSeed) {
-    this.state.pruningSeed = pruningSeed;
-    return this;
-  }
-}
-
-module.exports = MoneroPruneResult;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroSubmitTxResult.js.html b/docs/src_main_js_daemon_model_MoneroSubmitTxResult.js.html deleted file mode 100644 index 1cc8bd8b6..000000000 --- a/docs/src_main_js_daemon_model_MoneroSubmitTxResult.js.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroSubmitTxResult.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroSubmitTxResult.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Models the result from submitting a tx to a daemon.
- */
-class MoneroSubmitTxResult {
-  
-  constructor(state) {
-    state = Object.assign({}, state);
-    this.state = state;
-    
-    // deserialize BigIntegers
-    if (state.credits !== undefined && !(state.credits instanceof BigInteger)) state.credits = BigInteger.parse(state.credits);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.credits) json.credits = json.credits.toString();
-    return json;
-  }
-  
-  isGood() {
-    return this.state.isGood;
-  }
-  
-  setIsGood(isGood) {
-    this.state.isGood = isGood;
-    return this;
-  }
-  
-  isRelayed() {
-    return this.state.isRelayed;
-  }
-  
-  setIsRelayed(isRelayed) {
-    this.state.isRelayed = isRelayed;
-    return this;
-  }
-  
-  isDoubleSpendSeen() {
-    return this.state.isDoubleSpendSeen;
-  }
-  
-  setIsDoubleSpend(isDoubleSpendSeen) {
-    this.state.isDoubleSpendSeen = isDoubleSpendSeen
-    return this;
-  }
-  
-  isFeeTooLow() {
-    return this.state.isFeeTooLow;
-  }
-  
-  setIsFeeTooLow(isFeeTooLow) {
-    this.state.isFeeTooLow = isFeeTooLow;
-    return this;
-  }
-  
-  isMixinTooLow() {
-    return this.state.isMixinTooLow;
-  }
-  
-  setIsMixinTooLow(isMixinTooLow) {
-    this.state.isMixinTooLow = isMixinTooLow;
-    return this;
-  }
-  
-  hasInvalidInput() {
-    return this.state.hasInvalidInput;
-  }
-  
-  setHasInvalidInput(hasInvalidInput) {
-    this.state.hasInvalidInput = hasInvalidInput;
-    return this;
-  }
-  
-  hasInvalidOutput() {
-    return this.state.hasInvalidOutput;
-  }
-  
-  setHasInvalidOutput(hasInvalidOutput) {
-    this.state.hasInvalidOutput = hasInvalidOutput;
-    return this;
-  }
-  
-  hasTooFewOutputs() {
-    return this.state.hasTooFewOutputs;
-  }
-  
-  setHasTooFewOutputs(hasTooFewOutputs) {
-    this.state.hasTooFewOutputs = hasTooFewOutputs;
-    return this;
-  }
-  
-  isOverspend() {
-    return this.state.isOverspend;
-  }
-  
-  setIsOverspend(isOverspend) {
-    this.state.isOverspend = isOverspend;
-    return this;
-  }
-  
-  getReason() {
-    return this.state.reason;
-  }
-  
-  setReason(reason) {
-    this.state.reason = reason;
-    return this;
-  }
-  
-  isTooBig() {
-    return this.state.isTooBig;
-  }
-  
-  setIsTooBig(isTooBig) {
-    this.state.isTooBig = isTooBig;
-    return this;
-  }
-  
-  getSanityCheckFailed() {
-    return this.state.sanityCheckFailed;
-  }
-  
-  setSanityCheckFailed(sanityCheckFailed) {
-    this.state.sanityCheckFailed = sanityCheckFailed;
-    return this;
-  }
-  
-  getCredits() {
-    return this.state.credits;
-  }
-  
-  setCredits(credits) {
-    this.state.credits = credits;
-    return this;
-  }
-  
-  getTopBlockHash() {
-    return this.state.topBlockHash;
-  }
-  
-  setTopBlockHash(topBlockHash) {
-    this.state.topBlockHash = topBlockHash;
-    return this;
-  }
-
-  isTxExtraTooBig() {
-    return this.state.isTxExtraTooBig;
-  }
-  
-  setIsTxExtraTooBig(isTxExtraTooBig) {
-    this.state.isTxExtraTooBig = isTxExtraTooBig;
-    return this;
-  }
-}
-
-module.exports = MoneroSubmitTxResult;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroTx.js.html b/docs/src_main_js_daemon_model_MoneroTx.js.html deleted file mode 100644 index b6adb6331..000000000 --- a/docs/src_main_js_daemon_model_MoneroTx.js.html +++ /dev/null @@ -1,656 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroTx.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroTx.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../../common/biginteger").BigInteger;
-const GenUtils = require("../../common/GenUtils");
-const MoneroOutput = require("./MoneroOutput");
-
-/**
- * Represents a transaction on the Monero network.
- * 
- * @class
- */
-class MoneroTx {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroTx|object} state is existing state to initialize from (optional)
-   */
-  constructor(state) {
-    
-    // initialize internal state
-    if (!state) state = {};
-    else if (state instanceof MoneroTx) state = state.toJson();
-    else if (typeof state === "object") state = Object.assign({}, state);
-    else throw new MoneroError("state must be a MoneroTx or JavaScript object");
-    this.state = state;
-    
-    // deserialize BigIntegers
-    if (state.fee !== undefined && !(state.fee instanceof BigInteger)) state.fee = BigInteger.parse(state.fee);
-    if (state.unlockTime !== undefined && !(state.unlockTime instanceof BigInteger)) state.unlockTime = BigInteger.parse(state.unlockTime);
-    
-    // deserialize inputs
-    if (state.inputs) {
-      for (let i = 0; i < state.inputs.length; i++) {
-        if (!(state.inputs[i] instanceof MoneroOutput)) {
-          state.inputs[i] = new MoneroOutput(Object.assign(state.inputs[i], {tx: this}));
-        }
-      }
-    }
-    
-    // deserialize outputs
-    if (state.outputs) {
-      for (let i = 0; i < state.outputs.length; i++) {
-        if (!(state.outputs[i] instanceof MoneroOutput)) {
-          state.outputs[i] = new MoneroOutput(Object.assign(state.outputs[i], {tx: this}));
-        }
-      }
-    }
-  }
-  
-  getBlock() {
-    return this.state.block;
-  }
-  
-  setBlock(block) {
-    this.state.block = block;
-    return this;
-  }
-  
-  getHeight() {
-    return this.getBlock() === undefined ? undefined : this.getBlock().getHeight();
-  }
-  
-  getHash() {
-    return this.state.hash;
-  }
-  
-  setHash(hash) {
-    this.state.hash = hash;
-    return this;
-  }
-  
-  getVersion() {
-    return this.state.version;
-  }
-  
-  setVersion(version) {
-    this.state.version = version;
-    return this;
-  }
-  
-  isMinerTx() {
-    return this.state.isMinerTx;
-  }
-  
-  setIsMinerTx(miner) {
-    this.state.isMinerTx = miner;
-    return this;
-  }
-  
-  getPaymentId() {
-    return this.state.paymentId;
-  }
-  
-  setPaymentId(paymentId) {
-    this.state.paymentId = paymentId;
-    return this;
-  }
-  
-  getFee() {
-    return this.state.fee;
-  }
-  
-  setFee(fee) {
-    this.state.fee = fee;
-    return this;
-  }
-  
-  getRingSize() {
-    return this.state.ringSize;
-  }
-  
-  setRingSize(ringSize) {
-    this.state.ringSize = ringSize;
-    return this;
-  }
-  
-  getRelay() {
-    return this.state.relay;
-  }
-  
-  setRelay(relay) {
-    this.state.relay = relay;
-    return this;
-  }
-  
-  isRelayed() {
-    return this.state.isRelayed;
-  }
-  
-  setIsRelayed(isRelayed) {
-    this.state.isRelayed = isRelayed;
-    return this;
-  }
-  
-  isConfirmed() {
-    return this.state.isConfirmed;
-  }
-  
-  setIsConfirmed(isConfirmed) {
-    this.state.isConfirmed = isConfirmed;
-    return this;
-  }
-  
-  inTxPool() {
-    return this.state.inTxPool;
-  }
-  
-  setInTxPool(inTxPool) {
-    this.state.inTxPool = inTxPool;
-    return this;
-  }
-  
-  getNumConfirmations() {
-    return this.state.numConfirmations;
-  }
-  
-  setNumConfirmations(numConfirmations) {
-    this.state.numConfirmations = numConfirmations;
-    return this;
-  }
-  
-  /**
-   * Get the minimum height or timestamp for the transactions to unlock.
-   * 
-   * @return {BigInteger} the minimum height or timestamp for the transactin to unlock
-   */
-  getUnlockTime() {
-    return this.state.unlockTime;
-  }
-  
-  setUnlockTime(unlockTime) {
-    if (unlockTime !== undefined) {
-      if (typeof unlockTime === "number") unlockTime = "" + unlockTime;
-      if (!(unlockTime instanceof BigInteger)) {
-        try { unlockTime = BigInteger.parse(unlockTime); }
-        catch (err) { throw new MoneroError("Invalid unlock time: " + unlockTime); }
-      }
-    }
-    this.state.unlockTime = unlockTime;
-    return this;
-  }
-  
-  getLastRelayedTimestamp() {
-    return this.state.lastRelayedTimestamp;
-  }
-  
-  setLastRelayedTimestamp(lastRelayedTimestamp) {
-    this.state.lastRelayedTimestamp = lastRelayedTimestamp;
-    return this;
-  }
-  
-  getReceivedTimestamp() {
-    return this.state.receivedTimestamp;
-  }
-  
-  setReceivedTimestamp(receivedTimestamp) {
-    this.state.receivedTimestamp = receivedTimestamp;
-    return this;
-  }
-  
-  isDoubleSpendSeen() {
-    return this.state.isDoubleSpendSeen;
-  }
-  
-  setIsDoubleSpend(isDoubleSpendSeen) {
-    this.state.isDoubleSpendSeen = isDoubleSpendSeen;
-    return this;
-  }
-  
-  getKey() {
-    return this.state.key;
-  }
-  
-  setKey(key) {
-    this.state.key = key;
-    return this;
-  }
-  
-  /**
-   * Get full transaction hex.  Full hex = pruned hex + prunable hex.
-   * 
-   * @return {string} is full transaction hex
-   */
-  getFullHex() {
-    return this.state.fullHex;
-  }
-  
-  setFullHex(fullHex) {
-    this.state.fullHex = fullHex;
-    return this;
-  }
-  
-  /**
-   * Get pruned transaction hex.  Full hex = pruned hex + prunable hex.
-   * 
-   * @return {string} is pruned transaction hex
-   */
-  getPrunedHex() {
-    return this.state.prunedHex;
-  }
-  
-  setPrunedHex(prunedHex) {
-    this.state.prunedHex = prunedHex;
-    return this;
-  }
-  
-  /**
-   * Get prunable transaction hex which is hex that is removed from a pruned
-   * transaction. Full hex = pruned hex + prunable hex.
-   * 
-   * @return {string} is the prunable transaction hex
-   */
-  getPrunableHex() {
-    return this.state.prunableHex;
-  }
-  
-  setPrunableHex(prunableHex) {
-    this.state.prunableHex = prunableHex;
-    return this;
-  }
-  
-  getPrunableHash() {
-    return this.state.prunableHash;
-  }
-  
-  setPrunableHash(prunableHash) {
-    this.state.prunableHash = prunableHash;
-    return this;
-  }
-  
-  getSize() {
-    return this.state.size;
-  }
-  
-  setSize(size) {
-    this.state.size = size;
-    return this;
-  }
-  
-  getWeight() {
-    return this.state.weight;
-  }
-  
-  setWeight(weight) {
-    this.state.weight = weight;
-    return this;
-  }
-  
-  getInputs() {
-    return this.state.inputs;
-  }
-  
-  setInputs(inputs) {
-    this.state.inputs = inputs;
-    return this;
-  }
-  
-  getOutputs() {
-    return this.state.outputs;
-  }
-  
-  setOutputs(outputs) {
-    this.state.outputs = outputs;
-    return this;
-  }
-  
-  getOutputIndices() {
-    return this.state.outputIndices;
-  }
-  
-  setOutputIndices(outputIndices) {
-    this.state.outputIndices = outputIndices;
-    return this;
-  }
-  
-  getMetadata() {
-    return this.state.metadata;
-  }
-  
-  setMetadata(metadata) {
-    this.state.metadata = metadata;
-    return this;
-  }
-  
-  getExtra() {
-    return this.state.extra;
-  }
-  
-  setExtra(extra) {
-    this.state.extra = extra;
-    return this;
-  }
-
-  getRctSignatures() {
-    return this.state.rctSignatures;
-  }
-  
-  setRctSignatures(rctSignatures) {
-    this.state.rctSignatures = rctSignatures;
-    return this;
-  }
-  
-  getRctSigPrunable() {
-    return this.state.rctSigPrunable;
-  }
-  
-  setRctSigPrunable(rctSigPrunable) {
-    this.state.rctSigPrunable = rctSigPrunable;
-    return this;
-  }
-  
-  isKeptByBlock() {
-    return  this.state.isKeptByBlock;
-  }
-  
-  setIsKeptByBlock(isKeptByBlock) {
-    this.state.isKeptByBlock = isKeptByBlock;
-    return this;
-  }
-  
-  isFailed() {
-    return this.state.isFailed;
-  }
-  
-  setIsFailed(isFailed) {
-    this.state.isFailed = isFailed;
-    return this;
-  }
-  
-  getLastFailedHeight() {
-    return this.state.lastFailedHeight;
-  }
-  
-  setLastFailedHeight(lastFailedHeight) {
-    this.state.lastFailedHeight = lastFailedHeight;
-    return this;
-  }
-  
-  getLastFailedHash() {
-    return this.state.lastFailedHash;
-  }
-  
-  setLastFailedHash(lastFailedHash) {
-    this.state.lastFailedHash = lastFailedHash;
-    return this;
-  }
-  
-  getMaxUsedBlockHeight() {
-    return this.state.maxUsedBlockHeight;
-  }
-  
-  setMaxUsedBlockHeight(maxUsedBlockHeight) {
-    this.state.maxUsedBlockHeight = maxUsedBlockHeight;
-    return this;
-  }
-  
-  getMaxUsedBlockHash() {
-    return this.state.maxUsedBlockHash;
-  }
-  
-  setMaxUsedBlockHash(maxUsedBlockHash) {
-    this.state.maxUsedBlockHash = maxUsedBlockHash;
-    return this;
-  }
-  
-  getSignatures() {
-    return this.state.signatures;
-  }
-  
-  setSignatures(signatures) {
-    this.state.signatures = signatures;
-    return this;
-  }
-  
-  copy() {
-    return new MoneroTx(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getFee()) json.fee = this.getFee().toString();
-    if (this.getUnlockTime()) json.unlockTime = this.getUnlockTime().toString();
-    if (this.getInputs()) {
-      json.inputs = [];
-      for (let input of this.getInputs()) json.inputs.push(input.toJson());
-    }
-    if (this.getOutputs()) {
-      json.outputs = [];
-      for (let output of this.getOutputs()) json.outputs.push(output.toJson());
-    }
-    if (this.getExtra()) json.extra = this.getExtra().slice();
-    delete json.block;  // do not serialize parent block
-    return json;
-  }
-  
-  /**
-   * Updates this transaction by merging the latest information from the given
-   * transaction.
-   * 
-   * @param tx is the transaction to update this transaction with
-   * @return {MoneroTx} this for method chaining
-   */
-  merge(tx) {
-    assert(tx instanceof MoneroTx);
-    if (this === tx) return this;
-    
-    // merge blocks if they're different
-    if (this.getBlock() !== tx.getBlock()) {
-      if (this.getBlock() === undefined) {
-        this.setBlock(tx.getBlock());
-        this.getBlock().getTxs[this.getBlock().getTxs().indexOf(tx)] = this; // update block to point to this tx
-      } else if (tx.getBlock() !== undefined) {
-        this.getBlock().merge(tx.getBlock()); // comes back to merging txs
-        return this;
-      }
-    }
-    
-    // otherwise merge tx fields
-    this.setHash(GenUtils.reconcile(this.getHash(), tx.getHash()));
-    this.setVersion(GenUtils.reconcile(this.getVersion(), tx.getVersion()));
-    this.setPaymentId(GenUtils.reconcile(this.getPaymentId(), tx.getPaymentId()));
-    this.setFee(GenUtils.reconcile(this.getFee(), tx.getFee()));
-    this.setRingSize(GenUtils.reconcile(this.getRingSize(), tx.getRingSize()));
-    this.setIsConfirmed(GenUtils.reconcile(this.isConfirmed(), tx.isConfirmed(), {resolveTrue: true})); // tx can become confirmed
-    this.setIsMinerTx(GenUtils.reconcile(this.isMinerTx(), tx.isMinerTx()));
-    this.setRelay(GenUtils.reconcile(this.getRelay(), tx.getRelay(), {resolveTrue: true}));       // tx can become relayed
-    this.setIsRelayed(GenUtils.reconcile(this.isRelayed(), tx.isRelayed(), {resolveTrue: true})); // tx can become relayed
-    this.setIsDoubleSpend(GenUtils.reconcile(this.isDoubleSpendSeen(), tx.isDoubleSpendSeen(), {resolveTrue: true})); // double spend can become seen
-    this.setKey(GenUtils.reconcile(this.getKey(), tx.getKey()));
-    this.setFullHex(GenUtils.reconcile(this.getFullHex(), tx.getFullHex()));
-    this.setPrunedHex(GenUtils.reconcile(this.getPrunedHex(), tx.getPrunedHex()));
-    this.setPrunableHex(GenUtils.reconcile(this.getPrunableHex(), tx.getPrunableHex()));
-    this.setPrunableHash(GenUtils.reconcile(this.getPrunableHash(), tx.getPrunableHash()));
-    this.setSize(GenUtils.reconcile(this.getSize(), tx.getSize()));
-    this.setWeight(GenUtils.reconcile(this.getWeight(), tx.getWeight()));
-    this.setOutputIndices(GenUtils.reconcile(this.getOutputIndices(), tx.getOutputIndices()));
-    this.setMetadata(GenUtils.reconcile(this.getMetadata(), tx.getMetadata()));
-    this.setExtra(GenUtils.reconcile(this.getExtra(), tx.getExtra()));
-    this.setRctSignatures(GenUtils.reconcile(this.getRctSignatures(), tx.getRctSignatures()));
-    this.setRctSigPrunable(GenUtils.reconcile(this.getRctSigPrunable(), tx.getRctSigPrunable()));
-    this.setIsKeptByBlock(GenUtils.reconcile(this.isKeptByBlock(), tx.isKeptByBlock()));
-    this.setIsFailed(GenUtils.reconcile(this.isFailed(), tx.isFailed(), {resolveTrue: true}));
-    this.setLastFailedHeight(GenUtils.reconcile(this.getLastFailedHeight(), tx.getLastFailedHeight()));
-    this.setLastFailedHash(GenUtils.reconcile(this.getLastFailedHash(), tx.getLastFailedHash()));
-    this.setMaxUsedBlockHeight(GenUtils.reconcile(this.getMaxUsedBlockHeight(), tx.getMaxUsedBlockHeight()));
-    this.setMaxUsedBlockHash(GenUtils.reconcile(this.getMaxUsedBlockHash(), tx.getMaxUsedBlockHash()));
-    this.setSignatures(GenUtils.reconcile(this.getSignatures(), tx.getSignatures()));
-    this.setUnlockTime(GenUtils.reconcile(this.getUnlockTime(), tx.getUnlockTime()));
-    this.setNumConfirmations(GenUtils.reconcile(this.getNumConfirmations(), tx.getNumConfirmations(), {resolveMax: true})); // num confirmations can increase
-    
-    // merge inputs
-    if (tx.getInputs()) {
-      for (let merger of tx.getInputs()) {
-        let merged = false;
-        merger.setTx(this);
-        if (!this.getInputs()) this.setInputs([]);
-        for (let mergee of this.getInputs()) {
-          if (mergee.getKeyImage().getHex() === merger.getKeyImage().getHex()) {
-            mergee.merge(merger);
-            merged = true;
-            break;
-          }
-        }
-        if (!merged) this.getInputs().push(merger);
-      }
-    }
-    
-    // merge outputs
-    if (tx.getOutputs()) {
-      for (let output of tx.getOutputs()) output.setTx(this);
-      if (!this.getOutputs()) this.setOutputs(tx.getOutputs());
-      else {
-        
-        // merge outputs if key image or stealth public key present, otherwise append
-        for (let merger of tx.getOutputs()) {
-          let merged = false;
-          merger.setTx(this);
-          for (let mergee of this.getOutputs()) {
-            if ((merger.getKeyImage() && mergee.getKeyImage().getHex() === merger.getKeyImage().getHex()) ||
-                (merger.getStealthPublicKey() && mergee.getStealthPublicKey() === merger.getStealthPublicKey())) {
-             mergee.merge(merger);
-             merged = true;
-             break;
-            }
-          }
-          if (!merged) this.getOutputs().push(merger); // append output
-        }
-      }
-    }
-    
-    // handle unrelayed -> relayed -> confirmed
-    if (this.isConfirmed()) {
-      this.setInTxPool(false);
-      this.setReceivedTimestamp(undefined);
-      this.setLastRelayedTimestamp(undefined);
-    } else {
-      this.setInTxPool(GenUtils.reconcile(this.inTxPool(), tx.inTxPool(), {resolveTrue: true})); // unrelayed -> tx pool
-      this.setReceivedTimestamp(GenUtils.reconcile(this.getReceivedTimestamp(), tx.getReceivedTimestamp(), {resolveMax: false})); // take earliest receive time
-      this.setLastRelayedTimestamp(GenUtils.reconcile(this.getLastRelayedTimestamp(), tx.getLastRelayedTimestamp(), {resolveMax: true}));  // take latest relay time
-    }
-    
-    return this;  // for chaining
-  }
-  
-  toString(indent = 0) {
-    let str = "";
-    str += GenUtils.getIndent(indent) + "=== TX ===\n";
-    str += GenUtils.kvLine("Tx hash", this.getHash(), indent);
-    str += GenUtils.kvLine("Height", this.getHeight(), indent);
-    str += GenUtils.kvLine("Version", this.getVersion(), indent);
-    str += GenUtils.kvLine("Is miner tx", this.isMinerTx(), indent);
-    str += GenUtils.kvLine("Payment ID", this.getPaymentId(), indent);
-    str += GenUtils.kvLine("Fee", this.getFee(), indent);
-    str += GenUtils.kvLine("Ring size", this.getRingSize(), indent);
-    str += GenUtils.kvLine("Relay", this.getRelay(), indent);
-    str += GenUtils.kvLine("Is relayed", this.isRelayed(), indent);
-    str += GenUtils.kvLine("Is confirmed", this.isConfirmed(), indent);
-    str += GenUtils.kvLine("In tx pool", this.inTxPool(), indent);
-    str += GenUtils.kvLine("Num confirmations", this.getNumConfirmations(), indent);
-    str += GenUtils.kvLine("Unlock time", this.getUnlockTime(), indent);
-    str += GenUtils.kvLine("Last relayed time", this.getLastRelayedTimestamp(), indent);
-    str += GenUtils.kvLine("Received time", this.getReceivedTimestamp(), indent);
-    str += GenUtils.kvLine("Is double spend", this.isDoubleSpendSeen(), indent);
-    str += GenUtils.kvLine("Key", this.getKey(), indent);
-    str += GenUtils.kvLine("Full hex", this.getFullHex(), indent);
-    str += GenUtils.kvLine("Pruned hex", this.getPrunedHex(), indent);
-    str += GenUtils.kvLine("Prunable hex", this.getPrunableHex(), indent);
-    str += GenUtils.kvLine("Prunable hash", this.getPrunableHash(), indent);
-    str += GenUtils.kvLine("Size", this.getSize(), indent);
-    str += GenUtils.kvLine("Weight", this.getWeight(), indent);
-    str += GenUtils.kvLine("Output indices", this.getOutputIndices(), indent);
-    str += GenUtils.kvLine("Metadata", this.getMetadata(), indent);
-    str += GenUtils.kvLine("Extra", this.getExtra(), indent);
-    str += GenUtils.kvLine("RCT signatures", this.getRctSignatures(), indent);
-    str += GenUtils.kvLine("RCT sig prunable", this.getRctSigPrunable(), indent);
-    str += GenUtils.kvLine("Kept by block", this.isKeptByBlock(), indent);
-    str += GenUtils.kvLine("Is failed", this.isFailed(), indent);
-    str += GenUtils.kvLine("Last failed height", this.getLastFailedHeight(), indent);
-    str += GenUtils.kvLine("Last failed hash", this.getLastFailedHash(), indent);
-    str += GenUtils.kvLine("Max used block height", this.getMaxUsedBlockHeight(), indent);
-    str += GenUtils.kvLine("Max used block hash", this.getMaxUsedBlockHash(), indent);
-    str += GenUtils.kvLine("Signatures", this.getSignatures(), indent);
-    if (this.getInputs()) {
-      str += GenUtils.kvLine("Inputs", "", indent);
-      for (let i = 0; i < this.getInputs().length; i++) {
-        str += GenUtils.kvLine(i + 1, "", indent + 1);
-        str += this.getInputs()[i].toString(indent + 2);
-        str += '\n'
-      }
-    }
-    if (this.getOutputs()) {
-      str += GenUtils.kvLine("Outputs", "", indent);
-      for (let i = 0; i < this.getOutputs().length; i++) {
-        str += GenUtils.kvLine(i + 1, "", indent + 1);
-        str += this.getOutputs()[i].toString(indent + 2);
-        str += '\n'
-      }
-    }
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-// default payment id
-MoneroTx.DEFAULT_PAYMENT_ID = "0000000000000000";
-
-module.exports = MoneroTx;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroTxPoolStats.js.html b/docs/src_main_js_daemon_model_MoneroTxPoolStats.js.html deleted file mode 100644 index 0686091ff..000000000 --- a/docs/src_main_js_daemon_model_MoneroTxPoolStats.js.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroTxPoolStats.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroTxPoolStats.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Models transaction pool statistics.
- */
-class MoneroTxPoolStats {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-    if (this.state.feeTotal !== undefined && !(this.state.feeTotal instanceof BigInteger)) this.state.feeTotal = BigInteger.parse(this.state.feeTotal);
-    if (this.state.histo !== undefined && !(this.state.histo instanceof Map)) this.state.histo = new Map(JSON.parse(this.state.histo));
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.feeTotal) json.feeTotal = json.feeTotal.toString();
-    if (json.histo) json.histo = JSON.stringify([...json.histo]); // convert map to array of key-value pairs then stringify
-    return json;
-  }
-  
-  getNumTxs() {
-    return this.state.numTxs;
-  }
-  
-  setNumTxs(numTxs) {
-    this.state.numTxs = numTxs;
-    return this;
-  }
-  
-  getNumNotRelayed() {
-    return this.state.numNotRelayed;
-  }
-  
-  setNumNotRelayed(numNotRelayed) {
-    this.state.numNotRelayed = numNotRelayed;
-    return this;
-  }
-  
-  getNumFailing() {
-    return this.state.numFailing;
-  }
-  
-  setNumFailing(numFailing) {
-    this.state.numFailing = numFailing;
-    return this;
-  }
-  
-  getNumDoubleSpends() {
-    return this.state.numDoubleSpends;
-  }
-  
-  setNumDoubleSpends(numDoubleSpends) {
-    this.state.numDoubleSpends = numDoubleSpends;
-    return this;
-  }
-  
-  getNum10m() {
-    return this.state.num10m;
-  }
-  
-  setNum10m(num10m) {
-    this.state.num10m = num10m;
-    return this;
-  }
-  
-  getFeeTotal() {
-    return this.state.feeTotal;
-  }
-  
-  setFeeTotal(feeTotal) {
-    this.state.feeTotal = feeTotal;
-    return this;
-  }
-  
-  getBytesMax() {
-    return this.state.bytesMax;
-  }
-  
-  setBytesMax(bytesMax) {
-    this.state.bytesMax = bytesMax;
-    return this;
-  }
-  
-  getBytesMed() {
-    return this.state.bytesMed;
-  }
-  
-  setBytesMed(bytesMed) {
-    this.state.bytesMed = bytesMed;
-    return this;
-  }
-  
-  getBytesMin() {
-    return this.state.bytesMin;
-  }
-  
-  setBytesMin(bytesMin) {
-    this.state.bytesMin = bytesMin;
-    return this;
-  }
-  
-  getBytesTotal() {
-    return this.state.bytesTotal;
-  }
-  
-  setBytesTotal(bytesTotal) {
-    this.state.bytesTotal = bytesTotal;
-    return this;
-  }
-  
-  // TODO: histo... what?
-  getHisto() {
-    return this.state.histo;
-  }
-  
-  setHisto(histo) {
-    this.state.histo = histo;
-    return this;
-  }
-  
-  getHisto98pc() {
-    return this.state.histo98pc;
-  }
-  
-  setHisto98pc(histo98pc) {
-    this.state.histo98pc = histo98pc;
-    return this;
-  }
-  
-  getOldestTimestamp() {
-    return this.state.oldestTimestamp;
-  }
-  
-  setOldestTimestamp(oldestTimestamp) {
-    this.state.oldestTimestamp = oldestTimestamp;
-    return this;
-  }
-}
-
-module.exports = MoneroTxPoolStats;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_daemon_model_MoneroVersion.js.html b/docs/src_main_js_daemon_model_MoneroVersion.js.html deleted file mode 100644 index 36813ee10..000000000 --- a/docs/src_main_js_daemon_model_MoneroVersion.js.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - JSDoc: Source: src/main/js/daemon/model/MoneroVersion.js - - - - - - - - - - -
- -

Source: src/main/js/daemon/model/MoneroVersion.js

- - - - - - -
-
-
/**
- * Models a Monero version.
- */
-class MoneroVersion {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param number is the version number
-   * @param isRelease indicates if this version is a release
-   */
-  constructor(number, isRelease) {
-    this.state = {};
-    this.state.number = number;
-    this.state.isRelease = isRelease;
-  }
-
-  getNumber() {
-    return this.state.number;
-  }
-
-  setNumber(number) {
-    this.state.number = number;
-    return this;
-  }
-
-  isRelease() {
-    return this.state.isRelease;
-  }
-
-  setIsRelease(isRelease) {
-    this.state.isRelease = isRelease;
-    return this;
-  }
-  
-  copy() {
-    return new MoneroKeyImage(this);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-}
-
-module.exports = MoneroVersion;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_MoneroWallet.js.html b/docs/src_main_js_wallet_MoneroWallet.js.html deleted file mode 100644 index da552e79d..000000000 --- a/docs/src_main_js_wallet_MoneroWallet.js.html +++ /dev/null @@ -1,1468 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/MoneroWallet.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/MoneroWallet.js

- - - - - - -
-
-
const assert = require("assert");
-const MoneroBlock = require("../daemon/model/MoneroBlock");
-const BigInteger = require("../common/biginteger").BigInteger;
-const MoneroConnectionManagerListener = require("../common/MoneroConnectionManagerListener")
-const MoneroError = require("../common/MoneroError");
-const MoneroOutputQuery = require("./model/MoneroOutputQuery");
-const MoneroTransferQuery = require("./model/MoneroTransferQuery");
-const MoneroTxConfig = require("./model/MoneroTxConfig");
-const MoneroTxQuery = require("./model/MoneroTxQuery");
-const MoneroTxSet = require("./model/MoneroTxSet");
-
-/**
- * Copyright (c) woodser
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/**
- * Monero wallet interface and default implementations.
- * 
- * @interface
- */
-class MoneroWallet {
-  
-  /**
-   * Register a listener to receive wallet notifications.
-   * 
-   * @param {MoneroWalletListener} listener - listener to receive wallet notifications
-   */
-  async addListener(listener) {
-    throw new Error("Not supported");
-  }
-  
-  /**
-   * Unregister a listener to receive wallet notifications.
-   * 
-   * @param {MoneroWalletListener} listener - listener to unregister
-   */
-  async removeListener(listener) {
-    throw new Error("Not supported");
-  }
-  
-  /**
-   * Get the listeners registered with the wallet.
-   * 
-   * @return {MoneroWalletListener[]} the registered listeners
-   */
-  getListeners() {
-    throw new Error("Not supported");
-  }
-  
-  /**
-   * Indicates if the wallet is view-only, meaning it does not have the private
-   * spend key and can therefore only observe incoming outputs.
-   * 
-   * @return {bool} true if the wallet is view-only, false otherwise
-   */
-  async isViewOnly() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Set the wallet's daemon connection.
-   * 
-   * @param {string|MoneroRpcConnection} uriOrConnection - daemon's URI or connection (defaults to offline)
-   * @param {string} username - username to authenticate with the daemon (optional)
-   * @param {string} password - password to authenticate with the daemon (optional)
-   */
-  async setDaemonConnection(uriOrConnection, username, password) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the wallet's daemon connection.
-   * 
-   * @return {MoneroRpcConnection} the wallet's daemon connection
-   */
-  async getDaemonConnection() {
-    throw new MoneroError("Not supported");
-  }
-
-  /**
-   * Set the wallet's daemon connection manager.
-   * 
-   * @param {MoneroConnectionManager} connectionManager manages connections to monerod
-   */
-  async setConnectionManager(connectionManager) {
-    if (this._connectionManager) this._connectionManager.removeListener(this._connectionManagerListener);
-    this._connectionManager = connectionManager;
-    if (!connectionManager) return;
-    let that = this;
-    if (!this._connectionManagerListener) this._connectionManagerListener = new class extends MoneroConnectionManagerListener {
-      async onConnectionChanged(connection) {
-        await that.setDaemonConnection(connection);
-      }
-    };
-    connectionManager.addListener(this._connectionManagerListener);
-    await this.setDaemonConnection(connectionManager.getConnection());
-  }
-
-  /**
-   * Get the wallet's daemon connection manager.
-   * 
-   * @return {MoneroConnectionManager} the wallet's daemon connection manager
-   */
-  getConnectionManager() {
-    return this._connectionManager;
-  }
-  
-  /**
-   * Indicates if the wallet is connected to daemon.
-   * 
-   * @return {boolean} true if the wallet is connected to a daemon, false otherwise
-   */
-  async isConnectedToDaemon() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Gets the version of the wallet.
-   * 
-   * @return {MoneroVersion} the version of the wallet
-   */
-  async getVersion() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the wallet's path.
-   * 
-   * @return {string} the path the wallet can be opened with
-   */
-  async getPath() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the wallet's mnemonic phrase or seed.
-   * 
-   * @return {string} the wallet's mnemonic phrase or seed.
-   */
-  async getSeed() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the language of the wallet's mnemonic phrase or seed.
-   * 
-   * @return {string} the language of the wallet's mnemonic phrase or seed.
-   */
-  async getSeedLanguage() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the wallet's private view key.
-   * 
-   * @return {string} the wallet's private view key
-   */
-  async getPrivateViewKey() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the wallet's private spend key.
-   * 
-   * @return {string} the wallet's private spend key
-   */
-  async getPrivateSpendKey() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the wallet's public view key.
-   * 
-   * @return {string} the wallet's public view key
-   */
-  async getPublicViewKey() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the wallet's public spend key.
-   * 
-   * @return {string} the wallet's public spend key
-   */
-  async getPublicSpendKey() {
-    throw new MoneroError("Not supported");
-  }
-    
-  /**
-   * Get the wallet's primary address.
-   * 
-   * @return {string} the wallet's primary address
-   */
-  async getPrimaryAddress() {
-    return await this.getAddress(0, 0);
-  }
-  
-  /**
-   * Get the address of a specific subaddress.
-   * 
-   * @param {int} accountIdx - the account index of the address's subaddress
-   * @param {int} subaddressIdx - the subaddress index within the account
-   * @return {string} the receive address of the specified subaddress
-   */
-  async getAddress(accountIdx, subaddressIdx) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the account and subaddress index of the given address.
-   * 
-   * @param {string} address - address to get the account and subaddress index from
-   * @return {MoneroSubaddress} the account and subaddress indices
-   */
-  async getAddressIndex(address) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get an integrated address based on the given standard address and payment
-   * ID. Uses the wallet's primary address if an address is not given.
-   * Generates a random payment ID if a payment ID is not given.
-   * 
-   * @param {string} standardAddress is the standard address to generate the integrated address from (wallet's primary address if undefined)
-   * @param {string} paymentId is the payment ID to generate an integrated address from (randomly generated if undefined)
-   * @return {MoneroIntegratedAddress} the integrated address
-   */
-  async getIntegratedAddress(standardAddress, paymentId) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Decode an integrated address to get its standard address and payment id.
-   * 
-   * @param {string} integratedAddress - integrated address to decode
-   * @return {MoneroIntegratedAddress} the decoded integrated address including standard address and payment id
-   */
-  async decodeIntegratedAddress(integratedAddress) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the block height that the wallet is synced to.
-   * 
-   * @return {int} the block height that the wallet is synced to
-   */
-  async getHeight() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the blockchain's height.
-   * 
-   * @return {int} the blockchain's height
-   */
-  async getDaemonHeight() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the blockchain's height by date as a conservative estimate for scanning.
-   * 
-   * @param {int} year - year of the height to get
-   * @param {int} month - month of the height to get as a number between 1 and 12
-   * @param {int} day - day of the height to get as a number between 1 and 31
-   * @return the blockchain's approximate height at the given date
-   */
-  async getHeightByDate(year, month, day) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Synchronize the wallet with the daemon as a one-time synchronous process.
-   * 
-   * @param {MoneroWalletListener|number} listenerOrStartHeight - listener xor start height (defaults to no sync listener, the last synced block)
-   * @param {number} startHeight - startHeight if not given in first arg (defaults to last synced block)
-   */
-  async sync(listenerOrStartHeight, startHeight) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Start background synchronizing with a maximum period between syncs.
-   * 
-   * @param {int} syncPeriodInMs - maximum period between syncs in milliseconds (default is wallet-specific)
-   */
-  async startSyncing(syncPeriodInMs) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Stop synchronizing the wallet with the daemon.
-   */
-  async stopSyncing() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Scan transactions by their hash/id.
-   * 
-   * @param {string[]} txHashes - tx hashes to scan
-   */
-  async scanTxs(txHashes) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * <p>Rescan the blockchain for spent outputs.</p>
-   * 
-   * <p>Note: this can only be called with a trusted daemon.</p>
-   * 
-   * <p>Example use case: peer multisig hex is import when connected to an untrusted daemon,
-   * so the wallet will not rescan spent outputs.  Then the wallet connects to a trusted
-   * daemon.  This method should be manually invoked to rescan outputs.</p>
-   */
-  async rescanSpent() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * <p>Rescan the blockchain from scratch, losing any information which cannot be recovered from
-   * the blockchain itself.</p>
-   * 
-   * <p>WARNING: This method discards local wallet data like destination addresses, tx secret keys,
-   * tx notes, etc.</p>
-   */
-  async rescanBlockchain() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the balance of the wallet, account, or subaddress.
-   * 
-   * @param {int} accountIdx - index of the account to get the balance of (default all accounts)
-   * @param {int} subaddressIdx - index of the subaddress to get the balance of (default all subaddresses)
-   * @return {BigInteger} the balance of the wallet, account, or subaddress
-   */
-  async getBalance(accountIdx, subaddressIdx) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the unlocked balance of the wallet, account, or subaddress.
-   * 
-   * @param {int} accountIdx - index of the account to get the unlocked balance of (optional)
-   * @param {int} subaddressIdx - index of the subaddress to get the unlocked balance of (optional)
-   * @return {BigInteger} the unlocked balance of the wallet, account, or subaddress
-   */
-  async getUnlockedBalance(accountIdx, subaddressIdx) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get the number of blocks until the next and last funds unlock.
-   * 
-   * @return {int[]} the number of blocks until the next and last funds unlock in elements 0 and 1, respectively, or undefined if no balance
-   */
-  async getNumBlocksToUnlock() {
-    
-    // get balances
-    let balance = await this.getBalance();
-    if (balance.compare(new BigInteger(0)) === 0) return [undefined, undefined]; // skip if no balance
-    let unlockedBalance = await this.getUnlockedBalance();
-    
-    // compute number of blocks until next funds available
-    let txs;
-    let height;
-    let numBlocksToNextUnlock = undefined;
-    if (unlockedBalance.compare(new BigInteger(0)) > 0) numBlocksToNextUnlock = 0;
-    else {
-      txs = await this.getTxs({isLocked: true}); // get locked txs
-      height = await this.getHeight(); // get most recent height
-      for (let tx of txs) {
-        let numBlocksToUnlock = Math.max((tx.isConfirmed() ? tx.getHeight() : height) + 10, tx.getUnlockTime()) - height;
-        numBlocksToNextUnlock = numBlocksToNextUnlock === undefined ? numBlocksToUnlock : Math.min(numBlocksToNextUnlock, numBlocksToUnlock);
-      }
-    }
-    
-    // compute number of blocks until all funds available
-    let numBlocksToLastUnlock = undefined;
-    if (balance.compare(unlockedBalance) === 0) {
-      if (unlockedBalance.compare(new BigInteger(0)) > 0) numBlocksToLastUnlock = 0;
-    } else {
-      if (!txs) {
-        txs = await this.getTxs({isLocked: true}); // get locked txs
-        height = await this.getHeight(); // get most recent height
-      }
-      for (let tx of txs) {
-        let numBlocksToUnlock = Math.max((tx.isConfirmed() ? tx.getHeight() : height) + 10, tx.getUnlockTime()) - height;
-        numBlocksToLastUnlock = numBlocksToLastUnlock === undefined ? numBlocksToUnlock : Math.max(numBlocksToLastUnlock, numBlocksToUnlock);
-      }
-    }
-    
-    return [numBlocksToNextUnlock, numBlocksToLastUnlock];
-  }
-  
-  /**
-   * Get accounts with a given tag.
-   * 
-   * @param {boolean} includeSubaddresses - include subaddresses if true
-   * @param {string} tag - tag for filtering accounts, all accounts if undefined
-   * @return {MoneroAccount[]} all accounts with the given tag
-   */
-  async getAccounts(includeSubaddresses, tag) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get an account.
-   * 
-   * @param {int} accountIdx - index of the account to get
-   * @param {boolean} includeSubaddresses - include subaddresses if true
-   * @return {MoneroAccount} the retrieved account
-   */
-  async getAccount(accountIdx, includeSubaddresses) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Create a new account with a label for the first subaddress.
-   * 
-   * @param {string} label - label for account's first subaddress (optional)
-   * @return {MoneroAccount} the created account
-   */
-  async createAccount(label) {
-    throw new MoneroError("Not supported");
-  }
-
-  /**
-   * Set an account label.
-   * 
-   * @param {number} accountIdx - index of the account to set the label for
-   * @param {string} label - the label to set
-   */
-  async setAccountLabel(accountIdx, label) {
-    await this.setSubaddressLabel(accountIdx, 0, label);
-  }
-  
-  /**
-   * Get subaddresses in an account.
-   * 
-   * @param {int} accountIdx - account to get subaddresses within
-   * @param {int[]} subaddressIndices - indices of subaddresses to get (optional)
-   * @return {MoneroSubaddress[]} the retrieved subaddresses
-   */
-  async getSubaddresses(accountIdx, subaddressIndices) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get a subaddress.
-   * 
-   * @param {int} accountIdx - index of the subaddress's account
-   * @param {int} subaddressIdx - index of the subaddress within the account
-   * @return {MoneroSubaddress} the retrieved subaddress
-   */
-  async getSubaddress(accountIdx, subaddressIdx) {
-    assert(accountIdx >= 0);
-    assert(subaddressIdx >= 0);
-    return (await this.getSubaddresses(accountIdx, subaddressIdx))[0];
-  }
-  
-  /**
-   * Create a subaddress within an account.
-   * 
-   * @param {int} accountIdx - index of the account to create the subaddress within
-   * @param {string} label - the label for the subaddress (optional)
-   * @return {MoneroSubaddress} the created subaddress
-   */
-  async createSubaddress(accountIdx, label) {
-    throw new MoneroError("Not supported");
-  }
-
-  /**
-   * Set a subaddress label.
-   * 
-   * @param {number} accountIdx - index of the account to set the label for
-   * @param {number} subaddressIdx - index of the subaddress to set the label for
-   * @param {string} label - the label to set
-   */
-  async setSubaddressLabel(accountIdx, subaddressIdx, label) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get a wallet transaction by hash.
-   * 
-   * @param {string} txHash - hash of a transaction to get
-   * @return {MoneroTxWallet} the identified transaction or undefined if not found
-   */
-  async getTx(txHash) {
-    let txs = await this.getTxs([txHash]);
-    return txs.length === 0 ? undefined : txs[0]; 
-  }
-  
-  /**
-   * <p>Get wallet transactions.  Wallet transactions contain one or more
-   * transfers that are either incoming or outgoing to the wallet.<p>
-   * 
-   * <p>Results can be filtered by passing a query object.  Transactions must
-   * meet every criteria defined in the query in order to be returned.  All
-   * criteria are optional and no filtering is applied when not defined.</p>
-   * 
-   * @param {(MoneroTxQuery|string[]|object)} query - configures the query (optional)
-   * @param {boolean} query.isConfirmed - get txs that are confirmed or not (optional)
-   * @param {boolean} query.inTxPool - get txs that are in the tx pool or not (optional)
-   * @param {boolean} query.isRelayed - get txs that are relayed or not (optional)
-   * @param {boolean} query.isFailed - get txs that are failed or not (optional)
-   * @param {boolean} query.isMinerTx - get miner txs or not (optional)
-   * @param {string} query.hash - get a tx with the hash (optional)
-   * @param {string[]} query.hashes - get txs with the hashes (optional)
-   * @param {string} query.paymentId - get transactions with the payment id (optional)
-   * @param {string[]} query.paymentIds - get transactions with the payment ids (optional)
-   * @param {boolean} query.hasPaymentId - get transactions with a payment id or not (optional)
-   * @param {int} query.minHeight - get txs with height >= the given height (optional)
-   * @param {int} query.maxHeight - get txs with height <= the given height (optional)
-   * @param {boolean} query.isOutgoing - get txs with an outgoing transfer or not (optional)
-   * @param {boolean} query.isIncoming - get txs with an incoming transfer or not (optional)
-   * @param {MoneroTransferQuery} query.transferQuery - get txs that have a transfer that meets this query (optional)
-   * @param {boolean} query.includeOutputs - specifies that tx outputs should be returned with tx results (optional)
-   * @return {MoneroTxWallet[]} wallet transactions per the configuration
-   */
-  async getTxs(query) {
-    throw new MoneroError("Not supported");
-  }
-
-  /**
-   * <p>Get incoming and outgoing transfers to and from this wallet.  An outgoing
-   * transfer represents a total amount sent from one or more subaddresses
-   * within an account to individual destination addresses, each with their
-   * own amount.  An incoming transfer represents a total amount received into
-   * a subaddress within an account.  Transfers belong to transactions which
-   * are stored on the blockchain.</p>
-   * 
-   * <p>Results can be filtered by passing a query object.  Transfers must
-   * meet every criteria defined in the query in order to be returned.  All
-   * criteria are optional and no filtering is applied when not defined.</p>
-   * 
-   * @param {(MoneroTransferQuery|object)} query - configures the query (optional)
-   * @param {boolean} query.isOutgoing - get transfers that are outgoing or not (optional)
-   * @param {boolean} query.isIncoming - get transfers that are incoming or not (optional)
-   * @param {string} query.address - wallet's address that a transfer either originated from (if outgoing) or is destined for (if incoming) (optional)
-   * @param {int} query.accountIndex - get transfers that either originated from (if outgoing) or are destined for (if incoming) a specific account index (optional)
-   * @param {int} query.subaddressIndex - get transfers that either originated from (if outgoing) or are destined for (if incoming) a specific subaddress index (optional)
-   * @param {int[]} query.subaddressIndices - get transfers that either originated from (if outgoing) or are destined for (if incoming) specific subaddress indices (optional)
-   * @param {BigInteger} query.amount - amount being transferred (optional)
-   * @param {MoneroDestination[]} query.destinations - individual destinations of an outgoing transfer, which is local wallet data and NOT recoverable from the blockchain (optional)
-   * @param {boolean} query.hasDestinations - get transfers that have destinations or not (optional)
-   * @param {MoneroTxQuery} query.txQuery - get transfers whose transaction meets this query (optional)
-   * @return {MoneroTransfer[]} wallet transfers that meet the query
-   */
-  async getTransfers(query) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get incoming transfers.
-   * 
-   * @param {(MoneroTransferQuery|object)} query - configures the query (optional)
-   * @param {string} query.address - get incoming transfers to a specific address in the wallet (optional)
-   * @param {int} query.accountIndex - get incoming transfers to a specific account index (optional)
-   * @param {int} query.subaddressIndex - get incoming transfers to a specific subaddress index (optional)
-   * @param {int[]} query.subaddressIndices - get transfers destined for specific subaddress indices (optional)
-   * @param {BigInteger} query.amount - amount being transferred (optional)
-   * @param {MoneroTxQuery} query.txQuery - get transfers whose transaction meets this query (optional)
-   * @return {MoneroIncomingTransfer[]} incoming transfers that meet the query
-   */
-  async getIncomingTransfers(query) {
-    query = MoneroWallet._normalizeTransferQuery(query);
-    if (query.isIncoming() === false) throw new MoneroError("Transfer query contradicts getting incoming transfers");
-    query.setIsIncoming(true);
-    return this.getTransfers(query);
-  }
-  
-  /**
-   * Get outgoing transfers.
-   * 
-   * @param {(MoneroTransferQuery|object)} query - configures the query (optional)
-   * @param {string} query.address - get outgoing transfers from a specific address in the wallet (optional)
-   * @param {int} query.accountIndex - get outgoing transfers from a specific account index (optional)
-   * @param {int} query.subaddressIndex - get outgoing transfers from a specific subaddress index (optional)
-   * @param {int[]} query.subaddressIndices - get outgoing transfers from specific subaddress indices (optional)
-   * @param {BigInteger} query.amount - amount being transferred (optional)
-   * @param {MoneroDestination[]} query.destinations - individual destinations of an outgoing transfer, which is local wallet data and NOT recoverable from the blockchain (optional)
-   * @param {boolean} query.hasDestinations - get transfers that have destinations or not (optional)
-   * @param {MoneroTxQuery} query.txQuery - get transfers whose transaction meets this query (optional)
-   * @return {MoneroOutgoingTransfer[]} outgoing transfers that meet the query
-   */
-  async getOutgoingTransfers(query) {
-    query = MoneroWallet._normalizeTransferQuery(query);
-    if (query.isOutgoing() === false) throw new MoneroError("Transfer query contradicts getting outgoing transfers");
-    query.setIsOutgoing(true);
-    return this.getTransfers(query);
-  }
-  
-  /**
-   * <p>Get outputs created from previous transactions that belong to the wallet
-   * (i.e. that the wallet can spend one time).  Outputs are part of
-   * transactions which are stored in blocks on the blockchain.</p>
-   * 
-   * <p>Results can be filtered by passing a query object.  Outputs must
-   * meet every criteria defined in the query in order to be returned.  All
-   * filtering is optional and no filtering is applied when not defined.</p>
-   * 
-   * @param {(MoneroOutputQuery|object)} query - configures the query (optional)
-   * @param {int} query.accountIndex - get outputs associated with a specific account index (optional)
-   * @param {int} query.subaddressIndex - get outputs associated with a specific subaddress index (optional)
-   * @param {int[]} query.subaddressIndices - get outputs associated with specific subaddress indices (optional)
-   * @param {BigInteger} query.amount - get outputs with a specific amount (optional)
-   * @param {BigInteger} query.minAmount - get outputs greater than or equal to a minimum amount (optional)
-   * @param {BigInteger} query.maxAmount - get outputs less than or equal to a maximum amount (optional)
-   * @param {boolean} query.isSpent - get outputs that are spent or not (optional)
-   * @param {string|MoneroKeyImage} query.keyImage - get output with a key image or which matches fields defined in a MoneroKeyImage (optional)
-   * @param {MoneroTxQuery} query.txQuery - get outputs whose transaction meets this filter (optional)
-   * @return {MoneroOutputWallet[]} the queried outputs
-   */
-  async getOutputs(query) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Export outputs in hex format.
-   *
-   * @param {boolean} all - export all outputs if true, else export the outputs since the last export
-   * @return {string} outputs in hex format
-   */
-  async exportOutputs(all) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Import outputs in hex format.
-   * 
-   * @param {string} outputsHex - outputs in hex format
-   * @return {int} the number of outputs imported
-   */
-  async importOutputs(outputsHex) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Export signed key images.
-   * 
-   * @param {boolean} all - export all key images if true, else export the key images since the last export
-   * @return {MoneroKeyImage[]} the wallet's signed key images
-   */
-  async exportKeyImages(all) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Import signed key images and verify their spent status.
-   * 
-   * @param {MoneroKeyImage[]} keyImages - images to import and verify (requires hex and signature)
-   * @return {MoneroKeyImageImportResult} results of the import
-   */
-  async importKeyImages(keyImages) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get new key images from the last imported outputs.
-   * 
-   * @return {MoneroKeyImage[]} the key images from the last imported outputs
-   */
-  async getNewKeyImagesFromLastImport() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Freeze an output.
-   * 
-   * @param {string} keyImage - key image of the output to freeze
-   */
-  async freezeOutput(keyImage) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Thaw a frozen output.
-   * 
-   * @param {string} keyImage - key image of the output to thaw
-   */
-  async thawOutput(keyImage) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Check if an output is frozen.
-   * 
-   * @param {string} keyImage - key image of the output to check if frozen
-   * @return {boolean} true if the output is frozen, false otherwise
-   */
-  async isOutputFrozen(keyImage) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Create a transaction to transfer funds from this wallet.
-   * 
-   * @param {MoneroTxConfig|object} config - configures the transaction to create (required)
-   * @param {string} config.address - single destination address (required unless `destinations` provided)
-   * @param {BigInteger|string} config.amount - single destination amount (required unless `destinations` provided)
-   * @param {int} config.accountIndex - source account index to transfer funds from (required)
-   * @param {int} config.subaddressIndex - source subaddress index to transfer funds from (optional)
-   * @param {int[]} config.subaddressIndices - source subaddress indices to transfer funds from (optional)
-   * @param {boolean} config.relay - relay the transaction to peers to commit to the blockchain (default false)
-   * @param {MoneroTxPriority} config.priority - transaction priority (default MoneroTxPriority.NORMAL)
-   * @param {MoneroDestination[]} config.destinations - addresses and amounts in a multi-destination tx (required unless `address` and `amount` provided)
-   * @param {int[]} config.subtractFeeFrom - list of destination indices to split the transaction fee (optional)
-   * @param {string} config.paymentId - transaction payment ID (optional)
-   * @param {BigInteger|string} config.unlockTime - minimum height or timestamp for the transaction to unlock (default 0)
-   * @return {MoneroTxWallet} the created transaction
-   */
-  async createTx(config) {
-    config = MoneroWallet._normalizeCreateTxsConfig(config);
-    if (config.getCanSplit() !== undefined) assert.equal(config.getCanSplit(), false, "Cannot split transactions using createTx(); use createTxs()");
-    config.setCanSplit(false);
-    return (await this.createTxs(config))[0];
-  }
-  
-  /**
-   * Create one or more transactions to transfer funds from this wallet.
-   * 
-   * @param {MoneroTxConfig|object} config - configures the transactions to create (required)
-   * @param {string} config.address - single destination address (required unless `destinations` provided)
-   * @param {BigInteger|string} config.amount - single destination amount (required unless `destinations` provided)
-   * @param {int} config.accountIndex - source account index to transfer funds from (required)
-   * @param {int} config.subaddressIndex - source subaddress index to transfer funds from (optional)
-   * @param {int[]} config.subaddressIndices - source subaddress indices to transfer funds from (optional)
-   * @param {boolean} config.relay - relay the transactions to peers to commit to the blockchain (default false)
-   * @param {MoneroTxPriority} config.priority - transaction priority (default MoneroTxPriority.NORMAL)
-   * @param {MoneroDestination[]} config.destinations - addresses and amounts in a multi-destination tx (required unless `address` and `amount` provided)
-   * @param {string} config.paymentId - transaction payment ID (optional)
-   * @param {BigInteger|string} config.unlockTime - minimum height or timestamp for the transactions to unlock (default 0)
-   * @param {boolean} config.canSplit - allow funds to be transferred using multiple transactions (default true)
-   * @return {MoneroTxWallet[]} the created transactions
-   */
-  async createTxs(config) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Sweep an output by key image.
-   * 
-   * @param {MoneroTxConfig} config - configures the transaction to create (required)
-   * @param {string} config.address - single destination address (required)
-   * @param {string} config.keyImage - key image to sweep (required)
-   * @param {boolean} config.relay - relay the transaction to peers to commit to the blockchain (default false)
-   * @param {BigInteger|string} config.unlockTime - minimum height or timestamp for the transaction to unlock (default 0)
-   * @param {MoneroTxPriority} config.priority - transaction priority (default MoneroTxPriority.NORMAL)
-   * @return {MoneroTxWallet} the created transaction
-   */
-  async sweepOutput(config) {
-    throw new MoneroError("Not supported");
-  }
-
-  /**
-   * Sweep all unlocked funds according to the given configuration.
-   * 
-   * @param {MoneroTxConfig|object} config - configures the transactions to create (required)
-   * @param {string} config.address - single destination address (required)
-   * @param {int} config.accountIndex - source account index to sweep from (optional, defaults to all accounts)
-   * @param {int} config.subaddressIndex - source subaddress index to sweep from (optional, defaults to all subaddresses)
-   * @param {int[]} config.subaddressIndices - source subaddress indices to sweep from (optional)
-   * @param {boolean} config.relay - relay the transactions to peers to commit to the blockchain (default false)
-   * @param {MoneroTxPriority} config.priority - transaction priority (default MoneroTxPriority.NORMAL)
-   * @param {BigInteger|string} config.unlockTime - minimum height or timestamp for the transactions to unlock (default 0)
-   * @param {boolean} config.sweepEachSubaddress - sweep each subaddress individually if true (default false)
-   * @return {MoneroTxWallet[]} the created transactions
-   */
-  async sweepUnlocked(config) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * <p>Sweep all unmixable dust outputs back to the wallet to make them easier to spend and mix.</p>
-   * 
-   * <p>NOTE: Dust only exists pre RCT, so this method will throw "no dust to sweep" on new wallets.</p>
-   * 
-   * @param {boolean} relay - specifies if the resulting transaction should be relayed (default false)
-   * @return {MoneroTxWallet[]} the created transactions
-   */
-  async sweepDust(relay) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Relay a previously created transaction.
-   * 
-   * @param {(MoneroTxWallet|string)} txOrMetadata - transaction or its metadata to relay
-   * @return {string} the hash of the relayed tx
-   */
-  async relayTx(txOrMetadata) {
-    return (await this.relayTxs([txOrMetadata]))[0];
-  }
-  
-  /**
-   * Relay previously created transactions.
-   * 
-   * @param {(MoneroTxWallet[]|string[])} txsOrMetadatas - transactions or their metadata to relay
-   * @return {string[]} the hashes of the relayed txs
-   */
-  async relayTxs(txsOrMetadatas) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Describe a tx set from unsigned tx hex.
-   * 
-   * @param {string} unsignedTxHex - unsigned tx hex
-   * @return {MoneroTxSet} the tx set containing structured transactions
-   */
-  async describeUnsignedTxSet(unsignedTxHex) {
-    return this.describeTxSet(new MoneroTxSet().setUnsignedTxHex(unsignedTxHex));
-  }
-  
-  /**
-   * Describe a tx set from multisig tx hex.
-   * 
-   * @param {string} multisigTxHex - multisig tx hex
-   * @return {MoneroTxSet} the tx set containing structured transactions
-   */
-  async describeMultisigTxSet(multisigTxHex) {
-    return this.describeTxSet(new MoneroTxSet().setMultisigTxHex(multisigTxHex));
-  }
-  
-  /**
-   * Describe a tx set containing unsigned or multisig tx hex to a new tx set containing structured transactions.
-   * 
-   * @param {MoneroTxSet} txSet - a tx set containing unsigned or multisig tx hex
-   * @return {MoneroTxSet} the tx set containing structured transactions
-   */
-  async describeTxSet(txSet) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Sign unsigned transactions from a view-only wallet.
-   * 
-   * @param {string} unsignedTxHex - unsigned transaction hex from when the transactions were created
-   * @return {string} the signed transaction hex
-   */
-  async signTxs(unsignedTxHex) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Submit signed transactions from a view-only wallet.
-   * 
-   * @param {string} signedTxHex - signed transaction hex from signTxs()
-   * @return {string[]} the resulting transaction hashes
-   */
-  async submitTxs(signedTxHex) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Sign a message.
-   * 
-   * @param {string} message - the message to sign
-   * @param {MoneroMessageSignatureType} signatureType - sign with spend key or view key (default spend key)
-   * @param {int} accountIdx - the account index of the message signature (default 0)
-   * @param {int} subaddressIdx - the subaddress index of the message signature (default 0)
-   * @return {string} the signature
-   */
-  async signMessage(message, signatureType, accountIdx, subaddressIdx) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Verify a signature on a message.
-   * 
-   * @param {string} message - signed message
-   * @param {string} address - signing address
-   * @param {string} signature - signature
-   * @return {MoneroMessageSignatureResult} true if the signature is good, false otherwise
-   */
-  async verifyMessage(message, address, signature) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get a transaction's secret key from its hash.
-   * 
-   * @param {string} txHash - transaction's hash
-   * @return {string} - transaction's secret key
-   */
-  async getTxKey(txHash) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Check a transaction in the blockchain with its secret key.
-   * 
-   * @param {string} txHash - transaction to check
-   * @param {string} txKey - transaction's secret key
-   * @param {string} address - destination public address of the transaction
-   * @return {MoneroCheckTx} the result of the check
-   */
-  async checkTxKey(txHash, txKey, address) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get a transaction signature to prove it.
-   * 
-   * @param {string} txHash - transaction to prove
-   * @param {string} address - destination public address of the transaction
-   * @param {string} message - message to include with the signature to further authenticate the proof (optional)
-   * @return {string} the transaction signature
-   */
-  async getTxProof(txHash, address, message) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Prove a transaction by checking its signature.
-   * 
-   * @param {string} txHash - transaction to prove
-   * @param {string} address - destination public address of the transaction
-   * @param {string} message - message included with the signature to further authenticate the proof (optional)
-   * @param {string} signature - transaction signature to confirm
-   * @return {MoneroCheckTx} the result of the check
-   */
-  async checkTxProof(txHash, address, message, signature) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Generate a signature to prove a spend. Unlike proving a transaction, it does not require the destination public address.
-   * 
-   * @param {string} txHash - transaction to prove
-   * @param {string} message - message to include with the signature to further authenticate the proof (optional)
-   * @return {string} the transaction signature
-   */
-  async getSpendProof(txHash, message) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Prove a spend using a signature. Unlike proving a transaction, it does not require the destination public address.
-   * 
-   * @param {string} txHash - transaction to prove
-   * @param {string} message - message included with the signature to further authenticate the proof (optional)
-   * @param {string} signature - transaction signature to confirm
-   * @return {boolean} true if the signature is good, false otherwise
-   */
-  async checkSpendProof(txHash, message, signature) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Generate a signature to prove the entire balance of the wallet.
-   * 
-   * @param message - message included with the signature to further authenticate the proof (optional)
-   * @return the reserve proof signature
-   */
-  async getReserveProofWallet(message) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Generate a signature to prove an available amount in an account.
-   * 
-   * @param {int} accountIdx - account to prove ownership of the amount
-   * @param {BigInteger} amount - minimum amount to prove as available in the account
-   * @param {string} message - message to include with the signature to further authenticate the proof (optional)
-   * @return {string} the reserve proof signature
-   */
-  async getReserveProofAccount(accountIdx, amount, message) {
-    throw new MoneroError("Not supported");
-  }
-
-  /**
-   * Proves a wallet has a disposable reserve using a signature.
-   * 
-   * @param {string} address - public wallet address
-   * @param {string} message - message included with the signature to further authenticate the proof (optional)
-   * @param {string} signature - reserve proof signature to check
-   * @return {MoneroCheckReserve} the result of checking the signature proof
-   */
-  async checkReserveProof(address, message, signature) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get a transaction note.
-   * 
-   * @param {string} txHash - transaction to get the note of
-   * @return {string} the tx note
-   */
-  async getTxNote(txHash) {
-    return (await this.getTxNotes([txHash]))[0];
-  }
-  
-  /**
-   * Get notes for multiple transactions.
-   * 
-   * @param {string[]} txHashes - hashes of the transactions to get notes for
-   * @return {string[]} notes for the transactions
-   */
-  async getTxNotes(txHashes) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Set a note for a specific transaction.
-   * 
-   * @param {string} txHash - hash of the transaction to set a note for
-   * @param {string} note - the transaction note
-   */
-  async setTxNote(txHash, note) {
-    await this.setTxNotes([txHash], [note]);
-  }
-  
-  /**
-   * Set notes for multiple transactions.
-   * 
-   * @param {string[]} txHashes - transactions to set notes for
-   * @param {string[]} notes - notes to set for the transactions
-   */
-  async setTxNotes(txHashes, notes) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get address book entries.
-   * 
-   * @param {int[]} entryIndices - indices of the entries to get
-   * @return {MoneroAddressBookEntry[]} the address book entries
-   */
-  async getAddressBookEntries(entryIndices) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Add an address book entry.
-   * 
-   * @param {string} address - entry address
-   * @param {string} description - entry description (optional)
-   * @return {int} the index of the added entry
-   */
-  async addAddressBookEntry(address, description) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Edit an address book entry.
-   * 
-   * @param {number} index - index of the address book entry to edit
-   * @param {boolean} setAddress - specifies if the address should be updated
-   * @param {string} address - updated address
-   * @param {boolean} setDescription - specifies if the description should be updated
-   * @param {string} description - updated description
-   */
-  async editAddressBookEntry(index, setAddress, address, setDescription, description) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Delete an address book entry.
-   * 
-   * @param {int} entryIdx - index of the entry to delete
-   */
-  async deleteAddressBookEntry(entryIdx) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Tag accounts.
-   * 
-   * @param {string} tag - tag to apply to the specified accounts
-   * @param {int[]} accountIndices - indices of the accounts to tag
-   */
-  async tagAccounts(tag, accountIndices) {
-    throw new MoneroError("Not supported");
-  }
-
-  /**
-   * Untag accounts.
-   * 
-   * @param {int[]} accountIndices - indices of the accounts to untag
-   */
-  async untagAccounts(accountIndices) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Return all account tags.
-   * 
-   * @return {MoneroAccountTag[]} the wallet's account tags
-   */
-  async getAccountTags() {
-    throw new MoneroError("Not supported");
-  }
-
-  /**
-   * Sets a human-readable description for a tag.
-   * 
-   * @param {string} tag - tag to set a description for
-   * @param {string} label - label to set for the tag
-   */
-  async setAccountTagLabel(tag, label) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Creates a payment URI from a send configuration.
-   * 
-   * @param {MoneroTxConfig} config - specifies configuration for a potential tx
-   * @return {string} the payment uri
-   */
-  async getPaymentUri(config) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Parses a payment URI to a tx config.
-   * 
-   * @param {string} uri - payment uri to parse
-   * @return {MoneroTxConfig} the send configuration parsed from the uri
-   */
-  async parsePaymentUri(uri) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get an attribute.
-   * 
-   * @param {string} key - attribute to get the value of
-   * @return {string} the attribute's value
-   */
-  async getAttribute(key) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Set an arbitrary attribute.
-   * 
-   * @param {string} key - attribute key
-   * @param {string} val - attribute value
-   */
-  async setAttribute(key, val) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Start mining.
-   * 
-   * @param {int} numThreads - number of threads created for mining (optional)
-   * @param {boolean} backgroundMining - specifies if mining should occur in the background (optional)
-   * @param {boolean} ignoreBattery - specifies if the battery should be ignored for mining (optional)
-   */
-  async startMining(numThreads, backgroundMining, ignoreBattery) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Stop mining.
-   */
-  async stopMining() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Indicates if importing multisig data is needed for returning a correct balance.
-   * 
-   * @return {boolean} true if importing multisig data is needed for returning a correct balance, false otherwise
-   */
-  async isMultisigImportNeeded() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Indicates if this wallet is a multisig wallet.
-   * 
-   * @return {boolean} true if this is a multisig wallet, false otherwise
-   */
-  async isMultisig() {
-    return (await this.getMultisigInfo()).isMultisig();
-  }
-  
-  /**
-   * Get multisig info about this wallet.
-   * 
-   * @return {MoneroMultisigInfo} multisig info about this wallet
-   */
-  async getMultisigInfo() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Get multisig info as hex to share with participants to begin creating a
-   * multisig wallet.
-   * 
-   * @return {string} this wallet's multisig hex to share with participants
-   */
-  async prepareMultisig() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Make this wallet multisig by importing multisig hex from participants.
-   * 
-   * @param {String[]} multisigHexes - multisig hex from each participant
-   * @param {int} threshold - number of signatures needed to sign transfers
-   * @param {string} password - wallet password
-   * @return {string} this wallet's multisig hex to share with participants
-   */
-  async makeMultisig(multisigHexes, threshold, password) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Exchange multisig hex with participants in a M/N multisig wallet.
-   * 
-   * This process must be repeated with participants exactly N-M times.
-   * 
-   * @param {string[]} multisigHexes are multisig hex from each participant
-   * @param {string} password - wallet's password // TODO monero-project: redundant? wallet is created with password
-   * @return {MoneroMultisigInitResult} the result which has the multisig's address xor this wallet's multisig hex to share with participants iff not done
-   */
-  async exchangeMultisigKeys(multisigHexes, password) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Export this wallet's multisig info as hex for other participants.
-   * 
-   * @return {string} this wallet's multisig info as hex for other participants
-   */
-  async exportMultisigHex() {
-    throw new MoneroError("Not supported?");
-  }
-  
-  /**
-   * Import multisig info as hex from other participants.
-   * 
-   * @param {string[]} multisigHexes - multisig hex from each participant
-   * @return {int} the number of outputs signed with the given multisig hex
-   */
-  async importMultisigHex(multisigHexes) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Sign multisig transactions from a multisig wallet.
-   * 
-   * @param {string} multisigTxHex - unsigned multisig transactions as hex
-   * @return {MoneroMultisigSignResult} the result of signing the multisig transactions
-   */
-  async signMultisigTxHex(multisigTxHex) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Submit signed multisig transactions from a multisig wallet.
-   * 
-   * @param {string} signedMultisigTxHex - signed multisig hex returned from signMultisigTxHex()
-   * @return {string[]} the resulting transaction hashes
-   */
-  async submitMultisigTxHex(signedMultisigTxHex) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Change the wallet password.
-   * 
-   * @param {string} oldPassword - the wallet's old password
-   * @param {string} newPassword - the wallet's new password
-   */
-  async changePassword(oldPassword, newPassword) {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Save the wallet at its current path.
-   */
-  save() {
-    throw new MoneroError("Not supported");
-  }
-  
-  /**
-   * Optionally save then close the wallet.
-   *
-   * @param {boolean} save - specifies if the wallet should be saved before being closed (default false)
-   */
-  async close(save) {
-    if (this._connectionManager) this._connectionManager.removeListener(this._connectionManagerListener);
-    this._connectionManager = undefined;
-    this._connectionManagerListener = undefined;
-  }
-  
-  /**
-   * Indicates if this wallet is closed or not.
-   * 
-   * @return {boolean} true if the wallet is closed, false otherwise
-   */
-  async isClosed() {
-    throw new MoneroError("Not supported");
-  }
-  
-  // -------------------------------- PRIVATE ---------------------------------
-  
-  static _normalizeTxQuery(query) {
-    if (query instanceof MoneroTxQuery) query = query.copy();
-    else if (Array.isArray(query)) query = new MoneroTxQuery().setHashes(query);
-    else {
-      query = Object.assign({}, query);
-      query = new MoneroTxQuery(query);
-    }
-    if (query.getBlock() === undefined) query.setBlock(new MoneroBlock().setTxs([query]));
-    if (query.getInputQuery()) query.getInputQuery().setTxQuery(query);
-    if (query.getOutputQuery()) query.getOutputQuery().setTxQuery(query);
-    return query;
-  }
-  
-  static _normalizeTransferQuery(query) {
-    if (query === undefined) query = new MoneroTransferQuery();
-    else if (query instanceof MoneroTransferQuery) {
-      if (query.getTxQuery() === undefined) query = query.copy();
-      else {
-        let txQuery = query.getTxQuery().copy();
-        if (query.getTxQuery().getTransferQuery() === query) query = txQuery.getTransferQuery();
-        else {
-          assert.equal(query.getTxQuery().getTransferQuery(), undefined, "Transfer query's tx query must be circular reference or null");
-          query = query.copy();
-          query.setTxQuery(txQuery);
-        }
-      }
-    } else {
-      query = Object.assign({}, query);
-      query = new MoneroTransferQuery(query);
-    }
-    if (query.getTxQuery() === undefined) query.setTxQuery(new MoneroTxQuery());
-    query.getTxQuery().setTransferQuery(query);
-    if (query.getTxQuery().getBlock() === undefined) query.getTxQuery().setBlock(new MoneroBlock().setTxs([query.getTxQuery()]));
-    return query;
-  }
-  
-  static _normalizeOutputQuery(query) {
-    if (query === undefined) query = new MoneroOutputQuery();
-    else if (query instanceof MoneroOutputQuery) {
-      if (query.getTxQuery() === undefined) query = query.copy();
-      else {
-        let txQuery = query.getTxQuery().copy();
-        if (query.getTxQuery().getOutputQuery() === query) query = txQuery.getOutputQuery();
-        else {
-          assert.equal(query.getTxQuery().getOutputQuery(), undefined, "Output query's tx query must be circular reference or null");
-          query = query.copy();
-          query.setTxQuery(txQuery);
-        }
-      }
-    } else {
-      query = Object.assign({}, query);
-      query = new MoneroOutputQuery(query);
-    }
-    if (query.getTxQuery() === undefined) query.setTxQuery(new MoneroTxQuery());
-    query.getTxQuery().setOutputQuery(query);
-    if (query.getTxQuery().getBlock() === undefined) query.getTxQuery().setBlock(new MoneroBlock().setTxs([query.getTxQuery()]));
-    return query;
-  }
-  
-  static _normalizeCreateTxsConfig(config) {
-    if (config === undefined || !(config instanceof Object)) throw new MoneroError("Must provide MoneroTxConfig or equivalent JS object");
-    config = new MoneroTxConfig(config);
-    assert(config.getDestinations() && config.getDestinations().length > 0, "Must provide destinations");
-    assert.equal(config.getSweepEachSubaddress(), undefined);
-    assert.equal(config.getBelowAmount(), undefined);
-    return config;
-  }
-  
-  static _normalizeSweepOutputConfig(config) {
-    if (config === undefined || !(config instanceof Object)) throw new MoneroError("Must provide MoneroTxConfig or equivalent JS object");
-    config = new MoneroTxConfig(config);
-    assert.equal(config.getSweepEachSubaddress(), undefined);
-    assert.equal(config.getBelowAmount(), undefined);
-    assert.equal(config.getCanSplit(), undefined, "Cannot split transactions when sweeping an output");
-    if (!config.getDestinations() || config.getDestinations().length !== 1 || !config.getDestinations()[0].getAddress()) throw new MoneroError("Must provide exactly one destination address to sweep output to");
-    if (config.getSubtractFeeFrom() && config.getSubtractFeeFrom().length > 0) throw new MoneroError("Sweep transfers do not support subtracting fees from destinations");
-    return config;  
-  }
-  
-  static _normalizeSweepUnlockedConfig(config) {
-    if (config === undefined || !(config instanceof Object)) throw new MoneroError("Must provide MoneroTxConfig or equivalent JS object");
-    config = new MoneroTxConfig(config);
-    if (config.getDestinations() === undefined || config.getDestinations().length != 1) throw new MoneroError("Must provide exactly one destination to sweep to");
-    if (config.getDestinations()[0].getAddress() === undefined) throw new MoneroError("Must provide destination address to sweep to");
-    if (config.getDestinations()[0].getAmount() !== undefined) throw new MoneroError("Cannot provide amount in sweep config");
-    if (config.getKeyImage() !== undefined) throw new MoneroError("Key image defined; use sweepOutput() to sweep an output by its key image");
-    if (config.getSubaddressIndices() !== undefined && config.getSubaddressIndices().length === 0) config.setSubaddressIndices(undefined);
-    if (config.getAccountIndex() === undefined && config.getSubaddressIndices() !== undefined) throw new MoneroError("Must provide account index if subaddress indices are provided");
-    return config;
-  }
-}
-
-MoneroWallet.DEFAULT_LANGUAGE = "English";
-
-module.exports = MoneroWallet;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_MoneroWalletFull.js.html b/docs/src_main_js_wallet_MoneroWalletFull.js.html deleted file mode 100644 index cbe248853..000000000 --- a/docs/src_main_js_wallet_MoneroWalletFull.js.html +++ /dev/null @@ -1,2740 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/MoneroWalletFull.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/MoneroWalletFull.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../common/biginteger").BigInteger;
-const GenUtils = require("../common/GenUtils");
-const LibraryUtils = require("../common/LibraryUtils");
-const TaskLooper = require("../common/TaskLooper");
-const MoneroAccount = require("./model/MoneroAccount");
-const MoneroAddressBookEntry = require("./model/MoneroAddressBookEntry");
-const MoneroBlock = require("../daemon/model/MoneroBlock");
-const MoneroCheckTx = require("./model/MoneroCheckTx");
-const MoneroCheckReserve = require("./model/MoneroCheckReserve");
-const MoneroDaemonRpc = require("../daemon/MoneroDaemonRpc");
-const MoneroError = require("../common/MoneroError");
-const MoneroIntegratedAddress = require("./model/MoneroIntegratedAddress");
-const MoneroKeyImage = require("../daemon/model/MoneroKeyImage");
-const MoneroKeyImageImportResult = require("./model/MoneroKeyImageImportResult");
-const MoneroMultisigInfo = require("./model/MoneroMultisigInfo");
-const MoneroMultisigInitResult = require("./model/MoneroMultisigInitResult");
-const MoneroMultisigSignResult = require("./model/MoneroMultisigSignResult");
-const MoneroNetworkType = require("../daemon/model/MoneroNetworkType");
-const MoneroOutputWallet = require("./model/MoneroOutputWallet");
-const MoneroRpcConnection = require("../common/MoneroRpcConnection");
-const MoneroSubaddress = require("./model/MoneroSubaddress");
-const MoneroSyncResult = require("./model/MoneroSyncResult");
-const MoneroTxConfig = require("./model/MoneroTxConfig");
-const MoneroTxSet = require("./model/MoneroTxSet");
-const MoneroTxWallet = require("./model/MoneroTxWallet");
-const MoneroWallet = require("./MoneroWallet");
-const MoneroWalletConfig = require("./model/MoneroWalletConfig");
-const MoneroWalletKeys = require("./MoneroWalletKeys");
-const MoneroWalletListener = require("./model/MoneroWalletListener");
-const MoneroMessageSignatureType = require("./model/MoneroMessageSignatureType");
-const MoneroMessageSignatureResult = require("./model/MoneroMessageSignatureResult");
-
-/**
- * Implements a Monero wallet using fully client-side WebAssembly bindings to monero-project's wallet2 in C++.
- * 
- * @extends {MoneroWalletKeys}
- * @implements {MoneroWallet}
- * @hideconstructor
- */
-class MoneroWalletFull extends MoneroWalletKeys {
-  
-  // --------------------------- STATIC UTILITIES -----------------------------
-  
-  /**
-   * Check if a wallet exists at a given path.
-   * 
-   * @param {string} path - path of the wallet on the file system
-   * @param {fs} - Node.js compatible file system to use (optional, defaults to disk if nodejs)
-   * @return {boolean} true if a wallet exists at the given path, false otherwise
-   */
-  static walletExists(path, fs) {
-    assert(path, "Must provide a path to look for a wallet");
-    if (!fs) fs = MoneroWalletFull._getFs();
-    if (!fs) throw new MoneroError("Must provide file system to check if wallet exists");
-    let exists = fs.existsSync(path + ".keys");
-    LibraryUtils.log(1, "Wallet exists at " + path + ": " + exists);
-    return exists;
-  }
-  
-  /**
-   * <p>Open an existing wallet using WebAssembly bindings to wallet2.h.</p>
-   * 
-   * <p>Examples:<p>
-   * 
-   * <code>
-   * let wallet1 = await MoneroWalletFull.openWallet(<br>
-   * &nbsp;&nbsp; "./wallets/wallet1",<br>
-   * &nbsp;&nbsp; "supersecretpassword",<br>
-   * &nbsp;&nbsp; MoneroNetworkType.STAGENET,<br>
-   * &nbsp;&nbsp; "http://localhost:38081" // daemon uri<br>
-   * );<br><br>
-   * 
-   * let wallet2 = await MoneroWalletFull.openWallet({<br>
-   * &nbsp;&nbsp; path: "./wallets/wallet2",<br>
-   * &nbsp;&nbsp; password: "supersecretpassword",<br>
-   * &nbsp;&nbsp; networkType: MoneroNetworkType.STAGENET,<br>
-   * &nbsp;&nbsp; serverUri: "http://localhost:38081", // daemon configuration<br>
-   * &nbsp;&nbsp; serverUsername: "superuser",<br>
-   * &nbsp;&nbsp; serverPassword: "abctesting123"<br>
-   * });
-   * </code>
-   * 
-   * @param {MoneroWalletConfig|object|string} configOrPath - MoneroWalletConfig or equivalent config object or a path to a wallet to open
-   * @param {string} configOrPath.path - path of the wallet to open (optional if 'keysData' provided)
-   * @param {string} configOrPath.password - password of the wallet to open
-   * @param {string|number} configOrPath.networkType - network type of the wallet to open (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
-   * @param {Uint8Array} configOrPath.keysData - wallet keys data to open (optional if path provided)
-   * @param {Uint8Array} configOrPath.cacheData - wallet cache data to open (optional)
-   * @param {MoneroRpcConnection|object} configOrPath.server - MoneroRpcConnection or equivalent JS object configuring the daemon connection (optional)
-   * @param {string} configOrPath.serverUri - uri of the wallet's daemon (optional)
-   * @param {string} configOrPath.serverUsername - username to authenticate with the daemon (optional)
-   * @param {string} configOrPath.serverPassword - password to authenticate with the daemon (optional)
-   * @param {boolean} configOrPath.rejectUnauthorized - reject self-signed server certificates if true (default true)
-   * @param {boolean} configOrPath.proxyToWorker - proxies wallet operations to a worker in order to not block the main thread (default true)
-   * @param {fs} configOrPath.fs - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
-   * @param {string} password - password of the wallet to open
-   * @param {string|number} networkType - network type of the wallet to open
-   * @param {string|MoneroRpcConnection} daemonUriOrConnection - daemon URI or MoneroRpcConnection
-   * @param {boolean} proxyToWorker - proxies wallet operations to a worker in order to not block the main thread (default true)
-   * @param {fs} fs - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
-   * @return {MoneroWalletFull} the opened wallet
-   */
-  static async openWallet(configOrPath, password, networkType, daemonUriOrConnection, proxyToWorker, fs) {
-
-    // normalize and validate config
-    let config;
-    if (typeof configOrPath === "object") {
-      config = configOrPath instanceof MoneroWalletConfig ? configOrPath : new MoneroWalletConfig(configOrPath);
-      if (password !== undefined || networkType !== undefined || daemonUriOrConnection !== undefined || proxyToWorker !== undefined || fs !== undefined) throw new MoneroError("Can specify config object or params but not both when opening WASM wallet")
-    } else {
-      config = new MoneroWalletConfig().setPath(configOrPath).setPassword(password).setNetworkType(networkType).setProxyToWorker(proxyToWorker).setFs(fs);
-      if (typeof daemonUriOrConnection === "object") config.setServer(daemonUriOrConnection);
-      else config.setServerUri(daemonUriOrConnection);
-    }
-    if (config.getProxyToWorker() === undefined) config.setProxyToWorker(true);
-    if (config.getSeed() !== undefined) throw new MoneroError("Cannot specify seed when opening wallet");
-    if (config.getSeedOffset() !== undefined) throw new MoneroError("Cannot specify seed offset when opening wallet");
-    if (config.getPrimaryAddress() !== undefined) throw new MoneroError("Cannot specify primary address when opening wallet");
-    if (config.getPrivateViewKey() !== undefined) throw new MoneroError("Cannot specify private view key when opening wallet");
-    if (config.getPrivateSpendKey() !== undefined) throw new MoneroError("Cannot specify private spend key when opening wallet");
-    if (config.getRestoreHeight() !== undefined) throw new MoneroError("Cannot specify restore height when opening wallet");
-    if (config.getLanguage() !== undefined) throw new MoneroError("Cannot specify language when opening wallet");
-    if (config.getSaveCurrent() === true) throw new MoneroError("Cannot save current wallet when opening JNI wallet");
-    
-    // read wallet data from disk if not provided
-    if (!config.getKeysData()) {
-      let fs = config.getFs() ? config.getFs() : MoneroWalletFull._getFs();
-      if (!fs) throw new MoneroError("Must provide file system to read wallet data from");
-      if (!this.walletExists(config.getPath(), fs)) throw new MoneroError("Wallet does not exist at path: " + config.getPath());
-      config.setKeysData(fs.readFileSync(config.getPath() + ".keys"));
-      config.setCacheData(fs.existsSync(config.getPath()) ? fs.readFileSync(config.getPath()) : "");
-    }
-    
-    // open wallet from data
-    return MoneroWalletFull._openWalletData(config.getPath(), config.getPassword(), config.getNetworkType(), config.getKeysData(), config.getCacheData(), config.getServer(), config.getProxyToWorker(), config.getFs());
-  }
-  
-  /**
-   * <p>Create a wallet using WebAssembly bindings to wallet2.h.<p>
-   * 
-   * <p>Example:</p>
-   * 
-   * <code>
-   * let wallet = await MoneroWalletFull.createWallet({<br>
-   * &nbsp;&nbsp; path: "./test_wallets/wallet1", // leave blank for in-memory wallet<br>
-   * &nbsp;&nbsp; password: "supersecretpassword",<br>
-   * &nbsp;&nbsp; networkType: MoneroNetworkType.STAGENET,<br>
-   * &nbsp;&nbsp; seed: "coexist igloo pamphlet lagoon...",<br>
-   * &nbsp;&nbsp; restoreHeight: 1543218,<br>
-   * &nbsp;&nbsp; server: new MoneroRpcConnection("http://localhost:38081", "daemon_user", "daemon_password_123"),<br>
-   * });
-   * </code>
-   * 
-   * @param {object|MoneroWalletConfig} config - MoneroWalletConfig or equivalent config object
-   * @param {string} config.path - path of the wallet to create (optional, in-memory wallet if not given)
-   * @param {string} config.password - password of the wallet to create
-   * @param {string|number} config.networkType - network type of the wallet to create (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
-   * @param {string} config.seed - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
-   * @param {string} config.seedOffset - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
-   * @param {boolean} config.isMultisig - restore multisig wallet from seed
-   * @param {string} config.primaryAddress - primary address of the wallet to create (only provide if restoring from keys)
-   * @param {string} config.privateViewKey - private view key of the wallet to create (optional)
-   * @param {string} config.privateSpendKey - private spend key of the wallet to create (optional)
-   * @param {number} config.restoreHeight - block height to start scanning from (defaults to 0 unless generating random wallet)
-   * @param {string} config.language - language of the wallet's seed phrase (defaults to "English" or auto-detected)
-   * @param {number} config.accountLookahead -  number of accounts to scan (optional)
-   * @param {number} config.subaddressLookahead - number of subaddresses to scan per account (optional)
-   * @param {MoneroRpcConnection|object} config.server - MoneroRpcConnection or equivalent JS object providing daemon configuration (optional)
-   * @param {string} config.serverUri - uri of the wallet's daemon (optional)
-   * @param {string} config.serverUsername - username to authenticate with the daemon (optional)
-   * @param {string} config.serverPassword - password to authenticate with the daemon (optional)
-   * @param {MoneroConnectionManager} config.connectionManager - manage connections to monerod (optional)
-   * @param {boolean} config.rejectUnauthorized - reject self-signed server certificates if true (defaults to true)
-   * @param {boolean} config.proxyToWorker - proxies wallet operations to a worker in order to not block the main thread (default true)
-   * @param {fs} config.fs - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
-   * @return {MoneroWalletFull} the created wallet
-   */
-  static async createWallet(config) {
-    
-    // normalize and validate config
-    if (config === undefined) throw new MoneroError("Must provide config to create wallet");
-    config = config instanceof MoneroWalletConfig ? config : new MoneroWalletConfig(config);
-    if (config.getSeed() !== undefined && (config.getPrimaryAddress() !== undefined || config.getPrivateViewKey() !== undefined || config.getPrivateSpendKey() !== undefined)) {
-      throw new MoneroError("Wallet may be initialized with a seed or keys but not both");
-    } // TODO: factor this much out to common
-    if (config.getNetworkType() === undefined) throw new MoneroError("Must provide a networkType: 'mainnet', 'testnet' or 'stagenet'");
-    MoneroNetworkType.validate(config.getNetworkType());
-    if (config.getSaveCurrent() === true) throw new MoneroError("Cannot save current wallet when creating full WASM wallet");
-    if (config.getPath() === undefined) config.setPath("");
-    if (config.getPath() && MoneroWalletFull.walletExists(config.getPath(), config.getFs())) throw new MoneroError("Wallet already exists: " + config.getPath());
-    if (config.getPassword() === undefined) config.setPassword("");
-
-    // set server from connection manager if provided
-    if (config.getConnectionManager()) {
-      if (config.getServer()) throw new MoneroError("Wallet can be initialized with a server or connection manager but not both");
-      config.setServer(config.getConnectionManager().getConnection());
-    }
-    
-    // create wallet
-    let wallet;
-    if (config.getSeed() !== undefined) {
-      if (config.getLanguage() !== undefined) throw new MoneroError("Cannot provide language when creating wallet from seed");
-      wallet = await MoneroWalletFull._createWalletFromSeed(config);
-    } else if (config.getPrivateSpendKey() !== undefined || config.getPrimaryAddress() !== undefined) {
-      if (config.getSeedOffset() !== undefined) throw new MoneroError("Cannot provide seedOffset when creating wallet from keys");
-      wallet = await MoneroWalletFull._createWalletFromKeys(config);
-    } else {
-      if (config.getSeedOffset() !== undefined) throw new MoneroError("Cannot provide seedOffset when creating random wallet");
-      if (config.getRestoreHeight() !== undefined) throw new MoneroError("Cannot provide restoreHeight when creating random wallet");
-      wallet = await MoneroWalletFull._createWalletRandom(config);
-    }
-    await wallet.setConnectionManager(config.getConnectionManager());
-    return wallet;
-  }
-  
-  static async _createWalletFromSeed(config) {
-    if (config.getProxyToWorker() === undefined) config.setProxyToWorker(true);
-    if (config.getProxyToWorker()) return MoneroWalletFullProxy._createWallet(config);
-    
-    // validate and normalize params
-    let daemonConnection = config.getServer();
-    let rejectUnauthorized = daemonConnection ? daemonConnection.getRejectUnauthorized() : true;
-    if (config.getRestoreHeight() === undefined) config.setRestoreHeight(0);
-    if (config.getSeedOffset() === undefined) config.setSeedOffset("");
-    
-    // load full wasm module
-    let module = await LibraryUtils.loadFullModule();
-    
-    // create wallet in queue
-    let wallet = await module.queueTask(async function() {
-      return new Promise(function(resolve, reject) {
-        
-        // register fn informing if unauthorized reqs should be rejected
-        let rejectUnauthorizedFnId = GenUtils.getUUID();
-        LibraryUtils.setRejectUnauthorizedFn(rejectUnauthorizedFnId, function() { return rejectUnauthorized });
-        
-        // define callback for wasm
-        let callbackFn = async function(cppAddress) {
-          if (typeof cppAddress === "string") reject(new MoneroError(cppAddress));
-          else resolve(new MoneroWalletFull(cppAddress, config.getPath(), config.getPassword(), config.getFs(), config.getRejectUnauthorized(), rejectUnauthorizedFnId));
-        };
-        
-        // create wallet in wasm and invoke callback when done
-        module.create_full_wallet(JSON.stringify(config.toJson()), rejectUnauthorizedFnId, callbackFn);
-      });
-    });
-    
-    // save wallet
-    if (config.getPath()) await wallet.save();
-    return wallet;
-  }
-  
-  static async _createWalletFromKeys(config) {
-    if (config.getProxyToWorker() === undefined) config.setProxyToWorker(true);
-    if (config.getProxyToWorker()) return MoneroWalletFullProxy._createWallet(config);
-    
-    // validate and normalize params
-    MoneroNetworkType.validate(config.getNetworkType());
-    if (config.getPrimaryAddress() === undefined) config.setPrimaryAddress("");
-    if (config.getPrivateViewKey() === undefined) config.setPrivateViewKey("");
-    if (config.getPrivateSpendKey() === undefined) config.setPrivateSpendKey("");
-    let daemonConnection = config.getServer();
-    let rejectUnauthorized = daemonConnection ? daemonConnection.getRejectUnauthorized() : true;
-    if (config.getRestoreHeight() === undefined) config.setRestoreHeight(0);
-    if (config.getLanguage() === undefined) config.setLanguage("English");
-    
-    // load full wasm module
-    let module = await LibraryUtils.loadFullModule();
-    
-    // create wallet in queue
-    let wallet = await module.queueTask(async function() {
-      return new Promise(function(resolve, reject) {
-        
-        // register fn informing if unauthorized reqs should be rejected
-        let rejectUnauthorizedFnId = GenUtils.getUUID();
-        LibraryUtils.setRejectUnauthorizedFn(rejectUnauthorizedFnId, function() { return rejectUnauthorized });
-        
-        // define callback for wasm
-        let callbackFn = async function(cppAddress) {
-          if (typeof cppAddress === "string") reject(new MoneroError(cppAddress));
-          else resolve(new MoneroWalletFull(cppAddress, config.getPath(), config.getPassword(), config.getFs(), config.getRejectUnauthorized(), rejectUnauthorizedFnId));
-        };
-        
-        // create wallet in wasm and invoke callback when done
-        module.create_full_wallet(JSON.stringify(config.toJson()), rejectUnauthorizedFnId, callbackFn);
-      });
-    });
-    
-    // save wallet
-    if (config.getPath()) await wallet.save();
-    return wallet;
-  }
-  
-  static async _createWalletRandom(config) {
-    if (config.getProxyToWorker() === undefined) config.setProxyToWorker(true);
-    if (config.getProxyToWorker()) return MoneroWalletFullProxy._createWallet(config);
-    
-    // validate and normalize params
-    if (config.getLanguage() === undefined) config.setLanguage("English");
-    let daemonConnection = config.getServer();
-    let rejectUnauthorized = daemonConnection ? daemonConnection.getRejectUnauthorized() : true;
-    
-    // load wasm module
-    let module = await LibraryUtils.loadFullModule();
-    
-    // create wallet in queue
-    let wallet = await module.queueTask(async function() {
-      return new Promise(function(resolve, reject) {
-        
-        // register fn informing if unauthorized reqs should be rejected
-        let rejectUnauthorizedFnId = GenUtils.getUUID();
-        LibraryUtils.setRejectUnauthorizedFn(rejectUnauthorizedFnId, function() { return rejectUnauthorized });
-      
-        // define callback for wasm
-        let callbackFn = async function(cppAddress) {
-          if (typeof cppAddress === "string") reject(new MoneroError(cppAddress));
-          else resolve(new MoneroWalletFull(cppAddress, config.getPath(), config.getPassword(), config.getFs(), config.getRejectUnauthorized(), rejectUnauthorizedFnId));
-        };
-        
-        // create wallet in wasm and invoke callback when done
-        module.create_full_wallet(JSON.stringify(config.toJson()), rejectUnauthorizedFnId, callbackFn);
-      });
-    });
-    
-    // save wallet
-    if (config.getPath()) await wallet.save();
-    return wallet;
-  }
-  
-  static async getSeedLanguages() {
-    let module = await LibraryUtils.loadFullModule();
-    return module.queueTask(async function() {
-      return JSON.parse(module.get_keys_wallet_seed_languages()).languages;
-    });
-  }
-  
-  // --------------------------- INSTANCE METHODS -----------------------------
-  
-  /**
-   * Internal constructor which is given the memory address of a C++ wallet
-   * instance.
-   * 
-   * This method should not be called externally but should be called through
-   * static wallet creation utilities in this class.
-   * 
-   * @param {int} cppAddress - address of the wallet instance in C++
-   * @param {string} path - path of the wallet instance
-   * @param {string} password - password of the wallet instance
-   * @param {FileSystem} fs - node.js-compatible file system to read/write wallet files
-   * @param {boolean} rejectUnauthorized - specifies if unauthorized requests (e.g. self-signed certificates) should be rejected
-   * @param {string} rejectUnauthorizedFnId - unique identifier for http_client_wasm to query rejectUnauthorized
-   */
-  constructor(cppAddress, path, password, fs, rejectUnauthorized, rejectUnauthorizedFnId) {
-    super(cppAddress);
-    this._path = path;
-    this._password = password;
-    this._listeners = [];
-    this._fs = fs ? fs : (path ? MoneroWalletFull._getFs() : undefined);
-    this._isClosed = false;
-    this._fullListener = new WalletFullListener(this); // receives notifications from wasm c++
-    this._fullListenerHandle = 0;                      // memory address of the wallet listener in c++
-    this._rejectUnauthorized = rejectUnauthorized;
-    this._rejectUnauthorizedConfigId = rejectUnauthorizedFnId;
-    this._syncPeriodInMs = MoneroWalletFull.DEFAULT_SYNC_PERIOD_IN_MS;
-    let that = this;
-    LibraryUtils.setRejectUnauthorizedFn(rejectUnauthorizedFnId, function() { return that._rejectUnauthorized }); // register fn informing if unauthorized reqs should be rejected
-  }
-  
-  // ------------ WALLET METHODS SPECIFIC TO WASM IMPLEMENTATION --------------
-  
-  /**
-   * Get the maximum height of the peers the wallet's daemon is connected to.
-   *
-   * @return {number} the maximum height of the peers the wallet's daemon is connected to
-   */
-  async getDaemonMaxPeerHeight() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-      
-        // define callback for wasm
-        let callbackFn = function(resp) {
-          resolve(resp);
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.get_daemon_max_peer_height(that._cppAddress, callbackFn);
-      });
-    });
-  }
-  
-  /**
-   * Indicates if the wallet's daemon is synced with the network.
-   * 
-   * @return {boolean} true if the daemon is synced with the network, false otherwise
-   */
-  async isDaemonSynced() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-      
-        // define callback for wasm
-        let callbackFn = function(resp) {
-          resolve(resp);
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.is_daemon_synced(that._cppAddress, callbackFn);
-      });
-    });
-  }
-  
-  /**
-   * Indicates if the wallet is synced with the daemon.
-   * 
-   * @return {boolean} true if the wallet is synced with the daemon, false otherwise
-   */
-  async isSynced() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-      
-        // define callback for wasm
-        let callbackFn = function(resp) {
-          resolve(resp);
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.is_synced(that._cppAddress, callbackFn);
-      });
-    });
-  }
-  
-  /**
-   * Get the wallet's network type (mainnet, testnet, or stagenet).
-   * 
-   * @return {MoneroNetworkType} the wallet's network type
-   */
-  async getNetworkType() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.get_network_type(that._cppAddress);
-    });
-  }
-  
-  /**
-   * Get the height of the first block that the wallet scans.
-   * 
-   * @return {number} the height of the first block that the wallet scans
-   */
-  async getRestoreHeight() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.get_restore_height(that._cppAddress);
-    });
-  }
-  
-  /**
-   * Set the height of the first block that the wallet scans.
-   * 
-   * @param {number} restoreHeight - height of the first block that the wallet scans
-   */
-  async setRestoreHeight(restoreHeight) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.set_restore_height(that._cppAddress, restoreHeight);
-    });
-  }
-  
-  /**
-   * Move the wallet from its current path to the given path.
-   * 
-   * @param {string} path - the wallet's destination path
-   */
-  async moveTo(path) {
-    return MoneroWalletFull._moveTo(path, this);
-  }
-  
-  // -------------------------- COMMON WALLET METHODS -------------------------
-  
-  async addListener(listener) {
-    this._assertNotClosed();
-    assert(listener instanceof MoneroWalletListener, "Listener must be instance of MoneroWalletListener");
-    this._listeners.push(listener);
-    await this._refreshListening();
-  }
-  
-  async removeListener(listener) {
-    this._assertNotClosed();
-    let idx = this._listeners.indexOf(listener);
-    if (idx > -1) this._listeners.splice(idx, 1);
-    else throw new MoneroError("Listener is not registered with wallet");
-    await this._refreshListening();
-  }
-  
-  getListeners() {
-    this._assertNotClosed();
-    return this._listeners;
-  }
-  
-  async setDaemonConnection(uriOrRpcConnection) {
-    this._assertNotClosed();
-    
-    // normalize connection
-    let connection = !uriOrRpcConnection ? undefined : uriOrRpcConnection instanceof MoneroRpcConnection ? uriOrRpcConnection : new MoneroRpcConnection(uriOrRpcConnection);
-    let uri = connection && connection.getUri() ? connection.getUri() : "";
-    let username = connection && connection.getUsername() ? connection.getUsername() : "";
-    let password = connection && connection.getPassword() ? connection.getPassword() : "";
-    let rejectUnauthorized = connection ? connection.getRejectUnauthorized() : undefined;
-    this._rejectUnauthorized = rejectUnauthorized;  // persist locally
-    
-    // set connection in queue
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-      
-        // define callback for wasm
-        let callbackFn = function(resp) { resolve(); }
-        
-        // call wasm and invoke callback when done
-        that._module.set_daemon_connection(that._cppAddress, uri, username, password, callbackFn);
-      });
-    });
-  }
-  
-  async getDaemonConnection() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let connectionContainerStr = that._module.get_daemon_connection(that._cppAddress);
-        if (!connectionContainerStr) resolve();
-        else {
-          let jsonConnection = JSON.parse(connectionContainerStr);
-          resolve(new MoneroRpcConnection(jsonConnection.uri, jsonConnection.username, jsonConnection.password, that._rejectUnauthorized));
-        }
-      });
-    });
-  }
-  
-  async isConnectedToDaemon() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-      
-        // define callback for wasm
-        let callbackFn = function(resp) {
-          resolve(resp);
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.is_connected_to_daemon(that._cppAddress, callbackFn);
-      });
-    });
-  }
-  
-  async getVersion() {
-    this._assertNotClosed();
-    throw new MoneroError("Not implemented");
-  }
-  
-  async getPath() {
-    this._assertNotClosed();
-    return this._path;
-  }
-  
-  async getIntegratedAddress(standardAddress, paymentId) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      try {
-        let result = that._module.get_integrated_address(that._cppAddress, standardAddress ? standardAddress : "", paymentId ? paymentId : "");
-        if (result.charAt(0) !== "{") throw new MoneroError(result);
-        return new MoneroIntegratedAddress(JSON.parse(result));
-      } catch (err) {
-        if (err.message.includes("Invalid payment ID")) throw new MoneroError("Invalid payment ID: " + paymentId);
-        throw new MoneroError(err.message);
-      }
-    });
-  }
-  
-  async decodeIntegratedAddress(integratedAddress) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      try {
-        let result = that._module.decode_integrated_address(that._cppAddress, integratedAddress);
-        if (result.charAt(0) !== "{") throw new MoneroError(result);
-        return new MoneroIntegratedAddress(JSON.parse(result));
-      } catch (err) {
-        throw new MoneroError(err.message);
-      }
-    });
-  }
-  
-  async getHeight() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(resp) {
-          resolve(resp);
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.get_height(that._cppAddress, callbackFn);
-      });
-    });
-  }
-  
-  async getDaemonHeight() {
-    this._assertNotClosed();
-    if (!(await this.isConnectedToDaemon())) throw new MoneroError("Wallet is not connected to daemon");
-    
-    // schedule task
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(resp) {
-          resolve(resp);
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.get_daemon_height(that._cppAddress, callbackFn);
-      });
-    });
-  }
-  
-  async getHeightByDate(year, month, day) {
-    this._assertNotClosed();
-    if (!(await this.isConnectedToDaemon())) throw new MoneroError("Wallet is not connected to daemon");
-    
-    // schedule task
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(resp) {
-          if (typeof resp === "string") reject(new MoneroError(resp));
-          else resolve(resp);
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.get_height_by_date(that._cppAddress, year, month, day, callbackFn);
-      });
-    });
-  }
-  
-  /**
-   * Synchronize the wallet with the daemon as a one-time synchronous process.
-   * 
-   * @param {MoneroWalletListener|number} listenerOrStartHeight - listener xor start height (defaults to no sync listener, the last synced block)
-   * @param {number} startHeight - startHeight if not given in first arg (defaults to last synced block)
-   * @param {bool} allowConcurrentCalls - allow other wallet methods to be processed simultaneously during sync (default false)<br><br><b>WARNING</b>: enabling this option will crash wallet execution if another call makes a simultaneous network request. TODO: possible to sync wasm network requests in http_client_wasm.cpp? 
-   */
-  async sync(listenerOrStartHeight, startHeight, allowConcurrentCalls) {
-    this._assertNotClosed();
-    if (!(await this.isConnectedToDaemon())) throw new MoneroError("Wallet is not connected to daemon");
-    
-    // normalize params
-    startHeight = listenerOrStartHeight === undefined || listenerOrStartHeight instanceof MoneroWalletListener ? startHeight : listenerOrStartHeight;
-    let listener = listenerOrStartHeight instanceof MoneroWalletListener ? listenerOrStartHeight : undefined;
-    if (startHeight === undefined) startHeight = Math.max(await this.getHeight(), await this.getRestoreHeight());
-    
-    // register listener if given
-    if (listener) await this.addListener(listener);
-    
-    // sync wallet
-    let err;
-    let result;
-    try {
-      let that = this;
-      result = await (allowConcurrentCalls ? syncWasm() : that._module.queueTask(async function() { return syncWasm(); }));
-      function syncWasm() {
-        that._assertNotClosed();
-        return new Promise(function(resolve, reject) {
-        
-          // define callback for wasm
-          let callbackFn = async function(resp) {
-            if (resp.charAt(0) !== "{") reject(new MoneroError(resp));
-            else {
-              let respJson = JSON.parse(resp);
-              resolve(new MoneroSyncResult(respJson.numBlocksFetched, respJson.receivedMoney));
-            }
-          }
-          
-          // sync wallet in wasm and invoke callback when done
-          that._module.sync(that._cppAddress, startHeight, callbackFn);
-        });
-      }
-    } catch (e) {
-      err = e;
-    }
-    
-    // unregister listener
-    if (listener) await this.removeListener(listener);
-    
-    // throw error or return
-    if (err) throw err;
-    return result;
-  }
-  
-  async startSyncing(syncPeriodInMs) {
-    this._assertNotClosed();
-    if (!(await this.isConnectedToDaemon())) throw new MoneroError("Wallet is not connected to daemon");
-    this._syncPeriodInMs = syncPeriodInMs === undefined ? MoneroWalletFull.DEFAULT_SYNC_PERIOD_IN_MS : syncPeriodInMs;
-    let that = this;
-    if (!this._syncLooper) this._syncLooper = new TaskLooper(async function() { await that._backgroundSync(); })
-    this._syncLooper.start(this._syncPeriodInMs);
-  }
-    
-  async stopSyncing() {
-    this._assertNotClosed();
-    if (this._syncLooper) this._syncLooper.stop();
-    this._module.stop_syncing(this._cppAddress); // task is not queued so wallet stops immediately
-  }
-  
-  async scanTxs(txHashes) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = function(err) {
-          if (err) reject(new MoneroError(msg));
-          else resolve();
-        } 
-        that._module.scan_txs(that._cppAddress, JSON.stringify({txHashes: txHashes}), callbackFn);
-      });
-    });
-  }
-  
-  async rescanSpent() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = function() { resolve(); }
-        that._module.rescan_spent(that._cppAddress, callbackFn);
-      });
-    });
-  }
-  
-  async rescanBlockchain() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = function() { resolve(); }
-        that._module.rescan_blockchain(that._cppAddress, callbackFn);
-      });
-    });
-  }
-  
-  async getBalance(accountIdx, subaddressIdx) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      
-      // get balance encoded in json string
-      let balanceStr;
-      if (accountIdx === undefined) {
-        assert(subaddressIdx === undefined, "Subaddress index must be undefined if account index is undefined");
-        balanceStr = that._module.get_balance_wallet(that._cppAddress);
-      } else if (subaddressIdx === undefined) {
-        balanceStr = that._module.get_balance_account(that._cppAddress, accountIdx);
-      } else {
-        balanceStr = that._module.get_balance_subaddress(that._cppAddress, accountIdx, subaddressIdx);
-      }
-      
-      // parse json string to BigInteger
-      return BigInteger.parse(JSON.parse(GenUtils.stringifyBIs(balanceStr)).balance);
-    });
-  }
-  
-  async getUnlockedBalance(accountIdx, subaddressIdx) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      
-      // get balance encoded in json string
-      let unlockedBalanceStr;
-      if (accountIdx === undefined) {
-        assert(subaddressIdx === undefined, "Subaddress index must be undefined if account index is undefined");
-        unlockedBalanceStr = that._module.get_unlocked_balance_wallet(that._cppAddress);
-      } else if (subaddressIdx === undefined) {
-        unlockedBalanceStr = that._module.get_unlocked_balance_account(that._cppAddress, accountIdx);
-      } else {
-        unlockedBalanceStr = that._module.get_unlocked_balance_subaddress(that._cppAddress, accountIdx, subaddressIdx);
-      }
-      
-      // parse json string to BigInteger
-      return BigInteger.parse(JSON.parse(GenUtils.stringifyBIs(unlockedBalanceStr)).unlockedBalance);
-    });
-  }
-  
-  async getAccounts(includeSubaddresses, tag) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let accountsStr = that._module.get_accounts(that._cppAddress, includeSubaddresses ? true : false, tag ? tag : "");
-      let accounts = [];
-      for (let accountJson of JSON.parse(GenUtils.stringifyBIs(accountsStr)).accounts) {
-        accounts.push(MoneroWalletFull._sanitizeAccount(new MoneroAccount(accountJson)));
-      }
-      return accounts;
-    });
-  }
-  
-  async getAccount(accountIdx, includeSubaddresses) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let accountStr = that._module.get_account(that._cppAddress, accountIdx, includeSubaddresses ? true : false);
-      let accountJson = JSON.parse(GenUtils.stringifyBIs(accountStr));
-      return MoneroWalletFull._sanitizeAccount(new MoneroAccount(accountJson));
-    });
-
-  }
-  
-  async createAccount(label) {
-    if (label === undefined) label = "";
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let accountStr = that._module.create_account(that._cppAddress, label);
-      let accountJson = JSON.parse(GenUtils.stringifyBIs(accountStr));
-      return MoneroWalletFull._sanitizeAccount(new MoneroAccount(accountJson));
-    });
-  }
-  
-  async getSubaddresses(accountIdx, subaddressIndices) {
-    let args = {accountIdx: accountIdx, subaddressIndices: subaddressIndices === undefined ? [] : GenUtils.listify(subaddressIndices)};
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let subaddressesJson = JSON.parse(GenUtils.stringifyBIs(that._module.get_subaddresses(that._cppAddress, JSON.stringify(args)))).subaddresses;
-      let subaddresses = [];
-      for (let subaddressJson of subaddressesJson) subaddresses.push(MoneroWalletFull._sanitizeSubaddress(new MoneroSubaddress(subaddressJson)));
-      return subaddresses;
-    });
-  }
-  
-  async createSubaddress(accountIdx, label) {
-    if (label === undefined) label = "";
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let subaddressStr = that._module.create_subaddress(that._cppAddress, accountIdx, label);
-      let subaddressJson = JSON.parse(GenUtils.stringifyBIs(subaddressStr));
-      return MoneroWalletFull._sanitizeSubaddress(new MoneroSubaddress(subaddressJson));
-    });
-  }
-
-  async setSubaddressLabel(accountIdx, subaddressIdx, label) {
-    if (label === undefined) label = "";
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      that._module.set_subaddress_label(that._cppAddress, accountIdx, subaddressIdx, label);
-    });
-  }
-  
-  async getTxs(query) {
-    this._assertNotClosed();
-    
-    // copy and normalize query up to block
-    query = MoneroWallet._normalizeTxQuery(query);
-    
-    // schedule task
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(blocksJsonStr) {
-            
-          // check for error
-          if (blocksJsonStr.charAt(0) !== "{") {
-            reject(new MoneroError(blocksJsonStr));
-            return;
-          }
-          
-          // resolve with deserialized txs
-          try {
-            resolve(MoneroWalletFull._deserializeTxs(query, blocksJsonStr));
-          } catch (err) {
-            reject(err);
-          }
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.get_txs(that._cppAddress, JSON.stringify(query.getBlock().toJson()), callbackFn);
-      });
-    });
-  }
-  
-  async getTransfers(query) {
-    this._assertNotClosed();
-    
-    // copy and normalize query up to block
-    query = MoneroWallet._normalizeTransferQuery(query);
-    
-    // return promise which resolves on callback
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(blocksJsonStr) {
-            
-          // check for error
-          if (blocksJsonStr.charAt(0) !== "{") {
-            reject(new MoneroError(blocksJsonStr));
-            return;
-          }
-           
-          // resolve with deserialized transfers 
-          try {
-            resolve(MoneroWalletFull._deserializeTransfers(query, blocksJsonStr));
-          } catch (err) {
-            reject(err);
-          }
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.get_transfers(that._cppAddress, JSON.stringify(query.getTxQuery().getBlock().toJson()), callbackFn);
-      });
-    });
-  }
-  
-  async getOutputs(query) {
-    this._assertNotClosed();
-    
-    // copy and normalize query up to block
-    query = MoneroWallet._normalizeOutputQuery(query);
-    
-    // return promise which resolves on callback
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(blocksJsonStr) {
-          
-          // check for error
-          if (blocksJsonStr.charAt(0) !== "{") {
-            reject(new MoneroError(blocksJsonStr));
-            return;
-          }
-          
-          // resolve with deserialized outputs
-          try {
-            resolve(MoneroWalletFull._deserializeOutputs(query, blocksJsonStr));
-          } catch (err) {
-            reject(err);
-          }
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.get_outputs(that._cppAddress, JSON.stringify(query.getTxQuery().getBlock().toJson()), callbackFn);
-      });
-    });
-  }
-  
-  async exportOutputs(all) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        that._module.export_outputs(that._cppAddress, all, function(outputsHex) { resolve(outputsHex); });
-      });
-    });
-  }
-  
-  async importOutputs(outputsHex) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        that._module.import_outputs(that._cppAddress, outputsHex, function(numImported) { resolve(numImported); });
-      });
-    });
-  }
-  
-  async exportKeyImages(all) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callback = function(keyImagesStr) {
-          if (keyImagesStr.charAt(0) !== '{') reject(new MoneroError(keyImagesStr)); // json expected, else error
-          let keyImages = [];
-          for (let keyImageJson of JSON.parse(GenUtils.stringifyBIs(keyImagesStr)).keyImages) keyImages.push(new MoneroKeyImage(keyImageJson));
-          resolve(keyImages);
-        }
-        that._module.export_key_images(that._cppAddress, all, callback);
-      });
-    });
-  }
-  
-  async importKeyImages(keyImages) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callback = function(keyImageImportResultStr) {
-          resolve(new MoneroKeyImageImportResult(JSON.parse(GenUtils.stringifyBIs(keyImageImportResultStr))));
-        }
-        that._module.import_key_images(that._cppAddress, JSON.stringify({keyImages: keyImages.map(keyImage => keyImage.toJson())}), callback);
-      });
-    });
-  }
-  
-  async getNewKeyImagesFromLastImport() {
-    this._assertNotClosed();
-    throw new MoneroError("Not implemented");
-  }
-  
-  async freezeOutput(keyImage) {
-    if (!keyImage) throw new MoneroError("Must specify key image to freeze");
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = function() { resolve(); }
-        that._module.freeze_output(that._cppAddress, keyImage, callbackFn);
-      });
-    });
-  }
-  
-  async thawOutput(keyImage) {
-    if (!keyImage) throw new MoneroError("Must specify key image to thaw");
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = function() { resolve(); }
-        that._module.thaw_output(that._cppAddress, keyImage, callbackFn);
-      });
-    });
-  }
-  
-  async isOutputFrozen(keyImage) {
-    if (!keyImage) throw new MoneroError("Must specify key image to check if frozen");
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = function(result) { resolve(result); }
-        that._module.is_output_frozen(that._cppAddress, keyImage, callbackFn);
-      });
-    });
-  }
-  
-  async createTxs(config) {
-    this._assertNotClosed();
-    
-    // validate, copy, and normalize config
-    config = MoneroWallet._normalizeCreateTxsConfig(config);
-    if (config.getCanSplit() === undefined) config.setCanSplit(true);
-    
-    // return promise which resolves on callback
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(txSetJsonStr) {
-          if (txSetJsonStr.charAt(0) !== '{') reject(new MoneroError(txSetJsonStr)); // json expected, else error
-          else resolve(new MoneroTxSet(JSON.parse(GenUtils.stringifyBIs(txSetJsonStr))).getTxs());
-        }
-        
-        // create txs in wasm and invoke callback when done
-        that._module.create_txs(that._cppAddress, JSON.stringify(config.toJson()), callbackFn);
-      });
-    });
-  }
-  
-  async sweepOutput(config) {
-    this._assertNotClosed();
-    
-    // normalize and validate config
-    config = MoneroWallet._normalizeSweepOutputConfig(config);
-    
-    // return promise which resolves on callback
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(txSetJsonStr) {
-          if (txSetJsonStr.charAt(0) !== '{') reject(new MoneroError(txSetJsonStr)); // json expected, else error
-          else resolve(new MoneroTxSet(JSON.parse(GenUtils.stringifyBIs(txSetJsonStr))).getTxs()[0]);
-        }
-        
-        // sweep output in wasm and invoke callback when done
-        that._module.sweep_output(that._cppAddress, JSON.stringify(config.toJson()), callbackFn);
-      });
-    });
-  }
-
-  async sweepUnlocked(config) {
-    this._assertNotClosed();
-    
-    // validate and normalize config
-    config = MoneroWallet._normalizeSweepUnlockedConfig(config);
-    
-    // return promise which resolves on callback
-    let that = this;
-    return that._module.queueTask(async function() { // TODO: could factor this pattern out, invoked with module params and callback handler
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(txSetsJson) {
-          if (txSetsJson.charAt(0) !== '{') reject(new MoneroError(txSetsJson)); // json expected, else error
-          else {
-            let txSets = [];
-            for (let txSetJson of JSON.parse(GenUtils.stringifyBIs(txSetsJson)).txSets) txSets.push(new MoneroTxSet(txSetJson));
-            let txs = [];
-            for (let txSet of txSets) for (let tx of txSet.getTxs()) txs.push(tx);
-            resolve(txs);
-          }
-        }
-        
-        // sweep unlocked in wasm and invoke callback when done
-        that._module.sweep_unlocked(that._cppAddress, JSON.stringify(config.toJson()), callbackFn);
-      });
-    });
-  }
-  
-  async sweepDust(relay) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = function(txSetJsonStr) {
-          if (txSetJsonStr.charAt(0) !== '{') reject(new MoneroError(txSetJsonStr)); // json expected, else error
-          else {
-            let txSet = new MoneroTxSet(JSON.parse(GenUtils.stringifyBIs(txSetJsonStr)));
-            if (txSet.getTxs() === undefined) txSet.setTxs([]);
-            resolve(txSet.getTxs());
-          }
-        }
-        
-        // call wasm and invoke callback when done
-        that._module.sweep_dust(that._cppAddress, relay, callbackFn);
-      });
-    });
-  }
-  
-  async relayTxs(txsOrMetadatas) {
-    this._assertNotClosed();
-    assert(Array.isArray(txsOrMetadatas), "Must provide an array of txs or their metadata to relay");
-    let txMetadatas = [];
-    for (let txOrMetadata of txsOrMetadatas) txMetadatas.push(txOrMetadata instanceof MoneroTxWallet ? txOrMetadata.getMetadata() : txOrMetadata);
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callback = function(txHashesJson) {
-          if (txHashesJson.charAt(0) !== "{") reject(new MoneroError(txHashesJson));
-          else resolve(JSON.parse(txHashesJson).txHashes);
-        }
-        that._module.relay_txs(that._cppAddress, JSON.stringify({txMetadatas: txMetadatas}), callback);
-      });
-    });
-  }
-  
-  async describeTxSet(txSet) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      txSet = new MoneroTxSet()
-              .setUnsignedTxHex(txSet.getUnsignedTxHex())
-              .setSignedTxHex(txSet.getSignedTxHex())
-              .setMultisigTxHex(txSet.getMultisigTxHex());
-      try { return new MoneroTxSet(JSON.parse(GenUtils.stringifyBIs(that._module.describe_tx_set(that._cppAddress, JSON.stringify(txSet.toJson()))))); }
-      catch (err) { throw new MoneroError(that._module.get_exception_message(err)); }
-    });
-  }
-  
-  async signTxs(unsignedTxHex) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      try { return that._module.sign_txs(that._cppAddress, unsignedTxHex); }
-      catch (err) { throw new MoneroError(that._module.get_exception_message(err)); }
-    });
-  }
-  
-  async submitTxs(signedTxHex) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = function(resp) {
-          if (resp.charAt(0) !== "{") reject(new MoneroError(resp));
-          else resolve(JSON.parse(resp).txHashes);
-        }
-        that._module.submit_txs(that._cppAddress, signedTxHex, callbackFn);
-      });
-    });
-  }
-  
-  async signMessage(message, signatureType, accountIdx, subaddressIdx) {
-    
-    // assign defaults
-    signatureType = signatureType || MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY;
-    accountIdx = accountIdx || 0;
-    subaddressIdx = subaddressIdx || 0;
-    
-    // queue task to sign message
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      try { return that._module.sign_message(that._cppAddress, message, signatureType === MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY ? 0 : 1, accountIdx, subaddressIdx); }
-      catch (err) { throw new MoneroError(that._module.get_exception_message(err)); }
-    });
-  }
-  
-  async verifyMessage(message, address, signature) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let resultJson;
-      try {
-        resultJson = JSON.parse(that._module.verify_message(that._cppAddress, message, address, signature));
-      } catch (err) {
-        resultJson = {isGood: false};
-      }
-      let result = new MoneroMessageSignatureResult(
-        resultJson.isGood,
-        !resultJson.isGood ? undefined : resultJson.isOld,
-        !resultJson.isGood ? undefined : resultJson.signatureType === "spend" ? MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY : MoneroMessageSignatureType.SIGN_WITH_VIEW_KEY,
-        !resultJson.isGood ? undefined : resultJson.version);
-      return result;
-    });
-  }
-  
-  async getTxKey(txHash) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      try { return that._module.get_tx_key(that._cppAddress, txHash); }
-      catch (err) { throw new MoneroError(that._module.get_exception_message(err)); }
-    });
-  }
-  
-  async checkTxKey(txHash, txKey, address) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed(); 
-      return new Promise(function(resolve, reject) {
-        that._module.check_tx_key(that._cppAddress, txHash, txKey, address, function(respJsonStr) {
-          if (respJsonStr.charAt(0) !== "{") reject(new MoneroError(respJsonStr));
-          else resolve(new MoneroCheckTx(JSON.parse(GenUtils.stringifyBIs(respJsonStr))));
-        });
-      });
-    });
-  }
-  
-  async getTxProof(txHash, address, message) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        that._module.get_tx_proof(that._cppAddress, txHash || "", address || "", message || "", function(signature) {
-          let errorKey = "error: ";
-          if (signature.indexOf(errorKey) === 0) reject(new MoneroError(signature.substring(errorKey.length)));
-          else resolve(signature);
-        });
-      });
-    });
-  }
-  
-  async checkTxProof(txHash, address, message, signature) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed(); 
-      return new Promise(function(resolve, reject) {
-        that._module.check_tx_proof(that._cppAddress, txHash || "", address || "", message || "", signature || "", function(respJsonStr) {
-          if (respJsonStr.charAt(0) !== "{") reject(new MoneroError(respJsonStr));
-          else resolve(new MoneroCheckTx(JSON.parse(GenUtils.stringifyBIs(respJsonStr))));
-        });
-      });
-    });
-  }
-  
-  async getSpendProof(txHash, message) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        that._module.get_spend_proof(that._cppAddress, txHash || "", message || "", function(signature) {
-          let errorKey = "error: ";
-          if (signature.indexOf(errorKey) === 0) reject(new MoneroError(signature.substring(errorKey.length)));
-          else resolve(signature);
-        });
-      });
-    });
-  }
-  
-  async checkSpendProof(txHash, message, signature) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed(); 
-      return new Promise(function(resolve, reject) {
-        that._module.check_spend_proof(that._cppAddress, txHash || "", message || "", signature || "", function(resp) {
-          typeof resp === "string" ? reject(new MoneroError(resp)) : resolve(resp);
-        });
-      });
-    });
-  }
-  
-  async getReserveProofWallet(message) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        that._module.get_reserve_proof_wallet(that._cppAddress, message, function(signature) {
-          let errorKey = "error: ";
-          if (signature.indexOf(errorKey) === 0) reject(new MoneroError(signature.substring(errorKey.length), -1));
-          else resolve(signature);
-        });
-      });
-    });
-  }
-  
-  async getReserveProofAccount(accountIdx, amount, message) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        that._module.get_reserve_proof_account(that._cppAddress, accountIdx, amount.toString(), message, function(signature) {
-          let errorKey = "error: ";
-          if (signature.indexOf(errorKey) === 0) reject(new MoneroError(signature.substring(errorKey.length), -1));
-          else resolve(signature);
-        });
-      });
-    });
-  }
-
-  async checkReserveProof(address, message, signature) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed(); 
-      return new Promise(function(resolve, reject) {
-        that._module.check_reserve_proof(that._cppAddress, address, message, signature, function(respJsonStr) {
-          if (respJsonStr.charAt(0) !== "{") reject(new MoneroError(respJsonStr, -1));
-          else resolve(new MoneroCheckReserve(JSON.parse(GenUtils.stringifyBIs(respJsonStr))));
-        });
-      });
-    });
-  }
-  
-  async getTxNotes(txHashes) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      try { return JSON.parse(that._module.get_tx_notes(that._cppAddress, JSON.stringify({txHashes: txHashes}))).txNotes; }
-      catch (err) { throw new MoneroError(that._module.get_exception_message(err)); }
-    });
-  }
-  
-  async setTxNotes(txHashes, notes) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      try { that._module.set_tx_notes(that._cppAddress, JSON.stringify({txHashes: txHashes, txNotes: notes})); }
-      catch (err) { throw new MoneroError(that._module.get_exception_message(err)); }
-    });
-  }
-  
-  async getAddressBookEntries(entryIndices) {
-    if (!entryIndices) entryIndices = [];
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let entries = [];
-      for (let entryJson of JSON.parse(that._module.get_address_book_entries(that._cppAddress, JSON.stringify({entryIndices: entryIndices}))).entries) {
-        entries.push(new MoneroAddressBookEntry(entryJson));
-      }
-      return entries;
-    });
-  }
-  
-  async addAddressBookEntry(address, description) {
-    if (!address) address = "";
-    if (!description) description = "";
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.add_address_book_entry(that._cppAddress, address, description);
-    });
-  }
-  
-  async editAddressBookEntry(index, setAddress, address, setDescription, description) {
-    if (!setAddress) setAddress = false;
-    if (!address) address = "";
-    if (!setDescription) setDescription = false;
-    if (!description) description = "";
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      that._module.edit_address_book_entry(that._cppAddress, index, setAddress, address, setDescription, description);
-    });
-  }
-  
-  async deleteAddressBookEntry(entryIdx) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      that._module.delete_address_book_entry(that._cppAddress, entryIdx);
-    });
-  }
-  
-  async tagAccounts(tag, accountIndices) {
-    if (!tag) tag = "";
-    if (!accountIndices) accountIndices = [];
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      that._module.tag_accounts(that._cppAddress, JSON.stringify({tag: tag, accountIndices: accountIndices}));
-    });
-  }
-
-  async untagAccounts(accountIndices) {
-    if (!accountIndices) accountIndices = [];
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      that._module.tag_accounts(that._cppAddress, JSON.stringify({accountIndices: accountIndices}));
-    });
-  }
-  
-  async getAccountTags() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let accountTags = [];
-      for (let accountTagJson of JSON.parse(that._module.get_account_tags(that._cppAddress)).accountTags) accountTags.push(new MoneroAccountTag(accountTagJson));
-      return accountTags;
-    });
-  }
-
-  async setAccountTagLabel(tag, label) {
-    if (!tag) tag = "";
-    if (!llabel) label = "";
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      that._module.set_account_tag_label(that._cppAddress, tag, label);
-    });
-  }
-  
-  async getPaymentUri(config) {
-    config = MoneroWallet._normalizeCreateTxsConfig(config);
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      try {
-        return that._module.get_payment_uri(that._cppAddress, JSON.stringify(config.toJson()));
-      } catch (err) {
-        throw new MoneroError("Cannot make URI from supplied parameters");
-      }
-    });
-  }
-  
-  async parsePaymentUri(uri) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      try {
-        return new MoneroTxConfig(JSON.parse(GenUtils.stringifyBIs(that._module.parse_payment_uri(that._cppAddress, uri))), true); // relax validation for unquoted big integers
-      } catch (err) {
-        throw new MoneroError(err.message);
-      }
-    });
-  }
-  
-  async getAttribute(key) {
-    this._assertNotClosed();
-    assert(typeof key === "string", "Attribute key must be a string");
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let value = that._module.get_attribute(that._cppAddress, key);
-      return value === "" ? null : value;
-    });
-  }
-  
-  async setAttribute(key, val) {
-    this._assertNotClosed();
-    assert(typeof key === "string", "Attribute key must be a string");
-    assert(typeof val === "string", "Attribute value must be a string");
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      that._module.set_attribute(that._cppAddress, key, val);
-    });
-  }
-  
-  async startMining(numThreads, backgroundMining, ignoreBattery) {
-    this._assertNotClosed();
-    let daemon = new MoneroDaemonRpc(Object.assign((await this.getDaemonConnection()).getConfig(), {proxyToWorker: false}));
-    await daemon.startMining(await this.getPrimaryAddress(), numThreads, backgroundMining, ignoreBattery);
-  }
-  
-  async stopMining() {
-    this._assertNotClosed();
-    let daemon = new MoneroDaemonRpc(Object.assign((await this.getDaemonConnection()).getConfig(), {proxyToWorker: false}));
-    await daemon.stopMining();
-  }
-  
-  async isMultisigImportNeeded() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.is_multisig_import_needed(that._cppAddress);
-    });
-  }
-  
-  async isMultisig() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.is_multisig(that._cppAddress);
-    });
-  }
-  
-  async getMultisigInfo() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new MoneroMultisigInfo(JSON.parse(that._module.get_multisig_info(that._cppAddress)));
-    });
-  }
-  
-  async prepareMultisig() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.prepare_multisig(that._cppAddress);
-    });
-  }
-  
-  async makeMultisig(multisigHexes, threshold, password) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        that._module.make_multisig(that._cppAddress, JSON.stringify({multisigHexes: multisigHexes, threshold: threshold, password: password}), (resp) => {
-          let errorKey = "error: ";
-          if (resp.indexOf(errorKey) === 0) reject(new MoneroError(resp.substring(errorKey.length)));
-          else resolve(resp);
-        });
-      });
-    });
-  }
-  
-  async exchangeMultisigKeys(multisigHexes, password) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        that._module.exchange_multisig_keys(that._cppAddress, JSON.stringify({multisigHexes: multisigHexes, password: password}), (resp) => {
-          let errorKey = "error: ";
-          if (resp.indexOf(errorKey) === 0) reject(new MoneroError(resp.substring(errorKey.length)));
-          else resolve(new MoneroMultisigInitResult(JSON.parse(resp)));
-        });
-      });
-    });
-  }
-  
-  async exportMultisigHex() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.export_multisig_hex(that._cppAddress);
-    });
-  }
-  
-  async importMultisigHex(multisigHexes) {
-    if (!GenUtils.isArray(multisigHexes)) throw new MoneroError("Must provide string[] to importMultisigHex()")
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = function(resp) {
-          if (typeof resp === "string") reject(new MoneroError(resp));
-          else resolve(resp);
-        }
-        that._module.import_multisig_hex(that._cppAddress, JSON.stringify({multisigHexes: multisigHexes}), callbackFn);
-      });
-    });
-  }
-  
-  async signMultisigTxHex(multisigTxHex) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = async function(resp) {
-          if (resp.charAt(0) !== "{") reject(new MoneroError(resp));
-          else resolve(new MoneroMultisigSignResult(JSON.parse(resp)));
-        }
-        that._module.sign_multisig_tx_hex(that._cppAddress, multisigTxHex, callbackFn)
-      });
-    });
-  }
-  
-  async submitMultisigTxHex(signedMultisigTxHex) {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        let callbackFn = function(resp) { 
-          if (resp.charAt(0) !== "{") reject(new MoneroError(resp));
-          else resolve(JSON.parse(resp).txHashes);
-        }
-        that._module.submit_multisig_tx_hex(that._cppAddress, signedMultisigTxHex, callbackFn);
-      });
-    });
-  }
-  
-  /**
-   * Get the wallet's keys and cache data.
-   * 
-   * @return {DataView[]} is the keys and cache data, respectively
-   */
-  async getData() {
-    this._assertNotClosed();
-    
-    // queue call to wasm module
-    let viewOnly = await this.isViewOnly();
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      
-      // store views in array
-      let views = [];
-      
-      // malloc cache buffer and get buffer location in c++ heap
-      let cacheBufferLoc = JSON.parse(that._module.get_cache_file_buffer(that._cppAddress));
-      
-      // read binary data from heap to DataView
-      let view = new DataView(new ArrayBuffer(cacheBufferLoc.length));
-      for (let i = 0; i < cacheBufferLoc.length; i++) {
-        view.setInt8(i, that._module.HEAPU8[cacheBufferLoc.pointer / Uint8Array.BYTES_PER_ELEMENT + i]);
-      }
-      
-      // free binary on heap
-      that._module._free(cacheBufferLoc.pointer);
-      
-      // write cache file
-      views.push(Buffer.from(view.buffer));
-      
-      // malloc keys buffer and get buffer location in c++ heap
-      let keysBufferLoc = JSON.parse(that._module.get_keys_file_buffer(that._cppAddress, that._password, viewOnly));
-      
-      // read binary data from heap to DataView
-      view = new DataView(new ArrayBuffer(keysBufferLoc.length));
-      for (let i = 0; i < keysBufferLoc.length; i++) {
-        view.setInt8(i, that._module.HEAPU8[keysBufferLoc.pointer / Uint8Array.BYTES_PER_ELEMENT + i]);
-      }
-      
-      // free binary on heap
-      that._module._free(keysBufferLoc.pointer);
-      
-      // prepend keys file
-      views.unshift(Buffer.from(view.buffer));
-      return views;
-    });
-  }
-  
-  async changePassword(oldPassword, newPassword) {
-    if (oldPassword !== this._password) throw new MoneroError("Invalid original password."); // wallet2 verify_password loads from disk so verify password here
-    if (newPassword === undefined) newPassword = "";
-    let that = this;
-    await that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return new Promise(function(resolve, reject) {
-        that._module.change_wallet_password(that._cppAddress, oldPassword, newPassword, async function(errMsg) {
-          if (errMsg) reject(new MoneroError(errMsg));
-          else resolve();
-        });
-      });
-    });
-    this._password = newPassword;
-    if (this._path) await this.save(); // auto save
-  }
-  
-  async save() {
-    return MoneroWalletFull._save(this);
-  }
-  
-  async close(save) {
-    if (this._isClosed) return; // no effect if closed
-    await this._refreshListening();
-    await this.stopSyncing();
-    await super.close(save);
-    delete this._path;
-    delete this._password;
-    delete this._listeners;
-    delete this._fullListener;
-    LibraryUtils.setRejectUnauthorizedFn(this._rejectUnauthorizedConfigId, undefined); // unregister fn informing if unauthorized reqs should be rejected
-  }
-  
-  // ----------- ADD JSDOC FOR SUPPORTED DEFAULT IMPLEMENTATIONS --------------
-  
-  async getNumBlocksToUnlock() { return super.getNumBlocksToUnlock(...arguments); }
-  async getTx() { return super.getTx(...arguments); }
-  async getIncomingTransfers() { return super.getIncomingTransfers(...arguments); }
-  async getOutgoingTransfers() { return super.getOutgoingTransfers(...arguments); }
-  async createTx() { return super.createTx(...arguments); }
-  async relayTx() { return super.relayTx(...arguments); }
-  async getTxNote() { return super.getTxNote(...arguments); }
-  async setTxNote() { return super.setTxNote(...arguments); }
-  
-  // ---------------------------- PRIVATE HELPERS ----------------------------
-  
-  static _getFs() {
-    if (!MoneroWalletFull.FS) MoneroWalletFull.FS = GenUtils.isBrowser() ? undefined : require('fs');
-    return MoneroWalletFull.FS;
-  }
-  
-  static async _openWalletData(path, password, networkType, keysData, cacheData, daemonUriOrConnection, proxyToWorker, fs) {
-    if (proxyToWorker) return MoneroWalletFullProxy.openWalletData(path, password, networkType, keysData, cacheData, daemonUriOrConnection, fs);
-    
-    // validate and normalize parameters
-    if (networkType === undefined) throw new MoneroError("Must provide the wallet's network type");
-    MoneroNetworkType.validate(networkType);
-    let daemonConnection = typeof daemonUriOrConnection === "string" ? new MoneroRpcConnection(daemonUriOrConnection) : daemonUriOrConnection;
-    let daemonUri = daemonConnection && daemonConnection.getUri() ? daemonConnection.getUri() : "";
-    let daemonUsername = daemonConnection && daemonConnection.getUsername() ? daemonConnection.getUsername() : "";
-    let daemonPassword = daemonConnection && daemonConnection.getPassword() ? daemonConnection.getPassword() : "";
-    let rejectUnauthorized = daemonConnection ? daemonConnection.getRejectUnauthorized() : true;
-    
-    // load wasm module
-    let module = await LibraryUtils.loadFullModule();
-    
-    // open wallet in queue
-    return module.queueTask(async function() {
-      return new Promise(function(resolve, reject) {
-        
-        // register fn informing if unauthorized reqs should be rejected
-        let rejectUnauthorizedFnId = GenUtils.getUUID();
-        LibraryUtils.setRejectUnauthorizedFn(rejectUnauthorizedFnId, function() { return rejectUnauthorized });
-      
-        // define callback for wasm
-        let callbackFn = async function(cppAddress) {
-          if (typeof cppAddress === "string") reject(new MoneroError(cppAddress));
-          else resolve(new MoneroWalletFull(cppAddress, path, password, fs, rejectUnauthorized, rejectUnauthorizedFnId));
-        };
-        
-        // create wallet in wasm and invoke callback when done
-        module.open_wallet_full(password, networkType, keysData, cacheData, daemonUri, daemonUsername, daemonPassword, rejectUnauthorizedFnId, callbackFn);
-      });
-    });
-  }
-  
-  async _backgroundSync() {
-    let label = this._path ? this._path : (this._browserMainPath ? this._browserMainPath : "in-memory wallet"); // label for log
-    LibraryUtils.log(1, "Background synchronizing " + label);
-    try { await this.sync(); }
-    catch (err) { if (!this._isClosed) console.error("Failed to background synchronize " + label + ": " + err.message); }
-  }
-  
-  async _refreshListening() {
-    let isEnabled = this._listeners.length > 0;
-    let that = this;
-    if (that._fullListenerHandle === 0 && !isEnabled || that._fullListenerHandle > 0 && isEnabled) return; // no difference
-    return that._module.queueTask(async function() {
-      return new Promise(function(resolve, reject) {
-        that._module.set_listener(
-            that._cppAddress,
-            that._fullListenerHandle,
-            newListenerHandle => {
-              if (typeof newListenerHandle === "string") reject(new MoneroError(newListenerHandle));
-              else {
-                that._fullListenerHandle = newListenerHandle;
-                resolve();
-              }
-            },
-            isEnabled ? async function(height, startHeight, endHeight, percentDone, message) { await that._fullListener.onSyncProgress(height, startHeight, endHeight, percentDone, message); } : undefined,
-            isEnabled ? async function(height) { await that._fullListener.onNewBlock(height); } : undefined,
-            isEnabled ? async function(newBalanceStr, newUnlockedBalanceStr) { await that._fullListener.onBalancesChanged(newBalanceStr, newUnlockedBalanceStr); } : undefined,
-            isEnabled ? async function(height, txHash, amountStr, accountIdx, subaddressIdx, version, unlockTime, isLocked) { await that._fullListener.onOutputReceived(height, txHash, amountStr, accountIdx, subaddressIdx, version, unlockTime, isLocked); } : undefined,
-            isEnabled ? async function(height, txHash, amountStr, accountIdxStr, subaddressIdxStr, version, unlockTime, isLocked) { await that._fullListener.onOutputSpent(height, txHash, amountStr, accountIdxStr, subaddressIdxStr, version, unlockTime, isLocked); } : undefined,
-        );
-      });
-    });
-  }
-  
-  static _sanitizeBlock(block) {
-    for (let tx of block.getTxs()) MoneroWalletFull._sanitizeTxWallet(tx);
-    return block;
-  }
-  
-  static _sanitizeTxWallet(tx) {
-    assert(tx instanceof MoneroTxWallet);
-    return tx;
-  }
-  
-  static _sanitizeAccount(account) {
-    if (account.getSubaddresses()) {
-      for (let subaddress of account.getSubaddresses()) MoneroWalletFull._sanitizeSubaddress(subaddress);
-    }
-    return account;
-  }
-  
-  static _sanitizeSubaddress(subaddress) {
-    if (subaddress.getLabel() === "") subaddress.setLabel(undefined);
-    return subaddress
-  }
-  
-  static _deserializeBlocks(blocksJsonStr) {
-    let blocksJson = JSON.parse(GenUtils.stringifyBIs(blocksJsonStr));
-    let deserializedBlocks = {};
-    deserializedBlocks.blocks = [];
-    if (blocksJson.blocks) for (let blockJson of blocksJson.blocks) deserializedBlocks.blocks.push(MoneroWalletFull._sanitizeBlock(new MoneroBlock(blockJson, MoneroBlock.DeserializationType.TX_WALLET)));
-    return deserializedBlocks;
-  }
-  
-  static _deserializeTxs(query, blocksJsonStr) {
-    
-    // deserialize blocks
-    let deserializedBlocks = MoneroWalletFull._deserializeBlocks(blocksJsonStr);
-    let blocks = deserializedBlocks.blocks;
-    
-    // collect txs
-    let txs = [];
-    for (let block of blocks) {
-      MoneroWalletFull._sanitizeBlock(block);
-      for (let tx of block.getTxs()) {
-        if (block.getHeight() === undefined) tx.setBlock(undefined); // dereference placeholder block for unconfirmed txs
-        txs.push(tx);
-      }
-    }
-    
-    // re-sort txs which is lost over wasm serialization  // TODO: confirm that order is lost
-    if (query.getHashes() !== undefined) {
-      let txMap = new Map();
-      for (let tx of txs) txMap[tx.getHash()] = tx;
-      let txsSorted = [];
-      for (let txHash of query.getHashes()) if (txMap[txHash] !== undefined) txsSorted.push(txMap[txHash]);
-      txs = txsSorted;
-    }
-    
-    return txs;
-  }
-  
-  static _deserializeTransfers(query, blocksJsonStr) {
-    
-    // deserialize blocks
-    let deserializedBlocks = MoneroWalletFull._deserializeBlocks(blocksJsonStr);
-    let blocks = deserializedBlocks.blocks;
-    
-    // collect transfers
-    let transfers = [];
-    for (let block of blocks) {
-      for (let tx of block.getTxs()) {
-        if (block.getHeight() === undefined) tx.setBlock(undefined); // dereference placeholder block for unconfirmed txs
-        if (tx.getOutgoingTransfer() !== undefined) transfers.push(tx.getOutgoingTransfer());
-        if (tx.getIncomingTransfers() !== undefined) {
-          for (let transfer of tx.getIncomingTransfers()) transfers.push(transfer);
-        }
-      }
-    }
-    
-    return transfers;
-  }
-  
-  static _deserializeOutputs(query, blocksJsonStr) {
-    
-    // deserialize blocks
-    let deserializedBlocks = MoneroWalletFull._deserializeBlocks(blocksJsonStr);
-    let blocks = deserializedBlocks.blocks;
-    
-    // collect outputs
-    let outputs = [];
-    for (let block of blocks) {
-      for (let tx of block.getTxs()) {
-        for (let output of tx.getOutputs()) outputs.push(output);
-      }
-    }
-    
-    return outputs;
-  }
-  
-  /**
-   * Set the path of the wallet on the browser main thread if run as a worker.
-   * 
-   * @param {string} browserMainPath - path of the wallet on the browser main thread
-   */
-  _setBrowserMainPath(browserMainPath) {
-    this._browserMainPath = browserMainPath;
-  }
-  
-  static async _moveTo(path, wallet) {
-    if (await wallet.isClosed()) throw new MoneroError("Wallet is closed");
-    if (!path) throw new MoneroError("Must provide path of destination wallet");
-    
-    // save and return if same path
-    const Path = require("path");
-    if (Path.normalize(wallet._path) === Path.normalize(path)) {
-      await wallet.save();
-      return;
-    }
-    
-    // create destination directory if it doesn't exist
-    let walletDir = Path.dirname(path);
-    if (!wallet._fs.existsSync(walletDir)) {
-      try { wallet._fs.mkdirSync(walletDir); }
-      catch (err) { throw new MoneroError("Destination path " + path + " does not exist and cannot be created: " + err.message); }
-    }
-    
-    // write wallet files
-    let data = await wallet.getData();
-    wallet._fs.writeFileSync(path + ".keys", data[0], "binary");
-    wallet._fs.writeFileSync(path, data[1], "binary");
-    wallet._fs.writeFileSync(path + ".address.txt", await wallet.getPrimaryAddress());
-    let oldPath = wallet._path;
-    wallet._path = path;
-    
-    // delete old wallet files
-    if (oldPath) {
-      wallet._fs.unlinkSync(oldPath + ".address.txt");
-      wallet._fs.unlinkSync(oldPath + ".keys");
-      wallet._fs.unlinkSync(oldPath);
-    }
-  }
-  
-  static async _save(wallet) {
-    if (await wallet.isClosed()) throw new MoneroError("Wallet is closed");
-        
-    // path must be set
-    let path = await wallet.getPath();
-    if (!path) throw new MoneroError("Cannot save wallet because path is not set");
-    
-    // write wallet files to *.new
-    let pathNew = path + ".new";
-    let data = await wallet.getData();
-    wallet._fs.writeFileSync(pathNew + ".keys", data[0], "binary");
-    wallet._fs.writeFileSync(pathNew, data[1], "binary");
-    wallet._fs.writeFileSync(pathNew + ".address.txt", await wallet.getPrimaryAddress());
-    
-    // replace old wallet files with new
-    wallet._fs.renameSync(pathNew + ".keys", path + ".keys");
-    wallet._fs.renameSync(pathNew, path, path + ".keys");
-    wallet._fs.renameSync(pathNew + ".address.txt", path + ".address.txt", path + ".keys");
-  }
-}
-
-/**
- * Implements a MoneroWallet by proxying requests to a worker which runs a full wallet.
- * 
- * TODO: sort these methods according to master sort in MoneroWallet.js
- * TODO: probably only allow one listener to worker then propogate to registered listeners for performance
- * TODO: ability to recycle worker for use in another wallet
- * TODO: using LibraryUtils.WORKER_OBJECTS directly breaks encapsulation
- * 
- * @private
- */
-class MoneroWalletFullProxy extends MoneroWallet {
-  
-  // -------------------------- WALLET STATIC UTILS ---------------------------
-  
-  static async openWalletData(path, password, networkType, keysData, cacheData, daemonUriOrConnection, fs) {
-    let walletId = GenUtils.getUUID();
-    if (password === undefined) password = "";
-    let daemonUriOrConfig = daemonUriOrConnection instanceof MoneroRpcConnection ? daemonUriOrConnection.getConfig() : daemonUriOrConnection;
-    await LibraryUtils.invokeWorker(walletId, "openWalletData", [path, password, networkType, keysData, cacheData, daemonUriOrConfig]);
-    let wallet = new MoneroWalletFullProxy(walletId, await LibraryUtils.getWorker(), path, fs);
-    if (path) await wallet.save();
-    return wallet;
-  }
-  
-  static async _createWallet(config) {
-    if (config.getPath() && MoneroWalletFull.walletExists(config.getPath(), config.getFs())) throw new MoneroError("Wallet already exists: " + path);
-    let walletId = GenUtils.getUUID();
-    await LibraryUtils.invokeWorker(walletId, "_createWallet", [config.toJson()]);
-    let wallet = new MoneroWalletFullProxy(walletId, await LibraryUtils.getWorker(), config.getPath(), config.getFs());
-    if (config.getPath()) await wallet.save();
-    return wallet;
-  }
-  
-  // --------------------------- INSTANCE METHODS ----------------------------
-  
-  /**
-   * Internal constructor which is given a worker to communicate with via messages.
-   * 
-   * This method should not be called externally but should be called through
-   * static wallet creation utilities in this class.
-   * 
-   * @param {string} walletId - identifies the wallet with the worker
-   * @param {Worker} worker - worker to communicate with via messages
-   */
-  constructor(walletId, worker, path, fs) {
-    super();
-    this._walletId = walletId;
-    this._worker = worker;
-    this._path = path;
-    this._fs = fs ? fs : (path ? MoneroWalletFull._getFs() : undefined);
-    this._wrappedListeners = [];
-  }
-  
-  async isViewOnly() {
-    return this._invokeWorker("isViewOnly");
-  }
-  
-  async getNetworkType() {
-    return this._invokeWorker("getNetworkType");
-  }
-  
-  async getVersion() {
-    throw new MoneroError("Not implemented");
-  }
-  
-  getPath() {
-    return this._path;
-  }
-  
-  async getSeed() {
-    return this._invokeWorker("getSeed");
-  }
-  
-  async getSeedLanguage() {
-    return this._invokeWorker("getSeedLanguage");
-  }
-  
-  async getSeedLanguages() {
-    return this._invokeWorker("getSeedLanguages");
-  }
-  
-  async getPrivateSpendKey() {
-    return this._invokeWorker("getPrivateSpendKey");
-  }
-  
-  async getPrivateViewKey() {
-    return this._invokeWorker("getPrivateViewKey");
-  }
-  
-  async getPublicViewKey() {
-    return this._invokeWorker("getPublicViewKey");
-  }
-  
-  async getPublicSpendKey() {
-    return this._invokeWorker("getPublicSpendKey");
-  }
-  
-  async getAddress(accountIdx, subaddressIdx) {
-    return this._invokeWorker("getAddress", Array.from(arguments));
-  }
-  
-  async getAddressIndex(address) {
-    let subaddressJson = await this._invokeWorker("getAddressIndex", Array.from(arguments));
-    return MoneroWalletFull._sanitizeSubaddress(new MoneroSubaddress(subaddressJson));
-  }
-
-  async setSubaddressLabel(accountIdx, subaddressIdx, label) {
-    return this._invokeWorker("setSubaddressLabel", Array.from(arguments));
-  }
-  
-  async getIntegratedAddress(standardAddress, paymentId) {
-    return new MoneroIntegratedAddress(await this._invokeWorker("getIntegratedAddress", Array.from(arguments)));
-  }
-  
-  async decodeIntegratedAddress(integratedAddress) {
-    return new MoneroIntegratedAddress(await this._invokeWorker("decodeIntegratedAddress", Array.from(arguments)));
-  }
-  
-  async setDaemonConnection(uriOrRpcConnection) {
-    if (!uriOrRpcConnection) await this._invokeWorker("setDaemonConnection");
-    else {
-      let connection = !uriOrRpcConnection ? undefined : uriOrRpcConnection instanceof MoneroRpcConnection ? uriOrRpcConnection : new MoneroRpcConnection(uriOrRpcConnection);
-      await this._invokeWorker("setDaemonConnection", connection ? connection.getConfig() : undefined);
-    }
-  }
-  
-  async getDaemonConnection() {
-    let rpcConfig = await this._invokeWorker("getDaemonConnection");
-    return rpcConfig ? new MoneroRpcConnection(rpcConfig) : undefined;
-  }
-  
-  async isConnectedToDaemon() {
-    return this._invokeWorker("isConnectedToDaemon");
-  }
-  
-  async getRestoreHeight() {
-    return this._invokeWorker("getRestoreHeight");
-  }
-  
-  async setRestoreHeight(restoreHeight) {
-    return this._invokeWorker("setRestoreHeight", [restoreHeight]);
-  }
-  
-  async getDaemonHeight() {
-    return this._invokeWorker("getDaemonHeight");
-  }
-  
-  async getDaemonMaxPeerHeight() {
-    return this._invokeWorker("getDaemonMaxPeerHeight");
-  }
-  
-  async getHeightByDate(year, month, day) {
-    return this._invokeWorker("getHeightByDate", [year, month, day]);
-  }
-  
-  async isDaemonSynced() {
-    return this._invokeWorker("isDaemonSynced");
-  }
-  
-  async getHeight() {
-    return this._invokeWorker("getHeight");
-  }
-  
-  async addListener(listener) {
-    let wrappedListener = new WalletWorkerListener(listener);
-    let listenerId = wrappedListener.getId();
-    LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onSyncProgress_" + listenerId] = [wrappedListener.onSyncProgress, wrappedListener];
-    LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onNewBlock_" + listenerId] = [wrappedListener.onNewBlock, wrappedListener];
-    LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onBalancesChanged_" + listenerId] = [wrappedListener.onBalancesChanged, wrappedListener];
-    LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onOutputReceived_" + listenerId] = [wrappedListener.onOutputReceived, wrappedListener];
-    LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onOutputSpent_" + listenerId] = [wrappedListener.onOutputSpent, wrappedListener];
-    this._wrappedListeners.push(wrappedListener);
-    return this._invokeWorker("addListener", [listenerId]);
-  }
-  
-  async removeListener(listener) {
-    for (let i = 0; i < this._wrappedListeners.length; i++) {
-      if (this._wrappedListeners[i].getListener() === listener) {
-        let listenerId = this._wrappedListeners[i].getId();
-        await this._invokeWorker("removeListener", [listenerId]);
-        delete LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onSyncProgress_" + listenerId];
-        delete LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onNewBlock_" + listenerId];
-        delete LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onBalancesChanged_" + listenerId];
-        delete LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onOutputReceived_" + listenerId];
-        delete LibraryUtils.WORKER_OBJECTS[this._walletId].callbacks["onOutputSpent_" + listenerId];
-        this._wrappedListeners.splice(i, 1);
-        return;
-      }
-    }
-    throw new MoneroError("Listener is not registered with wallet");
-  }
-  
-  getListeners() {
-    let listeners = [];
-    for (let wrappedListener of this._wrappedListeners) listeners.push(wrappedListener.getListener());
-    return listeners;
-  }
-  
-  async isSynced() {
-    return this._invokeWorker("isSynced");
-  }
-  
-  async sync(listenerOrStartHeight, startHeight, allowConcurrentCalls) {
-    
-    // normalize params
-    startHeight = listenerOrStartHeight instanceof MoneroWalletListener ? startHeight : listenerOrStartHeight;
-    let listener = listenerOrStartHeight instanceof MoneroWalletListener ? listenerOrStartHeight : undefined;
-    if (startHeight === undefined) startHeight = Math.max(await this.getHeight(), await this.getRestoreHeight());
-    
-    // register listener if given
-    if (listener) await this.addListener(listener);
-    
-    // sync wallet in worker 
-    let err;
-    let result;
-    try {
-      let resultJson = await this._invokeWorker("sync", [startHeight, allowConcurrentCalls]);
-      result = new MoneroSyncResult(resultJson.numBlocksFetched, resultJson.receivedMoney);
-    } catch (e) {
-      err = e;
-    }
-    
-    // unregister listener
-    if (listener) await this.removeListener(listener);
-    
-    // throw error or return
-    if (err) throw err;
-    return result;
-  }
-  
-  async startSyncing(syncPeriodInMs) {
-    return this._invokeWorker("startSyncing", Array.from(arguments));
-  }
-    
-  async stopSyncing() {
-    return this._invokeWorker("stopSyncing");
-  }
-  
-  async scanTxs(txHashes) {
-    assert(Array.isArray(txHashes), "Must provide an array of txs hashes to scan");
-    return this._invokeWorker("scanTxs", [txHashes]);
-  }
-  
-  async rescanSpent() {
-    return this._invokeWorker("rescanSpent");
-  }
-    
-  async rescanBlockchain() {
-    return this._invokeWorker("rescanBlockchain");
-  }
-  
-  async getBalance(accountIdx, subaddressIdx) {
-    return BigInteger.parse(await this._invokeWorker("getBalance", Array.from(arguments)));
-  }
-  
-  async getUnlockedBalance(accountIdx, subaddressIdx) {
-    let unlockedBalanceStr = await this._invokeWorker("getUnlockedBalance", Array.from(arguments));
-    return BigInteger.parse(unlockedBalanceStr);
-  }
-  
-  async getAccounts(includeSubaddresses, tag) {
-    let accounts = [];
-    for (let accountJson of (await this._invokeWorker("getAccounts", Array.from(arguments)))) {
-      accounts.push(MoneroWalletFull._sanitizeAccount(new MoneroAccount(accountJson)));
-    }
-    return accounts;
-  }
-  
-  async getAccount(accountIdx, includeSubaddresses) {
-    let accountJson = await this._invokeWorker("getAccount", Array.from(arguments));
-    return MoneroWalletFull._sanitizeAccount(new MoneroAccount(accountJson));
-  }
-  
-  async createAccount(label) {
-    let accountJson = await this._invokeWorker("createAccount", Array.from(arguments));
-    return MoneroWalletFull._sanitizeAccount(new MoneroAccount(accountJson));
-  }
-  
-  async getSubaddresses(accountIdx, subaddressIndices) {
-    let subaddresses = [];
-    for (let subaddressJson of (await this._invokeWorker("getSubaddresses", Array.from(arguments)))) {
-      subaddresses.push(MoneroWalletFull._sanitizeSubaddress(new MoneroSubaddress(subaddressJson)));
-    }
-    return subaddresses;
-  }
-  
-  async createSubaddress(accountIdx, label) {
-    let subaddressJson = await this._invokeWorker("createSubaddress", Array.from(arguments));
-    return MoneroWalletFull._sanitizeSubaddress(new MoneroSubaddress(subaddressJson));
-  }
-  
-  async getTxs(query) {
-    query = MoneroWallet._normalizeTxQuery(query);
-    let respJson = await this._invokeWorker("getTxs", [query.getBlock().toJson()]);
-    return MoneroWalletFull._deserializeTxs(query, JSON.stringify({blocks: respJson.blocks})); // initialize txs from blocks json string TODO: this stringifies then utility parses, avoid
-  }
-  
-  async getTransfers(query) {
-    query = MoneroWallet._normalizeTransferQuery(query);
-    let blockJsons = await this._invokeWorker("getTransfers", [query.getTxQuery().getBlock().toJson()]);
-    return MoneroWalletFull._deserializeTransfers(query, JSON.stringify({blocks: blockJsons})); // initialize transfers from blocks json string TODO: this stringifies then utility parses, avoid
-  }
-  
-  async getOutputs(query) {
-    query = MoneroWallet._normalizeOutputQuery(query);
-    let blockJsons = await this._invokeWorker("getOutputs", [query.getTxQuery().getBlock().toJson()]);
-    return MoneroWalletFull._deserializeOutputs(query, JSON.stringify({blocks: blockJsons})); // initialize transfers from blocks json string TODO: this stringifies then utility parses, avoid
-  }
-  
-  async exportOutputs(all) {
-    return this._invokeWorker("exportOutputs", [all]);
-  }
-  
-  async importOutputs(outputsHex) {
-    return this._invokeWorker("importOutputs", [outputsHex]);
-  }
-  
-  async exportKeyImages(all) {
-    let keyImages = [];
-    for (let keyImageJson of await this._invokeWorker("getKeyImages", [all])) keyImages.push(new MoneroKeyImage(keyImageJson));
-    return keyImages;
-  }
-  
-  async importKeyImages(keyImages) {
-    let keyImagesJson = [];
-    for (let keyImage of keyImages) keyImagesJson.push(keyImage.toJson());
-    return new MoneroKeyImageImportResult(await this._invokeWorker("importKeyImages", [keyImagesJson]));
-  }
-  
-  async getNewKeyImagesFromLastImport() {
-    throw new MoneroError("MoneroWalletFull.getNewKeyImagesFromLastImport() not implemented");
-  }
-  
-  async freezeOutput(keyImage) {
-    return this._invokeWorker("freezeOutput", [keyImage]);
-  }
-  
-  async thawOutput(keyImage) {
-    return this._invokeWorker("thawOutput", [keyImage]);
-  }
-  
-  async isOutputFrozen(keyImage) {
-    return this._invokeWorker("isOutputFrozen", [keyImage]);
-  }
-  
-  async createTxs(config) {
-    config = MoneroWallet._normalizeCreateTxsConfig(config);
-    let txSetJson = await this._invokeWorker("createTxs", [config.toJson()]);
-    return new MoneroTxSet(txSetJson).getTxs();
-  }
-  
-  async sweepOutput(config) {
-    config = MoneroWallet._normalizeSweepOutputConfig(config);
-    let txSetJson = await this._invokeWorker("sweepOutput", [config.toJson()]);
-    return new MoneroTxSet(txSetJson).getTxs()[0];
-  }
-
-  async sweepUnlocked(config) {
-    config = MoneroWallet._normalizeSweepUnlockedConfig(config);
-    let txSetsJson = await this._invokeWorker("sweepUnlocked", [config.toJson()]);
-    let txs = [];
-    for (let txSetJson of txSetsJson) for (let tx of new MoneroTxSet(txSetJson).getTxs()) txs.push(tx);
-    return txs;
-  }
-  
-  async sweepDust(relay) {
-    return new MoneroTxSet(await this._invokeWorker("sweepDust", [relay])).getTxs() || [];
-  }
-  
-  async relayTxs(txsOrMetadatas) {
-    assert(Array.isArray(txsOrMetadatas), "Must provide an array of txs or their metadata to relay");
-    let txMetadatas = [];
-    for (let txOrMetadata of txsOrMetadatas) txMetadatas.push(txOrMetadata instanceof MoneroTxWallet ? txOrMetadata.getMetadata() : txOrMetadata);
-    return this._invokeWorker("relayTxs", [txMetadatas]);
-  }
-  
-  async describeTxSet(txSet) {
-    return new MoneroTxSet(await this._invokeWorker("describeTxSet", [txSet.toJson()]));
-  }
-  
-  async signTxs(unsignedTxHex) {
-    return this._invokeWorker("signTxs", Array.from(arguments));
-  }
-  
-  async submitTxs(signedTxHex) {
-    return this._invokeWorker("submitTxs", Array.from(arguments));
-  }
-  
-  async signMessage(message, signatureType, accountIdx, subaddressIdx) {
-    return this._invokeWorker("signMessage", Array.from(arguments));
-  }
-  
-  async verifyMessage(message, address, signature) {
-    return new MoneroMessageSignatureResult(await this._invokeWorker("verifyMessage", Array.from(arguments)));
-  }
-  
-  async getTxKey(txHash) {
-    return this._invokeWorker("getTxKey", Array.from(arguments));
-  }
-  
-  async checkTxKey(txHash, txKey, address) {
-    return new MoneroCheckTx(await this._invokeWorker("checkTxKey", Array.from(arguments)));
-  }
-  
-  async getTxProof(txHash, address, message) {
-    return this._invokeWorker("getTxProof", Array.from(arguments));
-  }
-  
-  async checkTxProof(txHash, address, message, signature) {
-    return new MoneroCheckTx(await this._invokeWorker("checkTxProof", Array.from(arguments)));
-  }
-  
-  async getSpendProof(txHash, message) {
-    return this._invokeWorker("getSpendProof", Array.from(arguments));
-  }
-  
-  async checkSpendProof(txHash, message, signature) {
-    return this._invokeWorker("checkSpendProof", Array.from(arguments));
-  }
-  
-  async getReserveProofWallet(message) {
-    return this._invokeWorker("getReserveProofWallet", Array.from(arguments));
-  }
-  
-  async getReserveProofAccount(accountIdx, amount, message) {
-    try { return await this._invokeWorker("getReserveProofAccount", [accountIdx, amount.toString(), message]); }
-    catch (e) { throw new MoneroError(e.message, -1); }
-  }
-
-  async checkReserveProof(address, message, signature) {
-    try { return new MoneroCheckReserve(await this._invokeWorker("checkReserveProof", Array.from(arguments))); }
-    catch (e) { throw new MoneroError(e.message, -1); }
-  }
-  
-  async getTxNotes(txHashes) {
-    return this._invokeWorker("getTxNotes", Array.from(arguments));
-  }
-  
-  async setTxNotes(txHashes, notes) {
-    return this._invokeWorker("setTxNotes", Array.from(arguments));
-  }
-  
-  async getAddressBookEntries(entryIndices) {
-    if (!entryIndices) entryIndices = [];
-    let entries = [];
-    for (let entryJson of await this._invokeWorker("getAddressBookEntries", Array.from(arguments))) {
-      entries.push(new MoneroAddressBookEntry(entryJson));
-    }
-    return entries;
-  }
-  
-  async addAddressBookEntry(address, description) {
-    return this._invokeWorker("addAddressBookEntry", Array.from(arguments));
-  }
-  
-  async editAddressBookEntry(index, setAddress, address, setDescription, description) {
-    return this._invokeWorker("editAddressBookEntry", Array.from(arguments));
-  }
-  
-  async deleteAddressBookEntry(entryIdx) {
-    return this._invokeWorker("deleteAddressBookEntry", Array.from(arguments));
-  }
-  
-  async tagAccounts(tag, accountIndices) {
-    return this._invokeWorker("tagAccounts", Array.from(arguments));
-  }
-
-  async untagAccounts(accountIndices) {
-    return this._invokeWorker("untagAccounts", Array.from(arguments));
-  }
-  
-  async getAccountTags() {
-    return this._invokeWorker("getAccountTags", Array.from(arguments));
-  }
-
-  async setAccountTagLabel(tag, label) {
-    return this._invokeWorker("setAccountTagLabel", Array.from(arguments));
-  }
-  
-  async getPaymentUri(config) {
-    config = MoneroWallet._normalizeCreateTxsConfig(config);
-    return this._invokeWorker("getPaymentUri", [config.toJson()]);
-  }
-  
-  async parsePaymentUri(uri) {
-    return new MoneroTxConfig(await this._invokeWorker("parsePaymentUri", Array.from(arguments)));
-  }
-  
-  async getAttribute(key) {
-    return this._invokeWorker("getAttribute", Array.from(arguments));
-  }
-  
-  async setAttribute(key, val) {
-    return this._invokeWorker("setAttribute", Array.from(arguments));
-  }
-  
-  async startMining(numThreads, backgroundMining, ignoreBattery) {
-    return this._invokeWorker("startMining", Array.from(arguments));
-  }
-  
-  async stopMining() {
-    return this._invokeWorker("stopMining", Array.from(arguments));
-  }
-  
-  async isMultisigImportNeeded() {
-    return this._invokeWorker("isMultisigImportNeeded");
-  }
-  
-  async isMultisig() {
-    return this._invokeWorker("isMultisig");
-  }
-  
-  async getMultisigInfo() {
-    return new MoneroMultisigInfo(await this._invokeWorker("getMultisigInfo"));
-  }
-  
-  async prepareMultisig() {
-    return this._invokeWorker("prepareMultisig");
-  }
-  
-  async makeMultisig(multisigHexes, threshold, password) {
-    return await this._invokeWorker("makeMultisig", Array.from(arguments));
-  }
-  
-  async exchangeMultisigKeys(multisigHexes, password) {
-    return new MoneroMultisigInitResult(await this._invokeWorker("exchangeMultisigKeys", Array.from(arguments)));
-  }
-  
-  async exportMultisigHex() {
-    return this._invokeWorker("exportMultisigHex");
-  }
-  
-  async importMultisigHex(multisigHexes) {
-    return this._invokeWorker("importMultisigHex", Array.from(arguments));
-  }
-  
-  async signMultisigTxHex(multisigTxHex) {
-    return new MoneroMultisigSignResult(await this._invokeWorker("signMultisigTxHex", Array.from(arguments)));
-  }
-  
-  async submitMultisigTxHex(signedMultisigTxHex) {
-    return this._invokeWorker("submitMultisigTxHex", Array.from(arguments));
-  }
-  
-  async getData() {
-    return this._invokeWorker("getData");
-  }
-  
-  async moveTo(path) {
-    return MoneroWalletFull._moveTo(path, this);
-  }
-  
-  async changePassword(oldPassword, newPassword) {
-    await this._invokeWorker("changePassword", Array.from(arguments));
-    if (this._path) await this.save(); // auto save
-  }
-  
-  async save() {
-    return MoneroWalletFull._save(this);
-  }
-  
-  async close(save) {
-    if (save) await this.save();
-    while (this._wrappedListeners.length) await this.removeListener(this._wrappedListeners[0].getListener());
-    await this._invokeWorker("close");
-    delete LibraryUtils.WORKER_OBJECTS[this._walletId];
-  }
-  
-  async isClosed() {
-    return this._invokeWorker("isClosed");
-  }
-  
-  // --------------------------- PRIVATE HELPERS ------------------------------
-  
-  async _invokeWorker(fnName, args) {
-    return await LibraryUtils.invokeWorker(this._walletId, fnName, args);
-  }
-}
-
-// -------------------------------- LISTENING ---------------------------------
-
-/**
- * Receives notifications directly from wasm c++.
- * 
- * @private
- */
-class WalletFullListener {
-  
-  constructor(wallet) {
-    this._wallet = wallet;
-  }
-  
-  async onSyncProgress(height, startHeight, endHeight, percentDone, message) {
-    for (let listener of this._wallet.getListeners()) await listener.onSyncProgress(height, startHeight, endHeight, percentDone, message);
-  }
-  
-  async onNewBlock(height) {
-    for (let listener of this._wallet.getListeners()) await listener.onNewBlock(height);
-  }
-  
-  async onBalancesChanged(newBalanceStr, newUnlockedBalanceStr) {
-    for (let listener of this._wallet.getListeners()) await listener.onBalancesChanged(BigInteger.parse(newBalanceStr), BigInteger.parse(newUnlockedBalanceStr));
-  }
-  
-  async onOutputReceived(height, txHash, amountStr, accountIdx, subaddressIdx, version, unlockTime, isLocked) {
-    
-    // build received output
-    let output = new MoneroOutputWallet();
-    output.setAmount(BigInteger.parse(amountStr));
-    output.setAccountIndex(accountIdx);
-    output.setSubaddressIndex(subaddressIdx);
-    let tx = new MoneroTxWallet();
-    tx.setHash(txHash);
-    tx.setVersion(version);
-    tx.setUnlockTime(unlockTime);
-    output.setTx(tx);
-    tx.setOutputs([output]);
-    tx.setIsIncoming(true);
-    tx.setIsLocked(isLocked);
-    if (height > 0) {
-      let block = new MoneroBlock().setHeight(height);
-      block.setTxs([tx]);
-      tx.setBlock(block);
-      tx.setIsConfirmed(true);
-      tx.setInTxPool(false);
-      tx.setIsFailed(false);
-    } else {
-      tx.setIsConfirmed(false);
-      tx.setInTxPool(true);
-    }
-    
-    // announce output
-    for (let listener of this._wallet.getListeners()) await listener.onOutputReceived(tx.getOutputs()[0]);
-  }
-  
-  async onOutputSpent(height, txHash, amountStr, accountIdxStr, subaddressIdxStr, version, unlockTime, isLocked) {
-    
-    // build spent output
-    let output = new MoneroOutputWallet();
-    output.setAmount(BigInteger.parse(amountStr));
-    if (accountIdxStr) output.setAccountIndex(parseInt(accountIdxStr));
-    if (subaddressIdxStr) output.setSubaddressIndex(parseInt(subaddressIdxStr));
-    let tx = new MoneroTxWallet();
-    tx.setHash(txHash);
-    tx.setVersion(version);
-    tx.setUnlockTime(unlockTime);
-    tx.setIsLocked(isLocked);
-    output.setTx(tx);
-    tx.setInputs([output]);
-    if (height > 0) {
-      let block = new MoneroBlock().setHeight(height);
-      block.setTxs([tx]);
-      tx.setBlock(block);
-      tx.setIsConfirmed(true);
-      tx.setInTxPool(false);
-      tx.setIsFailed(false);
-    } else {
-      tx.setIsConfirmed(false);
-      tx.setInTxPool(true);
-    }
-    
-    // notify wallet listeners
-    for (let listener of this._wallet.getListeners()) await listener.onOutputSpent(tx.getInputs()[0]);
-  }
-}
-
-/**
- * Internal listener to bridge notifications to external listeners.
- * 
- * @private
- */
-class WalletWorkerListener {
-  
-  constructor(listener) {
-    this._id = GenUtils.getUUID();
-    this._listener = listener;
-  }
-  
-  getId() {
-    return this._id;
-  }
-  
-  getListener() {
-    return this._listener;
-  }
-  
-  onSyncProgress(height, startHeight, endHeight, percentDone, message) {
-    this._listener.onSyncProgress(height, startHeight, endHeight, percentDone, message);
-  }
-
-  async onNewBlock(height) {
-    await this._listener.onNewBlock(height);
-  }
-  
-  async onBalancesChanged(newBalanceStr, newUnlockedBalanceStr) {
-    await this._listener.onBalancesChanged(BigInteger.parse(newBalanceStr), BigInteger.parse(newUnlockedBalanceStr));
-  }
-
-  async onOutputReceived(blockJson) {
-    let block = new MoneroBlock(blockJson, MoneroBlock.DeserializationType.TX_WALLET);
-    await this._listener.onOutputReceived(block.getTxs()[0].getOutputs()[0]);
-  }
-  
-  async onOutputSpent(blockJson) {
-    let block = new MoneroBlock(blockJson, MoneroBlock.DeserializationType.TX_WALLET);
-    await this._listener.onOutputSpent(block.getTxs()[0].getInputs()[0]);
-  }
-}
-
-MoneroWalletFull.DEFAULT_SYNC_PERIOD_IN_MS = 10000; // 10 second sync period by default
-
-module.exports = MoneroWalletFull;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_MoneroWalletKeys.js.html b/docs/src_main_js_wallet_MoneroWalletKeys.js.html deleted file mode 100644 index 772e28671..000000000 --- a/docs/src_main_js_wallet_MoneroWalletKeys.js.html +++ /dev/null @@ -1,398 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/MoneroWalletKeys.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/MoneroWalletKeys.js

- - - - - - -
-
-
const assert = require("assert");
-const LibraryUtils = require("../common/LibraryUtils");
-const MoneroError = require("../common/MoneroError");
-const MoneroNetworkType = require("../daemon/model/MoneroNetworkType");
-const MoneroSubaddress = require("./model/MoneroSubaddress");
-const MoneroUtils = require("../common/MoneroUtils");
-const MoneroVersion = require("../daemon/model/MoneroVersion");
-const MoneroWallet = require("./MoneroWallet");
-const MoneroWalletConfig = require("./model/MoneroWalletConfig");
-
-/**
- * Implements a MoneroWallet which only manages keys using WebAssembly.
- * 
- * @implements {MoneroWallet}
- * @hideconstructor
- */
-class MoneroWalletKeys extends MoneroWallet {
-  
-  // --------------------------- STATIC UTILITIES -----------------------------
-  
-  /**
-   * <p>Create a wallet using WebAssembly bindings to monero-project.</p>
-   * 
-   * <p>Example:</p>
-   * 
-   * <code>
-   * let wallet = await MoneroWalletKeys.createWallet({<br>
-   * &nbsp;&nbsp; password: "abc123",<br>
-   * &nbsp;&nbsp; networkType: MoneroNetworkType.STAGENET,<br>
-   * &nbsp;&nbsp; seed: "coexist igloo pamphlet lagoon..."<br>
-   * });
-   * </code>
-   * 
-   * @param {MoneroWalletConfig|object} config - MoneroWalletConfig or equivalent config object
-   * @param {string|number} config.networkType - network type of the wallet to create (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
-   * @param {string} config.seed - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
-   * @param {string} config.seedOffset - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
-   * @param {string} config.primaryAddress - primary address of the wallet to create (only provide if restoring from keys)
-   * @param {string} config.privateViewKey - private view key of the wallet to create (optional)
-   * @param {string} config.privateSpendKey - private spend key of the wallet to create (optional)
-   * @param {string} config.language - language of the wallet's seed (defaults to "English" or auto-detected)
-   * @return {MoneroWalletKeys} the created wallet
-   */
-  static async createWallet(config) {
-    
-    // normalize and validate config
-    if (config === undefined) throw new MoneroError("Must provide config to create wallet");
-    config = config instanceof MoneroWalletConfig ? config : new MoneroWalletConfig(config);
-    if (config.getSeed() !== undefined && (config.getPrimaryAddress() !== undefined || config.getPrivateViewKey() !== undefined || config.getPrivateSpendKey() !== undefined)) {
-      throw new MoneroError("Wallet may be initialized with a seed or keys but not both");
-    }
-    if (config.getNetworkType() === undefined) throw new MoneroError("Must provide a networkType: 'mainnet', 'testnet' or 'stagenet'");
-    if (config.getSaveCurrent() === true) throw new MoneroError("Cannot save current wallet when creating keys-only wallet");
-    
-    // create wallet
-    if (config.getSeed() !== undefined) return MoneroWalletKeys._createWalletFromSeed(config);
-    else if (config.getPrivateSpendKey() !== undefined || config.getPrimaryAddress() !== undefined) return MoneroWalletKeys._createWalletFromKeys(config);
-    else return MoneroWalletKeys._createWalletRandom(config);
-  }
-  
-  static async _createWalletRandom(config) {
-
-    // validate and sanitize params
-    config = config.copy();
-    if (config.getSeedOffset() !== undefined) throw new MoneroError("Cannot provide seedOffset when creating random wallet");
-    if (config.getRestoreHeight() !== undefined) throw new MoneroError("Cannot provide restoreHeight when creating random wallet");
-    MoneroNetworkType.validate(config.getNetworkType());
-    if (config.getLanguage() === undefined) config.setLanguage("English");
-    
-    // load wasm module
-    let module = await LibraryUtils.loadKeysModule();
-    
-    // queue call to wasm module
-    return module.queueTask(async function() {
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = async function(cppAddress) {
-          if (typeof cppAddress === "string") reject(new MoneroError(cppAddress));
-          else resolve(new MoneroWalletKeys(cppAddress));
-        };
-        
-        // create wallet in wasm and invoke callback when done
-        module.create_keys_wallet_random(JSON.stringify(config.toJson()), callbackFn);
-      });
-    });
-  }
-  
-  static async _createWalletFromSeed(config) {
-    
-    // validate and sanitize params
-    MoneroNetworkType.validate(config.getNetworkType());
-    if (config.getSeed() === undefined) throw Error("Must define seed to create wallet from");
-    if (config.getSeedOffset() === undefined) config.setSeedOffset("");
-    if (config.getLanguage() !== undefined) throw new MoneroError("Cannot provide language when creating wallet from seed");
-    
-    // load wasm module
-    let module = await LibraryUtils.loadKeysModule();
-    
-    // queue call to wasm module
-    return module.queueTask(async function() {
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = async function(cppAddress) {
-          if (typeof cppAddress === "string") reject(new MoneroError(cppAddress));
-          else resolve(new MoneroWalletKeys(cppAddress));
-        };
-        
-        // create wallet in wasm and invoke callback when done
-        module.create_keys_wallet_from_seed(JSON.stringify(config.toJson()), callbackFn);
-      });
-    });
-  }
-  
-  static async _createWalletFromKeys(config) {
-    
-    // validate and sanitize params
-    if (config.getSeedOffset() !== undefined) throw new MoneroError("Cannot provide seedOffset when creating wallet from keys");
-    MoneroNetworkType.validate(config.getNetworkType());
-    if (config.getPrimaryAddress() === undefined) config.setPrimaryAddress("");
-    if (config.getPrivateViewKey() === undefined) config.setPrivateViewKey("");
-    if (config.getPrivateSpendKey() === undefined) config.setPrivateSpendKey("");
-    if (config.getLanguage() === undefined) config.setLanguage("English");
-    
-    // load wasm module
-    let module = await LibraryUtils.loadKeysModule();
-    
-    // queue call to wasm module
-    return module.queueTask(async function() {
-      return new Promise(function(resolve, reject) {
-        
-        // define callback for wasm
-        let callbackFn = async function(cppAddress) {
-          if (typeof cppAddress === "string") reject(new MoneroError(cppAddress));
-          else resolve(new MoneroWalletKeys(cppAddress));
-        };
-        
-        // create wallet in wasm and invoke callback when done
-        module.create_keys_wallet_from_keys(JSON.stringify(config.toJson()), callbackFn);
-      });
-    });
-  }
-  
-  static async getSeedLanguages() {
-    let module = await LibraryUtils.loadKeysModule();
-    return module.queueTask(async function() {
-      return JSON.parse(module.get_keys_wallet_seed_languages()).languages;
-    });
-  }
-  
-  // --------------------------- INSTANCE METHODS -----------------------------
-  
-  /**
-   * Internal constructor which is given the memory address of a C++ wallet
-   * instance.
-   * 
-   * This method should not be called externally but should be called through
-   * static wallet creation utilities in this class.
-   * 
-   * @param {int} cppAddress - address of the wallet instance in C++
-   */
-  constructor(cppAddress) {
-    super();
-    this._cppAddress = cppAddress;
-    this._module = LibraryUtils.getWasmModule();
-    if (!this._module.create_full_wallet) throw new MoneroError("WASM module not loaded - create wallet instance using static utilities");  // static utilites pre-load wasm module
-  }
-  
-  async addListener(listener) {
-    throw new MoneroError("MoneroWalletKeys does not support adding listeners");
-  }
-  
-  async removeListener(listener) {
-    throw new MoneroError("MoneroWalletKeys does not support removing listeners");
-  }
-  
-  async isViewOnly() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.is_view_only(that._cppAddress);
-    });
-  }
-  
-  async isConnectedToDaemon() {
-    return false;
-  }
-  
-  async getVersion() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let versionStr = that._module.get_version(that._cppAddress);
-      let versionJson = JSON.parse(versionStr);
-      return new MoneroVersion(versionJson.number, versionJson.isRelease);
-    });
-  }
-  
-  /**
-   * @ignore
-   */
-  getPath() {
-    this._assertNotClosed();
-    throw new MoneroError("MoneroWalletKeys does not support a persisted path");
-  }
-  
-  async getSeed() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let resp = that._module.get_seed(that._cppAddress);
-      const errorStr = "error: ";
-      if (resp.indexOf(errorStr) === 0) throw new MoneroError(resp.substring(errorStr.length));
-      return resp ? resp : undefined;
-    });
-  }
-  
-  async getSeedLanguage() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let resp = that._module.get_seed_language(that._cppAddress);
-      let errorKey = "error: ";
-      if (resp.indexOf(errorKey) === 0) throw new MoneroError(resp.substring(errorStr.length));
-      return resp ? resp : undefined;
-    });
-  }
-
-  async getPrivateSpendKey() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let resp = that._module.get_private_spend_key(that._cppAddress);
-      let errorKey = "error: ";
-      if (resp.indexOf(errorKey) === 0) throw new MoneroError(resp.substring(errorStr.length));
-      return resp ? resp : undefined;
-    });
-  }
-  
-  async getPrivateViewKey() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let resp = that._module.get_private_view_key(that._cppAddress);
-      let errorKey = "error: ";
-      if (resp.indexOf(errorKey) === 0) throw new MoneroError(resp.substring(errorStr.length));
-      return resp ? resp : undefined;
-    });
-  }
-  
-  async getPublicViewKey() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let resp = that._module.get_public_view_key(that._cppAddress);
-      let errorKey = "error: ";
-      if (resp.indexOf(errorKey) === 0) throw new MoneroError(resp.substring(errorStr.length));
-      return resp ? resp : undefined;
-    });
-  }
-  
-  async getPublicSpendKey() {
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let resp = that._module.get_public_spend_key(that._cppAddress);
-      let errorKey = "error: ";
-      if (resp.indexOf(errorKey) === 0) throw new MoneroError(resp.substring(errorStr.length));
-      return resp ? resp : undefined;
-    });
-  }
-  
-  async getAddress(accountIdx, subaddressIdx) {
-    this._assertNotClosed();
-    assert(typeof accountIdx === "number");
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      return that._module.get_address(that._cppAddress, accountIdx, subaddressIdx);
-    });
-  }
-  
-  async getAddressIndex(address) {
-    this._assertNotClosed();
-    let that = this;
-    return that._module.queueTask(async function() {
-      that._assertNotClosed();
-      let resp = that._module.get_address_index(that._cppAddress, address);
-      if (resp.charAt(0) !== '{') throw new MoneroError(resp);
-      return new MoneroSubaddress(JSON.parse(resp));
-    });
-  }
-  
-  getAccounts() {
-    this._assertNotClosed();
-    throw new MoneroError("MoneroWalletKeys does not support getting an enumerable set of accounts; query specific accounts");
-  }
-  
-  // getIntegratedAddress(paymentId)  // TODO
-  // decodeIntegratedAddress
-  
-  async close(save) {
-    await super.close(save);
-    if (this._isClosed) return; // closing a closed wallet has no effect
-    
-    // save wallet if requested
-    if (save) await this.save();
-
-    // queue task to use wasm module
-    let that = this;
-    return that._module.queueTask(async function() {
-      return new Promise(function(resolve, reject) {
-        if (that._isClosed) {
-          resolve();
-          return;
-        }
-        
-        // define callback for wasm
-        let callbackFn = async function() {
-          delete that._cppAddress;
-          that._isClosed = true;
-          resolve();
-        };
-        
-        // close wallet in wasm and invoke callback when done
-        that._module.close(that._cppAddress, false, callbackFn);  // saving handled external to webassembly
-      });
-    });
-  }
-  
-  async isClosed() {
-    return this._isClosed;
-  }
-  
-  // ----------- ADD JSDOC FOR SUPPORTED DEFAULT IMPLEMENTATIONS --------------
-  
-  async getPrimaryAddress() { return super.getPrimaryAddress(...arguments); }
-  async getSubaddress() { return super.getSubaddress(...arguments); }
-  
-  // ----------------------------- PRIVATE HELPERS ----------------------------
-  
-  _assertNotClosed() {
-    if (this._isClosed) throw new MoneroError("Wallet is closed");
-  }
-}
-
-module.exports = MoneroWalletKeys;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_MoneroWalletRpc.js.html b/docs/src_main_js_wallet_MoneroWalletRpc.js.html deleted file mode 100644 index 8e241e7ae..000000000 --- a/docs/src_main_js_wallet_MoneroWalletRpc.js.html +++ /dev/null @@ -1,2630 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/MoneroWalletRpc.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/MoneroWalletRpc.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../common/biginteger").BigInteger;
-const GenUtils = require("../common/GenUtils");
-const LibraryUtils = require("../common/LibraryUtils");
-const TaskLooper = require("../common/TaskLooper");
-const MoneroAccount = require("./model/MoneroAccount");
-const MoneroAccountTag = require("./model/MoneroAccountTag");
-const MoneroAddressBookEntry = require("./model/MoneroAddressBookEntry");
-const MoneroBlock = require("../daemon/model/MoneroBlock");
-const MoneroBlockHeader = require("../daemon/model/MoneroBlockHeader");
-const MoneroCheckReserve = require("./model/MoneroCheckReserve");
-const MoneroCheckTx = require("./model/MoneroCheckTx");
-const MoneroDestination = require("./model/MoneroDestination");
-const MoneroError = require("../common/MoneroError");
-const MoneroIncomingTransfer = require("./model/MoneroIncomingTransfer");
-const MoneroIntegratedAddress = require("./model/MoneroIntegratedAddress");
-const MoneroKeyImage = require("../daemon/model/MoneroKeyImage");
-const MoneroKeyImageImportResult = require("./model/MoneroKeyImageImportResult");
-const MoneroMultisigInfo = require("./model/MoneroMultisigInfo");
-const MoneroMultisigInitResult = require("./model/MoneroMultisigInitResult");
-const MoneroMultisigSignResult = require("./model/MoneroMultisigSignResult");
-const MoneroOutgoingTransfer = require("./model/MoneroOutgoingTransfer");
-const MoneroOutputQuery = require("./model/MoneroOutputQuery");
-const MoneroOutputWallet = require("./model/MoneroOutputWallet");
-const MoneroRpcConnection = require("../common/MoneroRpcConnection");
-const MoneroRpcError = require("../common/MoneroRpcError");
-const MoneroSubaddress = require("./model/MoneroSubaddress");
-const MoneroSyncResult = require("./model/MoneroSyncResult");
-const MoneroTransferQuery = require("./model/MoneroTransferQuery");
-const MoneroTxConfig = require("./model/MoneroTxConfig");
-const MoneroTxQuery = require("./model/MoneroTxQuery");
-const MoneroTxSet = require("./model/MoneroTxSet");
-const MoneroTxWallet = require("./model/MoneroTxWallet");
-const MoneroUtils = require("../common/MoneroUtils");
-const MoneroVersion = require("../daemon/model/MoneroVersion");
-const MoneroWallet = require("./MoneroWallet");
-const MoneroWalletConfig = require("./model/MoneroWalletConfig");
-const MoneroWalletListener = require("./model/MoneroWalletListener");
-const MoneroMessageSignatureType = require("./model/MoneroMessageSignatureType");
-const MoneroMessageSignatureResult = require("./model/MoneroMessageSignatureResult");
-const ThreadPool = require("../common/ThreadPool");
-const SslOptions = require("../common/SslOptions");
-
-/**
- * Copyright (c) woodser
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-/**
- * Implements a MoneroWallet as a client of monero-wallet-rpc.
- * 
- * @implements {MoneroWallet}
- * @hideconstructor
- */
-class MoneroWalletRpc extends MoneroWallet {
-  
-  /**
-   * <p>Construct a wallet RPC client (for internal use).</p>
-   * 
-   * @param {string|object|MoneroRpcConnection|string[]} uriOrConfig - uri of monero-wallet-rpc or JS config object or MoneroRpcConnection or command line parameters to run a monero-wallet-rpc process internally
-   * @param {string} uriOrConfig.uri - uri of monero-wallet-rpc
-   * @param {string} uriOrConfig.username - username to authenticate with monero-wallet-rpc (optional)
-   * @param {string} uriOrConfig.password - password to authenticate with monero-wallet-rpc (optional)
-   * @param {boolean} uriOrConfig.rejectUnauthorized - rejects self-signed certificates if true (default true)
-   * @param {string} username - username to authenticate with monero-wallet-rpc (optional)
-   * @param {string} password - password to authenticate with monero-wallet-rpc (optional)
-   * @param {boolean} rejectUnauthorized - rejects self-signed certificates if true (default true)
-   */
-  constructor(uriOrConfig, username, password, rejectUnauthorized) {
-    super();
-    if (GenUtils.isArray(uriOrConfig)) throw new MoneroError("Array with command parameters is invalid first parameter, use `await monerojs.connectToWalletRpc(...)`");
-    this.config = MoneroWalletRpc._normalizeConfig(uriOrConfig, username, password, rejectUnauthorized);
-    this.rpc = new MoneroRpcConnection(this.config);
-    this.addressCache = {}; // avoid unecessary requests for addresses
-    this.syncPeriodInMs = MoneroWalletRpc.DEFAULT_SYNC_PERIOD_IN_MS;
-    this.listeners = [];
-  }
-  
-  /**
-   * <p>Create a client connected to monero-wallet-rpc (for internal use).</p>
-   * 
-   * @param {string|string[]|object|MoneroRpcConnection} uriOrConfig - uri of monero-wallet-rpc or terminal parameters or JS config object or MoneroRpcConnection
-   * @param {string} uriOrConfig.uri - uri of monero-wallet-rpc
-   * @param {string} uriOrConfig.username - username to authenticate with monero-wallet-rpc (optional)
-   * @param {string} uriOrConfig.password - password to authenticate with monero-wallet-rpc (optional)
-   * @param {boolean} uriOrConfig.rejectUnauthorized - rejects self-signed certificates if true (default true)
-   * @param {string} username - username to authenticate with monero-wallet-rpc (optional)
-   * @param {string} password - password to authenticate with monero-wallet-rpc (optional)
-   * @param {boolean} rejectUnauthorized - rejects self-signed certificates if true (default true)
-   * @return {MoneroWalletRpc} the wallet RPC client
-   */
-  static async _connectToWalletRpc(uriOrConfig, username, password, rejectUnauthorized) {
-    if (GenUtils.isArray(uriOrConfig)) return MoneroWalletRpc._startWalletRpcProcess(uriOrConfig); // handle array as terminal command
-    else return new MoneroWalletRpc(...arguments); // otherwise connect to server
-  }
-  
-  static async _startWalletRpcProcess(cmd) {
-    assert(GenUtils.isArray(cmd), "Must provide string array with command line parameters");
-    
-    // start process
-    this.process = require('child_process').spawn(cmd[0], cmd.slice(1), {});
-    this.process.stdout.setEncoding('utf8');
-    this.process.stderr.setEncoding('utf8');
-    
-    // return promise which resolves after starting monero-wallet-rpc
-    let uri;
-    let that = this;
-    let output = "";
-    return new Promise(function(resolve, reject) {
-      
-      // handle stdout
-      that.process.stdout.on('data', function(data) {
-        let line = data.toString();
-        LibraryUtils.log(2, line);
-        output += line + '\n'; // capture output in case of error
-        
-        // extract uri from e.g. "I Binding on 127.0.0.1 (IPv4):38085"
-        let uriLineContains = "Binding on ";
-        let uriLineContainsIdx = line.indexOf(uriLineContains);
-        if (uriLineContainsIdx >= 0) {
-          let host = line.substring(uriLineContainsIdx + uriLineContains.length, line.lastIndexOf(' '));
-          let unformattedLine = line.replace(/\u001b\[.*?m/g, '').trim(); // remove color formatting
-          let port = unformattedLine.substring(unformattedLine.lastIndexOf(':') + 1);
-          let sslIdx = cmd.indexOf("--rpc-ssl");
-          let sslEnabled = sslIdx >= 0 ? "enabled" == cmd[sslIdx + 1].toLowerCase() : false;
-          uri = (sslEnabled ? "https" : "http") + "://" + host + ":" + port;
-        }
-        
-        // read success message
-        if (line.indexOf("Starting wallet RPC server") >= 0) {
-          
-          // get username and password from params
-          let userPassIdx = cmd.indexOf("--rpc-login");
-          let userPass = userPassIdx >= 0 ? cmd[userPassIdx + 1] : undefined;
-          let username = userPass === undefined ? undefined : userPass.substring(0, userPass.indexOf(':'));
-          let password = userPass === undefined ? undefined : userPass.substring(userPass.indexOf(':') + 1);
-          
-          // create client connected to internal process
-          let wallet = new MoneroWalletRpc(uri, username, password);
-          wallet.process = that.process;
-          
-          // resolve promise with client connected to internal process 
-          this.isResolved = true;
-          resolve(wallet);
-        }
-      });
-      
-      // handle stderr
-      that.process.stderr.on('data', function(data) {
-        if (LibraryUtils.getLogLevel() >= 2) console.error(data);
-      });
-      
-      // handle exit
-      that.process.on("exit", function(code) {
-        if (!this.isResolved) reject(new MoneroError("monero-wallet-rpc process terminated with exit code " + code + (output ? ":\n\n" + output : "")));
-      });
-      
-      // handle error
-      that.process.on("error", function(err) {
-        if (err.message.indexOf("ENOENT") >= 0) reject(new MoneroError("monero-wallet-rpc does not exist at path '" + cmd[0] + "'"));
-        if (!this.isResolved) reject(err);
-      });
-      
-      // handle uncaught exception
-      that.process.on("uncaughtException", function(err, origin) {
-        console.error("Uncaught exception in monero-wallet-rpc process: " + err.message);
-        console.error(origin);
-        reject(err);
-      });
-    });
-  }
-  
-  // --------------------------- RPC WALLET METHODS ---------------------------
-  
-  /**
-   * Get the internal process running monero-wallet-rpc.
-   * 
-   * @return the process running monero-wallet-rpc, undefined if not created from new process
-   */
-  getProcess() {
-    return this.process;
-  }
-  
-  /**
-   * Stop the internal process running monero-wallet-rpc, if applicable.
-   * 
-   * @param {boolean} force specifies if the process should be destroyed forcibly
-   * @return {Promise<number|undefined>} the exit code from stopping the process
-   */
-  async stopProcess(force) {
-    if (this.process === undefined) throw new MoneroError("MoneroWalletRpc instance not created from new process");
-    let listenersCopy = GenUtils.copyArray(this.getListeners());
-    for (let listener of listenersCopy) await this.removeListener(listener);
-    return GenUtils.killProcess(this.process, force ? "sigkill" : undefined);
-  }
-  
-  /**
-   * Get the wallet's RPC connection.
-   * 
-   * @return {MoneroWalletRpc} the wallet's rpc connection
-   */
-  getRpcConnection() {
-    return this.rpc;
-  }
-  
-  /**
-   * <p>Open an existing wallet on the monero-wallet-rpc server.</p>
-   * 
-   * <p>Example:<p>
-   * 
-   * <code>
-   * let wallet = new MoneroWalletRpc("http://localhost:38084", "rpc_user", "abc123");<br>
-   * await wallet.openWallet("mywallet1", "supersecretpassword");<br>
-   * await wallet.openWallet({<br>
-   * &nbsp;&nbsp; path: "mywallet2",<br>
-   * &nbsp;&nbsp; password: "supersecretpassword",<br>
-   * &nbsp;&nbsp; serverUri: "http://locahost:38081",<br>
-   * &nbsp;&nbsp; rejectUnauthorized: false<br>
-   * });<br>
-   * </code>
-   * 
-   * @param {string|object|MoneroWalletConfig} pathOrConfig  - the wallet's name or configuration to open
-   * @param {string} pathOrConfig.path - path of the wallet to create (optional, in-memory wallet if not given)
-   * @param {string} pathOrConfig.password - password of the wallet to create
-   * @param {string} pathOrConfig.serverUri - uri of a daemon to use (optional, monero-wallet-rpc usually started with daemon config)
-   * @param {string} pathOrConfig.serverUsername - username to authenticate with the daemon (optional)
-   * @param {string} pathOrConfig.serverPassword - password to authenticate with the daemon (optional)
-   * @param {boolean} pathOrConfig.rejectUnauthorized - reject self-signed server certificates if true (defaults to true)
-   * @param {MoneroRpcConnection|object} pathOrConfig.server - MoneroRpcConnection or equivalent JS object providing daemon configuration (optional)
-   * @param {string} password is the wallet's password
-   * @return {MoneroWalletRpc} this wallet client
-   */
-  async openWallet(pathOrConfig, password) {
-    
-    // normalize and validate config
-    let config = new MoneroWalletConfig(typeof pathOrConfig === "string" ? {path: pathOrConfig, password: password ? password : ""} : pathOrConfig);
-    // TODO: ensure other fields are uninitialized?
-    
-    // open wallet on rpc server
-    if (!config.getPath()) throw new MoneroError("Must provide name of wallet to open");
-    await this.rpc.sendJsonRequest("open_wallet", {filename: config.getPath(), password: config.getPassword()});
-    await this._clear();
-    this.path = config.getPath();
-    
-    // set daemon if provided
-    if (config.getServer()) return this.setDaemonConnection(config.getServer());
-    return this;
-  }
-  
-  /**
-   * <p>Create and open a wallet on the monero-wallet-rpc server.<p>
-   * 
-   * <p>Example:<p>
-   * 
-   * <code>
-   * &sol;&sol; construct client to monero-wallet-rpc<br>
-   * let walletRpc = new MoneroWalletRpc("http://localhost:38084", "rpc_user", "abc123");<br><br>
-   * 
-   * &sol;&sol; create and open wallet on monero-wallet-rpc<br>
-   * await walletRpc.createWallet({<br>
-   * &nbsp;&nbsp; path: "mywallet",<br>
-   * &nbsp;&nbsp; password: "abc123",<br>
-   * &nbsp;&nbsp; seed: "coexist igloo pamphlet lagoon...",<br>
-   * &nbsp;&nbsp; restoreHeight: 1543218l<br>
-   * });
-   *  </code>
-   * 
-   * @param {object|MoneroWalletConfig} config - MoneroWalletConfig or equivalent JS object
-   * @param {string} config.path - path of the wallet to create (optional, in-memory wallet if not given)
-   * @param {string} config.password - password of the wallet to create
-   * @param {string} config.seed - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
-   * @param {string} config.seedOffset - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed
-   * @param {boolean} config.isMultisig - restore multisig wallet from seed
-   * @param {string} config.primaryAddress - primary address of the wallet to create (only provide if restoring from keys)
-   * @param {string} config.privateViewKey - private view key of the wallet to create (optional)
-   * @param {string} config.privateSpendKey - private spend key of the wallet to create (optional)
-   * @param {number} config.restoreHeight - block height to start scanning from (defaults to 0 unless generating random wallet)
-   * @param {string} config.language - language of the wallet's mnemonic phrase or seed (defaults to "English" or auto-detected)
-   * @param {MoneroRpcConnection} config.server - MoneroRpcConnection to a monero daemon (optional)<br>
-   * @param {string} config.serverUri - uri of a daemon to use (optional, monero-wallet-rpc usually started with daemon config)
-   * @param {string} config.serverUsername - username to authenticate with the daemon (optional)
-   * @param {string} config.serverPassword - password to authenticate with the daemon (optional)
-   * @param {MoneroConnectionManager} config.connectionManager - manage connections to monerod (optional)
-   * @param {boolean} config.rejectUnauthorized - reject self-signed server certificates if true (defaults to true)
-   * @param {MoneroRpcConnection|object} config.server - MoneroRpcConnection or equivalent JS object providing daemon configuration (optional)
-   * @param {boolean} config.saveCurrent - specifies if the current RPC wallet should be saved before being closed (default true)
-   * @return {MoneroWalletRpc} this wallet client
-   */
-  async createWallet(config) {
-    
-    // normalize and validate config
-    if (config === undefined) throw new MoneroError("Must provide config to create wallet");
-    config = new MoneroWalletConfig(config);
-    if (config.getSeed() !== undefined && (config.getPrimaryAddress() !== undefined || config.getPrivateViewKey() !== undefined || config.getPrivateSpendKey() !== undefined)) {
-      throw new MoneroError("Wallet can be initialized with a seed or keys but not both");
-    }
-    if (config.getNetworkType() !== undefined) throw new MoneroError("Cannot provide networkType when creating RPC wallet because server's network type is already set");
-    if (config.getAccountLookahead() !== undefined || config.getSubaddressLookahead() !== undefined) throw new MoneroError("monero-wallet-rpc does not support creating wallets with subaddress lookahead over rpc");
-    if (config.getPassword() === undefined) config.setPassword("");
-
-    // create wallet
-    if (config.getSeed() !== undefined) await this._createWalletFromSeed(config);
-    else if (config.getPrivateSpendKey() !== undefined || config.getPrimaryAddress() !== undefined) await this._createWalletFromKeys(config);
-    else await this._createWalletRandom(config);
-
-    // set daemon or connection manager
-    if (config.getConnectionManager()) {
-      if (config.getServer()) throw new MoneroError("Wallet can be initialized with a server or connection manager but not both");
-      await this.setConnectionManager(config.getConnectionManager());
-    } else if (config.getServer()) {
-      await this.setDaemonConnection(config.getServer());
-    }
-    
-    return this;
-  }
-  
-  /**
-   * Create and open a new wallet with a randomly generated seed on the RPC server.
-   * 
-   * @param {MoneroWalletConfig} config - the wallet configuration
-   * @return {MoneroWalletRpc} this wallet client
-   */
-  async _createWalletRandom(config) {
-    if (config.getSeedOffset() !== undefined) throw new MoneroError("Cannot provide seedOffset when creating random wallet");
-    if (config.getRestoreHeight() !== undefined) throw new MoneroError("Cannot provide restoreHeight when creating random wallet");
-    if (config.getSaveCurrent() === false) throw new MoneroError("Current wallet is saved automatically when creating random wallet");
-    if (!config.getPath()) throw new MoneroError("Name is not initialized");
-    if (!config.getLanguage()) config.setLanguage(MoneroWallet.DEFAULT_LANGUAGE);
-    let params = { filename: config.getPath(), password: config.getPassword(), language: config.getLanguage() };
-    try {
-      await this.rpc.sendJsonRequest("create_wallet", params);
-    } catch (err) {
-      this._handleCreateWalletError(config.getPath(), err);
-    }
-    await this._clear();
-    this.path = config.getPath();
-    return this;
-  }
-  
-  /**
-   * Create and open a wallet from an existing seed on the RPC server,
-   * closing the currently open wallet if applicable.
-   * 
-   * @param {MoneroWalletConfig} config - the wallet configuration
-   * @return {MoneroWalletRpc} this wallet client
-   */
-  async _createWalletFromSeed(config) {
-    try {
-      await this.rpc.sendJsonRequest("restore_deterministic_wallet", {
-        filename: config.getPath(),
-        password: config.getPassword(),
-        seed: config.getSeed(),
-        seed_offset: config.getSeedOffset(),
-        enable_multisig_experimental: config.isMultisig(),
-        restore_height: config.getRestoreHeight(),
-        language: config.getLanguage(),
-        autosave_current: config.getSaveCurrent()
-      });
-    } catch (err) {
-      this._handleCreateWalletError(config.getPath(), err);
-    }
-    await this._clear();
-    this.path = config.getPath();
-    return this;
-  }
-  
-  /**
-   * Create a wallet on the RPC server from an address, view key, and (optionally) spend key.
-   * 
-   * @param {MoneroWalletConfig} config - the wallet configuration
-   * @return {MoneroWalletRpc} this wallet client
-   */
-  async _createWalletFromKeys(config) {
-    if (config.getSeedOffset() !== undefined) throw new MoneroError("Cannot provide seedOffset when creating wallet from keys");
-    if (config.getRestoreHeight() === undefined) config.setRestoreHeight(0);
-    if (config.getLanguage() === undefined) config.setLanguage(MoneroWallet.DEFAULT_LANGUAGE);
-    try {
-      await this.rpc.sendJsonRequest("generate_from_keys", {
-        filename: config.getPath(),
-        password: config.getPassword(),
-        address: config.getPrimaryAddress(),
-        viewkey: config.getPrivateViewKey(),
-        spendkey: config.getPrivateSpendKey(),
-        restore_height: config.getRestoreHeight(),
-        autosave_current: config.getSaveCurrent()
-      });
-    } catch (err) {
-      this._handleCreateWalletError(config.getPath(), err);
-    }
-    await this._clear();
-    this.path = config.getPath();
-    return this;
-  }
-  
-  _handleCreateWalletError(name, err) {
-    if (err.message === "Cannot create wallet. Already exists.") throw new MoneroRpcError("Wallet already exists: " + name, err.getCode(), err.getRpcMethod(), err.getRpcParams());
-    if (err.message === "Electrum-style word list failed verification") throw new MoneroRpcError("Invalid mnemonic", err.getCode(), err.getRpcMethod(), err.getRpcParams());
-    throw err;
-  }
-  
-  async isViewOnly() {
-    try {
-      await this.rpc.sendJsonRequest("query_key", {key_type: "mnemonic"});
-      return false; // key retrieval succeeds if not view only
-    } catch (e) {
-      if (e.getCode() === -29) return true;  // wallet is view only
-      if (e.getCode() === -1) return false;  // wallet is offline but not view only
-      throw e;
-    }
-  }
-  
-  /**
-   * Set the wallet's daemon connection.
-   * 
-   * @param {string|MoneroRpcConnection} uriOrConnection - the daemon's URI or connection (defaults to offline)
-   * @param {boolean} isTrusted - indicates if the daemon in trusted
-   * @param {SslOptions} sslOptions - custom SSL configuration
-   */
-  async setDaemonConnection(uriOrRpcConnection, isTrusted, sslOptions) {
-    let connection = !uriOrRpcConnection ? undefined : uriOrRpcConnection instanceof MoneroRpcConnection ? uriOrRpcConnection : new MoneroRpcConnection(uriOrRpcConnection);
-    if (connection) connection.setProxyToWorker(false);
-    if (!sslOptions) sslOptions = new SslOptions();
-    let params = {};
-    params.address = connection ? connection.getUri() : "bad_uri"; // TODO monero-wallet-rpc: bad daemon uri necessary for offline?
-    params.username = connection ? connection.getUsername() : "";
-    params.password = connection ? connection.getPassword() : "";
-    params.trusted = isTrusted;
-    params.ssl_support = "autodetect";
-    params.ssl_private_key_path = sslOptions.getPrivateKeyPath();
-    params.ssl_certificate_path  = sslOptions.getCertificatePath();
-    params.ssl_ca_file = sslOptions.getCertificateAuthorityFile();
-    params.ssl_allowed_fingerprints = sslOptions.getAllowedFingerprints();
-    params.ssl_allow_any_cert = sslOptions.getAllowAnyCert();
-    await this.rpc.sendJsonRequest("set_daemon", params);
-    this.daemonConnection = connection;
-  }
-  
-  async getDaemonConnection() {
-    return this.daemonConnection;
-  }
-  
-  // -------------------------- COMMON WALLET METHODS -------------------------
-  
-  async addListener(listener) {
-    assert(listener instanceof MoneroWalletListener, "Listener must be instance of MoneroWalletListener");
-    this.listeners.push(listener);
-    this._refreshListening();
-  }
-  
-  async removeListener(listener) {
-    let idx = this.listeners.indexOf(listener);
-    if (idx > -1) this.listeners.splice(idx, 1);
-    else throw new MoneroError("Listener is not registered with wallet");
-    this._refreshListening();
-  }
-  
-  getListeners() {
-    return this.listeners;
-  }
-  
-  async isConnectedToDaemon() {
-    try {
-      await this.checkReserveProof(await this.getPrimaryAddress(), "", ""); // TODO (monero-project): provide better way to know if wallet rpc is connected to daemon
-      throw new MoneroError("check reserve expected to fail");
-    } catch (e) {
-      return e.message.indexOf("Failed to connect to daemon") < 0;
-    }
-  }
-  
-  async getVersion() {
-    let resp = await this.rpc.sendJsonRequest("get_version");
-    return new MoneroVersion(resp.result.version, resp.result.release);
-  }
-  
-  async getPath() {
-    return this.path;
-  }
-  
-  async getSeed() {
-    let resp = await this.rpc.sendJsonRequest("query_key", { key_type: "mnemonic" });
-    return resp.result.key;
-  }
-  
-  async getSeedLanguage() {
-    if (await this.getSeed() === undefined) return undefined;
-    throw new MoneroError("MoneroWalletRpc.getSeedLanguage() not supported");
-  }
-
-  /**
-   * Get a list of available languages for the wallet's seed.
-   * 
-   * @return {string[]} the available languages for the wallet's seed.
-   */
-  async getSeedLanguages() {
-    return (await this.rpc.sendJsonRequest("get_languages")).result.languages;
-  }
-  
-  async getPrivateViewKey() {
-    let resp = await this.rpc.sendJsonRequest("query_key", { key_type: "view_key" });
-    return resp.result.key;
-  }
-  
-  async getPrivateSpendKey() {
-    let resp = await this.rpc.sendJsonRequest("query_key", { key_type: "spend_key" });
-    return resp.result.key;
-  }
-  
-  async getAddress(accountIdx, subaddressIdx) {
-    let subaddressMap = this.addressCache[accountIdx];
-    if (!subaddressMap) {
-      await this.getSubaddresses(accountIdx, undefined, true);  // cache's all addresses at this account
-      return this.getAddress(accountIdx, subaddressIdx);        // recursive call uses cache
-    }
-    let address = subaddressMap[subaddressIdx];
-    if (!address) {
-      await this.getSubaddresses(accountIdx, undefined, true);  // cache's all addresses at this account
-      return this.addressCache[accountIdx][subaddressIdx];
-    }
-    return address;
-  }
-  
-  // TODO: use cache
-  async getAddressIndex(address) {
-    
-    // fetch result and normalize error if address does not belong to the wallet
-    let resp;
-    try {
-      resp = await this.rpc.sendJsonRequest("get_address_index", {address: address});
-    } catch (e) {
-      if (e.getCode() === -2) throw new MoneroError(e.message);
-      throw e;
-    }
-    
-    // convert rpc response
-    let subaddress = new MoneroSubaddress(address);
-    subaddress.setAccountIndex(resp.result.index.major);
-    subaddress.setIndex(resp.result.index.minor);
-    return subaddress;
-  }
-  
-  async getIntegratedAddress(standardAddress, paymentId) {
-    try {
-      let integratedAddressStr = (await this.rpc.sendJsonRequest("make_integrated_address", {standard_address: standardAddress, payment_id: paymentId})).result.integrated_address;
-      return await this.decodeIntegratedAddress(integratedAddressStr);
-    } catch (e) {
-      if (e.message.includes("Invalid payment ID")) throw new MoneroError("Invalid payment ID: " + paymentId);
-      throw e;
-    }
-  }
-  
-  async decodeIntegratedAddress(integratedAddress) {
-    let resp = await this.rpc.sendJsonRequest("split_integrated_address", {integrated_address: integratedAddress});
-    return new MoneroIntegratedAddress().setStandardAddress(resp.result.standard_address).setPaymentId(resp.result.payment_id).setIntegratedAddress(integratedAddress);
-  }
-  
-  async getHeight() {
-    return (await this.rpc.sendJsonRequest("get_height")).result.height;
-  }
-  
-  async getDaemonHeight() {
-    throw new MoneroError("monero-wallet-rpc does not support getting the chain height");
-  }
-  
-  async getHeightByDate(year, month, day) {
-    throw new MoneroError("monero-wallet-rpc does not support getting a height by date");
-  }
-  
-  async sync(startHeight, onProgress) {
-    assert(onProgress === undefined, "Monero Wallet RPC does not support reporting sync progress");
-    try {
-      let resp = await this.rpc.sendJsonRequest("refresh", {start_height: startHeight}, 0);
-      await this._poll();
-      return new MoneroSyncResult(resp.result.blocks_fetched, resp.result.received_money);
-    } catch (err) {
-      if (err.message === "no connection to daemon") throw new MoneroError("Wallet is not connected to daemon");
-      throw err;
-    }
-  }
-  
-  async startSyncing(syncPeriodInMs) {
-    
-    // convert ms to seconds for rpc parameter
-    let syncPeriodInSeconds = Math.round((syncPeriodInMs === undefined ? MoneroWalletRpc.DEFAULT_SYNC_PERIOD_IN_MS : syncPeriodInMs) / 1000);
-    
-    // send rpc request
-    await this.rpc.sendJsonRequest("auto_refresh", {
-      enable: true,
-      period: syncPeriodInSeconds
-    });
-    
-    // update sync period for poller
-    this.syncPeriodInMs = syncPeriodInSeconds * 1000;
-    if (this.walletPoller !== undefined) this.walletPoller.setPeriodInMs(syncPeriodInMs);
-    
-    // poll if listening
-    await this._poll();
-  }
-  
-  async stopSyncing() {
-    return this.rpc.sendJsonRequest("auto_refresh", { enable: false });
-  }
-  
-  async scanTxs(txHashes) {
-    if (!txHashes || !txHashes.length) throw new MoneroError("No tx hashes given to scan");
-    await this.rpc.sendJsonRequest("scan_tx", {txids: txHashes});
-    await this._poll();
-  }
-  
-  async rescanSpent() {
-    await this.rpc.sendJsonRequest("rescan_spent", undefined, 0);
-  }
-  
-  async rescanBlockchain() {
-    await this.rpc.sendJsonRequest("rescan_blockchain", undefined, 0);
-  }
-  
-  async getBalance(accountIdx, subaddressIdx) {
-    return (await this._getBalances(accountIdx, subaddressIdx))[0];
-  }
-  
-  async getUnlockedBalance(accountIdx, subaddressIdx) {
-    return (await this._getBalances(accountIdx, subaddressIdx))[1];
-  }
-  
-  async getAccounts(includeSubaddresses, tag, skipBalances) {
-    
-    // fetch accounts from rpc
-    let resp = await this.rpc.sendJsonRequest("get_accounts", {tag: tag});
-    
-    // build account objects and fetch subaddresses per account using get_address
-    // TODO monero-wallet-rpc: get_address should support all_accounts so not called once per account
-    let accounts = [];
-    for (let rpcAccount of resp.result.subaddress_accounts) {
-      let account = MoneroWalletRpc._convertRpcAccount(rpcAccount);
-      if (includeSubaddresses) account.setSubaddresses(await this.getSubaddresses(account.getIndex(), undefined, true));
-      accounts.push(account);
-    }
-    
-    // fetch and merge fields from get_balance across all accounts
-    if (includeSubaddresses && !skipBalances) {
-      
-      // these fields are not initialized if subaddress is unused and therefore not returned from `get_balance`
-      for (let account of accounts) {
-        for (let subaddress of account.getSubaddresses()) {
-          subaddress.setBalance(new BigInteger(0));
-          subaddress.setUnlockedBalance(new BigInteger(0));
-          subaddress.setNumUnspentOutputs(0);
-          subaddress.setNumBlocksToUnlock(0);
-        }
-      }
-      
-      // fetch and merge info from get_balance
-      resp = await this.rpc.sendJsonRequest("get_balance", {all_accounts: true});
-      if (resp.result.per_subaddress) {
-        for (let rpcSubaddress of resp.result.per_subaddress) {
-          let subaddress = MoneroWalletRpc._convertRpcSubaddress(rpcSubaddress);
-          
-          // merge info
-          let account = accounts[subaddress.getAccountIndex()];
-          assert.equal(subaddress.getAccountIndex(), account.getIndex(), "RPC accounts are out of order");  // would need to switch lookup to loop
-          let tgtSubaddress = account.getSubaddresses()[subaddress.getIndex()];
-          assert.equal(subaddress.getIndex(), tgtSubaddress.getIndex(), "RPC subaddresses are out of order");
-          if (subaddress.getBalance() !== undefined) tgtSubaddress.setBalance(subaddress.getBalance());
-          if (subaddress.getUnlockedBalance() !== undefined) tgtSubaddress.setUnlockedBalance(subaddress.getUnlockedBalance());
-          if (subaddress.getNumUnspentOutputs() !== undefined) tgtSubaddress.setNumUnspentOutputs(subaddress.getNumUnspentOutputs());
-        }
-      }
-    }
-    
-    // return accounts
-    return accounts;
-  }
-  
-  // TODO: getAccountByIndex(), getAccountByTag()
-  async getAccount(accountIdx, includeSubaddresses, skipBalances) {
-    assert(accountIdx >= 0);
-    for (let account of await this.getAccounts()) {
-      if (account.getIndex() === accountIdx) {
-        if (includeSubaddresses) account.setSubaddresses(await this.getSubaddresses(accountIdx, undefined, skipBalances));
-        return account;
-      }
-    }
-    throw new Exception("Account with index " + accountIdx + " does not exist");
-  }
-
-  async createAccount(label) {
-    label = label ? label : undefined;
-    let resp = await this.rpc.sendJsonRequest("create_account", {label: label});
-    return new MoneroAccount(resp.result.account_index, resp.result.address, new BigInteger(0), new BigInteger(0));
-  }
-
-  async getSubaddresses(accountIdx, subaddressIndices, skipBalances) {
-    
-    // fetch subaddresses
-    let params = {};
-    params.account_index = accountIdx;
-    if (subaddressIndices) params.address_index = GenUtils.listify(subaddressIndices);
-    let resp = await this.rpc.sendJsonRequest("get_address", params);
-    
-    // initialize subaddresses
-    let subaddresses = [];
-    for (let rpcSubaddress of resp.result.addresses) {
-      let subaddress = MoneroWalletRpc._convertRpcSubaddress(rpcSubaddress);
-      subaddress.setAccountIndex(accountIdx);
-      subaddresses.push(subaddress);
-    }
-    
-    // fetch and initialize subaddress balances
-    if (!skipBalances) {
-      
-      // these fields are not initialized if subaddress is unused and therefore not returned from `get_balance`
-      for (let subaddress of subaddresses) {
-        subaddress.setBalance(new BigInteger(0));
-        subaddress.setUnlockedBalance(new BigInteger(0));
-        subaddress.setNumUnspentOutputs(0);
-        subaddress.setNumBlocksToUnlock(0);
-      }
-
-      // fetch and initialize balances
-      resp = await this.rpc.sendJsonRequest("get_balance", params);
-      if (resp.result.per_subaddress) {
-        for (let rpcSubaddress of resp.result.per_subaddress) {
-          let subaddress = MoneroWalletRpc._convertRpcSubaddress(rpcSubaddress);
-          
-          // transfer info to existing subaddress object
-          for (let tgtSubaddress of subaddresses) {
-            if (tgtSubaddress.getIndex() !== subaddress.getIndex()) continue; // skip to subaddress with same index
-            if (subaddress.getBalance() !== undefined) tgtSubaddress.setBalance(subaddress.getBalance());
-            if (subaddress.getUnlockedBalance() !== undefined) tgtSubaddress.setUnlockedBalance(subaddress.getUnlockedBalance());
-            if (subaddress.getNumUnspentOutputs() !== undefined) tgtSubaddress.setNumUnspentOutputs(subaddress.getNumUnspentOutputs());
-            if (subaddress.getNumBlocksToUnlock() !== undefined) tgtSubaddress.setNumBlocksToUnlock(subaddress.getNumBlocksToUnlock());
-          }
-        }
-      }
-    }
-    
-    // cache addresses
-    let subaddressMap = this.addressCache[accountIdx];
-    if (!subaddressMap) {
-      subaddressMap = {};
-      this.addressCache[accountIdx] = subaddressMap;
-    }
-    for (let subaddress of subaddresses) {
-      subaddressMap[subaddress.getIndex()] = subaddress.getAddress();
-    }
-    
-    // return results
-    return subaddresses;
-  }
-
-  async getSubaddress(accountIdx, subaddressIdx, skipBalances) {
-    assert(accountIdx >= 0);
-    assert(subaddressIdx >= 0);
-    return (await this.getSubaddresses(accountIdx, subaddressIdx, skipBalances))[0];
-  }
-
-  async createSubaddress(accountIdx, label) {
-    
-    // send request
-    let resp = await this.rpc.sendJsonRequest("create_address", {account_index: accountIdx, label: label});
-    
-    // build subaddress object
-    let subaddress = new MoneroSubaddress();
-    subaddress.setAccountIndex(accountIdx);
-    subaddress.setIndex(resp.result.address_index);
-    subaddress.setAddress(resp.result.address);
-    subaddress.setLabel(label ? label : undefined);
-    subaddress.setBalance(new BigInteger(0));
-    subaddress.setUnlockedBalance(new BigInteger(0));
-    subaddress.setNumUnspentOutputs(0);
-    subaddress.setIsUsed(false);
-    subaddress.setNumBlocksToUnlock(0);
-    return subaddress;
-  }
-
-  async setSubaddressLabel(accountIdx, subaddressIdx, label) {
-    await this.rpc.sendJsonRequest("label_address", {index: {major: accountIdx, minor: subaddressIdx}, label: label});
-  }
-  
-  async getTxs(query) {
-    
-    // copy query
-    query = MoneroWallet._normalizeTxQuery(query);
-    
-    // temporarily disable transfer and output queries in order to collect all tx information
-    let transferQuery = query.getTransferQuery();
-    let inputQuery = query.getInputQuery();
-    let outputQuery = query.getOutputQuery();
-    query.setTransferQuery(undefined);
-    query.setInputQuery(undefined);
-    query.setOutputQuery(undefined);
-    
-    // fetch all transfers that meet tx query
-    let transfers = await this._getTransfersAux(new MoneroTransferQuery().setTxQuery(MoneroWalletRpc._decontextualize(query.copy())));
-    
-    // collect unique txs from transfers while retaining order
-    let txs = [];
-    let txsSet = new Set();
-    for (let transfer of transfers) {
-      if (!txsSet.has(transfer.getTx())) {
-        txs.push(transfer.getTx());
-        txsSet.add(transfer.getTx());
-      }
-    }
-    
-    // cache types into maps for merging and lookup
-    let txMap = {};
-    let blockMap = {};
-    for (let tx of txs) {
-      MoneroWalletRpc._mergeTx(tx, txMap, blockMap);
-    }
-    
-    // fetch and merge outputs if requested
-    if (query.getIncludeOutputs() || outputQuery) {
-        
-      // fetch outputs
-      let outputQueryAux = (outputQuery ? outputQuery.copy() : new MoneroOutputQuery()).setTxQuery(MoneroWalletRpc._decontextualize(query.copy()));
-      let outputs = await this._getOutputsAux(outputQueryAux);
-      
-      // merge output txs one time while retaining order
-      let outputTxs = [];
-      for (let output of outputs) {
-        if (!outputTxs.includes(output.getTx())) {
-          MoneroWalletRpc._mergeTx(output.getTx(), txMap, blockMap);
-          outputTxs.push(output.getTx());
-        }
-      }
-    }
-    
-    // restore transfer and output queries
-    query.setTransferQuery(transferQuery);
-    query.setInputQuery(inputQuery);
-    query.setOutputQuery(outputQuery);
-    
-    // filter txs that don't meet transfer query
-    let txsQueried = [];
-    for (let tx of txs) {
-      if (query.meetsCriteria(tx)) txsQueried.push(tx);
-      else if (tx.getBlock() !== undefined) tx.getBlock().getTxs().splice(tx.getBlock().getTxs().indexOf(tx), 1);
-    }
-    txs = txsQueried;
-    
-    // special case: re-fetch txs if inconsistency caused by needing to make multiple rpc calls
-    for (let tx of txs) {
-      if (tx.isConfirmed() && tx.getBlock() === undefined || !tx.isConfirmed() && tx.getBlock() !== undefined) {
-        console.error("Inconsistency detected building txs from multiple rpc calls, re-fetching txs");
-        return this.getTxs(query);
-      }
-    }
-    
-    // order txs if tx hashes given then return
-    if (query.getHashes() && query.getHashes().length > 0) {
-      let txsById = new Map()  // store txs in temporary map for sorting
-      for (let tx of txs) txsById.set(tx.getHash(), tx);
-      let orderedTxs = [];
-      for (let hash of query.getHashes()) if (txsById.get(hash)) orderedTxs.push(txsById.get(hash));
-      txs = orderedTxs;
-    }
-    return txs;
-  }
-  
-  async getTransfers(query) {
-    
-    // copy and normalize query up to block
-    query = MoneroWallet._normalizeTransferQuery(query);
-    
-    // get transfers directly if query does not require tx context (other transfers, outputs)
-    if (!MoneroWalletRpc._isContextual(query)) return this._getTransfersAux(query);
-    
-    // otherwise get txs with full models to fulfill query
-    let transfers = [];
-    for (let tx of await this.getTxs(query.getTxQuery())) {
-      for (let transfer of tx.filterTransfers(query)) {
-        transfers.push(transfer);
-      }
-    }
-    
-    return transfers;
-  }
-  
-  async getOutputs(query) {
-    
-    // copy and normalize query up to block
-    query = MoneroWallet._normalizeOutputQuery(query);
-    
-    // get outputs directly if query does not require tx context (other outputs, transfers)
-    if (!MoneroWalletRpc._isContextual(query)) return this._getOutputsAux(query);
-    
-    // otherwise get txs with full models to fulfill query
-    let outputs = [];
-    for (let tx of await this.getTxs(query.getTxQuery())) {
-      for (let output of tx.filterOutputs(query)) {
-        outputs.push(output);
-      }
-    }
-    
-    return outputs;
-  }
-  
-  async exportOutputs(all) {
-    return (await this.rpc.sendJsonRequest("export_outputs", {all: all})).result.outputs_data_hex;
-  }
-  
-  async importOutputs(outputsHex) {
-    let resp = await this.rpc.sendJsonRequest("import_outputs", {outputs_data_hex: outputsHex});
-    return resp.result.num_imported;
-  }
-  
-  async exportKeyImages(all) {
-    return await this._rpcExportKeyImages(all);
-  }
-  
-  async importKeyImages(keyImages) {
-    
-    // convert key images to rpc parameter
-    let rpcKeyImages = keyImages.map(keyImage => ({key_image: keyImage.getHex(), signature: keyImage.getSignature()}));
-    
-    // send request
-    let resp = await this.rpc.sendJsonRequest("import_key_images", {signed_key_images: rpcKeyImages});
-    
-    // build and return result
-    let importResult = new MoneroKeyImageImportResult();
-    importResult.setHeight(resp.result.height);
-    importResult.setSpentAmount(new BigInteger(resp.result.spent));
-    importResult.setUnspentAmount(new BigInteger(resp.result.unspent));
-    return importResult;
-  }
-  
-  async getNewKeyImagesFromLastImport() {
-    return await this._rpcExportKeyImages(false);
-  }
-  
-  async freezeOutput(keyImage) {
-    return this.rpc.sendJsonRequest("freeze", {key_image: keyImage});
-  }
-  
-  async thawOutput(keyImage) {
-    return this.rpc.sendJsonRequest("thaw", {key_image: keyImage});
-  }
-  
-  async isOutputFrozen(keyImage) {
-    let resp = await this.rpc.sendJsonRequest("frozen", {key_image: keyImage});
-    return resp.result.frozen === true;
-  }
-  
-  async createTxs(config) {
-    
-    // validate, copy, and normalize config
-    config = MoneroWallet._normalizeCreateTxsConfig(config);
-    if (config.getCanSplit() === undefined) config.setCanSplit(true);
-    if (config.getRelay() === true && await this.isMultisig()) throw new MoneroError("Cannot relay multisig transaction until co-signed");
-
-    // determine account and subaddresses to send from
-    let accountIdx = config.getAccountIndex();
-    if (accountIdx === undefined) throw new MoneroError("Must provide the account index to send from");
-    let subaddressIndices = config.getSubaddressIndices() === undefined ? undefined : config.getSubaddressIndices().slice(0); // fetch all or copy given indices
-    
-    // build config parameters
-    let params = {};
-    params.destinations = [];
-    for (let destination of config.getDestinations()) {
-      assert(destination.getAddress(), "Destination address is not defined");
-      assert(destination.getAmount(), "Destination amount is not defined");
-      params.destinations.push({ address: destination.getAddress(), amount: destination.getAmount().toString() });
-    }
-    if (config.getSubtractFeeFrom()) params.subtract_fee_from_outputs = config.getSubtractFeeFrom();
-    params.account_index = accountIdx;
-    params.subaddr_indices = subaddressIndices;
-    params.payment_id = config.getPaymentId();
-    if (config.getUnlockTime() !== undefined) params.unlock_time = config.getUnlockTime().toString()
-    params.do_not_relay = config.getRelay() !== true;
-    assert(config.getPriority() === undefined || config.getPriority() >= 0 && config.getPriority() <= 3);
-    params.priority = config.getPriority();
-    params.get_tx_hex = true;
-    params.get_tx_metadata = true;
-    if (config.getCanSplit()) params.get_tx_keys = true; // param to get tx key(s) depends if split
-    else params.get_tx_key = true;
-
-    // cannot apply subtractFeeFrom with `transfer_split` call
-    if (config.getCanSplit() && config.getSubtractFeeFrom() && config.getSubtractFeeFrom().length > 0) {
-      throw new MoneroError("subtractfeefrom transfers cannot be split over multiple transactions yet");
-    }
-    
-    // send request
-    let result;
-    try {
-      let resp = await this.rpc.sendJsonRequest(config.getCanSplit() ? "transfer_split" : "transfer", params);
-      result = resp.result;
-    } catch (err) {
-      if (err.message.indexOf("WALLET_RPC_ERROR_CODE_WRONG_ADDRESS") > -1) throw new MoneroError("Invalid destination address");
-      throw err;
-    }
-    
-    // pre-initialize txs iff present. multisig and view-only wallets will have tx set without transactions
-    let txs;
-    let numTxs = config.getCanSplit() ? (result.fee_list !== undefined ? result.fee_list.length : 0) : (result.fee !== undefined ? 1 : 0);
-    if (numTxs > 0) txs = [];
-    let copyDestinations = numTxs === 1;
-    for (let i = 0; i < numTxs; i++) {
-      let tx = new MoneroTxWallet();
-      MoneroWalletRpc._initSentTxWallet(config, tx, copyDestinations);
-      tx.getOutgoingTransfer().setAccountIndex(accountIdx);
-      if (subaddressIndices !== undefined && subaddressIndices.length === 1) tx.getOutgoingTransfer().setSubaddressIndices(subaddressIndices);
-      txs.push(tx);
-    }
-    
-    // notify of changes
-    if (config.getRelay()) await this._poll();
-    
-    // initialize tx set from rpc response with pre-initialized txs
-    if (config.getCanSplit()) return MoneroWalletRpc._convertRpcSentTxsToTxSet(result, txs, config).getTxs();
-    else return MoneroWalletRpc._convertRpcTxToTxSet(result, txs === undefined ? undefined : txs[0], true, config).getTxs();
-  }
-  
-  async sweepOutput(config) {
-    
-    // normalize and validate config
-    config = MoneroWallet._normalizeSweepOutputConfig(config);
-    
-    // build request parameters
-    let params = {};
-    params.address = config.getDestinations()[0].getAddress();
-    params.account_index = config.getAccountIndex();
-    params.subaddr_indices = config.getSubaddressIndices();
-    params.key_image = config.getKeyImage();
-    if (config.getUnlockTime() !== undefined) params.unlock_time = config.getUnlockTime();
-    params.do_not_relay = config.getRelay() !== true;
-    assert(config.getPriority() === undefined || config.getPriority() >= 0 && config.getPriority() <= 3);
-    params.priority = config.getPriority();
-    params.payment_id = config.getPaymentId();
-    params.get_tx_key = true;
-    params.get_tx_hex = true;
-    params.get_tx_metadata = true;
-    
-    // send request
-    let resp = await this.rpc.sendJsonRequest("sweep_single", params);
-    let result = resp.result;
-    
-    // notify of changes
-    if (config.getRelay()) await this._poll();
-    
-    // build and return tx
-    let tx = MoneroWalletRpc._initSentTxWallet(config, undefined, true);
-    MoneroWalletRpc._convertRpcTxToTxSet(result, tx, true, config);
-    tx.getOutgoingTransfer().getDestinations()[0].setAmount(tx.getOutgoingTransfer().getAmount()); // initialize destination amount
-    return tx;
-  }
-  
-  async sweepUnlocked(config) {
-    
-    // validate and normalize config
-    config = MoneroWallet._normalizeSweepUnlockedConfig(config);
-    
-    // determine account and subaddress indices to sweep; default to all with unlocked balance if not specified
-    let indices = new Map();  // maps each account index to subaddress indices to sweep
-    if (config.getAccountIndex() !== undefined) {
-      if (config.getSubaddressIndices() !== undefined) {
-        indices.set(config.getAccountIndex(), config.getSubaddressIndices());
-      } else {
-        let subaddressIndices = [];
-        indices.set(config.getAccountIndex(), subaddressIndices);
-        for (let subaddress of await this.getSubaddresses(config.getAccountIndex())) {
-          if (subaddress.getUnlockedBalance().compare(new BigInteger(0)) > 0) subaddressIndices.push(subaddress.getIndex());
-        }
-      }
-    } else {
-      let accounts = await this.getAccounts(true);
-      for (let account of accounts) {
-        if (account.getUnlockedBalance().compare(new BigInteger(0)) > 0) {
-          let subaddressIndices = [];
-          indices.set(account.getIndex(), subaddressIndices);
-          for (let subaddress of account.getSubaddresses()) {
-            if (subaddress.getUnlockedBalance().compare(new BigInteger(0)) > 0) subaddressIndices.push(subaddress.getIndex());
-          }
-        }
-      }
-    }
-    
-    // sweep from each account and collect resulting tx sets
-    let txs = [];
-    for (let accountIdx of indices.keys()) {
-      
-      // copy and modify the original config
-      let copy = config.copy();
-      copy.setAccountIndex(accountIdx);
-      copy.setSweepEachSubaddress(false);
-      
-      // sweep all subaddresses together  // TODO monero-project: can this reveal outputs belong to the same wallet?
-      if (copy.getSweepEachSubaddress() !== true) {
-        copy.setSubaddressIndices(indices.get(accountIdx));
-        for (let tx of await this._rpcSweepAccount(copy)) txs.push(tx);
-      }
-      
-      // otherwise sweep each subaddress individually
-      else {
-        for (let subaddressIdx of indices.get(accountIdx)) {
-          copy.setSubaddressIndices([subaddressIdx]);
-          for (let tx of await this._rpcSweepAccount(copy)) txs.push(tx);
-        }
-      }
-    }
-    
-    // notify of changes
-    if (config.getRelay()) await this._poll();
-    return txs;
-  }
-  
-  async sweepDust(relay) {
-    if (relay === undefined) relay = false;
-    let resp = await this.rpc.sendJsonRequest("sweep_dust", {do_not_relay: !relay});
-    if (relay) await this._poll();
-    let result = resp.result;
-    let txSet = MoneroWalletRpc._convertRpcSentTxsToTxSet(result);
-    if (txSet.getTxs() === undefined) return [];
-    for (let tx of txSet.getTxs()) {
-      tx.setIsRelayed(!relay);
-      tx.setInTxPool(tx.isRelayed());
-    }
-    return txSet.getTxs();
-  }
-  
-  async relayTxs(txsOrMetadatas) {
-    assert(Array.isArray(txsOrMetadatas), "Must provide an array of txs or their metadata to relay");
-    let txHashes = [];
-    for (let txOrMetadata of txsOrMetadatas) {
-      let metadata = txOrMetadata instanceof MoneroTxWallet ? txOrMetadata.getMetadata() : txOrMetadata;
-      let resp = await this.rpc.sendJsonRequest("relay_tx", { hex: metadata });
-      txHashes.push(resp.result.tx_hash);
-    }
-    await this._poll(); // notify of changes
-    return txHashes;
-  }
-  
-  async describeTxSet(txSet) {
-    let resp = await this.rpc.sendJsonRequest("describe_transfer", {
-      unsigned_txset: txSet.getUnsignedTxHex(),
-      multisig_txset: txSet.getMultisigTxHex()
-    });
-    return MoneroWalletRpc._convertRpcDescribeTransfer(resp.result);
-  }
-  
-  async signTxs(unsignedTxHex) {
-    let resp = await this.rpc.sendJsonRequest("sign_transfer", {
-      unsigned_txset: unsignedTxHex,
-      export_raw: false
-    });
-    await this._poll();
-    return resp.result.signed_txset
-  }
-  
-  async submitTxs(signedTxHex) {
-    let resp = await this.rpc.sendJsonRequest("submit_transfer", {
-      tx_data_hex: signedTxHex
-    });
-    await this._poll();
-    return resp.result.tx_hash_list;
-  }
-  
-  async signMessage(message, signatureType, accountIdx, subaddressIdx) {
-    let resp = await this.rpc.sendJsonRequest("sign", {
-        data: message,
-        signature_type: signatureType === MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY ? "spend" : "view",
-        account_index: accountIdx,
-        address_index: subaddressIdx
-    });
-    return resp.result.signature;
-  }
-  
-  async verifyMessage(message, address, signature) {
-    try {
-      let resp = await this.rpc.sendJsonRequest("verify", {data: message, address: address, signature: signature});
-      let result = new MoneroMessageSignatureResult(
-        resp.result.good,
-        !resp.result.good ? undefined : resp.result.old,
-        !resp.result.good ? undefined : !resp.result.signature_type ? undefined : resp.result.signature_type === "view" ? MoneroMessageSignatureType.SIGN_WITH_VIEW_KEY : MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY,
-        !resp.result.good ? undefined : resp.result.version);
-      return result;
-    } catch (e) {
-      if (e.getCode() === -2) return new MoneroMessageSignatureResult(false);
-      throw e;
-    }
-  }
-  
-  async getTxKey(txHash) {
-    try {
-      return (await this.rpc.sendJsonRequest("get_tx_key", {txid: txHash})).result.tx_key;
-    } catch (e) {
-      if (e instanceof MoneroRpcError && e.getCode() === -8 && e.message.includes("TX ID has invalid format")) e = new MoneroRpcError("TX hash has invalid format", e.getCode(), e.getRpcMethod(), e.getRpcParams());  // normalize error message
-      throw e;
-    }
-  }
-  
-  async checkTxKey(txHash, txKey, address) {
-    try {
-      
-      // send request
-      let resp = await this.rpc.sendJsonRequest("check_tx_key", {txid: txHash, tx_key: txKey, address: address});
-      
-      // interpret result
-      let check = new MoneroCheckTx();
-      check.setIsGood(true);
-      check.setNumConfirmations(resp.result.confirmations);
-      check.setInTxPool(resp.result.in_pool);
-      check.setReceivedAmount(new BigInteger(resp.result.received));
-      return check;
-    } catch (e) {
-      if (e instanceof MoneroRpcError && e.getCode() === -8 && e.message.includes("TX ID has invalid format")) e = new MoneroRpcError("TX hash has invalid format", e.getCode(), e.getRpcMethod(), e.getRpcParams());  // normalize error message
-      throw e;
-    }
-  }
-  
-  async getTxProof(txHash, address, message) {
-    try {
-      let resp = await this.rpc.sendJsonRequest("get_tx_proof", {txid: txHash, address: address, message: message});
-      return resp.result.signature;
-    } catch (e) {
-      if (e instanceof MoneroRpcError && e.getCode() === -8 && e.message.includes("TX ID has invalid format")) e = new MoneroRpcError("TX hash has invalid format", e.getCode(), e.getRpcMethod(), e.getRpcParams());  // normalize error message
-      throw e;
-    }
-  }
-  
-  async checkTxProof(txHash, address, message, signature) {
-    try {
-      
-      // send request
-      let resp = await this.rpc.sendJsonRequest("check_tx_proof", {
-        txid: txHash,
-        address: address,
-        message: message,
-        signature: signature
-      });
-      
-      // interpret response
-      let isGood = resp.result.good;
-      let check = new MoneroCheckTx();
-      check.setIsGood(isGood);
-      if (isGood) {
-        check.setNumConfirmations(resp.result.confirmations);
-        check.setInTxPool(resp.result.in_pool);
-        check.setReceivedAmount(new BigInteger(resp.result.received));
-      }
-      return check;
-    } catch (e) {
-      if (e instanceof MoneroRpcError && e.getCode() === -1 && e.message === "basic_string") e = new MoneroRpcError("Must provide signature to check tx proof", -1);
-      if (e instanceof MoneroRpcError && e.getCode() === -8 && e.message.includes("TX ID has invalid format")) e = new MoneroRpcError("TX hash has invalid format", e.getCode(), e.getRpcMethod(), e.getRpcParams());
-      throw e;
-    }
-  }
-  
-  async getSpendProof(txHash, message) {
-    try {
-      let resp = await this.rpc.sendJsonRequest("get_spend_proof", {txid: txHash, message: message});
-      return resp.result.signature;
-    } catch (e) {
-      if (e instanceof MoneroRpcError && e.getCode() === -8 && e.message.includes("TX ID has invalid format")) e = new MoneroRpcError("TX hash has invalid format", e.getCode(), e.getRpcMethod(), e.getRpcParams());  // normalize error message
-      throw e;
-    }
-  }
-  
-  async checkSpendProof(txHash, message, signature) {
-    try {
-      let resp = await this.rpc.sendJsonRequest("check_spend_proof", {
-        txid: txHash,
-        message: message,
-        signature: signature
-      });
-      return resp.result.good;
-    } catch (e) {
-      if (e instanceof MoneroRpcError && e.getCode() === -8 && e.message.includes("TX ID has invalid format")) e = new MoneroRpcError("TX hash has invalid format", e.getCode(), e.getRpcMethod(), e.getRpcParams());  // normalize error message
-      throw e;
-    }
-  }
-  
-  async getReserveProofWallet(message) {
-    let resp = await this.rpc.sendJsonRequest("get_reserve_proof", {
-      all: true,
-      message: message
-    });
-    return resp.result.signature;
-  }
-  
-  async getReserveProofAccount(accountIdx, amount, message) {
-    let resp = await this.rpc.sendJsonRequest("get_reserve_proof", {
-      account_index: accountIdx,
-      amount: amount.toString(),
-      message: message
-    });
-    return resp.result.signature;
-  }
-
-  async checkReserveProof(address, message, signature) {
-    
-    // send request
-    let resp = await this.rpc.sendJsonRequest("check_reserve_proof", {
-      address: address,
-      message: message,
-      signature: signature
-    });
-    
-    // interpret results
-    let isGood = resp.result.good;
-    let check = new MoneroCheckReserve();
-    check.setIsGood(isGood);
-    if (isGood) {
-      check.setUnconfirmedSpentAmount(new BigInteger(resp.result.spent));
-      check.setTotalAmount(new BigInteger(resp.result.total));
-    }
-    return check;
-  }
-  
-  async getTxNotes(txHashes) {
-    return (await this.rpc.sendJsonRequest("get_tx_notes", {txids: txHashes})).result.notes;
-  }
-  
-  async setTxNotes(txHashes, notes) {
-    await this.rpc.sendJsonRequest("set_tx_notes", {txids: txHashes, notes: notes});
-  }
-  
-  async getAddressBookEntries(entryIndices) {
-    let resp = await this.rpc.sendJsonRequest("get_address_book", {entries: entryIndices});
-    if (!resp.result.entries) return [];
-    let entries = [];
-    for (let rpcEntry of resp.result.entries) {
-      entries.push(new MoneroAddressBookEntry().setIndex(rpcEntry.index).setAddress(rpcEntry.address).setDescription(rpcEntry.description).setPaymentId(rpcEntry.payment_id));
-    }
-    return entries;
-  }
-  
-  async addAddressBookEntry(address, description) {
-    let resp = await this.rpc.sendJsonRequest("add_address_book", {address: address, description: description});
-    return resp.result.index;
-  }
-  
-  async editAddressBookEntry(index, setAddress, address, setDescription, description) {
-    let resp = await this.rpc.sendJsonRequest("edit_address_book", {
-      index: index,
-      set_address: setAddress,
-      address: address,
-      set_description: setDescription,
-      description: description
-    });
-  }
-  
-  async deleteAddressBookEntry(entryIdx) {
-    await this.rpc.sendJsonRequest("delete_address_book", {index: entryIdx});
-  }
-  
-  async tagAccounts(tag, accountIndices) {
-    await this.rpc.sendJsonRequest("tag_accounts", {tag: tag, accounts: accountIndices});
-  }
-
-  async untagAccounts(accountIndices) {
-    await this.rpc.sendJsonRequest("untag_accounts", {accounts: accountIndices});
-  }
-
-  async getAccountTags() {
-    let tags = [];
-    let resp = await this.rpc.sendJsonRequest("get_account_tags");
-    if (resp.result.account_tags) {
-      for (let rpcAccountTag of resp.result.account_tags) {
-        tags.push(new MoneroAccountTag(rpcAccountTag.tag ? rpcAccountTag.tag : undefined, rpcAccountTag.label ? rpcAccountTag.label : undefined, rpcAccountTag.accounts));
-      }
-    }
-    return tags;
-  }
-
-  async setAccountTagLabel(tag, label) {
-    await this.rpc.sendJsonRequest("set_account_tag_description", {tag: tag, description: label});
-  }
-  
-  async getPaymentUri(config) {
-    config = MoneroWallet._normalizeCreateTxsConfig(config);
-    let resp = await this.rpc.sendJsonRequest("make_uri", {
-      address: config.getDestinations()[0].getAddress(),
-      amount: config.getDestinations()[0].getAmount() ? config.getDestinations()[0].getAmount().toString() : undefined,
-      payment_id: config.getPaymentId(),
-      recipient_name: config.getRecipientName(),
-      tx_description: config.getNote()
-    });
-    return resp.result.uri;
-  }
-  
-  async parsePaymentUri(uri) {
-    assert(uri, "Must provide URI to parse");
-    let resp = await this.rpc.sendJsonRequest("parse_uri", {uri: uri});
-    let config = new MoneroTxConfig({address: resp.result.uri.address, amount: new BigInteger(resp.result.uri.amount)});
-    config.setPaymentId(resp.result.uri.payment_id);
-    config.setRecipientName(resp.result.uri.recipient_name);
-    config.setNote(resp.result.uri.tx_description);
-    if ("" === config.getDestinations()[0].getAddress()) config.getDestinations()[0].setAddress(undefined);
-    if ("" === config.getPaymentId()) config.setPaymentId(undefined);
-    if ("" === config.getRecipientName()) config.setRecipientName(undefined);
-    if ("" === config.getNote()) config.setNote(undefined);
-    return config;
-  }
-  
-  async getAttribute(key) {
-    try {
-      let resp = await this.rpc.sendJsonRequest("get_attribute", {key: key});
-      return resp.result.value === "" ? undefined : resp.result.value;
-    } catch (e) {
-      if (e instanceof MoneroRpcError && e.getCode() === -45) return undefined;
-      throw e;
-    }
-  }
-  
-  async setAttribute(key, val) {
-    await this.rpc.sendJsonRequest("set_attribute", {key: key, value: val});
-  }
-  
-  async startMining(numThreads, backgroundMining, ignoreBattery) {
-    await this.rpc.sendJsonRequest("start_mining", {
-      threads_count: numThreads,
-      do_background_mining: backgroundMining,
-      ignore_battery: ignoreBattery
-    });
-  }
-  
-  async stopMining() {
-    await this.rpc.sendJsonRequest("stop_mining");
-  }
-  
-  async isMultisigImportNeeded() {
-    let resp = await this.rpc.sendJsonRequest("get_balance");
-    return resp.result.multisig_import_needed === true;
-  }
-  
-  async getMultisigInfo() {
-    let resp = await this.rpc.sendJsonRequest("is_multisig");
-    let result = resp.result;
-    let info = new MoneroMultisigInfo();
-    info.setIsMultisig(result.multisig);
-    info.setIsReady(result.ready);
-    info.setThreshold(result.threshold);
-    info.setNumParticipants(result.total);
-    return info;
-  }
-  
-  async prepareMultisig() {
-    let resp = await this.rpc.sendJsonRequest("prepare_multisig", {enable_multisig_experimental: true});
-    this.addressCache = {};
-    let result = resp.result;
-    return result.multisig_info;
-  }
-  
-  async makeMultisig(multisigHexes, threshold, password) {
-    let resp = await this.rpc.sendJsonRequest("make_multisig", {
-      multisig_info: multisigHexes,
-      threshold: threshold,
-      password: password
-    });
-    this.addressCache = {};
-    return resp.result.multisig_info;
-  }
-  
-  async exchangeMultisigKeys(multisigHexes, password) {
-    let resp = await this.rpc.sendJsonRequest("exchange_multisig_keys", {multisig_info: multisigHexes, password: password});
-    this.addressCache = {};
-    let msResult = new MoneroMultisigInitResult();
-    msResult.setAddress(resp.result.address);
-    msResult.setMultisigHex(resp.result.multisig_info);
-    if (msResult.getAddress().length === 0) msResult.setAddress(undefined);
-    if (msResult.getMultisigHex().length === 0) msResult.setMultisigHex(undefined);
-    return msResult;
-  }
-  
-  async exportMultisigHex() {
-    let resp = await this.rpc.sendJsonRequest("export_multisig_info");
-    return resp.result.info;
-  }
-
-  async importMultisigHex(multisigHexes) {
-    if (!GenUtils.isArray(multisigHexes)) throw new MoneroError("Must provide string[] to importMultisigHex()")
-    let resp = await this.rpc.sendJsonRequest("import_multisig_info", {info: multisigHexes});
-    return resp.result.n_outputs;
-  }
-
-  async signMultisigTxHex(multisigTxHex) {
-    let resp = await this.rpc.sendJsonRequest("sign_multisig", {tx_data_hex: multisigTxHex});
-    let result = resp.result;
-    let signResult = new MoneroMultisigSignResult();
-    signResult.setSignedMultisigTxHex(result.tx_data_hex);
-    signResult.setTxHashes(result.tx_hash_list);
-    return signResult;
-  }
-
-  async submitMultisigTxHex(signedMultisigTxHex) {
-    let resp = await this.rpc.sendJsonRequest("submit_multisig", {tx_data_hex: signedMultisigTxHex});
-    return resp.result.tx_hash_list;
-  }
-  
-  async changePassword(oldPassword, newPassword) {
-    return this.rpc.sendJsonRequest("change_wallet_password", {old_password: oldPassword || "", new_password: newPassword || ""});
-  }
-  
-  async save() {
-    await this.rpc.sendJsonRequest("store");
-  }
-  
-  async close(save) {
-    await super.close(save);
-    if (save === undefined) save = false;
-    await this._clear();
-    await this.rpc.sendJsonRequest("close_wallet", {autosave_current: save});
-  }
-  
-  async isClosed() {
-    try {
-      await this.getPrimaryAddress();
-    } catch (e) {
-      return e instanceof MoneroRpcError && e.getCode() === -13 && e.message.indexOf("No wallet file") > -1;
-    }
-    return false;
-  }
-  
-  /**
-   * Save and close the current wallet and stop the RPC server.
-   */
-  async stop() {
-    await this._clear();
-    await this.rpc.sendJsonRequest("stop_wallet");
-  }
-  
-  // ----------- ADD JSDOC FOR SUPPORTED DEFAULT IMPLEMENTATIONS --------------
-  
-  async getNumBlocksToUnlock() { return super.getNumBlocksToUnlock(...arguments); }
-  async getTx() { return super.getTx(...arguments); }
-  async getIncomingTransfers() { return super.getIncomingTransfers(...arguments); }
-  async getOutgoingTransfers() { return super.getOutgoingTransfers(...arguments); }
-  async createTx() { return super.createTx(...arguments); }
-  async relayTx() { return super.relayTx(...arguments); }
-  async getTxNote() { return super.getTxNote(...arguments); }
-  async setTxNote() { return super.setTxNote(...arguments); }
-  
-  // -------------------------------- PRIVATE ---------------------------------
-  
-  async _clear() {
-    this.listeners.splice(0, this.listeners.length);
-    this._refreshListening();
-    delete this.addressCache;
-    this.addressCache = {};
-    this.path = undefined;
-  }
-  
-  async _getBalances(accountIdx, subaddressIdx) {
-    if (accountIdx === undefined) {
-      assert.equal(subaddressIdx, undefined, "Must provide account index with subaddress index");
-      let balance = new BigInteger(0);
-      let unlockedBalance = new BigInteger(0);
-      for (let account of await this.getAccounts()) {
-        balance = balance.add(account.getBalance());
-        unlockedBalance = unlockedBalance.add(account.getUnlockedBalance());
-      }
-      return [balance, unlockedBalance];
-    } else {
-      let params = {account_index: accountIdx, address_indices: subaddressIdx === undefined ? undefined : [subaddressIdx]};
-      let resp = await this.rpc.sendJsonRequest("get_balance", params);
-      if (subaddressIdx === undefined) return [new BigInteger(resp.result.balance), new BigInteger(resp.result.unlocked_balance)];
-      else return [new BigInteger(resp.result.per_subaddress[0].balance), new BigInteger(resp.result.per_subaddress[0].unlocked_balance)];
-    }
-  }
-  
-  async _getAccountIndices(getSubaddressIndices) {
-    let indices = new Map();
-    for (let account of await this.getAccounts()) {
-      indices.set(account.getIndex(), getSubaddressIndices ? await this._getSubaddressIndices(account.getIndex()) : undefined);
-    }
-    return indices;
-  }
-  
-  async _getSubaddressIndices(accountIdx) {
-    let subaddressIndices = [];
-    let resp = await this.rpc.sendJsonRequest("get_address", {account_index: accountIdx});
-    for (let address of resp.result.addresses) subaddressIndices.push(address.address_index);
-    return subaddressIndices;
-  }
-  
-  async _getTransfersAux(query) {
-    
-    // build params for get_transfers rpc call
-    let txQuery = query.getTxQuery();
-    let canBeConfirmed = txQuery.isConfirmed() !== false && txQuery.inTxPool() !== true && txQuery.isFailed() !== true && txQuery.isRelayed() !== false;
-    let canBeInTxPool = txQuery.isConfirmed() !== true && txQuery.inTxPool() !== false && txQuery.isFailed() !== true && txQuery.getHeight() === undefined && txQuery.getMaxHeight() === undefined && txQuery.isLocked() !== false;
-    let canBeIncoming = query.isIncoming() !== false && query.isOutgoing() !== true && query.hasDestinations() !== true;
-    let canBeOutgoing = query.isOutgoing() !== false && query.isIncoming() !== true;
-
-    // check if fetching pool txs contradicted by configuration
-    if (txQuery.inTxPool() === true && !canBeInTxPool) {
-      throw new MoneroError("Cannot fetch pool transactions because it contradicts configuration");
-    }
-
-    let params = {};
-    params.in = canBeIncoming && canBeConfirmed;
-    params.out = canBeOutgoing && canBeConfirmed;
-    params.pool = canBeIncoming && canBeInTxPool;
-    params.pending = canBeOutgoing && canBeInTxPool;
-    params.failed = txQuery.isFailed() !== false && txQuery.isConfirmed() !== true && txQuery.inTxPool() != true;
-    if (txQuery.getMinHeight() !== undefined) {
-      if (txQuery.getMinHeight() > 0) params.min_height = txQuery.getMinHeight() - 1; // TODO monero-project: wallet2::get_payments() min_height is exclusive, so manually offset to match intended range (issues #5751, #5598)
-      else params.min_height = txQuery.getMinHeight();
-    }
-    if (txQuery.getMaxHeight() !== undefined) params.max_height = txQuery.getMaxHeight();
-    params.filter_by_height = txQuery.getMinHeight() !== undefined || txQuery.getMaxHeight() !== undefined;
-    if (query.getAccountIndex() === undefined) {
-      assert(query.getSubaddressIndex() === undefined && query.getSubaddressIndices() === undefined, "Query specifies a subaddress index but not an account index");
-      params.all_accounts = true;
-    } else {
-      params.account_index = query.getAccountIndex();
-      
-      // set subaddress indices param
-      let subaddressIndices = new Set();
-      if (query.getSubaddressIndex() !== undefined) subaddressIndices.add(query.getSubaddressIndex());
-      if (query.getSubaddressIndices() !== undefined) query.getSubaddressIndices().map(subaddressIdx => subaddressIndices.add(subaddressIdx));
-      if (subaddressIndices.size) params.subaddr_indices = Array.from(subaddressIndices);
-    }
-    
-    // cache unique txs and blocks
-    let txMap = {};
-    let blockMap = {};
-    
-    // build txs using `get_transfers`
-    let resp = await this.rpc.sendJsonRequest("get_transfers", params);
-    for (let key of Object.keys(resp.result)) {
-      for (let rpcTx of resp.result[key]) {
-        //if (rpcTx.txid === query.debugTxId) console.log(rpcTx);
-        let tx = MoneroWalletRpc._convertRpcTxWithTransfer(rpcTx);
-        if (tx.isConfirmed()) assert(tx.getBlock().getTxs().indexOf(tx) > -1);
-        
-        // replace transfer amount with destination sum
-        // TODO monero-wallet-rpc: confirmed tx from/to same account has amount 0 but cached transfers
-        if (tx.getOutgoingTransfer() !== undefined && tx.isRelayed() && !tx.isFailed() &&
-            tx.getOutgoingTransfer().getDestinations() && tx.getOutgoingAmount().compare(new BigInteger(0)) === 0) {
-          let outgoingTransfer = tx.getOutgoingTransfer();
-          let transferTotal = new BigInteger(0);
-          for (let destination of outgoingTransfer.getDestinations()) transferTotal = transferTotal.add(destination.getAmount());
-          tx.getOutgoingTransfer().setAmount(transferTotal);
-        }
-        
-        // merge tx
-        MoneroWalletRpc._mergeTx(tx, txMap, blockMap);
-      }
-    }
-    
-    // sort txs by block height
-    let txs = Object.values(txMap);
-    txs.sort(MoneroWalletRpc._compareTxsByHeight);
-    
-    // filter and return transfers
-    let transfers = [];
-    for (let tx of txs) {
-      
-      // tx is not incoming/outgoing unless already set
-      if (tx.isIncoming() === undefined) tx.setIsIncoming(false);
-      if (tx.isOutgoing() === undefined) tx.setIsOutgoing(false);
-      
-      // sort incoming transfers
-      if (tx.getIncomingTransfers() !== undefined) tx.getIncomingTransfers().sort(MoneroWalletRpc._compareIncomingTransfers);
-      
-      // collect queried transfers, erase if excluded
-      for (let transfer of tx.filterTransfers(query)) {
-        transfers.push(transfer);
-      }
-      
-      // remove txs without requested transfer
-      if (tx.getBlock() !== undefined && tx.getOutgoingTransfer() === undefined && tx.getIncomingTransfers() === undefined) {
-        tx.getBlock().getTxs().splice(tx.getBlock().getTxs().indexOf(tx), 1);
-      }
-    }
-    
-    return transfers;
-  }
-  
-  async _getOutputsAux(query) {
-    
-    // determine account and subaddress indices to be queried
-    let indices = new Map();
-    if (query.getAccountIndex() !== undefined) {
-      let subaddressIndices = new Set();
-      if (query.getSubaddressIndex() !== undefined) subaddressIndices.add(query.getSubaddressIndex());
-      if (query.getSubaddressIndices() !== undefined) query.getSubaddressIndices().map(subaddressIdx => subaddressIndices.add(subaddressIdx));
-      indices.set(query.getAccountIndex(), subaddressIndices.size ? Array.from(subaddressIndices) : undefined);  // undefined will fetch from all subaddresses
-    } else {
-      assert.equal(query.getSubaddressIndex(), undefined, "Query specifies a subaddress index but not an account index")
-      assert(query.getSubaddressIndices() === undefined || query.getSubaddressIndices().length === 0, "Query specifies subaddress indices but not an account index");
-      indices = await this._getAccountIndices();  // fetch all account indices without subaddresses
-    }
-    
-    // cache unique txs and blocks
-    let txMap = {};
-    let blockMap = {};
-    
-    // collect txs with outputs for each indicated account using `incoming_transfers` rpc call
-    let params = {};
-    params.transfer_type = query.isSpent() === true ? "unavailable" : query.isSpent() === false ? "available" : "all";
-    params.verbose = true;
-    for (let accountIdx of indices.keys()) {
-    
-      // send request
-      params.account_index = accountIdx;
-      params.subaddr_indices = indices.get(accountIdx);
-      let resp = await this.rpc.sendJsonRequest("incoming_transfers", params);
-      
-      // convert response to txs with outputs and merge
-      if (resp.result.transfers === undefined) continue;
-      for (let rpcOutput of resp.result.transfers) {
-        let tx = MoneroWalletRpc._convertRpcTxWalletWithOutput(rpcOutput);
-        MoneroWalletRpc._mergeTx(tx, txMap, blockMap);
-      }
-    }
-    
-    // sort txs by block height
-    let txs = Object.values(txMap);
-    txs.sort(MoneroWalletRpc._compareTxsByHeight);
-    
-    // collect queried outputs
-    let outputs = [];
-    for (let tx of txs) {
-      
-      // sort outputs
-      if (tx.getOutputs() !== undefined) tx.getOutputs().sort(MoneroWalletRpc._compareOutputs);
-      
-      // collect queried outputs, erase if excluded
-      for (let output of tx.filterOutputs(query)) outputs.push(output);
-      
-      // remove excluded txs from block
-      if (tx.getOutputs() === undefined && tx.getBlock() !== undefined) {
-        tx.getBlock().getTxs().splice(tx.getBlock().getTxs().indexOf(tx), 1);
-      }
-    }
-    return outputs;
-  }
-  
-  /**
-   * Common method to get key images.
-   * 
-   * @param all - pecifies to get all xor only new images from last import
-   * @return {MoneroKeyImage[]} are the key images
-   */
-  async _rpcExportKeyImages(all) {
-    let resp = await this.rpc.sendJsonRequest("export_key_images", {all: all});
-    if (!resp.result.signed_key_images) return [];
-    return resp.result.signed_key_images.map(rpcImage => new MoneroKeyImage(rpcImage.key_image, rpcImage.signature));
-  }
-  
-  async _rpcSweepAccount(config) {
-    
-    // validate config
-    if (config === undefined) throw new MoneroError("Must provide sweep config");
-    if (config.getAccountIndex() === undefined) throw new MoneroError("Must provide an account index to sweep from");
-    if (config.getDestinations() === undefined || config.getDestinations().length != 1) throw new MoneroError("Must provide exactly one destination to sweep to");
-    if (config.getDestinations()[0].getAddress() === undefined) throw new MoneroError("Must provide destination address to sweep to");
-    if (config.getDestinations()[0].getAmount() !== undefined) throw new MoneroError("Cannot specify amount in sweep config");
-    if (config.getKeyImage() !== undefined) throw new MoneroError("Key image defined; use sweepOutput() to sweep an output by its key image");
-    if (config.getSubaddressIndices() !== undefined && config.getSubaddressIndices().length === 0) throw new MoneroError("Empty list given for subaddresses indices to sweep");
-    if (config.getSweepEachSubaddress()) throw new MoneroError("Cannot sweep each subaddress with RPC `sweep_all`");
-    if (config.getSubtractFeeFrom() !== undefined && config.getSubtractFeeFrom().length > 0) throw new MoneroError("Sweeping output does not support subtracting fees from destinations");
-    
-    // sweep from all subaddresses if not otherwise defined
-    if (config.getSubaddressIndices() === undefined) {
-      config.setSubaddressIndices([]);
-      for (let subaddress of await this.getSubaddresses(config.getAccountIndex())) {
-        config.getSubaddressIndices().push(subaddress.getIndex());
-      }
-    }
-    if (config.getSubaddressIndices().length === 0) throw new MoneroError("No subaddresses to sweep from");
-    
-    // common config params
-    let params = {};
-    let relay = config.getRelay() === true;
-    params.account_index = config.getAccountIndex();
-    params.subaddr_indices = config.getSubaddressIndices();
-    params.address = config.getDestinations()[0].getAddress();
-    assert(config.getPriority() === undefined || config.getPriority() >= 0 && config.getPriority() <= 3);
-    params.priority = config.getPriority();
-    if (config.getUnlockTime() !== undefined) params.unlock_time = config.getUnlockTime();
-    params.payment_id = config.getPaymentId();
-    params.do_not_relay = !relay;
-    params.below_amount = config.getBelowAmount();
-    params.get_tx_keys = true;
-    params.get_tx_hex = true;
-    params.get_tx_metadata = true;
-    
-    // invoke wallet rpc `sweep_all`
-    let resp = await this.rpc.sendJsonRequest("sweep_all", params);
-    let result = resp.result;
-    
-    // initialize txs from response
-    let txSet = MoneroWalletRpc._convertRpcSentTxsToTxSet(result, undefined, config);
-    
-    // initialize remaining known fields
-    for (let tx of txSet.getTxs()) {
-      tx.setIsLocked(true);
-      tx.setIsConfirmed(false);
-      tx.setNumConfirmations(0);
-      tx.setRelay(relay);
-      tx.setInTxPool(relay);
-      tx.setIsRelayed(relay);
-      tx.setIsMinerTx(false);
-      tx.setIsFailed(false);
-      tx.setRingSize(MoneroUtils.RING_SIZE);
-      let transfer = tx.getOutgoingTransfer();
-      transfer.setAccountIndex(config.getAccountIndex());
-      if (config.getSubaddressIndices().length === 1) transfer.setSubaddressIndices(config.getSubaddressIndices());
-      let destination = new MoneroDestination(config.getDestinations()[0].getAddress(), new BigInteger(transfer.getAmount()));
-      transfer.setDestinations([destination]);
-      tx.setOutgoingTransfer(transfer);
-      tx.setPaymentId(config.getPaymentId());
-      if (tx.getUnlockTime() === undefined) tx.setUnlockTime(config.getUnlockTime() === undefined ? 0 : config.getUnlockTime());
-      if (tx.getRelay()) {
-        if (tx.getLastRelayedTimestamp() === undefined) tx.setLastRelayedTimestamp(+new Date().getTime());  // TODO (monero-wallet-rpc): provide timestamp on response; unconfirmed timestamps vary
-        if (tx.isDoubleSpendSeen() === undefined) tx.setIsDoubleSpend(false);
-      }
-    }
-    return txSet.getTxs();
-  }
-  
-  _refreshListening() {
-    if (this.walletPoller == undefined && this.listeners.length) this.walletPoller = new WalletPoller(this);
-    if (this.walletPoller !== undefined) this.walletPoller.setIsPolling(this.listeners.length > 0);
-  }
-  
-  /**
-   * Poll if listening.
-   */
-  async _poll() {
-    if (this.walletPoller !== undefined && this.walletPoller._isPolling) await this.walletPoller.poll();
-  }
-  
-  // ---------------------------- PRIVATE STATIC ------------------------------
-  
-  static _normalizeConfig(uriOrConfigOrConnection, username, password, rejectUnauthorized) {
-    let config;
-    if (typeof uriOrConfigOrConnection === "string") config = {uri: uriOrConfigOrConnection, username: username, password: password, rejectUnauthorized: rejectUnauthorized};
-    else {
-      if (typeof uriOrConfigOrConnection !== "object") throw new MoneroError("Invalid configuration to create rpc client; must be string, object, or MoneroRpcConnection");
-      if (username || password || rejectUnauthorized) throw new MoneroError("Can provide config object or params or new MoneroDaemonRpc(...) but not both");
-      if (uriOrConfigOrConnection instanceof MoneroRpcConnection) config = Object.assign({}, uriOrConfigOrConnection.getConfig());
-      else config = Object.assign({}, uriOrConfigOrConnection);
-    }
-    if (config.server) {
-      config = Object.assign(config, new MoneroRpcConnection(config.server).getConfig());
-      delete config.server;
-    }
-    return config;
-  }
-  
-  /**
-   * Remove criteria which requires looking up other transfers/outputs to
-   * fulfill query.
-   * 
-   * @param {MoneroTxQuery} query - the query to decontextualize
-   * @return {MoneroTxQuery} a reference to the query for convenience
-   */
-  static _decontextualize(query) {
-    query.setIsIncoming(undefined);
-    query.setIsOutgoing(undefined);
-    query.setTransferQuery(undefined);
-    query.setInputQuery(undefined);
-    query.setOutputQuery(undefined);
-    return query;
-  }
-  
-  static _isContextual(query) {
-    if (!query) return false;
-    if (!query.getTxQuery()) return false;
-    if (query.getTxQuery().isIncoming() !== undefined) return true; // requires getting other transfers
-    if (query.getTxQuery().isOutgoing() !== undefined) return true;
-    if (query instanceof MoneroTransferQuery) {
-      if (query.getTxQuery().getOutputQuery() !== undefined) return true; // requires getting other outputs
-    } else if (query instanceof MoneroOutputQuery) {
-      if (query.getTxQuery().getTransferQuery() !== undefined) return true; // requires getting other transfers
-    } else {
-      throw new MoneroError("query must be tx or transfer query");
-    }
-    return false;
-  }
-  
-  static _convertRpcAccount(rpcAccount) {
-    let account = new MoneroAccount();
-    for (let key of Object.keys(rpcAccount)) {
-      let val = rpcAccount[key];
-      if (key === "account_index") account.setIndex(val);
-      else if (key === "balance") account.setBalance(new BigInteger(val));
-      else if (key === "unlocked_balance") account.setUnlockedBalance(new BigInteger(val));
-      else if (key === "base_address") account.setPrimaryAddress(val);
-      else if (key === "tag") account.setTag(val);
-      else if (key === "label") { } // label belongs to first subaddress
-      else console.log("WARNING: ignoring unexpected account field: " + key + ": " + val);
-    }
-    if ("" === account.getTag()) account.setTag(undefined);
-    return account;
-  }
-  
-  static _convertRpcSubaddress(rpcSubaddress) {
-    let subaddress = new MoneroSubaddress();
-    for (let key of Object.keys(rpcSubaddress)) {
-      let val = rpcSubaddress[key];
-      if (key === "account_index") subaddress.setAccountIndex(val);
-      else if (key === "address_index") subaddress.setIndex(val);
-      else if (key === "address") subaddress.setAddress(val);
-      else if (key === "balance") subaddress.setBalance(new BigInteger(val));
-      else if (key === "unlocked_balance") subaddress.setUnlockedBalance(new BigInteger(val));
-      else if (key === "num_unspent_outputs") subaddress.setNumUnspentOutputs(val);
-      else if (key === "label") { if (val) subaddress.setLabel(val); }
-      else if (key === "used") subaddress.setIsUsed(val);
-      else if (key === "blocks_to_unlock") subaddress.setNumBlocksToUnlock(val);
-      else if (key == "time_to_unlock") {}  // ignoring
-      else console.log("WARNING: ignoring unexpected subaddress field: " + key + ": " + val);
-    }
-    return subaddress;
-  }
-  
-  /**
-   * Initializes a sent transaction.
-   * 
-   * TODO: remove copyDestinations after >18.2.2 when subtractFeeFrom fully supported
-   * 
-   * @param {MoneroTxConfig} config - send config
-   * @param {MoneroTxWallet} tx - existing transaction to initialize (optional)
-   * @param {boolean} copyDestinations - copies config destinations if true
-   * @return {MoneroTxWallet} is the initialized send tx
-   */
-  static _initSentTxWallet(config, tx, copyDestinations) {
-    if (!tx) tx = new MoneroTxWallet();
-    let relay = config.getRelay() === true;
-    tx.setIsOutgoing(true);
-    tx.setIsConfirmed(false);
-    tx.setNumConfirmations(0);
-    tx.setInTxPool(relay);
-    tx.setRelay(relay);
-    tx.setIsRelayed(relay);
-    tx.setIsMinerTx(false);
-    tx.setIsFailed(false);
-    tx.setIsLocked(true);
-    tx.setRingSize(MoneroUtils.RING_SIZE);
-    let transfer = new MoneroOutgoingTransfer().setTx(tx);
-    if (config.getSubaddressIndices() && config.getSubaddressIndices().length === 1) transfer.setSubaddressIndices(config.getSubaddressIndices().slice(0)); // we know src subaddress indices iff config specifies 1
-    if (copyDestinations) {
-      let destCopies = [];
-      for (let dest of config.getDestinations()) destCopies.push(dest.copy());
-      transfer.setDestinations(destCopies);
-    }
-    tx.setOutgoingTransfer(transfer);
-    tx.setPaymentId(config.getPaymentId());
-    if (tx.getUnlockTime() === undefined) tx.setUnlockTime(config.getUnlockTime() === undefined ? 0 : config.getUnlockTime());
-    if (config.getRelay()) {
-      if (tx.getLastRelayedTimestamp() === undefined) tx.setLastRelayedTimestamp(+new Date().getTime());  // TODO (monero-wallet-rpc): provide timestamp on response; unconfirmed timestamps vary
-      if (tx.isDoubleSpendSeen() === undefined) tx.setIsDoubleSpend(false);
-    }
-    return tx;
-  }
-  
-  /**
-   * Initializes a tx set from a RPC map excluding txs.
-   * 
-   * @param rpcMap - map to initialize the tx set from
-   * @return MoneroTxSet - initialized tx set
-   * @return the resulting tx set
-   */
-  static _convertRpcTxSet(rpcMap) {
-    let txSet = new MoneroTxSet();
-    txSet.setMultisigTxHex(rpcMap.multisig_txset);
-    txSet.setUnsignedTxHex(rpcMap.unsigned_txset);
-    txSet.setSignedTxHex(rpcMap.signed_txset);
-    if (txSet.getMultisigTxHex() !== undefined && txSet.getMultisigTxHex().length === 0) txSet.setMultisigTxHex(undefined);
-    if (txSet.getUnsignedTxHex() !== undefined && txSet.getUnsignedTxHex().length === 0) txSet.setUnsignedTxHex(undefined);
-    if (txSet.getSignedTxHex() !== undefined && txSet.getSignedTxHex().length === 0) txSet.setSignedTxHex(undefined);
-    return txSet;
-  }
-  
-  /**
-   * Initializes a MoneroTxSet from a list of rpc txs.
-   * 
-   * @param rpcTxs - rpc txs to initialize the set from
-   * @param txs - existing txs to further initialize (optional)
-   * @param config - tx config
-   * @return the converted tx set
-   */
-  static _convertRpcSentTxsToTxSet(rpcTxs, txs, config) {
-    
-    // build shared tx set
-    let txSet = MoneroWalletRpc._convertRpcTxSet(rpcTxs);
-    
-    // get number of txs
-    let numTxs = rpcTxs.fee_list ? rpcTxs.fee_list.length : 0;
-    
-    // done if rpc response contains no txs
-    if (numTxs === 0) {
-      assert.equal(txs, undefined);
-      return txSet;
-    }
-    
-    // pre-initialize txs if none given
-    if (txs) txSet.setTxs(txs);
-    else {
-      txs = [];
-      for (let i = 0; i < numTxs; i++) txs.push(new MoneroTxWallet());
-    }
-    for (let tx of txs) {
-      tx.setTxSet(txSet);
-      tx.setIsOutgoing(true);
-    }
-    txSet.setTxs(txs);
-    
-    // initialize txs from rpc lists
-    for (let key of Object.keys(rpcTxs)) {
-      let val = rpcTxs[key];
-      if (key === "tx_hash_list") for (let i = 0; i < val.length; i++) txs[i].setHash(val[i]);
-      else if (key === "tx_key_list") for (let i = 0; i < val.length; i++) txs[i].setKey(val[i]);
-      else if (key === "tx_blob_list") for (let i = 0; i < val.length; i++) txs[i].setFullHex(val[i]);
-      else if (key === "tx_metadata_list") for (let i = 0; i < val.length; i++) txs[i].setMetadata(val[i]);
-      else if (key === "fee_list") for (let i = 0; i < val.length; i++) txs[i].setFee(new BigInteger(val[i]));
-      else if (key === "weight_list") for (let i = 0; i < val.length; i++) txs[i].setWeight(val[i]);
-      else if (key === "amount_list") {
-        for (let i = 0; i < val.length; i++) {
-          if (txs[i].getOutgoingTransfer() == undefined) txs[i].setOutgoingTransfer(new MoneroOutgoingTransfer().setTx(txs[i]));
-          txs[i].getOutgoingTransfer().setAmount(new BigInteger(val[i]));
-        }
-      }
-      else if (key === "multisig_txset" || key === "unsigned_txset" || key === "signed_txset") {} // handled elsewhere
-      else if (key === "spent_key_images_list") {
-        let inputKeyImagesList = val;
-        for (let i = 0; i < inputKeyImagesList.length; i++) {
-          GenUtils.assertTrue(txs[i].getInputs() === undefined);
-          txs[i].setInputs([]);
-          for (let inputKeyImage of inputKeyImagesList[i]["key_images"]) {
-            txs[i].getInputs().push(new MoneroOutputWallet().setKeyImage(new MoneroKeyImage().setHex(inputKeyImage)).setTx(txs[i]));
-          }
-        }
-      }
-      else if (key === "amounts_by_dest_list") {
-        let amountsByDestList = val;
-        let destinationIdx = 0;
-        for (let txIdx = 0; txIdx < amountsByDestList.length; txIdx++) {
-          let amountsByDest = amountsByDestList[txIdx]["amounts"];
-          if (txs[txIdx].getOutgoingTransfer() === undefined) txs[txIdx].setOutgoingTransfer(new MoneroOutgoingTransfer().setTx(txs[txIdx]));
-          txs[txIdx].getOutgoingTransfer().setDestinations([]);
-          for (let amount of amountsByDest) {
-            if (config.getDestinations().length === 1) txs[txIdx].getOutgoingTransfer().getDestinations().push(new MoneroDestination(config.getDestinations()[0].getAddress(), new BigInteger(amount))); // sweeping can create multiple txs with one address
-            else txs[txIdx].getOutgoingTransfer().getDestinations().push(new MoneroDestination(config.getDestinations()[destinationIdx++].getAddress(), new BigInteger(amount)));
-          }
-        }
-      }
-      else console.log("WARNING: ignoring unexpected transaction field: " + key + ": " + val);
-    }
-    
-    return txSet;
-  }
-  
-  /**
-   * Converts a rpc tx with a transfer to a tx set with a tx and transfer.
-   * 
-   * @param rpcTx - rpc tx to build from
-   * @param tx - existing tx to continue initializing (optional)
-   * @param isOutgoing - specifies if the tx is outgoing if true, incoming if false, or decodes from type if undefined
-   * @param config - tx config
-   * @returns the initialized tx set with a tx
-   */
-  static _convertRpcTxToTxSet(rpcTx, tx, isOutgoing, config) {
-    let txSet = MoneroWalletRpc._convertRpcTxSet(rpcTx);
-    txSet.setTxs([MoneroWalletRpc._convertRpcTxWithTransfer(rpcTx, tx, isOutgoing, config).setTxSet(txSet)]);
-    return txSet;
-  }
-  
-  /**
-   * Builds a MoneroTxWallet from a RPC tx.
-   * 
-   * @param rpcTx - rpc tx to build from
-   * @param tx - existing tx to continue initializing (optional)
-   * @param isOutgoing - specifies if the tx is outgoing if true, incoming if false, or decodes from type if undefined
-   * @param config - tx config
-   * @returns {MoneroTxWallet} is the initialized tx
-   */
-  static _convertRpcTxWithTransfer(rpcTx, tx, isOutgoing, config) {  // TODO: change everything to safe set
-        
-    // initialize tx to return
-    if (!tx) tx = new MoneroTxWallet();
-    
-    // initialize tx state from rpc type
-    if (rpcTx.type !== undefined) isOutgoing = MoneroWalletRpc._decodeRpcType(rpcTx.type, tx);
-    else assert.equal(typeof isOutgoing, "boolean", "Must indicate if tx is outgoing (true) xor incoming (false) since unknown");
-    
-    // TODO: safe set
-    // initialize remaining fields  TODO: seems this should be part of common function with DaemonRpc._convertRpcTx
-    let header;
-    let transfer;
-    for (let key of Object.keys(rpcTx)) {
-      let val = rpcTx[key];
-      if (key === "txid") tx.setHash(val);
-      else if (key === "tx_hash") tx.setHash(val);
-      else if (key === "fee") tx.setFee(new BigInteger(val));
-      else if (key === "note") { if (val) tx.setNote(val); }
-      else if (key === "tx_key") tx.setKey(val);
-      else if (key === "type") { } // type already handled
-      else if (key === "tx_size") tx.setSize(val);
-      else if (key === "unlock_time") tx.setUnlockTime(val);
-      else if (key === "weight") tx.setWeight(val);
-      else if (key === "locked") tx.setIsLocked(val);
-      else if (key === "tx_blob") tx.setFullHex(val);
-      else if (key === "tx_metadata") tx.setMetadata(val);
-      else if (key === "double_spend_seen") tx.setIsDoubleSpend(val);
-      else if (key === "block_height" || key === "height") {
-        if (tx.isConfirmed()) {
-          if (!header) header = new MoneroBlockHeader();
-          header.setHeight(val);
-        }
-      }
-      else if (key === "timestamp") {
-        if (tx.isConfirmed()) {
-          if (!header) header = new MoneroBlockHeader();
-          header.setTimestamp(val);
-        } else {
-          // timestamp of unconfirmed tx is current request time
-        }
-      }
-      else if (key === "confirmations") tx.setNumConfirmations(val);
-      else if (key === "suggested_confirmations_threshold") {
-        if (transfer === undefined) transfer = (isOutgoing ? new MoneroOutgoingTransfer() : new MoneroIncomingTransfer()).setTx(tx);
-        if (!isOutgoing) transfer.setNumSuggestedConfirmations(val);
-      }
-      else if (key === "amount") {
-        if (transfer === undefined) transfer = (isOutgoing ? new MoneroOutgoingTransfer() : new MoneroIncomingTransfer()).setTx(tx);
-        transfer.setAmount(new BigInteger(val));
-      }
-      else if (key === "amounts") {}  // ignoring, amounts sum to amount
-      else if (key === "address") {
-        if (!isOutgoing) {
-          if (!transfer) transfer = new MoneroIncomingTransfer().setTx(tx);
-          transfer.setAddress(val);
-        }
-      }
-      else if (key === "payment_id") {
-        if ("" !== val && MoneroTxWallet.DEFAULT_PAYMENT_ID !== val) tx.setPaymentId(val);  // default is undefined
-      }
-      else if (key === "subaddr_index") assert(rpcTx.subaddr_indices);  // handled by subaddr_indices
-      else if (key === "subaddr_indices") {
-        if (!transfer) transfer = (isOutgoing ? new MoneroOutgoingTransfer() : new MoneroIncomingTransfer()).setTx(tx);
-        let rpcIndices = val;
-        transfer.setAccountIndex(rpcIndices[0].major);
-        if (isOutgoing) {
-          let subaddressIndices = [];
-          for (let rpcIndex of rpcIndices) subaddressIndices.push(rpcIndex.minor);
-          transfer.setSubaddressIndices(subaddressIndices);
-        } else {
-          assert.equal(rpcIndices.length, 1);
-          transfer.setSubaddressIndex(rpcIndices[0].minor);
-        }
-      }
-      else if (key === "destinations" || key == "recipients") {
-        assert(isOutgoing);
-        let destinations = [];
-        for (let rpcDestination of val) {
-          let destination = new MoneroDestination();
-          destinations.push(destination);
-          for (let destinationKey of Object.keys(rpcDestination)) {
-            if (destinationKey === "address") destination.setAddress(rpcDestination[destinationKey]);
-            else if (destinationKey === "amount") destination.setAmount(new BigInteger(rpcDestination[destinationKey]));
-            else throw new MoneroError("Unrecognized transaction destination field: " + destinationKey);
-          }
-        }
-        if (transfer === undefined) transfer = new MoneroOutgoingTransfer({tx: tx});
-        transfer.setDestinations(destinations);
-      }
-      else if (key === "multisig_txset" && val !== undefined) {} // handled elsewhere; this method only builds a tx wallet
-      else if (key === "unsigned_txset" && val !== undefined) {} // handled elsewhere; this method only builds a tx wallet
-      else if (key === "amount_in") tx.setInputSum(new BigInteger(val));
-      else if (key === "amount_out") tx.setOutputSum(new BigInteger(val));
-      else if (key === "change_address") tx.setChangeAddress(val === "" ? undefined : val);
-      else if (key === "change_amount") tx.setChangeAmount(new BigInteger(val));
-      else if (key === "dummy_outputs") tx.setNumDummyOutputs(val);
-      else if (key === "extra") tx.setExtraHex(val);
-      else if (key === "ring_size") tx.setRingSize(val);
-      else if (key === "spent_key_images") {
-        let inputKeyImages = val.key_images;
-        GenUtils.assertTrue(tx.getInputs() === undefined);
-        tx.setInputs([]);
-        for (let inputKeyImage of inputKeyImages) {
-          tx.getInputs().push(new MoneroOutputWallet().setKeyImage(new MoneroKeyImage().setHex(inputKeyImage)).setTx(tx));
-        }
-      }
-      else if (key === "amounts_by_dest") {
-        GenUtils.assertTrue(isOutgoing);
-        let amountsByDest = val.amounts;
-        assert.equal(config.getDestinations().length, amountsByDest.length);
-        if (transfer === undefined) transfer = new MoneroOutgoingTransfer().setTx(tx);
-        transfer.setDestinations([]);
-        for (let i = 0; i < config.getDestinations().length; i++) {
-          transfer.getDestinations().push(new MoneroDestination(config.getDestinations()[i].getAddress(), new BigInteger(amountsByDest[i])));
-        }
-      }
-      else console.log("WARNING: ignoring unexpected transaction field with transfer: " + key + ": " + val);
-    }
-    
-    // link block and tx
-    if (header) tx.setBlock(new MoneroBlock(header).setTxs([tx]));
-    
-    // initialize final fields
-    if (transfer) {
-      if (tx.isConfirmed() === undefined) tx.setIsConfirmed(false);
-      if (!transfer.getTx().isConfirmed()) tx.setNumConfirmations(0);
-      if (isOutgoing) {
-        tx.setIsOutgoing(true);
-        if (tx.getOutgoingTransfer()) {
-          if (transfer.getDestinations()) tx.getOutgoingTransfer().setDestinations(undefined); // overwrite to avoid reconcile error TODO: remove after >18.2.2 when amounts_by_dest supported
-          tx.getOutgoingTransfer().merge(transfer);
-        }
-        else tx.setOutgoingTransfer(transfer);
-      } else {
-        tx.setIsIncoming(true);
-        tx.setIncomingTransfers([transfer]);
-      }
-    }
-    
-    // return initialized transaction
-    return tx;
-  }
-  
-  static _convertRpcTxWalletWithOutput(rpcOutput) {
-    
-    // initialize tx
-    let tx = new MoneroTxWallet();
-    tx.setIsConfirmed(true);
-    tx.setIsRelayed(true);
-    tx.setIsFailed(false);
-    
-    // initialize output
-    let output = new MoneroOutputWallet({tx: tx});
-    for (let key of Object.keys(rpcOutput)) {
-      let val = rpcOutput[key];
-      if (key === "amount") output.setAmount(new BigInteger(val));
-      else if (key === "spent") output.setIsSpent(val);
-      else if (key === "key_image") { if ("" !== val) output.setKeyImage(new MoneroKeyImage(val)); }
-      else if (key === "global_index") output.setIndex(val);
-      else if (key === "tx_hash") tx.setHash(val);
-      else if (key === "unlocked") tx.setIsLocked(!val);
-      else if (key === "frozen") output.setIsFrozen(val);
-      else if (key === "pubkey") output.setStealthPublicKey(val);
-      else if (key === "subaddr_index") {
-        output.setAccountIndex(val.major);
-        output.setSubaddressIndex(val.minor);
-      }
-      else if (key === "block_height") tx.setBlock(new MoneroBlock().setHeight(val).setTxs([tx]));
-      else console.log("WARNING: ignoring unexpected transaction field: " + key + ": " + val);
-    }
-    
-    // initialize tx with output
-    tx.setOutputs([output]);
-    return tx;
-  }
-  
-  static _convertRpcDescribeTransfer(rpcDescribeTransferResult) {
-    let txSet = new MoneroTxSet();
-    for (let key of Object.keys(rpcDescribeTransferResult)) {
-      let val = rpcDescribeTransferResult[key];
-      if (key === "desc") {
-        txSet.setTxs([]);
-        for (let txMap of val) {
-          let tx = MoneroWalletRpc._convertRpcTxWithTransfer(txMap, undefined, true);
-          tx.setTxSet(txSet);
-          txSet.getTxs().push(tx);
-        }
-      }
-      else if (key === "summary") { } // TODO: support tx set summary fields?
-      else console.log("WARNING: ignoring unexpected descdribe transfer field: " + key + ": " + val);
-    }
-    return txSet;
-  }
-  
-  /**
-   * Decodes a "type" from monero-wallet-rpc to initialize type and state
-   * fields in the given transaction.
-   * 
-   * TODO: these should be safe set
-   * 
-   * @param rpcType is the type to decode
-   * @param tx is the transaction to decode known fields to
-   * @return {boolean} true if the rpc type indicates outgoing xor incoming
-   */
-  static _decodeRpcType(rpcType, tx) {
-    let isOutgoing;
-    if (rpcType === "in") {
-      isOutgoing = false;
-      tx.setIsConfirmed(true);
-      tx.setInTxPool(false);
-      tx.setIsRelayed(true);
-      tx.setRelay(true);
-      tx.setIsFailed(false);
-      tx.setIsMinerTx(false);
-    } else if (rpcType === "out") {
-      isOutgoing = true;
-      tx.setIsConfirmed(true);
-      tx.setInTxPool(false);
-      tx.setIsRelayed(true);
-      tx.setRelay(true);
-      tx.setIsFailed(false);
-      tx.setIsMinerTx(false);
-    } else if (rpcType === "pool") {
-      isOutgoing = false;
-      tx.setIsConfirmed(false);
-      tx.setInTxPool(true);
-      tx.setIsRelayed(true);
-      tx.setRelay(true);
-      tx.setIsFailed(false);
-      tx.setIsMinerTx(false);  // TODO: but could it be?
-    } else if (rpcType === "pending") {
-      isOutgoing = true;
-      tx.setIsConfirmed(false);
-      tx.setInTxPool(true);
-      tx.setIsRelayed(true);
-      tx.setRelay(true);
-      tx.setIsFailed(false);
-      tx.setIsMinerTx(false);
-    } else if (rpcType === "block") {
-      isOutgoing = false;
-      tx.setIsConfirmed(true);
-      tx.setInTxPool(false);
-      tx.setIsRelayed(true);
-      tx.setRelay(true);
-      tx.setIsFailed(false);
-      tx.setIsMinerTx(true);
-    } else if (rpcType === "failed") {
-      isOutgoing = true;
-      tx.setIsConfirmed(false);
-      tx.setInTxPool(false);
-      tx.setIsRelayed(true);
-      tx.setRelay(true);
-      tx.setIsFailed(true);
-      tx.setIsMinerTx(false);
-    } else {
-      throw new MoneroError("Unrecognized transfer type: " + rpcType);
-    }
-    return isOutgoing;
-  }
-  
-  /**
-   * Merges a transaction into a unique set of transactions.
-   *
-   * @param {MoneroTxWallet} tx - the transaction to merge into the existing txs
-   * @param {Object} txMap - maps tx hashes to txs
-   * @param {Object} blockMap - maps block heights to blocks
-   */
-  static _mergeTx(tx, txMap, blockMap) {
-    assert(tx.getHash() !== undefined);
-    
-    // merge tx
-    let aTx = txMap[tx.getHash()];
-    if (aTx === undefined) txMap[tx.getHash()] = tx; // cache new tx
-    else aTx.merge(tx); // merge with existing tx
-    
-    // merge tx's block if confirmed
-    if (tx.getHeight() !== undefined) {
-      let aBlock = blockMap[tx.getHeight()];
-      if (aBlock === undefined) blockMap[tx.getHeight()] = tx.getBlock(); // cache new block
-      else aBlock.merge(tx.getBlock()); // merge with existing block
-    }
-  }
-  
-  /**
-   * Compares two transactions by their height.
-   */
-  static _compareTxsByHeight(tx1, tx2) {
-    if (tx1.getHeight() === undefined && tx2.getHeight() === undefined) return 0; // both unconfirmed
-    else if (tx1.getHeight() === undefined) return 1;   // tx1 is unconfirmed
-    else if (tx2.getHeight() === undefined) return -1;  // tx2 is unconfirmed
-    let diff = tx1.getHeight() - tx2.getHeight();
-    if (diff !== 0) return diff;
-    return tx1.getBlock().getTxs().indexOf(tx1) - tx2.getBlock().getTxs().indexOf(tx2); // txs are in the same block so retain their original order
-  }
-  
-  /**
-   * Compares two transfers by ascending account and subaddress indices.
-   */
-  static _compareIncomingTransfers(t1, t2) {
-    if (t1.getAccountIndex() < t2.getAccountIndex()) return -1;
-    else if (t1.getAccountIndex() === t2.getAccountIndex()) return t1.getSubaddressIndex() - t2.getSubaddressIndex();
-    return 1;
-  }
-  
-  /**
-   * Compares two outputs by ascending account and subaddress indices.
-   */
-  static _compareOutputs(o1, o2) {
-    
-    // compare by height
-    let heightComparison = MoneroWalletRpc._compareTxsByHeight(o1.getTx(), o2.getTx());
-    if (heightComparison !== 0) return heightComparison;
-    
-    // compare by account index, subaddress index, output index, then key image hex
-    let compare = o1.getAccountIndex() - o2.getAccountIndex();
-    if (compare !== 0) return compare;
-    compare = o1.getSubaddressIndex() - o2.getSubaddressIndex();
-    if (compare !== 0) return compare;
-    compare = o1.getIndex() - o2.getIndex();
-    if (compare !== 0) return compare;
-    return o1.getKeyImage().getHex().localeCompare(o2.getKeyImage().getHex());
-  }
-}
-
-/**
- * Polls monero-wallet-rpc to provide listener notifications.
- * 
- * @class
- * @ignore
- */
-class WalletPoller {
-  
-  constructor(wallet) {
-    let that = this;
-    this._wallet = wallet;
-    this._looper = new TaskLooper(async function() { await that.poll(); });
-    this._prevLockedTxs = [];
-    this._prevUnconfirmedNotifications = new Set(); // tx hashes of previous notifications
-    this._prevConfirmedNotifications = new Set(); // tx hashes of previously confirmed but not yet unlocked notifications
-    this._threadPool = new ThreadPool(1); // synchronize polls
-    this._numPolling = 0;
-  }
-  
-  setIsPolling(isPolling) {
-    this._isPolling = isPolling;
-    if (isPolling) this._looper.start(this._wallet.syncPeriodInMs);
-    else this._looper.stop();
-  }
-  
-  setPeriodInMs(periodInMs) {
-    this._looper.setPeriodInMs(periodInMs);
-  }
-  
-  async poll() {
-
-    // skip if next poll is queued
-    if (this._numPolling > 1) return;
-    this._numPolling++;
-    
-    // synchronize polls
-    let that = this;
-    return this._threadPool.submit(async function() {
-      try {
-        
-        // skip if wallet is closed
-        if (await that._wallet.isClosed()) {
-          that._numPolling--;
-          return;
-        }
-        
-        // take initial snapshot
-        if (that._prevHeight === undefined) {
-          that._prevHeight = await that._wallet.getHeight();
-          that._prevLockedTxs = await that._wallet.getTxs(new MoneroTxQuery().setIsLocked(true));
-          that._prevBalances = await that._wallet._getBalances();
-          that._numPolling--;
-          return;
-        }
-        
-        // announce height changes
-        let height = await that._wallet.getHeight();
-        if (that._prevHeight !== height) {
-          for (let i = that._prevHeight; i < height; i++) await that._onNewBlock(i);
-          that._prevHeight = height;
-        }
-        
-        // get locked txs for comparison to previous
-        let minHeight = Math.max(0, height - 70); // only monitor recent txs
-        let lockedTxs = await that._wallet.getTxs(new MoneroTxQuery().setIsLocked(true).setMinHeight(minHeight).setIncludeOutputs(true));
-        
-        // collect hashes of txs no longer locked
-        let noLongerLockedHashes = [];
-        for (let prevLockedTx of that._prevLockedTxs) {
-          if (that._getTx(lockedTxs, prevLockedTx.getHash()) === undefined) {
-            noLongerLockedHashes.push(prevLockedTx.getHash());
-          }
-        }
-        
-        // save locked txs for next comparison
-        that._prevLockedTxs = lockedTxs;
-        
-        // fetch txs which are no longer locked
-        let unlockedTxs = noLongerLockedHashes.length === 0 ? [] : await that._wallet.getTxs(new MoneroTxQuery().setIsLocked(false).setMinHeight(minHeight).setHashes(noLongerLockedHashes).setIncludeOutputs(true));
-         
-        // announce new unconfirmed and confirmed outputs
-        for (let lockedTx of lockedTxs) {
-          let searchSet = lockedTx.isConfirmed() ? that._prevConfirmedNotifications : that._prevUnconfirmedNotifications;
-          let unannounced = !searchSet.has(lockedTx.getHash());
-          searchSet.add(lockedTx.getHash());
-          if (unannounced) await that._notifyOutputs(lockedTx);
-        }
-        
-        // announce new unlocked outputs
-        for (let unlockedTx of unlockedTxs) {
-          that._prevUnconfirmedNotifications.delete(unlockedTx.getHash());
-          that._prevConfirmedNotifications.delete(unlockedTx.getHash());
-          await that._notifyOutputs(unlockedTx);
-        }
-        
-        // announce balance changes
-        await that._checkForChangedBalances();
-        that._numPolling--;
-      } catch (err) {
-        that._numPolling--;
-        console.error("Failed to background poll " + await that._wallet.getPath());
-      }
-    });
-  }
-  
-  async _onNewBlock(height) {
-    for (let listener of this._wallet.getListeners()) await listener.onNewBlock(height);
-  }
-  
-  async _notifyOutputs(tx) {
-  
-    // notify spent outputs // TODO (monero-project): monero-wallet-rpc does not allow scrape of tx inputs so providing one input with outgoing amount
-    if (tx.getOutgoingTransfer() !== undefined) {
-      assert(tx.getInputs() === undefined);
-      let output = new MoneroOutputWallet()
-          .setAmount(tx.getOutgoingTransfer().getAmount().add(tx.getFee()))
-          .setAccountIndex(tx.getOutgoingTransfer().getAccountIndex())
-          .setSubaddressIndex(tx.getOutgoingTransfer().getSubaddressIndices().length === 1 ? tx.getOutgoingTransfer().getSubaddressIndices()[0] : undefined) // initialize if transfer sourced from single subaddress
-          .setTx(tx);
-      tx.setInputs([output]);
-      for (let listener of this._wallet.getListeners()) await listener.onOutputSpent(output);
-    }
-    
-    // notify received outputs
-    if (tx.getIncomingTransfers() !== undefined) {
-      if (tx.getOutputs() !== undefined && tx.getOutputs().length > 0) { // TODO (monero-project): outputs only returned for confirmed txs
-        for (let output of tx.getOutputs()) {
-          for (let listener of this._wallet.getListeners()) await listener.onOutputReceived(output);
-        }
-      } else { // TODO (monero-project): monero-wallet-rpc does not allow scrape of unconfirmed received outputs so using incoming transfer values
-        let outputs = [];
-        for (let transfer of tx.getIncomingTransfers()) {
-          outputs.push(new MoneroOutputWallet()
-              .setAccountIndex(transfer.getAccountIndex())
-              .setSubaddressIndex(transfer.getSubaddressIndex())
-              .setAmount(transfer.getAmount())
-              .setTx(tx));
-        }
-        tx.setOutputs(outputs);
-        for (let listener of this._wallet.getListeners()) {
-          for (let output of tx.getOutputs()) await listener.onOutputReceived(output);
-        }
-      }
-    }
-  }
-  
-  _getTx(txs, txHash) {
-    for (let tx of txs) if (txHash === tx.getHash()) return tx;
-    return undefined;
-  }
-  
-  async _checkForChangedBalances() {
-    let balances = await this._wallet._getBalances();
-    if (balances[0].compare(this._prevBalances[0]) !== 0 || balances[1].compare(this._prevBalances[1]) !== 0) {
-      this._prevBalances = balances;
-      for (let listener of await this._wallet.getListeners()) await listener.onBalancesChanged(balances[0], balances[1]);
-      return true;
-    }
-    return false;
-  }
-}
-
-MoneroWalletRpc.DEFAULT_SYNC_PERIOD_IN_MS = 20000; // default period between syncs in ms (defined by DEFAULT_AUTO_REFRESH_PERIOD in wallet_rpc_server.cpp)
-
-module.exports = MoneroWalletRpc;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroAccount.js.html b/docs/src_main_js_wallet_model_MoneroAccount.js.html deleted file mode 100644 index 71fdc8d7d..000000000 --- a/docs/src_main_js_wallet_model_MoneroAccount.js.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroAccount.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroAccount.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../../common/biginteger").BigInteger;
-const MoneroSubaddress = require("./MoneroSubaddress");
-
-/**
- * Monero account model.
- */
-class MoneroAccount {
-  
-  constructor(stateOrIndex, primaryAddress, balance, unlockedBalance, subaddresses) {
-    
-    // construct from json
-    if (typeof stateOrIndex === "object") {
-      this.state = stateOrIndex;
-      
-      // deserialize balances
-      if (this.state.balance !== undefined && !(this.state.balance instanceof BigInteger)) this.state.balance = BigInteger.parse(this.state.balance);
-      if (this.state.unlockedBalance !== undefined && !(this.state.unlockedBalance instanceof BigInteger)) this.state.unlockedBalance = BigInteger.parse(this.state.unlockedBalance);
-      
-      // deserialize subaddresses
-      if (this.state.subaddresses) {
-        for (let i = 0; i < this.state.subaddresses.length; i++) {
-          if (!(this.state.subaddresses[i] instanceof MoneroSubaddress)) {
-            this.state.subaddresses[i] = new MoneroSubaddress(this.state.subaddresses[i]);
-          }
-        }
-      }
-    }
-    
-    // construct from individual params
-    else {
-      this.state = {};
-      this.setIndex(stateOrIndex);
-      this.setPrimaryAddress(primaryAddress);
-      this.setBalance(balance);
-      this.setUnlockedBalance(unlockedBalance);
-      this.setSubaddresses(subaddresses);
-    }
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.balance) json.balance = json.balance.toString();
-    if (json.unlockedBalance) json.unlockedBalance = json.unlockedBalance.toString();
-    if (json.subaddresses) {
-      for (let i = 0; i < json.subaddresses.length; i++) {
-        json.subaddresses[i] = json.subaddresses[i].toJson();
-      }
-    }
-    return json;
-  }
-  
-  getIndex() {
-    return this.state.index;
-  }
-  
-  setIndex(index) {
-    this.state.index = index;
-    return this;
-  }
-  
-  getPrimaryAddress() {
-    return this.state.primaryAddress;
-  }
-
-  setPrimaryAddress(primaryAddress) {
-    this.state.primaryAddress = primaryAddress;
-    return this;
-  }
-  
-  getBalance() {
-    return this.state.balance;
-  }
-  
-  setBalance(balance) {
-    this.state.balance = balance;
-    return this;
-  }
-  
-  getUnlockedBalance() {
-    return this.state.unlockedBalance;
-  }
-  
-  setUnlockedBalance(unlockedBalance) {
-    this.state.unlockedBalance = unlockedBalance;
-    return this;
-  }
-  
-  getTag() {
-    return this.state.tag;
-  }
-  
-  setTag(tag) {
-    this.state.tag = tag;
-    return this;
-  }
-  
-  getSubaddresses() {
-    return this.state.subaddresses;
-  }
-  
-  setSubaddresses(subaddresses) {
-    assert(subaddresses === undefined || Array.isArray(subaddresses), "Given subaddresses must be undefined or an array of subaddresses");
-    this.state.subaddresses = subaddresses;
-    if (subaddresses) {
-      for (let subaddress of subaddresses) {
-        subaddress.setAccountIndex(this.state.index);
-      }
-    }
-    return this;
-  }
-  
-  toString(indent = 0) {
-    let str = "";
-    str += GenUtils.kvLine("Index", this.getIndex(), indent);
-    str += GenUtils.kvLine("Primary address", this.getPrimaryAddress(), indent);
-    str += GenUtils.kvLine("Balance", this.getBalance(), indent);
-    str += GenUtils.kvLine("Unlocked balance", this.getUnlockedBalance(), indent);
-    str += GenUtils.kvLine("Tag", this.getTag(), indent);
-    if (this.getSubaddresses() != null) {
-      sb += GenUtils.kvLine("Subaddresses", "", indent)
-      for (let i = 0; i < this.getSubaddresses().size(); i++) {
-        str += GenUtils.kvLine(i + 1, "", indent + 1);
-        str += this.getSubaddresses()[i].toString(indent + 2) + "\n";
-      }
-    }
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-module.exports = MoneroAccount;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroAccountTag.js.html b/docs/src_main_js_wallet_model_MoneroAccountTag.js.html deleted file mode 100644 index 2e54719d7..000000000 --- a/docs/src_main_js_wallet_model_MoneroAccountTag.js.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroAccountTag.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroAccountTag.js

- - - - - - -
-
-
/**
- * Represents an account tag.
- */
-class MoneroAccountTag {
-  
-  constructor(tag, label, accountIndices) {
-    this.tag = tag;
-    this.label = label;
-    this.accountIndices = accountIndices;
-  }
-  
-  getTag() {
-    return this.tag;
-  }
-  
-  setTag(tag) {
-    this.tag = tag;
-    return this;
-  }
-  
-  getLabel() {
-    return this.label;
-  }
-  
-  setLabel(label) {
-    this.label = label;
-    return this;
-  }
-  
-  getAccountIndices() {
-    return this.accountIndices;
-  }
-  
-  setAccountIndices(accountIndices) {
-    this.accoutIndices = accountIndices;
-    return this;
-  }
-}
-
-module.exports = MoneroAccountTag;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroAddressBookEntry.js.html b/docs/src_main_js_wallet_model_MoneroAddressBookEntry.js.html deleted file mode 100644 index d03135f19..000000000 --- a/docs/src_main_js_wallet_model_MoneroAddressBookEntry.js.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroAddressBookEntry.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroAddressBookEntry.js

- - - - - - -
-
-
/**
- * Monero address book entry model
- */
-class MoneroAddressBookEntry {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-  
-  getIndex() {
-    return this.state.index;
-  }
-  
-  setIndex(index) {
-    this.state.index = index;
-    return this;
-  }
-  
-  getAddress() {
-    return this.state.address;
-  }
-  
-  setAddress(address) {
-    this.state.address = address;
-    return this;
-  }
-  
-  getDescription() {
-    return this.state.description;
-  }
-  
-  setDescription(description) {
-    this.state.description = description;
-    return this;
-  }
-  
-  getPaymentId() {
-    return this.state.paymentId;
-  }
-  
-  setPaymentId(paymentId) {
-    this.state.paymentId = paymentId;
-    return this;
-  }
-}
-
-module.exports = MoneroAddressBookEntry;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroCheck.js.html b/docs/src_main_js_wallet_model_MoneroCheck.js.html deleted file mode 100644 index e7e4c9112..000000000 --- a/docs/src_main_js_wallet_model_MoneroCheck.js.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroCheck.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroCheck.js

- - - - - - -
-
-
/**
- * Base class for results from checking a transaction or reserve proof.
- * 
- * @class
- */
-class MoneroCheck {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-
-  isGood() {
-    return this.state.isGood;
-  }
-
-  setIsGood(isGood) {
-    this.state.isGood = isGood;
-    return this;
-  }
-}
-
-module.exports = MoneroCheck;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroCheckReserve.js.html b/docs/src_main_js_wallet_model_MoneroCheckReserve.js.html deleted file mode 100644 index 72304ef80..000000000 --- a/docs/src_main_js_wallet_model_MoneroCheckReserve.js.html +++ /dev/null @@ -1,93 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroCheckReserve.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroCheckReserve.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-const MoneroCheck = require("./MoneroCheck");
-
-/**
- * Results from checking a reserve proof.
- * 
- * @extends {MoneroCheck}
- */
-class MoneroCheckReserve extends MoneroCheck {
-  
-  constructor(state) {
-    super(state);
-    if (this.state.totalAmount !== undefined && !(this.state.totalAmount instanceof BigInteger)) this.state.totalAmount = BigInteger.parse(this.state.totalAmount);
-    if (this.state.unconfirmedSpentAmount !== undefined && !(this.state.unconfirmedSpentAmount instanceof BigInteger)) this.state.unconfirmedSpentAmount = BigInteger.parse(this.state.unconfirmedSpentAmount);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getTotalAmount()) json.totalAmount = this.getTotalAmount().toString();
-    if (this.getUnconfirmedSpentAmount()) json.unconfirmedSpentAmount = this.getUnconfirmedSpentAmount().toString();
-    return json;
-  }
-  
-  getTotalAmount() {
-    return this.state.totalAmount;
-  }
-
-  setTotalAmount(totalAmount) {
-    this.state.totalAmount = totalAmount;
-    return this;
-  }
-  
-  getUnconfirmedSpentAmount() {
-    return this.state.unconfirmedSpentAmount;
-  }
-
-  setUnconfirmedSpentAmount(unconfirmedSpentAmount) {
-    this.state.unconfirmedSpentAmount = unconfirmedSpentAmount;
-    return this;
-  }
-}
-
-module.exports = MoneroCheckReserve;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroCheckTx.js.html b/docs/src_main_js_wallet_model_MoneroCheckTx.js.html deleted file mode 100644 index 75edb21fb..000000000 --- a/docs/src_main_js_wallet_model_MoneroCheckTx.js.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroCheckTx.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroCheckTx.js

- - - - - - -
-
-
const MoneroCheck = require("./MoneroCheck");
-const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Results from checking a transaction key.
- * 
- * @extends {MoneroCheck}
- */
-class MoneroCheckTx extends MoneroCheck {
-  
-  constructor(state) {
-    super(state);
-    if (this.state.receivedAmount !== undefined && !(this.state.receivedAmount instanceof BigInteger)) this.state.receivedAmount = BigInteger.parse(this.state.receivedAmount);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getReceivedAmount()) json.receivedAmount = this.getReceivedAmount().toString();
-    return json;
-  }
-
-  inTxPool() {
-    return this.state.inTxPool;
-  }
-  
-  setInTxPool(inTxPool) {
-    this.state.inTxPool = inTxPool;
-    return this;
-  }
-  
-  getNumConfirmations() {
-    return this.state.numConfirmations;
-  }
-  
-  setNumConfirmations(numConfirmations) {
-    this.state.numConfirmations = numConfirmations;
-    return this;
-  }
-  
-  getReceivedAmount() {
-    return this.state.receivedAmount;
-  }
-  
-  setReceivedAmount(receivedAmount) {
-    this.state.receivedAmount = receivedAmount;
-    return this;
-  }
-}
-
-module.exports = MoneroCheckTx;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroDestination.js.html b/docs/src_main_js_wallet_model_MoneroDestination.js.html deleted file mode 100644 index 6ffc96316..000000000 --- a/docs/src_main_js_wallet_model_MoneroDestination.js.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroDestination.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroDestination.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-const GenUtils = require("../../common/GenUtils");
-const MoneroError = require("../../common/MoneroError");
-
-/**
- * Models an outgoing transfer destination.
- */
-class MoneroDestination {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroDestination|object|string} stateOrAddress is a MoneroDestination, JS object, or hex string to initialize from (optional)
-   * @param {BigInteger|string} amount - the destination amount
-   */
-  constructor(stateOrAddress, amount) {
-    if (!stateOrAddress) this.state = {};
-    else if (stateOrAddress instanceof MoneroDestination) this.state = stateOrAddress.toJson();
-    else if (typeof stateOrAddress === "object") {
-      this.state = Object.assign({}, stateOrAddress);
-      if (typeof this.state.amount === "number") this.state.amount = BigInteger.parse(this.state.amount);
-    } else if (typeof stateOrAddress === "string")  {
-      this.state = {};
-      this.setAddress(stateOrAddress);
-    }
-    else throw new MoneroError("stateOrAddress must be a MoneroDestination, JavaScript object, or hex string");
-    if (amount) this.state.amount = amount;
-    this.setAmount(this.state.amount);
-  }
-  
-  getAddress() {
-    return this.state.address;
-  }
-
-  setAddress(address) {
-    this.state.address = address;
-    return this;
-  }
-  
-  getAmount() {
-    return this.state.amount;
-  }
-
-  setAmount(amount) {
-    if (amount !== undefined && !(this.state.amount instanceof BigInteger)) {
-      if (typeof amount === "number") throw new MoneroError("Destination amount must be BigInteger or string");
-      try { amount = BigInteger.parse(amount); }
-      catch (err) { throw new MoneroError("Invalid destination amount: " + amount); }
-    }
-    this.state.amount = amount;
-    return this;
-  }
-
-  copy() {
-    return new MoneroDestination(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getAmount()) json.amount = this.getAmount().toString();
-    return json;
-  }
-  
-  toString(indent = 0) {
-    let str = GenUtils.kvLine("Address", this.getAddress(), indent);
-    str += GenUtils.kvLine("Amount", this.getAmount() ? this.getAmount().toString() : undefined, indent);
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-module.exports = MoneroDestination;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroIncomingTransfer.js.html b/docs/src_main_js_wallet_model_MoneroIncomingTransfer.js.html deleted file mode 100644 index 86504b249..000000000 --- a/docs/src_main_js_wallet_model_MoneroIncomingTransfer.js.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroIncomingTransfer.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroIncomingTransfer.js

- - - - - - -
-
-
const assert = require("assert");
-const GenUtils = require("../../common/GenUtils");
-const MoneroTransfer = require("./MoneroTransfer");
-
-/**
- * Models an incoming transfer of funds to the wallet.
- * 
- * @extends {MoneroTransfer}
- */
-class MoneroIncomingTransfer extends MoneroTransfer {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroTransfer|object} state is existing state to initialize from (optional)
-   */
-  constructor(state) {
-    super(state);
-  }
-  
-  isIncoming() {
-    return true;
-  }
-  
-  getSubaddressIndex() {
-    return this.state.subaddressIndex;
-  }
-  
-  setSubaddressIndex(subaddressIndex) {
-    this.state.subaddressIndex = subaddressIndex;
-    return this;
-  }
-  
-  getAddress() {
-    return this.state.address;
-  }
-
-  setAddress(address) {
-    this.state.address = address;
-    return this;
-  }
-  
-  /**
-   * Return how many confirmations till it's not economically worth re-writing the chain.
-   * That is, the number of confirmations before the transaction is highly unlikely to be
-   * double spent or overwritten and may be considered settled, e.g. for a merchant to trust
-   * as finalized.
-   * 
-   * @return {number} is the number of confirmations before it's not worth rewriting the chain
-   */
-  getNumSuggestedConfirmations() {
-    return this.state.numSuggestedConfirmations;
-  }
-  
-  setNumSuggestedConfirmations(numSuggestedConfirmations) {
-    this.state.numSuggestedConfirmations = numSuggestedConfirmations;
-    return this;
-  }
-
-  copy() {
-    return new MoneroIncomingTransfer(this.toJson());
-  }
-  
-  /**
-   * Updates this transaction by merging the latest information from the given
-   * transaction.
-   * 
-   * Merging can modify or build references to the transfer given so it
-   * should not be re-used or it should be copied before calling this method.
-   * 
-   * @param {MoneroIncomingTransfer} transfer is the transfer to merge into this one
-   */
-  merge(transfer) {
-    super.merge(transfer);
-    assert(transfer instanceof MoneroIncomingTransfer);
-    if (this === transfer) return this;
-    this.setSubaddressIndex(GenUtils.reconcile(this.getSubaddressIndex(), transfer.getSubaddressIndex()));
-    this.setAddress(GenUtils.reconcile(this.getAddress(), transfer.getAddress()));
-    this.setNumSuggestedConfirmations(GenUtils.reconcile(this.getNumSuggestedConfirmations(), transfer.getNumSuggestedConfirmations(), {resolveMax: false}));
-    return this;
-  }
-  
-  toString() {
-    return this.toString(0);
-  }
-  
-  toString(indent) {
-    let str = super.toString(indent) + "\n";
-    str += GenUtils.kvLine("Subaddress index", this.getSubaddressIndex(), indent);
-    str += GenUtils.kvLine("Address", this.getAddress(), indent);
-    str += GenUtils.kvLine("Num suggested confirmations", this.getNumSuggestedConfirmations(), indent);
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-module.exports = MoneroIncomingTransfer;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroIntegratedAddress.js.html b/docs/src_main_js_wallet_model_MoneroIntegratedAddress.js.html deleted file mode 100644 index 65553bad6..000000000 --- a/docs/src_main_js_wallet_model_MoneroIntegratedAddress.js.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroIntegratedAddress.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroIntegratedAddress.js

- - - - - - -
-
-
/**
- * Monero integrated address model.
- */
-class MoneroIntegratedAddress {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-
-  getStandardAddress() {
-    return this.state.standardAddress;
-  }
-  
-  setStandardAddress(standardAddress) {
-    this.state.standardAddress = standardAddress;
-    return this;
-  }
-  
-  getPaymentId() {
-    return this.state.paymentId;
-  }
-  
-  setPaymentId(paymentId) {
-    this.state.paymentId = paymentId;
-    return this;
-  }
-  
-  getIntegratedAddress() {
-    return this.state.integratedAddress;
-  }
-  
-  setIntegratedAddress(integratedAddress) {
-    this.state.integratedAddress = integratedAddress;
-    return this;
-  }
-  
-  toString() {
-    return this.state.integratedAddress;
-  }
-}
-
-module.exports = MoneroIntegratedAddress;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroKeyImageImportResult.js.html b/docs/src_main_js_wallet_model_MoneroKeyImageImportResult.js.html deleted file mode 100644 index bd737a3a2..000000000 --- a/docs/src_main_js_wallet_model_MoneroKeyImageImportResult.js.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroKeyImageImportResult.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroKeyImageImportResult.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-
-/**
- * Models results from importing key images.
- */
-class MoneroKeyImageImportResult {
-  
-  constructor(state) {
-    state = Object.assign({}, state);
-    if (state.spentAmount !== undefined && !(state.spentAmount instanceof BigInteger)) state.spentAmount = BigInteger.parse(state.spentAmount);
-    if (state.unspentAmount !== undefined && !(state.unspentAmount instanceof BigInteger)) state.unspentAmount = BigInteger.parse(state.unspentAmount);
-    this.state = state;
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getSpentAmount()) json.spentAmount = this.getSpentAmount().toString();
-    if (this.getUnspentAmount()) json.unspentAmount = this.getUnspentAmount().toString();
-    return json;
-  }
-  
-  getHeight() {
-    return this.state.height;
-  }
-  
-  setHeight(height) {
-    this.state.height = height;
-    return this;
-  }
-  
-  getSpentAmount() {
-    return this.state.spentAmount;
-  }
-  
-  setSpentAmount(spentAmount) {
-    this.state.spentAmount = spentAmount;
-    return this;
-  }
-  
-  getUnspentAmount() {
-    return this.state.unspentAmount;
-  }
-  
-  setUnspentAmount(unspentAmount) {
-    this.state.unspentAmount = unspentAmount;
-    return this;
-  }
-}
-
-module.exports = MoneroKeyImageImportResult;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroMessageSignatureResult.js.html b/docs/src_main_js_wallet_model_MoneroMessageSignatureResult.js.html deleted file mode 100644 index 977646f4b..000000000 --- a/docs/src_main_js_wallet_model_MoneroMessageSignatureResult.js.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroMessageSignatureResult.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroMessageSignatureResult.js

- - - - - - -
-
-
/**
- * Message signature verification result.
- * 
- * @class
- */
-class MoneroMessageSignatureResult {
-  
-  constructor(stateOrIsGood, isOld, signatureType, version) {
-    if (typeof stateOrIsGood === "boolean") {
-      this.state = {};
-      this.state.isGood = stateOrIsGood;
-      this.state.isOld = isOld;
-      this.state.signatureType = signatureType;
-      this.state.version = version;
-    } else {
-      this.state = stateOrIsGood;
-    }
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-
-  isGood() {
-    return this.state.isGood;
-  }
-
-  setIsGood(isGood) {
-    this.state.isGood = isGood;
-    return this;
-  }
-  
-  isOld() {
-    return this.state.isOld;
-  }
-
-  setIsOld(isOld) {
-    this.state.isOld = isOld;
-    return this;
-  }
-  
-  getSignatureType() {
-    return this.state.signatureType;
-  }
-
-  setSignatureType(signatureType) {
-    this.state.signatureType = signatureType;
-    return this;
-  }
-  
-  getVersion() {
-    return this.state.version;
-  }
-
-  setVersion(version) {
-    this.state.version = version;
-    return this;
-  }
-}
-
-module.exports = MoneroMessageSignatureResult;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroMessageSignatureType.js.html b/docs/src_main_js_wallet_model_MoneroMessageSignatureType.js.html deleted file mode 100644 index 61b256d04..000000000 --- a/docs/src_main_js_wallet_model_MoneroMessageSignatureType.js.html +++ /dev/null @@ -1,68 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroMessageSignatureType.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroMessageSignatureType.js

- - - - - - -
-
-
/**
- * Enumerate message signature types.
- * 
- * @hideconstructor
- */
-class MoneroMessageSignatureType {}
-
-/**
- * Sign with spend key (value=0).
- */
-MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY = 0;
-
-/**
- * Sign with the view key (value=1).
- */
-MoneroMessageSignatureType.SIGN_WITH_VIEW_KEY = 1;
-
-module.exports = MoneroMessageSignatureType;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroMultisigInfo.js.html b/docs/src_main_js_wallet_model_MoneroMultisigInfo.js.html deleted file mode 100644 index 8356f485f..000000000 --- a/docs/src_main_js_wallet_model_MoneroMultisigInfo.js.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroMultisigInfo.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroMultisigInfo.js

- - - - - - -
-
-
/**
- * Models information about a multisig wallet.
- */
-class MoneroMultisigInfo {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-  
-  isMultisig() {
-    return this.state.isMultisig;
-  }
-  
-  setIsMultisig(isMultisig) {
-    this.state.isMultisig = isMultisig;
-    return this;
-  }
-  
-  isReady() {
-    return this.state.isReady;
-  }
-  
-  setIsReady(isReady) {
-    this.state.isReady = isReady;
-  }
-  
-  getThreshold() {
-    return this.state.threshold;
-  }
-  
-  setThreshold(threshold) {
-    this.state.threshold = threshold;
-  }
-  
-  getNumParticipants() {
-    return this.state.numParticipants;
-  }
-  
-  setNumParticipants(numParticipants) {
-    this.state.numParticipants = numParticipants;
-  }
-}
-
-module.exports = MoneroMultisigInfo;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroMultisigInitResult.js.html b/docs/src_main_js_wallet_model_MoneroMultisigInitResult.js.html deleted file mode 100644 index dd1891064..000000000 --- a/docs/src_main_js_wallet_model_MoneroMultisigInitResult.js.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroMultisigInitResult.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroMultisigInitResult.js

- - - - - - -
-
-
/**
- * Models the result of initializing a multisig wallet which results in the
- * multisig wallet's address xor another multisig hex to share with
- * participants to create the wallet.
- */
-class MoneroMultisigInitResult {
-
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-  
-  getAddress() {
-    return this.state.address;
-  }
-  
-  setAddress(address) {
-    this.state.address = address;
-    return this;
-  }
-  
-  getMultisigHex() {
-    return this.state.multisigHex;
-  }
-  
-  setMultisigHex(multisigHex) {
-    this.state.multisigHex = multisigHex;
-    return this;
-  }
-}
-
-module.exports = MoneroMultisigInitResult;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroMultisigSignResult.js.html b/docs/src_main_js_wallet_model_MoneroMultisigSignResult.js.html deleted file mode 100644 index 179b1c133..000000000 --- a/docs/src_main_js_wallet_model_MoneroMultisigSignResult.js.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroMultisigSignResult.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroMultisigSignResult.js

- - - - - - -
-
-
/**
- * Models the result of signing multisig tx hex.
- */
-class MoneroMultisigSignResult {
-  
-  constructor(state) {
-    this.state = Object.assign({}, state);
-  }
-  
-  toJson() {
-    return Object.assign({}, this.state);
-  }
-  
-  getSignedMultisigTxHex() {
-    return this.state.signedMultisigTxHex;
-  }
-
-  setSignedMultisigTxHex(signedTxMultisigHex) {
-    this.state.signedMultisigTxHex = signedTxMultisigHex;
-  }
-
-  getTxHashes() {
-    return this.state.txHashes;
-  }
-
-  setTxHashes(txHashes) {
-    this.state.txHashes = txHashes;
-  }
-}
-
-module.exports = MoneroMultisigSignResult;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroOutgoingTransfer.js.html b/docs/src_main_js_wallet_model_MoneroOutgoingTransfer.js.html deleted file mode 100644 index 9744aa717..000000000 --- a/docs/src_main_js_wallet_model_MoneroOutgoingTransfer.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroOutgoingTransfer.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroOutgoingTransfer.js

- - - - - - -
-
-
const assert = require("assert");
-const GenUtils = require("../../common/GenUtils");
-const MoneroDestination = require("./MoneroDestination");
-const MoneroTransfer = require("./MoneroTransfer");
-
-/**
- * Models an outgoing transfer of funds from the wallet.
- * 
- * @extends {MoneroTransfer}
- */
-class MoneroOutgoingTransfer extends MoneroTransfer {
-
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroOutgoingTranser|object} state is existing state to initialize from (optional)
-   */
-  constructor(state) {
-    super(state);
-    state = this.state;
-    
-    // deserialize destinations
-    if (state.destinations) {
-      for (let i = 0; i < state.destinations.length; i++) {
-        if (!(state.destinations[i] instanceof MoneroDestination)) state.destinations[i] = new MoneroDestination(state.destinations[i]);
-      }
-    }
-  }
-  
-  isIncoming() {
-    return false;
-  }
-  
-  getSubaddressIndices() {
-    return this.state.subaddressIndices;
-  }
-
-  setSubaddressIndices(subaddressIndices) {
-    this.state.subaddressIndices = subaddressIndices;
-    return this;
-  }
-  
-  getAddresses() {
-    return this.state.addresses;
-  }
-
-  setAddresses(addresses) {
-    this.state.addresses = addresses;
-    return this;
-  }
-
-  getDestinations() {
-    return this.state.destinations;
-  }
-  
-  setDestinations(destinations) {
-    this.state.destinations = destinations;
-    return this;
-  }
-  
-  copy() {
-    return new MoneroOutgoingTransfer(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state, super.toJson()); // merge json onto inherited state
-    if (this.getDestinations()) {
-      json.destinations = [];
-      for (let destination of this.getDestinations()) json.destinations.push(destination.toJson());
-    }
-    delete json.tx; // parent tx is not serialized
-    return json;
-  }
-  
-  /**
-   * Updates this transaction by merging the latest information from the given
-   * transaction.
-   * 
-   * Merging can modify or build references to the transfer given so it
-   * should not be re-used or it should be copied before calling this method.
-   * 
-   * @param transfer is the transfer to merge into this one
-   */
-  merge(transfer) {
-    super.merge(transfer);
-    assert(transfer instanceof MoneroOutgoingTransfer);
-    if (this === transfer) return this;
-    this.setSubaddressIndices(GenUtils.reconcile(this.getSubaddressIndices(), transfer.getSubaddressIndices()));
-    this.setAddresses(GenUtils.reconcile(this.getAddresses(), transfer.getAddresses()));
-    this.setDestinations(GenUtils.reconcile(this.getDestinations(), transfer.getDestinations()));
-    return this;
-  }
-
-  toString(indent = 0) {
-    let str = super.toString(indent) + "\n";
-    str += GenUtils.kvLine("Subaddress indices", this.getSubaddressIndices(), indent);
-    str += GenUtils.kvLine("Addresses", this.getAddresses(), indent);
-    if (this.getDestinations()) {
-      str += GenUtils.kvLine("Destinations", "", indent);
-      for (let i = 0; i < this.getDestinations().length; i++) {
-        str += GenUtils.kvLine(i + 1, "", indent + 1);
-        str += this.getDestinations()[i].toString(indent + 2) + "\n";
-      }
-    }
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-module.exports = MoneroOutgoingTransfer;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroOutputQuery.js.html b/docs/src_main_js_wallet_model_MoneroOutputQuery.js.html deleted file mode 100644 index 27c2ec957..000000000 --- a/docs/src_main_js_wallet_model_MoneroOutputQuery.js.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroOutputQuery.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroOutputQuery.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-const MoneroError = require("../../common/MoneroError");
-const MoneroOutputWallet = require("./MoneroOutputWallet");
-
-/**
- * Configuration to query wallet outputs.
- * 
- * @extends {MoneroOutputWallet}
- */
-class MoneroOutputQuery extends MoneroOutputWallet {
-  
-  /**
-   * <p>Construct the output query.</p>
-   * 
-   * <p>Example:</p>
-   * 
-   * <code>
-   * &sol;&sol; get available outputs in account 0 with a minimum amount<br>
-   * let outputs = await wallet.getOutputs({<br>
-   * &nbsp;&nbsp; isSpent: false,<br>
-   * &nbsp;&nbsp; isLocked: false,<br>
-   * &nbsp;&nbsp; accountIndex: 0,<br>
-   * &nbsp;&nbsp; minAmount: new BigInteger("750000")<br>
-   * });
-   * </code>
-   * 
-   * <p>All configuration is optional.  All outputs are returned except those that don't meet criteria defined in this query.</p>
-   * 
-   * @param {object} config - output query configuration (optional)
-   * @param {int} config.accountIndex - get outputs in this account index
-   * @param {int} config.subaddressIndex - get outputs in this subaddress index
-   * @param {int[]} config.subaddressIndices - get outputs in these subaddress indices
-   * @param {BigInteger} config.amount - get outputs with this amount
-   * @param {BigInteger} config.minAmount - get outputs with amount greater than or equal to this amount
-   * @param {BigInteger} config.maxAmount - get outputs with amount less than or equal to this amount
-   * @param {boolean} config.isSpent - get spent xor unspent outputs
-   * @param {boolean} config.isFrozen - get frozen xor thawed outputs
-   * @param {object|MoneroKeyImage} config.keyImage - get outputs with a key image matching fields defined in this key image
-   * @param {string} config.keyImage.hex - get outputs with this key image hex
-   * @param {string} config.keyImage.signature - get outputs with this key image signature
-   * @param {object|MoneroTxQuery} config.txQuery - get outputs whose tx match this tx query
-   */
-  constructor(config) {
-    super(config);
-    
-    // deserialize if necessary
-    const MoneroTxQuery = require("./MoneroTxQuery");
-    if (this.state.minAmount !== undefined && !(this.state.minAmount instanceof BigInteger)) this.state.minAmount = BigInteger.parse(this.state.minAmount);
-    if (this.state.maxAmount !== undefined && !(this.state.maxAmount instanceof BigInteger)) this.state.maxAmount = BigInteger.parse(this.state.maxAmount);
-    if (this.state.txQuery && !(this.state.txQuery instanceof MoneroTxQuery)) this.state.txQuery = new MoneroTxQuery(this.state.txQuery);
-    if (this.state.txQuery) this.state.txQuery.setOutputQuery(this);
-    if (this.state.isLocked !== undefined) throw new MoneroError("isLocked must be part of tx query, not output query");
-  }
-  
-  copy() {
-    return new MoneroOutputQuery(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state, super.toJson());
-    if (this.getMinAmount()) json.minAmount = this.getMinAmount().toString();
-    if (this.getMaxAmount()) json.maxAmount = this.getMaxAmount().toString();
-    delete json.txQuery;
-    return json;
-  }
-  
-  getMinAmount() {
-    return this.state.minAmount;
-  }
-
-  setMinAmount(minAmount) {
-    this.state.minAmount = minAmount;
-    return this;
-  }
-
-  getMaxAmount() {
-    return this.state.maxAmount;
-  }
-
-  setMaxAmount(maxAmount) {
-    this.state.maxAmount = maxAmount;
-    return this;
-  }
-  
-  getTxQuery() {
-    return this.state.txQuery;
-  }
-  
-  setTxQuery(txQuery) {
-    this.state.txQuery = txQuery;
-    if (txQuery) txQuery.state.outputQuery = this;
-    return this;
-  }
-  
-  getSubaddressIndices() {
-    return this.state.subaddressIndices;
-  }
-  
-  setSubaddressIndices(subaddressIndices) {
-    this.state.subaddressIndices = subaddressIndices;
-    return this;
-  }
-  
-  meetsCriteria(output, queryParent) {
-    if (!(output instanceof MoneroOutputWallet)) throw new Error("Output not given to MoneroOutputQuery.meetsCriteria(output)");
-    if (queryParent === undefined) queryParent = true;
-    
-    // filter on output
-    if (this.getAccountIndex() !== undefined && this.getAccountIndex() !== output.getAccountIndex()) return false;
-    if (this.getSubaddressIndex() !== undefined && this.getSubaddressIndex() !== output.getSubaddressIndex()) return false;
-    if (this.getAmount() !== undefined && this.getAmount().compare(output.getAmount()) !== 0) return false;
-    if (this.isSpent() !== undefined && this.isSpent() !== output.isSpent()) return false;
-    if (this.isFrozen() !== undefined && this.isFrozen() !== output.isFrozen()) return false;
-    
-    // filter on output's key image
-    if (this.getKeyImage() !== undefined) {
-      if (output.getKeyImage() === undefined) return false;
-      if (this.getKeyImage().getHex() !== undefined && this.getKeyImage().getHex() !== output.getKeyImage().getHex()) return false;
-      if (this.getKeyImage().getSignature() !== undefined && this.getKeyImage().getSignature() !== output.getKeyImage().getSignature()) return false;
-    }
-    
-    // filter on extensions
-    if (this.getSubaddressIndices() !== undefined && !this.getSubaddressIndices().includes(output.getSubaddressIndex())) return false;
-    
-    // filter with tx query
-    if (this.getTxQuery() && !this.getTxQuery().meetsCriteria(output.getTx(), false)) return false;
-    
-    // filter on remaining fields
-    if (this.getMinAmount() !== undefined && (output.getAmount() === undefined || output.getAmount().compare(this.getMinAmount()) < 0)) return false;
-    if (this.getMaxAmount() !== undefined && (output.getAmount() === undefined || output.getAmount().compare(this.getMaxAmount()) > 0)) return false;
-    
-    // output meets query
-    return true;
-  }
-}
-
-MoneroOutputQuery._EMPTY_OUTPUT = new MoneroOutputWallet();
-
-module.exports = MoneroOutputQuery;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroOutputWallet.js.html b/docs/src_main_js_wallet_model_MoneroOutputWallet.js.html deleted file mode 100644 index b181b17a9..000000000 --- a/docs/src_main_js_wallet_model_MoneroOutputWallet.js.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroOutputWallet.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroOutputWallet.js

- - - - - - -
-
-
const assert = require("assert");
-const GenUtils = require("../../common/GenUtils");
-const MoneroOutput = require("../../daemon/model/MoneroOutput");
-
-/**
- * Models a Monero output with wallet extensions.
- * 
- * @class
- * @extends {MoneroOutput}
- */
-class MoneroOutputWallet extends MoneroOutput {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroOutputWallet|object} state is existing state to initialize from (optional)
-   */
-  constructor(state) {
-    super(state);
-  }
-  
-  getAccountIndex() {
-    return this.state.accountIndex;
-  }
-
-  setAccountIndex(accountIndex) {
-    this.state.accountIndex = accountIndex;
-    return this;
-  }
-
-  getSubaddressIndex() {
-    return this.state.subaddressIndex;
-  }
-
-  setSubaddressIndex(subaddressIndex) {
-    this.state.subaddressIndex = subaddressIndex;
-    return this;
-  }
-  
-  isSpent() {
-    return this.state.isSpent;
-  }
-
-  setIsSpent(isSpent) {
-    this.state.isSpent = isSpent;
-    return this;
-  }
-  
-  /**
-   * Indicates if this output has been deemed 'malicious' and will therefore
-   * not be spent by the wallet.
-   * 
-   * @return Boolean is whether or not this output is frozen
-   */
-  isFrozen() {
-    return this.state.isFrozen;
-  }
-
-  setIsFrozen(isFrozen) {
-    this.state.isFrozen = isFrozen;
-    return this;
-  }
-  
-  isLocked() {
-    if (this.getTx() === undefined) return undefined;
-    return this.getTx().isLocked();
-  }
-  
-  copy() {
-    return new MoneroOutputWallet(this.toJson());
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state, super.toJson());
-    delete json.tx;
-    return json;
-  }
-  
-  /**
-   * Updates this output by merging the latest information from the given
-   * output.
-   * 
-   * Merging can modify or build references to the output given so it
-   * should not be re-used or it should be copied before calling this method.
-   * 
-   * @param output is the output to merge into this one
-   */
-  merge(output) {
-    assert(output instanceof MoneroOutputWallet);
-    if (this === output) return;
-    super.merge(output);
-    this.setAccountIndex(GenUtils.reconcile(this.getAccountIndex(), output.getAccountIndex()));
-    this.setSubaddressIndex(GenUtils.reconcile(this.getSubaddressIndex(), output.getSubaddressIndex()));
-    this.setIsSpent(GenUtils.reconcile(this.isSpent(), output.isSpent(), {resolveTrue: true})); // output can become spent
-    this.setIsFrozen(GenUtils.reconcile(this.isFrozen(), output.isFrozen()));
-    return this;
-  }
-  
-  toString(indent) {
-    let str = super.toString(indent) + "\n"
-    str += GenUtils.kvLine("Account index", this.getAccountIndex(), indent);
-    str += GenUtils.kvLine("Subaddress index", this.getSubaddressIndex(), indent);
-    str += GenUtils.kvLine("Is spent", this.isSpent(), indent);
-    str += GenUtils.kvLine("Is frozen", this.isFrozen(), indent);
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-module.exports = MoneroOutputWallet;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroSubaddress.js.html b/docs/src_main_js_wallet_model_MoneroSubaddress.js.html deleted file mode 100644 index 74d528efc..000000000 --- a/docs/src_main_js_wallet_model_MoneroSubaddress.js.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroSubaddress.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroSubaddress.js

- - - - - - -
-
-
const BigInteger = require("../../common/biginteger").BigInteger;
-const GenUtils = require("../../common/GenUtils");
-const assert = require("assert");
-
-/**
- * Monero subaddress model.
- */
-class MoneroSubaddress {
-  
-  constructor(stateOrAddress, accountIndex, index) {
-    if (stateOrAddress === undefined || typeof stateOrAddress === "string") {
-      this.state = {};
-      this.setAddress(stateOrAddress);
-      this.setAccountIndex(accountIndex);
-      this.setIndex(index);
-    } else {
-      this.state = stateOrAddress;
-      assert(accountIndex === undefined && index === undefined, "Can construct MoneroSubaddress with object or params but not both");
-      if (this.state.balance !== undefined && !(this.state.balance instanceof BigInteger)) this.state.balance = BigInteger.parse(this.state.balance);
-      if (this.state.unlockedBalance !== undefined && !(this.state.unlockedBalance instanceof BigInteger)) this.state.unlockedBalance = BigInteger.parse(this.state.unlockedBalance);
-    }
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (json.balance) json.balance = json.balance.toString();
-    if (json.unlockedBalance) json.unlockedBalance = json.unlockedBalance.toString();
-    return json;
-  }
-  
-  getAccountIndex() {
-    return this.state.accountIndex;
-  }
-
-  setAccountIndex(accountIndex) {
-    this.state.accountIndex = accountIndex;
-    return this;
-  }
-
-  getIndex() {
-    return this.state.index;
-  }
-
-  setIndex(index) {
-    this.state.index = index;
-    return this;
-  }
-  
-  getAddress() {
-    return this.state.address;
-  }
-
-  setAddress(address) {
-    this.state.address = address;
-    return this;
-  }
-
-  getLabel() {
-    return this.state.label;
-  }
-
-  setLabel(label) {
-    this.state.label = label;
-    return this;
-  }
-
-  getBalance() {
-    return this.state.balance;
-  }
-
-  setBalance(balance) {
-    this.state.balance = balance;
-    return this;
-  }
-
-  getUnlockedBalance() {
-    return this.state.unlockedBalance;
-  }
-
-  setUnlockedBalance(unlockedBalance) {
-    this.state.unlockedBalance = unlockedBalance;
-    return this;
-  }
-
-  getNumUnspentOutputs() {
-    return this.state.numUnspentOutputs;
-  }
-
-  setNumUnspentOutputs(numUnspentOutputs) {
-    this.state.numUnspentOutputs = numUnspentOutputs;
-    return this;
-  }
-
-  isUsed() {
-    return this.state.isUsed;
-  }
-
-  setIsUsed(isUsed) {
-    this.state.isUsed = isUsed;
-    return this;
-  }
-
-  getNumBlocksToUnlock() {
-    return this.state.numBlocksToUnlock;
-  }
-
-  setNumBlocksToUnlock(numBlocksToUnlock) {
-    this.state.numBlocksToUnlock = numBlocksToUnlock;
-    return this;
-  }
-  
-  toString(indent) {
-    let str = "";
-    str += GenUtils.kvLine("Account index", this.getAccountIndex(), indent);
-    str += GenUtils.kvLine("Subaddress index", this.getIndex(), indent);
-    str += GenUtils.kvLine("Address", this.getAddress(), indent);
-    str += GenUtils.kvLine("Label", this.getLabel(), indent);
-    str += GenUtils.kvLine("Balance", this.getBalance(), indent);
-    str += GenUtils.kvLine("Unlocked balance", this.getUnlockedBalance(), indent);
-    str += GenUtils.kvLine("Num unspent outputs", this.getNumUnspentOutputs(), indent);
-    str += GenUtils.kvLine("Is used", this.isUsed(), indent);
-    str += GenUtils.kvLine("Num blocks to unlock", this.getNumBlocksToUnlock(), indent);
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-}
-
-module.exports = MoneroSubaddress;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroSyncResult.js.html b/docs/src_main_js_wallet_model_MoneroSyncResult.js.html deleted file mode 100644 index 4cd08e1e1..000000000 --- a/docs/src_main_js_wallet_model_MoneroSyncResult.js.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroSyncResult.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroSyncResult.js

- - - - - - -
-
-
/**
- * Result from syncing a Monero wallet.
- */
-class MoneroSyncResult {
-  
-  constructor(numBlocksFetched, receivedMoney) {
-    this.setNumBlocksFetched(numBlocksFetched);
-    this.setReceivedMoney(receivedMoney);
-  }
-  
-  getNumBlocksFetched() {
-    return this.numBlocksFetched;
-  }
-  
-  setNumBlocksFetched(numBlocksFetched) {
-    this.numBlocksFetched = numBlocksFetched;
-    return this;
-  }
-  
-  getReceivedMoney() {
-    return this.receivedMoney;
-  }
-  
-  setReceivedMoney(receivedMoney) {
-    this.receivedMoney = receivedMoney;
-    return this;
-  }
-}
-
-module.exports = MoneroSyncResult;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroTransfer.js.html b/docs/src_main_js_wallet_model_MoneroTransfer.js.html deleted file mode 100644 index 92b32a3e6..000000000 --- a/docs/src_main_js_wallet_model_MoneroTransfer.js.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroTransfer.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroTransfer.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../../common/biginteger").BigInteger;
-const GenUtils = require("../../common/GenUtils");
-
-/**
- * Models a base transfer of funds to or from the wallet.
- * 
- * @class
- */
-class MoneroTransfer {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroTransfer|object} state is existing state to initialize from (optional)
-   */
-  constructor(state) {
-    
-    // initialize internal state
-    if (!state) state = {};
-    else if (state instanceof MoneroTransfer) state = state.toJson();
-    else if (typeof state === "object") state = Object.assign({}, state);
-    else throw new MoneroError("state must be a MoneroTransfer or JavaScript object");
-    this.state = state;
-    
-    // deserialize fields if necessary
-    if (state.amount !== undefined && !(state.amount instanceof BigInteger)) state.amount = BigInteger.parse(state.amount);
-    
-    // validate state
-    this._validate();
-  }
-  
-  copy() {
-    return new MoneroTransfer(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state);
-    if (this.getAmount()) json.amount = this.getAmount().toString()
-    delete json.tx; // parent tx is not serialized
-    return json;
-  }
-  
-  getTx() {
-    return this.state.tx;
-  }
-  
-  setTx(tx) {
-    this.state.tx = tx;
-    return this;
-  }
-  
-  isOutgoing() {
-    let isIncoming = this.isIncoming();
-    assert(typeof isIncoming === "boolean");
-    return !isIncoming;
-  }
-  
-  isIncoming() {
-    throw new Error("Subclass must implement");
-  }
-
-  getAccountIndex() {
-    return this.state.accountIndex;
-  }
-
-  setAccountIndex(accountIndex) {
-    this.state.accountIndex = accountIndex;
-    this._validate();
-    return this;
-  }
-
-  getAmount() {
-    return this.state.amount;
-  }
-
-  setAmount(amount) {
-    this.state.amount = amount;
-    return this;
-  }
-  
-  /**
-   * Updates this transaction by merging the latest information from the given
-   * transaction.
-   * 
-   * Merging can modify or build references to the transfer given so it
-   * should not be re-used or it should be copied before calling this method.
-   * 
-   * @param transfer is the transfer to merge into this one
-   * @return {MoneroTransfer} the merged transfer
-   */
-  merge(transfer) {
-    assert(transfer instanceof MoneroTransfer);
-    if (this === transfer) return this;
-    
-    // merge transactions if they're different which comes back to merging transfers
-    if (this.getTx() !== transfer.getTx()) {
-      this.getTx().merge(transfer.getTx());
-      return this;
-    }
-    
-    // otherwise merge transfer fields
-    this.setAccountIndex(GenUtils.reconcile(this.getAccountIndex(), transfer.getAccountIndex()));
-    
-    // TODO monero-project: failed tx in pool (after testUpdateLockedDifferentAccounts()) causes non-originating saved wallets to return duplicate incoming transfers but one has amount of 0
-    if (this.getAmount() !== undefined && transfer.getAmount() !== undefined && this.getAmount().compare(transfer.getAmount()) !== 0 && (this.getAmount().compare(BigInteger.parse("0")) === 0 || transfer.getAmount().compare(BigInteger.parse("0")) === 0)) {
-      console.warn("monero-project returning transfers with 0 amount/numSuggestedConfirmations");
-    } else {
-      this.setAmount(GenUtils.reconcile(this.getAmount(), transfer.getAmount()));
-    }
-    
-    return this;
-  }
-  
-  toString(indent = 0) {
-    let str = "";
-    str += GenUtils.kvLine("Is incoming", this.isIncoming(), indent);
-    str += GenUtils.kvLine("Account index", this.getAccountIndex(), indent);
-    str += GenUtils.kvLine("Amount", this.getAmount() ? this.getAmount().toString() : undefined, indent);
-    return str === "" ? str :  str.slice(0, str.length - 1);  // strip last newline
-  }
-  
-  _validate() {
-    if (this.getAccountIndex() !== undefined && this.getAccountIndex() < 0) throw new MoneroError("Account index must be >= 0");
-  }
-}
-
-module.exports = MoneroTransfer;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroTransferQuery.js.html b/docs/src_main_js_wallet_model_MoneroTransferQuery.js.html deleted file mode 100644 index d1889c1df..000000000 --- a/docs/src_main_js_wallet_model_MoneroTransferQuery.js.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroTransferQuery.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroTransferQuery.js

- - - - - - -
-
-
const MoneroIncomingTransfer = require("./MoneroIncomingTransfer");
-const MoneroOutgoingTransfer = require("./MoneroOutgoingTransfer");
-const MoneroTransfer = require("./MoneroTransfer");
-const MoneroError = require("../../common/MoneroError")
-
-/**
- * Configuration to query wallet transfers.
- * 
- * @extends {MoneroTransfer}
- */
-class MoneroTransferQuery extends MoneroTransfer {
-  
-  /**
-   * <p>Construct the transfer query.</p>
-   * 
-   * <p>Example:</p>
-   * 
-   * <code>
-   * &sol;&sol; get incoming transfers to account 0, subaddress 1<br>
-   * let transfers = await wallet.getTransfers({<br>
-   * &nbsp;&nbsp; accountIndex: 0,<br>
-   * &nbsp;&nbsp; subaddressIndex: 0<br>
-   * });
-   * </code>
-   * 
-   * <p>All configuration is optional.  All transfers are returned except those that don't meet criteria defined in this query.</p>
-   * 
-   * @param {object} config - transfer query configuration (optional)
-   * @param {BigInteger} config.amount - get transfers with this amount
-   * @param {int} config.accountIndex - get transfers to/from this account index
-   * @param {int} config.subaddressIndex - get transfers to/from this subaddress index
-   * @param {int[]} config.subaddressIndices - get transfers to/from these subaddress indices
-   * @param {string} config.address - get transfers to/from this wallet address
-   * @param {string[]} config.addresses - get transfers to/from these wallet addresses
-   * @param {boolean} config.isIncoming - get transfers which are incoming if true
-   * @param {boolean} config.isOutgoing - get transfers which are outgoing if true
-   * @param {boolean} config.hasDestinations - get transfers with known destinations if true (destinations are only stored locally with the wallet)
-   * @param {object|MoneroTxQuery} config.txQuery - get transfers whose tx match this tx query
-   */
-  constructor(config) {
-    super(config);
-    
-    // deserialize if necessary
-    const MoneroTxQuery = require("./MoneroTxQuery");
-    if (this.state.txQuery && !(this.state.txQuery instanceof MoneroTxQuery)) this.state.txQuery = new MoneroTxQuery(this.state.txQuery);
-    if (this.state.txQuery) this.state.txQuery.setTransferQuery(this);
-    
-    // alias isOutgoing to isIncoming
-    if (this.state.isOutgoing !== undefined) this.state.isIncoming = !this.state.isOutgoing;
-    
-    // validate state
-    this._validate();
-  }
-  
-  copy() {
-    return new MoneroTransferQuery(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state, super.toJson());
-    delete json.txQuery;
-    return json;
-  }
-  
-  getTxQuery() {
-    return this.state.txQuery;
-  }
-  
-  setTxQuery(txQuery) {
-    this.state.txQuery = txQuery;
-    if (txQuery) txQuery.state.transferQuery = this;
-    return this;
-  }
-  
-  isIncoming() {
-    return this.state.isIncoming;
-  }
-
-  setIsIncoming(isIncoming) {
-    this.state.isIncoming = isIncoming;
-    return this;
-  }
-  
-  isOutgoing() {
-    return this.state.isIncoming === undefined ? undefined : !this.state.isIncoming;
-  }
-  
-  setIsOutgoing(isOutgoing) {
-    this.state.isIncoming = isOutgoing === undefined ? undefined : !isOutgoing;
-    return this;
-  }
-  
-  getAddress() {
-    return this.state.address;
-  }
-
-  setAddress(address) {
-    this.state.address = address;
-    return this;
-  }
-  
-  getAddresses() {
-    return this.state.addresses;
-  }
-
-  setAddresses(addresses) {
-    this.state.addresses = addresses;
-    return this;
-  }
-  
-  getSubaddressIndex() {
-    return this.state.subaddressIndex;
-  }
-  
-  setSubaddressIndex(subaddressIndex) {
-    this.state.subaddressIndex = subaddressIndex;
-    this._validate();
-    return this;
-  }
-  
-  getSubaddressIndices() {
-    return this.state.subaddressIndices;
-  }
-  
-  setSubaddressIndices(subaddressIndices) {
-    this.state.subaddressIndices = subaddressIndices;
-    this._validate();
-    return this;
-  }
-  
-  getDestinations() {
-    return this.state.destinations;
-  }
-  
-  setDestinations(destinations) {
-    this.state.destinations = destinations;
-    return this;
-  }
-  
-  hasDestinations() {
-    return this.state.hasDestinations;
-  }
-  
-  setHasDestinations(hasDestinations) {
-    this.state.hasDestinations = hasDestinations;
-    return this;
-  }
-  
-  /**
-   * Convenience method to query outputs by the locked state of their tx.
-   * 
-   * @param isLocked specifies if the output's tx must be locked or unlocked (optional)
-   * @return {MoneroOutputQuery} this query for chaining
-   */
-  setIsLocked(isLocked) {
-    if (this.state.txQuery === undefined) this.state.txQuery = new MoneroTxQuery();
-    this.state.txQuery.setIsLocked(isLocked);
-    return this;
-  }
-  
-  meetsCriteria(transfer, queryParent) {
-    if (!(transfer instanceof MoneroTransfer)) throw new Error("Transfer not given to MoneroTransferQuery.meetsCriteria(transfer)");
-    if (queryParent === undefined) queryParent = true;
-    
-    // filter on common fields
-    if (this.isIncoming() !== undefined && this.isIncoming() !== transfer.isIncoming()) return false;
-    if (this.isOutgoing() !== undefined && this.isOutgoing() !== transfer.isOutgoing()) return false;
-    if (this.getAmount() !== undefined && this.getAmount().compare(transfer.getAmount()) !== 0) return false;
-    if (this.getAccountIndex() !== undefined && this.getAccountIndex() !== transfer.getAccountIndex()) return false;
-    
-    // filter on incoming fields
-    if (transfer instanceof MoneroIncomingTransfer) {
-      if (this.hasDestinations()) return false;
-      if (this.getAddress() !== undefined && this.getAddress() !== transfer.getAddress()) return false;
-      if (this.getAddresses() !== undefined && !this.getAddresses().includes(transfer.getAddress())) return false;
-      if (this.getSubaddressIndex() !== undefined && this.getSubaddressIndex() !== transfer.getSubaddressIndex()) return false;
-      if (this.getSubaddressIndices() !== undefined && !this.getSubaddressIndices().includes(transfer.getSubaddressIndex())) return false;
-    }
-
-    // filter on outgoing fields
-    else if (transfer instanceof MoneroOutgoingTransfer) {
-      
-      // filter on addresses which must have overlap
-      if (this.getAddress() !== undefined && (transfer.getAddresses() === undefined || !transfer.getAddresses().includes(this.getAddress()))) return false;   // TODO: will filter all transfers that don't contain addresses (outgoing txs might not have this field initialized)
-      if (this.getAddresses() !== undefined) {
-        if (!transfer.getAddresses()) return false;
-        if (!this.getAddresses().some(address => transfer.getAddresses().includes(address))) return false;
-      }
-      
-      // filter on subaddress indices
-      if (this.getSubaddressIndex() !== undefined && (transfer.getSubaddressIndices() === undefined || !transfer.getSubaddressIndices().includes(this.getSubaddressIndex()))) return false;
-      if (this.getSubaddressIndices() !== undefined) {
-        if (!transfer.getSubaddressIndices()) return false;
-        if (!this.getSubaddressIndices().some(subaddressIdx => transfer.getSubaddressIndices().includes(subaddressIdx))) return false;
-      }
-      
-      // filter on having destinations
-      if (this.hasDestinations() !== undefined) {
-        if (this.hasDestinations() && transfer.getDestinations() === undefined) return false;
-        if (!this.hasDestinations() && transfer.getDestinations() !== undefined) return false;
-      }
-      
-      // filter on destinations TODO: start with test for this
-//    if (this.getDestionations() !== undefined && this.getDestionations() !== transfer.getDestionations()) return false;
-    }
-    
-    // otherwise invalid type
-    else throw new Error("Transfer must be MoneroIncomingTransfer or MoneroOutgoingTransfer");
-    
-    // filter with tx filter
-    if (queryParent && this.getTxQuery() !== undefined && !this.getTxQuery().meetsCriteria(transfer.getTx())) return false;    
-    return true;
-  }
-  
-  _validate() {
-    if (this.getSubaddressIndex() !== undefined && this.getSubaddressIndex() < 0) throw new MoneroError("Subaddress index must be >= 0");
-    if (this.getSubaddressIndices() !== undefined) for (let subaddressIdx of this.getSubaddressIndices()) if (subaddressIdx < 0) throw new MoneroError("Subaddress indices must be >= 0");
-  }
-}
-
-module.exports = MoneroTransferQuery;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroTxConfig.js.html b/docs/src_main_js_wallet_model_MoneroTxConfig.js.html deleted file mode 100644 index c18df1bb7..000000000 --- a/docs/src_main_js_wallet_model_MoneroTxConfig.js.html +++ /dev/null @@ -1,390 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroTxConfig.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroTxConfig.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../../common/biginteger").BigInteger;
-const GenUtils = require("../../common/GenUtils");
-const MoneroDestination = require("./MoneroDestination");
-const MoneroError = require("../../common/MoneroError");
-
-/**
- * Configures a transaction to send, sweep, or create a payment URI.
- */
-class MoneroTxConfig {
-  
-  /**
-   * <p>Generic request to transfer funds from a wallet.</p>
-   * 
-   * <p>Examples:</p>
-   * 
-   * <code>
-   * let config1 = new MoneroTxConfig({<br>
-   * &nbsp;&nbsp; accountIndex: 0,<br>
-   * &nbsp;&nbsp; address: "59aZULsUF3YN...",<br>
-   * &nbsp;&nbsp; amount: new BigInteger("500000"),<br>
-   * &nbsp;&nbsp; priority: MoneroTxPriority.NORMAL,<br>
-   * &nbsp;&nbsp; relay: true<br>
-   * });<br><br>
-   * </code>
-   * 
-   * @param {MoneroTxConfig|object} config - configures the transaction to create (optional)
-   * @param {string} config.address - single destination address
-   * @param {BigInteger} config.amount - single destination amount
-   * @param {int} config.accountIndex - source account index to transfer funds from
-   * @param {int} config.subaddressIndex - source subaddress index to transfer funds from
-   * @param {int[]} config.subaddressIndices - source subaddress indices to transfer funds from
-   * @param {boolean} config.relay - relay the transaction to peers to commit to the blockchain
-   * @param {MoneroTxPriority} config.priority - transaction priority (default MoneroTxPriority.NORMAL)
-   * @param {MoneroDestination[]} config.destinations - addresses and amounts in a multi-destination tx
-   * @param {int[]} config.subtractFeeFrom - list of destination indices to split the transaction fee
-   * @param {string} config.paymentId - transaction payment ID
-   * @param {BigInteger} config.unlockTime - minimum height or timestamp for the transaction to unlock (default 0)
-   * @param {string} config.note - transaction note saved locally with the wallet
-   * @param {string} config.recipientName - recipient name saved locally with the wallet
-   * @param {boolean} config.canSplit - allow funds to be transferred using multiple transactions
-   * @param {BigInteger} config.belowAmount - for sweep requests, include outputs below this amount when sweeping wallet, account, subaddress, or all unlocked funds 
-   * @param {boolean} config.sweepEachSubaddress - for sweep requests, sweep each subaddress individually instead of together if true
-   * @param {string} config.keyImage - key image to sweep (ignored except in sweepOutput() requests)
-   */
-  constructor(config, relaxValidation) {  // relax validation for internal use to process json from rpc or cpp
-    if (arguments.length > 2) throw new MoneroError("MoneroTxConfig can be constructed with only two parameters but was given " + arguments.length)
-    
-    // initialize internal state
-    if (!config) this.state = {};
-    else if (config instanceof MoneroTxConfig) this.state = config.toJson();
-    else if (typeof config === "object") {
-      this.state = Object.assign({}, config);
-      if (relaxValidation) {
-        if (typeof this.state.amount === "number") this.state.amount = BigInteger.parse(this.state.amount);
-        if (typeof this.state.unlockTime === "number") this.state.unlockTime = BigInteger.parse(this.state.unlockTime);
-        if (typeof this.state.belowAmount === "number") this.state.belowAmount = BigInteger.parse(this.state.belowAmount);
-      }
-
-      // check for unsupported fields
-      for (let key of Object.keys(config)) {
-        if (!GenUtils.arrayContains(MoneroTxConfig.SUPPORTED_FIELDS, key)) {
-          throw new MoneroError("Unsupported field in MoneroTxConfig: '" + key + "'");
-        }
-      }
-    }
-    else throw new MoneroError("Invalid argument given to MoneroTxConfig: " + typeof config);
-
-    // deserialize BigIntegers
-    if (this.state.fee !== undefined && !(this.state.fee instanceof BigInteger)) this.state.fee = BigInteger.parse(this.state.fee);
-    if (this.state.unlockTime !== undefined && !(this.state.unlockTime instanceof BigInteger)) this.state.unlockTime = BigInteger.parse(this.state.unlockTime);
-    if (this.state.belowAmount !== undefined && !(this.state.belowAmount instanceof BigInteger)) this.state.belowAmount = BigInteger.parse(this.state.belowAmount);
-    
-    // deserialize destinations
-    if (this.state.destinations) {
-      assert(this.state.address === undefined && this.state.amount === undefined, "Tx configuration may specify destinations or an address/amount but not both");
-      this.setDestinations(this.state.destinations.map(destination => destination instanceof MoneroDestination ? destination : new MoneroDestination(destination)));
-    }
-    
-    // alias 'address' and 'amount' to single destination to support e.g. createTx({address: "..."})
-    if (this.state.address || this.state.amount) {
-      assert(!this.state.destinations, "Tx configuration may specify destinations or an address/amount but not both");
-      this.setAddress(this.state.address);
-      this.setAmount(this.state.amount);
-      delete this.state.address;
-      delete this.state.amount;
-    }
-    
-    // alias 'subaddressIndex' to subaddress indices
-    if (this.state.subaddressIndex !== undefined) {
-      this.setSubaddressIndices([this.state.subaddressIndex]);
-      delete this.state.subaddressIndex;
-    }
-  }
-  
-  copy() {
-    return new MoneroTxConfig(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state); // copy state
-    if (this.getDestinations()) {
-      json.destinations = [];
-      for (let destination of this.getDestinations()) json.destinations.push(destination.toJson());
-    }
-    if (this.getFee()) json.fee = this.getFee().toString();
-    if (this.getUnlockTime()) json.unlockTime = this.getUnlockTime().toString();
-    if (this.getBelowAmount()) json.belowAmount = this.getBelowAmount().toString();
-    return json;
-  }
-  
-  /**
-   * Set the address of a single-destination configuration.
-   * 
-   * @param {string} address - the address to set for the single destination
-   * @return {MoneroTxConfig} this configuration for chaining
-   */
-  setAddress(address) {
-    if (this.state.destinations !== undefined && this.state.destinations.length > 1) throw new MoneroError("Cannot set address because MoneroTxConfig already has multiple destinations");
-    if (this.state.destinations === undefined || this.state.destinations.length === 0) this.addDestination(new MoneroDestination(address));
-    else this.state.destinations[0].setAddress(address);
-    return this;
-  }
-  
-  /**
-   * Get the address of a single-destination configuration.
-   * 
-   * @return {string} the address of the single destination
-   */
-  getAddress() {
-    if (this.state.destinations === undefined || this.state.destinations.length !== 1) throw new MoneroError("Cannot get address because MoneroTxConfig does not have exactly one destination");
-    return this.state.destinations[0].getAddress();
-  }
-  
-  /**
-   * Set the amount of a single-destination configuration.
-   * 
-   * @param {BigInteger|string} amount - the amount to set for the single destination
-   * @return {MoneroTxConfig} this configuration for chaining
-   */
-  setAmount(amount) {
-    if (amount !== undefined && !(this.state.amount instanceof BigInteger)) {
-      if (typeof amount === "number") throw new MoneroError("Destination amount must be BigInteger or string");
-      try { amount = BigInteger.parse(amount); }
-      catch (err) { throw new MoneroError("Invalid destination amount: " + amount); }
-    }
-    if (this.state.destinations !== undefined && this.state.destinations.length > 1) throw new MoneroError("Cannot set amount because MoneroTxConfig already has multiple destinations");
-    if (this.state.destinations === undefined || this.state.destinations.length === 0) this.addDestination(new MoneroDestination(undefined, amount));
-    else this.state.destinations[0].setAmount(amount);
-    return this;
-  }
-  
-  /**
-   * Get the amount of a single-destination configuration.
-   * 
-   * @return {BigInteger} the amount of the single destination
-   */
-  getAmount() {
-    if (this.state.destinations === undefined || this.state.destinations.length !== 1) throw new MoneroError("Cannot get amount because MoneroTxConfig does not have exactly one destination");
-    return this.state.destinations[0].getAmount();
-  }
-  
-  addDestination(destinationOrAddress, amount) {
-    if (typeof destinationOrAddress === "string") return this.addDestination(new MoneroDestination(destinationOrAddress, amount));
-    assert(destinationOrAddress instanceof MoneroDestination);
-    if (this.state.destinations === undefined) this.state.destinations = [];
-    this.state.destinations.push(destinationOrAddress);
-    return this;
-  }
-  
-  getDestinations() {
-    return this.state.destinations;
-  }
-  
-  setDestinations(destinations) {
-    if (arguments.length > 1) destinations = Array.from(arguments);
-    this.state.destinations = destinations;
-    return this;
-  }
-  
-  setDestination(destination) {
-    return this.setDestinations(destination ? [destination] : destination);
-  }
-
-  getSubtractFeeFrom() {
-    return this.state.subtractFeeFrom;
-  }
-
-  setSubtractFeeFrom(destinationIndices) {
-    if (arguments.length > 1) destinationIndices = Array.from(arguments);
-    this.state.subtractFeeFrom = destinationIndices;
-    return this;
-  }
-  
-  getPaymentId() {
-    return this.state.paymentId;
-  }
-  
-  setPaymentId(paymentId) {
-    this.state.paymentId = paymentId;
-    return this;
-  }
-  
-  getPriority() {
-    return this.state.priority;
-  }
-  
-  setPriority(priority) {
-    this.state.priority = priority;
-    return this;
-  }
-  
-  getFee() {
-    return this.state.fee;
-  }
-  
-  setFee(fee) {
-    this.state.fee = fee;
-    return this;
-  }
-  
-  getAccountIndex() {
-    return this.state.accountIndex;
-  }
-  
-  setAccountIndex(accountIndex) {
-    this.state.accountIndex = accountIndex;
-    return this;
-  }
-  
-  setSubaddressIndex(subaddressIndex) {
-    this.setSubaddressIndices([subaddressIndex]);
-    return this;
-  }
-  
-  getSubaddressIndices() {
-    return this.state.subaddressIndices;
-  }
-  
-  setSubaddressIndices(subaddressIndices) {
-    if (arguments.length > 1) subaddressIndices = Array.from(arguments);
-    this.state.subaddressIndices = subaddressIndices;
-    return this;
-  }
-  
-  getUnlockTime() {
-    return this.state.unlockTime;
-  }
-  
-  setUnlockTime(unlockTime) {
-    if (unlockTime !== undefined) {
-      if (typeof unlockTime === "number") unlockTime = "" + unlockTime;
-      if (!(unlockTime instanceof BigInteger)) {
-        try { unlockTime = BigInteger.parse(unlockTime); }
-        catch (err) { throw new MoneroError("Invalid unlock time: " + unlockTime); }
-      }
-    }
-    this.state.unlockTime = unlockTime;
-    return this;
-  }
-  
-  getRelay() {
-    return this.state.relay;
-  }
-  
-  setRelay(relay) {
-    this.state.relay = relay;
-    return this;
-  }
-  
-  getCanSplit() {
-    return this.state.canSplit;
-  }
-  
-  setCanSplit(canSplit) {
-    this.state.canSplit = canSplit;
-    return this;
-  }
-  
-  getNote() {
-    return this.state.note;
-  }
-  
-  setNote(note) {
-    this.state.note = note;
-    return this;
-  }
-  
-  getRecipientName() {
-    return this.state.recipientName;
-  }
-  
-  setRecipientName(recipientName) {
-    this.state.recipientName = recipientName;
-    return this;
-  }
-  
-  // --------------------------- SPECIFIC TO SWEEP ----------------------------
-  
-  getBelowAmount() {
-    return this.state.belowAmount;
-  }
-  
-  setBelowAmount(belowAmount) {
-    this.state.belowAmount = belowAmount;
-    return this;
-  }
-  
-  getSweepEachSubaddress() {
-    return this.state.sweepEachSubaddress;
-  }
-  
-  setSweepEachSubaddress(sweepEachSubaddress) {
-    this.state.sweepEachSubaddress = sweepEachSubaddress;
-    return this;
-  }
-  
-  /**
-   * Get the key image hex of the output to sweep.
-   * 
-   * return {string} is the key image hex of the output to sweep
-   */
-  getKeyImage() {
-    return this.state.keyImage;
-  }
-  
-  /**
-   * Set the key image hex of the output to sweep.
-   * 
-   * @param {string} keyImage is the key image hex of the output to sweep
-   */
-  setKeyImage(keyImage) {
-    this.state.keyImage = keyImage;
-    return this;
-  }
-}
-
-MoneroTxConfig.SUPPORTED_FIELDS = ["address", "amount", "accountIndex", "subaddressIndex", "subaddressIndices", "relay", "priority", "destinations", "subtractFeeFrom", "paymentId", "unlockTime", "note", "recipientName", "canSplit", "belowAmount", "sweepEachSubaddress", "keyImage"];
-
-module.exports = MoneroTxConfig
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroTxPriority.js.html b/docs/src_main_js_wallet_model_MoneroTxPriority.js.html deleted file mode 100644 index 98507097a..000000000 --- a/docs/src_main_js_wallet_model_MoneroTxPriority.js.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroTxPriority.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroTxPriority.js

- - - - - - -
-
-
/**
- * Enumerates send priorities.
- * 
- * @hideconstructor
- */
-class MoneroTxPriority {}
-
-/**
- * Default priority (i.e. normal) (value=0).
- */
-MoneroTxPriority.DEFAULT = 0;
-
-/**
- * Unimportant priority (value=1).
- */
-MoneroTxPriority.UNIMPORTANT = 1;
-
-/**
- * Normal priority (value=2).
- */
-MoneroTxPriority.NORMAL = 2;
-
-/**
- * Elevated priority (value=3).
- */
-MoneroTxPriority.ELEVATED = 3;
-
-module.exports = MoneroTxPriority;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroTxQuery.js.html b/docs/src_main_js_wallet_model_MoneroTxQuery.js.html deleted file mode 100644 index 5f88c1297..000000000 --- a/docs/src_main_js_wallet_model_MoneroTxQuery.js.html +++ /dev/null @@ -1,350 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroTxQuery.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroTxQuery.js

- - - - - - -
-
-
const assert = require("assert");
-const MoneroOutputQuery = require("./MoneroOutputQuery");
-const MoneroTransferQuery = require("./MoneroTransferQuery");
-const MoneroTxWallet = require("./MoneroTxWallet");
-
-/**
- * <p>Configuration to query transactions.</p>
- * 
- * @class
- * @extends {MoneroTxWallet}
- */
-class MoneroTxQuery extends MoneroTxWallet {
-  
-  /**
-   * <p>Construct the transaction query.</p>
-   * 
-   * <p>Example:</p>
-   * 
-   * <code>
-   * &sol;&sol; get transactions with unlocked incoming transfers to account 0<br>
-   * let txs = await wallet.getTxs({<br>
-   * &nbsp;&nbsp; isLocked: false,<br>
-   * &nbsp;&nbsp; transferQuery: {<br>
-   * &nbsp;&nbsp;&nbsp;&nbsp; isIncoming: true,<br>
-   * &nbsp;&nbsp;&nbsp;&nbsp; accountIndex: 0<br>
-   * &nbsp;&nbsp; }<br>
-   * });
-   * </code>
-   * 
-   * <p>All configuration is optional.  All transactions are returned except those that don't meet criteria defined in this query.</p>
-   * 
-   * @param {object} config - tx query configuration
-   * @param {string} config.hash - get a tx with this hash
-   * @param {string[]} config.txHashes - get txs with these hashes
-   * @param {int} config.height - get txs with this height
-   * @param {int} config.minHeight - get txs with height greater than or equal to this height
-   * @param {int} config.maxHeight - get txs with height less than or equal to this height
-   * @param {boolean} config.isConfirmed - get confirmed or unconfirmed txs
-   * @param {boolean} config.inTxPool - get txs in or out of the tx pool
-   * @param {boolean} config.relay - get txs with the same relay status
-   * @param {boolean} config.isRelayed - get relayed or non-relayed txs
-   * @param {boolean} config.isFailed - get failed or non-failed txs
-   * @param {boolean} config.isMinerTx - get miner or non-miner txs
-   * @param {boolean} config.isLocked - get locked or unlocked txs
-   * @param {boolean} config.isIncoming - get txs with or without incoming transfers
-   * @param {boolean} config.isOutgoing - get txs with or without outgoing transfers
-   * @param {string} config.paymentId - get txs with this payment ID
-   * @param {string} config.paymentIds - get txs with a payment ID among these payment IDs
-   * @param {boolean} config.hasPaymentId - get txs with or without payment IDs
-   * @param {object|MoneroTransferQuery} config.transferQuery - get txs with transfers matching this transfer query
-   * @param {object|MoneroOutputQuery} config.inputQuery - get txs with inputs matching this input query
-   * @param {object|MoneroOutputQuery} config.outputQuery - get txs with outputs matching this output query
-   */
-  constructor(config) {
-    super(config);
-    
-    // deserialize if necessary
-    if (this.state.transferQuery && !(this.state.transferQuery instanceof MoneroTransferQuery)) this.state.transferQuery = new MoneroTransferQuery(this.state.transferQuery);
-    if (this.state.inputQuery && !(this.state.inputQuery instanceof MoneroOutputQuery)) this.state.inputQuery = new MoneroOutputQuery(this.state.inputQuery);
-    if (this.state.outputQuery && !(this.state.outputQuery instanceof MoneroOutputQuery)) this.state.outputQuery = new MoneroOutputQuery(this.state.outputQuery);
-    
-    // link cycles
-    if (this.state.transferQuery) this.state.transferQuery.setTxQuery(this);
-    if (this.state.inputQuery) this.state.inputQuery.setTxQuery(this);
-    if (this.state.outputQuery) this.state.outputQuery.setTxQuery(this);
-    
-    // alias 'hash' to hashes
-    if (this.state.hash) {
-      this.setHashes([this.state.hash]);
-      delete this.state.hash;
-    }
-  }
-  
-  copy() {
-    return new MoneroTxQuery(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state, super.toJson()); // merge json onto inherited state
-    if (this.getTransferQuery()) json.transferQuery = this.getTransferQuery().toJson();
-    if (this.getInputQuery()) json.inputQuery = this.getInputQuery().toJson();
-    if (this.getOutputQuery()) json.outputQuery = this.getOutputQuery().toJson();
-    delete json.block;  // do not serialize parent block
-    return json;
-  }
-  
-  isIncoming() {
-    return this.state.isIncoming;
-  }
-  
-  setIsIncoming(isIncoming) {
-    this.state.isIncoming = isIncoming;
-    return this;
-  }
-  
-  isOutgoing() {
-    return this.state.isOutgoing;
-  }
-  
-  setIsOutgoing(isOutgoing) {
-    this.state.isOutgoing = isOutgoing;
-    return this;
-  }
-
-  getHashes() {
-    return this.state.hashes;
-  }
-
-  setHashes(hashes) {
-    this.state.hashes = hashes;
-    return this;
-  }
-  
-  setHash(hash) {
-    if (hash === undefined) return this.setHashes(undefined);
-    assert(typeof hash === "string");
-    return this.setHashes([hash]);
-  }
-  
-  hasPaymentId() {
-    return this.state.hasPaymentId;
-  }
-  
-  setHasPaymentId() {
-    this.state.hasPaymentId = hasPaymentId;
-    return this;
-  }
-  
-  getPaymentIds() {
-    return this.state.paymentIds;
-  }
-
-  setPaymentIds(paymentIds) {
-    this.state.paymentIds = paymentIds;
-    return this;
-  }
-  
-  setPaymentId(paymentId) {
-    if (paymentId === undefined) return this.setPaymentIds(undefined);
-    assert(typeof paymentId === "string");
-    return this.setPaymentIds([paymentId]);
-  }
-  
-  getHeight() {
-    return this.state.height;
-  }
-  
-  setHeight(height) {
-    this.state.height = height;
-    return this;
-  }
-  
-  getMinHeight() {
-    return this.state.minHeight;
-  }
-
-  setMinHeight(minHeight) {
-    this.state.minHeight = minHeight;
-    return this;
-  }
-
-  getMaxHeight() {
-    return this.state.maxHeight;
-  }
-
-  setMaxHeight(maxHeight) {
-    this.state.maxHeight = maxHeight;
-    return this;
-  }
-  
-  getIncludeOutputs() {
-    return this.state.includeOutputs;
-  }
-
-  setIncludeOutputs(includeOutputs) {
-    this.state.includeOutputs = includeOutputs;
-    return this;
-  }
-  
-  getTransferQuery() {
-    return this.state.transferQuery;
-  }
-  
-  setTransferQuery(transferQuery) {
-    this.state.transferQuery = transferQuery;
-    if (transferQuery) transferQuery.state.txQuery = this;
-    return this;
-  }
-  
-  getInputQuery() {
-    return this.state.inputQuery;
-  }
-  
-  setInputQuery(inputQuery) {
-    this.state.inputQuery = inputQuery;
-    if (inputQuery) inputQuery.state.txQuery = this;
-    return this;
-  }
-  
-  getOutputQuery() {
-    return this.state.outputQuery;
-  }
-  
-  setOutputQuery(outputQuery) {
-    this.state.outputQuery = outputQuery;
-    if (outputQuery) outputQuery.state.txQuery = this;
-    return this;
-  }
-  
-  meetsCriteria(tx, queryChildren) {
-    if (!(tx instanceof MoneroTxWallet)) throw new Error("Tx not given to MoneroTxQuery.meetsCriteria(tx)");
-    if (queryChildren === undefined) queryChildren = true;
-    
-    // filter on tx
-    if (this.getHash() !== undefined && this.getHash() !== tx.getHash()) return false;
-    if (this.getPaymentId() !== undefined && this.getPaymentId() !== tx.getPaymentId()) return false;
-    if (this.isConfirmed() !== undefined && this.isConfirmed() !== tx.isConfirmed()) return false;
-    if (this.inTxPool() !== undefined && this.inTxPool() !== tx.inTxPool()) return false;
-    if (this.getRelay() !== undefined && this.getRelay() !== tx.getRelay()) return false;
-    if (this.isRelayed() !== undefined && this.isRelayed() !== tx.isRelayed()) return false;
-    if (this.isFailed() !== undefined && this.isFailed() !== tx.isFailed()) return false;
-    if (this.isMinerTx() !== undefined && this.isMinerTx() !== tx.isMinerTx()) return false;
-    if (this.isLocked() !== undefined && this.isLocked() !== tx.isLocked()) return false;
-    
-    // filter on having a payment id
-    if (this.hasPaymentId() !== undefined) {
-      if (this.hasPaymentId() && tx.getPaymentId() === undefined) return false;
-      if (!this.hasPaymentId() && tx.getPaymentId() !== undefined) return false;
-    }
-    
-    // filter on incoming
-    if (this.isIncoming() !== undefined) {
-      if (this.isIncoming() && !tx.isIncoming()) return false;
-      if (!this.isIncoming() && tx.isIncoming()) return false;
-    }
-    
-    // filter on outgoing
-    if (this.isOutgoing() !== undefined) {
-      if (this.isOutgoing() && !tx.isOutgoing()) return false;
-      if (!this.isOutgoing() && tx.isOutgoing()) return false;
-    }
-    
-    // filter on remaining fields
-    let txHeight = tx.getBlock() === undefined ? undefined : tx.getBlock().getHeight();
-    if (this.getHashes() !== undefined && !this.getHashes().includes(tx.getHash())) return false;
-    if (this.getPaymentIds() !== undefined && !this.getPaymentIds().includes(tx.getPaymentId())) return false;
-    if (this.getHeight() !== undefined && (txHeight === undefined || txHeight !== this.getHeight())) return false;
-    if (this.getMinHeight() !== undefined && txHeight !== undefined && txHeight < this.getMinHeight()) return false; // do not filter unconfirmed
-    if (this.getMaxHeight() !== undefined && (txHeight === undefined || txHeight > this.getMaxHeight())) return false;
-    // TODO: filtering not complete
-    
-    // done if not querying transfers or outputs
-    if (!queryChildren) return true;
-    
-    // at least one transfer must meet transfer filter if defined
-    if (this.getTransferQuery()) {
-      let matchFound = false;
-      if (tx.getOutgoingTransfer() && this.getTransferQuery().meetsCriteria(tx.getOutgoingTransfer(), false)) matchFound = true;
-      else if (tx.getIncomingTransfers()) {
-        for (let incomingTransfer of tx.getIncomingTransfers()) {
-          if (this.getTransferQuery().meetsCriteria(incomingTransfer, false)) {
-            matchFound = true;
-            break;
-          }
-        }
-      }
-      if (!matchFound) return false;
-    }
-    
-    // at least one input must meet input query if defined
-    if (this.getInputQuery() !== undefined) {
-      if (tx.getInputs() === undefined || tx.getInputs().length === 0) return false;
-      let matchFound = false;
-      for (let input of tx.getInputs()) {
-        if (this.getInputQuery().meetsCriteria(input, false)) {
-          matchFound = true;
-          break;
-        }
-      }
-      if (!matchFound) return false;
-    }
-    
-    // at least one output must meet output query if defined
-    if (this.getOutputQuery() !== undefined) {
-      if (tx.getOutputs() === undefined || tx.getOutputs().length === 0) return false;
-      let matchFound = false;
-      for (let output of tx.getOutputs()) {
-        if (this.getOutputQuery().meetsCriteria(output, false)) {
-          matchFound = true;
-          break;
-        }
-      }
-      if (!matchFound) return false;
-    }
-    
-    return true;  // transaction meets filter criteria
-  }
-}
-
-module.exports = MoneroTxQuery;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroTxSet.js.html b/docs/src_main_js_wallet_model_MoneroTxSet.js.html deleted file mode 100644 index 358047dd3..000000000 --- a/docs/src_main_js_wallet_model_MoneroTxSet.js.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroTxSet.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroTxSet.js

- - - - - - -
-
-
const assert = require("assert");
-const GenUtils = require("../../common/GenUtils");
-const MoneroTxWallet = require("./MoneroTxWallet");
-const MoneroUtils = require("../../common/MoneroUtils");
-
-/**
- * Groups transactions who share common hex data which is needed in order to
- * sign and submit the transactions.
- * 
- * For example, multisig transactions created from createTxs() share a common
- * hex string which is needed in order to sign and submit the multisig
- * transactions.
- */
-class MoneroTxSet {
-  
-  constructor(state) {
-    
-    // initialize internal state
-    if (!state) state = {};
-    else if (typeof state === "object") state = Object.assign({}, state);
-    else throw new MoneroError("state must be JavaScript object");
-    this.state = state;
-    
-    // deserialize txs
-    if (state.txs) {
-      for (let i = 0; i < state.txs.length; i++) {
-        if (!(state.txs[i] instanceof MoneroTxWallet)) state.txs[i] = new MoneroTxWallet(state.txs[i]);
-        state.txs[i].setTxSet(this);
-      }
-    }
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state); // copy state
-    if (this.getTxs()) {
-      json.txs = [];
-      for (let tx of this.getTxs()) json.txs.push(tx.toJson());
-    }
-    return json;
-  }
-
-  getTxs() {
-    return this.state.txs;
-  }
-
-  setTxs(txs) {
-    this.state.txs = txs;
-    return this;
-  }
-  
-  getMultisigTxHex() {
-    return this.state.multisigTxHex;
-  }
-  
-  setMultisigTxHex(multisigTxHex) {
-    this.state.multisigTxHex = multisigTxHex;
-    return this;
-  }
-  
-  getUnsignedTxHex() {
-    return this.state.unsignedTxHex;
-  }
-  
-  setUnsignedTxHex(unsignedTxHex) {
-    this.state.unsignedTxHex = unsignedTxHex;
-    return this;
-  }
-  
-  getSignedTxHex() {
-    return this.state.signedTxHex;
-  }
-  
-  setSignedTxHex(signedTxHex) {
-    this.state.signedTxHex = signedTxHex;
-    return this;
-  }
-  
-  merge(txSet) {
-    assert(txSet instanceof MoneroTxSet);
-    if (this === txSet) return this;
-    
-    // merge sets
-    this.setMultisigTxHex(GenUtils.reconcile(this.getMultisigTxHex(), txSet.getMultisigTxHex()));
-    this.setUnsignedTxHex(GenUtils.reconcile(this.getUnsignedTxHex(), txSet.getUnsignedTxHex()));
-    this.setSignedTxHex(GenUtils.reconcile(this.getSignedTxHex(), txSet.getSignedTxHex()));
-    
-    // merge txs
-    if (txSet.getTxs() !== undefined) {
-      for (let tx of txSet.getTxs()) {
-        tx.setTxSet(this);
-        MoneroUtils.mergeTx(this.getTxs(), tx);
-      }
-    }
-
-    return this;
-  }
-  
-  toString(indent = 0) {
-    let str = "";
-    str += GenUtils.kvLine("Multisig tx hex: ", this.getMultisigTxHex(), indent);
-    str += GenUtils.kvLine("Unsigned tx hex: ", this.getUnsignedTxHex(), indent);
-    str += GenUtils.kvLine("Signed tx hex: ", this.getSignedTxHex(), indent);
-    if (this.getTxs() !== undefined) {
-      str += GenUtils.kvLine("Txs", "", indent);
-      for (let tx of this.getTxs()) {
-        str += tx.toString(indent + 1) + "\n";
-      }
-    }
-    return str;
-  }
-}
-
-module.exports = MoneroTxSet;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroTxWallet.js.html b/docs/src_main_js_wallet_model_MoneroTxWallet.js.html deleted file mode 100644 index 7d6afe5e6..000000000 --- a/docs/src_main_js_wallet_model_MoneroTxWallet.js.html +++ /dev/null @@ -1,464 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroTxWallet.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroTxWallet.js

- - - - - - -
-
-
const assert = require("assert");
-const BigInteger = require("../../common/biginteger").BigInteger;
-const GenUtils = require("../../common/GenUtils");
-const MoneroIncomingTransfer = require("./MoneroIncomingTransfer");
-const MoneroOutgoingTransfer = require("./MoneroOutgoingTransfer");
-const MoneroOutputWallet = require("./MoneroOutputWallet");
-const MoneroTx = require("../../daemon/model/MoneroTx");
-
-/**
- * Models a Monero transaction with wallet extensions.
- * 
- * @class
- * @extends {MoneroTx}
- */
-class MoneroTxWallet extends MoneroTx {
-  
-  /**
-   * Construct the model.
-   * 
-   * @param {MoneroTxWallet|object} state is existing state to initialize from (optional)
-   */
-  constructor(state) {
-    super(state);
-    if (state instanceof MoneroTxWallet && state.getTxSet()) this.setTxSet(state.getTxSet()); // preserve reference to tx set
-    state = this.state;
-    
-    // deserialize incoming transfers
-    if (state.incomingTransfers) {
-      for (let i = 0; i < state.incomingTransfers.length; i++) {
-        if (!(state.incomingTransfers[i] instanceof MoneroIncomingTransfer)) {
-          state.incomingTransfers[i] = new MoneroIncomingTransfer(Object.assign(state.incomingTransfers[i], {tx: this}));
-        }
-      }
-    }
-    
-    // deserialize outgoing transfer
-    if (state.outgoingTransfer && !(state.outgoingTransfer instanceof MoneroOutgoingTransfer)) {
-      this.setOutgoingTransfer(new MoneroOutgoingTransfer(Object.assign(state.outgoingTransfer, {tx: this})));
-    }
-    
-    // deserialize inputs
-    if (state.inputs) {
-      for (let i = 0; i < state.inputs.length; i++) {
-        if (!(state.inputs[i] instanceof MoneroOutputWallet)) {
-          state.inputs[i] = new MoneroOutputWallet(Object.assign(state.inputs[i].toJson(), {tx: this}));
-        }
-      }
-    }
-    
-    // deserialize outputs
-    if (state.outputs) {
-      for (let i = 0; i < state.outputs.length; i++) {
-        if (!(state.outputs[i] instanceof MoneroOutputWallet)) {
-          state.outputs[i] = new MoneroOutputWallet(Object.assign(state.outputs[i].toJson(), {tx: this}));
-        }
-      }
-    }
-    
-    // deserialize BigIntegers
-    if (state.inputSum !== undefined && !(state.inputSum instanceof BigInteger)) state.inputSum = BigInteger.parse(state.inputSum);
-    if (state.outputSum !== undefined && !(state.outputSum instanceof BigInteger)) state.outputSum = BigInteger.parse(state.outputSum);
-    if (state.changeAmount !== undefined && !(state.changeAmount instanceof BigInteger)) state.changeAmount = BigInteger.parse(state.changeAmount);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.state, super.toJson()); // merge json onto inherited state
-    if (this.getIncomingTransfers()) {
-      json.incomingTransfers = [];
-      for (let incomingTransfer of this.getIncomingTransfers()) json.incomingTransfers.push(incomingTransfer.toJson());
-    }
-    if (this.getOutgoingTransfer()) json.outgoingTransfer = this.getOutgoingTransfer().toJson();
-    if (this.getInputSum()) json.inputSum = this.getInputSum().toString();
-    if (this.getOutputSum()) json.outputSum = this.getOutputSum().toString();
-    if (this.getChangeAmount()) json.changeAmount = this.getChangeAmount().toString();
-    delete json.block;  // do not serialize parent block
-    delete json.txSet;  // do not serialize parent tx set
-    return json;
-  }
-  
-  getTxSet() {
-    return this.state.txSet;
-  }
-  
-  setTxSet(txSet) {
-    this.state.txSet = txSet;
-    return this;
-  }
-  
-  isIncoming() {
-    return this.state.isIncoming;
-  }
-  
-  setIsIncoming(isIncoming) {
-    this.state.isIncoming = isIncoming;
-    return this;
-  }
-  
-  isOutgoing() {
-    return this.state.isOutgoing;
-  }
-  
-  setIsOutgoing(isOutgoing) {
-    this.state.isOutgoing = isOutgoing;
-    return this;
-  }
-  
-  getIncomingAmount() {
-    if (this.getIncomingTransfers() === undefined) return undefined;
-    let incomingAmt = BigInteger.parse("0");
-    for (let transfer of this.getIncomingTransfers()) incomingAmt = incomingAmt.add(transfer.getAmount());
-    return incomingAmt;
-  }
-  
-  getOutgoingAmount() {
-    return this.getOutgoingTransfer() ? this.getOutgoingTransfer().getAmount() : undefined;
-  }
-  
-  getTransfers(transferQuery) {
-    let transfers = [];
-    if (this.getOutgoingTransfer() && (!transferQuery || transferQuery.meetsCriteria(this.getOutgoingTransfer()))) transfers.push(this.getOutgoingTransfer());
-    if (this.getIncomingTransfers()) {
-      for (let transfer of this.getIncomingTransfers()) {
-        if (!transferQuery || transferQuery.meetsCriteria(transfer)) transfers.push(transfer);
-      }
-    }
-    return transfers;
-  }
-  
-  filterTransfers(transferQuery) {
-    let transfers = [];
-    
-    // collect outgoing transfer or erase if filtered
-    if (this.getOutgoingTransfer() && (!transferQuery || transferQuery.meetsCriteria(this.getOutgoingTransfer()))) transfers.push(this.getOutgoingTransfer());
-    else this.setOutgoingTransfer(undefined);
-    
-    // collect incoming transfers or erase if filtered
-    if (this.getIncomingTransfers()) {
-      let toRemoves = [];
-      for (let transfer of this.getIncomingTransfers()) {
-        if (transferQuery.meetsCriteria(transfer)) transfers.push(transfer);
-        else toRemoves.push(transfer);
-      }
-      this.setIncomingTransfers(this.getIncomingTransfers().filter(function(transfer) {
-        return !toRemoves.includes(transfer);
-      }));
-      if (this.getIncomingTransfers().length === 0) this.setIncomingTransfers(undefined);
-    }
-    
-    return transfers;
-  }
-  
-  getIncomingTransfers() {
-    return this.state.incomingTransfers;
-  }
-  
-  setIncomingTransfers(incomingTransfers) {
-    this.state.incomingTransfers = incomingTransfers;
-    return this;
-  }
-  
-  getOutgoingTransfer() {
-    return this.state.outgoingTransfer;
-  }
-  
-  setOutgoingTransfer(outgoingTransfer) {
-    this.state.outgoingTransfer = outgoingTransfer;
-    return this;
-  }
-  
-  getInputs(outputQuery) {
-    if (!outputQuery || !super.getInputs()) return super.getInputs();
-    let inputs = [];
-    for (let output of super.getInputs()) if (!outputQuery || outputQuery.meetsCriteria(output)) inputs.push(output);
-    return inputs;
-  }
-  
-  setInputs(inputs) {
-    
-    // validate that all inputs are wallet inputs
-    if (inputs) {
-      for (let output of inputs) {
-        if (!(output instanceof MoneroOutputWallet)) throw new MoneroError("Wallet transaction inputs must be of type MoneroOutputWallet");
-      }
-    }
-    super.setInputs(inputs);
-    return this;
-  }
-  
-  getOutputs(outputQuery) {
-    if (!outputQuery || !super.getOutputs()) return super.getOutputs();
-    let outputs = [];
-    for (let output of super.getOutputs()) if (!outputQuery || outputQuery.meetsCriteria(output)) outputs.push(output);
-    return outputs;
-  }
-  
-  setOutputs(outputs) {
-    
-    // validate that all outputs are wallet outputs
-    if (outputs) {
-      for (let output of outputs) {
-        if (!(output instanceof MoneroOutputWallet)) throw new MoneroError("Wallet transaction outputs must be of type MoneroOutputWallet");
-      }
-    }
-    super.setOutputs(outputs);
-    return this;
-  }
-  
-  filterOutputs(outputQuery) {
-    let outputs = [];
-    if (super.getOutputs()) {
-      let toRemoves = [];
-      for (let output of super.getOutputs()) {
-        if (!outputQuery || outputQuery.meetsCriteria(output)) outputs.push(output);
-        else toRemoves.push(output);
-      }
-      this.setOutputs(super.getOutputs().filter(function(output) {
-        return !toRemoves.includes(output);
-      }));
-      if (this.getOutputs().length === 0) this.setOutputs(undefined);
-    }
-    return outputs;
-  }
-  
-  getNote() {
-    return this.state.note;
-  }
-  
-  setNote(note) {
-    this.state.note = note;
-    return this;
-  }
-  
-  isLocked() {
-    return this.state.isLocked;
-  }
-  
-  setIsLocked(isLocked) {
-    this.state.isLocked = isLocked;
-    return this;
-  }
-  
-  getInputSum() {
-    return this.state.inputSum;
-  }
-  
-  setInputSum(inputSum) {
-    this.state.inputSum = inputSum;
-    return this;
-  }
-  
-  getOutputSum() {
-    return this.state.outputSum;
-  }
-  
-  setOutputSum(outputSum) {
-    this.state.outputSum = outputSum;
-    return this;
-  }
-  
-  getChangeAddress() {
-    return this.state.changeAddress;
-  }
-  
-  setChangeAddress(changeAddress) {
-    this.state.changeAddress = changeAddress;
-    return this;
-  }
-  
-  getChangeAmount() {
-    return this.state.changeAmount;
-  }
-  
-  setChangeAmount(changeAmount) {
-    this.state.changeAmount = changeAmount;
-    return this;
-  }
-  
-  getNumDummyOutputs() {
-    return this.state.numDummyOutputs;
-  }
-  
-  setNumDummyOutputs(numDummyOutputs) {
-    this.state.numDummyOutputs = numDummyOutputs;
-    return this;
-  }
-  
-  getExtraHex() {
-    return this.state.extraHex;
-  }
-  
-  setExtraHex(extraHex) {
-    this.state.extraHex = extraHex;
-    return this;
-  }
-  
-  copy() {
-    return new MoneroTxWallet(this);
-  }
-  
-  /**
-   * Updates this transaction by merging the latest information from the given
-   * transaction.
-   * 
-   * Merging can modify or build references to the transaction given so it
-   * should not be re-used or it should be copied before calling this method.
-   * 
-   * @param tx is the transaction to merge into this transaction
-   */
-  merge(tx) {
-    assert(tx instanceof MoneroTxWallet);
-    if (this === tx) return this;
-    
-    // merge base classes
-    super.merge(tx);
-    
-    // merge tx set if they're different which comes back to merging txs
-    const MoneroTxSet = require("./MoneroTxSet");
-    if (this.getTxSet() !== tx.getTxSet()) {
-      if (this.getTxSet() == undefined) {
-        this.setTxSet(new MoneroTxSet().setTxs([this]));
-      }
-      if (tx.getTxSet() === undefined) {
-        tx.setTxSet(new MoneroTxSet().setTxs([tx]));
-      }
-      this.getTxSet().merge(tx.getTxSet());
-      return this;
-    }
-    
-    // merge incoming transfers
-    if (tx.getIncomingTransfers()) {
-      if (this.getIncomingTransfers() === undefined) this.setIncomingTransfers([]);
-      for (let transfer of tx.getIncomingTransfers()) {
-        transfer.setTx(this);
-        MoneroTxWallet._mergeIncomingTransfer(this.getIncomingTransfers(), transfer);
-      }
-    }
-    
-    // merge outgoing transfer
-    if (tx.getOutgoingTransfer()) {
-      tx.getOutgoingTransfer().setTx(this);
-      if (this.getOutgoingTransfer() === undefined) this.setOutgoingTransfer(tx.getOutgoingTransfer());
-      else this.getOutgoingTransfer().merge(tx.getOutgoingTransfer());
-    }
-    
-    // merge simple extensions
-    this.setIsIncoming(GenUtils.reconcile(this.isIncoming(), tx.isIncoming(), {resolveTrue: true}));  // outputs seen on confirmation
-    this.setIsOutgoing(GenUtils.reconcile(this.isOutgoing(), tx.isOutgoing()));
-    this.setNote(GenUtils.reconcile(this.getNote(), tx.getNote()));
-    this.setIsLocked(GenUtils.reconcile(this.isLocked(), tx.isLocked(), {resolveTrue: false})); // tx can become unlocked
-    this.setInputSum(GenUtils.reconcile(this.getInputSum(), tx.getInputSum()));
-    this.setOutputSum(GenUtils.reconcile(this.getOutputSum(), tx.getOutputSum()));
-    this.setChangeAddress(GenUtils.reconcile(this.getChangeAddress(), tx.getChangeAddress()));
-    this.setChangeAmount(GenUtils.reconcile(this.getChangeAmount(), tx.getChangeAmount()));
-    this.setNumDummyOutputs(GenUtils.reconcile(this.getNumDummyOutputs(), tx.getNumDummyOutputs()));
-    this.setExtraHex(GenUtils.reconcile(this.getExtraHex(), tx.getExtraHex()));
-    
-    return this;  // for chaining
-  }
-  
-  toString(indent = 0, oneLine) {
-    let str = "";
-    
-    // represent tx with one line string
-    // TODO: proper csv export
-    if (oneLine) {
-      str += this.getHash() + ", ";
-      str += (this.isConfirmed() ? this.getBlock().getTimestamp() : this.getReceivedTimestamp()) + ", ";
-      str += this.isConfirmed() + ", ";
-      str += (this.getOutgoingAmount() ? this.getOutgoingAmount().toString() : "") + ", ";
-      str += this.getIncomingAmount() ? this.getIncomingAmount().toString() : "";
-      return str;
-    }
-    
-    // otherwise stringify all fields
-    str += super.toString(indent) + "\n";
-    str += GenUtils.kvLine("Is incoming", this.isIncoming(), indent);
-    str += GenUtils.kvLine("Incoming amount", this.getIncomingAmount(), indent);
-    if (this.getIncomingTransfers()) {
-      str += GenUtils.kvLine("Incoming transfers", "", indent);
-      for (let i = 0; i < this.getIncomingTransfers().length; i++) {
-        str += GenUtils.kvLine(i + 1, "", indent + 1);
-        str += this.getIncomingTransfers()[i].toString(indent + 2) + "\n";
-      }
-    }
-    str += GenUtils.kvLine("Is outgoing", this.isOutgoing(), indent);
-    str += GenUtils.kvLine("Outgoing amount", this.getOutgoingAmount(), indent);
-    if (this.getOutgoingTransfer()) {
-      str += GenUtils.kvLine("Outgoing transfer", "", indent);
-      str += this.getOutgoingTransfer().toString(indent + 1) + "\n";
-    }
-    str += GenUtils.kvLine("Note", this.getNote(), indent);
-    str += GenUtils.kvLine("Is locked", this.isLocked(), indent);
-    str += GenUtils.kvLine("Input sum", this.getInputSum(), indent);
-    str += GenUtils.kvLine("Output sum", this.getOutputSum(), indent);
-    str += GenUtils.kvLine("Change address", this.getChangeAddress(), indent);
-    str += GenUtils.kvLine("Change amount", this.getChangeAmount(), indent);
-    str += GenUtils.kvLine("Num dummy outputs", this.getNumDummyOutputs(), indent);
-    str += GenUtils.kvLine("Extra hex", this.getExtraHex(), indent);
-    return str.slice(0, str.length - 1);  // strip last newline
-  }
-  
-  // private helper to merge transfers
-  static _mergeIncomingTransfer(transfers, transfer) {
-    for (let aTransfer of transfers) {
-      if (aTransfer.getAccountIndex() === transfer.getAccountIndex() && aTransfer.getSubaddressIndex() === transfer.getSubaddressIndex()) {
-        aTransfer.merge(transfer);
-        return;
-      }
-    }
-    transfers.push(transfer);
-  }
-}
-
-module.exports = MoneroTxWallet;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroWalletConfig.js.html b/docs/src_main_js_wallet_model_MoneroWalletConfig.js.html deleted file mode 100644 index 36679de79..000000000 --- a/docs/src_main_js_wallet_model_MoneroWalletConfig.js.html +++ /dev/null @@ -1,360 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroWalletConfig.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroWalletConfig.js

- - - - - - -
-
-
const GenUtils = require("../../common/GenUtils");
-const MoneroError = require("../../common/MoneroError");
-const MoneroNetworkType = require("../../daemon/model/MoneroNetworkType");
-const MoneroRpcConnection = require("../../common/MoneroRpcConnection");
-
-/**
- * Configuration to create a Monero wallet.
- */
-class MoneroWalletConfig {
-  
-  /**
-   * Construct a configuration to open or create a wallet.
-   * 
-   * @param {object|MoneroWalletConfig} config - MoneroWalletConfig or equivalent config object
-   * @param {string} config.path - path of the wallet to open or create
-   * @param {string} config.password - password of the wallet to open
-   * @param {string|number} config.networkType - network type of the wallet to open (one of "mainnet", "testnet", "stagenet" or MoneroNetworkType.MAINNET|TESTNET|STAGENET)
-   * @param {string} config.seed - seed of the wallet to create (optional, random wallet created if neither seed nor keys given)
-   * @param {string} config.seedOffset - the offset used to derive a new seed from the given seed to recover a secret wallet from the seed phrase
-   * @param {boolean} config.isMultisig - restore multisig wallet from seed
-   * @param {string} config.primaryAddress - primary address of the wallet to create (only provide if restoring from keys)
-   * @param {string} config.privateViewKey - private view key of the wallet to create (optional)
-   * @param {string} config.privateSpendKey - private spend key of the wallet to create (optional)
-   * @param {number} config.restoreHeight - block height to start scanning from (defaults to 0 unless generating random wallet)
-   * @param {string} config.language - language of the wallet's seed phrase (defaults to "English" or auto-detected)
-   * @param {number} config.accountLookahead -  number of accounts to scan (optional)
-   * @param {number} config.subaddressLookahead - number of subaddresses to scan per account (optional)
-   * @param {MoneroRpcConnection|object} config.server - MoneroRpcConnection or equivalent JS object configuring the server connection (optional)
-   * @param {string} config.serverUri - uri of the wallet's server (optional)
-   * @param {string} config.serverUsername - username of the wallet's server (optional)
-   * @param {string} config.serverPassword - password of the wallet's server (optional)
-   * @param {MoneroConnectionManager} config.connectionManager - manage connections to monerod (optional)
-   * @param {boolean} config.rejectUnauthorized - reject self-signed server certificates if true (default true)
-   * @param {Uint8Array} config.keysData - wallet keys data to open (optional)
-   * @param {Uint8Array} config.cacheData - wallet cache data to open (optional)
-   * @param {boolean} config.proxyToWorker - proxies wallet operations to a worker in order to not block the main thread (default true)
-   * @param {fs} config.fs - Node.js compatible file system to use (defaults to disk or in-memory FS if browser)
-   * @param {boolean} config.saveCurrent - specifies if the current RPC wallet should be saved before being closed
-   * @param {number} config.accountLookahead - number of accounts to scan (optional)
-   * @param {number} config.subaddressLookahead - number of subaddresses to scan per account (optional)
-   */
-  constructor(config) {
-    
-    // initialize internal config
-    if (!config) config = {};
-    else if (config instanceof MoneroWalletConfig) config = Object.assign({}, config.config);
-    else if (typeof config === "object") config = Object.assign({}, config);
-    else throw new MoneroError("config must be a MoneroWalletConfig or JavaScript object");
-    this.config = config;
-    
-    // normalize config
-    this.setNetworkType(config.networkType);
-    if (config.server) this.setServer(config.server);
-    else if (config.serverUri) this.setServer({uri: config.serverUri, username: config.serverUsername, password: config.serverPassword, rejectUnauthorized: config.rejectUnauthorized});
-    this.setProxyToWorker(config.proxyToWorker);
-    this.config.serverUri = undefined;
-    this.config.serverUsername = undefined;
-    this.config.serverPassword = undefined;
-    this.config.rejectUnauthorized = undefined;
-    
-    // check for unsupported fields
-    for (let key of Object.keys(this.config)) {
-      if (!GenUtils.arrayContains(MoneroWalletConfig.SUPPORTED_FIELDS, key)) {
-        throw new MoneroError("Unsupported field in MoneroWalletConfig: '" + key + "'");
-      }
-    }
-  }
-
-  copy() {
-    return new MoneroWalletConfig(this);
-  }
-  
-  toJson() {
-    let json = Object.assign({}, this.config);
-    if (json.server) json.server = json.server.toJson();
-    json.fs = undefined;
-    json.connectionManager = undefined;
-    return json;
-  }
-  
-  getPath() {
-    return this.config.path;
-  }
-  
-  setPath(path) {
-    this.config.path = path;
-    return this;
-  }
-  
-  getPassword() {
-    return this.config.password;
-  }
-  
-  setPassword(password) {
-    this.config.password = password;
-    return this;
-  }
-  
-  getNetworkType() {
-    return this.config.networkType;
-  }
-  
-  setNetworkType(networkTypeOrStr) {
-    this.config.networkType = typeof networkTypeOrStr === "string" ? MoneroNetworkType.parse(networkTypeOrStr) : networkTypeOrStr;
-    return this;
-  }
-  
-  getServer() {
-    return this.config.server;
-  }
-  
-  setServer(server) {
-    if (server && !(server instanceof MoneroRpcConnection)) server = new MoneroRpcConnection(server);
-    this.config.server = server;
-    this.config.serverUsername = server === undefined ? undefined : server.getUsername();
-    this.config.serverPassword = server === undefined ? undefined : server.getPassword();
-    return this;
-  }
-  
-  getServerUri() {
-    return this.config.server ? this.config.server.getUri() : undefined;
-  }
-  
-  setServerUri(serverUri) {
-    if (!serverUri) this.setServer(undefined);
-    else  {
-      if (!this.config.server) this.setServer(new MoneroRpcConnection(serverUri));
-      else this.config.server.setUri(serverUri);
-    }
-    return this;
-  }
-  
-  getServerUsername() {
-    return this.server ? server.getUsername() : undefined;
-  }
-  
-  setServerUsername(serverUsername) {
-    this.config.serverUsername = serverUsername;
-    if (this.config.serverUsername && this.config.serverPassword) this.config.server.setCredentials(this.config.serverUsername, this.config.serverPassword);
-    return this;
-  }
-  
-  getServerPassword() {
-    return this.server ? server.getPassword() : undefined;
-  }
-  
-  setServerPassword(serverPassword) {
-    this.config.serverPassword = serverPassword;
-    if (this.config.serverUsername && this.config.serverPassword) this.config.server.setCredentials(this.config.serverUsername, this.config.serverPassword);
-    return this;
-  }
-
-  getConnectionManager() {
-    return this.config.connectionManager;
-  }
-  
-  setConnectionManager(connectionManager) {
-    this.config.connectionManager = connectionManager;
-    return this;
-  }
-  
-  getRejectUnauthorized() {
-    return this.config.rejectUnauthorized;
-  }
-  
-  setRejectUnauthorized(rejectUnauthorized) {
-    this.config.rejectUnauthorized = rejectUnauthorized;
-    return this;
-  }
-  
-  getSeed() {
-    return this.config.seed;
-  }
-  
-  setSeed(seed) {
-    this.config.seed = seed;
-    return this;
-  }
-  
-  getSeedOffset() {
-    return this.config.seedOffset;
-  }
-  
-  setSeedOffset(seedOffset) {
-    this.config.seedOffset = seedOffset;
-    return this;
-  }
-
-  isMultisig() {
-    return this.config.isMultisig;
-  }
-  
-  setIsMultisig(isMultisig) {
-    this.config.isMultisig = isMultisig;
-    return this;
-  }
-  
-  getPrimaryAddress() {
-    return this.config.primaryAddress;
-  }
-  
-  setPrimaryAddress(primaryAddress) {
-    this.config.primaryAddress = primaryAddress;
-    return this;
-  }
-  
-  getPrivateViewKey() {
-    return this.config.privateViewKey;
-  }
-  
-  setPrivateViewKey(privateViewKey) {
-    this.config.privateViewKey = privateViewKey;
-    return this;
-  }
-  
-  getPrivateSpendKey() {
-    return this.config.privateSpendKey;
-  }
-  
-  setPrivateSpendKey(privateSpendKey) {
-    this.config.privateSpendKey = privateSpendKey;
-    return this;
-  }
-  
-  getRestoreHeight() {
-    return this.config.restoreHeight;
-  }
-  
-  setRestoreHeight(restoreHeight) {
-    this.config.restoreHeight = restoreHeight;
-    return this;
-  }
-  
-  getLanguage() {
-    return this.config.language;
-  }
-  
-  setLanguage(language) {
-    this.config.language = language;
-    return this;
-  }
-  
-  getSaveCurrent() {
-    return this.config.saveCurrent;
-  }
-  
-  setSaveCurrent(saveCurrent) {
-    this.config.saveCurrent = saveCurrent;
-    return this;
-  }
-  
-  getProxyToWorker() {
-    return this.config.proxyToWorker;
-  }
-  
-  setProxyToWorker(proxyToWorker) {
-    this.config.proxyToWorker = proxyToWorker;
-    if (this.config.server) this.config.server.setProxyToWorker(proxyToWorker);
-    return this;
-  }
-  
-  getFs() {
-    return this.config.fs;
-  }
-  
-  setFs(fs) {
-    this.config.fs = fs;
-    return this;
-  }
-  
-  getKeysData() {
-    return this.config.keysData;
-  }
-  
-  setKeysData(keysData) {
-    this.config.keysData = keysData;
-    return this;
-  }
-  
-  getCacheData() {
-    return this.config.cacheData;
-  }
-  
-  setCacheData(cacheData) {
-    this.config.cacheData = cacheData;
-    return this;
-  }
-  
-  getAccountLookahead() {
-    return this.config.accountLookahead;
-  }
-  
-  setAccountLookahead(accountLookahead) {
-    this.config.accountLookahead = accountLookahead;
-    return this;
-  }
-  
-  getSubaddressLookahead() {
-    return this.config.subaddressLookahead;
-  }
-  
-  setSubaddressLookahead(subaddressLookahead) {
-    this.config.subaddressLookahead = subaddressLookahead;
-    return this;
-  }
-}
-
-MoneroWalletConfig.SUPPORTED_FIELDS = ["path", "password", "networkType", "server", "serverUri", "serverUsername", "serverPassword", "connectionManager", "rejectUnauthorized", "seed", "seedOffset", "isMultisig", "primaryAddress", "privateViewKey", "privateSpendKey", "restoreHeight", "language", "saveCurrent", "proxyToWorker", "fs", "keysData", "cacheData", "accountLookahead", "subaddressLookahead"];
-
-module.exports = MoneroWalletConfig;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/src_main_js_wallet_model_MoneroWalletListener.js.html b/docs/src_main_js_wallet_model_MoneroWalletListener.js.html deleted file mode 100644 index 7191a034d..000000000 --- a/docs/src_main_js_wallet_model_MoneroWalletListener.js.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - JSDoc: Source: src/main/js/wallet/model/MoneroWalletListener.js - - - - - - - - - - -
- -

Source: src/main/js/wallet/model/MoneroWalletListener.js

- - - - - - -
-
-
/**
- * Default wallet listener which takes no action on notifications.
- */
-class MoneroWalletListener {
-  
-  /**
-   * Invoked as the wallet is synchronized.
-   * 
-   * @param {number} height - height of the synced block 
-   * @param {number} startHeight - starting height of the sync request
-   * @param {number} endHeight - ending height of the sync request
-   * @param {number} percentDone - sync progress as a percentage
-   * @param {string} message - human-readable description of the current progress
-   */
-  async onSyncProgress(height, startHeight, endHeight, percentDone, message) { }
-
-  /**
-   * Invoked when a new block is added to the chain.
-   * 
-   * @param {int} height - the height of the new block (i.e. the number of blocks before it).
-   */
-  async onNewBlock(height) { }
-  
-  /**
-   * Invoked when the wallet's balances change.
-   * 
-   * @param {BigInteger} newBalance - new wallet balance
-   * @param {BigInteger} newUnlockedBalance - new unlocked wallet balance
-   */
-  async onBalancesChanged(newBalance, newUnlockedBalance) { }
-
-  /**
-   * Invoked 3 times per received output: once when unconfirmed, once when confirmed, and
-   * once when unlocked.
-   * 
-   * The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields.
-   * 
-   * @param {MoneroOutputWallet} output - the received output
-   */
-  async onOutputReceived(output) { }
-  
-  /**
-   * Invoked twice per spent output: once when confirmed and once when unlocked.
-   * 
-   * The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields.
-   * 
-   * @param {MoneroOutputWallet} output - the spent output
-   */
-  async onOutputSpent(output) { }
-}
-
-module.exports = MoneroWalletListener;
-
-
- - - - -
- - - -
- - - - - - - diff --git a/docs/styles/jsdoc-default.css b/docs/styles/jsdoc-default.css deleted file mode 100644 index 7d1729dc9..000000000 --- a/docs/styles/jsdoc-default.css +++ /dev/null @@ -1,358 +0,0 @@ -@font-face { - font-family: 'Open Sans'; - font-weight: normal; - font-style: normal; - src: url('../fonts/OpenSans-Regular-webfont.eot'); - src: - local('Open Sans'), - local('OpenSans'), - url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Regular-webfont.woff') format('woff'), - url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg'); -} - -@font-face { - font-family: 'Open Sans Light'; - font-weight: normal; - font-style: normal; - src: url('../fonts/OpenSans-Light-webfont.eot'); - src: - local('Open Sans Light'), - local('OpenSans Light'), - url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'), - url('../fonts/OpenSans-Light-webfont.woff') format('woff'), - url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg'); -} - -html -{ - overflow: auto; - background-color: #fff; - font-size: 14px; -} - -body -{ - font-family: 'Open Sans', sans-serif; - line-height: 1.5; - color: #4d4e53; - background-color: white; -} - -a, a:visited, a:active { - color: #0095dd; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -header -{ - display: block; - padding: 0px 4px; -} - -tt, code, kbd, samp { - font-family: Consolas, Monaco, 'Andale Mono', monospace; -} - -.class-description { - font-size: 130%; - line-height: 140%; - margin-bottom: 1em; - margin-top: 1em; -} - -.class-description:empty { - margin: 0; -} - -#main { - float: left; - width: 70%; -} - -article dl { - margin-bottom: 40px; -} - -article img { - max-width: 100%; -} - -section -{ - display: block; - background-color: #fff; - padding: 12px 24px; - border-bottom: 1px solid #ccc; - margin-right: 30px; -} - -.variation { - display: none; -} - -.signature-attributes { - font-size: 60%; - color: #aaa; - font-style: italic; - font-weight: lighter; -} - -nav -{ - display: block; - float: right; - margin-top: 28px; - width: 30%; - box-sizing: border-box; - border-left: 1px solid #ccc; - padding-left: 16px; -} - -nav ul { - font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif; - font-size: 100%; - line-height: 17px; - padding: 0; - margin: 0; - list-style-type: none; -} - -nav ul a, nav ul a:visited, nav ul a:active { - font-family: Consolas, Monaco, 'Andale Mono', monospace; - line-height: 18px; - color: #4D4E53; -} - -nav h3 { - margin-top: 12px; -} - -nav li { - margin-top: 6px; -} - -footer { - display: block; - padding: 6px; - margin-top: 12px; - font-style: italic; - font-size: 90%; -} - -h1, h2, h3, h4 { - font-weight: 200; - margin: 0; -} - -h1 -{ - font-family: 'Open Sans Light', sans-serif; - font-size: 48px; - letter-spacing: -2px; - margin: 12px 24px 20px; -} - -h2, h3.subsection-title -{ - font-size: 30px; - font-weight: 700; - letter-spacing: -1px; - margin-bottom: 12px; -} - -h3 -{ - font-size: 24px; - letter-spacing: -0.5px; - margin-bottom: 12px; -} - -h4 -{ - font-size: 18px; - letter-spacing: -0.33px; - margin-bottom: 12px; - color: #4d4e53; -} - -h5, .container-overview .subsection-title -{ - font-size: 120%; - font-weight: bold; - letter-spacing: -0.01em; - margin: 8px 0 3px 0; -} - -h6 -{ - font-size: 100%; - letter-spacing: -0.01em; - margin: 6px 0 3px 0; - font-style: italic; -} - -table -{ - border-spacing: 0; - border: 0; - border-collapse: collapse; -} - -td, th -{ - border: 1px solid #ddd; - margin: 0px; - text-align: left; - vertical-align: top; - padding: 4px 6px; - display: table-cell; -} - -thead tr -{ - background-color: #ddd; - font-weight: bold; -} - -th { border-right: 1px solid #aaa; } -tr > th:last-child { border-right: 1px solid #ddd; } - -.ancestors, .attribs { color: #999; } -.ancestors a, .attribs a -{ - color: #999 !important; - text-decoration: none; -} - -.clear -{ - clear: both; -} - -.important -{ - font-weight: bold; - color: #950B02; -} - -.yes-def { - text-indent: -1000px; -} - -.type-signature { - color: #aaa; -} - -.name, .signature { - font-family: Consolas, Monaco, 'Andale Mono', monospace; -} - -.details { margin-top: 14px; border-left: 2px solid #DDD; } -.details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; } -.details dd { margin-left: 70px; } -.details ul { margin: 0; } -.details ul { list-style-type: none; } -.details li { margin-left: 30px; padding-top: 6px; } -.details pre.prettyprint { margin: 0 } -.details .object-value { padding-top: 0; } - -.description { - margin-bottom: 1em; - margin-top: 1em; -} - -.code-caption -{ - font-style: italic; - font-size: 107%; - margin: 0; -} - -.source -{ - border: 1px solid #ddd; - width: 80%; - overflow: auto; -} - -.prettyprint.source { - width: inherit; -} - -.source code -{ - font-size: 100%; - line-height: 18px; - display: block; - padding: 4px 12px; - margin: 0; - background-color: #fff; - color: #4D4E53; -} - -.prettyprint code span.line -{ - display: inline-block; -} - -.prettyprint.linenums -{ - padding-left: 70px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.prettyprint.linenums ol -{ - padding-left: 0; -} - -.prettyprint.linenums li -{ - border-left: 3px #ddd solid; -} - -.prettyprint.linenums li.selected, -.prettyprint.linenums li.selected * -{ - background-color: lightyellow; -} - -.prettyprint.linenums li * -{ - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} - -.params .name, .props .name, .name code { - color: #4D4E53; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - font-size: 100%; -} - -.params td.description > p:first-child, -.props td.description > p:first-child -{ - margin-top: 0; - padding-top: 0; -} - -.params td.description > p:last-child, -.props td.description > p:last-child -{ - margin-bottom: 0; - padding-bottom: 0; -} - -.disabled { - color: #454545; -} diff --git a/docs/styles/prettify-jsdoc.css b/docs/styles/prettify-jsdoc.css deleted file mode 100644 index 5a2526e37..000000000 --- a/docs/styles/prettify-jsdoc.css +++ /dev/null @@ -1,111 +0,0 @@ -/* JSDoc prettify.js theme */ - -/* plain text */ -.pln { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* string content */ -.str { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a keyword */ -.kwd { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a comment */ -.com { - font-weight: normal; - font-style: italic; -} - -/* a type name */ -.typ { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a literal value */ -.lit { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* punctuation */ -.pun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp open bracket */ -.opn { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* lisp close bracket */ -.clo { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a markup tag name */ -.tag { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute name */ -.atn { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a markup attribute value */ -.atv { - color: #006400; - font-weight: normal; - font-style: normal; -} - -/* a declaration */ -.dec { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* a variable name */ -.var { - color: #000000; - font-weight: normal; - font-style: normal; -} - -/* a function name */ -.fun { - color: #000000; - font-weight: bold; - font-style: normal; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; -} diff --git a/docs/styles/prettify-tomorrow.css b/docs/styles/prettify-tomorrow.css deleted file mode 100644 index b6f92a78d..000000000 --- a/docs/styles/prettify-tomorrow.css +++ /dev/null @@ -1,132 +0,0 @@ -/* Tomorrow Theme */ -/* Original theme - https://github.com/chriskempson/tomorrow-theme */ -/* Pretty printing styles. Used with prettify.js. */ -/* SPAN elements with the classes below are added by prettyprint. */ -/* plain text */ -.pln { - color: #4d4d4c; } - -@media screen { - /* string content */ - .str { - color: #718c00; } - - /* a keyword */ - .kwd { - color: #8959a8; } - - /* a comment */ - .com { - color: #8e908c; } - - /* a type name */ - .typ { - color: #4271ae; } - - /* a literal value */ - .lit { - color: #f5871f; } - - /* punctuation */ - .pun { - color: #4d4d4c; } - - /* lisp open bracket */ - .opn { - color: #4d4d4c; } - - /* lisp close bracket */ - .clo { - color: #4d4d4c; } - - /* a markup tag name */ - .tag { - color: #c82829; } - - /* a markup attribute name */ - .atn { - color: #f5871f; } - - /* a markup attribute value */ - .atv { - color: #3e999f; } - - /* a declaration */ - .dec { - color: #f5871f; } - - /* a variable name */ - .var { - color: #c82829; } - - /* a function name */ - .fun { - color: #4271ae; } } -/* Use higher contrast and text-weight for printable form. */ -@media print, projection { - .str { - color: #060; } - - .kwd { - color: #006; - font-weight: bold; } - - .com { - color: #600; - font-style: italic; } - - .typ { - color: #404; - font-weight: bold; } - - .lit { - color: #044; } - - .pun, .opn, .clo { - color: #440; } - - .tag { - color: #006; - font-weight: bold; } - - .atn { - color: #404; } - - .atv { - color: #060; } } -/* Style */ -/* -pre.prettyprint { - background: white; - font-family: Consolas, Monaco, 'Andale Mono', monospace; - font-size: 12px; - line-height: 1.5; - border: 1px solid #ccc; - padding: 10px; } -*/ - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin-top: 0; - margin-bottom: 0; } - -/* IE indents via margin-left */ -li.L0, -li.L1, -li.L2, -li.L3, -li.L4, -li.L5, -li.L6, -li.L7, -li.L8, -li.L9 { - /* */ } - -/* Alternate shading for lines */ -li.L1, -li.L3, -li.L5, -li.L7, -li.L9 { - /* */ } diff --git a/docs/typedocs/.nojekyll b/docs/typedocs/.nojekyll new file mode 100644 index 000000000..e2ac6616a --- /dev/null +++ b/docs/typedocs/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/typedocs/assets/highlight.css b/docs/typedocs/assets/highlight.css new file mode 100644 index 000000000..64ac4af95 --- /dev/null +++ b/docs/typedocs/assets/highlight.css @@ -0,0 +1,92 @@ +:root { + --light-hl-0: #008000; + --dark-hl-0: #6A9955; + --light-hl-1: #AF00DB; + --dark-hl-1: #C586C0; + --light-hl-2: #000000; + --dark-hl-2: #D4D4D4; + --light-hl-3: #0000FF; + --dark-hl-3: #569CD6; + --light-hl-4: #001080; + --dark-hl-4: #9CDCFE; + --light-hl-5: #A31515; + --dark-hl-5: #CE9178; + --light-hl-6: #795E26; + --dark-hl-6: #DCDCAA; + --light-hl-7: #0070C1; + --dark-hl-7: #4FC1FF; + --light-hl-8: #098658; + --dark-hl-8: #B5CEA8; + --light-hl-9: #267F99; + --dark-hl-9: #4EC9B0; + --light-code-background: #FFFFFF; + --dark-code-background: #1E1E1E; +} + +@media (prefers-color-scheme: light) { :root { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --code-background: var(--light-code-background); +} } + +@media (prefers-color-scheme: dark) { :root { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --code-background: var(--dark-code-background); +} } + +:root[data-theme='light'] { + --hl-0: var(--light-hl-0); + --hl-1: var(--light-hl-1); + --hl-2: var(--light-hl-2); + --hl-3: var(--light-hl-3); + --hl-4: var(--light-hl-4); + --hl-5: var(--light-hl-5); + --hl-6: var(--light-hl-6); + --hl-7: var(--light-hl-7); + --hl-8: var(--light-hl-8); + --hl-9: var(--light-hl-9); + --code-background: var(--light-code-background); +} + +:root[data-theme='dark'] { + --hl-0: var(--dark-hl-0); + --hl-1: var(--dark-hl-1); + --hl-2: var(--dark-hl-2); + --hl-3: var(--dark-hl-3); + --hl-4: var(--dark-hl-4); + --hl-5: var(--dark-hl-5); + --hl-6: var(--dark-hl-6); + --hl-7: var(--dark-hl-7); + --hl-8: var(--dark-hl-8); + --hl-9: var(--dark-hl-9); + --code-background: var(--dark-code-background); +} + +.hl-0 { color: var(--hl-0); } +.hl-1 { color: var(--hl-1); } +.hl-2 { color: var(--hl-2); } +.hl-3 { color: var(--hl-3); } +.hl-4 { color: var(--hl-4); } +.hl-5 { color: var(--hl-5); } +.hl-6 { color: var(--hl-6); } +.hl-7 { color: var(--hl-7); } +.hl-8 { color: var(--hl-8); } +.hl-9 { color: var(--hl-9); } +pre, code { background: var(--code-background); } diff --git a/docs/typedocs/assets/main.js b/docs/typedocs/assets/main.js new file mode 100644 index 000000000..01bcad55f --- /dev/null +++ b/docs/typedocs/assets/main.js @@ -0,0 +1,59 @@ +"use strict"; +"use strict";(()=>{var Pe=Object.create;var ne=Object.defineProperty;var Ie=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var _e=Object.getPrototypeOf,Re=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Fe=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!Re.call(t,i)&&i!==n&&ne(t,i,{get:()=>e[i],enumerable:!(r=Ie(e,i))||r.enumerable});return t};var De=(t,e,n)=>(n=t!=null?Pe(_e(t)):{},Fe(e||!t||!t.__esModule?ne(n,"default",{value:t,enumerable:!0}):n,t));var ae=Me((se,oe)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),v=s.str.charAt(1),f;v in s.node.edges?f=s.node.edges[v]:(f=new t.TokenSet,s.node.edges[v]=f),s.str.length==1&&(f.final=!0),i.push({node:f,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof se=="object"?oe.exports=n():e.lunr=n()}(this,function(){return t})})()});var re=[];function G(t,e){re.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){re.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(n&&n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let r=document.createElement("p");r.classList.add("warning"),r.textContent="This member is normally hidden due to your filter settings.",n.prepend(r)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var de=De(ae());async function le(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=de.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function he(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{le(e,t)}),le(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");let s=!1;i.addEventListener("mousedown",()=>s=!0),i.addEventListener("mouseup",()=>{s=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{s||(s=!1,t.classList.remove("has-focus"))}),Ae(t,i,r,e)}function Ae(t,e,n,r){n.addEventListener("input",ie(()=>{Ne(t,e,n,r)},200));let i=!1;n.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Ve(e,n):s.key=="Escape"?n.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),n.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!n.matches(":focus")&&s.key==="/"&&(n.focus(),s.preventDefault())})}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s=i?r.index.search(`*${i}*`):[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ce(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ce(l.parent,i)}.${d}`);let v=document.createElement("li");v.classList.value=l.classes??"";let f=document.createElement("a");f.href=r.base+l.url,f.innerHTML=u+d,v.append(f),e.appendChild(v)}}function ue(t,e){let n=t.querySelector(".current");if(!n)n=t.querySelector(e==1?"li:first-child":"li:last-child"),n&&n.classList.add("current");else{let r=n;if(e===1)do r=r.nextElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);else do r=r.previousElementSibling??void 0;while(r instanceof HTMLElement&&r.offsetParent==null);r&&(n.classList.remove("current"),r.classList.add("current"))}}function Ve(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),e.blur()}}function ce(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(K(t.substring(s))),i.join("")}var Be={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Be[e])}var C=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",pe="mousemove",B="mouseup",J={x:0,y:0},fe=!1,ee=!1,He=!1,D=!1,me=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(me?"is-mobile":"not-mobile");me&&"ontouchstart"in document.documentElement&&(He=!0,F="touchstart",pe="touchmove",B="touchend");document.addEventListener(F,t=>{ee=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(pe,t=>{if(ee&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ee=!1});document.addEventListener("click",t=>{fe&&(t.preventDefault(),t.stopImmediatePropagation(),fe=!1)});var X=class extends C{constructor(n){super(n);this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,r=>this.onPointerUp(r)),this.el.addEventListener("click",r=>r.preventDefault()),document.addEventListener(F,r=>this.onDocumentPointerDown(r)),document.addEventListener(B,r=>this.onDocumentPointerUp(r))}setActive(n){if(this.active==n)return;this.active=n,document.documentElement.classList.toggle("has-"+this.className,n),this.el.classList.toggle("active",n);let r=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(r),setTimeout(()=>document.documentElement.classList.remove(r),500)}onPointerUp(n){D||(this.setActive(!0),n.preventDefault())}onDocumentPointerDown(n){if(this.active){if(n.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(n){if(!D&&this.active&&n.target.closest(".col-sidebar")){let r=n.target.closest("a");if(r){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),r.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var ve=document.head.appendChild(document.createElement("style"));ve.dataset.for="filters";var Y=class extends C{constructor(n){super(n);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ve.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`}fromLocalStorage(){let n=Q.getItem(this.key);return n?n==="true":this.el.checked}setLocalStorage(n){Q.setItem(this.key,n.toString()),this.value=n,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(n=>{n.style.display="block";let r=Array.from(n.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);n.style.display=r?"none":"block"})}};var Z=class extends C{constructor(n){super(n);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let r=Q.getItem(this.key);this.el.open=r?r==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let i=this.summary.querySelector("a");i&&i.addEventListener("click",()=>{location.assign(i.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ge(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}var Le;function be(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",xe),xe())}async function xe(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();Le=t.dataset.base+"/",t.innerHTML="";for(let s of i)we(s,t,[]);window.app.createComponents(t),window.app.ensureActivePageVisible()}function we(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-index-accordion`:"tsd-index-accordion",s.dataset.key=i.join("$");let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.innerHTML='',Ee(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)we(u,l,i)}else Ee(t,r,t.class)}function Ee(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=Le+t.path,n&&(r.className=n),location.href===r.href&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Se=document.getElementById("tsd-theme");Se&&ge(Se);var je=new U;Object.defineProperty(window,"app",{value:je});he();be();})(); +/*! Bundled license information: + +lunr/lunr.js: + (** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9 + * Copyright (C) 2020 Oliver Nightingale + * @license MIT + *) + (*! + * lunr.utils + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Set + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.tokenizer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Pipeline + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Vector + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.stemmer + * Copyright (C) 2020 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + *) + (*! + * lunr.stopWordFilter + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.trimmer + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.TokenSet + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Index + * Copyright (C) 2020 Oliver Nightingale + *) + (*! + * lunr.Builder + * Copyright (C) 2020 Oliver Nightingale + *) +*/ diff --git a/docs/typedocs/assets/navigation.js b/docs/typedocs/assets/navigation.js new file mode 100644 index 000000000..e15e6f057 --- /dev/null +++ b/docs/typedocs/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "data:application/octet-stream;base64,H4sIAAAAAAAAE52YS2/UMBCA/8ueKyoQQqg3um3ZFS0tTQoHxMFNZrPWJnZkOzQrxH/H2W0eTuLxLJceOp+/yfjt/flnYaA2i4vFUgoBieFSxPsSFmeLkpmt/T+IqtDnbvTN1hS5RXZcpIuLj3/POsudFKDkF9ivC5ZBVIIwkWGm0mOhFwy570DrpgXPhMUVzH2tnwzZ4/pBcam42c87+7jf9BnEk+H5oOQkZ1qDPm8jbtu374atV8aUy5zb/pi272OY4ZY/K6b2nm8YRjHLsd5PSSKruU9xwmRPzLKAyhIEW5oqO7iXUu6uhVF7r3PEEcy5WW4ZF17jazxsumReiQ0R2ucy2XkNTZDoWAFLQaGmI0L0xVCUOTOAGlso7FxuwV/nIUh0PIIG9dv7WUOGaIxrVBbXBE+3b94xYTcj7zhMwP9w33JtQJyQo21wSq6o9E9slwpbrxgU0ms7RqkWm3vDvbvLkKEa12IjcV9DUG2hwXEpqvWxTHChBaiuaC+ScM0tRbU+landB9rVV+Xes8SDn5bnSr6IXLKUnsptQcgG2nB7oeDIxO2RsO9aKemdFIdg2HEDcG1TFsiuPEDCvhVT6Y1UO2w2DJmwcS0SWXCRxYoJvfGvgjFHMRvIlC0rfT3t/eoRGHa311Ofso3TTeuilMrgs3OODWcY33bxHPM0IQu3f+M6qgqvuSNINjvW4wfCxNcxBKOtgmueYTN3yJxi5IFxm5J0ezMQNHtPhu1fwbzYJeo+kVztAAn77iuTScIqHnMkc1l5az9GqZaVPUOlXekF+jaYY6kZvlUQEh8Qqu8Hy3MIVH9kwsYH8I9LEyMYVCUC28cACfvsFaS/GPqMDkRyogdnGw+bouqZ4QdHT5BsBTdxjXefSxGs9s4VMHZE2BZavfRV25LoenAggtP76KK8t+Iafwe0cYrpQcq8OXe8E2OAUHx4L9Xk/on8W8UhSHHgO04bD5s8PzINgmHHd1Aa2Rlew2EPXhO1oiOHz6IhQzXeVHmO+xqCarN3RG+39wTVFnqbuhTVirxNOwBzRTq/L5vjYKbSPoYZYqZ3t1KWc5X1MdSwVcDSZpnPGLoYZkiOp1o892DfVOJw3unzKeU6P7yfU87084zS09mu0pZiYG6mDoQjhqhzp+q8bjpZHV0GZrJJ9KI+iijsQAu8PJeYqH79A7K+WkArGQAA" \ No newline at end of file diff --git a/docs/typedocs/assets/search.js b/docs/typedocs/assets/search.js new file mode 100644 index 000000000..41c036d1a --- /dev/null +++ b/docs/typedocs/assets/search.js @@ -0,0 +1 @@ +window.searchData = "data:application/octet-stream;base64,H4sIAAAAAAAAE7y9W3PbSJI2/FfeaN/29BrQwfbeybbc1rZ1GIlqz+7EhgImIQprkuACoC3NxvffPxxIog5ZVZmVyb7paIuZeJ7KOmdlZf3fL1X5s/7l3//5f798L1azX/799PjXX1bZMv/l33+Z582feVUX5eqXX3/ZVIv2T4+b1bRp/1D/2/jjb0/NctFKTBdZXeftt3755f/7FfjctFyt8mkzKT9m+bJc3a6nwGdtIfLnv2aLRd4EPr8XQn++yrMmH9Q+bRYL6OOGCPbT5TpfeT+sC8Qw/iN/qQOMOxHvp5P07f7bv+er+6ZYjN/cavzb7gfvl9LXx+Onivpj/lis8pn/W69UOeWrv/6yzqp81aiknEj3qxkSS5WMRbtYFU2RLYp/IfB02fjyFQRMUzoW9Wqz/JZXQbi9WLw9G4QdGwbCWVVlL0GMnVQsyl1TFat5EGYvFovzviwXebYKAo1ysUiftiNKEEoRjMW6/vY/7QgeRNqLRfel9TqvPmR1Hu5HimQs2pfyJxJNlYxD63Sq5nP+HMBS5WLLFUbZyUS38tYUR2m4ke/EODbrPnLyFmW2vSinXEEsRYxbrtNjdLl6UU65gliKWBzOY1YsAhhbEY7dJtUm1GE1QQ7Wp2wRHB10SQ7alboS9YFtBVlYJQGulEDErThNWQ4iduVpS3NQ8StQSJ5XXvxKFNbgoJ//7yYLbU5eGaLMFkyAVKV5tRtaBqlyvNEAscI3RFnzEWrlaspyEFFrckOUg4fZaeiSrLkDtz63hDmYqHW6IRq5plg95VXR1J+qchlaV+iisXg/yu/BhfpOKA5jnjc33UL/Lg+ZUJdko10/fslX8+YJj6poRKNfrGbFNA8Nn5pgHFZTtvPM/25yTP8zZeMQp+X6BYOmysUhVfmy/BFql3uhWPvt9584E1ricbiLom6KxxDcKBU5cnUcP5SrJitWwbnckI1DrJsKiadLMspX94sPTOn2knFoOWZJlPNWQmU/daCKZIjG4c3yRd7k+/W55leHYWGN6JHyQ7n8Vqyy3n8fHi4N6WjUj+XP1aLMZtm3RX4WhjXF40fOm6pctyuEIjg3WMKc+kWjAuKRZa1/TMp2iAyVchSLHgEm5Yf6R7j778TicJ6y+utT0eT1OpuGpiRTNtazhAYsZPCu8p+LtksHwUa52H6wWbWbxtVI+sNTVmXTJq/CvcKrGj0ejN+btKtczEgEaESjf2mtiYDciTFWpa2dVtnirnlZ5HdPOWYtDuoIMpjkz1EstnpxTL5tisXsc/vtj+V0s8yDfgdIPg55lf/82v61/BlAVOUi+/Ny3kUdNNl9FVpJGKKx48fFMpvnZ9N2O1MX7UQZHEds+Vjk/yrWnwoE4igXi/QfdblCQSmCsVjtfIWCGuVikSbPDQpplIsfAbpKx2yMd3KcPXi4Z6tysd6TorkpFy+PxSK4OTBlo8t2f3/xMVyyrVT0yVYXSoUIhBjlYpE+FVX+WIZPVke5+FZxbsaAuRuGIhrvh2qXJ8t2TV29f7nq/hh2Q1kK0di3WTuDLMNudUOUj4fo35psfD/oHVoUXEAj0tPxtHl8DI6Zo1QkSlmFam8rEvn97DEP+2RHqVhP3rRcTcMzjCoXh/T9x5fwFmYvFO3jKlbz4vHlfTFHNDpAPA533X6nuWuy6fdJFd4U2tJxqD+zovlUhmaBUSqy3toZ8aYqu7VgqPI0ychVeFkt+4PZ+6oILcR10Ugvxbeg9/Ubaxw8X22Wf+Qv71/+zBbBEA5IHo18kqRqiHLbuDfTJtg8dEk0mBqie1mu8qo8ryoATPnNG6iLJW9+D8VfJagU4XWqxnTP7MoBwGbuKoFRbK8qBmgUjMZqSsdJswWmSJLspzSBz02z/rAooFX9+JM/5lutjcuzfzzcnv/9/vxucvdwc377cHf+4frKXlcb337l1oMLptB2MPl4/uns/stk99UgA1t+RG7q2d+K+m/rqmzyadOHnviZnJ6cHJ3uqTw8NC9ru+0EGPy2VwuZ4DeTu8Mk7RL4qbQjbXA8fttrU+nsCuJgVeXt4rFuztb2tIFkpn1BnF1dLn7kX4vmqbtYcZvX63bciq3M39yfE+fdnWTdr7JNW2sVGGGFpgx8SZjtze315cXd+cPk8+31ZPLl/C5IFtJgdFiNzeTs7o+HlvY9gocuK8VgZ73JxeX59T1+8BrlpZh0AzOWhS4bO3B/nkxuHs5+P78KA2qiUiXuPnpHIHAnwcDY2vXjWRB9lCPYGkL6lDdTO5rHAbcTFi7tP57sNaODwSAqhd+u2DqhszliDfTKEBbmUJNI1NIsWtE6b427m5U+59kMOj80+bj1/uollIPJb46//y3Zzkt/O8LMacSvuwaYWTHvVivtdHqL7OiQxl9tWovDznQJxnR2Ceg7SJMRZgMJD/fK/udL8a3Kqpdhl2wiqj/i90Bfrn9/+HL+5/mX8PdeqbJwCTSCDsSvZ3eXD5fXH++/nCMwdWkG6vXtH+e3GMCdIBfr4fr9f5x/mNirMhemohCP/en+y5eHL9dnH8/tfawNrEvHo96ed8wf7q/O7iefr28v/uv848OnK0zR3Zps+3+8uJs83JxNPj9sV5z4moBU5fhE8KDi67Gmpe2esSEHqXiUOm++lPMv+Y/cDjew0XTpeNQ5CXUuh/o1q5eX+bJsJWtgvwpiWzp8BuVsA5yquNF38pzWlPVBn2hoS4GH3bkiSNiaAqt931rehU/2MTLY1h2a8WyK2v4kgopDjWWVr2X1Pa8+FnVzkwH3LEB7WDq8ntB/DdkLdrLxiNlsNnzlQ7ZYfMum3xHIkE48g+HSA5mEQ02Gh+N+lJ9F4KYUhkOTV8suJDxHtwJbg9EP+2tRaGhDnNPvquFqKXwgBnU6QyEee5aT0QEV3J4QVwcFbTK0FOS4rKv8sXgeQjdr5HgI6bAYYTepNhXMNtW15LXOam/X0w9Dfioo3AqQ8W5bNTP/aJvSrO3B3ZbZeczhQnjl0MbZHCpbgGUrHE9SV5bgSDsFB6jhT8NdFLT90QYIwnBibzxhGBTMuosnB+Lx3MCjBht93er/LCt7xeZEVzTY6IjjNicPwgEbxR5V+fwyKR3TqNsohpoAj6ItVGNfy/RQ2Guw0Yv6egVewHGiKxoSA4PBpvOAtmrFNGsoTcRWFOeWNU1VfNs0QCC5k5amI87oMfuet9uZbT5GirkATXF21XYCmRSUEc/QEp8e233ghyrvgu8L6F6tk5elF9PzrEhiyiS0lxdBJk9FupIEhxvyhKQrSXBAODR8bAiODVobvYmbnABNkZqKYwNoyrChTpi6kkz9UDnU4hzOdpMLiYSqJVEbESzmwiymT/n0e8Su75WtyOZS1B/o07GuJFErF+Rlna4kwyFyMQfqyoz2MUsSW1Gg965m3WVNV3yDpwObiiJcOgdQFBddUYTL+2KVVS9RbExViTbTCj0WrlBzuLXsVWLwUbEnYfTf9v+3j+GhEPoN+JCIK8VH8Lf2S55oGSTNQCQt3Qnjp7z93MF50903Xt67zx2cN8fx4y2B/eHD10H0OthTEeo3/4ISRKydfeSHzx2Ct3Hlp5v18Kz38uwpIHDZCMRGXTrCLvM/RXt5YOUolyF0zuK7Frf7WfBmnPZJ2nGA935ctZ5ewvd+IFxVmuicCrHoL+F7XFI6i700k4W1RiaZw1Ag1gOATTCCocDBDndy+qXCUI177mWaTX0GukK3eVgj69lzW9Mys3VhM4qBOojc1YvrNZx/b/xJZPAwPocaOBR27nn0R7sx/SN/Ac/bTVBLPBZ32qXIe+w3xShgW14A+WxYcTUvYP4eDwVTMZZLtliUP/PZp7YT5lWfcyDYjF7BOiwGZ6uXDzmQKgOEHoUJmIDrk9LsII1Y9JqMDmkwyv6B2PRBFUbpqfigikz5aR3QrytjERojvy7DRmcRA4NTjWGZGB5ONa49sMOULc+1ABbZlqeMy8qyYpLV37+UXSJZC3P8SWRZYXwOtaxQ2DmmlaaVCEJthXDr/jBm+1NRzi5Wl3YTNZE1USn8h+6VtqyCdrYmviYqhd+9BlauocW/Ca9KMtDNTjrBVPooR2hbRgapDOiKJs5OKhYFX5lwXVLLVK4RReqFojHaZQy+i5jSsajVZtUJBPFGOUaLHGFH789EPXfIV5tl/W/6j/77nuMRxsXVn2dflMyRzm+9GiVhqxnkYLSbP48xUIMYC+cUh3PKwplc3yJgBilGadIbTGF6KSqK5To8WzQfnrLC5c3d/SzoOtQ+SXAd7pk6po5vi3L6/XNWPzljAnVkXZ6DPCse28XzZuH05OvAmjgH9ykv5k+uU1kdcy/KwVvA7+hAeAv/Azo4vGX7Wy9w0+u931UYioFHmcgJf/ahM0Ade4Tw2qXGe2LDtlQ4+DUd31Jhlv8jrXuZGszSE9FNDWbZP+O7uCrNLDMBtRZC7S5m44cXVZpZVgJqLYTasr/kDG1+faY9WMz8+tS5wFqsvAdeUNz/IrhE2X2NsDrpqLmm6dIZOrUH2spEIhT21sT4fuHedIW/Xrc/Qg+9mhijXCRS3WV/nrlmmT3QKIbHwU/iexjU/O1B6QZkRNWPYpE4NQ6n5uJ0kaDBhrYTii9LGKPmYfQRrbgmrYsyyoTEqyXwWtJ3uI6kScaXDolWx6EB00A/p/Rpy1yYo4TktGB8lTI9KJRd04R7krWAn8ITKgbRt8yzMTHLPARqUyzzusmWzm5uAqsKTOy6+JcrzsKC3coyEX+SbPxTyMaLcjWf5NXyKwnd0mKymOVr58raAt8JczFD2zUbGLtdQ6BPN8vNImuKH3lw22gPJrAuk9Ey+5+ycj1442Bi6HAZFCs6A12HyWBVroDHMhzQO2F+qfNq8uzZOUGFVlS4Zd4sJ8/OKdkq9E6aiVpW66dsdddkzQaNbegwGayr/AfF6Io8E7nKf2bOGwEW7l6aW97yJ6m4e3E6rn7Nr1zjR7ZBlono37RZiwbU5i2M2u3OCPYdxZm4NQ23lsIN+RzBEsevF0ieR7DUQtjdkT51YWro8EtPZlCLMui2g4QF8ijOLzkFt5bC7ZIBUts6Y21spU2ktnUp7D4JaswGAVLk2yGOC6TIt8tHypZFkedbgYRciyFjztfAgvP2KORTNtAEghy6uFzG5s2tzrcNh5dbnW+vy4itpa3Gt08MD1tNwB4RG11bTcAeETxsNb49rijbbkWebwESci2GPFQmddtvaYm0ACoLS0ug/kkuCFVBoAWQsGs57LYY1xFOEFuNb4MYHrYa3x43RJeMrsK3AxW/lsTv89VQHEOqAr/sNOxaDrurRJprStMQqHUaei2IvsyrOXr62QmzvWPeS9OAfwx1b9rhgYSPZH3Y/gB17TXBfabwzAp9d334FawULJm3BifPYdxRcMQK3/w3sSOOoaMOoN0HwYiiDkLRGNvTDYRJ94LRWI1/6t/2ANx078bwhsRqQKhIWG+D7L2sCOPt5aKRaiRSzUYaF76ocl1GtQvH0hhVPgHEzkWMaYx7OU7ZUEg1G6nnim38ujCvdFjMWgYzdMRFO9yKP9aiHmhFL0uICxLOUoS+CGEdGkUcF3GPaeIOaBhHJOTDEdbRRMShhMgRAMP5z3G+093ubGd3pJtb0JHMdiELOG2j3bUCDtJo1yjHNUl3SvIdgbEuQJYDLsL1JuDsinZzMR1MUa4llmMnwqXDc6fEOFJciMpzYZjFuinO2YyTgrId4djhlGyB/ThuGgRCspnIqOBsX1g2Ez8UoO0IzWaihoO0neHZTGR8oHYwRJvJJBis7QrT5uISliKOUG0mA2rQNjJcm8kKG7gdCNnmsiAtlZxh20wWwQBuV+g2v/T45ZMrfJtbduRCCgjhZiJjg7kDYdxMFpiAbk8oNxM9HNTtDOfmlhu74IJCuunY1KBnd7gzExsR+OwOeRYoN3IihsOe+fgE35Iz/JjPAudrggKA+djYpRAcjMvHp/qi/EGxfD5I3xQYjCqATlgSucNC+TzifFeYsEw+N5ovyxcCKcCFtGDzhR/yuSB9XWDon4gl8Is3TxCegB2QSzg4BI6PT/ON+ULR+FzwvjJXGBifA9Z3BodiCdgAu7RzhERFrCzhgJ1Jvly3Y6O3j+5kvAE8EQEs2nepgSx74o7F8zdVqNX4hmcCqcrw6eqxWM0j6OiabDY4l4vOg3ZLPsQgf1733thwT9RZWHpsJmFXq84AnwUjhNxtVy8IZd/Ls5Grzlv+I59dPz62myg8A0uPzaTO81l4x6Wz0HRkGAQGYwAfebwRQl/lz80dmYGhFcOCGIKi4+NDUULIu1SVcUO1Q5vNqmaxcmiL2SpqGoGVxSwVxQlWlrATbotoWYgW3ICwTQwPcsAHwh7nkdMtpCphl1g+kKqEfahTECnnAcIe9ClQEB+5KbMsQAlkQNiAzoEYTIGww23kwghSlbBJLB9IVcI+dxHLNVNNwi4xPEw1MXtQ+43kyq2O4VDLcui8VlHLWFtRwh5xXGzFqLW95WYZX2K4WzuTF+tCgo4W4MMET4vB3RU9sZdybmYdNFQ1Po/VZtlXi8vDCZFQdfgMqnxZNvnZbNbukyksTD0BJm6fHkhgEOfj1uvcmeMWAt7JCyC7DyxB4HCIPBK3ezXJOxWB8JpWFAv8Bh4igNrB47Dn/aPhMUOArclnU0ezsTVFbHMVMSwZaiJWieFRS/Po18lxgySgKmKXWD6Aqox9aEP3qCFjDRp6LYjerYyJ04eiIlJ6Kn4tie+PunEVnzGPEe6XuQovhd6VJGoitRRlLBE3qYtwsbcQH7N2nFm1Co+F60qlKiK4fbA+S9g8aKydZy/VD2cKfxt8L87FXVfl88uk/FpW3wnwphaXxXTpGmsAuy9Dgwyq3OVicbFqWjNmC3yxdaUIDthL1VBzC96txmB6l8c2KmpxjMHtnT2kJq5qcNFrMnotiN47iGO6GaAoYIk4LoCigF0+EDr+XlzABhTcWgq3D2GKGHZsPYlWEMPE1osZhx3T+sXqsfQy6QTEp/T9R8kTes/XMb388Eadmsg/UNepw6irzfJs0Xj3tia0ocLD7wO0upXwl2JZuNaLJgNLSYjDZT4rnG5mJ4m9lgCLIQSebAtdTYwH3R6GHpNJWTZt98rWg6jfy2DRcSnzOAWD/0we6Mi/MDbhpqU1UNFTUIT5PFZ53u6/nEHqJglVnj1qXT8+LopVfpO3AyF+4DK0+CxWMSRWchy8AZgmNir6Eov5tWieyk3zftfPSBwAZWZd5M3PdpHpSXdoVYSmwUMv6m3DQmKr8uw2eLGalstiNR+dIoS2CCvz+8WmmZexnGBlNqfb9TSKjqXHY9KfXoXuKZo0LCUeh2z2P5u6yWdUGpAej0lbrrkzNseE3wtLYHo9lDAyyjeJwC/X+8hNLL6uwu4L7gtVQAcIpxfCYt6UpX/naOJuFXjYP7N6P9Gctxun+9p5TmGycKgy15BZk33L6txzZGCtInUVHv5m3X4uP/uRFYvs2wJLwdZirmardpfQYJvhKM2dqd9v6pe7l9XUnWLRnq11HS6D7ktPVblq6xLbDi0lLofbdvyuim1KJxwDTYWMT3Upq2Mf2qHsw2zHb//FXhNXU+Bh11TsWg57CIegOnlsLbYFIljYWmxbvI9xOEF6bHtEMYH05GxCcviAinJWIXEBFWXsQnfJwZoylqGzgTUlbRPVarieQo91olqOKJ+ukBznpU+fbykOM58+22Zktybl1hnKNmQGlPtmKBsQMrUA1ohINYyyC4NVXAJklK0+ER3QhgrbKlT8WhJ/WKFFuMFBRYnVXQQXUFHELmTHPKQnYhUyE0iPbROSu4vl6yJdzwTKLoS8L0PkQYVPX8gmkcx8+vy+Qz5IsZT4vYbMwVJi2+GCeKRjqLBtQMWvJfGHsTD+YMmnLzGmxjPz6YvMO9EHXz59kXkomplPX8JmUQdzDlUJS0Xxcaiy7XMXc1wI6bEtE8UE0mPb5Czy+NKhyrZMLB+HKts+E8qhqirPtgQJuRZD3peBusqdMM914fJTV7yiLLpS0Q+YbS2+LegsbC2J+QV/2A2nEI2fSfDI2Id8CGUmHLabOkJlJzAwddg2+Bp/6O/WZtuFwcqtzfe70gMSbC2+75XOwtZi2+I+KjgCVGRbJI4LqMj3S5PCNTQFvveZhF3LYfebenrACKAm4A+g8wDUBOwREb4C6QlYJIIJpCdgE3I4ja0lYA8yC1uLzMJ1NetL0W5rVoHbgjsh8Sta2ofJ17T23B3hU+0H2tV6NqOU7pWmNHIIv7Dn5KQ1gHI1LJuptEy9KOtYj4C0ZY2jAyrH1ZijYXadv2/DPlI7IfGGqX2Y3DD33ONvg+gECDdCQtjr4AmXDr1Gn2yFkOt1FnDT6cg7eT4yOpJcJ0COJg/x6FJaX+X5LJ/dVJtVO9PfuVOxQIRc+nxmZbtN+VHkPwlkFBU+PibK2OiThLVjsH1gXSBG+6D6QAAe1HhbkwE65jaEHdNB2L0j4gzaGCNEGXTX8YnDo6IiYgEqfi2J36eaog3SiopI+an4tSQ+xT9tmYHsHUZYI5JNjK8aYZsr5vTl+YSItbj8PJ8Qsd81fZLVtUSsFMGiFmaB9FNZpqD4ixCWoHMg+qww403c0iPmHAgz3sSxiTkPgtZkjq3g4Cb98JRPv9/m9WbhHwotafHNIYxA3iXaxXJeA6N4mB3soI8IcsSkxXEwo+TIQfN5CrVgB5knbPtFM8k2TXlfFTFkRlVBPps6ryL5jKo8PrZjVqCBO74jyLQWYur4jqxNMRcZ3Zak3Gqk2I/BinjXkmKr4HTnNhR6vqNYKZZPfQg+XTRW/BCmactaicGqPhCr7nw5fnjVtGVtxWBVy7HyL/A+lj9XizKbodd4usKBlnkASORKzyifK+vEVuomc76HHqJnfILNz4pD4VO0vyLLshZhaX9Ftq5jFvYQT//aPvyQMp05frkP8YVW/IdgidwEQBStfcAh+OG3BhBFaHdwCJb4DQPEEtozCLGU2EY4Bif/+vwQ/CM3F45h66/nT9pyOKwOre8PZGseV8de5EB2RW4HHEa1dgQHsiiDJbRvOZAt8ZsGhzmhfcOBLMrj6tjjHMiu+A2Gw67QHuNAduVxdeyHpGZea4v0Kc/P66ZYZs5HixQJwU2Q+VXCrkel7FhUPObY0rwaRPl4roMeCDB0voNA/N9NtmqKf2XdFcPLrP6ORQf06EysFBx4c++lmag1CbUWQh3Yo6t6FBcpLRq3lsJtC/D3yIYGq/LtEMsHVmXy8bzEAwxwwYd4EIjeIC4LExXBhUK9ayr3lQMAdy8fMc5Zk9TnrJp9KqvvnohdVURwmrI+S5inNNaOYTzPqkWR1/4gHJuEpcblUdTnq24j5wposSmoGlz0unEvP2zknTQXtXmq8vqpXODLrGpw0f0+Lhsbd46NQV5tln+WjXM2saEVBS72z/ZPpSs4yEbei7OtXTbu4Qsw9k6ci+uPPAZGF1T8D6p1h4NtgAaOj7NxcMBPVhA6YrbC4LZrj/O4gRXS5LKpo9lAmgK2uSAP9oaSgEXoHGpZDkN2FMK0oygIlJ+GXcthd7F95InPUBIoP51DLcsh6FEGrYCLEUHagIqPjlFBlv+KuhDQdQQsQGZQizLocjzQFiSqhkD5iei1IHrXmGmLIlVDovXT0GtB9GCEOFh4XGw2svRUfHRsOHYOiFke0uLCsTNBDBNaTLhrvWw5Gv7IXy6W2dw1Me9+FnQwaJ8kOBf2TF3BCfkzCnGQ4yDVxXyVNZsKZbRXqjQR1b5QiCviXpSDV+Pxagm8brVJMqyhwCwrDbuWw/Z4VM2uEnSnhrC821MdDbU1DeEt8wo3tLzaSfJK5/XZmuVDOWwBTNcQerduFbtNy2ac5PLVZmniK3LeYTU53QNdXU8e7m7OryakD79S1TCFVEsA8vhwffXp4vby/CONh6omwmPyj4eb6+svNBajEoODNYFeFu1/J893m6Wj2Y0CgpOo8VHCNKrwdXnol0XdbbnQRXqla/DQH/McD7wXJmPih0UTEzUwhjE7vxvZ0JYSj0Mdw8FSYtvhE6XKVXl26UnINQcZHDi6+9D6fGEx2IvIDh76Z2nDx8jaebR2Nu1ePUHDKwpc7Mz7rI8NnaGe8cEg12v37XgbdyfNRe3eC32q8myGL7Kmwq/r99n0+7wqNyt84Q2lCA6k4dtAxw7gQdz+jIDY1HUdLoM6gkEtyqDPLU7rcpqKgAWo+LUkfp+vhdLxFQWBstOwaznsbepk4tBjaglYIIKFqSUyDkQMg7aeyHgQwcTWi5kXrCVO+EEbRcK/F1bnnMuzi6ur8wnyk69GcV+hVK4O3Mn53YSAO4ozce8mZ7+fE4AVeTqy1p4eq9K1OrZQt7JMxB/Zopi5D4otVEWeiVzUf3bfwgKP4kzcVqNGF3cnzMQMeMosWKSzDEambU4sbPzexNGVrGHpetOsN66YlOFHwd2W8kFCWbYcXaFOLr+8CtaEPPJ+jO/+kyEVSRGNx8uW7dSDqJVXe8F4rPYvzqMNFWonF4/U9ZpB4mI1K6bOg38VFdKJZ1A3ebZonm423xbF9I/cddagEgBUSPjW0SvG1ju5eKQaiVSzkVqugYNTo2R/RPYQs3wE1FoItduuYbumKssqJxqxFkHsVuLIIUERZZUQi1dL4LWkbyMGIocaq9wxPBxqLHvc0YdFWItljQgWsFY8C8/5s750CZ4++3G8Xjpt3YLxz/mxfOfOKhTm1DlUKu9KWi8XahFtz+aOBeznom7KeZUtz1dN5a9CXVR8cQt8nrzUNUoTv0iEyBCWjDgeq+4x1brJVqEBDGJjKAtyul918WH5jMUN+oggx9t82mqzGNqfYPCjDlIQJ8KQheOBW3RBVGhLMBwb3IIMYkNbnqFtc8Xpfra+oJ1YzGx9WZvxhwf3d2RtyGfq/o6sTbnDmesrsvbksnR9hTMvWMuau823ZdFuzb0JC3UhwaUM8GHCIsbg7jwt/70sXS5miMBeQQL7Nl9kL87jQhh+1JFg8LFstyx9aN3sLs9d8yzMxNaVYPQpzydl+cV5JQXmompJsLgsnotVBA9dj8/kKasvVv2RysXK7SKHuNiakmy8Hns/nb2qCJ/W1p/yn8M3XaOog4+pKtFuulck6q5HkFqNqsVnUeWZe8kMEdgrSFigter7wrX7hou/V+Hj19mqaF765LyfssJ9txciAunyGfmv34NzHOqSFQ4dcQUfokC4hI9uF8/nz02VxTQPQzOKDX5TCdsDsZ3EYfcxJsRFh6rDZ1BHMKhFGWwfnaUufgw1IUvQedTSPPqCxS/FHOpC9onn5VAXslfMQtFSFLJRDBdLUcgucUtXQFXINnF8AFUR+3yOXlCDyiI2iucEKgvbibzUh7WFLUVmBWtL2Sp2GwJrS9kqlhWsLTQ+xWyRLEWhsSmGi6UoYpdb6qZN1RGxBplBLcqgr2Ly7kDXEmoVZBa1MIsuroGxkXWoi1iHw8uhLmIvfzITh5Vw6UzQtqFzQKdUQdsBkcrEYQxCMhO0RSLZ0FKrUMaXSCcEqCw12kRyApXjPDXWwY8zanPyjL8V8vH809n9l8nDzdl/Xp5fTR4uPvo/+gpU8JWopRl7uLTDxB8oaWBaQb91DTWAs5OJQ/C887MDQLzr6f6+PxPsDgKX/9WN0h2PrLqb2AEcVS4OaZ29LLuDUdfstENS5eKQ3Gn+dxjh7P7ur3fRaXfFv0IQilgkTufMCoFsZWLr3u9nG+se51jzIX0oV49FtURgqZKRaKvJ801ZLkJQo1gczmqz3JLtc8e7Fhk7PEA8DnfTx2tMimWoDWqCcVitUrOt/e47dZMt1wFUh0psL5jmxQ88OCQf22ZxXtax5dLcqm7k784Q5x3W92A4s2d03CwW7pxl+xFyLxU52lebVT4L46hy8Uhd9l8c1ijJRAvP/oZoHF4dnmlqzizz05d6eofwE5Nl2jcee3xd42iMcGm5MUqvQ20HUqIcZyEU/50MHQt3EcONuMybbJY1WQBMEYvDybstSwBkJxM5kk/HbIAh25myHMSbbTdEQSrCsbPGH/m6ef/yHrH/MGVjEb1OnxEM5dzxrwSGT3jT1aurAEOcjRsecy3hyF6XPd/X+WzwdmBKCyoIYIdLDIjHzjTIzllH9UzT8YPpIIpYHE6Nw6m5OH0uWUQzUeXikcKNAnqBk2g3BAr0giaxLP5c90pxcBnuvSXCYaGz6XvLdYF0qxii0WXD4tUSeC3pG6QzxxCNLh8Wr5bA8z5dqJTsE82LhH+oUCkNB2N7MxnhrNIlo0uERKsF0Pqj1rCDTBGLLxUCp+biIMLvtDEjwiNHDbPTxgwuXk8a6wS0hBllxGJawvHlxLkfdcn4EuLQagG04RYWxeUJa0SXlYgOa0SX/R7rdjVlo8uLRjRlo8v4he7udWtFlzuChVuLMb/QXM8OFca8Q8N3qDDGa5oDPCLkOTB20/AjQpu95XdnGlFKHE4s4i1jGKPmYXTLVJTDXxOMX9OisGo+VrexQB4xGKLxexAkXi2BtyWNO9iwhFllxGFawvxyovwaN5GnKs6SovwcIqj9WzyYvRh3H4bbg3H3X1+RHq+vPI9XjUSq2Uj9ihxxiqTKMdbtCKSajdRy9ceaK4XChZV7S4XDqvlYe7q4wzhAnFlGHC4gHl3eS9xRoC4ZXUokWi2A1j3Ygjh+VMSiS4XBqbk43UaAcNgJiMfvGQi4gDizvMijVkieWWIkMiTP2B/hj3oBcca+CI8LiDPKizpo1iUZpUSh1QJoWw8G4XAb1mD5OwjosIZE2VErcEteotyoVbgQcjdDUg/4XTrx8yuVgUtHxgaomgc0ZMqPqn0x9HlOmpxlZmbKtCyA6ElYO16zCCardX/fm65jh4BK0eHG8CWoHQPfwslpfaXwJqYdy4FKSqvH1gAXeLrTl+5FGHcT2Et4r/RQr9XoXyXdrxkpu4PgJ8/YAr3aS/NRr8omdH5pg2tKfA7dZORrPjaBUYOPrvi6KRVgqPF5JK9d799A8IM0E/Wxy9HRZO5TTwNXkWcif3tp8rqdirDIirwIMr65K/IiyIV7uAeRi/DIj0Mm1bSmwUR/6tJyYoF3whKY796upyTcrQITu1zM8roJnzcaDGw1Og/K4sKAR64ygqhDsAJhMlMVmNg1FbuWwx6KQZ9OAT0RK9CZAHoiNiFO76aSiDWIHEwlETvELDRATRGLxLABNUVsQ1j8qAoiliBg13LYQ+QraVLWVfhlp+LXkvjdrQTiIlBX4Zefil9L4u8LQ5oq3nNWo3D5SROEHP6+MPgFsa4iVX48fi2JvysMdQR4z1uZgzagjgKSHLpLNpQNgiLPLz0JuRZD3pWBskExdITKTmFQizLoYgniNkqgJt8ekWxAzYgdpOXo9F+02v4q6OBUv0hwbu5ouh1b33IU5F6SgdbnWMkz5yPHGqAqTMMEFrDIQqrCDMyaglnLYO4uzGDNa8jzSktCrsWQPec/RncJHgIFkLzOGg0L5agB+ok1wNzkzvbT/SQ4tOw/RxhXenaubu5aso5AwefSfd/PZrMqr13b4hFklItFeipr14n1CLMVisVYl1UYYysUXSP19WpRrFzdU6mXUTAWq1VrulsJoal6BIU0oq1ZbVbdtcvcuW9SjKrJxiJW6+kNpgpHOQbSNmnnTV55wgk0TEsjutf9mH8sf64WZRa2rC7LQLxfY/H2krFo003VyaLLaMszkZFlNaWjxzZfPI4yumFCcPxjz8VqWi7d7l119FFEo8ef4kfuuU2oDDujYHzZvpTTbHERHuNUSSbaZ8ykpMvGIm5fWG0NFZ5tdVkG4p3H563B3SFc3N7xdKB7MVvgGowtH4tct8zRsIZwNGa7pUWAbaU49bdZd8uVT4tsjqtGXT4WuXlZh4u3FSJg4LcBCgpmD+DD6TZn4ZlgJxWLUqNQaiZKy/IMuWDXRBmlwuLVEnid5w8zIo9yjJKhkGo2UncFEbOmHeUYZUIh1Wyk4SkP3DZIl+X0LyxiLYK4DVynbb8cSoxS0zk4lDjtl7ARtMQ5rZmAa4kzynuL3IZqooxyYvFqCbyBNHHz61DilZnIwaHEmUsJ23BLnDOnEnAtcV55kRtjQ5hXViRmLYPZUv9AdD+AKowyU/FBFX758XVtKvDLjq9zKex5IKWmvnqM8MRY60ccWi2A1q+h0K4fU5q15kKjmtKcdRfW7aTLclZZWMRaBLGvIay7yxBm1SYWs5bBHKljt3UXsb42R1mxmzwZ3OHMG+3ms8QZ5aXgWuK88uKcjLosr6Q4xFoEcczShvYygiqctTIRH1RhlP+O4mK15RklJyHb8pwyo1y8iiCnlDh3Mh9r2wcpTmVQhdl7KfigCqP8E4xre5RjlBSFVMcgAQEuXf647ZuADshRQjLcxfgqJepFoew8pBvy4mHBFXkmMiL0wQQnRECA+ITDERMad0YSRu3XXzST6ypM/JqOX0vi41ydgAkInkeUFSJY0PyfcA+whpWz6bTcrFxDyvZXweFE/SJhKNnRdA0jq5kzO6WGuBNkYK2rYplVL/5TMw3U0mCgf8sW2WrqmnU02FGUgTe8F5jP3uNxbRUG/iL7lrtuc2ioO0EGVpO5fCAa0iDGwKk337bBls6dnAZoyNOQ8ZOOXkjMhBNA65NiIjumIstArAmItQhiPzVQBwRIiVdqOgdIiWcHwhChSfNKTkCthVDnu9T6pGER1OKVPYIFqMWzxRfsEK3I8sqNRqxFELu9Im5q2EvyyodEqwXQOvcGcTqyVXilpeLbKqwZ0Zvuy5gTUTm/gNnftewOVnQrIL/43n2Uvv7u+MYunvao6PWTBw2xLNzjEVaGHsRskPDneDahLSUyB/JAtMemjEUeTMxwtMekjEj+ciKGeLWkhFHeX1YKLm128Zf3LKZ5QXpsC0QxgfTo/c0eJodB/n1Zfj9fNZXr+qIpJjlkQp+mDJxmCWI8GCAHlCsDie6/Iwjj4+4LYhnM8npaFevGfUkcZqHrSTBZB96VhHmskU9MelgQduogBdyWHYkf2ruDDLCbeCSH0G4e5IDd1uPtENhUuyyB3FbjbRHDAx2zT7DHx8iuaqkK2SWWj6UqZJ/Qw7RO62CfqSXYJo5LLcLFns4/POXO5wn63wQn7vF7hNl6IOg8q/y9LF2GVOD2chQk+5QOB6aKRuPVeLw6Es/RGG7zOq9+uDxXqoh001A/S20hO9aurXCXTOps6TlXsxnoOlwGm9V092xtl9qwIZJxqkfwwq9qIKMgVjQY3G4vHFEplhqXRx3Hw1ITsMc9r4n4viBgJSY73xe4fSs8DWhUgNmgqWd/K+q/FaunvCqa/ig/rg7Dg7ZZZ8DYLcMGNYWYdSTJxjHBTFy7h+2v0tPK+JIGaUbR34nQHQPex7w10AL3nHcAcYV7UltDBnQYDLapA2bhXr/DtzRo6MRJivSYSQBtHnyvXYPUxRm4NQ23lsKdo99sN8tNfLg9XP4YHrAazx635OYOKfFsQecAKXHGueDssR/lomeNwFt2WAKseTTwwh2WA2v2DLxK9DGvm2KVeRwqioTgBGp+lTCJqpSjfNwWNs69jcH19SgbFtOVYFSa39JCRrssEehBb6WFjnZUIstOMrqqIFByEnYth+1J8Al0rWCSTwSid6lkYaKWSyhUb8wGgIuK23D0ZWt4vFg1+bzK2uHV38YtOcGhEv42YcC0C+EKVm2y1Syrosr6ylYW4RQ6onOwwZ7RoXkUrJbwClKP5YXvlg4yqM6JZjDcmotvOKC+CLOayQzUl7JZ6LjGbS3seQ3FTpFsCKdHFNvwht1Xji9I2YrJzvEFodHAO106xwPUpOkdK62p84/85WKZzfOLZXfX03ubERIVnECdnyfMoWBpHFOFN3+smwwqnyyFRx30prvJ1Gg/OoXRZsXhZGozWOGnUDcd1CxK4RHKeeOmgs2BQ2ETyonjaTsHYNMtEhhNx1IXtBKHl6UuaK97VmcDPiBoMx434AOcEcqaui5bgaIu5herR9cjS6qI4FRlfZYwRWmsnZ7XnRSagKbCx7/Ns5nLcwGB7+S5yM1Tu2J5KheuBa6NrWpw0Veb5U1WNcW0WGcr5wPwNgdbL4IJfrIDjICZ5DC4vSOd3PhMLS6LOoqFqSViC1pH0FRErEDDryXxu1gbcnc0lARsQOdQy3IYDjqjBgZQVcAmsXxA1ZhR0zMZF/5dpC14kIm5iNxBAuWIOr1yMcEdYuFZLLeSn51B+S4mumY0m5hpq6Dv0PAcgudsLh7o4zY8l+Cpm4sL+vCNZJfL6MZiKYvZJ56TpRzfo5zD2V0xX6GGs1HwAMOZ8fGI4Uwph8sN1Urks5385DlcHyYr+Asy7JrnLvO48/Kji5KiFs2DPsBZLCgDXJhD5yVhV5bzIzIcawmOzo+I2XES16x0TTGLRbKpZdjYg+D1pllvmq/ZYpG7hj9VRHDgsz5LGPI01sHUAc5GaVMwlLgcxhxSNBq2HpdJUffeTTSDUZ6P/Kkq/5W7BlQIeq/Ax/7SJ90hYO8VIrDtoQcNvJPmotYk1FoIVUuJQGjntp5A+aOY2HoCNrmL7P6gqoBlYvmAqgL2uSAOSpqKgD2o+LUkfl8Y4tCo64hYgMigFmWwe5iAMkTrOlwGnuhNaIESDN/EYHo3GDYqamuBwV3m1dx16deG3UnzS+sNhIHKi4qBQbbw3ZEjpYUrOhLzke9oFZ6JMGep2B5OHekF55vbthYHUX9eI5AHpCwxBzZ5tmiebjbfFsW0rWjSJGjrcleoDb5uGr1WwrdOMPjfqd3jO9Q3ZLh472wAezW7l8jwKEhdprD6iwyLKrrzQJrS7OrobuTrQ9HczFUFedSfO0Z9MUbEWQC+HCPGhrwfsWcFMS7xs4RD+QAco2cNWFeiNzpceX/f5M6MfYqEuCNv/CrZjzdQdh1+FitE11HQVQUudvZMxFYUmNjNM6UmX43iTFzN9RjsjQoDSJHOhbY50xodcm/mRURszVSj43dmXtTu5JXazA0dJoM6gkEtyqArD7W7GToCNqAyqEUZ9E5gUrfXNPjlJ6LXguimz5My9Dh0+faIZuTQZTJa5nlTf+jWCVWRoeckQ0milZAaiAgm2qmvo5N9+qQWQaIS40EPscE4sHUWFP91GB3hPDbhCb7jED5qk6fjkzx7wTZJnSoEZypq65Nrc7Ttms4izqcX7JOUzZnRKWM8et71MzrsQCHijDrA7g7xK3pCo/GMVyK8MCEJCh8oIkGIB20YA+MThJggzsI0JsA5WCwTYvCCuQg9CIeYWd8XUyDFK3IVEDjXl2JHXBU4TtXl2NC6l+uMW44PrZO5zptF+ISPZLWVvHkiK8IBdUCreT2A81mR8S9wGKa5u+TRUUdhCgfWSZh/DUFaWDLOwfyzEWVoiz8F83KgHYIpfGTOwPzrqthlp8R5QGiUo+6NuOdfwZmc6thjnH4FZwDinH24mTp6LyV28hVc6UQ2cqlzL5Ofeeg1eb6pirL9xMgsX22WO17jz94Dr+R0/9mP55/O7r9MMF97Ncr6No0KRRDx/uri8ub6dnJ2hUPV5TnIV9e3l2dfUKB7UQ7e+ZfzP88m5x9RiIowHdM6HJ0899mDXYuc3c+Cx6LaJwlnonumUXdSdVTcTdQgom/sNgAxHq4gXnjXZ6DivbwhbJyzRIen3dYgMfDMCR4OCM9aiEWVLzLXYK8j7yQ5aGtzDPcBKsIczNmYeBRnYkOBWcdNlU2bT3ne7nSX2Bo2dFgWD2QZNEyOzCwYQt30j2BPiqVrXarDauIc3MccBzjIcZBWZYOD2gry+ui0WBetxlWGNKipwUGfZqu79aLAzQuKMAfzW74of3q3EjqsLs/qsT/zfH2eTZ9GBx6u14J6HCYBN4UOD/ooUJjYQBxzmROMwglheUNwdDRU/E0IL5i/wahQbNaGEG4wh4WOi85cgSkvvgdhTy0xpcWjYlPDh1DbHhd+VsFaMusqzFJ/pC4zbB1mbZMZ2DpyDCII8OvgLmK5Baox7RDDA1Rj2iOUYtqyBDazNMIGNGxCVmtMuSnbDF2eW2oKci2G3JbhE3LpuxdllhSLV0vg4Y6I7bmF5S+ICE2z51RRBrjjaGhc4fktYgM4oZGW672IDd30W0WAS5++l7TtNTWYliCimxrMst+iHUmKMLPEeMxaBrOl/oGyHdblmaUlIddiyF3eS6yzY5RllhWNWIsgDi/+EZ0sgBK7PVM5AEpMO7wnul4sFaYNqPiWCndui3QAOVW581usQ+oQfMIBB5ZRkJHYCEuQkPEx4JAfzjpWDBp/FBA8WjQ+SjhcVPjGH76Z8ITjtzC+L+rIBLaDjqJKTKlA5JFqGHWRfctdbwCbmDtZHuK3bJGtpq5uYmKO0jzU4Qwnn70nodtaPBarzXL7TsUQVoKtbUiP2b7r+9oZfGo18J0wu/TvO3vWk3JY2uNLb+mRmeCd+yY8yr0fxsQ5CUxwmpsgzALnKDBZ0FwFKFsQjSBWemKxxcrrP2SBqj1+hKcdLEGVLYTdFuMLYYJRxNllpuDWUrjdboM0wWgK7DLTsGs57L2riDrBgopsO8RxARXZdrmKnPIdqmzbxPJxqPLnAcpCRJXnzwQU5FoMeajYqIWQQ1WiTUTxcahy12bee0D26gyVphFendob6ZfV1PsIwygguZHWP0rZSI98Q4vuT3kzfXK3d4MCoMbjUeXTvPiRzzp5l1PcJGHqkBk4Ox7NGLAmj00dzQbWZNvmNqKCADW2VWJ4AGr01moH61fZqn7MnZH1258lg/XVT1KC9XdMqTcadcAmePgawMGEzGuIlJD5ELbXKa+jopzxNh46GNGoxnAwYgDLH4yo1yEqGDGA57t3r8NhHgwIofly+ehomEQ+iLJd1O0Cdl66FxlWGTUNNvrFalouSeiKBhMdEyZi4lPCRMJ1TWZADFRB2AA/VKBDQBHlxqOiw10DqL57/ToiJs16eJTyrtzNcQq1bg9h/sgWxSxzn8ZrmIrwiLm9ArquyiafgldAoZnHWizsemhg0WCKCS4ewE8TFhFWCVh302A2tDtqWEb+ozOYCe4ADcug3S7dbebzvG4bUH9eWy29kc4wJ99XIlmSJx+YGWUSIrDBRQw6KdEiB7G80JGMjiZ+KF7BQwSnnXDufIJ9YnigjxUI9rgS6XaBDwnZTIZr4EMSXD0bG9cUE9zgYLF9CxYYHLNwwaIHFjAwAeRChtBSnJshZ5MIbooofdu3THV3bcxylcIivElwc8FvFrDzu9OB4mgT1Dwt6JVOrFkYuR3R3OgNJypnFL43e5wmrr5sOU/k+PicKs6JiZzRkLQWDLhBPGtB0B0iyi56BOBlXqQwpDf42IxSWFaB7TBMCrUt/n+8gQJ6JqRvQIH9sikmuF8GP017NUQvAWa/7M+uBfCJeM8CxWr7USIbVUuCBSL7CUyEkAXFw4W8O4bJUHbHBDaEtP8wqYjc/yhutCcJoEZ9OG7jdpdurzN+63bslOn2keaCywHgNA3hJj7BOtGMaLkBsIz8D/2AkwXmtR8UdujJHwAd++4PCj+QAhiAR77Miix9KPkvWH7sC63Y9uhLNg63Qsy7IuixIpCc1DFQIF9zQLNAJTt3cCG9c4JaIfiSMUNtIiJDKm69FGsW3qsKOG70hhObrRk71xB7UmTufvy6LrDT9azrIne6lPVKbNNivzGAZkhvYIzcyShWgZ0uTEpqp+vrmM4wMt+bZprMAQLKop7F1Ik7x2dauZBPRKKwC2wkjfZYCTGWxp8i33/l2YZHXnQmYDu3Fm704KYChY/MUWuzICaqJXPxpVkJsMEkWsHwwWR1talQUrtiWDxlNSbrmk3EVozhQg2XpD2jikJFBU5Sn1JFIQcf0QTQ0c9oohgEH9KEOoMoA0qwo/nUDXOUti/70HmYajL2QIaemvYgxp+G7UHnYapJ2COQexQ0BjIBKdISZAb41Ks0G1AmLYKzkmgH0tQpzAIdEQZbhJhIDmmXaEb01HYxNqItdmKS3MXYibgEOxArZN5b0EzS6x9kBlzQONJc2uJ9jl0agroS1olmBOrKzJHeJ/pcMyTwSF8kB8xD2wALylPbKB7IIHuFAuho4axjiUtYqTkRc2XDmBAp9zaC+PirMgYL+n2ZuCcRQQcP0eWH83ZEmYLhfMexIjaQKLc7fr9J3GoeiEdcq+U5s9HciBUW68ZGju/h61nMh1eRXhLUxS3+46vOPgU8lHaXuzNstr9JOsn33yO9j9YRdA6X7iyYe6xBKBpjuVk0RV3MJ8+fPbm292imeDTuZtV+ZZXPkLimeDQuCTUek+A+VKoS9wKMB6kfjxGNZi8XjVQjkWo2Usv1ktZIAQ1OOYnogAan7Pe0jgJocMpORAc0OGW/I5b8TqzcJGRLPhrZO5UrozDmmrV/RPJP1eqYhLtgbY65wFT8NVssPLPx8LN3QrZthbwvrX39lUvTfZgPFXhbHMc8s31N9+Hm7D8vz68mDxcfUdRANdLayOZFXcaofCgrGb9BGu9STMXcSXLQwmf6GiT+OD+IGzoQMXCxByEhXKM1u2dmDR7Q4rAocbcxdBKAEoeD981KFRf1ZmWotv2uPaOucS69YE2vN83dxv3ell7Be2FmvRJAVWkO6vQpW83z0LOC2mhlaAig+99oAMBxLzQE2vBm+XGzXL74c2sazdnS4TDIn5sq8y1+VGhFmIhJ2SZpUwRup+TH6zdB2ElJEeZg1hTMWgYTFT9hFhYfshAuMRGdFDCBKTtpSiaFSWDKTkInBUcgyr61ImEYg7SYLHblobGwtLh9nbQ0MhQ42I/FoskrGrytI9QSyFaAFLl9IoqLQ1GobZKWrLAe0ypRTGA9dlvpVhD47forW4fdQogMbB1+u6AbwVTitwi6GSQ5DKMQZRVqajBrwftCnmF81At5QZujEbFv8iHWJ4RN5BwfGoJZmxCQCUEpyBEGu5/U5SVGFixyLYa8HxwIhb6O30fDIwmh2FLYbTE+kLfxgBKz/HQOgJKMHUhr4A8sn4LDCngGtg53PI9wbIBq3FE+ggeoxrTHOcXNosszLUBCrsWQffd3jIOH8NWdAJb/MM06EGJ7rwJHarr/CnmqFqzH956HVqxKfI94WgWB+Tmrn7CQW1km4p/tXq9A+gY1cfYK6bJoRd0hcfYSaVRgYt9kL8tW5QK9PFMVmNifcvQieBBl4t22feGu+BcaVJHnIntfVzdhUa+rI1pV/yHKwntUYGNvk71S0FUV9vp78nxTlq439YD1916eP+djEuZCkz4lPy6CyfDE1aRYotu7psFE/5LVzbY5dR+sm2y5xvJw6LL74PDoDpkOpMjuHx/LzbdFfrfOV7O7PEfPOZAik8sfzpeLLPQ/gq8VYUb9zWJBWBKO4tyZrtqs8hkBWVUQwM7aaiOijypS+IQ1laHDZECZd2Xm3K95MX9C70D30iI+ZZLfR2CsJ+4wxXa4w4cCdyhhdOTVyTCHy7zJZlnjvHNmwivyErtb0tZWYBab9lGgWbOp8BY3lUQ47MYHGglFiz2H/pGvm/cvpL2pqcTm8CkrFpRF7l5eYH01fOszaZwD9OSYEGYXS4s7CmTP3Yu3fb3SLAJqSrIhWAXQY8+71MGCM1Jo0V3f0B3zm9Ubo0KQzXxCOLM/mXbmY/8gOJJ+AF4kPoOC5FIqQH8Sn8Wa5Fxag54lPotHpJvpMSdfWAwgVxSHUwV5mwQ4oF1PleV3kmiHFCdUAXqgJFjQ3FGFwxclwITimCogrxSfwyrGRQUoSXLa0JxVG9hTxeexiHVbORRle3KMAwvSku1bMa4sSEuS1XekU+t7Lj3iPRLcW4+Ab0tg1iU5utagl0uGBcXltXb4uwSZYFeEa5fni8+lRrvB5FcCP/Hbop/2Pkhi7kP7qArbL8bHLwlOshLwkEkxoLjLTA1JNkuK42wJec34HHK0Cy23/GcCMyrZmWZqyLMhudUsFdmZnepgMzVk2RBcbQXkZ5NZHZKdboDSgThh5zdLRXRUiXPEgWoH44W1FKAkuxqgOecERx4zRhDfyedQhJcIB0JzUaWlWWAbxxyIOxNhQIlDm8NxaCI8aHFpc1dcmggXWpyaoSDMBRu3Nrfj1kTwSXFsc0ccmwwTtHNxDsW1CbVSiotx7opzE+JCczRaKtJ8KO7GuSMOToRJVFwcrCfMjBgnZ2oIs4mOm3Privf5GDekQ1G8/8U4Ix2KwtywcXZzO85OZtYiOCbncNydzExOck8aCgfgQnFSWiqH4kNYgzrj9EQYUdYZh1ljEOL45mAcn9BMSrlKBsT1ibAg3miD4vwEeVAcmYCSMCdSHODcEQcowgQfFziH4gJlZmmyaxNQOggnkoMT0hJfM1DdnICSOCeCs3PuiCsUW4+SXZ6w3uGYEWZLT9yhzCgU5/50aR6SHcFq3rhEoXUGdbASPYcBEsl6X6N7Dj9+ykgja+bRJ2WRRTwJuyucwy1NyCqrMBVIKmuyouaUjXs51m8Mbxyp/gxlOFw3iORp/gYWIjzXj+YfnFQ0XFC0F61tvYHRUG3zijAHM3smYCrCDMxiNV1sZnlona6+8WtqcNAR7kfteWH8ldtAqQNuRq28yKu2XkR/VKsCZwe1Rlg15GDWbIq9RB3ADCwANUjkpZIAYuiwR4PEJiAIYAZSQ2mQyLRQzFe4dUx0gtAAajA9p4aKTs3pRQ1H3yugcPB9PCZq7NOkeTNn+HxQnz/xaSz8b41pjwQhoE0F1qjbzhhoYE2agTpEpKFhdXEaLj6nD/E1bj9SIEM0+QVuPxoub3Lsi9N+bFzW5NhXphHlpgyLtJTJ/DelrXLLYG+jRnALfVWYV148Zi2KSUCUsCtpGrBV2OUl4dsqvPLfkCZfU4FXdhq2qSCETYXmtzj0/hIOWItqZWjMWgaz8/9Rtu+GPK+0JORaDHnwedLKHO1BAG6P08osgzykYSe6LyAl5sxM5gAp8ewwoS7rAR2eFcgMAB1uW6Cs800FbhugYJsKvHJf0zY4lgav5ER0S4OBjnrBXT+bILzdjun3yPcarK5PfK4BUQe4NxKsiqA9kYBrC1g7SI2/3tz0OiQqNX14J4Z3AlLSw4dw/ef9OiguXVAIMRTXr2Ni08uG7Utw7JKSy4aQfXHyOqYZJh+DFoyK1yHRyV2DuNijCHRq13CNEg4kSIldw8ikAyZiWtfwDIE/ZqIkdQ2OiNjYdWN0pKZ0DfFARKrrDAgJXUPYpLh0nUVUOtdwr8NGoZs9kJrMNdwnsDHnZs+gpnINMfFFmOvYmESuwdE9EE9ujPDINK5BX08wetzw9aCTuGKQQ7HiNjY2hSsaHe9TJSVwDeETZlaRWTUQ9a0jIpO3onad+G2HyGobF0kNrfSxCVSD3qZQ3LThbMKmTw16OLwvlBqeDdQDpSFEf1y2johL1xqcpVBR2MYMRUrWimMQjLmGKKBTtYZnSEyEtTk7UhK1hhngw2koaVoxqyZU9LS9YiIlaSXwwM8fxBStCK82NjLacm9TE7SSuOAtQk7PGp5ViYMDY2TQ41awg29jjbzs8OIixtEHKQlyKiNcfoCOIKMV0g23Mn1wAvUTeMVPqxbgAT+J2sBTUIUFOUxRj/kpPEwFeS7+J/VsKvZzevxWiXzSTm2gnufs2Hzy0ANzCpEcelwuhoF1WogdTOfQSlaCAfIFdvO8zvkAuwQn5Hvs1lGa6zl2kZqiTDlz1+PsbCbYt9oVMr6n2iVbENVC/tM3yXZEmZphNWmLIZ7NNo3leDSbzaem87FVxOuNbCD3s+ISFiIzAnTERwHCTOp+9lyivrDnvnPg3FekPxHOgeeOc2Cxfo1ce+riB+jPSB71oXjMMa96Q334EBYhMakPxmSOfelbt4v7oW8J25AZAToHsRFl9ed8BlzQQmg+torweEvfSoFaslaKYAVqydoq+I64biTwGXEJ61B41Ifi4X9xXGFgPzjOxg6+P666DqHnx9k7fv+rUgp83KNSXuzQu04KeuyzTl5830tG6joxIumoFzf4jpECHv2MUcjvRA7BYT9Z42WEeLFG4cJ4sMbLYhEZluPQk2wzMQE6/Mdq/J7tmFAd/lM1Xk6+l2oUFjEP1fjHEnz4TuwzNV788Cs1CoP4R2qCHAghPZwnanA8kEeRrAdqvEy879OoixvxET7wOo2CHfk4TfjMC3kQKX+KEXqZxjrtOgg+IQiJ9yyNl0vwVRptgRuZwjF8poSBj3uSxj9rUgOGeA/SILhQQoeYz9EE5m5iEBHvMZrgqosa1gPoHIYRcg6xNCT7cFSoj8ATMHhWSCuxH4AJzLak8B+5fm76V9Cdah77+EuIAbZC5pGProTwCXez5vFProTPQAh3teauu1oSTKiJNOKfWwkxQd4im8c9thJCp9wqmzOeWgnywN4ym8c+tBJum4RbZ3PXrTMZJqRbaJaG9Hkh/lba3HErTeg8gewig9VkedFurZkKslxib7G5VaV7eYTTzKEn3eciXGcOPVlmyFtv87hnVYKzE96NNo9/VCU4W1OcaYa8PBOCS83SOBAb/OqS9ZxKiA9hJXGQVQT+Vt08+imV8HxJyi10kPNk2pn7oU61yXf/AB1ZRpS7gHPGEyqo834kibgHVIIzMdURB+gcghHFHQcpSa8KiE45QEeaEf6m39xx009qpUl1EcJqB+OFnxOZj6YER50od6FL8YDc8BZjP5gSXkkQByfJUwLrtZQhPPpLUTf5yhmhrwv1xDQqCgLt4Q/gw4T3PwzuDpOXq7uX1fSmKueeAEuIiKUoweUq/+kbcmEeipIEh/fZIlu1i5AhSNI14MJUbF0JRsPaaLcXJhGyVOX4dDtf14DmI7PTi2Li6qK9q8cVvaeKiHdP5bPkzrll7YqeyBrXsGxDb4X5mHX9s6z8jUzH3StwsVd5037p++Rl7VoF2vC6DpdBnVc/AsO8Cr4X5+K27WaVTzs35WW2yuYECpAm3wqBQUa3AXJYCWNePz7WzvtLMPJehYtf1JebRVPU+DHklabC7ndVscyqF/89B6D3mWoCPH5kTf5nkf90+x9BHrqaEI/euxpBRNHjMmkN2w7nuXf9bvMwtbgs2mXFfJM5w+NtAooCu29mP/IPm6oKTfda59R0+K2hfH6ZlF/bkZ4wNppaXBaP+H75KNEXv+cv9Ue308pGVRTYM1I2fcpJ4KoGFz2bTrurSV/K8nv2lGf42QhQZLf+zbdsGF7pdGBddt0s8QwG2QhEbcnveaMIWpIEHyrCYHpfK7JRUU8WYXD7mA/CwnuU5yLXRORaDLkvA3Hhr+uIlJ3IoBZl0IUMRGxALDUBS8TwsNQE7HFH2w6pGgJWIKLXgujzXiByS+ZQFrBIPCeHskgbIWwWR3mR9kHapkohb8tA3KyaWkLlJ2+ZZVkMkZrUjbOpJWCLCBamlsQcGreJhzQl5tM4NpCmjG1iHAuQpoxtYthAmnK2ITs7QFU565D5gKoC9rmNcsEAigK2ieMCKArY5QvVKaTrCFiDzKAWZdDNqhHOKUtNYjaOcZJJ8+gHhBhXGaAoMo7EcAEUBezyiTQffxKagwmotRDqEA9McxzqOgLlJjOoRRl0WzCyA9NQktivkTnUshzaIp3FulJhXQGrRDOCdSXmEIaL16kuMadwXM+CvMyQi8v2k+0Evo+80hxV+Wqz3NGCBL0BGMnpHuru4verh68Xk88PdzfnVx8f/jj/TxrGK/gLvvKDBQuw+/Pi/CuLnPIBDjcrMMZUaBeg7W7X0YBgYcFgGQ8AIWzGUSbnof7vZenqMj5Ce0VJLteLOCqDnhyTGuy2eEamvhwzfxoyHycoK1kEG/wBlI8M6iiKxqV3mUU2ZlVXjlHNYFQfhFFfzrhOpqgKWyiOT30IPmqsdGTXBz4hai8uP+ATovbzJ1MIWA737i3ZZvGcajFO9uLDOm0KxNA75QWXIH4MwirEXThnyPSo4g8rD3CEP8Tliqg+LF3/6l6d7D+efzq7/zJ5mFxcnl/fT0gAr2xlkg1CnG6uv3x5uDm/vbj+GMdL/4Aot7P7yfXDXbtz+PA5jpv+ARFulxdXD+/PJ5Pz24fb87ub66u78zsaOccXRNjdlIuFZ0JxMFK0YlmcnpwcjVvGh4cmmsRve2USl9/2hXCZpm2htxeTi/86JzZ0g9hv+ofiSO4K6eD64f729vyKOFCYPMePHITj2ZcvPH7DB6S4MedH9rzIied1sHEH9W5v/LUCTasH3fhD82uKZV5umkuX997BTVU7CK9s05R3P4tm6goSdBDT9A7CbLyHQrSZrngQblVer9vP530SGRo7U/Ug/BbbFRmRm6p2mDodziVHeWLNAuoH4bluxz/yMLLTkWKkrfez2Yy639l2VE0xdqzVuFT5svyRx9GxdA/AiNwjTWURTvPxtimRkKEpwqZtBrG9zlQVrLFYSoC2CCstqJVGyVSVakOxfExVET5PWR3Lx1SVt8/7l/uqYBhppy/PjN7/dV0RRsXO/nhP0e68SFWU6WdNVjXdJsP9Po6rm+maQmzKdSQZVVGEy/Qpn36PXh9ZyofgRF2O29qHYHVTlcuipq7G3R+RGgXe53Vz9iMrFl1WKcZg7v6O1Mx3FrkVNFWlLBfLx1SVss9k2IuTjTPqSVkmisn8EExu8rzizHO2vgizWVFvvQA0RpqezCi1yDOqd2yrIrTOdt/mcXsogld50PiMcyrc+ZTgHltfd12szuppvpq1k/tNVZRV0biuLaCWcfDnDlKOabnsVONnbEj/IEzV1Vz0xsv1jb+QMdHA7o8cnPO27RX/ymci9J3fO0zL7pZrEkXwf+ggq+azjSvNM3LhPHzgIHZtvzHN6/p265smGhPQPgjLzXqWNXm3EB5VLlZxg3PwW39ZCT61e45Iw2M+J+YftyI6Pmb50jlYDz8KhtooHyScH245RjvVVVS8J92PinKfq8Akn7kfG+GUVpEJnmg/btj5pMLiPU7B0vpj2Yyy4mLXQiWdVJsaW85RllVK791Ro5Co66JBxFCWXwMUzu4bizvJl+tFO/IRsBUVXu/J6m1h8myG6r2gkoDt+0+9f6HWga4myIPQBGFFKS71+5fbbp9I5qIo8rmQa0awTmoyeC2IHtEWRFtBHUGglmZAbYGibW/3sQ9Pm9V31Ezk1pSZJZwrW9c8EfTBB7GdLwMakMaLgFFIyNINgkws93NBFpr5TlAsHrb2RmEW5vahxrvNEgerybOQP+X5ed0US/TaQleIx64335YFunJ1ac5OZJG9TJ7Rs4Upz0bGT1SWArNVe54htBq19QZhNCJlKDQ0BNDvmsz5kBMIvlOIx35cbOontLV1aVaJ/8hfLpbdDaPuaYCuHBtkyWFFaS7YRuBSZfHxP+llMIBe9IrG/FzUTTmvMuTAbiuxOFysHksc8FaShda9ZYJHVKR5noCsmn0qq+94ZEODhX62aD48ZYXTG29Aq+JcXPJS09JhMfhY/lwtymz2pWhnZhwBU4WxeqDjAyqc2TyCAajEqoP7NbEGdAWW/WnYlgLT9jR0QIVl9y6IA9npdqK8+XTVthoCqCbPquV2QpqX3aln3t16Rdc1pMbicbGalks6D0iNXfPvM+xwr0izSr/9Dq7Mo7AEJqaktVRJu2P2dm/rDkvVUDVpDmq5JoAqwtw9f/sVykLd0ODuvX2PxNl7b8zrcH7UdfeudP+ZabcEQiDbGiJlRjVpXTwet49paFeb9/3JNQLZUojHnm3XGmhsS4HXq5D9iYXzMyua1lpX+TPxlMqpSOLiekvPQWD4kZ7g4cvZ1e/3Z7+fhz/7ClDxlWhL12HdVVkts0Xxr3z30GcYH1AZ8cMRGVg+VTvZPOYVnZWheABuwyaezExXOwCvD1Xe9urJcxdr8BjI8m5ws1UPwO/uZ56vByvQGULKh+J4v+oGjD6GLoalpc7iGfPeJjWoyAJlvLxoXlmHXtKIMIOfEer1YQczMAyJ26DCgVgqJ3wglh8VFYilApMCsfzYiEAsFZkQiOXHLerunYHr1QIzGGvC8Zidn6dfKQRDvFVwWItl8QgWsBbLFnaUJcoYkBrLGjE8HGqc9rgP9Zvs1pOYhglpsazhDxQ0bIALFAxi3oTeZhtdJ9hX2XwHEqHXjcbDCOy7RgE01FsOGirpJQefZfGvsYw2pr/DEmaAevHEpEB668THYfNtUUxpRjBUBPCJJjB1uLWAfbFIrQTqW0W+oykKtCzmxWrmDCeBgXcaLPSLVZPPq7YZz0hlh9TieczyaTnLY6i4NVlWQTzvQwvRRq52KLiGhkB53798dPvawFLvNRhrrJfVFLOmGsQYOJ3LvTu4dzvLNTxdnINbrimwqjQDdZqt3JGOGuJekrM3677Sh72gNmaqNBc16JW3odFu+WC/eZ8tstUU2WVGYRbmzgVDwraVWByuNsvhfGFSDl/GsYDUeHPn8B4MdsIepSVQSaAszGnvwsTDmvKsHfDuzZ3sW+4KCzQ2v4YGb2eyf8TGGSpk7kx0DSF0KrZAfZPAARVWrSuPB+Er3lZiWd95KcCwevBSAAIJWcHcmbL7xPYUB4uoiDNX+kM8CREfUmPx2MXXEHlAalwensBaGx0RWOvHzJ/XZUWANeUZfrslDdmU55Z5FxiNL7WqwS03Bd3W4K2Tes/M8K3urn93t/Sih0AumHz68cweqzzfHdoiiBji8bjNU/YTjaoJc3zWw0da8/0rx7mrDQXuPI6axhRRPh5+wcCdz+rx6BqzRNCkmai7LQ0WV5FnIn/c1OjSbmU5u9z+LhVqc7uTZKNhGpAiyvH81dOq+Jbfr7pn5fLZ5PkOE4D0yqXHZ3K5WTRF+1EqE1OPz4TKgI/c2RLpNdpLMtC2FyNReIosr3zbx6yQZRyl41F/5FXx+ILHNeWZOxv0Yc5OlDH/dPGfWERNmFnGm6osH7Gl3Amzy4lFNcR5HonurI1QXE2eWWIStq3BKvdtXufVj7z/1lYYVX5QT4wJyRMIKzLrRP0otlYMHWbfuyqxZ0Z7WQFEtL9mJ8zyhqFLWYuUsqaUspYp5Xiu/L4sv5+vmqrAGhnUi2eSzWbGFzHTCazF8FzMCrNgGBoONc5qsP0xj2DiVGTs37M54cRFl45HbT9AwjXlJc56Jtmcdsi0VZA4eWk/RT98UZRY5b/JXpatgvuxDqP4mnw8citc5yRsW4NX7007kH3bYKc2VZxX5wTcWgw3eHlRg0VfXgyhBi4v6qDIy4shb+Bunz64Ua/yfIZyITkVJbiQ8Lkte18Od9IJo3EbGoxeXeWdPKHYtkY8+jL7ToE2xDlnINM+Ff7uY+2OF3cQAqpxz2J2n3Mnr7JPY3Qd7nkMjQGkw/QA7T11OAaQDtfrReYAanH2jl3TumnVf5YVZvyzFBgWyH6gZrdBjFHGRVljgHZynJH8Q/cN3DyyFyXhuTJ6365d0ZP73/FXdi/P/vFwe/73h7uL/3Jd19W/+srQGCHCl8xG/oELxBeut6kNLpq8KJOr+8uHz+dnH89v77pX3bsS4yjBigexUvjNeoe5XG/Vx3HTe+Bw72dCbKuvQD1fdwkyGdasvWznj5y6g6oMKrCiqJXGm8q+O7kGL1tJtua2fsL+ZQJEoo+x6kBF6Vb1I6+aVgKbNUFtWKDqIflFMTscp0CmXYDQhPqSCYGNN3TAyQgIIZCvN1Teelf9gRnsRTkGcwYC1KwNnCgjVA5FgBWYTVGUGTrPIsDOmXFRlOF4T/duHUiWBXC0tA/aW/cpPn2e6EDftb5xqDa5jRtoZ6R270Rumab2wcZkXMZfcHCGc/+K8tul/qSSU/QOxKzL3UZltdU5eE+O78UHYjcpu+mJOLwoSgeyGDqbHGAzZ145UYZDTrEP26VtxEACfeCgXHepWjl0rW+IMl5X+WPxnM8+58+T8v0FjqKtJLqXnhI2YFOpfZfGYIF672tPYgGmmZGwRNZu5Gbbl3aQBjFURPmsKXv2tdg+XedQLhaoh+BGIrqGtEWeX7w5WGyrKAqifbnPw0CoIE2e6dcp10R/jqrAwsY+SLjHpr5J6MEmPEu4h494mdBf57jHCdVap71P6EePWGsBWiwW2IcS9wSobyX6LYB5LlEtO+XFRG+pMY8mKmWmvJvoLzHiqTC1wIRXwvy4uAcUVWjaG4oIdJo7CtBi93bCY4pan494TxFTG9gnFe1aob6qSGFDa6CxbyuiGaEet3MwIr1yh2AUU1eytRRXP9I1g3vy0KJBe/UQxyOibUi3Csrzh04ylBcQ/ZxCzwOqFLAvBIYQw4/26aj4d/v8yMin+1Rw4ut9fvxPyAf8VAKfiG/4+fYOyGf8xr0D8SU/7/od/aSesn4nv6oXannBp970hod+6w2Di3j+yUYnvP+E4UBwuVs6LAbYp/b28NTX9vylpz9yp9oh/p07PyvKs3Mqn5iX5zBMPrZf7KOrKZssUJXLB39wOSe8h+fHpB3nzomv4gX2eeQDW1uJywH3PJ5KgPZCXhAd+0ieQYH6Tp6fB/6hOJUG/aU43zwdxSLqvTrvjB3HI/LlPH+tYJ+QU+uE+oacv0bIDCJesQvVBplD1Ft6Ab938GU7zeuNftcuMH/jHtXTJm3au3r+2qc9rae2gbjX9fxsaA/sqWzi3tgLt4jg43Nmo0C/P+e3BA2b+vad9xwG9/ydcg5DewEvcAZEgya9gxfcQxODF2wlgV0s4nE4YxtLeB/Oe4qPfxhPOYmkv43n4UB4pm48rKa/VOdhQHisbs8g4r26QB/At34uWsTDdXt8xtt1gXG3XCy6RPDVjwzv0zCU+F4FgjNByndI8xwexnvA8R3IzXvUaU9w7CUPvfwV8GO7nH0aTtTRcx+gNbKQiQRp7Tr7Wcyap35BhW8Ztp4oszqSGagnbbPL7Jkygxsa4jVon0p+6IO78HXp+cJB2JIc6baSxalYPeVVwbQgzXXj8tsIMNqeHEQcNhzMQv5kxC63qoRlXM/e3jpvJ+5/x9+k3V2uvPvPqw/by5UPF1cPl3coiFc+dUr/GUsWuqFJs8ErUM83nwWZ9BvCvZQ/ps8g41IVtRTulqbBjHdLM8ipe/2oXbw+N5seBMfJVhLl1Ie4bT+PI2RoSLfv3V0URKo+tXlbagfihXzlAaDmeOxBog5XRXPXakyeEakWx3q0tQ5ks3BmXMBcdnpc2XrsS15PyihylvbBLBdJUFU8GLevRfO0e9+BTtDQPhzLXrhDQyQ+h5naXzgQ24+73NCRVgX0xWewWd4Z5WVNmL9UFVE+y7yahxL275mMwsK1t+xUhkif8IOASq0BeodgRntJxuQX96BMmBXmeROTi2dXQbQTuPr/cnb1+/3Z765cOo5Fv6JF2evgV7CT579v8kAOUXsJO2q5bfX/RGluG0gUWUP3L6I8tKcYwrrmX0T3w+4NkLg9jaX9F9G+G58RiSIO6f+V1HcvkcSTt74gTh9/L9ZeO8jsdDUG241O70TE8TA0RNl0j9HetNYsZxerS6yTwtQRZRS6N2yQib03HOThv6drsIi7pxvmkDUuJ6dJYJAURZ/1LsfgzURzUWtribL62Qt0p53YPYChIbqODN4XNrig7wsjvIyh+8KWbxF7XxhT6lvEnVW77KYWi0W5zlcUr44mz1un9+sFCrahIYZ+m61mpSu+3MNhrye7q1IQukf+7vJAJlGQm6J5UHbB7MVOdlYCYwF2T22NLLYr0UH4vKpK5BDnVhb2iP9Z5D+vVwvknkCT5412efMxajqCFbmjXxwXWJHLZfsQOn4CUhRY2OGsEfZCFpmzIYiNyhphwJOyRmAsH8oaYZsemzUCdzY1pF/Y5ZbFdklIkWsJf/4G2w64/A2o1Rd6iTwKczHx09ooLIH5JVvNN6GX90xsRUmSA77Nm1rsGq+KH+00180soef59GW3oSbEo38YLoKIosdlckY5ddXkhZAvVrNA7n8AfqfE5dAFvc6r1qIzqh0gTRab4UAnkpBbmWshytELNtcMfpVERDeUZMr+/uWjO5zdZYG9Em/l+rJCRiJtJZlegazqr6+G3iJS3AKaBnuOiHAoQmps3wjRCKoCD3uaBV8eHnH3wszVcPehPhAduxRWFQSwgxdnQALomzOEfRB1GySAvDvDoDKw9djzMeZtQW0upjwuiMKmQst4w2gxcYYKe8zbh69RlsW6khyHCAYydUCO/7O1uD6i8WPhdyZVF5Gtx60P9BSAyr6EQqTFsBgaXHRSzIojCj4CeXjVjQRuqvD8MEsyvqkiUP7dVTSSBVQlARsQOdhK3BZ41W/sh891TvouW+PwwiW6UXo/weL3WOX5LjQGR8fQYKE3T9lPCrYmz/RTDt9prfmvHO2iNHQE5ib0cKyK82ajMTQHOQ1pCnzs3eqSgK6o8PE/bmpKybfizL3IkFcOuwfZSzO9PtvIYnw0uqnCs3YxJ+w498I8zG0CQSyqIs4u62W7TEN7wXUFFvaPvCoeX0jopgp/VUnxNO+keeNnl1+CgKvJ88t7U5XlI6HEO3mJMhOwDQ32bq47HKAVXVPhl57KwFbi2uA2r/PqR95/bpBH2wJUleRD9XXAuvxaUr9LqCdDjd9Lr8qG4PoY5bn7fRJyLYY8HmK9L8vv3cNvBaH4oCqLTzabGR9FDtawIm9HOivMEiLJODSZa7P29zyOj1OXtxfL5jQvra7Awm6/QUU3VYS8xJNsTnZSb3W4Y8b4NZqP0NZjRxBkL8tW574q0KbQVFj4rXydUxnYSuz20AzZhfGnJqoGuy3Q0GtJ9GCeQeigFpXtD3U+SoNG5hlE+IMuN4umaHdlg1/tKs9nWBeFU5fbBvefdedotpuhocTri1Xeqew+ieyLlhKLwzL7TiRgaDD92NOn7vmL3ffwsdkOTQGv+u6L7sR0oF9dVxPwrJN5QGp8r8v2c75EfZDvxVAT8DrFMAEVmfuvrtXdtF/4WVbYWw6mDs8a2Q/svDVI8sq7KGsk3E6UOVN86D6Dnhv20uyZET8nCsw9V5vlkMFtUg7ed/QEBGnyd/KETbwAXmT+BYemwBl2n9GbzgbSFDm1Qna4UVri/AQHOgrL+I+I7iMx7xHRecQfR/MMm7xmKzriydxY3e5kL1azgnJvyFKT5jVG4VCpQZrS7PZ9+2xDGCV1JWlO2ygSCiNNRZRPtZ6ex4SjgHrSzPpkEyS3va0kywmX9dgadFlZj8M70XKB9IhtJbnoZnaO7b3Iy2zVNgR8ki9Lzc1LKI2Ijki7iehTFyduznof4ozs0LToctjNo9k5NKXZ3Wy+LYop+eqZoXUYVvSLaKaaOK+qWGbVC/ValqUmymv05Ee5/23fvwCnXTjQ/apzmeSziEgiU/Ug/EYHCpmfqSrKb/QMUz3JAkxcWbiDLsxOoOejbym8O0JEIMT+s/SkIz1lBD4i6wjMgpF2BMsNlXcEZsdKPELhh28acqlHfPxId7tHblGXu3086mxVNF1mONxNkpEJqEjmEp/5cmQikvrSZyNS7suR12GSX+KIorNfQnTl01+iSGPzXwKUxRNgoghTMmACpA+SAhNFnJYDE6B+oCSYePKELJgu+odIg+kb3abrNWZZrsxDqgJ79tG4LMvZZuF3w4489sKyHLY5AqvyGdvddQ1ZNg+ow6+RywN4/CWxMsDmeBq5UJM8+dAJWZ5GAhFpnnwckDnPRnxi0jM/Ni3Lk0oiLs1TYJWIyfOkrQ8piZ4QK1TawlQKFZV3ybkslmBByTWkEYlJNoTjgnGCQVQoCZhCTNDeOJ2I0x3H4hFROW4HXCQT2pxOTAWFww7ngoII4JNBhVhgopt1BpTgZu8uPxghoyyn0CEygfmBskwgBcmERwGsb9ccBVzO3dgRmuosoKe+8K6QWt2quSobUlXYWuIena/kJa2lJLuqpZ3uKX3lMMd7JKrENeiBD/gCNY/LS6rVO5yYVIIPNXOv4tQLpMsVslYkO1hT3Ha081DNeDIHogHrxfITO7AN8KMlY9T4+VMxSvCLyRc5UsQkjBSyIiKHo2Y696NdMr2VyseZVFLUPogsk4CVgDSTImNHKO+kMlaYiSdF8LGZKBUerlSUMnxwOSFVOnBSSBE2iCyRChMgTaQEC2zeSNW5BieOlGODzCRpUnKkkhTq35jMjlrXhlI6CnGhZJvUOPnSTQpxo91m0Nj5rzMI8cMEgELOAXEu+KyVZijAoRhR4qK0ZSY7MAq9vycFJrjSa8rVHtnx4E14KVSHlAyYWjX6UmAK1WTgZolWf/BjtHwGhCZ0iBkXnadTZwJeKxLbIVHuYBk7JN8lLCF+tFtZGj//tSw5fsHknyYr11O9LC74XKgjHXcyVAlG+OyoipPamR5VzkZ/oC6omFb6w3c9RcBOVFa+FKpS67m4nKr6wg6XVFWCMTrL6kjQmWZVgg8y7+rIxpF4VaSN4TOxqidGzlSscuso9LIAvOYqyYO2kDvE+gCbNVZZujnSxoqxQeWRNfiAiWTFGAUzyxpsrNSyMt6K8F1p1UlhX5YWZIFtuGDKWxlPNvUGi+rHlrrCgmGIv8NiM+RfYsEwjGF2GEaYzMJKXwNSC4uwQOUaVniAyYal7IHJ/6vbBEr/K8EGn4945ONOSCy2w/6DEgJlJwoWmc9xOYuVCR1OWixmk3CCVsMqdmpWQbtQ2DgTG0t593B5hnXfHpxmWMxCZE6+5MdCdiJmQ9bsFUiHfACGZD97KEGyWN2iMyYbtetMmSw2RgRz0RhDhJWMRpQJyU9qJ1UW8maTrAKn6BFlgl6CHM4q9NzT+oGWP/m0BENqNuqRXygdtYgHkJqfWnEDhhJUy+wCFtSM1ep2wKEs7NdCZpFWHFuOJNISbPBZrUc+7rTWsifNwTzX0Gmzleha9nwXlfkaOuIFU18L2QuZiVozlyMRtQSjNSE79sjJ1pJvV6iM1XqrAlNWS7UpIh9nCm2xmDNEYmuFjiOptlTEGZEMmGZbxvtPzrutngIEE2/LciTzOkRPQ2cF1zqbMy24yKhEyBOujEqeROESrNCZw0dKztThMme8xFzi6kFvIJm43Bk0Nqu3eQrtSustdw5NZ+ZPOC7meUXn/Tb8r86033Le6ShugaTkMj4PdJZy1eHhTFMuYrFQ3nLFRGbi8tjLXY4cXZ82gXSXnUBPRWMRyhl0959XHx5uzm8vrj8+XFw9XN7hMF759C0bBO/i9YVzMP2EpfTp7m+JBLrWAobcGefPRR3YsI08DBWlLiLwy3W+QjhRR3RNgYeNzuM2opPzuGHxUbnSYB6sXGkUfsHZ283PNXuL8UPkwYPZMfLg+biR8riNzKLyuAV4fCKAf5Ls0R+zJiP36q2SbG3sktK9D16EGCmZOjyr7L42eSaNN4CaDA/MsZBNg/Jgpo/FrDvCKfqcW8NNEyQPSE+MSSisAaSBfUgZywEVWQ0zIT14geSDCRgG2UBRwzFcugRSE/+mf8QfhP+WCvSSwLpY7Ro/chFEUr5Nu2sy77L4Vqik/Jv2EpqVf9NnM1L+zZHXYfJv4oii829CdOXzb6JIY/NvApTF82+iCFPybwKkD5J/E0Wcln8ToH6g/Jt48oT8my76h8i/6Rvd1lnzhCS6FZXd/68xHiGVg9sXxOKxQKWqGYksfHlqWEwesRQeD4Dd/obKMKSw0FUOx+dzu1UNZGeFWe0VZblV+f+0uverbNM8lVXbf7FtGFQ8NLdhPLmI56h8QJZrl/Tjph3AytnF6hK97jOV5Dl9KdttObYXaAqyXL5V5c92Y3GZFasb/GBta4l7eIZcNpfZ803edrJwIhzN1QIr83YRRT18tcuVgu6NlhKXAxFdCLe/39i0U+P3ycsaO0paSmwOt3ndlFVObQ2mGnM3GccDUPvLd+9sTGye7BGYmifbh07Ik63ONeQ82YFWiMs7qLVAOO9gZOsjZfLTGqA3kx9rnCazCeUVjBsdaXnE1YEyLo94wDaYPOKaSSh5xAPYhNl8lGaj0pL8aRT8Gf7ifK30vIOqwzWcdzDSStQJTGjGoOQVBHqqHAt0HkHACkAewahxNJQ3UF998/GweQIVXFeewDh8XF5AFR7OCxiFjsgDqCADeQDj1gu4vH/qYgHO+xePjszzZ1Jw5PmL7G+YHHpaV4Ny50ViU/L4aRx8efwiuaBuT2gkSFnzcehkcDY2PgufGcYhxYCS304P2HDlt4u3A/kU0JvPLnINT8lfpy3hffnrImsGPzAD2eJiMYln8c7scJH4tLN3RzazGGx89rIR3p29LGqXhM5WpuyPnNnK4m2AywNmWgHOAxZvByoLXzayaM9aVPYxw9GGyj4WwxCdbUw5H3FlG4vBR2YXG9Ed2cXiPArobGKqM8GZTSx+1sIP0nDWrqh5CpmlS5mgHFm6otFRWbkMfDArVzSDYBYuA93KwhW3d0Dku1L3DEC+qziPCTY3k+onceVmirI5IheTYnEgF1MUKir3koIL5l6KLS8mt5FeZiizUQw6PrfSiO/OrRS9/gxlMDJWoGb+oqhRFZc7SRlW4dxJ0WUOp2YxSm3nZGGUm4LuzI0UuxPE5R3S94Fw1qFoC5A5+HIfRdqBmOvIPNL05ToSYET2VoRyG0XXFTqXkVFbzlxG0X02nBvH6LN2bpxIfwEN25GXJ9ZvRcvDo7uw/Hl4YhhR8+5oZ9HenDFRe1lqnh1lQxvKsxO3gltQ8+qoSzmHMnMHh8xbo2zhHFlrYtDxeXNGfHfenNg+hMyTA/l/rTw5kWMIJS+ONpb48uJE2gOZc8Y4owYzzsQwWBPy3owcbC1+u0DlldFbBZhXJrZNEPGdeW2i8JF5bIwjUSB3TBw6Km+NfiAqhB2Rp0b1LwXz1PA4kXlI9AR0HhqtMzjz0ESNCoS8M8qo4Mk7E8MCnWdmpODMMxO1oqHmlVFd9IG8MnF8KNlazPMCV7aWqB5CyhtjnhlIMqHliTF8R85MLPGesygugbwwkeMI4WL8HLgRH7dLRWefUbeozuwzUfVAu1XLL3P3oDu2qFtZ/kkZ6d1F/YDM++5itEeA4gyQQKS9YqYR8L9iFsmH9mqZeaLuebUsqk1i3tmxD8rYuJg3UqzDGjmPFNUhJeePorqjJMo8CN1U5TPhzEBXGjlI3FX6lk2/z6t2gzy7w8eUWkqynKr8scrrp+HaAX6HA6jJ8mpbwvuoC2egIpubdhNuul7TAsQ1BTcXkYvUy3K2QV9P3QsfmNRPclf8ieyHIvQeivpDt/LArshUeXlqxl77zyL/eb1aYA2nKVjkWFy2abHwg6krH5oEi11yLhobRUuc1U1V/OjCP7ujP9I5ta14KG5d04ihNurJM9t8WxRTOjFD7UC8IirT1BNnRr4v5Zl7hLhcrGbo3bytJcuKOJb7hnKBXrfMqhdyhVl68iMoNbTd1JFl1H2ratqFP6nqbK0DrxOm+xuol9mqnUWwN4shvb+aKvEytE//wEuedgX/IdLQDlXx7hPLz6Eqy288h407vY1/0sQfbkB9EFWNNpB6EBXDEP8gqs2Q/yCq2amtRN33TbFwjdr9bz0j3YHiGCRubq//8Z8Pk+uHr9e3f5zfBj/6ylbweWkGpg7sq/vLh8ur88vrq4sP3ec+uhJwK/CgTjSDs/supfjDPy4RBddkoxFvL65+f7i7+C9X7kYFUBWl4NESCyiA6JwCXsR6u2eflF/L6rtzXFRwAY1o9B/Zopi125XLVXcLvXC52BR0QCMavd15d19DbbUUCi41Ng/Exgqg4dxXsawR2Ec5zQHuozj2oBNx7+ciWye1gTj1+ExoTcSlJmURfN24FYVsEkFFrJ0QkqPo4zc1Awmm16DxLXl2TaChbQX2WDGE7jnTFALDhKLBb4N4eEiF0/K666CT57Yxoxq/rRCNvd4VoD7/303m2rUo2LZCNPYyr+bu02AFcxSMxvqfulxNyvfFKnMGWyuAhnQ06rf+C5PyP2rMWtCQZqLuoiko2IZONIPnZTUpz5pyWUzvV4UzqlvBBzSi0bPxM5PyH0vEahjQYIxln/Pn02PMELYTpJyTmtgnSap6n+qm2kybElFmXZi0uVI2x5OnKs9mN2VpDx3jT96tMbYAxudQ/BV2jr1hk9Xf/77JN/aBlomnSuIqLIw+q7Ji5U5XaFKwxBk8gCDBIP5ejGBtvWf+zIrmbBFsK68UwTDWf//6S9Gfafz7/3UXZvvN9L//kv529Nu7VuWxyBezVv2fA4n2g+Wym8F++e/tb3/mXRvqJAaRf3v9y6//fP3rSfLbm6N3//3fv/5zp9H/0P+hF0vafyW/vnn922miSSWaVNr+KwWkUk3qqP3X0a9vTn57k7zVxI40sXaw+OcxJHasiZ20/zqBxE40sdP2X6eQ2Kkm9qb91xtI7I0m9rb911tI7K0m1lbJP99BYu9043a2Tl5DgolRDX09JKCkXhVJZ/N2tIEk9epIOrMnYIUkeo0kneUTsE4SvVKSzvgJWC2JXi9JZ/8ErJlEr5qkq4IErJxEr52kq4UErJ9Er6Ckq4gErKJEr6O0q4gUrKNUr6O0q4gUrKPU6C59fwHrKNXrKO0qIgXrKNXrKO0qIgXrKNXrKO0qIgXrKNXrKO0qIgXrKNXrKO0qIgXrKNXrKO0qIgXrKNXrKO0qIgXrKNXr6KiriCOwjo70OjrqKuIIrKMjvY6Ouoo4AuvoyBjW+nENHtj0OjrqKuIIrKMjvY6Ouoo4AuvoSK+jo64ijsA6OtLr6KiriCOwjo70OjrqKuIIrKMjvY6Ouoo4AuvoSK+j464ijsE6Otbr6LiriGOwjo71OjruKuIYrKNjvY6Ou4o4Buvo2Jh9+ukHnn/0OjruKuIYrKNjvY6Ou4o4BuvoWK+j464ijsE6Otbr6LiriGOwjo71OjruKuIYrKNjvY5Ouoo4AevoRK+jk64iTsA6OtHr6KSriBOwjk70OjrpKuIErKMTvY5Ouoo4AevoxFgk9KsEeJmg19FJVxEnYB2d6HV00lXECVhHJ3odnXQVcQLW0YleRyddRZyAdXSi19FpVxGnYB2d6nV02lXEKVhHp3odnXYVcQrW0aleR6ddRZyCdXSq11G35/vnKVhHp3odnXYVcQrW0amxlusXc/BqTq+j064iTsE6OtXr6LSriFOwjk71OjrtKuIUrKNTvY7edBXxBqyjN3odvekq4g1YR2/0OnrTVcQbsI7e6HX0pquIN2AdvdHr6E1XEW/AOnqj19GbriLegHX0Rq+jN11FvAHr6I2x5O7X3PCiW6+jN11FvAHr6I1eR2+6ingD1tEbvY7edhXxFqyjt3odve0q4i1YR2/1OnrbVcRbsI7e6nX0tquIt2AdvdXr6G1XEW/BOnqr19HbriLegnX0Vq+jt11FvAXr6K1eR2+7ingL1tFbY2fUb43gvZFeR2+7ingL1tFbvY7edRXxDqyjd3odvesq4h1YR+/0OnrXVcQ7sI7e6XX0rquId2AdvdPr6F1XEe/AOnqn19G7riLegXX0Tq+jd11FvAPr6J1eR++6ingH1tE7vY7edRXxDqyjd8YGtt/BwltYcw87bGIdu1hjG/u638e+hjeyr42d7Ot+K/sa3su+Njazr/vd7Gt4O/va2M++7je0r+Ed7WtjS/u639O+hje1r41d7et+W/v69NejN7+dnqSGsLGxfd3vbF/DW9vXxt729Vvfl43t7et+f/v6LeS5eW1U4NYL8Q6StdwQgx/i9a/Hb39LXx8Zwkb9Da4Il9fCqL/BG+FwXJj+iMEh4fBdmC6JwSeRHP96mv72Jj0xhI36G9wSDg+G6ZgYPBMOJ4bpmxicEw4/humeGPwTydtfT49/e3NkVLbhoUh6P0Ti8GYYToqkd0UksEMjSU1f0uBMAh2Ahqci6f0RCezVSAxnRdK7JBLYsZEY/oqk90oksG8jMVwWSe+YSGD3RmJ4LZLeN5HAHo7EcFwkvXsigZ0cieG7SHoPRQL7ORLDfZH0TooEdnUkhgcj6f0UCeztSAwnRnKUetr+kekPHByCcH81XBnJ0bHvy0YNHp14xi7DoZH0bosEdr0khk8j6T0XCex9SQy3RtI7LxLYAZMYno2k918ksA8mMZwbSe/CSGA3TGL4N5LjoQbhhmS4OJLekZHAzpjE8HIkx0MNwg3p2HTqDl5duCEZvo6k92gksFcmMdwdSe/USGDHTGJ4PJLer5HAvpnEcHokvWsjgd0zieH3SHrvRgJ7aBLD9ZH0Do4EdtIkhvcj6X0cCeynSQwHSNK7ORLYVZMYPpCk93QksLcmMdwgSe/sSGCHTXJieuYH1zxcg4YzJOldHgnstkkMf0jSez0S2HOTGC6RpHd8JLDzJjG8Iknv+0hg/01iOEaS3v2RwC6cxPCNJL0HJIG9OInhHkl6J0gCO3ISw0OS9H6QBPblJIaTJOldIQnszkkMP0ly6htFT83jleF8Ba5uw1uS9D6RBPYAJYbDJOndIgnsBEoMn0ly+s7H2ajB3jmSdE4je7lhOE6S3j2SdG4jQNaov95B0hYaXE0Z3pPkzZFn6WU4UJI3Q/29AWdBw4eS9J6S1kK/nr75LT02hY36ezPUH7gqf2MekA0nZHArMnwpSe8xSWCfU2K4U5LeaZLAbqfE8Kgkvd8kgT1PieFUSXrXSQI7nxLDr5L03pME9j8lhmsl6R0oCeyCSgzvStL7UJLOC2Wb2fCvJL0XJYH9UInhYkl6R0prIrAZGV6WpPeltCYCW4bhaEneDqec4KLccLUkvUMleQudzSeGsyXpXSqtgcC2bPhbkt6r0loIFjaqr3esJG/Bvmo4XZLetdIaCLSb4XdJeu9K8hasPcPzkvT+lQT2UCWG8yXpXSwJ7KRKDP9L0ntZEthPlRgumKR3tCSwqyoxvDDJu+GYGu5+hiMmHRwxsMMqNRwx6eCIgZfvqeGISQdHDDgup4YfJh38MOC4nBpumHRww8Djcmq4YdLBDQOPy6nhhkkHNww8LqeGGyYd3DDwuJwabph0cMO8O/71OPnt6I1pZeMEe3DDwO6S1PDDpIMfBnYOpoYjJh0cMbB/MDUcMengiIEn4dRwxKSDIwb2J6aGIyYdHDGwSzE1HDHp4IiBvYqp4YhJe19LCrsVU8MRk24dMbCdDUdMOjhiQN9Yavhh0sEPA/rGUjNQZBspAgeAmLEigxvGUSVWuEgfLwI7QlMzYmQIGYEdoakZNDJEjcCO0NSMGxkCR2BHaGqGjgyxI6/hBmpGjwzhI7AjNDUDSIYIktdwmzNjSIYgktdwmzP8MGnvaknhgKzU8MOkR0O4D1zdhh8m7V0tKezdTA0/TNq7WlLYu5kafpi0d7WkcHBWavhh0t7VksLezdTww6S9qyWFvZup4YdJe1dLCns3U8MPkx55XNmp4YdJe1dLCkd1pYYfJj0eahCubsMPk/aultQR22X4YdLjIWYLrm7DD5P2rpbUEeFl+GHS3tWSOoK8DD9M2rtaUlecl1GDvaul7ZnglGn4YdLe1ZI6or0MP0zau1pSR8CX4YdJe1dL6oj5Mvwwae9qSR1hX4YfJu1dLSnsC00NP0zau1pS2L2ZGn6Y9GQIvINr0PDDpL2rJYWdkKnhh0l7V0sKOyFTww+TnniOk1LDD5P2rpYU9limhh8m7V0tbTcGV0iGHybtXS1tN/71pF0hnRqyRgX2npYUdlimhhsmPR0qEK5tww2TDm4Yx9LLcMOkvael7fLgos5ww6SnQ/Ak3DQMN0zae1raLg9aznDDpL2npe3ysLBRgb2npe3yXVh2cmIsNww3TNp7WtqSQXVieGHS3tGSws7N1PDCpL2nJYWdm6nhhkl7V0sKOzdTww+T9q6WFHZupoYfJu1dLSns3EwNP0w6+GEc/cTww6RvhgBYaAOdGm6YtHe1pLAjNDX8MGnvaklhR2hq+GHS3tWSwo7Q1PDDpIMfxtH0DT9M2rta0hNwC2a4YdLe05J2TlNA1qi+3tGSwj7T1PDCpG+H6nME+hrV13taUthnmhpumLT3tKSwzzQ13DDp2yGEGe7Zhhsm7T0t6f9P2d0ux5Eja4K+l/7d1paAfwCYO9hrGFtrY0msKk5Looaiurp2bO99M+EeocArd1Sv2bFzdApgMJmOiEA8cEfEDFqBYeqklhozaAWHqX3DoBUgpk5ruV92/i7jH1p57QwQU0fJL83gMHVaS42fzcFh6qSW+ng2L/+4CVy4wGHqtJaaPG4DxNRh8Qufv8Bh6rDwhc9fwDB1tM0dDRimTmm5X83C2wMwTJ3SUlt4wQCFoQkttUXiRoAwNJ2lPsA06Avp6NNZaosMhsBgaDrL/VIWzfsIEIams9QWXQEIDIYms9RQSwkIhqay1BaFmUBg6GblA1GYCQCGblZAcPu73P5x0wGdIT39trluEgAMTWO5X/Wi844AYGgay/2qF3eG4JWa39gJAIYKpTd2An+hSSy1hyMI+IWmsNQejiDQFzJ96RKd/QT6QhNYag8vFQT6QsXCF14qCPiFJrHcL6ZxZwif+UsPBxHwC1mtzoNsg75YCDKDN6KznwBfyPBlhGc/2At5xU44jySwFzJ7ieeRBPZCZi+Doosbgb2Q2cv9FAk7Q/TMXkZ0ByGgF/L6nfDCggU8Ji8jvLBgCY/BywgvLFjEY+4ywjHxUxnPrOO5hWMCC3mskucWjgks5bFanls4JrCYx6p5bhReubGexwp6bhx3hshZTc8tjBwW9VhVzy2MHIgLsdVetXD4gLjQRJX7RTruDLGbqEKhvRKAC01ToRLGDryFJqlQCWMH3EJTVKiEsQNtoQkq9yv034X+cSPsDLHjjVgTaAtNUKHY+Ai0hSaoUGx8BNpCE1TuF/QwIKAtJBuzJtAWmqBCJTyjAVtILHpxwRlgC4mFLxwWYC00OYVqOCyAWmhqCoW5jgTSQhNTqIbDAqCFpqVQzHsE0EITUyjmPQJpoYkp94v/36XfJzcQD5AWmphCNTynAVpIrfYxjB04C01KoRpejYFZyJglmboBs5BluyRTN2AW0t25B8xCujv3gFlowywEzELGLPEMC5SFTFmSSRMoC5myJPMgUBYyZYnnNoAs1DbzFTAWaryZgoCxkBlLMqsAZCFDlnimAMZCZizx3R+IhVrP7+ggLNRGfpcGYKF+29x4QViol/xmCsJCvW7ujyAs1Df3PAAW6pzfx8BXqNtFMy7qBV8h95XQKgh8hcxXQqsg4BVyXgnnK6ArNAElsQoCXSHXlfgBBHSFTFdCqyDQFXJdCW9MoCtkuhJbBYGukOlKbBUEukKmK6FVEOgKma7EVgG6QqYrsVUArpDjSngdBFsht5XYKgBX2HElOpcYcIUdV6KbGAOusONKFGYGXGHHlSjMDLbCZiuxKDDgChuuxKLAoCtsuhKLAgOvsPFKqAQMvMLOK+GTPwOv8M1ueOG5xMArXPLncwZdYdOV8JmbAVfYcSV8jmbAFTZciR+NGXSFTVfCp10GXWHTlfAJlkFX2HQlfCplwBUu9pAXfxMQu2L3u/DpkcFWuNgNL/7jIHR185DHYCtc7YYX/nVgK1ztKSH868BWuNo+G/EWEoArXDcLQgy4wtNPKF4ZZsAVnn5C8cowA65w3Zg0A67wBBSKl5EZdIVrviTLoCts+6PES84MvMK2RUq8iszgK2y7pMR1LwzAwr5RSry7BQgLm7DEy8gMxMK0eVZgMBY2Y4nXnBmMhc1Ykn1LwFjYjCXZugSQhQ1Zkt1LcPMUy2tJrnG4f4rltcQTdcYtVExZkq1RcBcVY5ZsdxTcSIU3tyjcS8XyWsLHLMbdVAxakqsRbqjCdv0Mp9SMe6oYtCR7uuC2KgYtybYuAC1s0JLs7ALQwtNSKNncBaCFDVqS/V1AWtikJV5UZ5AWNmmJK4YYqIWNWuKFcgZrYbOWeKGcAVvYyouSSzloC5u2xKvqDNrCpi1xeRGDtrBpS1xexKAtbNoSL5UzcAsbt0g4+wRuYd0syzJ4C6sFMB4a4C288xYGb2HzlngNnsFbeJIKxWvwDN7C01QoXoNnABeeqELxGjyDuPBEFYq3pGEQF56oQvGuNAziwlNVKN6YhoFceLIKxXvTMJgLT1ah8PmTgVx4qgqFz58M4sJts77HQC7cNut7DObCZi5xLRIDurChS1yLxKAubOoS1yIxqAv3jVUzsAsbu4TPtgzqwlZdFPMBA7uwsUv4IMzALmzsEtc4MbALG7vEksrALmzVRcmZDe7C3eIXPmKDu3C38IXPPMAu7NVFIWIwsAtbdVFcPMXgLjwsevHdEuCFp61QvEMQA7zwtBXqkbAxuAtPW6F4myAGeOGJKxTvFMQgLzx29z+gFx62dR9FawIM9sKTVyjeXIjBXmT6CsX7Cwngi0xgoXiLIQF9kSksFO8yJMAvMomF4jIuAX+RmwUw3lcN/EXMX+JnNQF/Ec9uCYezgL/INBaKC8QEAEamsVBcICYAMHKz/Rfj7fUAYMQAJnxkFAAYmchCcTGZgMDIRBYa0WVOAGBkGgvFVU4CACMTWSiuchIQGJnKQnHhkgDByGQWiguXBAxGzGDiwiUBhJHpLBwXLgkgjExo4bhmSEBhpNoWmhHXCiCMTGjhmIIEFEYswyU2WAGGkSktHJcMCTCMTGnhuGRIgGFkSgvHJUMCDCNTWjguGRJgGJnSwrewdlCAYaRaAONoA8PIpBaOS4YEHEYmtXBcMiTgMGL7vMR3bQGHkUkt4XbeAgojE1q41OgOIaAwMqGF41IkAYWRCS0cpykIKIxMaOE4TUFAYWRCC8elSAIKIxNaOC5FElAYIYtffB0AhRHbwzauLhJQGLFtbOPqIgGFEd/JNh4ZoDBim9nG1UUCCiO2n22cfiCgMGJb2sbpBwIMI1ZdFJuUAMOIVRfFJiXAMGLVRTHSCzCMWHVRvNIsuMHtlBaOd4cS3ONWLILxqMNtbsUiGI863OlWLILxqMPNbsUiGI+6n/a7nRGMkVxwy1vZLCIJ7npr1UWh0AnuezuhhWNQF9z6dkILx6AuoDAyoYUpHhqgMDKhhSmclwDCyIQWjtlbQGFEbTvpZLdgiN+EFo7ZW0BhRC1+8cgAhZEJLRxLtoDCyIQWjiVbQGFkQgvHki2gMDKhhWPJFlAYmdDCsTcLKIxMaOHYmwUURia0cIy3AgojE1o4xlsBhZFme4InWz5DBCe1cIy3Ag4jk1qYI7MRYBiZ0sISPY0KKIxMaGEp4YQHFEYmtLDUuDPEz3Nf4oklKIx47kuYKCOgMDKlhZMNwIFhZEoLJ3uAA8PIpBZOtgEHh5Fu27rHIwMcRia1cLIZODiMdAtgsh84bh1uEYzPbYAYmdjCMccKSIxMbGGNxwZIjExsYY3HBkiMTGzhmGMFJEYmtnDMsQISI1NbOOZYAYqRqS0cc6wAxciwvfnjCALFyNQWjncLF6AYmdrC8YbhAhQjY1MgJkAxOrWFY2NVoBid2sKxsSpQjE5t4Vaj26sCxejUFo73e1KgGL1tFuQVKEadYiKpUJAYndjC8UZSChKjN3u/QrzZPEiM3uxBMHreVoAYndbC8aZTChCjxeIXb08PEqPFnuTDZ1cFidGpLcljvwLFqO/0Ej5hKlCMls1qrgLFaMlXcxUkRovFL1ygVZAYLRa/eBN+kBg1iYn3eFeQGDWJif1WQWLUJCa8bStIjJrEhLdtBYjRaS0cu7ACxKhBTLyJvALEqEFMTL0KEKMGMTH1KkCMGsTEtxMFiFGDmPh2ogAxWjeTGAWI0bqZxChAjBrExDytADFKm6UkBYhRsghGSyIKEqOWDxNbvYLEqO3zEifaKkiMmsT0aNlQAWLUICZMy1NwGDWHCVPLFRhGjWHCFD4FhdEJLSFfKRiMusGEfKVgMGqZMHH+pYLBqO3wEudfKhiMmsGEifMKBKNGMCNaXlQQGDWBCSldAWDUXisUpicq+Ivai4ViSVfwF+XN/jwK/qL+eqH4Zgb+ouYvMbsr+Iuav8TsruAvKpsTD/hFZXfiAb+o7E484BeVzYkH+qKyOfEAX1Q2Jx7gi8rmxAN7UclPPHzvkO5OPHz1kO5OPHz7kO5OPHwBkW5OPHwFkW5OPHwJkW5OvJ9eQ7Q58fBFRFNWJF4OUnwXke5OPHwd0ZQVuZWIVBXYRZu92iueWQC76JQVibeQU2AXnbIit3AnSQV20SkrcpO4M4RvyorE60EK7KJTViReD1JgF520IvEWcgruos0iGF+GAF60bXYnUIAX3e3qogAvarvrxlVrCvCi3d7PFo86gBftm+0hFeBFp61IvIalAC86bUXibe8U4EWnrUgJz1ZwF520IiU8W4FddMpKdrUHdtEpKxIvSymwi05ZkXhZSoFddMqKxMtSCuyiY/fQB+yiY/fQB+yiY/fQB+yiw+IXnyfALjosfskL0iCAU1YkXh1TYBedsiLx6pgCu+iUFQlrcxXURSesSA2HHKBLm64iNRpyDcylTVaRGt0gGpBLu6VLtw3Apd02S7cNwKVNU5F49aoBuLSJKhKvXjUQl3az2MXvYwNxaTeLXfxKNhCXNlVF4tWrBuTSpqpIvMjUgFxa2aBnA3JpZYOeDcilGbnET6kNyKUVY+vkyBDBqSoSL4w1IJdWNi8HaGAuzbJfwuL8BuTSpqpIXJXSgFyaVSCFRfQNxKVZAVJ4ojYAlzZRReIKlgbi0qaqSLyU14BcmuW+xDfsBuTS6ubi2YBcWrWa27AmvQG5NHvHUXx3b0AubaqKxMuPDcilVYtffGoDubRqJ2B8agO5tGonYHxqA7m0qSoSLz82IJe2I5cG5NImq0i8VtnAXNpkFYnXKhuYS7N3HCXhBnNp01UkXthsgC5tworEC5sN1KVNWZF4YbMBu7RJKxIvbDZwlzZxReKFzQby0uwdR0lQQF7axBWJV0EbyEtji+AIuLgBvDQrQQqLJRrAS5u4InG1SwN5aVNXJK52aUAvzd5wlIwMsJc2eUXi0pgG9tImr0i8CtrAXtrkFRF+XGLuvxY6Q/zs7c4SoXwDemlWgRTWHTSQl2YFSGHdQQN5afaO53hxtYG8NHvNc7y42kBemr/pOR5wQC/NXvYcL642sJdm73uOF1cb4EuzVz7HtS4N9KXZW5/jWpcG/tImsUi8uNrAX9okFokXVxv4S5vEIho+lDfwlzaNReLF1QYA0yaySLy42kBgmu5ugUAwTTcbIzcwmGYGEy/bNjCYtjOYBgbTzGDuYz+gq4ZvhTaDeeSMB5M/fDG0GUwrfxf9RxWYl+C7oc1gHsu2P1foNHw9tBlMC1OoGr4h2gymhdl1DV8SbQbTJLwc4XuizWCahl/dT6+KnhFsLf7qIIKTWaSFD88NXxg9mUXaiL9niOBkFnlMFoPOYDDNDKaXMChgMG0yi/Q4gmAwzQymxxEEg2lmMD2OIBhMM4N51IVFnSGChjA93DysgcI02/slmWeDwrS+eclKA4VpVoWUzLNBYdrYKFoDhWnDIhhfvkBh2tgoWgOFaYM2ZzcoTDOFiUteGihMM4WJS14aKEwzhYkLUxooTBubMrIGCtNMYZLTChimGcMkpxU4TDeHietjOkBMN4iJ62M6SEyf3CJxzUsHi+mTWyR+6XcHi+lmMXHRSweL6WYx8VJdB4vpZjHx6lsHi+m3TSVZB4vpZjEj3HOsg8V0s5gRFux1sJg+uUVv4X2wg8X0yS0aV8h0sJg+uUXjVY4OFtMnt2i8ytHBYvrkFo2rXjpYTJ/conHVSweL6dNbNF7l6IAxfXqLxqscHTCmT3DReJWjg8b0KS4ar3J04JjulUjhHbYDx/RdKVIHjulTXDReuOjAMX3HMR04pk9x0RIul3XgmD7FRUtY29CBY/oUFy3JHwgRnOKiJUyJ7cAxfYqLlrAwqwPH9CkuWsK3qXXgmD7FRePViA4c06e4aLwM0IFjOlkE44EEHNOnuGi8DNCBY/oUF42XATpwTJ/ionGRTAeO6VNcNC6S6cAxfYqLxkUyHTimT3HRuOCkA8f0KS4ak30HjulTXDQm+w4c06e4aEz2HTimT3LRmOw7eEyf5qIx2XcAmT7NRWOy7wAyfZqLxvzdAWT6NBeNlboDyPRpLhprcgeQ6WxpvKHvdwCZbskw8cpBB5DplgwTrxx0EJluyTDxykEHkumTXTQW8A4m08UiGI86MJkuFsF41IHJdLEIhqmdHUym71511MFkulgER3xkiKC96ijO4OlgMt32hIlXizuYTJ/sovFLhjqYTJ/sohw+D3YwmW4mEyd3dDCZPtlFOcza7mAyfbKLcny3ApPpKpt5HZhMn+yiHD5pdjCZPtlFOb61gcn0yS7K8a0NTKZPdlEOraCDyfRmEYyHKJhMbxbBeNSByfRWN7NcMJk+2UUlHkhgMn2yiz6uG1FniOBkF5V4bIDJ9MkuKiEsdDCZPtlFJQ43mEy3vJh436IOJtOb7eca7rHSwWT6ZBeVkCw6mEyf7KISkkUHk+mTXVTCfcY6mEzvFsF4IIHJ9G4RjAcSmEyf7KIajw0wmT7ZRTUeG2AyfbKLajw2wGT6ZBfVeGyAyfTJLqrx2ACT6ZNdVOMIgsn0yS6qcQTBZPpkF9U4gmAyfbKLxq8B7mAyfbKLahxBMJk+2UXjzUI6mEwfm6LcDibTbVfeOM+yg8l025Y3zrPsYDJ9pJmhHURm3DaZoQNEZkx00RYO0AEiMya6aFyONEBkxkQXfbj2z5eYASIzJrrow7WjzgydLbcwTHEcIDLDRCZOcRwgMmOii7Zw6A8QmTHRRVs49AeIzJjoorGYDxCZYSITi/kAkRkmMvHj7gCRGSYy8ePuAJEZJjItPKkGiMwwkYk3lBogMsNEpodT7QEiM0xkejjVHiAyw0SmJ98GRNBEpiffBkTQRKaHM6QBIjMmumgPZ0gDRGZMdNEeXhYHiMwwkenhZXGAyIyJLtrjCILIDBOZEUcQRGa4yMTfBojMcJFJvg2IoInMiK9IIDLDRGbEVyQQmWEiE+9jMUBkholMvI/FAJEZJjIjvm6AyAwTmRFfN0BkhonMiMcGiMwwkRnx2ACRGSYyIx4bIDJjoku7xWMDRGbYy6fj3QwHiMwguwuGM9EBIjNos8H5AJEZtklv/JaOASIzJrq0WzzqQGTGRJd2i0cdiMyY6NJuFOR5DACZMc2l3eJBByAzprm0WzzoAGQGWwDjQQcgM6a5tHhH3wEgM6a5tHhH3wEgM6a5tFs86ABkxjSXVuJBByAzprm0EgcQQGZMc2klDiCAzJjm0kp82QCQGdNcWokjCCAzprm0EkcQQGZMc2nxu6EGgMyY5tJKHEEAmTHNpZU4ggAyY5pLK3EEAWTGNJdW4wgCyIxpLq3GEQSQGdNcWo0jCCAzprm0GkcQQGZMc2k1jiCAzJjm0mocQQCZMc2l1TiCADJjmkurcQQBZMY0l1bjCALIDH8tUrj0PwBkxjSXZE1nAMgM26U3XvofADJjmkuy9D8AZEazCIYGPgBkxu7t0wNAZtibkeLN9gaAzJjm0mJdHwAyY5pLi3V9AMiMaS4t1vUBIDOmubRY1weAzJjm0mJdHwAyY5pLi6V6AMiMaS4tluoBIDOmubRYqgeAzJjm0uK85wEgM6a5tDjveQDIjGkuLc57HgAyY5pLi1OZB4DM2CXJDACZYUky8SLsAJAZY/N+qwEgM6a5tDijegDIjGkuLU6SHgAyY5pLi5OkB4DMmObS4iTpASAzprm0OEl6AMiMYRGMBxKAzBgWwXggAciMaS4t3rp/AMiMqS4tTmYeQDLlNtmlxdnM3rp0n0GMU5S9dek+wxgnKXvr0n0GMt6syVuX7jOU8XZN3rp0n8GMc4q9dek+wxlnFXvr0n0GNM4r9tal+wxpnFnsrUv3GdQ4t9hbr90nxbQ4u9hbl+4zqnF+sbcu3WdU4wxjb126z6jGOcbeunSfUY23cPLWpfuMapxn7K1L983qobcu3WdU48Rkb126z6jGCcTeunS3qCaDoGBUJ8+0eDsnb126z6jGGzp569J9RjXeNt9bl+6UT9a8dem+KZHx1qX7jGq8ZZS3Lt23Ua0Y1Yk1Ld4KyluX7lYqE5WdeOPSe85iJSpt88Zrb7KYJqOdMKZW8BTWUHjj0ttCmpwbhCGdatPCbfq9cek9z9N4O31vXbpbRJOxThhRc514TyZvXbrPiMa7Mnnr0n2ep/H+Sd66dJ/nabyDkrdeu3O+f7o3Lr3naRpbr7cu3WdM4z2XvHXpPmMa72DkrUv3GdQ4k9lbl+4zqHHGsbcu3S2oyRhgDKppT5x17K1L9xnUOOHXW5fuVpQf1XR747W3kU+cIOytS/cZ1DhF2FuX7nV3dRQMqsFPnFPsrUv3GdQ4q9hbl+5WIRUWi3nr0t1qpKJyMW9cek+Claji3RuX3tNgJXrJiDcuvedpGidEe+u1uxlQnBLtrUv3eekNNw7yxqX3PE3jDYy8deluEU3ODMWITu3p8WYx3rp0l9k9viUpBnSCTw+3M/TGpXebvZORrhjRaT49zo/21qX7mN2ToasY0uk+Pc6R9tale5ndkxHQMKbTfnqcJ+2tS3ea3ZOYNozp9J8eZzR769J9xjTeX8Vbl+4zqPEOK966dJ9Rjffz99al+4xqvKO/ty7d5xQpTl3w1mv3bi81jK8wHYM6MagXibIXvHXpPoMaLwF669J9BjXOh/bWpbsFNRkyHYPaLajJkOkY1MlCPc6K9tal+wxqnBftrUv3GdQ4M9pbl+7zVI1zo7312n3yUI+zo7116T6jGudHe+vSfUY1zpD21qX7jGqcI+2tS/cZ1ThL2luX7jOqsRF769J9RjW2XG9dutvGKfHlemBQfdebeNYzMKaTi3osxd566V4mF/XYir116T5jGmuxty7dZ0xjL/bWpfuMaSzG3rp039i8ty7dZ0xjYvbWpfuc+caPVgUtqdw2FXTeunSfJ2os2N66dLegxqO3oCWVcssnDwUpqZSSTx4KSlIpFtL4zCgoScU2Is5ihJJUbF+cuNrZW5fuM6Qc7Z3ojUvveZZy8rVgRKcUdU6+FgzohKLO4bKgty7dZ0A52nHKG6+9pxP1GMC9dem+eb2Qty7drT45TF731qW7VSgnIUJFKtOJOoc5Gd66dLeIxmcdIlKpFtGeHBxDWi2kIcUUNKQymag/ErfDg2NIpxP1GJEKIlKZTNTj3G1vXbrPczTO3vbWpfs8SSUeXohIZTpRjx/wCiJSmUzUJXyXnrcu3WdAE5MviEhlMlGykuutS/cZ0YTwCyJSoc0GEN66dN+dpWhIhW+7SwAiUmELaXIhRUQqvAspGlLhXUiRkArzbjAiIRWW3WBEQioTibrGF2kUpDKNqCfrIAUFqUwj6sk6SEFBKrx5F4O3XrvbvjrZ7QgJqYjtjBSqc0FBKtOIerImU1CQitVyxTVG3rp03+l9QUEqJkjZTQAFqZggZTcBJKRi++wkPlXQkIrttBP7VEFDKlOJerJYVdCQylSinixWFTSkYqVdceq5ty7dLa09TD731qX7PE+TpbCCiFR0O+NFRCpe4hVmLXrr0t1Sa8PCNG9dulu5c1hI7a1LdztTkxsBMlLR7ZmKjFSMkZJlvIKMVIyRkmW8goxU2g57CzJSMUZKVv0KMlIxRkpW/QoyUjFGSlb9CjJSMUZK1uUKMlKx7XiyMYOMVFrfjRlkpNLGbswgI5UpRT1Z9SvoSGX3ZnBvXbrPczWuU/TWpbtdgGN2KuhIxRwpWSYs6EhlSlE6xNCRihWDxVUP3rp0t1KGsO7BW5fuVswQphR569Ldyhni9bCCjlTMkZI1zoKOVMyR4lfqeOvSve4GMDpSsdKwbACjIxUrDssGMDpSMUdKVlwLOlIZu0Xxgo5UzJGS+QY6UvF9e8KNibx16b7ZgNBbL93rLd+C0BuX3rYFWriHkLcu3e0RNdxFyFuX7rtEh4qOVG+7qVJFR6q3zWZ23rp0t+tvfKupCEl1t5GPty7d5101WXSvCEnVSseSSWRFSKoGSckafUVJqmUHDxUpqRolJUv6FSmpTizqyZJ+RUqqVkSWTNwqUlK1MrJk4lbRkqpZUs+6Y1QNk5IUgIqaVKcXpUMMNamaJiUZAxU5qdbNbq/eunSfL/yIcyMqalKtFtT4al1Rk2q1oMYXyIqaVLc5SRU1qVZ7WVm8alWRk2q1+tz4GoaaVE2TktSIipxUjZOS1IiKnFSNk5LUiIqeVM2TkmSHip5UzZOSZIeKnlRpswGety7dZ1BHcnKgKFUTpSTZoaIoVduNOXxBhDcuveeJmmQYVASlSjvHrwhKlSyoIVdW9KRqnjSirXe98drbPClJMKjoSXWK0UgSDCp6UrWNmcN3Hnjj0nuib/jWA29cevP8KMnYRU+qU4xGvLWbty7ddXZPxi6CUuXtDRVBqfImc7CiJ9UpRiPJjajoSVU2FTDeunQvmylYRVCqk4yyKRh6Up1iNJI8jYqeVMVimpxH6ElVLKbJbQA9qe52CPLWpXubR0/uGuhJVezVBaFAVvSkKptX93jrtfsUo5HkjFT0pDrFaCQ5IxU9qU4xohpfYJCT6gQjqvEFBjWpTi8aST5KRU2qunkNhbcu3edpGm8d4a1L9xnSR2Vk8GBVUZPq9KKR3AQQk+rkolHiyxdaUp1aNJL8koqWVH0753BrZG9dutuGzuHmyN66dJ+naWnx14iWVJvFtCfdMaZTi0YJN4Hy1qX7jOmjBjMKElpSnVo0wleGeOPSe4Y0zoqoKEl1WtGIsyIqQlKdVDSSux06Up1SNGoMQxUdqfbNe0a8dem+2drSW5fum3eNeOvSfft0io5UbaPneHsQb126T3HIHsTRkaq9citZJqjoSNVeuhXvZ+2t1+722q14k2pvXbrbxvnhhu7eunS38zTc5Mtbl+6bbZ+9dem+S3So6EjVtn6ON3b31qW7RTX5ItGR6thswe6tS/fNBtDeunS3qCbmgJBEBknxDujeunS3jbzDqmlvXbrXeWrH0xhCSaLbLn2FUJJoWtFIktIIJYmmFY0kKY1QkuhmV98wfYEQkmhS0aB4/BJCEt02bzf01qX7bpJECEk0qWgkWWmEkESTikaSlUYISTSpaCRZaYSQRJOKRpKVRghJNKloUDh5IHQkmlI0KMx/J2QkmlA0KNyExFuX7hbT+GpNyEg0oWjEW2l669J9bGYmhIxE9baZahAyEtWymTsQOhLVms8GCBmJJhQl93dCRaLKm5seoSJRlc1Nj1CRqO7WxgkZiewlXslNj5CRyCrbkpseISNRHZtZOCEjEd02s3BCRiIq+SycUJFoOlEyCydEJCLazMIJEYmIN7NwQkQiks20mlCRiHQzTyZUJKLNxJcQkYh6PpUlRCSisZmcEioSTSfKpo+EikTTibLpI6EikSlSMqciZCQyRkrmVISORPaSr2RORehIZK/5SuZUhI5ErJs5FaEjkb3qK5lTEToSmSMlcypCSCLevKvGW6/dLTEpmVMRQhIZJGVzKoQkMkjK5lQoSWSSFO+D4a1L93k/jXfC8Nal+zxT400ovHXpPs/UeBsKb126zzM13ojCW5fu81RNMnEJKYlkl8RCSElk7wGL7ZFQkkg3r5Hy1qV73d0JkJJIaXcnQEsis6RstomWRFOLkp2qvXXpPnkw3r/VW5fuFtTkHomWRGZJ8S4g3rp0362hEmoS+TbUyYUANYn8Be1xPgKhJtH0ohFvcu2tS3c7VWOsJNQkMk2KNybx1qX7PFWTnUkINYlMk5KdSQg1ifxFYckQQ06i3evavXXpvn2gQVCivkl3IAQl6jvIJwQl6rt0B0JQIntnWHbvQFCibkFNrpAIStQtqMl9D0GJugU1uXcgKNEko5Hs8EIISjTJaCTZ5ISgRJOMRpIeTghKZLtVJykDhKBEtl91kjJACEpkbxHr8aQQPYnsZe49fv5BTiLjpHgbY29dutuux+FGxt66dNfdZBk5iYZRfvJgiJxEw6a/yYMhchJNMEofmZGT+GbyED/rMXIS2x7W8c683rp0tx1044cURk5i38c6vhcwchL7TtbZZ2fsbmdqfHFn5CQ2Tko2KGL0JDZPiref99al+4xqvAG9ty7dZ1STZHhGT2LzpCTnm9GT2Dwpyflm9CQ2T0qyshk9ic2TksxmRk9i86QkVZkRlLjYU00yZlCUuOxAn1GU2EQpSYRmFCUuuwIaRlHistMHRlHiuiu3YBQlrptyC0ZQYktMSspzGEWJLTEpLhZkFCX2Krfwas0ISjzJaCT54YygxJOMRpIfzghKPMloJPnhjKDEdbPXoLcu3cfmXsAISkw7JGQEJSZ7UI3n1oyixPZ++ITaGEmJ7Q3xyTSMkZTYSCme4zGKEnuhW3LBQ1Fiy0tKiqgYRYmt0C2pdGQkJba8pLjSkZGU2PKSkkpHRlJiS0yKKx0ZRYktLympP2AUJZ5mNJKUf0ZR4mlGI8myZxQltsykJPWcUZTYMpNaPNdgFCW2zKQk25tRlNgykxJrYxQlnmY0kkRiRlHibakboyjxNKORJBIzihJPMxpJZjCjKPE0o5Gk+jKKEpsoJam+jKLEJko9GTMoSmyilCTjMooSmygl2bWMosSyyzdjFCX2t8rHgsooSizbOyqKEpsoJUbESEo80Sh7ZmYkJdZdWRQjKbG9Xz4hekZSYnvDfLIcxUhKrBbVFl/EkJTYtkxK9pxhJCX29KTktoekxJ6elNz2kJRYd/rLSEpsb5tPfICRlHi3lba3Lt03m2l769J9RlXjZ0lGUmIjpSThm5GUuO2SzhhJiY2UErVkJCVumwIaRlFiS1BKEr4ZRYmnGaUjDEWJLUUpWWJiJCXuu+VURlJiI6Vs6oOkxEZKydQHRYlNlJLUdkZRYhOlJLWdUZR4mlF6UUJR4mlG6WhHUeK+K7VgFCXuuzVyRlHisT1TUZR4lN1lA0WJx271jZGUeNDu3oGmxGO3+sZoSjx2BYyMpsSeopTcDNCU2Ewpu7qjKbGZUna5RlPisb3+oimJpSgllzxBU5KpRiOpzRA0Jbntii0ETUluls0Ss7igKYmlKI1wsVmQlMRIKVlJESQlue1uqoKkJJ6iFE+vBUlJjJQSyhMkJTFSGmFygqAoiYnSCJMTBEFJDJQSFBcEJTFQSlBcEJSk7OoXBUFJyq4oShCUZJJRdoEUBCUpux1ZBEFJSttcIAVBSUrfXCAFQUkclOILpCAoiYFScoEUBCWxFKXkAikoSmIbJyUXSEFRkrqb/gqSklTeXPEETUnqLqFF0JTEkpSSK56gKYklKWVXPDQlmWo0kqIrQVOSuntUFTQlMVOK8yAFSUlot1mzICmJkVI8JRQUJbEkpeRqiqAkxJvZqaAoieUoZVd2FCWxHKXsWo2iJJajlOylKyhKQrvlVEFSEtotpwqSkrCt0sRXXyQlMVKKcywFRUls56TspoSiJLZ1UpJ3JihKwtvTFEVJTJTi1+p569JdN9N2QVESy1GKp+2CoCQGSskNEj1JrNQtuUEiJ4nsnmYEOUlk9zQjyElinJRNHJCTxDgpmzggJ4lxUnZzR04S46Ts5o6cJMZJSVmnICeJc1JS1ynoSSK2QhO/fdCbl/62nBrnCAuCkuh26ougJJ6jlMwGEJREd4kPgqAknqOUzAYQlMRAKZsNICiJgVI2G0BQEtXdbABBSbTtZgMISqK7BxpBUJItKAmCkrRdkqggKEnbJYkKgpIYKN2SAl9BUZK2K7oQFCVpViAVTwcQlMRBKSkfFhQlaVaZmpT4CpKSND9fY10WRCVpu+U3QVSSyUZUJR4HiEoy2YhqfKdEUxLfPykp8hVEJeke2GQOgaokVvl2S+p2BV1Jum13ltTWCsKSWO3bLSmuFZQl6RbbpAJWkJZkS0uCtCRbWhKkJek2C042fBe0JRm2jUf8OgxBWxLLVqJk5oG2JGOrEGhLYulKt7gUQNCWxF7plk3K0ZZkeGDjyQfakvg2SiUe9mhLMuyULWGRtaAtidlSknIpaEti+UrZfBJtSW8e1bCGW9GW9GanbHz1U7QldVuKS+EVbUm9/C0uZFC0JfUNueOiHUVcUttI6RYXPijikk4+yq6UirikvpFSXBOkiEt6s3lTvMWFIi7pbYf7irqktpFSMggUeUmNl5KHCkVeUuOl5KFCkZfU9+SO7wqKvKTFoxqeHoq8pMWjGqcqKPqS+uvd4sd5RV/SYmGlOFlBEZjUM5YoHsIITFrsIkzxEEZgUt9KieIhjMCktjP3jeIxicCk1c7W+LFYEZi0Wlzj52JFYFLbS+lGcVwRmLRaXCm+MCEwqSUtJemCisCklrSUpAsqApMaMCVFUIrApA5MyUORojApeVjjMYnEpPaKt1u8D70iManvphTnlikak5KFNU4uU0QmJQsrx0MSkUnJwhpvcq2ITGr7c984HpKITGrbKd04HpKITOr7c8fbvysikxoy3TgekohMyhbVOCtKUZnUSuFuEkcVmUl5twuEIjPphKRsLqnITDohKZtLKjKTsu1mF74s3VuX7rbEWuO7GTKTTkni5MlY0Zl0UpK25NxGaNJpSVlavaI0qZXCJbnsitKkYkn7sZIqSpOK7ecc05GiNKlt0l3iea2iNOm0JO1JmFCadFpStourojSp2B6x2YfBqIrtEZvMURCaVGyP2GTSgc6kU5J0ZH8qRnVKkmYTJnQmtV26RzLE0JnUdukesfApOpNOSdKRjBl0Jp2SpNl0DJ1JpyS1W/LNoDOp2rkav1BD0Zl0SlLt8Xa4is6kU5LaLfsiMapTktot+yIxqlOS2i35ItGZdEpSuyVfJDqTTkhqJfkikZl0QlIryZ+KzKRTklpJ/lR0Jp2Q1Er2p2JUpyPdH/qT7hjVyUitZn8qRnUyUqvZn4pRnYzUavanYlSnI7Wa/KmoTDoZqdXkT0VkUtulOwFqRWPSiUhVOb6VITGp7a7UKb6VoTBpt7rV5HtHYFLbpTspFVX0JbXdlZLaT0VfUtulm5Oooi+p7dKd1Nwq8pJa6tKIV3AUeUmNlzgZM8hLOnZ7ryvyko7d3uuKvKS2S3dSc6vISzosqsmIRF7SYVFNRiTykk5A0lu8jKvISzoBSSUZYshLOgHpPm9JukNU2wQkTaoUGvJSs3K4pEqhIS81K4dLVs4a8lKzfbo1vpU15KU2AalqvOrXkJfaBCRN1uUa8lKbgKQSX8Ua8lKbgHSfFSXdG3a3qMZDrCEvNdunW+Ih1pCX2gSk+6wo7o681CYgafJs3pCX2gQkTZ7NG/JSm4B0nxUl3TGqtk+3JmMGeanZPt2aRBV1qU0/Uk2iirrUJh+pJlFFXGqTjzTZl6AhLrXJR/dZUdIdo1rtJarx7tUNcanZPt29hHe+hrjUJh/dHsduNLAzxrRa4WoyYpCWWt3tvd6QlpptsJRULzekpTbx6D6FSj4MxnTiUVZ025CWWrU3msS3yYa01Ko9rSYxRVlq046y93Y0lKVGVo6cfBiUpUZWjhzfVRvKUpt2pD0Z7ShLjexpNflTUZbatCMt2YfBqE47uk8UkqNjVKcd3e/8SXeM6rSj+6086Y5RJXtazb4ZjOq0Ix3JN4Oy1NjOVIlPD5Sl5rKU3PdQltq0o5ZYZ0NZatOO7jfbKGeoISw1tofV5HtEWGqTju53w6Q7BnXS0f32lnTHoE46aiX7SzGok45aSYYMwlKbdNRK8qciLLVJR/dbRNIdgyr2sJr8qQhLbdLR/SKedMegTjq6X5eT7hjVSUetZn8qRnXS0f3KmXTHqHoKU7IvTENZap7CFC9sN5SlZrKULGw3lKWmu7dfNJSlZiVxyfNkQ1lqVhJ3Sza1aUhLbeJR8nKNhrLU/P1vyd4tDWmp+ZbdEievNLSlZvss3SROXmmIS81eAZc89DXEpab2wJrcERCXmu4eWBviUmu7B9aGuNRa2U1TEZdaswfWZIqNuNTabvfChrjU2i4foiEutbbLh2iIS63tGKIhLjVPYUo25WmoS81SmG7JrjwNeanZVku3ZFuehr7Uup2xycYmDYGpHa+Bi9OAGgpT2+7f3VCY2nb/7obC1Ow9cEmmQENhatOQskyBhsLUbLulJFOgoTA1224poemGwtS6b/eRXLmRmJqnMCWvY21oTG0qUrbu1NCY2vDAJpc/RKZ25DAllz9UpuZJTMk+MQ2ZqQ1/HWdyoqAztbF7x1RDZ2rDXkeUPP+hM7UpScnbixoyUxse2uSkRWdqw0ObnLQITd3zmJKdZTpKU/dEpmRTlI7U1D2TKdkVpaM1dU9lSrZF6YhN3XOZkn0rOmpT92SmZOOKjtzULZvpluxc0dGbuqczJVtXdASn7vlMyWsTO4pTtw29b8nmFR3JqfuO3vH8tSM59eKZL2HOQ0dy6sUzX8IpYEdy6sUeeeJ5SEdy6r4DUwxaHcmpe0ZT8kTV0Zy6mVOy+N7RnHrZraZ3NKdedqvpHc2p26beyfJ4R3Pq1bbAi72sozn1aqvp8fJ4R3Pq05Wy5fGO6tRNnZLl8Y7q1E2dkuXxjurUq62mZx8Go2rqlCyPd1SnbuqULI93VKdu6pQsj3dUp27qlMwSOqpTN3VKlsc7qlM3dUqWxzuqUzd1SpbHO6pTN3VK5iAd1amT+UTyzaA69elK2fJ4R3XqZKvp8fJ4R3XqZECRfZEYVbLV9OybwaiSraZn3wxG1fOZ4pTVjurU2YAi+SJRnTobUCR/KqpTN3VKlsc7qlM3dUqWxzuyUzd2SpbHO7JTN3ZKlsc7slM3dkqWxzuyUzd2SpbHO7JTN3ZKlsc7slM3dkqWxzuyUxdPAA/z9zqyUxe7scap8R3ZqYun9YcJeR3ZqfvW3tlnx6iKP8aG+Xsd2an7S+LiXPeO7NSdneJc947q1F2d4lz3jurUfWvvONe9ozp1V6c4172jOnW1qMbJ6x3Vqbs6xRndHdGpqyeAx1FFdequTklGd0d16q5OcUZ3R3Tqjk5JRndHdOrqGeDxN4/o1NUTwJOvEuOqngAeX1QRnXrzTOH4m0d06s2nwfE3j+jUvXIuzrnuiE7d0ClZ1+2ITt22YkqSqDuiU3d0ipOiO6JT98K5OCm6Izp1R6c4KbqjOXU3pzgpuiM5dSenOCm6ozh1F6c4KbojOHUHpzgpuqM3dS+bi5OiO3pT96q5OCm6ozd1L5qLk6I7elP3mrk4KbqjN3UvmYuTojt6U99WzHX0pr6tmOvITd0ymrJnUNSmPj0py/XqqE197Hbi74hN3TOakkkEWlPfZjR1pKa+zWjqKE19m9HUUZr6NqOpozT1bUZTR2rq24ymjtLUtxlNHaFpbDOaBjrT2GY0DWSmsc1oGqhMY5vRNBCZxjajaaAxjW1G00BiGtuMpoHCNLYZTQOBaWwzmgb60thmNA3kpbHNaBrIS2Ob0TSQl8Y2o2kgLw3PaEoGAfLS8IymJEzIS8MzmpIwoS4Nz2hKwoS6NDyjKQkT6tLwjKYkTKhLY/pRlnM0UJfG9KM452igLQ23pSSmaEvDbCnJORpoS8N2Y0pyjgba0vCMpiSmaEvDbCnJORpoS8NsKck5GmhLwzOakiChLQ2zpSTnaKAtDbOlJOdooC0Nz2iKZ5EDbWl4RlMyfNGWhmc0JX8q2tIwW0pyjgba0rCMpiTnaKAtDctoSnKOBtrS8IymZMygLQ3PaMq+GYyqZzRl3wxGlexMjXOOBtrSYFuZS+5MaEvDbCkR8oG2NMyW4pyjgbQ0PKEp+R6RloYnNCXfI9LS8Iym5HtEWhpGS0nO0UBaGkZLSc7RQFoantGU/akYVM9oyv5UDKpnNCV/KtLSsIymJOdoIC0Ny2hKco4G0tLwjKbkT0VaGp7RlPypSEvDaSnZLX2gLQ23pTgraKAtDbelZLv0gbg0HJeS/dIH6tJwXUo2TB/IS8N5KdkxfaAvDfelZMv0gcA0HJiSPdMHCtPQ3RY+A4VpuDAlbzUdKEzDhEnjh6eBwjQmIVG80dlAXxpTkKiFVDCQl4bzUnalRF8a7kvJBtgDgWk4MCW7Tg8UpjENqY84x2CgMI1mb0UJH+cHAtPwnZmSnZ4HCtNoFtdkq+eBxDScmJKtcgca03BjGsmwR2QajkwjGfaoTMOUKXs+Q2UarkzZHR+ZaTgzJftkDnSm4c6U7Nk4EJqGQ9NIxhpK03BpSvamG0hNw4rnWnxeoTSNbitzcZrVQGkafbfdy0BpGt1fphGjxEBqGgc1JUMTrWlYalMLEW4gNQ3bm6kkW54NtKYxNYkpuXeiNY2pSRyT9kBqGhOTqIXcOFCaxrCgxn8oQtOwnZnKLd7TdKA0jeG7CSfPXUhNY3hY4/yFgdY0hoc1OaUQm4alNZVkC7MB2lRvNw9seEp589LfLsfRt+mNS+95NR4R3Xrj0tteURVik7cu3e0dVclHYeztgR3RF+/NS38LbLz3mjcv/S2wJeRVb176W2Dj3dG8eelvgQ2TyL312r1YXMNlVG9dutsOiCWcD3nz0t/eqVHCYenNS3+y/uGw9Oalv20PUpJhWTC6ltIUZ9Z469J9BreFqdXeunT32EZrCt66dLfQ1mToFAyt7dFUanjp9uZrf9ukqdRk6FQMru3SVGo4q/Dmpb8Ft4azCm9e+ltwazJ4KgbXNmoqNRk8FYNrOzWVmgyeitGtdurWZPBUDG+18NZwmuDNS3+LLyXxrRhf262pUBLfivG13ZoKJfEljK9v1xQ+nHjr0n1uSjvCFCFvXbpbdCkZPYTRtf2aCiWjhzC6k5mSVSxvXbpvplHeunSfCJVdlQlDawj1SBIKu2NkySObjHzCyLJHNhn5jJG1LZsKJSOfMbRsZy4lI58xttOaQr/2tqXzI3JJXqe3Lt3trKXkrGIMLG/EwluX7nbShk963rp0t3OWk3OQMbL2trkwecYbr73F4hqu3nvr0t3CyskpJRhWS3IqnJxSgmG1LKfCybAUjKzYKRvOYb116W6R5WQUC0bWLKrEL6T35qW/hzYZxYKxlc1LXL116T5DGz8Ee+u1u3psk3GsGFyjqBK/ZN6bl/4W3Lia0JuX/hbcuCLPm5f+FlwJ1z+8eelv0Y1r7Lx56W/RjWvsvHnpb9GVcA91b17625krLemP4TWQKnE1ljdf+xtIFQm3Uffmpb/FN67G8ualv8U3rjny5qW/xTeuOfLmpb/FNy4i8ualv8U3LiLy5qW/xTcuIvLmpb/FNy4i8ual/4xvnIfurUt3C29c5+PN1/5mUiWu8/Hmpf8Mb49Sn7xx6e3BTS4OHYNrIlXiqiBvXvpbcOOqIG9e+ltw46ogb176W3DjqiBvXvpbcOOqIG9e+tvJG1cFefPS36IbVwV587W/u1RcFeTNS387eVssEgPDawV3JV518ealP+0mJQOja/V2JV518ealv0U3XnXx5qW/RTdedfHmpb9FN1518ealv0U3XnXx5qW/RTdedfHmS//iOBW/qtabl/4W3R6PhoI8VazmrsRrF9689LfwxmsX3rz0t/jGywvevPTfvBzUW5fuuruTFiSq4kSV3EkLElVxokrujAWJqhhRJVfygkRVSpo8421LZwvtCCfkBX2qTIBKSk29delugR3h/L2gThXXqfA1Wd66dH8EjuMKN29dultYw+U9b126W1TDFxl569LdgjoiPffWpbudsjH4FqSp4jQVi29BmSouUyOEtYIwVQym6i28vBZ0qWIuVW/xmEGWKsZS9RYPAlSpMtmpxhsoeOvSffN+UG9dus9F2/i9KN66dO/22eMRiSJVTKTqLR5iCFLFQKre4iGGHlXMo+otHmLoUYU8qvEQQ48q5FGNhxhyVCGPajzEUKOKbR9eSzzEUKOKaVQt8RBDjSq2fXgt8RBDjSq2fXiNzb+gRhVys4ijihhVDKNquOmGty7dLSUqynHyxqW3BTWsy/LWpbsFNazL8taluwU1LLTy1qW7BzUeAyhRxSSqhoVW3rp0t6DGVlRQoopJVA0Lrbx16W5BDQutvPXa3SSqhoVW3rp0t1M1LLn01qW7RTWsy/LWpbtFNazL8tal+wTGFqb2euvS3aJa40GAClXEoxoPAkSoYghVKR4EaFDFDKqG+wF469LdohrWfHnrtbsZVA23D/DWpbtFlcKkGW9e+ltYKUym9Oalv8U1LBLz1qW7na1hkZi3Lt0trmGRmLcu3S2uYRmXty7dLa7xI1pBfSqmTzUs4/LWpfvMSo1L0Lz12t3sqcZuXJCeitFTTdy4ID0Vo6fHNDj8OEhPxeipxhtaefPS3wIbF/1489LfIhtX/Xjz0t9Cy+F2DN689PfYxuu6BempGD1VCXNsvHnp73vGxM9nSE/F06HiVDpvXvpbeCVMbPfmpb/LcfL8h/hUHJ+y5z/Ep+L4lD3/IT4Vw6cq4YYV3rz0t/AmMl0Qn4rhU5VkOCM+lSMlKl7XKIhPxfEpzv3x5mt/w6cqyemC+FQmLyUPvEhPxekpzv/y5qW/BTdOLPLmpb+du5Kcu2hP5UiMivNnCtpTcXtKVl4L2lMZHtzk2oD2VIafu8m1Ae2pTFzKkosK0lOdtpS8qNhbl+5+6sZXnoryVC0xqsc36IrwVA2eqsaDoSI8VavDS/ijojtVc6eq8YWnIjxVg6eq8YleEZ6qwVPV+ESvCE/V4OmxSWXcv2N/m01pfCJWlKdqyVE1zrf25qW/RVfjsVlRn6plR1WNx2ZFfqrFEt/C/Qi8dek+E98k3F/AW5fuj/CNFt+FKvJTLR7cZCijP1Xzp9qSsYkAVQ2gaksGGwpUNYGqLRlsSFB1IlN/XNeiPxcJqhpB1ZaMTTSo6gbVkrGJCFUdoVoyNlGh6nSmzIkqKlSdzpQ5UUWFqtVfTpgMNWSoWndvJ/Tmpb8HNzmzEKJqtR2CQlSo6FDVHSouQ/Tmpb/HNjkPUaKqS1SSF1iRoqpTVE+GPlpUdYuKKxe9eelv1+V4BzBvXvrbqRuXOnrz0t9O3XjLMG9e+lt049pIb17626mbrAhUFKnqItWT+CJJVUuPmrtdhf0xvo5SPYkvqlR1lRpJfJGlqrPUSOKLLlXdpUYSX4Sp6jA1kviiTFWXqZHEF2mqOk2NJL5oU9VtaiTxRZyqjlMjiS/qVHWdGkl8kaeq81S8ZbI3L/1nfCmZY1cEqmp5UnRL4otCVU2o6JbEF4mqGlHRLYkvGlU1o6JbEl9EqmpIRbckvqhU1ZSKbkl8kamqMRXdkviiU1VzKrol8UWnquZUdEvii05VzamoJPFFqKoGVVSS+KJUVZMqKkl8kaqqURXFdfHevPS3+Mb7S3rz0t/iG5eLe/PS3+Ibb7vozdf+xlVUkviiV1XzKipJfNGrqnkVlSS+6FXVvIpqEl/0qmpeRTWJL3pVNa/qsR9U5KpqXNVjPqioVdW1KlHailpVXasSpa2oVdW0imoyOpGr6vSopNLSW5fuFtyaDGbUqmpaRTUZzKhVtXtwk8GMWlW7BzcZzKhV1bSKajKYUauqaRXVZDCjVlXTKqrJYEatqqZVRMlgRq2qplVEyWBGraqmVURxbntFraqWKkWUxBfBqhpYESXxRbCqBlaU5M5XBKtqYEVJ7nxFsKoGVpTkzlcEq2pgRUnufEWwqp4sFdt9Ra+q5lVxXwzt8NDGeUYVsYosT4riNQ1CrCLDKkpy4QmxiixNijhOIyPUKjKtomSZglCryNKkKElvJ+QqMq6iJL2dkKvIuIqSfHVCriLjKkry1Qm5ioyrKMlXJ+QqMq6iJKOckKvIuIqSjHJCriLjKkoyygm5ioyrKMkoJ+Qqsmwpit/a4s1Lf4tvklFOCFZkxXyUZJQTihWZWFH8fg9vXvpbfOP3e3jz0t/im2SUE4oVmVhR/H4Pb772t6QpSjLKCcmKjKwoySgnJCsysiINr1SEYkVezpcsyxCKFVneFCUJ6IRkRVbORxqmKBCSFRlZUZJ/TkhWZGRFSf45IVmRkRVpuDpNKFZkqVOk4eo0IVmR1/Ila3SEZEXk1SPxGh0hWRH5GmC8RkdIVmRkRRqulhOKFZlYJYBDCFY0RSpe4SLUKiLPcwxvioRYRWSvA4nXNAitisjzHONBj1RFXskXp3QSShVNispSOgmhiryOL07pJHQq8jK+OKWTkKmIPXs1TMcgVCpiz16NBzwiFXkdX5yjSWhU5EYV52gSEhU5UcU5moRCRS5UcY4mIVDRFKhMxwl9ityn4rRIQp4i56k4LZJQp8h1Kk6LJMQp8uSpOC2S0KZIdnmOhDRFsstzJJQpkl2eIyFMkezyHAldimSX50jIUuTJU3HiIqFKkSdPxamIhChFjlJJiQ4hSpEnT8Wpi4QmRZ47FacuEpIUee5UnLpIKFLkuVNx6iIhSJHnTsWpi4QeRZ47FacuEnIUee5UnLpIqFGknukYn32IUeS5U3HqIqFFkedOxamLhBRFnjoVpy4SShRNaspSFwkhijxxKk5dJHQo8rypOHWR0KHI06bi1EVCh6LDoeJBgAxFB0PFUUWFouaZjjErESoUdU91jJWLkKHIk6biXERChaLuqY7xV4kIRd0zHeNAoUFR94S4+JtHgiJPmIqTCwkFiiYxZcmFhABFni4VAwWhP9EEJurJR8ewTl7KlqkJ8Yk8VSquTyC0JzJ7SjLZCemJhgc1/ktRnmh4UONzG+GJHJ7ijXu9eelvzzdJDSYhPJHDU1KDSQhPZPBESQ0moTyRyRMlNZiE+kRepRfX8BDiE09eyupgGPGJPVMqLt9gtCe+5TureuPS255ukvJRRnlil6dwczBvXbrPkp+4r2Bfj2qMBozoxAc6hecfozmxm1NSmcpoTuzmlJSaMpoTuzklpaaM5sRuTkmpKaM5sZtTUmrKaE7s5pSUmjKaE7s5JaWmjObEbk5JqSmjObGbU1JqymhO7OaUlJoymhO7OSWlpozmxG5OSakpoznxRCWK31flrUt3C2+88aU3L/0tvPHGl9689LfwxhtfevPS32+08WIDozlx9TttfO9kRCeunnkewwcjOnH1e228mMSITux5UklmO6M6sRfsJZntjOzEnimVZLYzshOTk2J8cUN1YvLwJmcjqhO7OsWgwahOTNstSxjZiWkniozwxAZPye683rz0t3M33tbUm5f+du7G25p689LfSTG+C6E9MTsXx3dQtCdmD20442W0J2YPbXJ0jCx7ZMM9uL156T9Dy/HrD7156S/WP558MfITGz9x/EZDb176N+ufXHgQoNgBKqlxYBQo9hSpbCgjQbETVFLjwGhQbAbFt+RMRIRi2daMMCoUy7ZmhJGhWLY1I4wOxe5QSQ0FI0TxpKZYmBkZimW3h643L/29YCSuoWCEKHaISmooGCWKTaI43vnfm5f+xsZJzQUjRbFvJZXUXDBaFE9tyoocGC2K3aKSIgdGjOLJTVmRAyNGsWNUUuTAqFGsuwUBRo1i16ikyIGRo9g5KilyYPQodo9KihwYQYodpJIiB0aRYhMpjncC9ualv9eMJGcWmhS7SSVFEYwoxY5SSVEEo0qxq1RSFMHIUjzhKSuKYGQpnvCUFUUwshQ7SyVVDowsxc5SSZUDI0uxs1RS5cDoUjzlKataYHQpdpdKqhYYYYodppKqBUaZYpeppGqBkaZ44lO20MJIU9z9VaZJcNGmePJTpgBoU9y9YiQZmYhT7DiVlAkw6hS7TiVlAow8xc5TSZkAo0+x+1RSJsAIVOylfEmZACNQ8fCygmTwIFDx8LKCZPAgULGX8iWrxoxAxV7Kl6T9MwIVDy8ryOIF8ZWblxXE8RIkKnGiStL4BY1Kbp52Hn8/gkolXs2XpNkLKpXcvKwg/j4FmUq8nC9JsxekKvFyviTNXpCqxMv5kjR7QasSt6pkGiZoVeJWlaTZC1qVuFUlafaCViVuVUmavaBViVtVkmYvaFXiVpWk2QtalbhVJWn2glYlblVJmr2gVYlbVZI2L2hV4laVpMELWpW4VSVp8IJWJW5VSRq8oFWJ50clafCCWCWOVUkavCBWiWNVkgYviFXiWJWkwQtilXiCVJIGL4hV4glSSRq8IFaJZ0glafCCWCWeIZWkwQtilRhWJWnwglYlZlVJGrwgVYlTVbJAKEhV4kV9yQKhoFWJW1WSBi9oVeJWleS1C2KVkOedJ6MTsUocq5JlPEGtEvLoJqMTtUpcq5K8dkGtEteqJK9dUKvEtSrJaxfkKnGuSvLaBb1K3KuSvHZBsBIHqySvXVCsxMUqyWsXFCthzztP4otiJZOkslVaQbCSKVJZdbagV8kEqWzdVZCrxLgqq98V5CpxrkrqdwW5SpyrkopQQa6So6IvGQzIVSJ+600GJ3KVyLbiS5CrxLkq3g9WUKtkclTXcI1O0KpketSgJLSoVSJOkTEbC2qVmFZx8uoeQa0S0yq+xUtKglolrlXJG3AEtUqOxKmYagW1SkyruMRrSoJaJf4OvmQ7HUGukoOrkgsJcpX4xufJdjGCXiW+8XmyXYygV4ludzgRBCvR7Q4ngmAlutvhRNCrxL0q2VdB0KvEvSopVhb0KvEMqqRYWdCrZIJUVn4myFViXMXJ+5MEuUqMq7KFCkGukuYLCfFChSBXSfOzNxn96FXS/OyNFyoEwUqan72xHQuClXQ/e8OMG0GvEveqZEFV0KvE86iSBVVBsBIHq2RBVRCs5MikSk4WBCs5UqmSkwXBSnzvqWRBVVCs5Nh7KrmxoFiJVfNxnMEkSFZiZMVxSqugWMnw4IZJb4JgJQZWHKeoCnqVjO0akaBXydiuEQl6lRxbTyVXEvQqGds1IkGvkpGvEQlilWxfyOfNS3+/KicDGbFKPJsqWZMRxCo9XsgXr/koYpUeO0/FJ4oiVqljVXJXUcQqve3WiBStSm/bNSJFq9Jj66msv2B/3c3eFa1KPa0qmb0rWpVOjMpuoopUpb7zVOLwilSlxU/ccL6pKFVa/MQN1+4VoUoNqrIZkiJUqUFVNkNShCot28VdRajS4idu8u0gVKlvPZUsfitClfrW58mMTRGq1Pc+T2ZsilClU6KyBUxFp9LqK4DxPULRqXRCVLaAqchU6jtPJQuYikylvvNUsoCpyFTqOVXJAqYiU6nnVCULmIpMpZ5TlSxIKjKVek5VsiCpyFTqOVXJgqSiU6nnVCULkopQpVOisgVJRafSCVHZgqQiU+l0qMwBFJVKfeupZD1SUanUt55K1iMVlUp966nk6UBRqXQyVLZ+qYhU6jtPJeuRikilvvNUsh6piFRKu/R0RaPSiVDZ8qUiUakRVbZ8qUhUakSVKYwiUanvO5UojCJR6TSoZHlUEajUd51KlkcVhUq9oi9ZHlUkKvWSvmR5VNGo1FOqkuVRRaNSN6pkeVTRqPQwqmQoo1GpG1WyPKpoVOp1fcnyqKJRqRf2JWamaFTqlX3JcqoiUqmnVCXLqYpMpV7blyynKjqVenFfspyq6FTq1X2J+Sk6lXpWVbL8quhU6vV9CUwoOpX67ugJTCg6lep2eVfRqVS3y7uKTqW6Xd5VdCrV7fKuolOpbpd3FZ1Kdbu8q+hUqtvlXUWnUt0u7ypClbbt8q4iVGnbLu8qQpW27fKuIlRp2y7vKkqVtu3yrqJUadsu7ypKlTZf3k3ii1KlzXeNS+KLUqXNl3eT+KJUqe87lSwfK0qVdl/eTeKLVKW+8VSyfKxIVeobTyXLx4pUpb7xVLJ8rEhV6htPJcvHilSlvvFUsnysSFXqG08ly8eKVKW+8VSyfKxIVeobTyXLx4pWpb7xVLJ8rIhValiVLB8rYpUaViXLx4pYpUftX/KQhlilR/FfvHysiFXq1X/J8rEiVunUqIyxFa1KvfgvWW1W5Cr14r9ktVmRq9SL/5LlSEWuUt96KlltVuSq5ltPJavNDbmq+d5TyWpzQ65qvvdUstrckKuaVwAmq80Nvap5BWCy2tzQq5rvPZWsNjf0qmZexTVeRGvoVc29Kq5IbMhVzVKrbiNeFWjoVc28imu85tbQq5qnVsXVIA29qnlmVbLI0hCsWvGc5njRpCFYNQOrbNGkIVi1sq02aQhWrXi1SfJ1Ilg1f1Vf7HMNvaqZV3GN16waelUzr+IaF6c09KpWPLpxMUhDsGoGVlzjIsmGYNUssYprnILeUKyaiRXXeEW7oVg1Eyuu8Yp2Q7FqJlZc4xXthmLVTKw43hihIVg1z6vKznUEq2ZglSy5NfSqdtQAxpfyhl7VjhrA+FLe0KuaJ1YlS24Nwap5YlWy5NZQrJrvlp4suTUkq+ZklSy5NSSr5mSVLLk1JKtmZJWV9TUkq2aJVQkvNiSrRv721PhO3ZCsGu0vzUhWzfKqmJJLM5pVs7wqpuRigmjVfA+qJFpoVs3Miim59qBZtaMQMFzBbEhWzesAKblUIVo1rwNMdgttiFbN6wCT3UIbolXzOsBkt9CGaNUMrTjZLbQhWrWpUo9vMxwMaFbNzKoklxIkq2ZkVeLV5oZi1aTuroMIVu2oAYzXgxuCVTtqAOP14IZg1QyssmWlhmDVZPveqIZg1WT73qiGYNUcrJL15oZg1aZIxevNDbWqqa/vJlc11Ko2OSpbg2qIVc2xKlmDaohVbWpUtgbV0KqaW1WyBtXQqppbVbIG1dCq2lEDmIQWraq5VSVrUA2tqh1FgElo0araUQSY3CTQqtpRBJjcQ9Gq2lEEmFyV0araxKhsDaohVTXLqUrWoBpKVTtKAJM7NEpV8xLAZBGqoVQ1LwFMFqEaSlWzEsBkUakhVDXfmSpZVGoIVc1rAJNFpYZQ1fpulaihU7W+XSVq6FStb7a6aahU7agATEYaKlU7KgCTkYZK1Y4KwGQsoFI1T6hKVnEaKlXzhKpkFaehUrXuq0TJlQSVqnkRYLKK01CpmhcBJqs4DZmqeRFgsirT0KnaUQSYxAudqh1FgEm80KnaUQSYxAudqnlSVbLK0hCqmhcBJqsgDaGqeRFgsgrSEKqa51UlqyANoap5EWCyCtIQqroXASarIB2hqh9FgPH32RGqukNVcl/vCFXdoSpZBekIVd2hKlkF6QhV3aEqWQXpCFXdE6uSVZCOUNUdqpJVkI5S1Y8iwDi+HaWqH0WAcXw7SlU/igCTeCFVdaeqZJWiI1V1LwJMVik6UlX3IsBklaIjVXUvAkxWKTpSVfciwGSVoiNVdS8CTFYpOlpVP4oAk+8fraofRYDJ+YVW1Y8iwCxeGF8vAkxWKTpaVfciwGSVoqNVdbOqZJWiI1V1o6pklaKjVHXPrUpWKTpKVffcqmSVoiNV9aMEMBmdSFV9YlS2StGRqrrvkZ6sUnSkqu6bpCerFB2pqpMHNxnMSFXdt6tKVik6UlU/agCTwYxU1Y8awGQwI1X1owYwGcxIVd1rAJNVio5U1ck1I4bOjlbVvQYwWdXoaFXdawAT6exoVd1rAJMs3I5W1SdGZcltHamqT4zKsrc6UlXfp1d1pKq+T6/qaFXdX+uXJOx0tKp+vNYviS5aVeftAn5Hq+rsl+bs+Bhdt6p4laIjVXXLr2KOl6w6WlU3q8rqvjpiVfctq5LXz3TUqu5aFeNWR63qplVJKUVHrOridURhKUVHq+pmVUkpRUeq6gdVJddlpKp+7FgVVyN0pKp+UFUylJGqumyrETpqVT+0Kq5G6KhVXbfVCB25quu2GqEjV/XtjlUduarvd6zqyFXdX+iXVAt05Ko+PSqrFuioVd21KqkW6KhVXf3EDVdfO2JVN6zK0v87YlV3rErS/ztiVW++HVkyR0Ks6pZYlaXbd9Sq7jtWJTnHHbmqO1cliX8duao7VyWJfx25qnsJYPLeq45c1b0EMHnvVUev6l4CmLz3qqNXdS8BTN571dGrupcAJu+96ghWfYpU7NgdtapbVlXCQx25qhtXcfJOrY5c1Y2rOHmnVkeu6sZVnLxTqyNXdeMqTt6p1ZGrunEVJ+/U6shV3ev/kndqdeSq7gWAyTu1OnJV9wrA5J1aHbmqewlg8k6tjlzVp0dlyw4dtaqbVnHyCq6OWtVNqzh5BVdHreqmVZy8gqujVvXh4U2GA2pVN63i5BVcHbWqm1Zx8gqujlrVJ0dl2y13xKphWMUaj56BWDUMqzh5BddArBqGVazx6BmIVcOwipN3cA3EqmFYxck7uAZi1TCsYo2Hw0CsGoZVN/07tX+oVOyu2N2jG4+egVY1PKsqO3zH7nbuajzYBlLV8CLA5A0zA6lqeBVgiwfbQKoanlWVvIBgOFX933//28uXfz+/vT9//L++fHz+z9/+x//8n3/75z/f//z6/Le//5+//fPF/uNjUXke+G//4//8rRS5/5//9+9/uz/rHv9g+0e9DzL/h8z/dP+n/875/z0+wz9fvn349Prt+ePyCx6T6fM3zHJkO85jNp0e59v70+OTXw/0eOvNj+NwSX746Zdvy6+/Xf++W/bRnz58eP3+5d1+6PLj92/z8uOPVzgf3884/qXHV/XYhd3/Jee/7pdG+9djXyr/l2Z/+I9P8fLhefkz7lP3a5jyv96O8On19V9Pvz8/rZG4jX45yOg1O8jHj/f/eXv+9u2X+3HuLW9/Lsd5qOePSJxfytzay/71yNL2KBfKf8uH1y9fnj+8v7x+WYekXiN9a+kf+/Hjx+dv96/rCQ8x5PIJH68VyI/w6eXb+/OX57f1E9zvdJdPcJ+5219zv2gc/+oe9vmSP/vXY3tl/ybG8a9H+kT6ux9f8fX3Cl+i/MjBsQFzq93/VeQYRGX4Z3pkaJ1D8XYMu3OwPXZS9WFHm3g/PsmHpw+/r9eGxw7wl1Purw6wDtkxrjGQG5+fY/ON/PH69q/ntw9Pnz798vThX8uHkeuZKJoe4399vwf04/vL5/vQePr89XqMR6boeYzHxnXJMT59gktkv44GafnPvf7x9OXPD/er7nLluulyvux+/Pnjry9ffnt++/r28uX923oUuR4lvYZ8flwAllF1v7P8GFXNR0Y7r0z3K8ExlM7/9nhP4DGozqH0Y3iNM5j1GKSi6d/19vb05/1Uf396+bIO98sflN4M5k9/e/7f358+rX/U5WfTgLy9vb9++Pbv6w/qJRb5R74P5rf3+auX8XMZgpyeDPNnf3n69vzgmUv8rhfN9BQ4f/iBF5cfvsY+/arsh19fPz0/fVnH/eVz37Y//fH5Pv7WGy9d/ur8EjB/eoZpiTFdvm7af92/3n90uf7Uy9XQ7rf5z37/8tN9hC9fOO+/8N/Xu/4y09h/Xy9fXt5fnj69/D/wnV0unJTeffwIy9lKl2sNpVeo+ZNfXt/D+db1avXYdMLvxPqXRwvCdznNKD3Njp//8n29ctLlwkPpXdx+Gn/0EgLah+DL98+/rPdvugwc2g+c11/+130GsgybS+h4H7pv7/er9G/LD1/+4nySNn/4/e37OtqvYduH6vuX6DS9DPf8Fus/nw3by2WG0svM++vnlw/3Y9z//tf/fF5nTny9vs5Hwewg9+/ul+/v65yhXG9VpaXfwvd/fn1+++dPv5uvV8kHmGU//v767Y+X9w+/w6RvOe01Dd/9x7+/vSxh75fgKflTlOY3tX//9vH1jy+fXtcZeuuXT1Bu+fXy3799//rzD5flh9Oz9Y+nl3ec4jyeJi9hK9ll/jEr++3tPsP4+O3PLx/g279+fY91pOwQn56+fFiGfr+eNuU+/z/mGel98pfnx1Trp6nOkOuBHq/OTH78/szw9ucvn14//Os+hv/XN3gAecjJdRCn38Y8THgAWg6QDaX5CZbZyfXS1eWYu+vxtFEeVLg51u9P335fT6lKy9QhGxXnT98vaPd//7JeWZZ5TzYq7eu8X1I+vXx+gXvadaZ3yy7n5wE+P398WWcwjze3XY6w/T7fnz9//fT0/vzzn3G9OKezqHmMP55ffvv9PfhDrtPOfFz8OET0p/TrMdIR/vr6uL88ff349Pz59UvwtPh4e9zlQNmV9pe31z/uF/3P99n316f39ZLHy+B4lFkkx/j+8unj/Y/59PH1w/fZcr3wXI6Rn3F/3i/1n5+WaVa7/vbR06DOH11vVO06r8wlw3705cv6o+36o+n3//jR99f39bGjXadnI3WF+Sj98en9Cfzl8ptL/gfbTz/45vltvT3Scl2hmv/+L9++fnqBa+NtuTamP/uYk/768uF+Bt3vdL+/vr28//nry6d1rnJVtZp/jB+HwqH3eFfs5QhZFD78/nR/Gg4Gf7ldJ+lFb+cFMr3E+bF+umncD1WWQ9F5qGwCYof6ep9N/fH6tk6/l6tMrf0gMeGDxNpBITNTJ/sFzx/+lfDY9WJaTmi65cNpPdbXt/v0DaymlLbMfdKzAo4FB9GxHCQ7K/EgT9//sx7nerGvJb1fzOP8+vr2/X6NfF/lqi6TkXICXk6B82Bf314e4/0xLU7/yOvXX28jux3P491H7fPbv5/vX/nrr+souV1RvB6yMt/uYP/SdvzrkQy7/x1f7x/yoV3v3+FycZ1XVUpvm/M4374+f/kYfdLlVD+mJPO9GMcnrecnzeYG8ze8/+dfzyDJV5C7H5yOg9/6cXDt58G34+n9P9Fnr8vh5fzst/Ozn4/H6Q30w6fnJ+DhtoDguaQh6dLIfE6H68RyAfxxDD6+BD2xuacPsR8+r89v7frw2g+l29yoXj+uH+t2XSK4HRevlErv///Xp7fn/GQpyxeVzQ78MC9f7v+4T0Dv054v33796eY3rtHkmg4HO9jr9/ev39/xELQcIr3M2SHe//Ptlz9/n/M4OExZDpOeV69ffn35De7gdbmDH6cOpz4yD/IG8x+5zkNaygU/4vICz/nXcZLf5s4f//z05ek3WCS59WU6c56opZ9XMz3H8nm1eOQp/Ze/LVyaqddHvPvvOs8b5fN3Hb+1t/TWkQ3Y5eg3zcfY8fO4oFoXx0mfgv0A7682vX/7uj5MX75Y/1vq+Isovd8fiD99en6HQ12H2zHWbvl5+OX+zPH9w/srhFqvV4Xj8fx2Ljwdy8Z6/uO8chy/9FiRqtTPiB0TonM+5D9FxzIXV2/i477DR8D5WACT4T+lx7xKyfvosTR23kXOB+l23Gjb0bmxD9t2LGi246faMct61L3YP44PP44PX24nW9zq8a9yrnqVci630Lmax8cycdGzn57/rf9Y6zuOV2/nql89FmPquVZf+WyV8yfOkNA5r6Ufy9Pl+CzMPxavj6PwMQUpck6v5Vz4fuzZ7/86vp7SziWicX6CcV4EbsdXfX98OGJ/k/OycTtuz6Udo2ect8Bx2wz/R5rDfdj74vd6vV3uQFw2F4TjKJ/e79P79ZmxLBfMSiW/nx6H+Yl27rOx5eEtffKHY9hzIBxpuYnkE6P1SAeMwLF0OVY6gzuPlTyW0LJmTuX/z4G+fX3Cg92Wg/112D4+f/vw9vLL8zF3gFEwllHw12Pp96e3j/dHi3+9fPn1Fb6vsXxfmwu8Hyo4RFsOkT4Enoe4T4ru06Johi99+Z7++g+zaRF8Hlk+z+busBzk9/v9+fW3t6fPQYrIch+lspnc+CG/PmPMZPlU5a8/1bf7f75P2d5f7//rGS8DsgyAvz5/v33/JWIH6ssk9L/4w+4H+vxy/1z3Q33/BJ9KlvM4VffLwf78Eo2nZRD8F1fK9//AAZarW/4kdDnA19fXT48BieNxucalyT/XI/0cqyXr5L86RhxzXY7z1wPo/T82hfrj5f336Dzpy9Su/PV5ez/g/VDJJaktB/vry6Uxx/HM//NYWq5L5a+vS3a8Yx0qOuSSh0XpSrgf8j5pvN9ofrqQL9e6zXf2dbmC1L4sAPskgY550uOdwzaha8cc7XiUeuwtYFOzcyp1q8dUpZ6ToHouqdCPeWw7p0M/sl6O31TknMLJOYXTM0mrnccbPR9pX//8KankeqWU/HLy9c+vb69fH6C60t1VhDU/Ve7zoi+vX/74/eX9+X6z/fD8uME9fXiHZ+yrAubPTl+/RldGvmaSznfg2MztUcKVHOjt+YHMwayttgVRj1lqPWf/c0t7+9djX5Hd8ZMLeW2La/14EO/ncyS181ekl9T5K+ByWpebzeWBR052OqWrpykGx6HhYy8XtUrHTPl8HJo7hvvHHulwmse2ix3IxjJROi1KTo1s+S3vctBf314//+v5TxghC8fx+Qwgx2k3t3j87w7+7RnTXm7LRJ9P62tnFPP76/XgmIhyuQz9Fz+Of/R14fO/+PH7neLj62f4w5a85yMxb76j7PjDNmPo48t6i+ar8D1eBmuX0XI8Mh8Q2fPL/bd/v7/eL2PLVejyd6bpzR++f/5+f/54+ff9Q/3668uH+/1mveYvixBHViIdyYaSP5t8f3uDRcn7w/X1xnNLE0b9Z7NU5OW577b50+ZR4qSOa+LqLc3p8kNEiR20HCC7s5skZU9nY5kMpQtPj0XLR/rhYxl+HTbXBfh08fzj80OUX768P9+fC+6Ti/DKu0wrzjty5TORXA/cmDua7X7TY46FFQ001kKB9Pt6sPX783/ev89EqPUYbbkOplPqj8+/PsG0aSzJLJQuCfiP/vORTvTPKB1p4YJbOjU4jvOC65DLClNK78ePf3r68tv3p99wGe06/Mu50HO63Hx1oIcqVejjV3x9+vPx3+GT6pWyu5zkdFyISpM8gn7g10+fHhlhL68f4Susy1d4jKo60uHvR3x7/t/fn7/BFeV6GqaX3OMIjyc1/0z3I/zzMzwntWX2f64ItxQDjuM+Ettf4cFkWb8+ZzK3FJ8/Pt9vNc9/UeOxzGFO3D/LWOZO+T6HSR+t7BclE9fL0NL823wc4Mx3xLvr9Uqi2f3q4/NXyD1Y1qkPXKWRX2qMlu53r/eXby+//fyoWZd1pXqZ2ZyLpMcDxSxE3v+e6PhrvsW5CHv7cfyz4mRkt7rj+N+/3P+I+7cZ/Z5lwfQyiTqjfi5V9zSDxH7PV7wHdV1OoPSx4ONj0Xwmpz5FCyzLyKTNGD+O8mx5Zeukql5vhy1dwbsc5fntDVZFrvZWNjeq8xDRkiQvWe4tzaW5HCZeHuVl4amla5vXAy3PLXT9JJQ+xC4/jx+hLR9h85UcVVtrydDVogvpWbp0O+8KaU5sMqW85onVc63heFiio+CFj4mwpPr58eW3R47F9/ffo5sDLTf99Lt/+ebzM8gnWOaqI72S+fQSk6n4mlim+SnhPx7myyyrquflfjMM3p5evhwrtDAM1nl8ivfPT2+f7jeF959X2KVcPo6m2UiPh5u/uIst180zDUjOCea5IDj3YEt+zafnfz9BNeq4zoweypX97OeXb98e4/z78lQn1++7pVU1PxdkXK856br9838sQe24Yf30JE7L5a+e5OGn1+N7OVZV53Zb2a/5eh/Jz/fv/4+nN6hFuNbepBPD+wFe3x6PzC+f7zNP9JnrdfFc5Kx8ZsroeRts6Si133B8D1DmM3cMu34N5+3uh/zczttdHqT5O6Jre13O6/qjUPTMCtTzFtvyUf6f+wV/fdi+JomfWT7tSNcpI12VmsfCr+F2LU0rel5sezql+vXpZUGS9bqf/tC/nn9cAIFvrvUHJa3c+PV5uWzJ1Xz04N5+VmTTMW0peqBw6SmK3Q++nmpXrtKUQx8/hid3vZ7cWVzvPxjkF18uK6Onv/Pl0/vzWzTkbrROSs5Ytmz42rHiOcXtOiUoemY49BRCfv30/dvvtjoEjyjXGfKZA1EpvYj9+vZsVL1cWK7P9pI+LD1+9phuAZ8uE9wjcaWeFa3zhZHHGZl/tNXo5Pos09LCoV/hyx1LIu+Z9NDO5MeWYtFDKf/5uJfDaXR96M93CXj8NFwE9LoM0c+klvM2UHqa6fo4WpiqxUsqdEvh6nqA+33r45prPt+BcTlMWsD62/OX7+8v6+3yWuyb/th7vASxKFU57gh8ZrcpHQ/ALX2k+3FwO+51BnHdF+Oxa9hx0TqzqejM++Ez64bPSTGfZdtynuWS1nguH+Sn3SWuz9Gl/Hh8TQvYfhwu3mqiLAXLt/Rh5Mdx0AiXu/9x4bk/+Z53zjNdqKUPoj+O/v70G8yAlirZej7fyilbeiz8zd1t818QbONwReN2JlbdTtsqZ4pVOc+vem7tQGfiFx8jrPC5uihndOo5N+EfeZanpvZ0MfDHhz4mzSAzcxvk67T5R970mZZ9ngU9XVX58XtwY4jr1FnOWYvwX3/NP51Fc/e/qyaX8zs5A/mj3iJ1pvkbdjtHXFNkJL2XPg6TbQKxgFpaXHscYbMPxHInTWcX80DvSVFgqXV53jtn0pRuiWDHm5lxeKil1OIcnpTOER6HCnapuO59cpzm7cfeFEdky7kyVOg8t6ifZ8q56s/nuSVnQqak2cePD3XUJC9/3zUbpZwPH/VcEJV6nhTjPClS+nj8mqT8uC3e33eBCCqQr3Knx7qtbi8CcRFyv5amlHz3HTvCz8tV/TaWn998grAU+Dp/LWfg+Hwkq2d697m3zf1WfE7aduem/z5clV7SjdJ1lvnzXz7+8fLx/fdZGIqiv+Rypestj8MkxcvXRdSSp5bNI9yvUP++P4Q9/fLpOVu6XHIobmkJyONwP5UhX2+//dztpZ07XI3dLXEe7pc/H5ed9RNdmaqWc7coSnMgLgf7uQqjLLkK5UeCeVrGehwu+GR1+WTHCKN0An49FBRcL6Vn55251PNZIy1oux40qsNedpf46482E4fDOCyreufkitIHhp8OGUVDloOed5R0o5z4oFb8CqfWcutMCyHWA3775c+3B4LBp1xKC8/5DKUbxBwH/RZ+kX0ZgcdFiNJnpevRfv4O65Lq8WMlj3hzMziO9/MfW5eUmFLPUc3ZczMe7sPv37/8C6JRlyyecs6XaTd9y/cG4Ou8KOf96zF+rqlf9hiUvzwzwkT4sqzh+QLvvAb8VTDzDQfG9Xz9qz8t2XPgsbH7j79t8/T7vt12gK8zPtmelH+58wBfwVC2V++o7H/Zye2WVqWePw6l/7Ls6JiWUZw/DuX/stQypcs9x4//THTLst8tNaj7AeJtAMqyE9gtXXucB4jq+K/zq7yW6/Hj/00pf1kz9f+ro/1czb88hG1OmE1BPy8KfeR3lnwfnx+HC2r6rw9s96OdcpmWyT+OhtW0l0hzmh7w+MGfymiX7TqP+0KaijQP8fmXaE1Ur8S9++w/15ouF7TdpCPdh3M5wI5Zfhzhlz/hyeR+mMWC0nTd5TBQr3oFKt49o+5LVst114n7/PGsOPuxTcOPJLRzcpDb+fILcTOEZQvRtrtM/DjEfQR8+/D85eN99ud7EawLmqUv+zSMXUiC3M/rYJLjaVWPh6x2DNS+u5X/ZRbnddjRcWw+5tRb5dmkUfbrder+WLm77GWZlH1J4drGZJtMWZes0NJPG/6R4H1Oqlu6NHz+lmgmqEsC/GmdfK7M6zk7bDvVst9wvwM/6quCX8RLgkTbTTR/upHxdX4zX1O0/dkwrXTZx3NnHj9ncV2L8M9C+u1jc5qYtO6BvblKp5kry6SE+gnyR151yfeGeBw2PpOW9MVDYemsiT5qq/moXP7/Kvu25bh1Jdl/Oc/ngQAJXuZXJiYUbYmye1vq1uqLJe+I+fcDkI1kJYgq7fPmsI0iG8SlLlmZwfx8j02VUgZcTpaZI+OkywZ2HmoMVCgk6BBV9dbaV8EskksvGNeWhR+RNqxTUsVniJNisLK18+meOh1+/P1zeLsXToB0QSw/zQBSEImp5bXvUAKD9EEmZEoHNIlPVp6kDhToqBycl50bVfxFtLSr2UvcZ8ZHTs1W9EK2CWWtyaofRftpU77vIE3EuuzQe94GYxb3GABZQbQ8oBoMQBKjqYj7dWwlzBA3/WQlFKqF8s4TubKxi4qqtHNE4uS27hnjbKkVlKUbMKF+ObRYftauUtuvPb2eA3ymtS7BX4erenDLJGI8pI0fWaZ/vKQWaLPvBCx3nwm/AP0dwdk+gJ99smKCSuGmkY6B0yEK6+jjKZ5Kx+hNFjiIXiYDRpWgmIzs0RS9DGTN6z9aeYD/iy6FhjDBesPaauN2Pr/OnxXYSy9X+2jlf/Z3Bfc45PJ6i8s1U1Cg8ypkaos+54hGFOqbAfVcnF4DqDqG/P9i0A1elGZLNMGPBFCxR1Z7sEo566/68XeP6yS6IQ86DVTJ4n8AisEq2K1PeDRGI0NEJ45EewQV1rPYKnDHch8FBCOWhcQ8QKclIRgaFf+Wx04js+QMPeWkLCfy15mhv554CnJd3OkyAcnG7fYRg9MSciITS1YSJQ2/VsbLo0wlzY7jeRMOVI9vVMGKNHD+M1+upftMtSJj8A7kOdL5YYw8Pb/dX6rw+YYYo3WOuNXKwi5WZYCUSUEQSLnR8odttrKmJX5KB/whEgzeA44Mjxn95IuuqfHol+Ljyyq1VerbASiCvMWGjXMIwg4OsBWPgnqbA12n85atDyuhRtKDVIHqy9DdxU/FQ3Qmt/Ynigvmn/tcwMIbWVByOmthtlD0yIsJm/IlH/3qvGgmq4y22mNHMfV0UrISfrWV5VgtVXq4G4khdbhBnC4AsFgzWjZHwkBsaCyP9qMOGKEeZd1ha3mycqfpyZfT4e16+/s2R3+Hf81Acdj/j5UUwpAlAmWZlnbw1V5ukgkqWQ7cEAO+2aSi3ZPtD7455JJW6VLTuOvhOWXcGGUmUcZWSS+OvsdLNzpfz2UbgxtJEspabteN+51fQzIRWoDBZOFUiBYwess8uK4/7te/K/8NSy5IFzKYK+1a5VLsJfJowtk/IGaZVEj7YjR6xj/imkv0qdd5pquxl8XNMQOFps01BNZzsoBcx+t8SmkbnniJu+rVpr9leMLrF1U0eZxOwCMOQCFO5ul8XULW89v5k3/uIC90ywO5vl7O/+bJmqgNwcOTNkEYx+vPM3f99jJRPOZkWcrH5z+B5cXl9i+vyyUsz8hXPSeTKb2zgTbxIIBVXQBnYgBhTA/g42Cv+9/zR3TtdxidQT5/wiU94GqerEz78RrtHd5KZ3akVuJmNGdlscBH2ugI/GXlhZbxBbhgknFc9IcBic08J/E6yx9P7z9djMfPNV+4wbGXvuIEPOEAdqDJqsUmk1/xcqiseukAq21Cq4lHJxL7zwQER2uEWRk/Xs+vr2/xN3IIJpM+pmN0Pb8ViG2SAtBZJtbBp/LRjslgQYpplSyjnfvt57nYVxNZgmPhwHDjgNF2ATJlIDCJu8k8Cs8pgklnNecP5MFlYSyO14/LvbjERuq6cCpZxDL8Mh9e/vLnl1vG2w+/zG+Hv8X1JYtaY663Tdt8YMdMqnRHtj0fmKV6oOjKhCqk8UkPqezsSqqv4no23yB9F8Y6MLMBtAxb+7hOXsKvy/lUyht1shIdrLJAyhGcf/A+7WWCQ+dtWkd/LQn0mhHpEVip6ON17dMFzpPDKHn558RRb+Ucor1CKmyiMKizIHAFcXsva2+Th/cAmMVk5RRzwyd5M7JVcsCHRqe2ayFzqTP5CdvLUqoQZnrqCHbgz2qt1GPFaImnJ3S/64AEtIqJqS23gg4i2K6VHv59On+eUl23BOQTKhGs97rkR7QVV9hMIc9IKC2H+MbhyO2sBH6VTsbRLJlZtrfD9abQ35JWFYQ/PMSLfWudocnw6g6X+fxBzvwEAsAhwD2wsOHC7i7FPEgPYQL78hBAGWgVaJLlx7lf7U3p5YU5Idwf0Dw0WTmaZD2FLVXTA91NjZWCTnZi4Hz/UWo8dET3NKrUO8nGfPpZFPmJndhq3kgOCedpZHhsnLN1DgNHgWkDmQiQnns3bol7pEHAvYfagDdj4rcY1KeZZx+aGjCsxOjb+efb/GcutNxkGGXlBd7Ocbrny/vnviYic7ptrl/o7NnRWNKXWrqDknDCqY6z90RUa3WWvB/+db5Ucs1eoszb7NnofL6Lqa9Kr4UkKHA68+46vkIgQ0ob8fYwpjkaqABvGtli4UYLnhcNpKu7OqWDjJimfosCkViw8vlkeX9syYAcNO7RNnRFLP/lPbXUFbfbIHuLJiARhg5+g+VWxZCu9iWJecVcovuQsJU/Ue9F3waX89/KbHDbAppjrYfVUpkEZn1nXLi+tW6daKu6tuQJMlgNEyqzODPnOPSxtBaANlpTtq3UkW1xnhgno8LZMRGoxpuL+2Fhz5dNAGy/SYigobtHoXa00rkbIdgOKUOKGcGas9N8S6rnJc1VJ0+osOkqoANxsBJ0p/kTTmtiK0i38/E98ZQUFUeCGYJTt0NirO+QzreSQacY7pzm+WV+SeFxWlEFP2s3EsrMODeSqTR6t9MkQ0FnoelO56Kp0Es3Bre1zrm92OBK+kS4iw46HADPutEqT5zu766h/T7Iu3Cy7o84NnfycilNBv7BCrj2CskD3T5mlJEG755NMkadVVjC8NeE1i8CUKJG7azbBGZu8QIoU6HTQCkjgII8QoKta75vtwqrcVfE5z2KBRVIvqxbT6jsukx57aAp4yarjB+fIWsHvDqkvqVVl0lG7u/vf6vFccmBG49wpE4tnzIaTHFMkZUbJEpmmuzxOV2uYOM7mS8LFnBrsRUvp7JpN8j8g+k7RQtxK1fSZoME105W9B9NPHKtu1ibCO/CN+t3TZpWbMj+LvNcizYeCVN1ZqUtq08i2oqO+u34fPw4FAQDU0NJN8sji1Yu8/McgxiuF1Mlp7FAIQ8LiZak+p1ltkzVpXjYIUUZmhbZOGtypEQz13IvjlSUaL5ZKtf7z8QTuAhI1o+PSebuXGcVfxZ7H+nafn0rGExG8nt1HcrVSiItPPDPCrIRbrAcqTSemR5b2UfT5qwf1KRCRkFN33z6aLYstXdSQSRYRfE4fr0K5hdl8cjEuIUMWiwtyb3KKToNFE9b4I5o58+5kLQPElo0WEv4/JZAqvU8DHUoNCpLfrJy+fh1OO0d+lY6zm2LyNn4QPmwqQKm6GbJyQ5nss5ke1U9lEayPDmgSKJFwzUqLZb0e8RyCJ6OAJ8WRBnRGbBfPK6Kl+N15QfZcasTVVRrlbwK4aQih0wRF5BgrUrDB4MVoNUgv/fUITGAP03f/+Iackp+99EqdVW20iCPjQmAqQEp5Qk/2kEu2Wcchu82uNG4AeaQZ7POisfLlErDJIbgTdDqw0KJ3CKyd/iWMRiwV60K3SIcIgrTupBlMhcD7j/HmWrSnURs9SqpcBwdvYD4326JgGH5/+QIyHK5ZaKig80LZVOiNc6bnTy9k3wIcWzGS26q1xAr9IO1S6rg814e7BOEgRwy/x7HWjsBwo3a82QFsXhgid6XrsRgudEPC2UzbUtsS2CN86A48v2mvKNKeCT70Q/9cSi5nIixz4EvubWWc7KkdsHSEWx6gnvHWLZfbw2VDjn21oq4kybAAgr8w301reyg3WgfW6uTosybDBNxCFg1vo/zZ/xZvM1lVGbl5/PY8+u+MCKzBxbOJ9rYJVIkQKrN56eup5ysXOY/+8ynzOnlimeHYoHVi/hxOb4fLn9rUFOiAN/YRRoQ24Eyz4etiQFVmdEKeqot1SMByEEtZgEJo51ECP17/rsnQiDGX+vjrjaW0L8smTniZGia7dzb+jfyCRg2omZzHa6PS/fE7mlE3tBsMqxoj4caWpxoUJyZ5+3l/LxTTpRJaY/aje8sqFE09PX3dk4J0sJflNsYHdgdGNgaK7eccpQJUVEu6V7mCad285mQfbWgiLA6F41wsuaBouwASNtkgVlWtNHOpPTt2q3iC6SP1YylZGhHCvsblJKcVVL5uP94Oz5XF7EnaVI3wfveWtjhz5l9FuszaiuXAdQOEmhh658CH+RoueX/3A/xsl71Jt4PV0ouBukj9hZ7xSredSzqU4Qc/w8Gc/Apk1TGHF2Kxq9Wsk90Vvn78nxLaiAxXLwUAYQ8hCbgggfgcCbrhF/N5i3BdqXbFbYgAPvBuhMv8+HK4Vcv82dm18wjVfWyj2fHgW4dy9nNRt7PJ16NEzVJmAWKbEOBc8hDyG/nBRxPC2L6MH18edvjCihmbyznM1o5fhzjX+5CAurX7Kw+u8v8r+gRxu+/Mg/9uyR8l40HFk54yd2y3y4PVKCoO3jwAwBpkypUthh+P99qVEStzLZ0Vuh1SVoo8UOeX18LH480lTvLQ3vYiDfd+bWqYE597D7A+wHCpM903d4MyOWDatKPVH/etFIgexqfg2yJxXoVn/MR44Dd+nNyYTsLCZqQpOfLXGMZdMxphOKkBaCq0CpIl6fNSYfOwrde4pWpJluCrAgN4KJts7fkzCJ+Ml0So/QSmzmh3Dig3DhZQb2h0k7E2i0q3mZeM5lb2YQ+EkM7O00j01xYGK2kZJ4aaPkkYBpPa8N+PC/ZCqbbZM5Ea1XF4UUgNxIfVGOlGq+HU4wcFvXlfTdNL4v1o3UvXg9/5qpcJbU3mhnea2J85cQC0wVZAPidbiqzlEzTFmtgaWxHAf51tJDG1eo9NX5albJl9G7ntxQ0W7s9ja+LGQbKryL077YjFU7qaKUC5RNKLmGSmYdWWtjEHawFngzvr5L4iai3wir1pOJV/e6ner9VUF4uCYq1WukdIfXqzCowfEo6JmVn6mBlpxSXVHowE5QQhoBD0fK6YHOnGEqyGb6xjsJVOU8F/kxE/OetGDlr8O2gQ05GtsFyjcpLg4Sn25wx63JypMuKwVO7Ie+AVLDC8OtHkSnsZPjdW1QN8cqYCy4/mbrKrstgXZBLfLn4LYXHQjiuvAo8SLeix4Lwz+JfWkp/laiAHBYzm5PKjy/Ryag2T8vClregptHKpcJQQvWlTtUizwYUAQNZVrV82lQ65F0r2b16kO83FmbpGh3rt9uvNXQvwvYgV+kAqrQWDXkmQ5Mq505rAbQpHVRK0W/pzZLiZr/ANBBvrANUzoP1GRodHnSjfrAS59uj1mdQ1oCW3oBJQocNdGicye5Ezyjd1oka13BguHZTToDn+UC3pO1lkSRtz9OEYeioteKzaOp2OTwndqxScGkK9OJW7v76Oc8f8+H5V33hTASV7Uy/a+k939FSUJYL1cjWKoQnS6s08PH0XnoQpNNtZW5uB24jJQpCh1Kks1Ii8bz4WRQnpKMVrJahdez+uOqkqweV+t667m9Fzo0JBa1CdQK2XH8VzazBSz8DQZg3Z6Kiq+yIeL6xlln10PUyLGxzvN5ZwfPt/FHF+XcS/RpyBzu6oYfMJzVah8FCMlfLfpH8k1VVy0CLGjJAhlImVkvTmiPlOpBsjP121KL8gVIwWNb8YIGs8cg9AkCeR8EKa7hzIMi1MeCAhpKUQzOAgzyT60AUFpDY25LVUDuJv3SrSyI4gUhPj67F0XJV12YFPvFJ8bKFUKK38u97F9WT4+VQymmtxOlipmybJO0VB6RHa67ir10dgFIIfrupUDnrMcmj1VV/+ypx39EtIaEwVMK2+7Af0CxgRf6r7aImxrzpW1EP1e4eGjejVYepKi5SYgRSh63Vj7baqQlGUUnSwcFpLWdgtZYcytIY8cWC906X0V2NVSIA6l8AMgCiYh6qoPHDW+fa1+5Em2SntsPp7UwJhhInKaGjLZo4tnSAAwcY+AI9VK3iMYdlgI7iQRUFXR9fIoo8kUHBnTPLYWWAPFK3nLN20P0Ejh0tqiKpV2dRXN1Px/RZ6pUxWUUyvmyGiNa0pgLde+BJ6HC+AgHkuwFVSzDJDtZNuT63zMP0MvaZ3Fa72Gq46Am2+HPuJzV9IM8rFyyk/wPzWvlEEyHArR4Gi6NAttAGy3lamdprvNLUEpdrkL614tcSMcVcb8Y9d78mBrGiZkGFQXMy4+idJpsE4WXgZW/RbN7vjFEbxeOttG6l506s7UwPntcWHIg+pz6HXIofEfoNYACcEOI2wMtKUQt8lk1Od8vFALIyIM1qanD8Od+K1pMgmRQHq8K1VrUWzAg7eUQaDKoYb+ocfB6u4DlNtJcle0YneT+DheKPluLfvZ8vf0sbjlTkv3mb9/fzy73UxiUGD2Of1nq8pSuYoftdvjkn4FMGUFZN1tX3+et4W3mob0lVtMASiC9ofPzP+P+ZXCnIqGCwmBorGCEZMznV7Vklh58vczzI1hU0Xy7nQsqYPN5ORShEz0kVU5Gurq5fYXJVy1xFUGFDu7Z7enSGSLXZuYDUTp/9pzFXfFyPWqYua11jqSbykEGNLiyKajnjo5qXMfmpZXQxqhwBOjk1ZZkGNfFqMlPLitCoFn+iiW3/cB1Ygo+00fvNTRUNnLz5qG4BmMshV8jnOXSVXQPYm99IRdS01vcE0a102YJK/lKyQ8vCaJuDLp2Nfk8NLXviJrWcUqeFllqOk3oB7ymhSfgcE6o6UonQ+alC6EyEiOr6jYOf3477ijI5t8bga+3RxPiqTdrRc75LxglercUV9NMD9TapVZbj+8/bORFK3C8slEDEUergVPpHSzz/VNJU8hskAl0GPfiZdXK59QkKa4FriZPJI64LYPsbNqSiSgW6PqPW6esHso8QZQPE9uiA1ukmLZ7tQJ0LKsr6G1JsR7QIyIbpRGi7ykggXp8BWW7E5w4EmB40hC26njo1DZ2YNC7H27WsNRCQS90Ip2PqOEjqem9F2Ugc/9boa/yL21cNlzWS66Hu5GRE8RJJMVA9wTWybBqtpx/2TNm9XDMj6lUDbphJLcrWabIdZYiR1x9V1+4bVmuKctX0WpUQWq6KEUgEl0uArs+HR9wrmt/wcFy48CEjFTULGkdGH5tWqYRo6JszDas5ytR2pj61YK+WSTwVF338+NPxHSFPW7XqH4f1PExeqfpxUSPKlr0yg5oxj0MvF0aaklycum0Mdm0qrOiXk0qtLcMm/eyp8mrLQ8N88nVuPS9BeZOYA2OYIAeSjro5sOclQRxv+sC4B2cWtSUKZmN+LufPKy95GfyqxDY657jM2weVIuh4fX47lyF/K0FQcb8j54/aMbK00U/Qf1Sdy1wmFCA1EU+jzYHXf+wjci0Z4uXZsBFmIx/qkGtvVQ4aYTv5cEmSkN0X0lBxcFo6kFcGNCMNKjRveUqi/b9zy5+jnj+vo9ajgeufUiBX3hJq4up4XX9VWitliodCMZ2oP5qYX4/FPpa+rT7OIKCX6NgR+p7Ddk2hIKDCeers87KE0+seZYV6vpc9BONGmrMx76spIo13vqFvZIw+XubX8xd7AfJl9JF7uno6fHyuM7lWbc+IVu6nfWaI7l51aElzH6RM4pghfklsN/8JJLpbu3RjvFsRshANrT6jcRQf5o4In73h4l2XWOzwnDoFj2WTkLyy9a9S4+UfqA+nAcAxoE8ubBKDKr4l2T7ejtE/KxpXZDLBGFtE03KlqKP+dU1HenH6yP2rOmaaRkAvabrGnPRxQIu4yXidqkDAQOzsjUoOVFUHGOguaVRcT1UagPaJz4SsDi0MLmylC7UwlyyfP4oV42mtqyChNPZzvjwXHOmE1NOXRE2PQGaXRlSHe0AiBxX+pYsRNPKLG1+3rkRAWZ+NQBgwWuib+YBmoB5X86gnb/C8NYexcgUWKRJyPFEiR9XK94Dsj4abeJo/S3EC2fOi9qfEkTuaPM6hqQPPP1KrG3v+0vHXB+41HFrZ2xuMqGMv4ECtUXoSqabeQHSAGc/iGpU4ui7dECN0csinbSHrt8Cabdrfr86P5Chv6ogoKfY5HRxXi3421hUfJM5yNO7dmtwDIYGNC66i9UA+g+Evf9M9SUK8KndXVS8iSLDUmJ33EX5Dv3GdqGX2uliEBPanZI0xuKoUIXdbUNEPNZkIR+dWbjCPO0JfvwtUvgiaOYLVv+t1adnjDyLrsPrAWnhAnNhqDdhQtZBAr6DWGKqSFhIsMhpf7Ha5X8vA0E3kIroNBqDvJl0XQ/6I0cg73L5uOx9JXnn6yPupEmDJ32+MVJxBatXRF6wFkpH+FPijeiPBdf/4qDgh1E2tj90pgBCrrXGr7jKVQTIM6GXBx8hay0ZH/XijCuJ6mKjXaDtimRjVxrZsxGBd6QIJFeiVHjJV46XoiOd+NKLj1ZJOokGwbz8amSphqf5KJLSnlyKuaXT0EEqmDUJsjgD6oDIWNudMhYQetSK3ZNjQV++/jx/l1pfSfYN28qW46hYPnNPhUkpTyF81qTyypfqNXChj9oPd1ho1qozrdekbiW8atupVDtJaMOXpPFxVLZmGeKomNX78fXx7q1H2yFjCqQSav/+U7qRMTahTsVecIeEK55DSAA5B56iqNvw2EnAQgxhtWeqSML3kaxs3xwjNCZN62Vt6ML0E5IwjwlbUMCfV709ma5I4sh1TXcffKsnIc2vESkSA5/Tz1ZaRIRSlnoSq6L+Qd6RWpt6OPy5xc99vx7cCYC9XsOqXaBIwFFChDaWFYnqHLsBBBWMl28dXboAUX18FSdSUYYaRqBbUTEVC077e395qgEGCkGnucTKQTpSaAargqx/kXLjH5Geoi+j882mvZ8NSLeo862I28nrxeS3rgl//kZJNy4hSw9SJ6/lBUjXotQxVAEd6bBDkbtV9+X74PddSPY5aE7xHm2wAiLff2BDUYOz98PV0mf95KjvRU6MqVbm0Zf4wcI+HxvUpOrZPK7sFb0RWIjMs1Zr4PCVfjdEVbRlqSWvVSF9R+KGGzEEt5VnyPr1Mpo8bpgCiA5OaurC1fXrpvo9beRA9wJNaT32f59v1+RIducuR/I2JZMwBKXYBimd6D9P7fOHbu5XF9zaDl9pc0gQP65CvTyQpnR833A9cB/wregfj8ZfvtYC7LuBfwQ3tdLd7eesS8lRkxOTpFTYXQt/5yWahUiRz321AdRS4/FHlBKmpMPWBal4ou6GINKkg+wp9D6X89NV4PD39SKLsl6fMD1Xcth3ho9UAuC4CRdRmrdp8WlOAkqFzq6bSFPknL8GLbW6iaFWnV9Frkp5GPCmM11cuBS/fIgO8VYqt2rVO0owBXaejPiPnOCPnCmPZSMeADj0lA7tm9pHOfHUDrjbW7MKPc2o8uHGQN/Z0e6j5tYelt9ty9fNdL1emijVbDfxggIqnnIJalnqMLct3rUwrtt+8uqKW6WW13asVbmHjNr9/vJV8khK11em36GJlIcnib0AZczVZJIY/yOrYCsksq4kCYYW3+khIY6eGww8D6ON4P5xiaFkUhjqi6P3m2+xs5YijqOAQEa/qJpc2EzsPfSx5nHRqNmY1U0HjuIk6h/XTVBhY0Ei0hVt5KHXfTPZqpGTXaGVmtzOOs81EbWI7Wd0K+tkszFy4DyC6s+Qtq7lKaaPGF9JJloRe7UiWZtbkcd4U0ZXn9LHYWb3upu/svZw/TynKq5iUSaNehSs9TG6tSrzT6PjWo5PFyL7digjPVLqMdfTrPKeXeC9ZiyTyqVdRb6uNX4fLy+v58rv8XEEm+HsV/bUasfzAScKMXKfCTrIlC7Y8EDWQ2hK3mqomHGVWZFAzWGxgrdvvl8tImA6vIiDYmiLPHWTUOKjliNXWe5yYZCrTuu3fzVH+xzff7I/S4J4njtDZeqvKw1xV5zNI0Mfw3Rsp6pxBpnEGlbntYUTRwRwpPerVWmlp5VhZBVPDrUrffLmHrTTTNVty93/ncCnymUGqTg8qr8RqwxImmiQFtwsq9wEsFU2IQWafdPStHA55oJ0zG2S1cNAzWMLYntdCwq1dq6b1pZF9W8pE0BivhyyLlaTtwQlh4l1V+8seoxMEo3LyEEGH++Yy1SlxSdlTbWyClf1tNRGvqP1RNBYyeabr6sGw8X683b72UxJkh/D4zdWQ/JPK7qPrRWeuXm3U7zq5wL7zP1VGqYmKVzrI/mGGkXUScz2qOfY8dO+8TtRYrwtDZwtVnptBXhfTN8FforfZq5NM8rZwRnriYaPWviWX93cnYYVAhoqAQUUk5vE1VStK4AZVBGg1sS/idFKq049qHW8dX8mPDBR/6tIgq4HKL/AdEV6p+HRpYL+oXEP1m0lti5dmUh2HZ4MUoHRKBGkk1XKKdI+cUp3mTxqpxqwNHRfTN5f1amgXXJFIVGcc5H9m7u12HXWTDX5rElHnVtMVJwiZSqVhSX5TpldFPCoOSyuxt2EDaKsX0mn+3NNlDATKUUd+J9YtzfRqu4yq1C2Ltp0KctzLdEuvAHSwrdqYcjpf3rnTZyIIgc5Nto48/nuubNJWHrke2VSv0zZu1hYOkXiGVsx6wgQBY+u7TZYSqJpBrZDjUZpAo5eRgXcDgDogGgvjVrTWzjE8ZmFPXZ9V/U1E3Q+qOrBKxIeh61wFJPPDMl9X7XGUTHXoQOtagNLBCzkYy+7xOJ3L0nfk0UFeowNBY0C9VA/htgdVrmXfUccbwPQdjrAAOuFBxXTiESXpFesa6DN/e9qBaYP0nQY1xi2JEqeOaqXoMAsbKkr1w073d9dQlDzIov+kIrviwKc15b0Wjy/zP0XajmgR1AxisvN+WlKQz09JyrJ0QDpyQDRvMJo5vK2AAaYBlEj2Tq3V7fsPBkp5N2pckEbunxqIucB66jL2Nfosvwp8KKms6bILsHE7r/uXIwrp/nX6irq/q5rZvdyRIwDebtzAd6jWqsnZ+ADZKsnrTQptWR/45f7+/rfKkEFAg76BJLI18wkhVvavyU73SQX8xcE54aiIb7YygApqmm8xVJPPlinLQQVwxOHxKKj0GQzSNdPBd0nUfu2C2QmAthJgHtSadLJwUgx4acD4DjkDpE6lJMVW44do6ONwuR2fjx+Hgq5ypGjWq1C0pGO/Snjx+qT8sV4aegw/3RRFdJkUs05DypYUUzHKqTBsXHebjPQUGjVJuKje//w5p44D9USYyJiuirAY+0i569e3w09+H0rtNdbplmjGD/xrgvRGBrURclW5ZzdXksJm1TJw7ofMuzjpIcRis+Qk6WQIE9Qa7SJ2v/pYyr4nTLXxDg/+0MphOBHxRafm96KRPyUpcpBIhF4tWK89d9f5n6LZn0hHtR1/fkuFqzpWVRZ2JxX5cz49CGWvz78Op59lWwhpfkz6e5yUqn0nYX69mnRe6q6PXVp7D0exTAMGcV38L5n73AER4g9y9IPUr3JaV0NWOCyMEB5bRfNmIzvXNFroyII+L4vEwuX8c9d10pBLM6n5sHN8eI2NSR5/voNe/aAi2zZDO3x+Ry2vg+rebSbKbJD0K7XBl4+4MvY1JC+D/Da7K50KHreKJMk1lcmPjVVCzViqWnq9ZF0cQag0gLp6UgNxLShueuLhUeu4Nf5G2aT0IK5d3gY4STUB97C2I7EiMi4QP+tdMymjmZpy+HyQbWPq2oveyLUoi8ngTq3aLONUBXriXEdwHJBh6Df0mMocsTzh69clgwEfURw/iXLfuqXrNYVsXNOR3laORT188qnfUi3atJfS3vHkoG4a9AN0m9pPq1101ea1Xl41Y1YWcA6auB7ipi3oRfqcUXGD6lPjaSWHH82KGlpsw3e3q+tYaVAF0+x88U6Cr3p109RlcTwROKssxB/nMldOqgVBTbingSUYiyiJGjUNm4YmvMblD89UK728Tu23S8OrifVWth75VsVCJAN7oAJllxr1EC71MAciS9fxEh/nzz0SVkqq5sNaT+Z/XObX49cibZ5684rf7ui3q1t/sbFmwa+7/UqHvn7UXebU56H0SBADARJyAX0//aaIqSbp4hP+7GdLstpmQsROdfSSDT48iEas07/U5fh+uPyt4YiotOi2lja1xBdtLaCd599Jl6votaNOaONtUolz10ZNXUVxvaq7pVIidUQ7gIQ33IVW37prB+/v+W+5drwsenq169DqJm5IQ2FSK2xGG3EzkauqFpBrrZukYR23EOoA+hW1WlHQ+SOVFYx1en4/XuenGC+fb7e30goj13QbX3+fbuenClElyRj6Ub/Cko0KtLWVjkGcFnP87Vx5A8rIwvnJ7iDkBt2E8kSjhn+p/JYIAXZdP7JzaASPF0QaotOpL8mHSa5O9hISPILgBaTD0aL+Se+neYkId8h4x+2Z4B6Lf62v1USnsns7yeAAvuxNuU1vzVYqmMNAiXMwGTnV8YieTnR5/n1YQdosRxdkOaVXq/+XEjQvI5lODVYvz4rcbS9vsHFjhXKYFtXxX23mxcBGpdO5OZMOK0FFMF3mw/Vc0AvKWE2NX3M2oCYGRBgulSkhW0gwAgbIjNxZqr/7akDpe5aUOOgU6zd+ajVX+rBb01we6PhuVCR1NHH8SPTty/+lkhr106nn/yWVsZ8LZgSZsVYr6NF/SvKJqwNaUtq01Gragt8hQANNFxtc6YueJH/R0+upuKIIEq0daN8QITkGmufVDJpSxHkq7+/+AWvpuSQaIXqtwXjfNyYR7uWVBTHD5N/nZbYRAKjkZIvVW6HCR20aHtI8ATpJPZTbR7Vi8LD84295CcULmg73jRdfvSoetgpqeqIJ8mC5Dc32mlBHV9PN2XT1PQmFAN+8VevN0d0/3+aKT9zKCLlTE5RpfMExLQtN+tJIw1R9GGooUp3w1Ui9f0jeN9El2Rh6oTAJ2EK7SQQELByw+w7m1G2PLwkTRnq+vpiTjdW3ej68vSX2azIUGEn1H5ipMPBR97WasH70nhc4E+mm6if/MvLwcSy+ozyQ9HdfBi8ld342s1zaw79+8QKgLlgVMBsX/fPhpHl0RJbgMw7NQzve9wD36Dy96yP2+XtP3LAelGEdwjYo2nqdfe7RG/hyfn0t0KrUptWpKcNkoFT6pc6OSd99cWTunaoJ1pGeKTq1W2MvXC39O4q6sFFb43S4nt/ipjjefqVSQQ7mit9KLpduaRlaejWu0Pn9D4aXpwT15KjNoIkk8HyZa+3SVLfVy6SX+fPAeWGSSWkRtKnRVKL523NbdJStGPU5iKPVMkeQ8ziARAr8JK5V6+PJbvlSvcRIjxAc7kGvPepr+uP5+TK/HFO97VLergPhexs1e5AaI750jR0izPdBjYijmQrFwETbQF0wH88fh8uhEFSnep0Kgkljd7lQglyoeMI4dAEuVjrhHVEzRsdZXSmpIn9meQ3a+2obxvXwWh5mEmmixi3Xw2nJw1XfmqhhBjVRk23sy8WdJ2dZPWSyhXpXTJw+0pMC97COSswGq30IHZ3Og9qquBj5u3TcVtjr5UoeDRt/SkIcSilC4iBsJeQtWAHOdGz1qYuu5P1y2ZXIicNZx4+lC3rnqlN2zEPis0Oeq0eRT49VVgYfrt8Emnn1N807xIDcg5PxyBoKXWZfVPTxMnR3xxB9UafCsdPgvRcSX5uaIlRHJiGkVlrCmhvKt5z+0+PdUs0+yMSITlCQxieCxOobcP7ZsJAS6FULlATX3+Gykqvue+tIglFNoS3+IA1s5fXajVs7hf4rbo+zcLUgD1RKMqDi7drMv+NaAB6ARXcdUKod6JUCMhRB9XvoRUqvYaRmRafmlDYjO5pFR2wx3jtg9TMJku/BATaqSSfxhPP59yHV79nNI1WfRhUE2uzcDj/3L9tS5dejlB9Q0eiB+TdO48SCtLtfgizxDpCNa7J4sXPQQfVIRT+0p9JHh6IZeADdlv8P5rdZX4a/7UTk4BDkjJbMn/WvhZm5mtckRzWYn/Lt7fx5OP19ntkJ8o7qJao38bAwv7xG33S+rJVCNkT1KGs17JLEQUK2hjzrA+QePOoiHuxdqHjFz5T/tQPLF2QR4zSDpUxFB6SXut0uxx93zu87xrPl3eMRKgeEyhBg8qMKzEyPud/O1xi8FUkBRzu2UcEEDws7GXJZvcj5t16tiCcrf37mIJdOH9KW13NUq4U1qqXxzJet1kTj+Ae6kgvWxCvltyNXv1eindPL5/Hl9muJrosEtLwjvE6XlczMaX/seccIZ6RrMyYLO20WiZEdEfZBJ97pqgTZ3F552RMtkfWJYSBu2PjnH3R5ymCyU+klspUUi+6SF508OXStamnjPQahzGTUyZs3fPsimblq/3ske9W377JSiO5/kWy8DWo9ga1UfpMEfQZVAyeZySrKayG7coNRRBPUHH+ydVkk8N4XWtMCKNPRohnVGloy8/c2X98P5B4NlK5t1GQKhhelWlKWbVS2KQznjOVAHmKj1nfz8Nv5xkCtgfRNG7XNJBp4PqQGqRLFS1rJ8S4yfv+SFH07FmcIYeWtH5Bu5+ProjP5qFbd/paM6J46u43IRVrb4V8c98AaRhbUeS14b2TTnINL6fR82WZud9CmbhGyBoCxKviQrL0zZErmsjoVAn9devfrNRq6hy2HarNQwLakA99Z0cg3/HPUrz5BEseNaCcGGqN38JDVjH164GV+iX8VIzH+kMSap2KnHwaKO5YY9kN2gpBFAOpgtHzc5/v7PR7rqXx/fI0L9v7GCDAvUx5ttt3mmoLpPz9SKFVvh2grGhVtu1mpeTwkRmdkPm7g0autPNZzdeiq7jp4mA7ZIxVJfl17EJICa5k/Jh2NoLa9JAvzR3FYyEQFyNF1uMJiIxEIf+xo43rmkjUOCoV4biKIc2v/DljgMIzuoxYImY2TIaj4xGS2vkQJt5ZJjBGktDmn0GW5QjN8tApQtE6wOlqVLVOYK2+BTipF9ZZbMB8ub8c5KROUibQg4/deLe8nG+/HayJu2fGliR2ko/WTga+PRWF2X/ZppY3OcrkWdSLyDuRNOCFH0KO/fbQcwcXcjigkMDAZHSCq4ky09HpI/XqKRO9EXALGrnmdC45E2WqXa1ATelvaLSrBLzeTLNE+Z1gkPqxXC3WPkeWHl1wmVoy3aMLuvDpKf6r4wTT8Mu8laTqZvgrW2n8typtEz6OroF3XZq4SCSmvsgm5xL7HclOL2tFgDOe0Uy1NgcwuqaiK1Qwf8LKbsc1XdpfLFX2uYOAtR3A+9B0AhqpC3+OJRcWwId7mQSWNWkcfT4v+UQxumH2vl8HWqFYvyciew6+XHv5oxY/RSl2nqpF47DgZhtcabdzO59f5s9aOJpflaAXE+6OYKUdydrrNsstt/psuZyAeiyR+WDQHNMh5er99WWtCltdIeIT4axDQ0k6ThTG9MrzYYuZ2+W3bAJfSspCYFemYoHx6Y52dy9hpZO6qoafY10oAlUq6nuXP8i3QqFClBKbgyJkSxo2K2UoDT89v95e5yltB9Byj2rCzWlkIJ1JzV8X3IC4ulz+Iby3PuSTNLd5NcmG4HrlaXeN7MVnUb4I8vwakg50HKhwZfw+8RIv1bZX/bsuJU+k4JcWjUe1YzRaYl0B2n0z5dI2XAH6+dQSt9squU2r26SGFrZPpwVKN0I+YN3uPy8ko0N5sUmNixvMqbm6181VSH/TyC0/QMHGbmEdA+sGqRLFctWdtQWtjXA/PKT7l6pIE+Bj11zg6ISB/Xs53Fr4JMjNlRnXJwqlQtvQyr+StmkEcfb/+XenKCQLeyUsrWAmT4/VB1FGAJWTlZoK8WR9AjmNVQ45XSdczszxwL/PLYy60TNi1PfS09c685Rnz0iLBEy9bnHvrejte9wiRQSatJ5QQe3Td6GDs1WJyZ3e63tKo6QRGAzst5ckTuyEu8dae/p9nBmL1MiMyosLm+rzNXFbtdg7tAo3luh+v+QLgrAnxdeLEDpDk6VEdHeyV/Xv+uP34uyu+DPIJE47/Hr1Ho0rosphdxO3LG30kBqhGpS7ZLPB5M3oqj1nh4DL+d4mWaeRtGbaVl3dHvDfNyapp1EvvYEKhte+2q9j8mZpMvfypowHOuWlK9QTJaHOew6w+VPXWO4n0MVEZNcl1wjiofenr4J3q+kA/orHqz3W99YkMBFQOe6SqBisDpkmjS9UzM71RV0enjhyVdGsZvhNInyhK9fbDK6Rjvcy3jjkVPGE+enAr6BrT2fZO35wcZbPOo0qcS3R9sC+Wvco5K9kNm6dqvokqGy5r18HKzFWVw2XU9s2Fpot+y/2jU8UsRiwNbYky69vHvPRmIFWRwqZSvnX8l3LAMv89eZy6IPTQ5RNXYxVFYEm9hw/tkYtuPQBHFkigKgpMgoi+0dG98x47NlKp1yGMcDh6OitDW1XppY4Zb4bQulDvIH/UhGxZj7kbrXy6pdU7yJtq6rcEMCqQKk7/YdlU3JUA18lvxxTeW4c6r9ZV0d2RKRksLEhFd5dohA0A662mUzsSYLJRu3rT8PPPveKrhJ84c3p10VeJXX0wiKQ6i7G6/iPdV2I8tq0pAq4Snt9mz8zMkdS1SSX/h2vVroh1fK2Lhjj6RrWpczWgKpQOntoN4EkjxjBLu7ZI6SDDFhAuxb0Hf9YKq2vSl4NEsE3dFpttZ7X1tlXtSdaYtjJTNflJ+RNbK/upKFC2MlnUtigo2pZq64F5VAzA+U3VoZT+KDpMddH6ZEqj46c+SCu1aTHyEymdhRRRSPk7ucnQ9+4mK33/Pbu+hI32VgSuEuzLFrrOqkbvOPZbeSu0LYr1xj7aMX1TZaZrtjATV6LaZ5XM7cm+5aE6GV0CN41gu5Nuf7DKPBWObToHTX+oTrMtSwCdlQG1mbalZ9VZvvA3ZNvEqmBdnibftiTanJB3d6Aq6JEzGVV21/UZKuW2dDEmC3xrsm4T7Xzf4mawnA6FeFvWxyaV8Hod/w33diej4KBKf2dbVa5mGWBZt7POwC1BJ/aZpZNwdzIbEL5ZlwoPN6m0mOiZ76m4O1nJCBaAzmDjnkjUyFvhq0LIPVJGtbGK299xcssYWJWYf9hRablJIyl8cwrtmLlHoh3Q298fw78n56a+L539MNur83OP5FnprHKrlSpFt2Q7tZyIPUt3KwGWbcaboucn5ILt9M2nrxF1y27IYNWVvuXqlnARs3T7DV13R5eG/fn3jN2yVXmwlrDFu03Yv8byIDRG41Y6jW2+CloLspoPG6WiTXqfqBL71kIy2TzJkkUoekwbqsqYc5VDYJA/eOq2KgbMWrUXlS2ZXIjRyuBW1tIg983UIWbrtxqEsUwVzmRKCPRgc9OVWDZT1fI1NZUil2aio6sszLJq3Vt+UJWk2NEtZB4ku54N13BnrTERde5hueUnECM7pM48MD8t2lf7jCd1OlGTfGCJ6CL6YcvBStvxx6HkGvS0GQFttW6rh6GizZ2ovFzO6XkzCqoQGktkq4VYUDiNqUHWSk+qFMOS+64zv0jJbTFR04wFtK5Q/bayDNzm1G9redw1DtxW5mLaDINFu2ZnTolBa0v0NmgTNhuLqryypOGAwKe1YBAWoyzxKlkLzSCVddTcY/YqGbyyjrp7zJYpnQeVeGFyYQKd7r7JIBxvduhoDKiDTFNM7QbqQH3eaiHWSFBlempqt6sJF4BViK4zlxLZSrtBtXBFWeAxJUE00r3QIKfqrNyizV8qjyorHbejMJWEXZ3V0qGymA5yzU5hK81giix/UycyHWTOZwpbchhf0wL6V7hMZZD6zVidzpQOH1WgWxipMJpKR9jM7tmkprICMvkNewVHzDqFDF7T0VN1x7rHdWpTgkN3Fu52z8/5yo4BZYCCtZZ21JzS050AKeqabbIAbVRJ6BfDGp+kDGo6y700OO1kH0RnFVN0xjRH7AsNiH0Gq7Gh0kcjL442g7F0sudkxORAk1nGIeuSOr9dtlb1s0qDJqv405aaDqjvWPldkwltpJJEY9VEK2xiI/VrNlY7lk0/JSsSZlFbI4giylxvBto1JidqgbXQRTsyJ0cTaOb560UP2cRvJSIVSid5TuhE0Y/xFVYnRy6c2VKkkTKNJGnTWEnvGqWRvIuxR8xMNa5k2nYSvj1YB5tyo8sLYAIqvUcPg84LLW3uVUuITb6x3IJkJN6dWulvIqIRb/BGPSxVioeOwJQWGLM8hLwUCmpz83WbszJdho5M7YYVQjXFKl5dP4pQtpMRYG91vsQTbS4a0WUzfMa96rrpq41ThZ5nJJowM7ZJKcyXeKlUOwBkZkxneVytXCr9TcRX3lkF8MWAwpgkU7PWhZ3SjwUFtCzrgpyoMc+56DW83X593H+8HZ+LMC3IVTQA+gXmwHg5WpbBqFjULYguw5mrDSbWsXJ/EVIZhEcOQJukk5e9KRwLZhslPa10FCYClWJLuQ60XAF3vVmj2p5S40WT/XE+dwf5DrrswBb6wVxe20MUajQ651SG6dVU0tpJLa6vlzNlRadAc2I1SC78pPPh+VedZ3Mi5EdneQS3A8OwqVfebTIbVvgUN99Pvlo7eTUHK7m+jt3v/U46ByEfsL11t6V60fVXAekOkvp0U0fx5u+JB8n5XvgKAznclp9UPYe89IzbnIrVaaSTnfNHFaDVETd9hk6hJ2DI/Z8m78/SX12Ld4mO0CL0yuWQWr2BCEas+hFjp4J09gccQiAJTOSB+aBAjmdznAKOkWA5CCvkis+jVu7gFskeb7UP3L5KII2jeMr7bMcHMH0DwOpNX3+1XbCbkfadh1whfrYHjs6b/ZS3r903m1qi2UCpwGTFKgusMv/dAlsVLHqgaKKs5RBZf99seF/LTOF5joSldFYPyf2ERjfNHSKCdGcBO3Ntt0Z2R/wFDh08nfW7Vntl0NFLR2LyW5ZjQxsDuGXdRfeT6ivL/GL8gsYx8ChC17xIgmRYkHmrFUA2PQbrTtQ592VZxuUEkG8tZ/Aeo7Ud66KsDebabK+K0UUrFURlJ5OnId+vfddkc5kMM8uIT/CI+m6D40H32Wpr+HO+FYioINuvB6sQ/Hm4orl/jr+j7K7oZLN7sPAgFSi3xMjjSG8zZHfq8IvRhzhaXQirXiTf+rLR1mrWXgshL8frviJLrC461uTX/fW1UGqigrk2Lm69p0Sj8LQUhp52NR1qvm/00AB2UmWoYoZUaPTO2XpeQXY86xVRRexMdp1lJRo3AHs4fW+wklEgN0yvGX2TTiDeU69zp6jnIzH76gWYOD46g9eyRcaTAIKHrEgAY3y/CRrrwO1kXQVLt4R1AZGuD+ithPygN4pv8Rl7ASiKqzLoPr49vBx4PgaXSJlkIa76Cbnox9t22eSIFiCckW7SkVJF2la+ul5g36VlZCTZ6+fJLicjQ7ouQzEGPfhQrtKRdID09sAYn37ssHu+Ib9RvYdjKDif2BsLEgo96KgCKwtEiQW9wJ0yOIymkJgO/ZpTUkeSaaHTW6XS6PfjTinP0zHjoI/ncyDqW7jaIZM6+X7CftI5KZYnnk/z5fxSlXltadfqez/ZWXEk/OqkZ+obPa0hDGjsmCOBE/TkdtVUqTfbki11CwlbQlxYN0v3gZ6aS2YrhBgxwiNF6Bxu+C57I74H4mTQwclq/rGVlHtBv/GSgRXZlmpNtYUhS5veYJXdpTGl5koP0dFGLzxaOUwZ2g+ozHsIa7Z6VHsr9XDkLZL96bjZgAMDKaZBhByNVvcvEejlg9ejx9oD9xv3L7405PKMFoj4wPq2oxSgHvOm8VV5ZzkebYTeCA+jpfqKptu5gSVoaPZQoxn0suXtEvfc7XDkDUdev74EUyX3+Pr3x/FnKRswUWeQZkDLdXeUndSvMiPR7agqgQCjBTXflv2BRJ4Lun9kZ7nl5dcKBfO8ceAyOaPJ6ZvsczOROI1evL//KGPjjhRhdaHgdeheFsq3JOSFlJSBqdsslRhOgmb3gGbraLPFlOEAUwTlNx7lDmgJOKxGlW55yt66b1jDDGkFvVrxsFQ60yTRBILXkDErHnC26Eyr29UoKxB+0uCNTTWFl3spnTmSPwJtq9DA6wEvnIEA/qZeEajjVs+wJTN7NsekEkIvCZmrXLPyoAvzBlNjsp4zeIV9wnpmZGu0D7JmtBIM+tKPh3VxUrd0Uud57DbdHo9Pr+eZotmkNVfAOanT1Q+6Ax2H1/HMiS1W3tDQC9bjl7KaRIzxm5qzU3uyo4GHeFCZ+6ZdAh8hZIYF32e0kddlNiqFKhkbBbXerlapJLAz5Exsr0Y5twLH6Qm6Y8zK9ffTP/f5XlQEuGirHd5p9H6BeKka6lX+wTR4eTIvLok18JOaSExUDom8dq7gjanSqPbJJ4GHXVAq2R/1kb8On9WzgjZdRiL7bkLqBXLbOknt2ptW9oE5ogOK86LOarVUKTF9/YYPUK+mR52y2LWOGC30VoB6mZKcxxzPtmo3yu38rwJ16yYulOIkw/n4sJkdU+imd5nroMPf5KQVfPQ+FzdR6oLTPuT6/pCB4EMOKoZ89w9Z1m3M/3nKZ+0EotAG0NomFwscFLedAyLCAaLsUKB0iK88MKdQRU5qwvio2R6Sf/FP0L+C6BhmySHh4DowEiGj5LB6XQApIxJ9LiBl1oMKfMAzJsRZjZplvyW+tyTufZ0PlwuDbiWFkOr8qMXsRo72+MyZgTovQR2ue2OBQe4qMt5njVJ46zR0XeVZyZcNgF+5ENPm8AHkKENOFgx5DQ8Z3jNtiwTtD77BckFa3GMJoYXGdSj9dLDSYcEG8KOGYau6bozdwM8b27iOBiAciVMRsom34Bhvif3SkMU7dbQOJCBEjA7RKVAE8nIa0Kbo0fXWgoG3Ay1TlxeawzXugpo3vH09lWd/kPHLoNZZ6uADicIGsa1X+c5qBXyZ7XdQwnZBrbuW1Xup69DiaAsqBKRSuidtlICSjw5EKes7w0Ts2+q4/6Bo35O2nFrrjQv3PUG7Dzx8ogbVVu3ZsAr+ZMJtEDc1N6xU+2X8NvbbfYAq6YQNrgZgVqmfPpoae+l1fpL09Sr9TRymOvcUviH6CUDsIW3pRzWFaoEIZKweVEjEauFH9Iq2dHOKpqOv9nE+XUvZe4qMnVqBqlk9nqoNio7iTB22UiATHEsR5OnTh1/ny/LfyYZ0x5H81n9VBSAhJ6TPd1yvpgkXbYYyWS1fY9jcG/SWhQ0gCnYiXYY9P6KqRS6Bs17fOtnGr1tqel1XAs8c9bJryzObeT8lVagjZwI6Yucb1RReNlKXpOhk0Sv+ou8m3mpMJUqLaOu7GTa6Uwmv6HUnBKaWwoPyVoHeSjvV2VT9pVp6Ke2+zpYuH8/1j0/0D+pPmy/H1791JACllhB6hnyDe7QS+FHtUKkAjVoZ5yIRBqoF8OZCbXlE+IFUihuhgduoUWgFZSTP815dOp+H4+21UAdvWL3DHpnY1B5Eg4eXIrvgOyIXwKGoK4it1bf563gtrqdOksd7HTW1GkjFoeJdWkJ76Oq2DwOpQ5tfgJJfAd9kVEFJ36K3JH4lqA5JNPP+9H5+ub8VMFdiqlR/zh74RbXp7La0+QeNCHEHBM+T2uVfQX3JeerVLV3JRZH8hZqGWwc+JbDY015zlUQ/1ZcuTDy9zK+H+9utWC/SlHYXPEydf6Ru2rKYKA1o++/r/XI7H27n9+Nz9ILLRc+JoLof8D//9/98HD/mhQb9v/77f/73f/8f9We/qPyHCQA="; \ No newline at end of file diff --git a/docs/typedocs/assets/style.css b/docs/typedocs/assets/style.css new file mode 100644 index 000000000..108428c3f --- /dev/null +++ b/docs/typedocs/assets/style.css @@ -0,0 +1,1383 @@ +:root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-warning-text: #222; + --light-color-background-warning: #e6e600; + --light-color-icon-background: var(--light-color-background); + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); + --light-color-text: #222; + --light-color-text-aside: #6e6e6e; + --light-color-link: #1f70c2; + + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: var(--light-color-ts-variable); + --light-color-ts-method: var(--light-color-ts-function); + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var(--light-color-ts-constructor); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: var(--light-color-ts-type-alias); + --light-color-ts-accessor: var(--light-color-ts-property); + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + --dark-color-link: #00aff4; + + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: var(--dark-color-ts-variable); + --dark-color-ts-method: var(--dark-color-ts-function); + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); + --dark-color-ts-accessor: var(--dark-color-ts-property); + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; +} + +@media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-link: var(--light-color-link); + + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-link: var(--dark-color-link); + + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } +} + +html { + color-scheme: var(--color-scheme); +} + +body { + margin: 0; +} + +:root[data-theme="light"] { + --color-background: var(--light-color-background); + --color-background-secondary: var(--light-color-background-secondary); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-icon-background: var(--light-color-icon-background); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + --color-link: var(--light-color-link); + + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); +} + +:root[data-theme="dark"] { + --color-background: var(--dark-color-background); + --color-background-secondary: var(--dark-color-background-secondary); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-icon-background: var(--dark-color-icon-background); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + --color-link: var(--dark-color-link); + + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); +} + +.always-visible, +.always-visible .tsd-signatures { + display: inherit !important; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + line-height: 1.2; +} + +h1 > a, +h2 > a, +h3 > a, +h4 > a, +h5 > a, +h6 > a { + text-decoration: none; + color: var(--color-text); +} + +h1 { + font-size: 1.875rem; + margin: 0.67rem 0; +} + +h2 { + font-size: 1.5rem; + margin: 0.83rem 0; +} + +h3 { + font-size: 1.25rem; + margin: 1rem 0; +} + +h4 { + font-size: 1.05rem; + margin: 1.33rem 0; +} + +h5 { + font-size: 1rem; + margin: 1.5rem 0; +} + +h6 { + font-size: 0.875rem; + margin: 2.33rem 0; +} + +.uppercase { + text-transform: uppercase; +} + +dl, +menu, +ol, +ul { + margin: 1em 0; +} + +dd { + margin: 0 0 0 40px; +} + +.container { + max-width: 1700px; + padding: 0 2rem; +} + +/* Footer */ +.tsd-generator { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; +} + +.tsd-generator > p { + margin-top: 0; + margin-bottom: 0; + padding: 0 1rem; +} + +.container-main { + margin: 0 auto; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); +} + +@keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +@keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } +} +@keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } +} +@keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } +} +@keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } +} +body { + background: var(--color-background); + font-family: "Segoe UI", sans-serif; + font-size: 16px; + color: var(--color-text); +} + +a { + color: var(--color-link); + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; +} + +code, +pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; +} + +pre { + position: relative; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); +} +pre code { + padding: 0; + font-size: 100%; +} +pre > button { + position: absolute; + top: 10px; + right: 10px; + opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; +} +pre:hover > button, +pre > button.visible { + opacity: 1; +} + +blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; +} + +.tsd-typography { + line-height: 1.333em; +} +.tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; +} +.tsd-typography .tsd-index-panel h3, +.tsd-index-panel .tsd-typography h3, +.tsd-typography h4, +.tsd-typography h5, +.tsd-typography h6 { + font-size: 1em; +} +.tsd-typography h5, +.tsd-typography h6 { + font-weight: normal; +} +.tsd-typography p, +.tsd-typography ul, +.tsd-typography ol { + margin: 1em 0; +} +.tsd-typography table { + border-collapse: collapse; + border: none; +} +.tsd-typography td, +.tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); +} +.tsd-typography thead, +.tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); +} + +.tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); +} +.tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; +} +.tsd-breadcrumb a:hover { + text-decoration: underline; +} +.tsd-breadcrumb li { + display: inline; +} +.tsd-breadcrumb li:after { + content: " / "; +} + +.tsd-comment-tags { + display: flex; + flex-direction: column; +} +dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; +} +dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; +} +dl.tsd-comment-tag-group dd { + margin: 0; +} +code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; +} +h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; +} + +dl.tsd-comment-tag-group dd:before, +dl.tsd-comment-tag-group dd:after { + content: " "; +} +dl.tsd-comment-tag-group dd pre, +dl.tsd-comment-tag-group dd:after { + clear: both; +} +dl.tsd-comment-tag-group p { + margin: 0; +} + +.tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; +} +.tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; +} + +.tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; +} +.tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; +} +.tsd-filter-input { + display: flex; + width: fit-content; + width: -moz-fit-content; + align-items: center; + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + cursor: pointer; +} +.tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; +} +.tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; +} +.tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; +} +.tsd-filter-input input[type="checkbox"]:focus + svg { + transform: scale(0.95); +} +.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { + transform: scale(1); +} +.tsd-checkbox-background { + fill: var(--color-accent); +} +input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; +} +.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); +} + +.tsd-theme-toggle { + padding-top: 0.75rem; +} +.tsd-theme-toggle > h4 { + display: inline; + vertical-align: middle; + margin-right: 0.75rem; +} + +.tsd-hierarchy { + list-style: square; + margin: 0; +} +.tsd-hierarchy .target { + font-weight: bold; +} + +.tsd-panel-group.tsd-index-group { + margin-bottom: 0; +} +.tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; +} +@media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } +} +@media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } +} +.tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; +} + +.tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; +} + +.tsd-anchor { + position: relative; + top: -100px; +} + +.tsd-member { + position: relative; +} +.tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; +} + +.tsd-navigation.settings { + margin: 1rem 0; +} +.tsd-navigation > a, +.tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.5rem); +} +.tsd-navigation a, +.tsd-navigation summary > span, +.tsd-page-navigation a { + display: inline-flex; + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; +} +.tsd-navigation a.current, +.tsd-page-navigation a.current { + background: var(--color-active-menu-item); +} +.tsd-navigation a:hover, +.tsd-page-navigation a:hover { + text-decoration: underline; +} +.tsd-navigation ul, +.tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; +} +.tsd-navigation li, +.tsd-page-navigation li { + padding: 0; + max-width: 100%; +} +.tsd-nested-navigation { + margin-left: 3rem; +} +.tsd-nested-navigation > li > details { + margin-left: -1.5rem; +} +.tsd-small-nested-navigation { + margin-left: 1.5rem; +} +.tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; +} + +.tsd-nested-navigation > li > a, +.tsd-nested-navigation > li > span { + width: calc(100% - 1.75rem - 0.5rem); +} + +.tsd-page-navigation ul { + padding-left: 1.75rem; +} + +#tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; +} +#tsd-sidebar-links a:last-of-type { + margin-bottom: 0; +} + +a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); +} +.tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ +} +.tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ +} +.tsd-accordion-summary, +.tsd-accordion-summary a { + user-select: none; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + + cursor: pointer; +} +.tsd-accordion-summary a { + width: calc(100% - 1.5rem); +} +.tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} +.tsd-index-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; +} +.tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; +} +.tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; +} + +.tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; +} +.tsd-kind-icon path { + transform-origin: center; + transform: scale(1.1); +} +.tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; +} + +.tsd-panel { + margin-bottom: 2.5rem; +} +.tsd-panel.tsd-member { + margin-bottom: 4rem; +} +.tsd-panel:empty { + display: none; +} +.tsd-panel > h1, +.tsd-panel > h2, +.tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; +} +.tsd-panel > h1.tsd-before-signature, +.tsd-panel > h2.tsd-before-signature, +.tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; +} + +.tsd-panel-group { + margin: 4rem 0; +} +.tsd-panel-group.tsd-index-group { + margin: 2rem 0; +} +.tsd-panel-group.tsd-index-group details { + margin: 2rem 0; +} + +#tsd-search { + transition: background-color 0.2s; +} +#tsd-search .title { + position: relative; + z-index: 2; +} +#tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; +} +#tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: var(--color-text); +} +#tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; +} +#tsd-search .field input, +#tsd-search .title, +#tsd-toolbar-links a { + transition: opacity 0.2s; +} +#tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); +} +#tsd-search .results li { + background-color: var(--color-background); + line-height: initial; + padding: 4px; +} +#tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); +} +#tsd-search .results li.state { + display: none; +} +#tsd-search .results li.current:not(.no-results), +#tsd-search .results li:hover:not(.no-results) { + background-color: var(--color-accent); +} +#tsd-search .results a { + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; +} +#tsd-search .results a:before { + top: 10px; +} +#tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; +} +#tsd-search.has-focus { + background-color: var(--color-accent); +} +#tsd-search.has-focus .field input { + top: 0; + opacity: 1; +} +#tsd-search.has-focus .title, +#tsd-search.has-focus #tsd-toolbar-links a { + z-index: 0; + opacity: 0; +} +#tsd-search.has-focus .results { + visibility: visible; +} +#tsd-search.loading .results li.state.loading { + display: block; +} +#tsd-search.failure .results li.state.failure { + display: block; +} + +#tsd-toolbar-links { + position: absolute; + top: 0; + right: 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-end; +} +#tsd-toolbar-links a { + margin-left: 1.5rem; +} +#tsd-toolbar-links a:hover { + text-decoration: underline; +} + +.tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; +} + +.tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; +} + +.tsd-signature-type { + font-style: italic; + font-weight: normal; +} + +.tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; +} +.tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; +} +.tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; +} + +ul.tsd-parameter-list, +ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; +} +ul.tsd-parameter-list > li.tsd-parameter-signature, +ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; +} +ul.tsd-parameter-list h5, +ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; +} +.tsd-sources { + margin-top: 1rem; + font-size: 0.875em; +} +.tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; +} +.tsd-sources ul { + list-style: none; + padding: 0; +} + +.tsd-page-toolbar { + position: sticky; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; +} +.tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; +} +.tsd-page-toolbar a.title { + font-weight: bold; +} +.tsd-page-toolbar a.title:hover { + text-decoration: underline; +} +.tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; + margin: 0 auto; +} +.tsd-page-toolbar .table-cell { + position: relative; + white-space: nowrap; + line-height: 40px; +} +.tsd-page-toolbar .table-cell:first-child { + width: 100%; +} +.tsd-page-toolbar .tsd-toolbar-icon { + box-sizing: border-box; + line-height: 0; + padding: 12px 0; +} + +.tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: + opacity 0.1s, + background-color 0.2s; + vertical-align: bottom; + cursor: pointer; +} +.tsd-widget:hover { + opacity: 0.9; +} +.tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); +} +.tsd-widget.no-caption { + width: 40px; +} +.tsd-widget.no-caption:before { + margin: 0; +} + +.tsd-widget.options, +.tsd-widget.menu { + display: none; +} +input[type="checkbox"] + .tsd-widget:before { + background-position: -120px 0; +} +input[type="checkbox"]:checked + .tsd-widget:before { + background-position: -160px 0; +} + +img { + max-width: 100%; +} + +.tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + vertical-align: middle; + color: var(--color-text); +} + +.tsd-anchor-icon svg { + width: 1em; + height: 1em; + visibility: hidden; +} + +.tsd-anchor-link:hover > .tsd-anchor-icon svg { + visibility: visible; +} + +.deprecated { + text-decoration: line-through !important; +} + +.warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); +} + +.tsd-kind-project { + color: var(--color-ts-project); +} +.tsd-kind-module { + color: var(--color-ts-module); +} +.tsd-kind-namespace { + color: var(--color-ts-namespace); +} +.tsd-kind-enum { + color: var(--color-ts-enum); +} +.tsd-kind-enum-member { + color: var(--color-ts-enum-member); +} +.tsd-kind-variable { + color: var(--color-ts-variable); +} +.tsd-kind-function { + color: var(--color-ts-function); +} +.tsd-kind-class { + color: var(--color-ts-class); +} +.tsd-kind-interface { + color: var(--color-ts-interface); +} +.tsd-kind-constructor { + color: var(--color-ts-constructor); +} +.tsd-kind-property { + color: var(--color-ts-property); +} +.tsd-kind-method { + color: var(--color-ts-method); +} +.tsd-kind-call-signature { + color: var(--color-ts-call-signature); +} +.tsd-kind-index-signature { + color: var(--color-ts-index-signature); +} +.tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); +} +.tsd-kind-parameter { + color: var(--color-ts-parameter); +} +.tsd-kind-type-literal { + color: var(--color-ts-type-literal); +} +.tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); +} +.tsd-kind-accessor { + color: var(--color-ts-accessor); +} +.tsd-kind-get-signature { + color: var(--color-ts-get-signature); +} +.tsd-kind-set-signature { + color: var(--color-ts-set-signature); +} +.tsd-kind-type-alias { + color: var(--color-ts-type-alias); +} + +/* if we have a kind icon, don't color the text by kind */ +.tsd-kind-icon ~ span { + color: var(--color-text); +} + +* { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); +} + +*::-webkit-scrollbar { + width: 0.75rem; +} + +*::-webkit-scrollbar-track { + background: var(--color-icon-background); +} + +*::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); +} + +/* mobile */ +@media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } +} + +/* one sidebar */ +@media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } +} +@media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } +} + +/* two sidebars */ +@media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem 0; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } +} diff --git a/docs/typedocs/classes/GenUtils.html b/docs/typedocs/classes/GenUtils.html new file mode 100644 index 000000000..880e4350e --- /dev/null +++ b/docs/typedocs/classes/GenUtils.html @@ -0,0 +1,2455 @@ +GenUtils | monero-ts
+
+ +
+
+
+
+ +

Class GenUtils

+
+

Collection of general purpose utilities.

+
+
+
+

Hierarchy

+
    +
  • GenUtils
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Methods

+
+ +
    + +
  • +

    Get the absolute value of the given bigint or number.

    +
    +
    +

    Parameters

    +
      +
    • +
      bi: number | bigint
      +

      the bigint or number to get the absolute value of

      +
      +
    +

    Returns number | bigint

    the absolute value of the given bigint or number

    + +
+
+ +
    + +
  • +

    Converts the given array to a CSV string.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr: any
      +

      is a 2-dimensional array of strings

      +
      +
    +

    Returns any

    the CSV string

    + +
+
+ +
    + +
  • +

    Indicates if the given array contains the given object.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr: any
      +

      array that may or may not contain the object

      +
      +
    • +
    • +
      obj: any
      +

      object to check for inclusion in the array

      +
      +
    • +
    • +
      Optional compareByReference: boolean = false
      +

      compare strictly by reference, forgoing deep equality check (default false)

      +
      +
    +

    Returns boolean

    true if the array contains the object, false otherwise

    + +
+
+ +
    + +
  • +

    Determines if two arrays are equal.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr1: any
      +

      is an array to compare

      +
      +
    • +
    • +
      arr2: any
      +

      is an array to compare

      +
      +
    +

    Returns boolean

    true if the arrays are equal, false otherwise

    + +
+
+ +
    + +
  • +

    Asserts that the given argument is an array.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert as an array

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if the argument is not an array

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is base58.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
    • +
    • +
      msg: any
      +

      is the message to throw if the argument is not base58

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is base64.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
    • +
    • +
      msg: any
      +

      is the message to throw if the argument is not base64

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is a boolean.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert as a boolean

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if the argument is not a boolean

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is defined. Throws an exception if undefined.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert defined

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if arg is undefined (optional)

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given arguments are equal. Throws an exception if not equal.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg1: any
      +

      is an argument to assert as equal

      +
      +
    • +
    • +
      arg2: any
      +

      is an argument to assert as equal

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if the arguments are not equal

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given boolean is false. Throws an exception if not a boolean or true.

    +
    +
    +

    Parameters

    +
      +
    • +
      bool: any
      +

      is the boolean to assert false

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if bool is true (optional)

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is a static.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert as a static

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if the argument is not a static

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is hex.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
    • +
    • +
      msg: any
      +

      is the message to throw if the argument is not hex

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is initialized. Throws an exception if not initialized.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert as initialized

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if arg is not initialized (optional)

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is an integer.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert as an integer

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if the argument is not an integer

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given arguments are not equal. Throws an exception if equal.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg1: any
      +

      is an argument to assert as not equal

      +
      +
    • +
    • +
      arg2: any
      +

      is an argument to assert as not equal

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if the arguments are equal

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is not null. Throws an exception if null.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert not null

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if arg is null (optional)

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is null. Throws an exception if not null.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert null

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if arg is not null (optional)

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is a number.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert as a number

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if the argument is not a number

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is an object with the given name.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to test

      +
      +
    • +
    • +
      obj: any
      +

      is an object to assert arg instanceof obj (optional)

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if the argument is not the specified object

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is a string.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert as a string

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if the argument is not a string

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given condition is true. Throws an exception if not a boolean or false.

    +
    +
    +

    Parameters

    +
      +
    • +
      condition: any
      +

      is the boolean to assert true

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if condition is false (optional)

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is undefined. Throws an exception if defined.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert undefined

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if arg is defined (optional)

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Asserts that the given argument is uninitialized. Throws an exception if initialized.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to assert as uninitialized

      +
      +
    • +
    • +
      Optional msg: any
      +

      is the message to throw if arg is initialized (optional)

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Manually builds an HTML document string.

    +
    +
    +

    Parameters

    +
      +
    • +
      content: any
      +

      specifies optional document content + content.div is a pre-existing div to stringify and add to the body + content.title is the title of the new tab + content.dependencyPaths specifies paths to js, css, or img paths + content.internalCss is css to embed in the html document + content.metas are meta elements with keys/values to include

      +
      +
    +

    Returns string

    str is the document string

    + +
+
+ +
    + +
  • +

    Copies the given array.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr: any
      +

      is the array to copy

      +
      +
    +

    Returns any[]

    a copy of the given array

    + +
+
+ +
    + +
  • +

    Copies properties in the given object to a new object.

    +
    +
    +

    Parameters

    +
      +
    • +
      obj: any
      +

      is object to copy properties for

      +
      +
    +

    Returns any

    a new object with properties copied from the given object

    + +
+
+ +
    + +
  • +

    Counts the number of non-whitespace characters in the given string.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
      +

      is the string to count the number of non-whitespace characters in

      +
      +
    +

    Returns number

    int is the number of non-whitespace characters in the given string

    + +
+
+ +
    + +
  • +

    Converts a CSV string to a 2-dimensional array of strings.

    +
    +
    +

    Parameters

    +
      +
    • +
      csv: any
      +

      is the CSV string to convert

      +
      +
    +

    Returns any

    a 2-dimensional array of strings

    + +
+
+ +
    + +
  • +

    Deletes all properties in the given object.

    +
    +
    +

    Parameters

    +
      +
    • +
      obj: any
      +

      is the object to delete properties from

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Deletes properties from the object that are undefined.

    +
    +
    +

    Parameters

    +
      +
    • +
      obj: any
      +

      is the object to delete undefined keys from

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Determines if two arguments are deep equal.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg1: any
      +

      is an argument to compare

      +
      +
    • +
    • +
      arg2: any
      +

      is an argument to compare

      +
      +
    +

    Returns boolean

    true if the arguments are deep equals, false otherwise

    + +
+
+ +
    + +
  • +

    Throws an exception with the given message.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional msg: any
      +

      defines the message to throw the exception with (optional)

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Returns combinations of the given array of the given size.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr: any
      +

      is the array to get combinations from

      +
      +
    • +
    • +
      combinationSize: any
      +

      specifies the size of each combination

      +
      +
    +

    Returns any[]

    +
+
+ +
    + +
  • +

    Gets an 'a' element that is downloadable when clicked.

    +
    +
    +

    Parameters

    +
      +
    • +
      name: any
      +

      is the name of the file to download

      +
      +
    • +
    • +
      contents: any
      +

      are the string contents of the file to download

      +
      +
    +

    Returns HTMLAnchorElement

    'a' dom element with downloadable file

    + +
+
+ +
    + +
  • +

    Get an enum key name by value.

    +
    +
    +

    Parameters

    +
      +
    • +
      enumType: any
      +

      is the enum type to get the key from

      +
      +
    • +
    • +
      enumValue: any
      +

      is the enum value to get the key for

      +
      +
    +

    Returns string

    the enum key name

    + +
+
+ +
+
+ +
    + +
  • +

    Fetches the given list of images.

    +

    Prerequisite: async.js.

    +
    +
    +

    Parameters

    +
      +
    • +
      paths: any
      +

      are the paths to the images to fetch

      +
      +
    • +
    • +
      onDone: any
    +

    Returns void

    +
+
+ +
    + +
  • +

    Returns a string indentation of the given length;

    +
    +
    +

    Parameters

    +
      +
    • +
      length: any
      +

      is the length of the indentation

      +
      +
    +

    Returns string

    is an indentation string of the given length

    + +
+
+ +
    + +
  • +

    Returns an array of indices of the given size.

    +
    +
    +

    Parameters

    +
      +
    • +
      size: any
      +

      specifies the size to get indices for

      +
      +
    +

    Returns any[]

    array of the given size with indices starting at 0

    + +
+
+ +
    + +
  • +

    Returns the document's first stylesheet which has no href.

    +
    +

    Returns CSSStyleSheet

    StyleSheet is the internal stylesheet

    + +
+
+ +
    + +
  • +

    Returns the document's internal stylesheet as text.

    +
    +

    Returns string

    str is the document's internal stylesheet

    + +
+
+ +
    + +
  • +

    Returns lines separated by newlines from the given string.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
      +

      is the string to get lines from

      +
      +
    +

    Returns any

    +
+
+ +
+
+ +
    + +
  • +

    Returns the power set of the given array.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr: any
      +

      is the array to get the power set of

      +
      +
    +

    Returns any[]

    [][] is the power set of the given array

    + +
+
+ +
    + +
  • +

    Returns the power set of the given array whose elements are the given size.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr: any
      +

      is the array to get the power set of

      +
      +
    • +
    • +
      size: any
      +

      is the required size of the elements within the power set +returns [][] is the power set of the given array whose elements are the given size

      +
      +
    +

    Returns any[]

    +
+
+ +
+
+ +
    + +
  • +

    Gets random ints.

    +
    +
    +

    Parameters

    +
      +
    • +
      min: any
      +

      is the minimum range of the ints to generate, inclusive

      +
      +
    • +
    • +
      max: any
      +

      is the maximum range of the ints to generate, inclusive

      +
      +
    • +
    • +
      count: any
      +

      is the number of random ints to get

      +
      +
    +

    Returns any[]

    +
+
+ +
+
+ +
    + +
  • +

    Gets a given number of unique random ints within a range.

    +
    +
    +

    Parameters

    +
      +
    • +
      min: any
      +

      is the minimum range of the ints to generate, inclusive

      +
      +
    • +
    • +
      max: any
      +

      is the maximum range of the ints to generate, inclusive

      +
      +
    • +
    • +
      count: any
      +

      is the number of unique random ints to get

      +
      +
    +

    Returns any[]

    +
+
+ +
    + +
  • +

    Returns tokens separated by whitespace from the given string.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
      +

      is the string to get tokens from

      +
      +
    +

    Returns any

    string[] are the tokens separated by whitespace within the string

    + +
+
+ +
    + +
  • +

    Indicates if the given string contains whitespace.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
      +

      is the string to test

      +
      +
    +

    Returns boolean

    true if the string contains whitespace, false otherwise

    + +
+
+ +
    + +
  • +

    Converts the given image to a base64 encoded data url.

    +
    +
    +

    Parameters

    +
      +
    • +
      img: any
      +

      is the image to convert

      +
      +
    • +
    • +
      quality: any
      +

      is a number between 0 and 1 specifying the image quality

      +
      +
    +

    Returns string

    +
+
+ +
    + +
  • +

    Sets the child's prototype to the parent's prototype.

    +
    +
    +

    Parameters

    +
      +
    • +
      child: any
      +

      is the child class

      +
      +
    • +
    • +
      parent: any
      +

      is the parent class

      +
      +
    +

    Returns void

    +
+
+ +
+
+ +
    + +
  • +

    Invokes functions with arguments.

    +

    arguments[0] is assumed to be an array of functions to invoke +arguments[1...n] are args to invoke the functions with

    +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Indicates if the given argument is an array.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to test as being an array

      +
      +
    +

    Returns boolean

    true if the argument is an array, false otherwise

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Determines if the given argument is a boolean.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to test as being a boolean

      +
      +
    +

    Returns boolean

    true if the argument is a boolean, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the current environment is a browser.

    +
    +

    Returns boolean

    true if the environment is a browser, false otherwise

    + +
+
+ +
    + +
  • +

    Determines if the given file is a csv file.

    +
    +
    +

    Parameters

    +
      +
    • +
      file: any
      +

      is a file

      +
      +
    +

    Returns any

    true if the given file is a csv file, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the given argument is defined.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the arg to test

      +
      +
    +

    Returns boolean

    true if the given arg is defined, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the current environment is a firefox-based browser.

    +
    +

    Returns boolean

    true if the environment is a firefox-based browser, false otherwise

    + +
+
+ +
    + +
  • +

    Determines if the given argument is a static.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to test as being a static

      +
      +
    +

    Returns boolean

    true if the argument is a static, false otherwise

    + +
+
+ +
+
+ +
    + +
  • +

    Determines if the image at the given URL is accessible.

    +
    +
    +

    Parameters

    +
      +
    • +
      url: any
      +

      is the url to an image

      +
      +
    • +
    • +
      timeout: any
      +

      is the maximum time to wait

      +
      +
    • +
    • +
      onDone: any
    +

    Returns void

    +
+
+ +
    + +
  • +

    Indicates if the given arg is initialized.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the arg to test

      +
      +
    +

    Returns boolean

    true if the given arg is initialized, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the given argument is an integer.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to test

      +
      +
    +

    Returns boolean

    true if the given argument is an integer, false otherwise

    + +
+
+ +
    + +
  • +

    Determines if the given file is a json file.

    +
    +
    +

    Parameters

    +
      +
    • +
      file: any
      +

      is a file

      +
      +
    +

    Returns any

    true if the given file is a json file, false otherwise

    + +
+
+ +
    + +
  • +

    Determines if all alphabet characters in the given string are lower case.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
      +

      is the string to test

      +
      +
    +

    Returns boolean

    +
+
+ +
    + +
  • +

    Indicates if the given character is a newline.

    +
    +
    +

    Parameters

    +
      +
    • +
      char: any
      +

      is the character to test

      +
      +
    +

    Returns boolean

    true if the given character is a newline, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the given argument is a number.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to test

      +
      +
    +

    Returns boolean

    true if the argument is a number, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the given argument is an object and optionally if it has the given constructor name.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to test

      +
      +
    • +
    • +
      Optional obj: any
      +

      is an object to test arg instanceof obj (optional)

      +
      +
    +

    Returns boolean

    true if the given argument is an object and optionally has the given constructor name

    + +
+
+ +
    + +
  • +

    Indicates if the given argument is a string.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the argument to test as being a string

      +
      +
    +

    Returns boolean

    true if the argument is a string, false otherwise

    + +
+
+ +
    + +
  • +

    Determines if the given file is a txt file.

    +
    +
    +

    Parameters

    +
      +
    • +
      file: any
      +

      is a file

      +
      +
    +

    Returns any

    true if the given file is a txt file, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the given argument is undefined.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the arg to test

      +
      +
    +

    Returns boolean

    true if the given arg is undefined, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the given arg is uninitialized.

    +
    +
    +

    Parameters

    +
      +
    • +
      arg: any
      +

      is the arg to test

      +
      +
    +

    Returns boolean

    true if the given arg is uninitialized, false otherwise

    + +
+
+ +
    + +
  • +

    Determines if all alphabet characters in the given string are upper case.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: string
      +

      is the string to test

      +
      +
    +

    Returns boolean

    true if the string is upper case, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the given character is whitespace.

    +
    +
    +

    Parameters

    +
      +
    • +
      char: any
      +

      is the character to test

      +
      +
    +

    Returns boolean

    true if the given character is whitespace, false otherwise

    + +
+
+ +
    + +
  • +

    Determines if the given file is a zip file.

    +
    +
    +

    Parameters

    +
      +
    • +
      file: any
      +

      is a file

      +
      +
    +

    Returns any

    true if the given file is a zip file, false otherwise

    + +
+
+ +
    + +
  • +

    Kill the given nodejs child process.

    +
    +
    +

    Parameters

    +
      +
    • +
      process: ChildProcess
      +

      the nodejs child process to kill

      +
      +
    • +
    • +
      Optional signal: number | Signals
      +

      the kill signal, e.g. SIGTERM, SIGKILL, SIGINT (default)

      +
      +
    +

    Returns Promise<number>

    the exit code from killing the process

    + +
+
+ +
    + +
  • +

    Returns a human-friendly key value line.

    +
    +
    +

    Parameters

    +
      +
    • +
      key: any
      +

      is the key

      +
      +
    • +
    • +
      value: any
      +

      is the value

      +
      +
    • +
    • +
      indent: number = 0
      +

      indents the line

      +
      +
    • +
    • +
      newline: boolean = true
      +

      specifies if the string should be terminated with a newline or not

      +
      +
    • +
    • +
      ignoreUndefined: boolean = true
      +

      specifies if undefined values should return an empty string

      +
      +
    +

    Returns string

    is the human-friendly key value line

    + +
+
+ +
    + +
  • +

    Listifies the given argument.

    +
    +
    +

    Parameters

    +
      +
    • +
      arrOrElem: any
      +

      is an array or an element in the array

      +
      +
    +

    Returns any

    an array which is the given arg if it's an array or an array with the given arg as an element

    + +
+
+ +
    + +
  • +

    Opens the given div in a new window.

    +
    +
    +

    Parameters

    +
      +
    • +
      content: any
      +

      specifies optional window content + content.div is a pre-existing div to stringify and add to the body + content.title is the title of the new tab + content.dependencyPaths specifies paths to js, css, or img paths + content.internalCss is css to embed in the html document + content.metas are meta elements with keys/values to include

      +
      +
    • +
    • +
      onLoad: any
    +

    Returns void

    +
+
+ +
    + +
  • +

    Normalize a URI.

    +
    +
    +

    Parameters

    +
      +
    • +
      uri: any
      +

      the URI to normalize

      +
      +
    +

    Returns any

    the normalized URI

    + +
+
+ +
    + +
  • +

    Determines if two objects are deep equal.

    +

    Undefined values are considered equal to non-existent keys.

    +
    +
    +

    Parameters

    +
      +
    • +
      map1: any
      +

      is a map to compare

      +
      +
    • +
    • +
      map2: any
      +

      is a map to compare

      +
      +
    +

    Returns boolean

    true if the maps have identical keys and values, false otherwise

    + +
+
+ +
    + +
  • +

    Print the current stack trace.

    +
    +
    +

    Parameters

    +
      +
    • +
      msg: any
      +

      optional message to print with the trace

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Reconciles two values.

    +

    TODO: remove custom error message

    +
    +
    +

    Parameters

    +
      +
    • +
      val1: any
      +

      is a value to reconcile

      +
      +
    • +
    • +
      val2: any
      +

      is a value to reconcile

      +
      +
    • +
    • +
      Optional config: any
      +

      specifies reconciliation configuration + config.resolveDefined uses defined value if true or undefined, undefined if false + config.resolveTrue uses true over false if true, false over true if false, must be equal if undefined + config.resolveMax uses max over min if true, min over max if false, must be equal if undefined

      +
      +
    • +
    • +
      Optional errMsg: any
      +

      is the error message to throw if the values cannot be reconciled (optional)

      +
      +
    +

    Returns any

    the reconciled value if reconcilable, throws error otherwise

    + +
+
+ +
    + +
  • +

    Removes every instance of the given value from the given array.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr: any
      +

      is the array to remove the value from

      +
      +
    • +
    • +
      val: any
      +

      is the value to remove from the array

      +
      +
    +

    Returns boolean

    true if the value is found and removed, false otherwise

    + +
+
+ +
    + +
  • +

    Sets the given value ensuring a previous value is not overwritten.

    +

    TODO: remove for portability because function passing not supported in other languages, use reconcile only

    +
    +
    +

    Parameters

    +
      +
    • +
      obj: any
      +

      is the object to invoke the getter and setter on

      +
      +
    • +
    • +
      getFn: any
      +

      gets the current value

      +
      +
    • +
    • +
      setFn: any
      +

      sets the current value

      +
      +
    • +
    • +
      val: any
      +

      is the value to set iff it does not overwrite a previous value

      +
      +
    • +
    • +
      Optional config: any
      +

      specifies reconciliation configuration + config.resolveDefined uses defined value if true or undefined, undefined if false + config.resolveTrue uses true over false if true, false over true if false, must be equal if undefined + config.resolveMax uses max over min if true, min over max if false, must be equal if undefined

      +
      +
    • +
    • +
      Optional errMsg: any
      +

      is the error message to throw if the values cannot be reconciled (optional)

      +
      +
    +

    Returns void

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Indicates if the given string contains the given substring.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
      +

      is the string to search for a substring

      +
      +
    • +
    • +
      substring: any
      +

      is the substring to searchin within the string

      +
      +
    +

    Returns boolean

    true if the substring is within the string, false otherwise

    + +
+
+ +
    + +
  • +

    Replace big integers (16 or more consecutive digits) with strings in order +to preserve numeric precision.

    +
    +
    +

    Parameters

    +
      +
    • +
      str: any
      +

      is the string to be modified

      +
      +
    +

    Returns any

    the modified string with big numbers converted to strings

    + +
+
+ +
    + +
  • +

    Returns a copy of the given array where each element is lowercase.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr: any
      +

      is the array to convert to lowercase

      +
      +
    +

    Returns any[]

    a copy of the given array where each element is lowercase

    + +
+
+ +
    + +
  • +

    Returns a new array containing unique elements of the given array.

    +
    +
    +

    Parameters

    +
      +
    • +
      arr: any
      +

      is the array to return unique elements from

      +
      +
    +

    Returns any

    a new array with the given array's unique elements

    + +
+
+ +
    + +
  • +

    Wait for the duration.

    +
    +
    +

    Parameters

    +
      +
    • +
      durationMs: any
      +

      the duration to wait for in milliseconds

      +
      +
    +

    Returns Promise<unknown>

    +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/HttpClient.html b/docs/typedocs/classes/HttpClient.html new file mode 100644 index 000000000..75437715e --- /dev/null +++ b/docs/typedocs/classes/HttpClient.html @@ -0,0 +1,294 @@ +HttpClient | monero-ts
+
+ +
+
+
+
+ +

Class HttpClient

+
+

Handle HTTP requests with a uniform interface.

+
+
+
+

Hierarchy

+
    +
  • HttpClient
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
DEFAULT_REQUEST: {
    method: string;
    rejectUnauthorized: boolean;
    requestApi: string;
    resolveWithFullResponse: boolean;
} = ...
+
+

Type declaration

+
    +
  • +
    method: string
  • +
  • +
    rejectUnauthorized: boolean
  • +
  • +
    requestApi: string
  • +
  • +
    resolveWithFullResponse: boolean
+
+ +
DEFAULT_TIMEOUT: number = 60000
+
+ +
HTTPS_AGENT: any
+
+ +
HTTP_AGENT: any
+
+ +
MAX_REQUESTS_PER_SECOND: number = 50
+
+ +
MAX_TIMEOUT: number = 2147483647
+
+ +
PROMISE_THROTTLES: any[] = []
+
+ +
TASK_QUEUES: any[] = []
+
+ +
digestAuthRequest: ((method, url, username, password) => void) = ...
+
+

Type declaration

+
+
+

Methods

+
+ +
    + +
  • +

    Get a singleton instance of an HTTP client to share.

    +
    +

    Returns any

    a shared agent for network requests among library instances

    + +
+
+ +
    + +
  • +

    Get a singleton instance of an HTTPS client to share.

    +
    +

    Returns any

    a shared agent for network requests among library instances

    + +
+
+ +
+
+ +
    + +
  • +

    Make a HTTP request.

    +
    +

    Parameters

    +
      +
    • +
      request: any
      +

      configures the request to make

      +
      +
    +

    Returns Promise<any>

    response - the response object

    + +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/LibraryUtils.html b/docs/typedocs/classes/LibraryUtils.html new file mode 100644 index 000000000..9c26faa27 --- /dev/null +++ b/docs/typedocs/classes/LibraryUtils.html @@ -0,0 +1,513 @@ +LibraryUtils | monero-ts
+
+ +
+
+
+
+ +

Class LibraryUtils

+
+

Collection of helper utilities for the library.

+
+
+
+

Hierarchy

+
    +
  • LibraryUtils
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
FULL_LOADED: any
+
+ +
LOG_LEVEL: number = 0
+
+ +
REJECT_UNAUTHORIZED_FNS: any
+
+ +
WASM_MODULE: any
+
+ +
WORKER: any
+
+ +
WORKER_DIST_PATH: any = LibraryUtils.WORKER_DIST_PATH_DEFAULT
+
+ +
WORKER_DIST_PATH_DEFAULT: any = ...
+
+ +
WORKER_OBJECTS: any
+
+

Methods

+
+ +
    + +
  • +
    +

    Parameters

    +
      +
    • +
      objectId: any
    • +
    • +
      callbackId: any
    • +
    • +
      callbackArgs: any
    +

    Returns void

+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the total memory used by WebAssembly.

    +
    +

    Returns Promise<number>

    the total memory used by WebAssembly

    + +
+
+ +
    + +
  • +

    Get the WebAssembly module in the current context (nodejs, browser main thread or worker).

    +
    +

    Returns any

    +
+
+ +
    + +
  • +

    Get a singleton instance of a worker to share.

    +
    +

    Returns Promise<any>

    a worker to share among wallet instances

    + +
+
+ +
+
+ +
    + +
  • +

    Invoke a worker function and get the result with error handling.

    +
    +
    +

    Parameters

    +
      +
    • +
      objectId: any
      +

      identifies the worker object to invoke (default random id)

      +
      +
    • +
    • +
      fnName: any
      +

      is the name of the function to invoke

      +
      +
    • +
    • +
      Optional args: any
      +

      are function arguments to invoke with

      +
      +
    +

    Returns Promise<unknown>

    resolves with response payload from the worker or an error

    + +
+
+ +
    + +
  • +

    Indicate if unauthorized requests should be rejected.

    +
    +
    +

    Parameters

    +
      +
    • +
      fnId: any
      +

      uniquely identifies the function

      +
      +
    +

    Returns any

    +
+
+ +
    + +
  • +

    Load the WebAssembly full module with caching.

    +

    The full module is a superset of the keys module and overrides it.

    +

    TODO: this is separate static function from loadKeysModule() because webpack cannot bundle worker using runtime param for conditional import

    +
    +

    Returns Promise<any>

    +
+
+ +
+
+ +
    + +
  • +

    Log a message.

    +
    +
    +

    Parameters

    +
      +
    • +
      level: any
      +

      log level of the message

      +
      +
    • +
    • +
      msg: any
      +

      message to log

      +
      +
    +

    Returns void

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set the library's log level with 0 being least verbose.

    +
    +
    +

    Parameters

    +
      +
    • +
      level: any
      +

      the library's log level

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Register a function by id which informs if unauthorized requests (e.g. +self-signed certificates) should be rejected.

    +
    +
    +

    Parameters

    +
      +
    • +
      fnId: any
      +

      unique identifier for the function

      +
      +
    • +
    • +
      fn: any
      +

      function to inform if unauthorized requests should be rejected

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Set the path to load the worker. Defaults to "/monero_web_worker.js" in the browser +and "./MoneroWebWorker.js" in node.

    +
    +
    +

    Parameters

    +
      +
    • +
      workerDistPath: any
      +

      path to load the worker

      +
      +
    +

    Returns void

    +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroAccount.html b/docs/typedocs/classes/MoneroAccount.html new file mode 100644 index 000000000..8f3d8faf7 --- /dev/null +++ b/docs/typedocs/classes/MoneroAccount.html @@ -0,0 +1,357 @@ +MoneroAccount | monero-ts
+
+ +
+
+
+
+ +

Class MoneroAccount

+
+

Monero account model.

+
+
+
+

Hierarchy

+
    +
  • MoneroAccount
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
balance: bigint
+
+ +
index: number
+
+ +
label: string
+
+ +
primaryAddress: string
+
+ +
subaddresses: MoneroSubaddress[]
+
+ +
tag: string
+
+ +
unlockedBalance: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroAccountTag.html b/docs/typedocs/classes/MoneroAccountTag.html new file mode 100644 index 000000000..e0ff3f2c7 --- /dev/null +++ b/docs/typedocs/classes/MoneroAccountTag.html @@ -0,0 +1,204 @@ +MoneroAccountTag | monero-ts
+
+ +
+
+
+
+ +

Class MoneroAccountTag

+
+

Represents an account tag.

+
+
+
+

Hierarchy

+
    +
  • MoneroAccountTag
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
accountIndices: number[]
+
+ +
label: string
+
+ +
tag: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroAddressBookEntry.html b/docs/typedocs/classes/MoneroAddressBookEntry.html new file mode 100644 index 000000000..38e022199 --- /dev/null +++ b/docs/typedocs/classes/MoneroAddressBookEntry.html @@ -0,0 +1,246 @@ +MoneroAddressBookEntry | monero-ts
+
+ +
+
+
+
+ +

Class MoneroAddressBookEntry

+
+

Monero address book entry model

+
+
+
+

Hierarchy

+
    +
  • MoneroAddressBookEntry
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
address: string
+
+ +
description: string
+
+ +
index: number
+
+ +
paymentId: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroAltChain.html b/docs/typedocs/classes/MoneroAltChain.html new file mode 100644 index 000000000..c61f811cf --- /dev/null +++ b/docs/typedocs/classes/MoneroAltChain.html @@ -0,0 +1,278 @@ +MoneroAltChain | monero-ts
+
+ +
+
+
+
+ +

Class MoneroAltChain

+
+

Models an alternative chain seen by the node.

+
+
+
+

Hierarchy

+
    +
  • MoneroAltChain
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
blockHashes: string[]
+
+ +
difficulty: bigint
+
+ +
height: number
+
+ +
length: number
+
+ +
mainChainParentBlockHash: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroBan.html b/docs/typedocs/classes/MoneroBan.html new file mode 100644 index 000000000..6347e0a96 --- /dev/null +++ b/docs/typedocs/classes/MoneroBan.html @@ -0,0 +1,246 @@ +MoneroBan | monero-ts
+
+ +
+
+
+
+ +

Class MoneroBan

+
+

Monero banhammer.

+
+
+
+

Hierarchy

+
    +
  • MoneroBan
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
host: string
+
+ +
ip: string
+
+ +
isBanned: boolean
+
+ +
seconds: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroBlock.html b/docs/typedocs/classes/MoneroBlock.html new file mode 100644 index 000000000..d19183535 --- /dev/null +++ b/docs/typedocs/classes/MoneroBlock.html @@ -0,0 +1,977 @@ +MoneroBlock | monero-ts
+
+ +
+
+
+
+ +

Class MoneroBlock

+
+

Models a Monero block in the blockchain.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
cumulativeDifficulty: bigint
+
+ +
depth: number
+
+ +
difficulty: bigint
+
+ +
hash: string
+
+ +
height: number
+
+ +
hex: string
+
+ +
longTermWeight: number
+
+ +
majorVersion: number
+
+ +
minerTx: MoneroTx
+
+ +
minerTxHash: string
+
+ +
minorVersion: number
+
+ +
nonce: number
+
+ +
numTxs: number
+
+ +
orphanStatus: boolean
+
+ +
powHash: string
+
+ +
prevHash: string
+
+ +
reward: bigint
+
+ +
size: number
+
+ +
timestamp: number
+
+ +
txHashes: string[]
+
+ +
txs: MoneroTx[]
+
+ +
weight: number
+
+ +
DeserializationType: typeof DeserializationType = DeserializationType
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroBlockHeader.html b/docs/typedocs/classes/MoneroBlockHeader.html new file mode 100644 index 000000000..8d39e8285 --- /dev/null +++ b/docs/typedocs/classes/MoneroBlockHeader.html @@ -0,0 +1,747 @@ +MoneroBlockHeader | monero-ts
+
+ +
+
+
+
+ +

Class MoneroBlockHeader

+
+

Models a Monero block header which contains information about the block.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
cumulativeDifficulty: bigint
+
+ +
depth: number
+
+ +
difficulty: bigint
+
+ +
hash: string
+
+ +
height: number
+
+ +
longTermWeight: number
+
+ +
majorVersion: number
+
+ +
minerTxHash: string
+
+ +
minorVersion: number
+
+ +
nonce: number
+
+ +
numTxs: number
+
+ +
orphanStatus: boolean
+
+ +
powHash: string
+
+ +
prevHash: string
+
+ +
reward: bigint
+
+ +
size: number
+
+ +
timestamp: number
+
+ +
weight: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroBlockTemplate.html b/docs/typedocs/classes/MoneroBlockTemplate.html new file mode 100644 index 000000000..583efc580 --- /dev/null +++ b/docs/typedocs/classes/MoneroBlockTemplate.html @@ -0,0 +1,438 @@ +MoneroBlockTemplate | monero-ts
+
+ +
+
+
+
+ +

Class MoneroBlockTemplate

+
+

Monero block template to mine.

+
+
+
+

Hierarchy

+
    +
  • MoneroBlockTemplate
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
blockHashingBlob: string
+
+ +
blockTemplateBlob: string
+
+ +
difficulty: bigint
+
+ +
expectedReward: bigint
+
+ +
height: number
+
+ +
nextSeedHash: string
+
+ +
prevId: string
+
+ +
reservedOffset: number
+
+ +
seedHash: string
+
+ +
seedHeight: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroCheck.html b/docs/typedocs/classes/MoneroCheck.html new file mode 100644 index 000000000..bcbf31efd --- /dev/null +++ b/docs/typedocs/classes/MoneroCheck.html @@ -0,0 +1,143 @@ +MoneroCheck | monero-ts
+
+ +
+
+
+
+ +

Class MoneroCheck

+
+

Base class for results from checking a transaction or reserve proof.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
isGood?: boolean
+
+

Methods

+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroCheckReserve.html b/docs/typedocs/classes/MoneroCheckReserve.html new file mode 100644 index 000000000..1d570555a --- /dev/null +++ b/docs/typedocs/classes/MoneroCheckReserve.html @@ -0,0 +1,220 @@ +MoneroCheckReserve | monero-ts
+
+ +
+
+
+
+ +

Class MoneroCheckReserve

+
+

Results from checking a reserve proof.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
isGood?: boolean
+
+ +
totalAmount: bigint
+
+ +
unconfirmedSpentAmount: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroCheckTx.html b/docs/typedocs/classes/MoneroCheckTx.html new file mode 100644 index 000000000..47a6f5e78 --- /dev/null +++ b/docs/typedocs/classes/MoneroCheckTx.html @@ -0,0 +1,252 @@ +MoneroCheckTx | monero-ts
+
+ +
+
+
+
+ +

Class MoneroCheckTx

+
+

Results from checking a transaction key.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
inTxPool: boolean
+
+ +
isGood?: boolean
+
+ +
numConfirmations: number
+
+ +
receivedAmount: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroConnectionManager.html b/docs/typedocs/classes/MoneroConnectionManager.html new file mode 100644 index 000000000..a84c7f3bf --- /dev/null +++ b/docs/typedocs/classes/MoneroConnectionManager.html @@ -0,0 +1,896 @@ +MoneroConnectionManager | monero-ts
+
+ +
+
+
+
+ +

Class MoneroConnectionManager

+
+

Manages a collection of prioritized connections to daemon or wallet RPC endpoints.

+ +

Example usage:

+ + +// imports
+ * const MoneroRpcConnection = MoneroRpcConnection;
+const MoneroConnectionManager = MoneroConnectionManager;
+const MoneroConnectionManagerListener = MoneroConnectionManagerListener;

+ +

// create connection manager
+let connectionManager = new MoneroConnectionManager();

+

// add managed connections with priorities
+connectionManager.addConnection(new MoneroRpcConnection("http://localhost:38081").setPriority(1)); // use localhost as first priority
+connectionManager.addConnection(new MoneroRpcConnection("http://example.com")); // default priority is prioritized last

+

// set current connection
+connectionManager.setConnection(new MoneroRpcConnection("http://foo.bar", "admin", "password")); // connection is added if new

+

// check connection status
+await connectionManager.checkConnection();
+console.log("Connection manager is connected: " + connectionManager.isConnected());
+console.log("Connection is online: " + connectionManager.getConnection().getIsOnline());
+console.log("Connection is authenticated: " + connectionManager.getConnection().getIsAuthenticated());

+

// receive notifications of any changes to current connection
+connectionManager.addListener(new class extends MoneroConnectionManagerListener {
+   onConnectionChanged(connection) {
+     console.log("Connection changed to: " + connection);
+   }
+});

+

// start polling for best connection every 10 seconds and automatically switch
+connectionManager.startPolling(10000);

+

// automatically switch to best available connection if disconnected
+connectionManager.setAutoSwitch(true);

+

// get best available connection in order of priority then response time
+let bestConnection = await connectionManager.getBestAvailableConnection();

+

// check status of all connections
+await connectionManager.checkConnections();

+

// get connections in order of current connection, online status from last check, priority, and name
+let connections = connectionManager.getConnections();

+

// clear connection manager
+connectionManager.clear(); +

+
+
+
+

Hierarchy

+
    +
  • MoneroConnectionManager
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
autoSwitch: any
+
+ +
connections: any
+
+ +
currentConnection: any
+
+ +
listeners: any
+
+ +
poller: any
+
+ +
proxyToWorker: any
+
+ +
responseTimes: any
+
+ +
timeoutMs: any
+
+ +
DEFAULT_AUTO_SWITCH: boolean = true
+
+ +
DEFAULT_POLL_PERIOD: number = 20000
+
+ +
DEFAULT_TIMEOUT: number = 5000
+
+ +
MIN_BETTER_RESPONSES: number = 3
+
+ +
PollType: {
    ALL: number;
    CURRENT: number;
    PRIORITIZED: number;
} = ...
+

Specify behavior when polling.

+

One of PRIORITIZED (poll connections in order of priority until connected; default), CURRENT (poll current connection), or ALL (poll all connections).

+
+
+

Type declaration

+
    +
  • +
    ALL: number
  • +
  • +
    CURRENT: number
  • +
  • +
    PRIORITIZED: number
+
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Check all managed connections, returning a promise for each connection check. +Does not auto switch if disconnected.

    +
    +

    Returns Promise<void>[]

    a promise for each connection in the order of getConnections().

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Indicates if this manager has a connection with the given URI.

    +
    +
    +

    Parameters

    +
      +
    • +
      uri: string
      +

      URI of the connection to check

      +
      +
    +

    Returns boolean

    true if this manager has a connection with the given URI, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the connection manager is connected to a node.

    +
    +

    Returns boolean

    true if the current connection is set, online, and not unauthenticated, undefined if unknown, false otherwise

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set the current connection. +Provide a URI to select an existing connection without updating its credentials. +Provide a MoneroRpcConnection to add new connection or replace existing connection with the same URI. +Notify if current connection changes. +Does not check the connection.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional uriOrConnection: string | Partial<MoneroRpcConnection>
      +

      is the uri of the connection or the connection to make current (default undefined for no current connection)

      +
      +
    +

    Returns Promise<MoneroConnectionManager>

    this connection manager for chaining

    + +
+
+ +
+
+ +
    + +
  • +

    Start polling connections.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional periodMs: number
      +

      poll period in milliseconds (default 20s)

      +
      +
    • +
    • +
      Optional autoSwitch: boolean
      +

      specifies to automatically switch to the best connection (default true unless changed)

      +
      +
    • +
    • +
      Optional timeoutMs: number
      +

      specifies the timeout to poll a single connection (default 5s unless changed)

      +
      +
    • +
    • +
      Optional pollType: number
      +

      one of PRIORITIZED (poll connections in order of priority until connected; default), CURRENT (poll current connection), or ALL (poll all connections)

      +
      +
    • +
    • +
      Optional excludedConnections: MoneroRpcConnection[]
      +

      connections excluded from being polled

      +
      +
    +

    Returns MoneroConnectionManager

    this connection manager for chaining

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroConnectionManagerListener.html b/docs/typedocs/classes/MoneroConnectionManagerListener.html new file mode 100644 index 000000000..387458a82 --- /dev/null +++ b/docs/typedocs/classes/MoneroConnectionManagerListener.html @@ -0,0 +1,117 @@ +MoneroConnectionManagerListener | monero-ts
+
+ +
+
+
+
+ +

Class MoneroConnectionManagerListener

+
+

Default connection manager listener which takes no action on notifications.

+
+
+
+

Hierarchy

+
    +
  • MoneroConnectionManagerListener
+
+
+
+ +
+
+

Constructors

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Methods

+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroConnectionSpan.html b/docs/typedocs/classes/MoneroConnectionSpan.html new file mode 100644 index 000000000..156d82e47 --- /dev/null +++ b/docs/typedocs/classes/MoneroConnectionSpan.html @@ -0,0 +1,342 @@ +MoneroConnectionSpan | monero-ts
+
+ +
+
+
+
+ +

Class MoneroConnectionSpan

+
+

Monero daemon connection span.

+
+
+
+

Hierarchy

+
    +
  • MoneroConnectionSpan
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
connectionId: string
+
+ +
numBlocks: number
+
+ +
rate: number
+
+ +
remoteAddress: string
+
+ +
size: number
+
+ +
speed: number
+
+ +
startHeight: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroDaemon.html b/docs/typedocs/classes/MoneroDaemon.html new file mode 100644 index 000000000..dd6eb47f2 --- /dev/null +++ b/docs/typedocs/classes/MoneroDaemon.html @@ -0,0 +1,1420 @@ +MoneroDaemon | monero-ts
+
+ +
+
+
+
+ +

Class MoneroDaemon

+
+

Monero daemon interface and default implementations.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Flush transactions from the tx pool.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional hashes: string | string[]
      +

      specific transactions to flush (defaults to all)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Get known block hashes which are not on the main chain.

    +
    +

    Returns Promise<string[]>

    known block hashes which are not on the main chain

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get a block's hash by its height.

    +
    +
    +

    Parameters

    +
      +
    • +
      height: number
      +

      height of the block hash to get

      +
      +
    +

    Returns Promise<string>

    the block's hash at the given height

    + +
+
+ +
    + +
  • +

    Get block hashes as a binary request to the daemon.

    +
    +
    +

    Parameters

    +
      +
    • +
      blockHashes: string[]
      +

      specify block hashes to fetch; first 10 blocks hash goes + sequential, next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64 + and so on, and the last one is always genesis block

      +
      +
    • +
    • +
      startHeight: number
      +

      starting height of block hashes to return

      +
      +
    +

    Returns Promise<string[]>

    requested block hashes

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get block headers for the given range.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional startHeight: number
      +

      start height lower bound inclusive (optional)

      +
      +
    • +
    • +
      Optional endHeight: number
      +

      end height upper bound inclusive (optional)

      +
      +
    +

    Returns Promise<MoneroBlockHeader[]>

    for the given range

    + +
+
+ +
    + +
  • +

    Get a block template for mining a new block.

    +
    +
    +

    Parameters

    +
      +
    • +
      walletAddress: string
      +

      address of the wallet to receive miner transactions if block is successfully mined

      +
      +
    • +
    • +
      Optional reserveSize: number
      +

      reserve size (optional)

      +
      +
    +

    Returns Promise<MoneroBlockTemplate>

    is a block template for mining a new block

    + +
+
+ +
    + +
  • +

    Get blocks by hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      blockHashes: string[]
      +

      array of hashes; first 10 blocks hashes goes sequential, + next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64 and so on, + and the last one is always genesis block

      +
      +
    • +
    • +
      startHeight: number
      +

      start height to get blocks by hash

      +
      +
    • +
    • +
      Optional prune: boolean = false
      +

      specifies if returned blocks should be pruned (defaults to false) // TODO: test default

      +
      +
    +

    Returns Promise<MoneroBlock[]>

    retrieved blocks

    + +
+
+ +
+
+ +
    + +
  • +

    Get blocks in the given height range.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional startHeight: number
      +

      start height lower bound inclusive (optional)

      +
      +
    • +
    • +
      Optional endHeight: number
      +

      end height upper bound inclusive (optional)

      +
      +
    +

    Returns Promise<MoneroBlock[]>

    are blocks in the given height range

    + +
+
+ +
    + +
  • +

    Get blocks in the given height range as chunked requests so that each request is +not too big.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional startHeight: number
      +

      start height lower bound inclusive (optional)

      +
      +
    • +
    • +
      Optional endHeight: number
      +

      end height upper bound inclusive (optional)

      +
      +
    • +
    • +
      Optional maxChunkSize: number
      +

      maximum chunk size in any one request (default 3,000,000 bytes)

      +
      +
    +

    Returns Promise<MoneroBlock[]>

    blocks in the given height range

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the number of blocks in the longest chain known to the node.

    +
    +

    Returns Promise<number>

    the number of blocks!

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Gets the total emissions and fees from the genesis block to the current height.

    +
    +
    +

    Parameters

    +
      +
    • +
      height: number
      +

      height to start computing the miner sum

      +
      +
    • +
    • +
      numBlocks: number
      +

      number of blocks to include in the sum

      +
      +
    +

    Returns Promise<MoneroMinerTxSum>

    encapsulates the total emissions and fees since the genesis block

    + +
+
+ +
+
+ +
    + +
  • +

    Get a histogram of output amounts. For all amounts (possibly filtered by +parameters), gives the number of outputs on the chain for that amount. +RingCT outputs counts as 0 amount.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional amounts: bigint[]
      +

      amounts of outputs to make the histogram with

      +
      +
    • +
    • +
      Optional minCount: number
      +

      TODO

      +
      +
    • +
    • +
      Optional maxCount: number
      +

      TODO

      +
      +
    • +
    • +
      Optional isUnlocked: boolean
      +

      makes a histogram with outputs with the specified lock state

      +
      +
    • +
    • +
      Optional recentCutoff: number
      +

      TODO

      +
      +
    +

    Returns Promise<MoneroOutputHistogramEntry[]>

    are entries meeting the parameters

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get a transaction by hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional txHash: string
      +

      hash of the transaction to get

      +
      +
    • +
    • +
      Optional prune: boolean = false
      +

      specifies if the returned tx should be pruned (defaults to false)

      +
      +
    +

    Returns Promise<MoneroTx>

    transaction with the given hash or undefined if not found

    + +
+
+ +
    + +
  • +

    Get a transaction hex by hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      hash of the transaction to get hex from

      +
      +
    • +
    • +
      Optional prune: boolean = false
      +

      specifies if the returned tx hex should be pruned (defaults to false)

      +
      +
    +

    Returns Promise<string>

    tx hex with the given hash

    + +
+
+ +
    + +
  • +

    Get transaction hexes by hashes.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      hashes of transactions to get hexes from

      +
      +
    • +
    • +
      Optional prune: boolean = false
      +

      specifies if the returned tx hexes should be pruned (defaults to false)

      +
      +
    +

    Returns Promise<string[]>

    tx hexes

    + +
+
+ +
    + +
  • +

    Get valid transactions seen by the node but not yet mined into a block, as well +as spent key image information for the tx pool.

    +
    +

    Returns Promise<MoneroTx[]>

    are transactions in the transaction pool!

    + +
+
+ +
    + +
  • +

    Get hashes of transactions in the transaction pool.

    +
    +

    Returns Promise<string[]>

    are hashes of transactions in the transaction pool

    + +
+
+ +
+
+ +
    + +
  • +

    Get transactions by hashes.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      hashes of transactions to get

      +
      +
    • +
    • +
      Optional prune: boolean = false
      +

      specifies if the returned txs should be pruned (defaults to false)

      +
      +
    +

    Returns Promise<MoneroTx[]>

    found transactions with the given hashes

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Indicates if the client is connected to the daemon via RPC.

    +
    +

    Returns Promise<boolean>

    true if the client is connected to the daemon, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the daemon is trusted xor untrusted.

    +
    +

    Returns Promise<boolean>

    true if the daemon is trusted, false otherwise

    + +
+
+ +
+
+ +
    + +
  • +

    Relays a transaction by hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      hash of the transaction to relay

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Relays transactions by hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      hashes of the transactinos to relay

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
    + +
  • +

    Reset the download bandwidth limit.

    +
    +

    Returns Promise<number>

    download bandwidth limit after resetting

    + +
+
+ +
    + +
  • +

    Reset the upload bandwidth limit.

    +
    +

    Returns Promise<number>

    upload bandwidth limit after resetting

    + +
+
+ +
    + +
  • +

    Set the download bandwidth limit.

    +
    +
    +

    Parameters

    +
      +
    • +
      limit: number
      +

      download limit to set (-1 to reset to default)

      +
      +
    +

    Returns Promise<number>

    new download limit after setting

    + +
+
+ +
    + +
  • +

    Limit number of incoming peers.

    +
    +
    +

    Parameters

    +
      +
    • +
      limit: number
      +

      maximum number of incoming peers

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Limit number of outgoing peers.

    +
    +
    +

    Parameters

    +
      +
    • +
      limit: number
      +

      maximum number of outgoing peers

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set the upload bandwidth limit.

    +
    +
    +

    Parameters

    +
      +
    • +
      limit: number
      +

      upload limit to set (-1 to reset to default)

      +
      +
    +

    Returns Promise<number>

    new upload limit after setting

    + +
+
+ +
    + +
  • +

    Start mining.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: string
      +

      address given miner rewards if the daemon mines a block

      +
      +
    • +
    • +
      Optional numThreads: number
      +

      number of mining threads to run (default 1)

      +
      +
    • +
    • +
      Optional isBackground: boolean
      +

      specifies if the miner should run in the background or not (default false)

      +
      +
    • +
    • +
      Optional ignoreBattery: boolean
      +

      specifies if the battery state (e.g. on laptop) should be ignored or not (default false)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Submit a mined block to the network.

    +
    +
    +

    Parameters

    +
      +
    • +
      blockBlob: string
      +

      mined block to submit

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Submit mined blocks to the network.

    +
    +
    +

    Parameters

    +
      +
    • +
      blockBlobs: string[]
      +

      mined blocks to submit

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Submits a transaction to the daemon's pool.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHex: string
      +

      raw transaction hex to submit

      +
      +
    • +
    • +
      doNotRelay: boolean = false
      +

      specifies if the tx should be relayed (default false, i.e. relay)

      +
      +
    +

    Returns Promise<MoneroSubmitTxResult>

    contains submission results

    + +
+
+ +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroDaemonConfig.html b/docs/typedocs/classes/MoneroDaemonConfig.html new file mode 100644 index 000000000..fc2e7b2cc --- /dev/null +++ b/docs/typedocs/classes/MoneroDaemonConfig.html @@ -0,0 +1,262 @@ +MoneroDaemonConfig | monero-ts
+
+ +
+
+
+
+ +

Class MoneroDaemonConfig

+
+

Configuration to connect to monerod.

+
+
+
+

Hierarchy

+
    +
  • MoneroDaemonConfig
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
cmd: string[]
+
+ +
pollInterval: number
+
+ +
proxyToWorker: boolean
+
+ +
server: string | Partial<MoneroRpcConnection>
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroDaemonInfo.html b/docs/typedocs/classes/MoneroDaemonInfo.html new file mode 100644 index 000000000..4a85bb464 --- /dev/null +++ b/docs/typedocs/classes/MoneroDaemonInfo.html @@ -0,0 +1,1174 @@ +MoneroDaemonInfo | monero-ts
+
+ +
+
+
+
+ +

Class MoneroDaemonInfo

+
+

Monero daemon info.

+
+
+
+

Hierarchy

+
    +
  • MoneroDaemonInfo
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
adjustedTimestamp: number
+
+ +
blockSizeLimit: number
+
+ +
blockSizeMedian: number
+
+ +
blockWeightLimit: number
+
+ +
blockWeightMedian: number
+
+ +
bootstrapDaemonAddress: string
+
+ +
credits: bigint
+
+ +
cumulativeDifficulty: bigint
+
+ +
databaseSize: number
+
+ +
difficulty: bigint
+
+ +
freeSpace: bigint
+
+ +
height: number
+
+ +
heightWithoutBootstrap: number
+
+ +
isBusySyncing: boolean
+
+ +
isOffline: boolean
+
+ +
isRestricted: boolean
+
+ +
isSynchronized: boolean
+
+ +
networkType: string
+
+ +
numAltBlocks: number
+
+ +
numIncomingConnections: number
+
+ +
numOfflinePeers: number
+
+ +
numOnlinePeers: number
+
+ +
numOutgoingConnections: number
+
+ +
numRpcConnections: number
+
+ +
numTxs: number
+
+ +
numTxsPool: number
+
+ +
startTimestamp: number
+
+ +
target: number
+
+ +
targetHeight: number
+
+ +
topBlockHash: string
+
+ +
updateAvailable: boolean
+
+ +
version: string
+
+ +
wasBootstrapEverUsed: boolean
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroDaemonListener.html b/docs/typedocs/classes/MoneroDaemonListener.html new file mode 100644 index 000000000..cf54e4cda --- /dev/null +++ b/docs/typedocs/classes/MoneroDaemonListener.html @@ -0,0 +1,143 @@ +MoneroDaemonListener | monero-ts
+
+ +
+
+
+
+ +

Class MoneroDaemonListener

+
+

Receives notifications as a daemon is updated.

+
+
+
+

Hierarchy

+
    +
  • MoneroDaemonListener
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
lastHeader: MoneroBlockHeader
+
+

Methods

+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroDaemonRpc.html b/docs/typedocs/classes/MoneroDaemonRpc.html new file mode 100644 index 000000000..4881df9e9 --- /dev/null +++ b/docs/typedocs/classes/MoneroDaemonRpc.html @@ -0,0 +1,2122 @@ +MoneroDaemonRpc | monero-ts
+
+ +
+
+
+
+ +

Class MoneroDaemonRpc

+
+

Implements a MoneroDaemon as a client of monerod.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Methods

+
addListener +checkForUpdate +downloadUpdate +flushTxPool +getAltBlockHashes +getAltChains +getBandwidthLimits +getBlockByHash +getBlockByHeight +getBlockHash +getBlockHashes +getBlockHeaderByHash +getBlockHeaderByHeight +getBlockHeaderByHeightCached +getBlockHeadersByRange +getBlockTemplate +getBlocksByHash +getBlocksByHeight +getBlocksByRange +getBlocksByRangeChunked +getDownloadLimit +getFeeEstimate +getHardForkInfo +getHeight +getInfo +getKeyImageSpentStatus +getKeyImageSpentStatuses +getKnownPeers +getLastBlockHeader +getListeners +getMaxBlocks +getMinerTxSum +getMiningStatus +getOutputDistribution +getOutputHistogram +getOutputs +getPeerBans +getPeers +getPollInterval +getProcess +getRpcConnection +getSyncInfo +getTx +getTxHex +getTxHexes +getTxPool +getTxPoolHashes +getTxPoolStats +getTxs +getUploadLimit +getVersion +isConnected +isTrusted +pruneBlockchain +refreshListening +relayTxByHash +relayTxsByHash +removeListener +resetDownloadLimit +resetUploadLimit +setBandwidthLimits +setDownloadLimit +setIncomingPeerLimit +setOutgoingPeerLimit +setPeerBan +setPeerBans +setUploadLimit +startMining +stop +stopMining +stopProcess +submitBlock +submitBlocks +submitTxHex +waitForNextBlockHeader +checkResponseStatus +connectToDaemonRpc +convertRpcAltChain +convertRpcBlock +convertRpcBlockHeader +convertRpcBlockTemplate +convertRpcConnection +convertRpcConnectionSpan +convertRpcHardForkInfo +convertRpcInfo +convertRpcMiningStatus +convertRpcOutput +convertRpcOutputHistogramEntry +convertRpcPeer +convertRpcSubmitTxResult +convertRpcSyncInfo +convertRpcTx +convertRpcTxPoolStats +convertRpcUpdateCheckResult +convertRpcUpdateDownloadResult +convertToRpcBan +normalizeConfig +prefixedHexToBI +startMonerodProcess +
+
+

Properties

+
+ +
cachedHeaders: any
+
+ +
config: Partial<MoneroDaemonConfig>
+
+ +
+
+ +
pollListener: any
+
+ +
process: any
+
+ +
proxyDaemon: any
+
+ +
DEFAULT_ID: "0000000000000000000000000000000000000000000000000000000000000000" = "0000000000000000000000000000000000000000000000000000000000000000"
+
+ +
DEFAULT_POLL_PERIOD: 20000 = 20000
+
+ +
MAX_REQ_SIZE: "3000000" = "3000000"
+
+ +
NUM_HEADERS_PER_REQ: 750 = 750
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get block hashes as a binary request to the daemon.

    +
    +
    +

    Parameters

    +
      +
    • +
      blockHashes: string[]
      +

      specify block hashes to fetch; first 10 blocks hash goes + sequential, next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64 + and so on, and the last one is always genesis block

      +
      +
    • +
    • +
      startHeight: number
      +

      starting height of block hashes to return

      +
      +
    +

    Returns Promise<string[]>

    requested block hashes

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Retrieves a header by height from the cache or fetches and caches a header +range if not already in the cache.

    +
    +
    +

    Parameters

    +
      +
    • +
      height: any
      +

      height of the header to retrieve from the cache

      +
      +
    • +
    • +
      maxHeight: any
      +

      maximum height of headers to cache

      +
      +
    +

    Returns Promise<any>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get blocks by hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      blockHashes: string[]
      +

      array of hashes; first 10 blocks hashes goes sequential, + next goes in pow(2,n) offset, like 2, 4, 8, 16, 32, 64 and so on, + and the last one is always genesis block

      +
      +
    • +
    • +
      startHeight: number
      +

      start height to get blocks by hash

      +
      +
    • +
    • +
      Optional prune: boolean = false
      +

      specifies if returned blocks should be pruned (defaults to false) // TODO: test default

      +
      +
    +

    Returns Promise<MoneroBlock[]>

    retrieved blocks

    + +
+
+ +
+
+ +
    + +
  • +

    Get blocks in the given height range.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional startHeight: number
      +

      start height lower bound inclusive (optional)

      +
      +
    • +
    • +
      Optional endHeight: number
      +

      end height upper bound inclusive (optional)

      +
      +
    +

    Returns Promise<MoneroBlock[]>

    are blocks in the given height range

    + +
+
+ +
    + +
  • +

    Get blocks in the given height range as chunked requests so that each request is +not too big.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional startHeight: number
      +

      start height lower bound inclusive (optional)

      +
      +
    • +
    • +
      Optional endHeight: number
      +

      end height upper bound inclusive (optional)

      +
      +
    • +
    • +
      Optional maxChunkSize: number
      +

      maximum chunk size in any one request (default 3,000,000 bytes)

      +
      +
    +

    Returns Promise<MoneroBlock[]>

    blocks in the given height range

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get a contiguous chunk of blocks starting from a given height up to a maximum +height or amount of block data fetched from the blockchain, whichever comes first.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional startHeight: any
      +

      start height to retrieve blocks (default 0)

      +
      +
    • +
    • +
      Optional maxHeight: any
      +

      maximum end height to retrieve blocks (default blockchain height)

      +
      +
    • +
    • +
      Optional maxReqSize: any
      +

      maximum amount of block data to fetch from the blockchain in bytes (default 3,000,000 bytes)

      +
      +
    +

    Returns Promise<MoneroBlock[]>

    are the resulting chunk of blocks

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +
    +

    Parameters

    +
      +
    • +
      amounts: any
    • +
    • +
      cumulative: any
    • +
    • +
      startHeight: any
    • +
    • +
      endHeight: any
    +

    Returns Promise<any>

+
+ +
    + +
  • +

    Get a histogram of output amounts. For all amounts (possibly filtered by +parameters), gives the number of outputs on the chain for that amount. +RingCT outputs counts as 0 amount.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional amounts: bigint[]
      +

      amounts of outputs to make the histogram with

      +
      +
    • +
    • +
      Optional minCount: number
      +

      TODO

      +
      +
    • +
    • +
      Optional maxCount: number
      +

      TODO

      +
      +
    • +
    • +
      Optional isUnlocked: boolean
      +

      makes a histogram with outputs with the specified lock state

      +
      +
    • +
    • +
      Optional recentCutoff: number
      +

      TODO

      +
      +
    +

    Returns Promise<MoneroOutputHistogramEntry[]>

    are entries meeting the parameters

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the internal process running monerod.

    +
    +

    Returns ChildProcess

    the node process running monerod, undefined if not created from new process

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get a transaction by hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional txHash: string
      +

      hash of the transaction to get

      +
      +
    • +
    • +
      prune: boolean = false
      +

      specifies if the returned tx should be pruned (defaults to false)

      +
      +
    +

    Returns Promise<MoneroTx>

    transaction with the given hash or undefined if not found

    + +
+
+ +
    + +
  • +

    Get a transaction hex by hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      hash of the transaction to get hex from

      +
      +
    • +
    • +
      prune: boolean = false
      +

      specifies if the returned tx hex should be pruned (defaults to false)

      +
      +
    +

    Returns Promise<string>

    tx hex with the given hash

    + +
+
+ +
    + +
  • +

    Get transaction hexes by hashes.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      hashes of transactions to get hexes from

      +
      +
    • +
    • +
      prune: boolean = false
      +

      specifies if the returned tx hexes should be pruned (defaults to false)

      +
      +
    +

    Returns Promise<string[]>

    tx hexes

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get transactions by hashes.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      hashes of transactions to get

      +
      +
    • +
    • +
      prune: boolean = false
      +

      specifies if the returned txs should be pruned (defaults to false)

      +
      +
    +

    Returns Promise<MoneroTx[]>

    found transactions with the given hashes

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Start mining.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: string
      +

      address given miner rewards if the daemon mines a block

      +
      +
    • +
    • +
      Optional numThreads: number
      +

      number of mining threads to run (default 1)

      +
      +
    • +
    • +
      Optional isBackground: boolean
      +

      specifies if the miner should run in the background or not (default false)

      +
      +
    • +
    • +
      Optional ignoreBattery: boolean
      +

      specifies if the battery state (e.g. on laptop) should be ignored or not (default false)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Stop the internal process running monerod, if applicable.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional force: boolean = false
      +

      specifies if the process should be destroyed forcibly (default false)

      +
      +
    +

    Returns Promise<number>

    the exit code from stopping the process

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Transfers RPC tx fields to a given MoneroTx without overwriting previous values.

    +

    TODO: switch from safe set

    +
    +
    +

    Parameters

    +
      +
    • +
      rpcTx: any
      +

      RPC map containing transaction fields

      +
      +
    • +
    • +
      tx: any
      +

      MoneroTx to populate with values (optional)

      +
      +
    +

    Returns any

    tx - same tx that was passed in or a new one if none given

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Converts a '0x' prefixed hexidecimal string to a bigint.

    +
    +
    +

    Parameters

    +
      +
    • +
      hex: any
      +

      is the '0x' prefixed hexidecimal string to convert

      +
      +
    +

    Returns bigint

    the hexicedimal converted to decimal

    + +
+
+ +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroDaemonSyncInfo.html b/docs/typedocs/classes/MoneroDaemonSyncInfo.html new file mode 100644 index 000000000..98174eec4 --- /dev/null +++ b/docs/typedocs/classes/MoneroDaemonSyncInfo.html @@ -0,0 +1,374 @@ +MoneroDaemonSyncInfo | monero-ts
+
+ +
+
+
+
+ +

Class MoneroDaemonSyncInfo

+
+

Models daemon synchronization information.

+
+
+
+

Hierarchy

+
    +
  • MoneroDaemonSyncInfo
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
credits: bigint
+
+ +
height: number
+
+ +
nextNeededPruningSeed: number
+
+ +
overview: string
+
+ +
peers: MoneroPeer[]
+
+ +
+
+ +
targetHeight: number
+
+ +
topBlockHash: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroDaemonUpdateCheckResult.html b/docs/typedocs/classes/MoneroDaemonUpdateCheckResult.html new file mode 100644 index 000000000..a4abd6f04 --- /dev/null +++ b/docs/typedocs/classes/MoneroDaemonUpdateCheckResult.html @@ -0,0 +1,290 @@ +MoneroDaemonUpdateCheckResult | monero-ts
+
+ +
+
+
+
+ +

Class MoneroDaemonUpdateCheckResult

+
+

Models the result of checking for a daemon update.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
autoUri: string
+
+ +
hash: string
+
+ +
isUpdateAvailable: boolean
+
+ +
userUri: string
+
+ +
version: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroDaemonUpdateDownloadResult.html b/docs/typedocs/classes/MoneroDaemonUpdateDownloadResult.html new file mode 100644 index 000000000..7a00894c0 --- /dev/null +++ b/docs/typedocs/classes/MoneroDaemonUpdateDownloadResult.html @@ -0,0 +1,342 @@ +MoneroDaemonUpdateDownloadResult | monero-ts
+
+ +
+
+
+
+ +

Class MoneroDaemonUpdateDownloadResult

+
+

Models the result of downloading an update.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
autoUri: string
+
+ +
downloadPath: string
+
+ +
hash: string
+
+ +
isUpdateAvailable: boolean
+
+ +
userUri: string
+
+ +
version: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroDestination.html b/docs/typedocs/classes/MoneroDestination.html new file mode 100644 index 000000000..7799ff344 --- /dev/null +++ b/docs/typedocs/classes/MoneroDestination.html @@ -0,0 +1,218 @@ +MoneroDestination | monero-ts
+
+ +
+
+
+
+ +

Class MoneroDestination

+
+

Models an outgoing transfer destination.

+
+
+
+

Hierarchy

+
    +
  • MoneroDestination
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
address: string
+
+ +
amount: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroError.html b/docs/typedocs/classes/MoneroError.html new file mode 100644 index 000000000..9b0a83953 --- /dev/null +++ b/docs/typedocs/classes/MoneroError.html @@ -0,0 +1,232 @@ +MoneroError | monero-ts
+
+ +
+
+
+
+ +

Class MoneroError

+
+

Exception when interacting with a Monero wallet or daemon.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
    + +
  • +

    Constructs the error.

    +
    +
    +

    Parameters

    +
      +
    • +
      message: any
      +

      is a human-readable message of the error

      +
      +
    • +
    • +
      Optional code: any
      +

      is the error code (optional)

      +
      +
    +

    Returns MoneroError

    +
+
+

Properties

+
+ +
code: number
+
+ +
message: string
+
+ +
name: string
+
+ +
stack?: string
+
+ +
prepareStackTrace?: ((err, stackTraces) => any)
+
+

Type declaration

+
+
+ +
stackTraceLimit: number
+
+

Methods

+
+ +
+
+ +
+
+ +
    + +
  • +

    Create .stack property on a target object

    +
    +
    +

    Parameters

    +
      +
    • +
      targetObject: object
    • +
    • +
      Optional constructorOpt: Function
    +

    Returns void

    +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroFeeEstimate.html b/docs/typedocs/classes/MoneroFeeEstimate.html new file mode 100644 index 000000000..3b589fb9f --- /dev/null +++ b/docs/typedocs/classes/MoneroFeeEstimate.html @@ -0,0 +1,239 @@ +MoneroFeeEstimate | monero-ts
+
+ +
+
+
+
+ +

Class MoneroFeeEstimate

+
+

Models a Monero fee estimate.

+
+
+
+

Hierarchy

+
    +
  • MoneroFeeEstimate
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
fee: bigint
+
+ +
fees: bigint[]
+
+ +
quantizationMask: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroHardForkInfo.html b/docs/typedocs/classes/MoneroHardForkInfo.html new file mode 100644 index 000000000..56b0fb1c3 --- /dev/null +++ b/docs/typedocs/classes/MoneroHardForkInfo.html @@ -0,0 +1,438 @@ +MoneroHardForkInfo | monero-ts
+
+ +
+
+
+
+ +

Class MoneroHardForkInfo

+
+

Monero hard fork info.

+
+
+
+

Hierarchy

+
    +
  • MoneroHardForkInfo
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
credits: bigint
+
+ +
earliestHeight: number
+
+ +
isEnabled: boolean
+
+ +
numVotes: number
+
+ +
state: string
+
+ +
threshold: number
+
+ +
topBlockHash: string
+
+ +
version: number
+
+ +
voting: number
+
+ +
window: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroIncomingTransfer.html b/docs/typedocs/classes/MoneroIncomingTransfer.html new file mode 100644 index 000000000..4ef5051ea --- /dev/null +++ b/docs/typedocs/classes/MoneroIncomingTransfer.html @@ -0,0 +1,421 @@ +MoneroIncomingTransfer | monero-ts
+
+ +
+
+
+
+ +

Class MoneroIncomingTransfer

+
+

Models an incoming transfer of funds to the wallet.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
accountIndex: number
+
+ +
address: string
+
+ +
amount: bigint
+
+ +
numSuggestedConfirmations: number
+
+ +
subaddressIndex: number
+
+ +
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Return how many confirmations till it's not economically worth re-writing the chain. +That is, the number of confirmations before the transaction is highly unlikely to be +double spent or overwritten and may be considered settled, e.g. for a merchant to trust +as finalized.

    +
    +

    Returns number

    is the number of confirmations before it's not worth rewriting the chain

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroIntegratedAddress.html b/docs/typedocs/classes/MoneroIntegratedAddress.html new file mode 100644 index 000000000..b7d86c781 --- /dev/null +++ b/docs/typedocs/classes/MoneroIntegratedAddress.html @@ -0,0 +1,224 @@ +MoneroIntegratedAddress | monero-ts
+
+ +
+
+
+
+ +

Class MoneroIntegratedAddress

+
+

Monero integrated address model.

+
+
+
+

Hierarchy

+
    +
  • MoneroIntegratedAddress
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
integratedAddress: string
+
+ +
paymentId: string
+
+ +
standardAddress: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroKeyImage.html b/docs/typedocs/classes/MoneroKeyImage.html new file mode 100644 index 000000000..4e4f8ba23 --- /dev/null +++ b/docs/typedocs/classes/MoneroKeyImage.html @@ -0,0 +1,230 @@ +MoneroKeyImage | monero-ts
+
+ +
+
+
+
+ +

Class MoneroKeyImage

+
+

Models a Monero key image.

+
+
+
+

Hierarchy

+
    +
  • MoneroKeyImage
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
hex: string
+
+ +
signature: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroKeyImageImportResult.html b/docs/typedocs/classes/MoneroKeyImageImportResult.html new file mode 100644 index 000000000..79d460667 --- /dev/null +++ b/docs/typedocs/classes/MoneroKeyImageImportResult.html @@ -0,0 +1,214 @@ +MoneroKeyImageImportResult | monero-ts
+
+ +
+
+
+
+ +

Class MoneroKeyImageImportResult

+
+

Models results from importing key images.

+
+
+
+

Hierarchy

+
    +
  • MoneroKeyImageImportResult
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
height: number
+
+ +
spentAmount: bigint
+
+ +
unspentAmount: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroMessageSignatureResult.html b/docs/typedocs/classes/MoneroMessageSignatureResult.html new file mode 100644 index 000000000..06eb946b4 --- /dev/null +++ b/docs/typedocs/classes/MoneroMessageSignatureResult.html @@ -0,0 +1,246 @@ +MoneroMessageSignatureResult | monero-ts
+
+ +
+
+
+
+ +

Class MoneroMessageSignatureResult

+
+

Message signature verification result.

+
+
+
+

Hierarchy

+
    +
  • MoneroMessageSignatureResult
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
isGood: boolean
+
+ +
isOld: boolean
+
+ +
+
+ +
version: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroMinerTxSum.html b/docs/typedocs/classes/MoneroMinerTxSum.html new file mode 100644 index 000000000..90014f85d --- /dev/null +++ b/docs/typedocs/classes/MoneroMinerTxSum.html @@ -0,0 +1,182 @@ +MoneroMinerTxSum | monero-ts
+
+ +
+
+
+
+ +

Class MoneroMinerTxSum

+
+

Model for the summation of miner emissions and fees.

+
+
+
+

Hierarchy

+
    +
  • MoneroMinerTxSum
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
emissionSum: bigint
+
+ +
feeSum: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroMiningStatus.html b/docs/typedocs/classes/MoneroMiningStatus.html new file mode 100644 index 000000000..85b285d43 --- /dev/null +++ b/docs/typedocs/classes/MoneroMiningStatus.html @@ -0,0 +1,278 @@ +MoneroMiningStatus | monero-ts
+
+ +
+
+
+
+ +

Class MoneroMiningStatus

+
+

Models daemon mining status.

+
+
+
+

Hierarchy

+
    +
  • MoneroMiningStatus
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
address: string
+
+ +
isActive: boolean
+
+ +
isBackground: boolean
+
+ +
numThreads: number
+
+ +
speed: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroMultisigInfo.html b/docs/typedocs/classes/MoneroMultisigInfo.html new file mode 100644 index 000000000..97c5b5a06 --- /dev/null +++ b/docs/typedocs/classes/MoneroMultisigInfo.html @@ -0,0 +1,246 @@ +MoneroMultisigInfo | monero-ts
+
+ +
+
+
+
+ +

Class MoneroMultisigInfo

+
+

Models information about a multisig wallet.

+
+
+
+

Hierarchy

+
    +
  • MoneroMultisigInfo
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
isMultisig: boolean
+
+ +
isReady: boolean
+
+ +
numParticipants: number
+
+ +
threshold: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroMultisigInitResult.html b/docs/typedocs/classes/MoneroMultisigInitResult.html new file mode 100644 index 000000000..321324da8 --- /dev/null +++ b/docs/typedocs/classes/MoneroMultisigInitResult.html @@ -0,0 +1,184 @@ +MoneroMultisigInitResult | monero-ts
+
+ +
+
+
+
+ +

Class MoneroMultisigInitResult

+
+

Models the result of initializing a multisig wallet which results in the +multisig wallet's address xor another multisig hex to share with +participants to create the wallet.

+
+
+
+

Hierarchy

+
    +
  • MoneroMultisigInitResult
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
address: string
+
+ +
multisigHex: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroMultisigSignResult.html b/docs/typedocs/classes/MoneroMultisigSignResult.html new file mode 100644 index 000000000..12816ec79 --- /dev/null +++ b/docs/typedocs/classes/MoneroMultisigSignResult.html @@ -0,0 +1,182 @@ +MoneroMultisigSignResult | monero-ts
+
+ +
+
+
+
+ +

Class MoneroMultisigSignResult

+
+

Models the result of signing multisig tx hex.

+
+
+
+

Hierarchy

+
    +
  • MoneroMultisigSignResult
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
signedMultisigTxHex: string
+
+ +
txHashes: string[]
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroNetworkType.html b/docs/typedocs/classes/MoneroNetworkType.html new file mode 100644 index 000000000..c27942f49 --- /dev/null +++ b/docs/typedocs/classes/MoneroNetworkType.html @@ -0,0 +1,237 @@ +MoneroNetworkType | monero-ts
+
+ +
+
+
+
+ +

Class MoneroNetworkType

+
+

Defines the Monero network types (mainnet, testnet, and stagenet).

+
+
+
+

Hierarchy

+
    +
  • MoneroNetworkType
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
MAINNET: 0 = 0
+

Mainnet (value=0).

+
+
+
+ +
STAGENET: 2 = 2
+

Stagnet (value=2).

+
+
+
+ +
TESTNET: 1 = 1
+

Testnet (value=1).

+
+
+
+

Methods

+
+ +
+
+ +
    + +
  • +

    Indicates if the given network type is valid or not.

    +
    +
    +

    Parameters

    +
      +
    • +
      networkType: string | number | MoneroNetworkType
      +

      the network type to validate as a numeric

      +
      +
    +

    Returns boolean

    true if the network type is valid, false otherwise

    + +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroOutgoingTransfer.html b/docs/typedocs/classes/MoneroOutgoingTransfer.html new file mode 100644 index 000000000..1dd5697f8 --- /dev/null +++ b/docs/typedocs/classes/MoneroOutgoingTransfer.html @@ -0,0 +1,411 @@ +MoneroOutgoingTransfer | monero-ts
+
+ +
+
+
+
+ +

Class MoneroOutgoingTransfer

+
+

Models an outgoing transfer of funds from the wallet.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
accountIndex: number
+
+ +
addresses: string[]
+
+ +
amount: bigint
+
+ +
destinations: MoneroDestination[]
+
+ +
subaddressIndices: number[]
+
+ +
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroOutput.html b/docs/typedocs/classes/MoneroOutput.html new file mode 100644 index 000000000..89785806b --- /dev/null +++ b/docs/typedocs/classes/MoneroOutput.html @@ -0,0 +1,358 @@ +MoneroOutput | monero-ts
+
+ +
+
+
+
+ +

Class MoneroOutput

+
+

Models a Monero transaction output.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
amount: bigint
+
+ +
index: number
+
+ +
keyImage: Partial<MoneroKeyImage>
+
+ +
ringOutputIndices: number[]
+
+ +
stealthPublicKey: string
+
+ +
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroOutputHistogramEntry.html b/docs/typedocs/classes/MoneroOutputHistogramEntry.html new file mode 100644 index 000000000..ca84e5cc8 --- /dev/null +++ b/docs/typedocs/classes/MoneroOutputHistogramEntry.html @@ -0,0 +1,246 @@ +MoneroOutputHistogramEntry | monero-ts
+
+ +
+
+
+
+ +

Class MoneroOutputHistogramEntry

+
+

Entry in a Monero output histogram (see get_output_histogram of Daemon RPC documentation).

+
+
+
+

Hierarchy

+
    +
  • MoneroOutputHistogramEntry
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
amount: bigint
+
+ +
numInstances: number
+
+ +
numRecentInstances: number
+
+ +
numUnlockedInstances: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroOutputQuery.html b/docs/typedocs/classes/MoneroOutputQuery.html new file mode 100644 index 000000000..d31071a7e --- /dev/null +++ b/docs/typedocs/classes/MoneroOutputQuery.html @@ -0,0 +1,709 @@ +MoneroOutputQuery | monero-ts
+
+ +
+
+
+
+ +

Class MoneroOutputQuery

+
+

Configuration to query wallet outputs.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
accountIndex: number
+
+ +
amount: bigint
+
+ +
index: number
+
+ +
isFrozen: boolean
+
+ +
isLocked: boolean
+
+ +
isSpent: boolean
+
+ +
keyImage: Partial<MoneroKeyImage>
+
+ +
maxAmount: bigint
+
+ +
minAmount: bigint
+
+ +
ringOutputIndices: number[]
+
+ +
stealthPublicKey: string
+
+ +
subaddressIndex: number
+
+ +
subaddressIndices: number[]
+
+ +
+
+ +
txQuery: Partial<MoneroTxQuery>
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroOutputWallet.html b/docs/typedocs/classes/MoneroOutputWallet.html new file mode 100644 index 000000000..e1dc9e9bf --- /dev/null +++ b/docs/typedocs/classes/MoneroOutputWallet.html @@ -0,0 +1,542 @@ +MoneroOutputWallet | monero-ts
+
+ +
+
+
+
+ +

Class MoneroOutputWallet

+
+

Models a Monero output with wallet extensions.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
accountIndex: number
+
+ +
amount: bigint
+
+ +
index: number
+
+ +
isFrozen: boolean
+
+ +
isLocked: boolean
+
+ +
isSpent: boolean
+
+ +
keyImage: Partial<MoneroKeyImage>
+
+ +
ringOutputIndices: number[]
+
+ +
stealthPublicKey: string
+
+ +
subaddressIndex: number
+
+ +
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Indicates if this output has been deemed 'malicious' and will therefore +not be spent by the wallet.

    +
    +

    Returns boolean

    Boolean is whether or not this output is frozen

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroPeer.html b/docs/typedocs/classes/MoneroPeer.html new file mode 100644 index 000000000..807ffff33 --- /dev/null +++ b/docs/typedocs/classes/MoneroPeer.html @@ -0,0 +1,923 @@ +MoneroPeer | monero-ts
+
+ +
+
+
+
+ +

Class MoneroPeer

+
+

Models a peer to the daemon.

+
+
+
+

Hierarchy

+
    +
  • MoneroPeer
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
address: string
+
+ +
avgDownload: number
+
+ +
avgUpload: number
+
+ +
currentDownload: number
+
+ +
currentUpload: number
+
+ +
height: number
+
+ +
host: string
+
+ +
id: string
+
+ +
isIncoming: boolean
+
+ +
isLocalHost: boolean
+
+ +
isLocalIp: boolean
+
+ +
isOnline: boolean
+
+ +
lastSeenTimestamp: number
+
+ +
liveTime: number
+
+ +
numReceives: number
+
+ +
numSends: number
+
+ +
numSupportFlags: number
+
+ +
port: number
+
+ +
pruningSeed: number
+
+ +
receiveIdleTime: number
+
+ +
rpcCreditsPerHash: bigint
+
+ +
rpcPort: number
+
+ +
sendIdleTime: number
+
+ +
state: string
+
+ +
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Indicates if the peer was online when last checked (aka "white listed" as +opposed to "gray listed").

    +
    +

    Returns boolean

    true if peer was online when last checked, false otherwise

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroPruneResult.html b/docs/typedocs/classes/MoneroPruneResult.html new file mode 100644 index 000000000..3643e3325 --- /dev/null +++ b/docs/typedocs/classes/MoneroPruneResult.html @@ -0,0 +1,182 @@ +MoneroPruneResult | monero-ts
+
+ +
+
+
+
+ +

Class MoneroPruneResult

+
+

Result of pruning the blockchain.

+
+
+
+

Hierarchy

+
    +
  • MoneroPruneResult
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
isPruned: boolean
+
+ +
pruningSeed: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroRpcConnection.html b/docs/typedocs/classes/MoneroRpcConnection.html new file mode 100644 index 000000000..ea07ebef3 --- /dev/null +++ b/docs/typedocs/classes/MoneroRpcConnection.html @@ -0,0 +1,628 @@ +MoneroRpcConnection | monero-ts
+
+ +
+
+
+
+ +

Class MoneroRpcConnection

+
+

Maintains a connection and sends requests to a Monero RPC API.

+
+
+
+

Hierarchy

+
    +
  • MoneroRpcConnection
+
+
+
+ +
+
+

Constructors

+
+ +
    + +
  • +

    Construct a RPC connection.

    + +

    Examples:

    + + +let connection1 = new MoneroRpcConnection("http://localhost:38081", "daemon_user", "daemon_password_123")

    + +

    let connection2 = new MoneroRpcConnection({
    +   uri: http://localhost:38081,
    +   username: "daemon_user",
    +   password: "daemon_password_123",
    +   rejectUnauthorized: false, // accept self-signed certificates e.g. for local development
    +   proxyToWorker: true // proxy request to worker (default false)
    +}); +

    +
    +
    +

    Parameters

    +
      +
    • +
      uriOrConnection: string | Partial<MoneroRpcConnection>
      +

      MoneroRpcConnection or URI of the RPC endpoint

      +
      +
    • +
    • +
      Optional username: string
      +

      username to authenticate with the RPC endpoint (optional)

      +
      +
    • +
    • +
      Optional password: string
      +

      password to authenticate with the RPC endpoint (optional)

      +
      +
    +

    Returns MoneroRpcConnection

    +
+
+

Properties

+
+ +
attributes: any
+
+ +
fakeDisconnected: boolean
+
+ +
isAuthenticated: boolean
+
+ +
isOnline: boolean
+
+ +
password: string
+
+ +
priority: number
+
+ +
proxyToWorker: boolean
+
+ +
rejectUnauthorized: boolean
+
+ +
responseTime: number
+
+ +
uri: string
+
+ +
username: string
+
+

Methods

+
+ +
    + +
  • +

    Check the connection status to update isOnline, isAuthenticated, and response time.

    +
    +
    +

    Parameters

    +
      +
    • +
      timeoutMs: any
      +

      maximum response time before considered offline

      +
      +
    +

    Returns Promise<boolean>

    true if there is a change in status, false otherwise

    + +
+
+ +
+
+ +
    + +
  • +

    Returns {
        password: string;
        priority: number;
        proxyToWorker: boolean;
        rejectUnauthorized: boolean;
        uri: string;
        username: string;
    }

    +
      +
    • +
      password: string
    • +
    • +
      priority: number
    • +
    • +
      proxyToWorker: boolean
    • +
    • +
      rejectUnauthorized: boolean
    • +
    • +
      uri: string
    • +
    • +
      username: string
+
+ +
    + +
  • +

    Indicates if the connection is authenticated according to the last call to checkConnection().

    +

    Note: must call checkConnection() manually unless using MoneroConnectionManager.

    +
    +

    Returns boolean

    true if authenticated or no authentication, false if not authenticated, or undefined if checkConnection() has not been called

    + +
+
+ +
    + +
  • +

    Indicates if the connection is online according to the last call to checkConnection().

    +

    Note: must call checkConnection() manually unless using MoneroConnectionManager.

    +
    +

    Returns boolean

    true or false to indicate if online, or undefined if checkConnection() has not been called

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Indicates if the connection is connected according to the last call to checkConnection().

    +

    Note: must call checkConnection() manually unless using MoneroConnectionManager.

    +
    +

    Returns boolean

    true or false to indicate if connected, or undefined if checkConnection() has not been called

    + +
+
+ +
    + +
  • +

    Send a binary RPC request.

    +
    +
    +

    Parameters

    +
      +
    • +
      path: any
      +

      path of the binary RPC method to invoke

      +
      +
    • +
    • +
      Optional params: any
      +

      request parameters

      +
      +
    • +
    • +
      Optional timeoutInMs: any
      +

      request timeout in milliseconds

      +
      +
    +

    Returns Promise<any>

    the binary response

    + +
+
+ +
    + +
  • +

    Send a JSON RPC request.

    +
    +
    +

    Parameters

    +
      +
    • +
      method: any
      +

      JSON RPC method to invoke

      +
      +
    • +
    • +
      Optional params: any
      +

      request parameters

      +
      +
    • +
    • +
      Optional timeoutInMs: any
      +

      request timeout in milliseconds

      +
      +
    +

    Returns Promise<any>

    is the response map

    + +
+
+ +
    + +
  • +

    Send a RPC request to the given path and with the given paramters.

    +

    E.g. "/get_transactions" with params

    +
    +
    +

    Parameters

    +
      +
    • +
      path: any
      +

      JSON RPC path to invoke

      +
      +
    • +
    • +
      Optional params: any
      +

      request parameters

      +
      +
    • +
    • +
      Optional timeoutInMs: any
      +

      request timeout in milliseconds

      +
      +
    +

    Returns Promise<any>

    is the response map

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroRpcError.html b/docs/typedocs/classes/MoneroRpcError.html new file mode 100644 index 000000000..21b93a50c --- /dev/null +++ b/docs/typedocs/classes/MoneroRpcError.html @@ -0,0 +1,277 @@ +MoneroRpcError | monero-ts
+
+ +
+
+
+
+ +

Class MoneroRpcError

+
+

Error when interacting with Monero RPC.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
    + +
  • +

    Constructs the error.

    +
    +
    +

    Parameters

    +
      +
    • +
      rpcDescription: any
      +

      is a description of the error from rpc

      +
      +
    • +
    • +
      rpcCode: any
      +

      is the error code from rpc

      +
      +
    • +
    • +
      Optional rpcMethod: any
      +

      is the rpc method invoked

      +
      +
    • +
    • +
      Optional rpcParams: any
      +

      are parameters sent with the rpc request

      +
      +
    +

    Returns MoneroRpcError

    +
+
+

Properties

+
+ +
code: number
+
+ +
message: string
+
+ +
name: string
+
+ +
rpcMethod: any
+
+ +
rpcParams: any
+
+ +
stack?: string
+
+ +
prepareStackTrace?: ((err, stackTraces) => any)
+
+

Type declaration

+
+
+ +
stackTraceLimit: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Create .stack property on a target object

    +
    +
    +

    Parameters

    +
      +
    • +
      targetObject: object
    • +
    • +
      Optional constructorOpt: Function
    +

    Returns void

    +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroSubaddress.html b/docs/typedocs/classes/MoneroSubaddress.html new file mode 100644 index 000000000..463b676b5 --- /dev/null +++ b/docs/typedocs/classes/MoneroSubaddress.html @@ -0,0 +1,421 @@ +MoneroSubaddress | monero-ts
+
+ +
+
+
+
+ +

Class MoneroSubaddress

+
+

Monero subaddress model.

+
+
+
+

Hierarchy

+
    +
  • MoneroSubaddress
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
accountIndex: number
+
+ +
address: string
+
+ +
balance: bigint
+
+ +
index: number
+
+ +
isUsed: boolean
+
+ +
label: string
+
+ +
numBlocksToUnlock: number
+
+ +
numUnspentOutputs: number
+
+ +
unlockedBalance: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroSubmitTxResult.html b/docs/typedocs/classes/MoneroSubmitTxResult.html new file mode 100644 index 000000000..57d52516c --- /dev/null +++ b/docs/typedocs/classes/MoneroSubmitTxResult.html @@ -0,0 +1,598 @@ +MoneroSubmitTxResult | monero-ts
+
+ +
+
+
+
+ +

Class MoneroSubmitTxResult

+
+

Models the result from submitting a tx to a daemon.

+
+
+
+

Hierarchy

+
    +
  • MoneroSubmitTxResult
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
credits: bigint
+
+ +
hasInvalidInput: boolean
+
+ +
hasInvalidOutput: boolean
+
+ +
hasTooFewOutputs: boolean
+
+ +
isDoubleSpendSeen: boolean
+
+ +
isFeeTooLow: boolean
+
+ +
isGood: boolean
+
+ +
isMixinTooLow: boolean
+
+ +
isOverspend: boolean
+
+ +
isRelayed: boolean
+
+ +
isTooBig: boolean
+
+ +
isTxExtraTooBig: boolean
+
+ +
reason: string
+
+ +
sanityCheckFailed: boolean
+
+ +
topBlockHash: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroSyncResult.html b/docs/typedocs/classes/MoneroSyncResult.html new file mode 100644 index 000000000..2087c29eb --- /dev/null +++ b/docs/typedocs/classes/MoneroSyncResult.html @@ -0,0 +1,174 @@ +MoneroSyncResult | monero-ts
+
+ +
+
+
+
+ +

Class MoneroSyncResult

+
+

Result from syncing a Monero wallet.

+
+
+
+

Hierarchy

+
    +
  • MoneroSyncResult
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
numBlocksFetched: number
+
+ +
receivedMoney: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroTransfer.html b/docs/typedocs/classes/MoneroTransfer.html new file mode 100644 index 000000000..d360de7c4 --- /dev/null +++ b/docs/typedocs/classes/MoneroTransfer.html @@ -0,0 +1,304 @@ +MoneroTransfer | monero-ts
+
+ +
+
+
+
+ +

Class MoneroTransfer

+
+

Models a base transfer of funds to or from the wallet.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
accountIndex: number
+
+ +
amount: bigint
+
+ +
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Updates this transaction by merging the latest information from the given +transaction.

    +

    Merging can modify or build references to the transfer given so it +should not be re-used or it should be copied before calling this method.

    +
    +
    +

    Parameters

    +
      +
    • +
      transfer: MoneroTransfer
      +

      is the transfer to merge into this one

      +
      +
    +

    Returns MoneroTransfer

    the merged transfer

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroTransferQuery.html b/docs/typedocs/classes/MoneroTransferQuery.html new file mode 100644 index 000000000..affc0d513 --- /dev/null +++ b/docs/typedocs/classes/MoneroTransferQuery.html @@ -0,0 +1,630 @@ +MoneroTransferQuery | monero-ts
+
+ +
+
+
+
+ +

Class MoneroTransferQuery

+
+

Configuration to query wallet transfers.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
accountIndex: number
+
+ +
address: string
+
+ +
addresses: string[]
+
+ +
amount: bigint
+
+ +
destinations: MoneroDestination[]
+
+ +
hasDestinations: boolean
+
+ +
isIncoming: boolean
+
+ +
subaddressIndex: number
+
+ +
subaddressIndices: number[]
+
+ +
+
+ +
txQuery: Partial<MoneroTxQuery>
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroTx.html b/docs/typedocs/classes/MoneroTx.html new file mode 100644 index 000000000..ef01adceb --- /dev/null +++ b/docs/typedocs/classes/MoneroTx.html @@ -0,0 +1,1640 @@ +MoneroTx | monero-ts
+
+ +
+
+
+
+ +

Class MoneroTx

+
+

Represents a transaction on the Monero network.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
+
+ +
extra: Uint8Array
+
+ +
fee: bigint
+
+ +
fullHex: string
+
+ +
hash: string
+
+ +
inTxPool: boolean
+
+ +
inputs: MoneroOutput[]
+
+ +
isConfirmed: boolean
+
+ +
isDoubleSpendSeen: boolean
+
+ +
isFailed: boolean
+
+ +
isKeptByBlock: boolean
+
+ +
isMinerTx: boolean
+
+ +
isRelayed: boolean
+
+ +
key: string
+
+ +
lastFailedHash: string
+
+ +
lastFailedHeight: number
+
+ +
lastRelayedTimestamp: number
+
+ +
maxUsedBlockHash: string
+
+ +
maxUsedBlockHeight: number
+
+ +
metadata: string
+
+ +
numConfirmations: number
+
+ +
outputIndices: number[]
+
+ +
outputs: MoneroOutput[]
+
+ +
paymentId: string
+
+ +
prunableHash: string
+
+ +
prunableHex: string
+
+ +
prunedHex: string
+
+ +
rctSigPrunable: any
+
+ +
rctSignatures: any
+
+ +
receivedTimestamp: number
+
+ +
relay: boolean
+
+ +
ringSize: number
+
+ +
signatures: string[]
+
+ +
size: number
+
+ +
unlockTime: bigint
+
+ +
version: number
+
+ +
weight: number
+
+ +
DEFAULT_PAYMENT_ID: "0000000000000000" = "0000000000000000"
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get prunable transaction hex which is hex that is removed from a pruned +transaction. Full hex = pruned hex + prunable hex.

    +
    +

    Returns string

    prunable tx hex

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the minimum height or timestamp for the transactions to unlock.

    +
    +

    Returns bigint

    the minimum height or timestamp for the transactin to unlock

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +
    +

    Parameters

    +
      +
    • +
      Optional indent: number = 0
      +

      starting indentation

      +
      +
    +

    Returns string

    string representation of this tx

    + +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroTxConfig.html b/docs/typedocs/classes/MoneroTxConfig.html new file mode 100644 index 000000000..4ccffa50a --- /dev/null +++ b/docs/typedocs/classes/MoneroTxConfig.html @@ -0,0 +1,775 @@ +MoneroTxConfig | monero-ts
+
+ +
+
+
+
+ +

Class MoneroTxConfig

+
+

Configures a transaction to send, sweep, or create a payment URI.

+
+
+
+

Hierarchy

+
    +
  • MoneroTxConfig
+
+
+
+ +
+
+

Constructors

+
+ +
    + +
  • +

    Generic request to transfer funds from a wallet.

    + +

    Example:

    + + +let config1 = new MoneroTxConfig({
    +   accountIndex: 0,
    +   address: "59aZULsUF3YN...",
    +   amount: BigInt("500000"),
    +   priority: MoneroTxPriority.NORMAL,
    +   relay: true
    +}); +
    +
    +

    Parameters

    +
      +
    • +
      Optional config: Partial<MoneroTxConfig>
      +

      configures the transaction to create (optional)

      +
      +
    +

    Returns MoneroTxConfig

    +
+
+

Properties

+
+ +
accountIndex: number
+
+ +
address: string
+
+ +
amount: bigint
+
+ +
belowAmount: bigint
+
+ +
canSplit: boolean
+
+ +
destinations: Partial<MoneroDestination>[]
+
+ +
fee: bigint
+
+ +
keyImage: string
+
+ +
note: string
+
+ +
paymentId: string
+
+ +
priority: number
+
+ +
recipientName: string
+
+ +
relay: boolean
+
+ +
subaddressIndex: number
+
+ +
subaddressIndices: number[]
+
+ +
subtractFeeFrom: number[]
+
+ +
sweepEachSubaddress: boolean
+
+ +
unlockTime: bigint
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroTxPoolStats.html b/docs/typedocs/classes/MoneroTxPoolStats.html new file mode 100644 index 000000000..62470399b --- /dev/null +++ b/docs/typedocs/classes/MoneroTxPoolStats.html @@ -0,0 +1,534 @@ +MoneroTxPoolStats | monero-ts
+
+ +
+
+
+
+ +

Class MoneroTxPoolStats

+
+

Models transaction pool statistics.

+
+
+
+

Hierarchy

+
    +
  • MoneroTxPoolStats
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
bytesMax: number
+
+ +
bytesMed: number
+
+ +
bytesMin: number
+
+ +
bytesTotal: number
+
+ +
feeTotal: bigint
+
+ +
histo: Map<number, number>
+
+ +
histo98pc: number
+
+ +
num10m: number
+
+ +
numDoubleSpends: number
+
+ +
numFailing: number
+
+ +
numNotRelayed: number
+
+ +
numTxs: number
+
+ +
oldestTimestamp: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroTxQuery.html b/docs/typedocs/classes/MoneroTxQuery.html new file mode 100644 index 000000000..ebc004606 --- /dev/null +++ b/docs/typedocs/classes/MoneroTxQuery.html @@ -0,0 +1,2847 @@ +MoneroTxQuery | monero-ts
+
+ +
+
+
+
+ +

Class MoneroTxQuery

+
+

Configuration to query transactions.

+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
copy +filterOutputs +filterTransfers +getBlock +getChangeAddress +getChangeAmount +getExtra +getExtraHex +getFee +getFullHex +getHasPaymentId +getHash +getHashes +getHeight +getInTxPool +getIncludeOutputs +getIncomingAmount +getIncomingTransfers +getInputQuery +getInputSum +getInputs +getInputsWallet +getIsConfirmed +getIsDoubleSpendSeen +getIsFailed +getIsIncoming +getIsKeptByBlock +getIsLocked +getIsMinerTx +getIsOutgoing +getIsRelayed +getKey +getLastFailedHash +getLastFailedHeight +getLastRelayedTimestamp +getMaxHeight +getMaxUsedBlockHash +getMaxUsedBlockHeight +getMetadata +getMinHeight +getNote +getNumConfirmations +getNumDummyOutputs +getOutgoingAmount +getOutgoingTransfer +getOutputIndices +getOutputQuery +getOutputSum +getOutputs +getOutputsWallet +getPaymentId +getPaymentIds +getPrunableHash +getPrunableHex +getPrunedHex +getRctSigPrunable +getRctSignatures +getReceivedTimestamp +getRelay +getRingSize +getSignatures +getSize +getTransferQuery +getTransfers +getTxSet +getUnlockTime +getVersion +getWeight +meetsCriteria +merge +setBlock +setChangeAddress +setChangeAmount +setExtra +setExtraHex +setFee +setFullHex +setHasPaymentId +setHash +setHashes +setHeight +setInTxPool +setIncludeOutputs +setIncomingTransfers +setInputQuery +setInputSum +setInputs +setInputsWallet +setIsConfirmed +setIsDoubleSpendSeen +setIsFailed +setIsIncoming +setIsKeptByBlock +setIsLocked +setIsMinerTx +setIsOutgoing +setIsRelayed +setKey +setLastFailedHash +setLastFailedHeight +setLastRelayedTimestamp +setMaxHeight +setMaxUsedBlockHash +setMaxUsedBlockHeight +setMetadata +setMinHeight +setNote +setNumConfirmations +setNumDummyOutputs +setOutgoingTransfer +setOutputIndices +setOutputQuery +setOutputSum +setOutputs +setOutputsWallet +setPaymentId +setPaymentIds +setPrunableHash +setPrunableHex +setPrunedHex +setRctSigPrunable +setRctSignatures +setReceivedTimestamp +setRelay +setRingSize +setSignatures +setSize +setTransferQuery +setTxSet +setUnlockTime +setVersion +setWeight +toJson +toString +mergeIncomingTransfer +
+
+

Constructors

+
+ +
    + +
  • +

    Construct the transaction query.

    + +

    Example:

    + + +// get transactions with unlocked incoming transfers to account 0
    +let txs = await wallet.getTxs({
    +   isLocked: false,
    +   transferQuery: {
    +     isIncoming: true,
    +     accountIndex: 0
    +   }
    +}); +
    + +

    All configuration is optional. All transactions are returned except those that don't meet criteria defined in this query.

    +
    +

    Parameters

    +
      +
    • +
      Optional query: Partial<MoneroTxQuery>
      +

      tx query configuration

      +
      +
    +

    Returns MoneroTxQuery

    +
+
+

Properties

+
+ +
+
+ +
changeAddress: string
+
+ +
changeAmount: bigint
+
+ +
extra: Uint8Array
+
+ +
extraHex: string
+
+ +
fee: bigint
+
+ +
fullHex: string
+
+ +
hasPaymentId: boolean
+
+ +
hash: string
+
+ +
hashes: string[]
+
+ +
height: number
+
+ +
inTxPool: boolean
+
+ +
includeOutputs: boolean
+
+ +
incomingTransfers: MoneroIncomingTransfer[]
+
+ +
inputQuery: Partial<MoneroOutputQuery>
+
+ +
inputSum: bigint
+
+ +
inputs: MoneroOutput[]
+
+ +
isConfirmed: boolean
+
+ +
isDoubleSpendSeen: boolean
+
+ +
isFailed: boolean
+
+ +
isIncoming: boolean
+
+ +
isKeptByBlock: boolean
+
+ +
isLocked: boolean
+
+ +
isMinerTx: boolean
+
+ +
isOutgoing: boolean
+
+ +
isRelayed: boolean
+
+ +
key: string
+
+ +
lastFailedHash: string
+
+ +
lastFailedHeight: number
+
+ +
lastRelayedTimestamp: number
+
+ +
maxHeight: number
+
+ +
maxUsedBlockHash: string
+
+ +
maxUsedBlockHeight: number
+
+ +
metadata: string
+
+ +
minHeight: number
+
+ +
note: string
+
+ +
numConfirmations: number
+
+ +
numDummyOutputs: number
+
+ +
outgoingTransfer: MoneroOutgoingTransfer
+
+ +
outputIndices: number[]
+
+ +
outputQuery: Partial<MoneroOutputQuery>
+
+ +
outputSum: bigint
+
+ +
outputs: MoneroOutput[]
+
+ +
paymentId: string
+
+ +
paymentIds: string[]
+
+ +
prunableHash: string
+
+ +
prunableHex: string
+
+ +
prunedHex: string
+
+ +
rctSigPrunable: any
+
+ +
rctSignatures: any
+
+ +
receivedTimestamp: number
+
+ +
relay: boolean
+
+ +
ringSize: number
+
+ +
signatures: string[]
+
+ +
size: number
+
+ +
transferQuery: Partial<MoneroTransferQuery>
+
+ +
+
+ +
unlockTime: bigint
+
+ +
version: number
+
+ +
weight: number
+
+ +
DEFAULT_PAYMENT_ID: "0000000000000000" = "0000000000000000"
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +
    +

    Parameters

    +
      +
    • +
      Optional indent: number = 0
      +

      starting indentation

      +
      +
    • +
    • +
      Optional oneLine: boolean = false
      +

      string is one line if true, multiple lines if false

      +
      +
    +

    Returns string

    string representation of this tx

    + +
+
+ +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroTxSet.html b/docs/typedocs/classes/MoneroTxSet.html new file mode 100644 index 000000000..5743b9be6 --- /dev/null +++ b/docs/typedocs/classes/MoneroTxSet.html @@ -0,0 +1,280 @@ +MoneroTxSet | monero-ts
+
+ +
+
+
+
+ +

Class MoneroTxSet

+
+

Groups transactions who share common hex data which is needed in order to +sign and submit the transactions.

+

For example, multisig transactions created from createTxs() share a common +hex string which is needed in order to sign and submit the multisig +transactions.

+
+
+
+

Hierarchy

+
    +
  • MoneroTxSet
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
multisigTxHex: string
+
+ +
signedTxHex: string
+
+ +
+
+ +
unsignedTxHex: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroTxWallet.html b/docs/typedocs/classes/MoneroTxWallet.html new file mode 100644 index 000000000..7ef594dff --- /dev/null +++ b/docs/typedocs/classes/MoneroTxWallet.html @@ -0,0 +1,2460 @@ +MoneroTxWallet | monero-ts
+
+ +
+
+
+
+ +

Class MoneroTxWallet

+
+

Models a Monero transaction with wallet extensions.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
copy +filterOutputs +filterTransfers +getBlock +getChangeAddress +getChangeAmount +getExtra +getExtraHex +getFee +getFullHex +getHash +getHeight +getInTxPool +getIncomingAmount +getIncomingTransfers +getInputSum +getInputs +getInputsWallet +getIsConfirmed +getIsDoubleSpendSeen +getIsFailed +getIsIncoming +getIsKeptByBlock +getIsLocked +getIsMinerTx +getIsOutgoing +getIsRelayed +getKey +getLastFailedHash +getLastFailedHeight +getLastRelayedTimestamp +getMaxUsedBlockHash +getMaxUsedBlockHeight +getMetadata +getNote +getNumConfirmations +getNumDummyOutputs +getOutgoingAmount +getOutgoingTransfer +getOutputIndices +getOutputSum +getOutputs +getOutputsWallet +getPaymentId +getPrunableHash +getPrunableHex +getPrunedHex +getRctSigPrunable +getRctSignatures +getReceivedTimestamp +getRelay +getRingSize +getSignatures +getSize +getTransfers +getTxSet +getUnlockTime +getVersion +getWeight +merge +setBlock +setChangeAddress +setChangeAmount +setExtra +setExtraHex +setFee +setFullHex +setHash +setInTxPool +setIncomingTransfers +setInputSum +setInputs +setInputsWallet +setIsConfirmed +setIsDoubleSpendSeen +setIsFailed +setIsIncoming +setIsKeptByBlock +setIsLocked +setIsMinerTx +setIsOutgoing +setIsRelayed +setKey +setLastFailedHash +setLastFailedHeight +setLastRelayedTimestamp +setMaxUsedBlockHash +setMaxUsedBlockHeight +setMetadata +setNote +setNumConfirmations +setNumDummyOutputs +setOutgoingTransfer +setOutputIndices +setOutputSum +setOutputs +setOutputsWallet +setPaymentId +setPrunableHash +setPrunableHex +setPrunedHex +setRctSigPrunable +setRctSignatures +setReceivedTimestamp +setRelay +setRingSize +setSignatures +setSize +setTxSet +setUnlockTime +setVersion +setWeight +toJson +toString +mergeIncomingTransfer +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
+
+ +
changeAddress: string
+
+ +
changeAmount: bigint
+
+ +
extra: Uint8Array
+
+ +
extraHex: string
+
+ +
fee: bigint
+
+ +
fullHex: string
+
+ +
hash: string
+
+ +
inTxPool: boolean
+
+ +
incomingTransfers: MoneroIncomingTransfer[]
+
+ +
inputSum: bigint
+
+ +
inputs: MoneroOutput[]
+
+ +
isConfirmed: boolean
+
+ +
isDoubleSpendSeen: boolean
+
+ +
isFailed: boolean
+
+ +
isIncoming: boolean
+
+ +
isKeptByBlock: boolean
+
+ +
isLocked: boolean
+
+ +
isMinerTx: boolean
+
+ +
isOutgoing: boolean
+
+ +
isRelayed: boolean
+
+ +
key: string
+
+ +
lastFailedHash: string
+
+ +
lastFailedHeight: number
+
+ +
lastRelayedTimestamp: number
+
+ +
maxUsedBlockHash: string
+
+ +
maxUsedBlockHeight: number
+
+ +
metadata: string
+
+ +
note: string
+
+ +
numConfirmations: number
+
+ +
numDummyOutputs: number
+
+ +
outgoingTransfer: MoneroOutgoingTransfer
+
+ +
outputIndices: number[]
+
+ +
outputSum: bigint
+
+ +
outputs: MoneroOutput[]
+
+ +
paymentId: string
+
+ +
prunableHash: string
+
+ +
prunableHex: string
+
+ +
prunedHex: string
+
+ +
rctSigPrunable: any
+
+ +
rctSignatures: any
+
+ +
receivedTimestamp: number
+
+ +
relay: boolean
+
+ +
ringSize: number
+
+ +
signatures: string[]
+
+ +
size: number
+
+ +
+
+ +
unlockTime: bigint
+
+ +
version: number
+
+ +
weight: number
+
+ +
DEFAULT_PAYMENT_ID: "0000000000000000" = "0000000000000000"
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +
    +

    Parameters

    +
      +
    • +
      Optional indent: number = 0
      +

      starting indentation

      +
      +
    • +
    • +
      Optional oneLine: boolean = false
      +

      string is one line if true, multiple lines if false

      +
      +
    +

    Returns string

    string representation of this tx

    + +
+
+ +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroUtils.html b/docs/typedocs/classes/MoneroUtils.html new file mode 100644 index 000000000..c0d168eca --- /dev/null +++ b/docs/typedocs/classes/MoneroUtils.html @@ -0,0 +1,686 @@ +MoneroUtils | monero-ts
+
+ +
+
+
+
+ +

Class MoneroUtils

+
+

Collection of Monero utilities. Runs in a worker thread by default.

+
+
+
+

Hierarchy

+
    +
  • MoneroUtils
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
AU_PER_XMR: bigint = ...
+
+ +
NUM_MNEMONIC_WORDS: number = 25
+
+ +
PROXY_TO_WORKER: boolean = false
+
+ +
RING_SIZE: number = 12
+
+

Methods

+
+ +
    + +
  • +

    Convert atomic units to XMR.

    +
    +
    +

    Parameters

    +
      +
    • +
      amountAtomicUnits: string | bigint
      +

      amount in atomic units to convert to XMR

      +
      +
    +

    Returns number

    amount in XMR

    + +
+
+ +
    + +
  • +

    Convert the binary response from daemon RPC block retrieval to JSON.

    +
    +
    +

    Parameters

    +
      +
    • +
      uint8arr: any
      +

      binary response from daemon RPC when getting blocks

      +
      +
    +

    Returns Promise<any>

    JSON object with the blocks data

    + +
+
+ +
    + +
  • +

    Convert the given portable storage binary to JSON.

    +
    +
    +

    Parameters

    +
      +
    • +
      uint8arr: any
      +

      binary data in Monero's portable storage format

      +
      +
    +

    Returns Promise<any>

    JSON object converted from the binary data

    + +
+
+ +
    + +
  • +

    Get an integrated address.

    +
    +
    +

    Parameters

    +
      +
    • +
      networkType: MoneroNetworkType
      +

      network type of the integrated address

      +
      +
    • +
    • +
      standardAddress: string
      +

      address to derive the integrated address from

      +
      +
    • +
    • +
      Optional paymentId: string
      +

      optionally specifies the integrated address's payment id (defaults to random payment id)

      +
      +
    +

    Returns Promise<any>

    the integrated address

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Determine if the given address is valid.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: any
      +

      address

      +
      +
    • +
    • +
      networkType: any
      +

      network type of the address to validate

      +
      +
    +

    Returns Promise<boolean>

    true if the address is valid, false otherwise

    + +
+
+ +
    + +
  • +

    Determine if the given payment id is valid.

    +
    +
    +

    Parameters

    +
      +
    • +
      paymentId: any
      +

      payment id to determine if valid

      +
      +
    +

    Returns Promise<boolean>

    true if the payment id is valid, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if a private spend key is valid.

    +
    +
    +

    Parameters

    +
      +
    • +
      privateSpendKey: any
      +

      is the private spend key to validate

      +
      +
    +

    Returns Promise<boolean>

    true if the private spend key is valid, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if a private view key is valid.

    +
    +
    +

    Parameters

    +
      +
    • +
      privateViewKey: any
      +

      is the private view key to validate

      +
      +
    +

    Returns Promise<boolean>

    true if the private view key is valid, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if a public spend key is valid.

    +
    +
    +

    Parameters

    +
      +
    • +
      publicSpendKey: any
      +

      is the public spend key to validate

      +
      +
    +

    Returns Promise<boolean>

    true if the public spend key is valid, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if a public view key is valid.

    +
    +
    +

    Parameters

    +
      +
    • +
      publicViewKey: any
      +

      is the public view key to validate

      +
      +
    +

    Returns Promise<boolean>

    true if the public view key is valid, false otherwise

    + +
+
+ +
    + +
  • +

    Convert the given JSON to a binary Uint8Array using Monero's portable storage format.

    +
    +
    +

    Parameters

    +
      +
    • +
      json: any
      +

      json to convert to binary

      +
      +
    +

    Returns Promise<any>

    the json converted to portable storage binary

    + +
+
+ +
    + +
  • +

    Merges a transaction into a list of existing transactions.

    +
    +
    +

    Parameters

    +
      +
    • +
      txs: any
      +

      existing transactions to merge into

      +
      +
    • +
    • +
      tx: any
      +

      transaction to merge into the list

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Determines if two payment ids are functionally equal.

    +

    For example, 03284e41c342f032 and 03284e41c342f032000000000000000000000000000000000000000000000000 are considered equal.

    +
    +
    +

    Parameters

    +
      +
    • +
      paymentId1: any
      +

      is a payment id to compare

      +
      +
    • +
    • +
      paymentId2: any
      +

      is a payment id to compare

      +
      +
    +

    Returns boolean

    true if the payment ids are equal, false otherwise

    + +
+
+ +
    + +
  • +

    Enable or disable proxying these utilities to a worker thread.

    +
    +
    +

    Parameters

    +
      +
    • +
      proxyToWorker: any
      +

      specifies if utilities should be proxied to a worker

      +
      +
    +

    Returns void

    +
+
+ +
    + +
  • +

    Validate the given address, throw an error if invalid.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: any
      +

      address to validate

      +
      +
    • +
    • +
      networkType: any
      +

      network type of the address to validate

      +
      +
    +

    Returns Promise<any>

    +
+
+ +
    + +
  • +

    Validate the given mnemonic, throw an error if invalid.

    +

    TODO: improve validation, use network type

    +
    +
    +

    Parameters

    +
      +
    • +
      mnemonic: any
      +

      mnemonic to validate

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Validate the given payment id, throw an error if invalid.

    +

    TODO: improve validation

    +
    +
    +

    Parameters

    +
      +
    • +
      paymentId: any
      +

      payment id to validate

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Validate the given private spend key, throw an error if invalid.

    +
    +
    +

    Parameters

    +
      +
    • +
      privateSpendKey: any
      +

      private spend key to validate

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Validate the given private view key, throw an error if invalid.

    +
    +
    +

    Parameters

    +
      +
    • +
      privateViewKey: any
      +

      private view key to validate

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Validate the given public spend key, throw an error if invalid.

    +
    +
    +

    Parameters

    +
      +
    • +
      publicSpendKey: any
      +

      public spend key to validate

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Validate the given public view key, throw an error if invalid.

    +
    +
    +

    Parameters

    +
      +
    • +
      publicViewKey: any
      +

      public view key to validate

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Convert XMR to atomic units.

    +
    +
    +

    Parameters

    +
      +
    • +
      amountXmr: string | number
      +

      amount in XMR to convert to atomic units

      +
      +
    +

    Returns bigint

    amount in atomic units

    + +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroVersion.html b/docs/typedocs/classes/MoneroVersion.html new file mode 100644 index 000000000..34058fffe --- /dev/null +++ b/docs/typedocs/classes/MoneroVersion.html @@ -0,0 +1,194 @@ +MoneroVersion | monero-ts
+
+ +
+
+
+
+ +

Class MoneroVersion

+
+

Models a Monero version.

+
+
+
+

Hierarchy

+
    +
  • MoneroVersion
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
isRelease: boolean
+
+ +
number: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroWallet.html b/docs/typedocs/classes/MoneroWallet.html new file mode 100644 index 000000000..47434970e --- /dev/null +++ b/docs/typedocs/classes/MoneroWallet.html @@ -0,0 +1,2673 @@ +MoneroWallet | monero-ts
+
+ +
+
+
+
+ +

Class MoneroWalletInterface

+
+

Monero wallet interface and default implementations.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
addAddressBookEntry +addListener +changePassword +checkReserveProof +checkSpendProof +checkTxKey +checkTxProof +close +createAccount +createSubaddress +createTx +createTxs +decodeIntegratedAddress +deleteAddressBookEntry +describeMultisigTxSet +describeTxSet +describeUnsignedTxSet +editAddressBookEntry +exchangeMultisigKeys +exportKeyImages +exportMultisigHex +exportOutputs +freezeOutput +getAccount +getAccountTags +getAccounts +getAddress +getAddressBookEntries +getAddressIndex +getAttribute +getBalance +getConnectionManager +getDaemonConnection +getDaemonHeight +getHeight +getHeightByDate +getIncomingTransfers +getIntegratedAddress +getListeners +getMultisigInfo +getNewKeyImagesFromLastImport +getNumBlocksToUnlock +getOutgoingTransfers +getOutputs +getPath +getPaymentUri +getPrimaryAddress +getPrivateSpendKey +getPrivateViewKey +getPublicSpendKey +getPublicViewKey +getReserveProofAccount +getReserveProofWallet +getSeed +getSeedLanguage +getSpendProof +getSubaddress +getSubaddresses +getTransfers +getTx +getTxKey +getTxNote +getTxNotes +getTxProof +getTxs +getUnlockedBalance +getVersion +importKeyImages +importMultisigHex +importOutputs +isClosed +isConnectedToDaemon +isMultisig +isMultisigImportNeeded +isOutputFrozen +isViewOnly +makeMultisig +parsePaymentUri +prepareMultisig +relayTx +relayTxs +removeListener +rescanBlockchain +rescanSpent +save +scanTxs +setAccountLabel +setAccountTagLabel +setAttribute +setConnectionManager +setDaemonConnection +setSubaddressLabel +setTxNote +setTxNotes +signMessage +signMultisigTxHex +signTxs +startMining +startSyncing +stopMining +stopSyncing +submitMultisigTxHex +submitTxs +sweepDust +sweepOutput +sweepUnlocked +sync +tagAccounts +thawOutput +untagAccounts +verifyMessage +normalizeCreateTxsConfig +normalizeOutputQuery +normalizeSweepOutputConfig +normalizeSweepUnlockedConfig +normalizeTransferQuery +normalizeTxQuery +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
connectionManager: MoneroConnectionManager
+
+ +
connectionManagerListener: MoneroConnectionManagerListener
+
+ +
DEFAULT_LANGUAGE: "English" = "English"
+
+

Methods

+
+ +
    + +
  • +

    Add an address book entry.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: string
      +

      entry address

      +
      +
    • +
    • +
      Optional description: string
      +

      entry description (optional)

      +
      +
    +

    Returns Promise<number>

    the index of the added entry

    + +
+
+ +
+
+ +
    + +
  • +

    Change the wallet password.

    +
    +
    +

    Parameters

    +
      +
    • +
      oldPassword: string
      +

      the wallet's old password

      +
      +
    • +
    • +
      newPassword: string
      +

      the wallet's new password

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Proves a wallet has a disposable reserve using a signature.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: string
      +

      public wallet address

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    • +
    • +
      signature: string
      +

      reserve proof signature to check

      +
      +
    +

    Returns Promise<MoneroCheckReserve>

    the result of checking the signature proof

    + +
+
+ +
    + +
  • +

    Prove a spend using a signature. Unlike proving a transaction, it does not require the destination public address.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    • +
    • +
      signature: string
      +

      transaction signature to confirm

      +
      +
    +

    Returns Promise<boolean>

    true if the signature is good, false otherwise

    + +
+
+ +
    + +
  • +

    Check a transaction in the blockchain with its secret key.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to check

      +
      +
    • +
    • +
      txKey: string
      +

      transaction's secret key

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    +

    Returns Promise<MoneroCheckTx>

    the result of the check

    + +
+
+ +
    + +
  • +

    Prove a transaction by checking its signature.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof

      +
      +
    • +
    • +
      signature: string
      +

      transaction signature to confirm

      +
      +
    +

    Returns Promise<MoneroCheckTx>

    the result of the check

    + +
+
+ +
    + +
  • +

    Optionally save then close the wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional save: boolean = false
      +

      specifies if the wallet should be saved before being closed (default false)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
    + +
  • +

    Create a subaddress within an account.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the account to create the subaddress within

      +
      +
    • +
    • +
      Optional label: string
      +

      the label for the subaddress (optional)

      +
      +
    +

    Returns Promise<MoneroSubaddress>

    the created subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Delete an address book entry.

    +
    +
    +

    Parameters

    +
      +
    • +
      entryIdx: number
      +

      index of the entry to delete

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
    + +
  • +

    Describe a tx set containing unsigned or multisig tx hex to a new tx set containing structured transactions.

    +
    +
    +

    Parameters

    +
      +
    • +
      txSet: MoneroTxSet
      +

      a tx set containing unsigned or multisig tx hex

      +
      +
    +

    Returns Promise<MoneroTxSet>

    txSet - the tx set containing structured transactions

    + +
+
+ +
+
+ +
    + +
  • +

    Edit an address book entry.

    +
    +
    +

    Parameters

    +
      +
    • +
      index: number
      +

      index of the address book entry to edit

      +
      +
    • +
    • +
      setAddress: boolean
      +

      specifies if the address should be updated

      +
      +
    • +
    • +
      address: string
      +

      updated address

      +
      +
    • +
    • +
      setDescription: boolean
      +

      specifies if the description should be updated

      +
      +
    • +
    • +
      description: string
      +

      updated description

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Exchange multisig hex with participants in a M/N multisig wallet.

    +

    This process must be repeated with participants exactly N-M times.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      are multisig hex from each participant

      +
      +
    • +
    • +
      password: string
      +

      wallet's password // TODO monero-project: redundant? wallet is created with password

      +
      +
    +

    Returns Promise<MoneroMultisigInitResult>

    the result which has the multisig's address xor this wallet's multisig hex to share with participants iff not done

    + +
+
+ +
    + +
  • +

    Export signed key images.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional all: boolean = false
      +

      export all key images if true, else export the key images since the last export (default false)

      +
      +
    +

    Returns Promise<MoneroKeyImage[]>

    the wallet's signed key images

    + +
+
+ +
    + +
  • +

    Export this wallet's multisig info as hex for other participants.

    +
    +

    Returns Promise<string>

    this wallet's multisig info as hex for other participants

    + +
+
+ +
    + +
  • +

    Export outputs in hex format.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional all: boolean = false
      +

      export all outputs if true, else export the outputs since the last export (default false)

      +
      +
    +

    Returns Promise<string>

    outputs in hex format

    + +
+
+ +
    + +
  • +

    Freeze an output.

    +
    +
    +

    Parameters

    +
      +
    • +
      keyImage: string
      +

      key image of the output to freeze

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Get an account.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the account to get

      +
      +
    • +
    • +
      Optional includeSubaddresses: boolean
      +

      include subaddresses if true

      +
      +
    +

    Returns Promise<MoneroAccount>

    the retrieved account

    + +
+
+ +
+
+ +
    + +
  • +

    Get accounts with a given tag.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional includeSubaddresses: boolean
      +

      include subaddresses if true

      +
      +
    • +
    • +
      Optional tag: string
      +

      tag for filtering accounts, all accounts if undefined

      +
      +
    +

    Returns Promise<MoneroAccount[]>

    all accounts with the given tag

    + +
+
+ +
    + +
  • +

    Get the address of a specific subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      the account index of the address's subaddress

      +
      +
    • +
    • +
      subaddressIdx: number
      +

      the subaddress index within the account

      +
      +
    +

    Returns Promise<string>

    the receive address of the specified subaddress

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get an attribute.

    +
    +
    +

    Parameters

    +
      +
    • +
      key: string
      +

      attribute to get the value of

      +
      +
    +

    Returns Promise<string>

    the attribute's value

    + +
+
+ +
    + +
  • +

    Get the balance of the wallet, account, or subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional accountIdx: number
      +

      index of the account to get the balance of (default all accounts)

      +
      +
    • +
    • +
      Optional subaddressIdx: number
      +

      index of the subaddress to get the balance of (default all subaddresses)

      +
      +
    +

    Returns Promise<bigint>

    the balance of the wallet, account, or subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the block height that the wallet is synced to.

    +
    +

    Returns Promise<number>

    the block height that the wallet is synced to

    + +
+
+ +
    + +
  • +

    Get the blockchain's height by date as a conservative estimate for scanning.

    +
    +
    +

    Parameters

    +
      +
    • +
      year: number
      +

      year of the height to get

      +
      +
    • +
    • +
      month: number
      +

      month of the height to get as a number between 1 and 12

      +
      +
    • +
    • +
      day: number
      +

      day of the height to get as a number between 1 and 31

      +
      +
    +

    Returns Promise<number>

    the blockchain's approximate height at the given date

    + +
+
+ +
+
+ +
    + +
  • +

    Get an integrated address based on the given standard address and payment +ID. Uses the wallet's primary address if an address is not given. +Generates a random payment ID if a payment ID is not given.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional standardAddress: string
      +

      is the standard address to generate the integrated address from (wallet's primary address if undefined)

      +
      +
    • +
    • +
      Optional paymentId: string
      +

      is the payment ID to generate an integrated address from (randomly generated if undefined)

      +
      +
    +

    Returns Promise<MoneroIntegratedAddress>

    the integrated address

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the number of blocks until the next and last funds unlock.

    +
    +

    Returns Promise<number[]>

    the number of blocks until the next and last funds unlock in elements 0 and 1, respectively, or undefined if no balance

    + +
+
+ +
+
+ +
    + +
  • +

    Get outputs created from previous transactions that belong to the wallet +(i.e. that the wallet can spend one time). Outputs are part of +transactions which are stored in blocks on the blockchain.

    + +

    Results can be filtered by passing a query object. Outputs must +meet every criteria defined in the query in order to be returned. All +filtering is optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroOutputWallet[]>

    the queried outputs

    + +
+
+ +
+
+ +
    + +
  • +

    Creates a payment URI from a send configuration.

    +
    +
    +

    Parameters

    +
      +
    • +
      config: MoneroTxConfig
      +

      specifies configuration for a potential tx

      +
      +
    +

    Returns Promise<string>

    the payment uri

    + +
+
+ +
+
+ +
    + +
  • +

    Get the wallet's private spend key.

    +
    +

    Returns Promise<string>

    the wallet's private spend key

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Generate a signature to prove an available amount in an account.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      account to prove ownership of the amount

      +
      +
    • +
    • +
      amount: bigint
      +

      minimum amount to prove as available in the account

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the reserve proof signature

    + +
+
+ +
    + +
  • +

    Generate a signature to prove the entire balance of the wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the reserve proof signature

    + +
+
+ +
    + +
  • +

    Get the wallet's mnemonic phrase or seed.

    +
    +

    Returns Promise<string>

    the wallet's mnemonic phrase or seed.

    + +
+
+ +
    + +
  • +

    Get the language of the wallet's mnemonic phrase or seed.

    +
    +

    Returns Promise<string>

    the language of the wallet's mnemonic phrase or seed.

    + +
+
+ +
    + +
  • +

    Generate a signature to prove a spend. Unlike proving a transaction, it does not require the destination public address.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the transaction signature

    + +
+
+ +
    + +
  • +

    Get a subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the subaddress's account

      +
      +
    • +
    • +
      subaddressIdx: number
      +

      index of the subaddress within the account

      +
      +
    +

    Returns Promise<MoneroSubaddress>

    the retrieved subaddress

    + +
+
+ +
    + +
  • +

    Get subaddresses in an account.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      account to get subaddresses within

      +
      +
    • +
    • +
      Optional subaddressIndices: number[]
      +

      indices of subaddresses to get (optional)

      +
      +
    +

    Returns Promise<MoneroSubaddress[]>

    the retrieved subaddresses

    + +
+
+ +
    + +
  • +

    Get incoming and outgoing transfers to and from this wallet. An outgoing +transfer represents a total amount sent from one or more subaddresses +within an account to individual destination addresses, each with their +own amount. An incoming transfer represents a total amount received into +a subaddress within an account. Transfers belong to transactions which +are stored on the blockchain.

    + +

    Results can be filtered by passing a query object. Transfers must +meet every criteria defined in the query in order to be returned. All +criteria are optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroTransfer[]>

    wallet transfers that meet the query

    + +
+
+ +
+
+ +
    + +
  • +

    Get a transaction's secret key from its hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction's hash

      +
      +
    +

    Returns Promise<string>

      +
    • transaction's secret key
    • +
    + +
+
+ +
    + +
  • +

    Get a transaction note.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to get the note of

      +
      +
    +

    Returns Promise<string>

    the tx note

    + +
+
+ +
    + +
  • +

    Get notes for multiple transactions.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      hashes of the transactions to get notes for

      +
      +
    +

    Returns Promise<string[]>

    notes for the transactions

    + +
+
+ +
    + +
  • +

    Get a transaction signature to prove it.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the transaction signature

    + +
+
+ +
    + +
  • +

    Get wallet transactions. Wallet transactions contain one or more +transfers that are either incoming or outgoing to the wallet.

    + +

    Results can be filtered by passing a query object. Transactions must +meet every criteria defined in the query in order to be returned. All +criteria are optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
      +
    • +
      Optional query: string[] | Partial<MoneroTxQuery>
      +

      configures the query (optional)

      +
      +
    +

    Returns Promise<MoneroTxWallet[]>

    wallet transactions per the configuration

    + +
+
+ +
    + +
  • +

    Get the unlocked balance of the wallet, account, or subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional accountIdx: number
      +

      index of the account to get the unlocked balance of (optional)

      +
      +
    • +
    • +
      Optional subaddressIdx: number
      +

      index of the subaddress to get the unlocked balance of (optional)

      +
      +
    +

    Returns Promise<bigint>

    the unlocked balance of the wallet, account, or subaddress

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Import multisig info as hex from other participants.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      multisig hex from each participant

      +
      +
    +

    Returns Promise<number>

    the number of outputs signed with the given multisig hex

    + +
+
+ +
    + +
  • +

    Import outputs in hex format.

    +
    +
    +

    Parameters

    +
      +
    • +
      outputsHex: string
      +

      outputs in hex format

      +
      +
    +

    Returns Promise<number>

    the number of outputs imported

    + +
+
+ +
    + +
  • +

    Indicates if this wallet is closed or not.

    +
    +

    Returns Promise<boolean>

    true if the wallet is closed, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the wallet is connected to daemon.

    +
    +

    Returns Promise<boolean>

    true if the wallet is connected to a daemon, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if this wallet is a multisig wallet.

    +
    +

    Returns Promise<boolean>

    true if this is a multisig wallet, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if importing multisig data is needed for returning a correct balance.

    +
    +

    Returns Promise<boolean>

    true if importing multisig data is needed for returning a correct balance, false otherwise

    + +
+
+ +
    + +
  • +

    Check if an output is frozen.

    +
    +
    +

    Parameters

    +
      +
    • +
      keyImage: string
      +

      key image of the output to check if frozen

      +
      +
    +

    Returns Promise<boolean>

    true if the output is frozen, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the wallet is view-only, meaning it does not have the private +spend key and can therefore only observe incoming outputs.

    +
    +

    Returns Promise<boolean>

    true if the wallet is view-only, false otherwise

    + +
+
+ +
    + +
  • +

    Make this wallet multisig by importing multisig hex from participants.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      multisig hex from each participant

      +
      +
    • +
    • +
      threshold: number
      +

      number of signatures needed to sign transfers

      +
      +
    • +
    • +
      password: string
      +

      wallet password

      +
      +
    +

    Returns Promise<string>

    this wallet's multisig hex to share with participants

    + +
+
+ +
+
+ +
    + +
  • +

    Get multisig info as hex to share with participants to begin creating a +multisig wallet.

    +
    +

    Returns Promise<string>

    this wallet's multisig hex to share with participants

    + +
+
+ +
    + +
  • +

    Relay a previously created transaction.

    +
    +
    +

    Parameters

    +
      +
    • +
      txOrMetadata: string | MoneroTxWallet
      +

      transaction or its metadata to relay

      +
      +
    +

    Returns Promise<string>

    the hash of the relayed tx

    + +
+
+ +
    + +
  • +

    Relay previously created transactions.

    +
    +
    +

    Parameters

    +
      +
    • +
      txsOrMetadatas: (string | MoneroTxWallet)[]
      +

      transactions or their metadata to relay

      +
      +
    +

    Returns Promise<string[]>

    the hashes of the relayed txs

    + +
+
+ +
    + +
  • +

    Unregister a listener to receive wallet notifications.

    +
    +
    +

    Parameters

    +
      +
    • +
      listener: any
      +

      listener to unregister

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Rescan the blockchain from scratch, losing any information which cannot be recovered from +the blockchain itself.

    + +

    WARNING: This method discards local wallet data like destination addresses, tx secret keys, +tx notes, etc.

    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Rescan the blockchain for spent outputs.

    + +

    Note: this can only be called with a trusted daemon.

    + +

    Example use case: peer multisig hex is import when connected to an untrusted daemon, +so the wallet will not rescan spent outputs. Then the wallet connects to a trusted +daemon. This method should be manually invoked to rescan outputs.

    +

    Returns Promise<void>

    +
+
+ +
+
+ +
    + +
  • +

    Scan transactions by their hash/id.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      tx hashes to scan

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set an account label.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the account to set the label for

      +
      +
    • +
    • +
      label: string
      +

      the label to set

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Sets a human-readable description for a tag.

    +
    +
    +

    Parameters

    +
      +
    • +
      tag: string
      +

      tag to set a description for

      +
      +
    • +
    • +
      label: string
      +

      label to set for the tag

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set an arbitrary attribute.

    +
    +
    +

    Parameters

    +
      +
    • +
      key: string
      +

      attribute key

      +
      +
    • +
    • +
      val: string
      +

      attribute value

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
    + +
  • +

    Set the wallet's daemon connection.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional uriOrConnection: string | MoneroRpcConnection
      +

      daemon's URI or connection (defaults to offline)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set a subaddress label.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the account to set the label for

      +
      +
    • +
    • +
      subaddressIdx: number
      +

      index of the subaddress to set the label for

      +
      +
    • +
    • +
      label: string
      +

      the label to set

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set a note for a specific transaction.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      hash of the transaction to set a note for

      +
      +
    • +
    • +
      note: string
      +

      the transaction note

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set notes for multiple transactions.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      transactions to set notes for

      +
      +
    • +
    • +
      notes: string[]
      +

      notes to set for the transactions

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Sign a message.

    +
    +
    +

    Parameters

    +
      +
    • +
      message: string
      +

      the message to sign

      +
      +
    • +
    • +
      Optional signatureType: MoneroMessageSignatureType = MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY
      +

      sign with spend key or view key (default spend key)

      +
      +
    • +
    • +
      Optional accountIdx: number = 0
      +

      the account index of the message signature (default 0)

      +
      +
    • +
    • +
      Optional subaddressIdx: number = 0
      +

      the subaddress index of the message signature (default 0)

      +
      +
    +

    Returns Promise<string>

    the signature

    + +
+
+ +
+
+ +
    + +
  • +

    Sign unsigned transactions from a view-only wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      unsignedTxHex: string
      +

      unsigned transaction hex from when the transactions were created

      +
      +
    +

    Returns Promise<string>

    the signed transaction hex

    + +
+
+ +
    + +
  • +

    Start mining.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional numThreads: number
      +

      number of threads created for mining (optional)

      +
      +
    • +
    • +
      Optional backgroundMining: boolean
      +

      specifies if mining should occur in the background (optional)

      +
      +
    • +
    • +
      Optional ignoreBattery: boolean
      +

      specifies if the battery should be ignored for mining (optional)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Start background synchronizing with a maximum period between syncs.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional syncPeriodInMs: number
      +

      maximum period between syncs in milliseconds (default is wallet-specific)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Submit signed multisig transactions from a multisig wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      signedMultisigTxHex: string
      +

      signed multisig hex returned from signMultisigTxHex()

      +
      +
    +

    Returns Promise<string[]>

    the resulting transaction hashes

    + +
+
+ +
    + +
  • +

    Submit signed transactions from a view-only wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      signedTxHex: string
      +

      signed transaction hex from signTxs()

      +
      +
    +

    Returns Promise<string[]>

    the resulting transaction hashes

    + +
+
+ +
    + +
  • +

    Sweep all unmixable dust outputs back to the wallet to make them easier to spend and mix.

    + +

    NOTE: Dust only exists pre RCT, so this method will throw "no dust to sweep" on new wallets.

    +
    +

    Parameters

    +
      +
    • +
      Optional relay: boolean
      +

      specifies if the resulting transaction should be relayed (default false)

      +
      +
    +

    Returns Promise<MoneroTxWallet[]>

    the created transactions

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Synchronize the wallet with the daemon as a one-time synchronous process.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional listenerOrStartHeight: number | MoneroWalletListener
      +

      listener xor start height (defaults to no sync listener, the last synced block)

      +
      +
    • +
    • +
      Optional startHeight: number
      +

      startHeight if not given in first arg (defaults to last synced block)

      +
      +
    +

    Returns Promise<MoneroSyncResult>

    +
+
+ +
    + +
  • +

    Tag accounts.

    +
    +
    +

    Parameters

    +
      +
    • +
      tag: string
      +

      tag to apply to the specified accounts

      +
      +
    • +
    • +
      accountIndices: number[]
      +

      indices of the accounts to tag

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Thaw a frozen output.

    +
    +
    +

    Parameters

    +
      +
    • +
      keyImage: string
      +

      key image of the output to thaw

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Untag accounts.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIndices: number[]
      +

      indices of the accounts to untag

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroWalletConfig.html b/docs/typedocs/classes/MoneroWalletConfig.html new file mode 100644 index 000000000..97a08d13a --- /dev/null +++ b/docs/typedocs/classes/MoneroWalletConfig.html @@ -0,0 +1,781 @@ +MoneroWalletConfig | monero-ts
+
+ +
+
+
+
+ +

Class MoneroWalletConfig

+
+

Configuration to create a Monero wallet.

+
+
+
+

Hierarchy

+
    +
  • MoneroWalletConfig
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
accountLookahead: number
+
+ +
cacheData: Uint8Array
+
+ +
cmd: string[]
+
+ +
connectionManager: MoneroConnectionManager
+
+ +
fs: any
+
+ +
isMultisig: boolean
+
+ +
keysData: Uint8Array
+
+ +
language: string
+
+ +
networkType: MoneroNetworkType
+
+ +
password: string
+
+ +
path: string
+
+ +
primaryAddress: string
+
+ +
privateSpendKey: string
+
+ +
privateViewKey: string
+
+ +
proxyToWorker: boolean
+
+ +
restoreHeight: number
+
+ +
saveCurrent: boolean
+
+ +
seed: string
+
+ +
seedOffset: string
+
+ +
server: string | Partial<MoneroRpcConnection>
+
+ +
subaddressLookahead: number
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroWalletFull.html b/docs/typedocs/classes/MoneroWalletFull.html new file mode 100644 index 000000000..a591b7f7c --- /dev/null +++ b/docs/typedocs/classes/MoneroWalletFull.html @@ -0,0 +1,3406 @@ +MoneroWalletFull | monero-ts
+
+ +
+
+
+
+ +

Class MoneroWalletFull

+
+

Implements a Monero wallet using client-side WebAssembly bindings to monero-project's wallet2 in C++.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Methods

+
addAddressBookEntry +addListener +assertNotClosed +backgroundSync +changePassword +checkReserveProof +checkSpendProof +checkTxKey +checkTxProof +close +createAccount +createSubaddress +createTx +createTxs +decodeIntegratedAddress +deleteAddressBookEntry +describeMultisigTxSet +describeTxSet +describeUnsignedTxSet +editAddressBookEntry +exchangeMultisigKeys +exportKeyImages +exportMultisigHex +exportOutputs +freezeOutput +getAccount +getAccountTags +getAccounts +getAddress +getAddressBookEntries +getAddressIndex +getAttribute +getBalance +getConnectionManager +getDaemonConnection +getDaemonHeight +getDaemonMaxPeerHeight +getData +getHeight +getHeightByDate +getIncomingTransfers +getIntegratedAddress +getListeners +getMultisigInfo +getNetworkType +getNewKeyImagesFromLastImport +getNumBlocksToUnlock +getOutgoingTransfers +getOutputs +getPath +getPaymentUri +getPrimaryAddress +getPrivateSpendKey +getPrivateViewKey +getPublicSpendKey +getPublicViewKey +getReserveProofAccount +getReserveProofWallet +getRestoreHeight +getSeed +getSeedLanguage +getSpendProof +getSubaddress +getSubaddresses +getTransfers +getTx +getTxKey +getTxNote +getTxNotes +getTxProof +getTxs +getUnlockedBalance +getVersion +getWalletProxy +importKeyImages +importMultisigHex +importOutputs +isClosed +isConnectedToDaemon +isDaemonSynced +isMultisig +isMultisigImportNeeded +isOutputFrozen +isSynced +isViewOnly +makeMultisig +moveTo +parsePaymentUri +prepareMultisig +refreshListening +relayTx +relayTxs +removeListener +rescanBlockchain +rescanSpent +save +scanTxs +setAccountLabel +setAccountTagLabel +setAttribute +setBrowserMainPath +setConnectionManager +setDaemonConnection +setRestoreHeight +setSubaddressLabel +setTxNote +setTxNotes +signMessage +signMultisigTxHex +signTxs +startMining +startSyncing +stopMining +stopSyncing +submitMultisigTxHex +submitTxs +sweepDust +sweepOutput +sweepUnlocked +sync +tagAccounts +thawOutput +untagAccounts +verifyMessage +createWallet +createWalletFromKeys +createWalletFromSeed +createWalletRandom +deserializeBlocks +deserializeOutputs +deserializeTransfers +deserializeTxs +getFs +getSeedLanguages +moveTo +normalizeCreateTxsConfig +normalizeOutputQuery +normalizeSweepOutputConfig +normalizeSweepUnlockedConfig +normalizeTransferQuery +normalizeTxQuery +openWallet +openWalletData +sanitizeAccount +sanitizeBlock +sanitizeSubaddress +sanitizeTxWallet +save +walletExists +
+
+

Properties

+
+ +
_isClosed: boolean
+
+ +
browserMainPath: string
+
+ +
connectionManager: MoneroConnectionManager
+
+ +
connectionManagerListener: MoneroConnectionManagerListener
+
+ +
cppAddress: string
+
+ +
fs: any
+
+ +
fullListener: WalletFullListener
+
+ +
fullListenerHandle: number
+
+ +
+
+ +
module: any
+
+ +
password: string
+
+ +
path: string
+
+ +
rejectUnauthorized: boolean
+
+ +
rejectUnauthorizedConfigId: string
+
+ +
syncLooper: TaskLooper
+
+ +
syncPeriodInMs: number
+
+ +
walletProxy: MoneroWalletKeysProxy
+
+ +
DEFAULT_LANGUAGE: "English" = "English"
+
+ +
DEFAULT_SYNC_PERIOD_IN_MS: 20000 = 20000
+
+ +
FS: any
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Prove a spend using a signature. Unlike proving a transaction, it does not require the destination public address.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    • +
    • +
      signature: string
      +

      transaction signature to confirm

      +
      +
    +

    Returns Promise<boolean>

    true if the signature is good, false otherwise

    + +
+
+ +
+
+ +
    + +
  • +

    Prove a transaction by checking its signature.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof

      +
      +
    • +
    • +
      signature: string
      +

      transaction signature to confirm

      +
      +
    +

    Returns Promise<MoneroCheckTx>

    the result of the check

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Edit an address book entry.

    +
    +
    +

    Parameters

    +
      +
    • +
      index: number
      +

      index of the address book entry to edit

      +
      +
    • +
    • +
      setAddress: boolean
      +

      specifies if the address should be updated

      +
      +
    • +
    • +
      address: string
      +

      updated address

      +
      +
    • +
    • +
      setDescription: boolean
      +

      specifies if the description should be updated

      +
      +
    • +
    • +
      description: string
      +

      updated description

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Exchange multisig hex with participants in a M/N multisig wallet.

    +

    This process must be repeated with participants exactly N-M times.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      are multisig hex from each participant

      +
      +
    • +
    • +
      password: string
      +

      wallet's password // TODO monero-project: redundant? wallet is created with password

      +
      +
    +

    Returns Promise<MoneroMultisigInitResult>

    the result which has the multisig's address xor this wallet's multisig hex to share with participants iff not done

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Export outputs in hex format.

    +
    +
    +

    Parameters

    +
      +
    • +
      all: boolean = false
      +

      export all outputs if true, else export the outputs since the last export (default false)

      +
      +
    +

    Returns Promise<string>

    outputs in hex format

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the address of a specific subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      the account index of the address's subaddress

      +
      +
    • +
    • +
      subaddressIdx: number
      +

      the subaddress index within the account

      +
      +
    +

    Returns Promise<string>

    the receive address of the specified subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the balance of the wallet, account, or subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional accountIdx: number
      +

      index of the account to get the balance of (default all accounts)

      +
      +
    • +
    • +
      Optional subaddressIdx: number
      +

      index of the subaddress to get the balance of (default all subaddresses)

      +
      +
    +

    Returns Promise<bigint>

    the balance of the wallet, account, or subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the maximum height of the peers the wallet's daemon is connected to.

    +
    +

    Returns Promise<number>

    the maximum height of the peers the wallet's daemon is connected to

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the blockchain's height by date as a conservative estimate for scanning.

    +
    +
    +

    Parameters

    +
      +
    • +
      year: number
      +

      year of the height to get

      +
      +
    • +
    • +
      month: number
      +

      month of the height to get as a number between 1 and 12

      +
      +
    • +
    • +
      day: number
      +

      day of the height to get as a number between 1 and 31

      +
      +
    +

    Returns Promise<number>

    the blockchain's approximate height at the given date

    + +
+
+ +
+
+ +
    + +
  • +

    Get an integrated address based on the given standard address and payment +ID. Uses the wallet's primary address if an address is not given. +Generates a random payment ID if a payment ID is not given.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional standardAddress: string
      +

      is the standard address to generate the integrated address from (wallet's primary address if undefined)

      +
      +
    • +
    • +
      Optional paymentId: string
      +

      is the payment ID to generate an integrated address from (randomly generated if undefined)

      +
      +
    +

    Returns Promise<MoneroIntegratedAddress>

    the integrated address

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get outputs created from previous transactions that belong to the wallet +(i.e. that the wallet can spend one time). Outputs are part of +transactions which are stored in blocks on the blockchain.

    + +

    Results can be filtered by passing a query object. Outputs must +meet every criteria defined in the query in order to be returned. All +filtering is optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroOutputWallet[]>

    the queried outputs

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Generate a signature to prove an available amount in an account.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      account to prove ownership of the amount

      +
      +
    • +
    • +
      amount: bigint
      +

      minimum amount to prove as available in the account

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the reserve proof signature

    + +
+
+ +
    + +
  • +

    Generate a signature to prove the entire balance of the wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the reserve proof signature

    + +
+
+ +
    + +
  • +

    Get the height of the first block that the wallet scans.

    +
    +

    Returns Promise<number>

    the height of the first block that the wallet scans

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Generate a signature to prove a spend. Unlike proving a transaction, it does not require the destination public address.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the transaction signature

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get incoming and outgoing transfers to and from this wallet. An outgoing +transfer represents a total amount sent from one or more subaddresses +within an account to individual destination addresses, each with their +own amount. An incoming transfer represents a total amount received into +a subaddress within an account. Transfers belong to transactions which +are stored on the blockchain.

    + +

    Results can be filtered by passing a query object. Transfers must +meet every criteria defined in the query in order to be returned. All +criteria are optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroTransfer[]>

    wallet transfers that meet the query

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get a transaction signature to prove it.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the transaction signature

    + +
+
+ +
    + +
  • +

    Get wallet transactions. Wallet transactions contain one or more +transfers that are either incoming or outgoing to the wallet.

    + +

    Results can be filtered by passing a query object. Transactions must +meet every criteria defined in the query in order to be returned. All +criteria are optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
      +
    • +
      Optional query: string[] | Partial<MoneroTxQuery>
      +

      configures the query (optional)

      +
      +
    +

    Returns Promise<MoneroTxWallet[]>

    wallet transactions per the configuration

    + +
+
+ +
    + +
  • +

    Get the unlocked balance of the wallet, account, or subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional accountIdx: number
      +

      index of the account to get the unlocked balance of (optional)

      +
      +
    • +
    • +
      Optional subaddressIdx: number
      +

      index of the subaddress to get the unlocked balance of (optional)

      +
      +
    +

    Returns Promise<bigint>

    the unlocked balance of the wallet, account, or subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Import multisig info as hex from other participants.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      multisig hex from each participant

      +
      +
    +

    Returns Promise<number>

    the number of outputs signed with the given multisig hex

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Indicates if the wallet's daemon is synced with the network.

    +
    +

    Returns Promise<boolean>

    true if the daemon is synced with the network, false otherwise

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Indicates if the wallet is synced with the daemon.

    +
    +

    Returns Promise<boolean>

    true if the wallet is synced with the daemon, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the wallet is view-only, meaning it does not have the private +spend key and can therefore only observe incoming outputs.

    +
    +

    Returns Promise<boolean>

    true if the wallet is view-only, false otherwise

    + +
+
+ +
    + +
  • +

    Make this wallet multisig by importing multisig hex from participants.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      multisig hex from each participant

      +
      +
    • +
    • +
      threshold: number
      +

      number of signatures needed to sign transfers

      +
      +
    • +
    • +
      password: string
      +

      wallet password

      +
      +
    +

    Returns Promise<string>

    this wallet's multisig hex to share with participants

    + +
+
+ +
    + +
  • +

    Move the wallet from its current path to the given path.

    +
    +
    +

    Parameters

    +
      +
    • +
      path: string
      +

      the wallet's destination path

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Rescan the blockchain from scratch, losing any information which cannot be recovered from +the blockchain itself.

    + +

    WARNING: This method discards local wallet data like destination addresses, tx secret keys, +tx notes, etc.

    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Rescan the blockchain for spent outputs.

    + +

    Note: this can only be called with a trusted daemon.

    + +

    Example use case: peer multisig hex is import when connected to an untrusted daemon, +so the wallet will not rescan spent outputs. Then the wallet connects to a trusted +daemon. This method should be manually invoked to rescan outputs.

    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set the path of the wallet on the browser main thread if run as a worker.

    +
    +
    +

    Parameters

    +
      +
    • +
      browserMainPath: any
      +

      path of the wallet on the browser main thread

      +
      +
    +

    Returns void

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set the height of the first block that the wallet scans.

    +
    +
    +

    Parameters

    +
      +
    • +
      restoreHeight: number
      +

      height of the first block that the wallet scans

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set a subaddress label.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the account to set the label for

      +
      +
    • +
    • +
      subaddressIdx: number
      +

      index of the subaddress to set the label for

      +
      +
    • +
    • +
      label: string
      +

      the label to set

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Sign a message.

    +
    +
    +

    Parameters

    +
      +
    • +
      message: string
      +

      the message to sign

      +
      +
    • +
    • +
      signatureType: MoneroMessageSignatureType = MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY
      +

      sign with spend key or view key (default spend key)

      +
      +
    • +
    • +
      accountIdx: number = 0
      +

      the account index of the message signature (default 0)

      +
      +
    • +
    • +
      subaddressIdx: number = 0
      +

      the subaddress index of the message signature (default 0)

      +
      +
    +

    Returns Promise<string>

    the signature

    + +
+
+ +
+
+ +
    + +
  • +

    Sign unsigned transactions from a view-only wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      unsignedTxHex: string
      +

      unsigned transaction hex from when the transactions were created

      +
      +
    +

    Returns Promise<string>

    the signed transaction hex

    + +
+
+ +
    + +
  • +

    Start mining.

    +
    +
    +

    Parameters

    +
      +
    • +
      numThreads: number
      +

      number of threads created for mining (optional)

      +
      +
    • +
    • +
      Optional backgroundMining: boolean
      +

      specifies if mining should occur in the background (optional)

      +
      +
    • +
    • +
      Optional ignoreBattery: boolean
      +

      specifies if the battery should be ignored for mining (optional)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Start background synchronizing with a maximum period between syncs.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional syncPeriodInMs: number
      +

      maximum period between syncs in milliseconds (default is wallet-specific)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Submit signed multisig transactions from a multisig wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      signedMultisigTxHex: string
      +

      signed multisig hex returned from signMultisigTxHex()

      +
      +
    +

    Returns Promise<string[]>

    the resulting transaction hashes

    + +
+
+ +
    + +
  • +

    Submit signed transactions from a view-only wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      signedTxHex: string
      +

      signed transaction hex from signTxs()

      +
      +
    +

    Returns Promise<string[]>

    the resulting transaction hashes

    + +
+
+ +
    + +
  • +

    Sweep all unmixable dust outputs back to the wallet to make them easier to spend and mix.

    + +

    NOTE: Dust only exists pre RCT, so this method will throw "no dust to sweep" on new wallets.

    +
    +

    Parameters

    +
      +
    • +
      Optional relay: boolean
      +

      specifies if the resulting transaction should be relayed (default false)

      +
      +
    +

    Returns Promise<MoneroTxWallet[]>

    the created transactions

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Synchronize the wallet with the daemon as a one-time synchronous process.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional listenerOrStartHeight: number | MoneroWalletListener
      +

      listener xor start height (defaults to no sync listener, the last synced block)

      +
      +
    • +
    • +
      Optional startHeight: number
      +

      startHeight if not given in first arg (defaults to last synced block)

      +
      +
    • +
    • +
      Optional allowConcurrentCalls: boolean = false
      +

      allow other wallet methods to be processed simultaneously during sync (default false)

      WARNING: enabling this option will crash wallet execution if another call makes a simultaneous network request. TODO: possible to sync wasm network requests in http_client_wasm.cpp?

      +
      +
    +

    Returns Promise<MoneroSyncResult>

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Check if a wallet exists at a given path.

    +
    +
    +

    Parameters

    +
      +
    • +
      path: any
      +

      path of the wallet on the file system

      +
      +
    • +
    • +
      fs: any
    +

    Returns any

    true if a wallet exists at the given path, false otherwise

    + +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroWalletKeys.html b/docs/typedocs/classes/MoneroWalletKeys.html new file mode 100644 index 000000000..9d2adb8e3 --- /dev/null +++ b/docs/typedocs/classes/MoneroWalletKeys.html @@ -0,0 +1,2915 @@ +MoneroWalletKeys | monero-ts
+
+ +
+
+
+
+ +

Class MoneroWalletKeys

+
+

Implements a MoneroWallet which only manages keys using WebAssembly.

+
+
+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Methods

+
addAddressBookEntry +addListener +assertNotClosed +changePassword +checkReserveProof +checkSpendProof +checkTxKey +checkTxProof +close +createAccount +createSubaddress +createTx +createTxs +decodeIntegratedAddress +deleteAddressBookEntry +describeMultisigTxSet +describeTxSet +describeUnsignedTxSet +editAddressBookEntry +exchangeMultisigKeys +exportKeyImages +exportMultisigHex +exportOutputs +freezeOutput +getAccount +getAccountTags +getAccounts +getAddress +getAddressBookEntries +getAddressIndex +getAttribute +getBalance +getConnectionManager +getDaemonConnection +getDaemonHeight +getHeight +getHeightByDate +getIncomingTransfers +getIntegratedAddress +getListeners +getMultisigInfo +getNewKeyImagesFromLastImport +getNumBlocksToUnlock +getOutgoingTransfers +getOutputs +getPaymentUri +getPrimaryAddress +getPrivateSpendKey +getPrivateViewKey +getPublicSpendKey +getPublicViewKey +getReserveProofAccount +getReserveProofWallet +getSeed +getSeedLanguage +getSpendProof +getSubaddress +getSubaddresses +getTransfers +getTx +getTxKey +getTxNote +getTxNotes +getTxProof +getTxs +getUnlockedBalance +getVersion +getWalletProxy +importKeyImages +importMultisigHex +importOutputs +isClosed +isConnectedToDaemon +isMultisig +isMultisigImportNeeded +isOutputFrozen +isViewOnly +makeMultisig +parsePaymentUri +prepareMultisig +relayTx +relayTxs +removeListener +rescanBlockchain +rescanSpent +save +scanTxs +setAccountLabel +setAccountTagLabel +setAttribute +setConnectionManager +setDaemonConnection +setSubaddressLabel +setTxNote +setTxNotes +signMessage +signMultisigTxHex +signTxs +startMining +startSyncing +stopMining +stopSyncing +submitMultisigTxHex +submitTxs +sweepDust +sweepOutput +sweepUnlocked +sync +tagAccounts +thawOutput +untagAccounts +verifyMessage +createWallet +createWalletFromKeys +createWalletFromSeed +createWalletRandom +getSeedLanguages +normalizeCreateTxsConfig +normalizeOutputQuery +normalizeSweepOutputConfig +normalizeSweepUnlockedConfig +normalizeTransferQuery +normalizeTxQuery +sanitizeSubaddress +
+
+

Properties

+
+ +
_isClosed: boolean
+
+ +
connectionManager: MoneroConnectionManager
+
+ +
connectionManagerListener: MoneroConnectionManagerListener
+
+ +
cppAddress: string
+
+ +
module: any
+
+ +
walletProxy: MoneroWalletKeysProxy
+
+ +
DEFAULT_LANGUAGE: "English" = "English"
+
+

Methods

+
+ +
    + +
  • +

    Add an address book entry.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: string
      +

      entry address

      +
      +
    • +
    • +
      Optional description: string
      +

      entry description (optional)

      +
      +
    +

    Returns Promise<number>

    the index of the added entry

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Change the wallet password.

    +
    +
    +

    Parameters

    +
      +
    • +
      oldPassword: string
      +

      the wallet's old password

      +
      +
    • +
    • +
      newPassword: string
      +

      the wallet's new password

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Proves a wallet has a disposable reserve using a signature.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: string
      +

      public wallet address

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    • +
    • +
      signature: string
      +

      reserve proof signature to check

      +
      +
    +

    Returns Promise<MoneroCheckReserve>

    the result of checking the signature proof

    + +
+
+ +
    + +
  • +

    Prove a spend using a signature. Unlike proving a transaction, it does not require the destination public address.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    • +
    • +
      signature: string
      +

      transaction signature to confirm

      +
      +
    +

    Returns Promise<boolean>

    true if the signature is good, false otherwise

    + +
+
+ +
    + +
  • +

    Check a transaction in the blockchain with its secret key.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to check

      +
      +
    • +
    • +
      txKey: string
      +

      transaction's secret key

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    +

    Returns Promise<MoneroCheckTx>

    the result of the check

    + +
+
+ +
    + +
  • +

    Prove a transaction by checking its signature.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof

      +
      +
    • +
    • +
      signature: string
      +

      transaction signature to confirm

      +
      +
    +

    Returns Promise<MoneroCheckTx>

    the result of the check

    + +
+
+ +
    + +
  • +

    Optionally save then close the wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      save: boolean = false
      +

      specifies if the wallet should be saved before being closed (default false)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Edit an address book entry.

    +
    +
    +

    Parameters

    +
      +
    • +
      index: number
      +

      index of the address book entry to edit

      +
      +
    • +
    • +
      setAddress: boolean
      +

      specifies if the address should be updated

      +
      +
    • +
    • +
      address: string
      +

      updated address

      +
      +
    • +
    • +
      setDescription: boolean
      +

      specifies if the description should be updated

      +
      +
    • +
    • +
      description: string
      +

      updated description

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Exchange multisig hex with participants in a M/N multisig wallet.

    +

    This process must be repeated with participants exactly N-M times.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      are multisig hex from each participant

      +
      +
    • +
    • +
      password: string
      +

      wallet's password // TODO monero-project: redundant? wallet is created with password

      +
      +
    +

    Returns Promise<MoneroMultisigInitResult>

    the result which has the multisig's address xor this wallet's multisig hex to share with participants iff not done

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Export outputs in hex format.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional all: boolean = false
      +

      export all outputs if true, else export the outputs since the last export (default false)

      +
      +
    +

    Returns Promise<string>

    outputs in hex format

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the address of a specific subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      the account index of the address's subaddress

      +
      +
    • +
    • +
      subaddressIdx: number
      +

      the subaddress index within the account

      +
      +
    +

    Returns Promise<string>

    the receive address of the specified subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the balance of the wallet, account, or subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional accountIdx: number
      +

      index of the account to get the balance of (default all accounts)

      +
      +
    • +
    • +
      Optional subaddressIdx: number
      +

      index of the subaddress to get the balance of (default all subaddresses)

      +
      +
    +

    Returns Promise<bigint>

    the balance of the wallet, account, or subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the blockchain's height by date as a conservative estimate for scanning.

    +
    +
    +

    Parameters

    +
      +
    • +
      year: number
      +

      year of the height to get

      +
      +
    • +
    • +
      month: number
      +

      month of the height to get as a number between 1 and 12

      +
      +
    • +
    • +
      day: number
      +

      day of the height to get as a number between 1 and 31

      +
      +
    +

    Returns Promise<number>

    the blockchain's approximate height at the given date

    + +
+
+ +
+
+ +
    + +
  • +

    Get an integrated address based on the given standard address and payment +ID. Uses the wallet's primary address if an address is not given. +Generates a random payment ID if a payment ID is not given.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional standardAddress: string
      +

      is the standard address to generate the integrated address from (wallet's primary address if undefined)

      +
      +
    • +
    • +
      Optional paymentId: string
      +

      is the payment ID to generate an integrated address from (randomly generated if undefined)

      +
      +
    +

    Returns Promise<MoneroIntegratedAddress>

    the integrated address

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the number of blocks until the next and last funds unlock.

    +
    +

    Returns Promise<number[]>

    the number of blocks until the next and last funds unlock in elements 0 and 1, respectively, or undefined if no balance

    + +
+
+ +
+
+ +
    + +
  • +

    Get outputs created from previous transactions that belong to the wallet +(i.e. that the wallet can spend one time). Outputs are part of +transactions which are stored in blocks on the blockchain.

    + +

    Results can be filtered by passing a query object. Outputs must +meet every criteria defined in the query in order to be returned. All +filtering is optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroOutputWallet[]>

    the queried outputs

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Generate a signature to prove an available amount in an account.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      account to prove ownership of the amount

      +
      +
    • +
    • +
      amount: bigint
      +

      minimum amount to prove as available in the account

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the reserve proof signature

    + +
+
+ +
    + +
  • +

    Generate a signature to prove the entire balance of the wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the reserve proof signature

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Generate a signature to prove a spend. Unlike proving a transaction, it does not require the destination public address.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the transaction signature

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get incoming and outgoing transfers to and from this wallet. An outgoing +transfer represents a total amount sent from one or more subaddresses +within an account to individual destination addresses, each with their +own amount. An incoming transfer represents a total amount received into +a subaddress within an account. Transfers belong to transactions which +are stored on the blockchain.

    + +

    Results can be filtered by passing a query object. Transfers must +meet every criteria defined in the query in order to be returned. All +criteria are optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroTransfer[]>

    wallet transfers that meet the query

    + +
+
+ +
+
+ +
    + +
  • +

    Get a transaction's secret key from its hash.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction's hash

      +
      +
    +

    Returns Promise<string>

      +
    • transaction's secret key
    • +
    + +
+
+ +
+
+ +
    + +
  • +

    Get notes for multiple transactions.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      hashes of the transactions to get notes for

      +
      +
    +

    Returns Promise<string[]>

    notes for the transactions

    + +
+
+ +
    + +
  • +

    Get a transaction signature to prove it.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the transaction signature

    + +
+
+ +
    + +
  • +

    Get wallet transactions. Wallet transactions contain one or more +transfers that are either incoming or outgoing to the wallet.

    + +

    Results can be filtered by passing a query object. Transactions must +meet every criteria defined in the query in order to be returned. All +criteria are optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
      +
    • +
      Optional query: string[] | Partial<MoneroTxQuery>
      +

      configures the query (optional)

      +
      +
    +

    Returns Promise<MoneroTxWallet[]>

    wallet transactions per the configuration

    + +
+
+ +
    + +
  • +

    Get the unlocked balance of the wallet, account, or subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional accountIdx: number
      +

      index of the account to get the unlocked balance of (optional)

      +
      +
    • +
    • +
      Optional subaddressIdx: number
      +

      index of the subaddress to get the unlocked balance of (optional)

      +
      +
    +

    Returns Promise<bigint>

    the unlocked balance of the wallet, account, or subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Import multisig info as hex from other participants.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      multisig hex from each participant

      +
      +
    +

    Returns Promise<number>

    the number of outputs signed with the given multisig hex

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Check if an output is frozen.

    +
    +
    +

    Parameters

    +
      +
    • +
      keyImage: string
      +

      key image of the output to check if frozen

      +
      +
    +

    Returns Promise<boolean>

    true if the output is frozen, false otherwise

    + +
+
+ +
    + +
  • +

    Indicates if the wallet is view-only, meaning it does not have the private +spend key and can therefore only observe incoming outputs.

    +
    +

    Returns Promise<boolean>

    true if the wallet is view-only, false otherwise

    + +
+
+ +
    + +
  • +

    Make this wallet multisig by importing multisig hex from participants.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      multisig hex from each participant

      +
      +
    • +
    • +
      threshold: number
      +

      number of signatures needed to sign transfers

      +
      +
    • +
    • +
      password: string
      +

      wallet password

      +
      +
    +

    Returns Promise<string>

    this wallet's multisig hex to share with participants

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Rescan the blockchain from scratch, losing any information which cannot be recovered from +the blockchain itself.

    + +

    WARNING: This method discards local wallet data like destination addresses, tx secret keys, +tx notes, etc.

    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Rescan the blockchain for spent outputs.

    + +

    Note: this can only be called with a trusted daemon.

    + +

    Example use case: peer multisig hex is import when connected to an untrusted daemon, +so the wallet will not rescan spent outputs. Then the wallet connects to a trusted +daemon. This method should be manually invoked to rescan outputs.

    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set an account label.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the account to set the label for

      +
      +
    • +
    • +
      label: string
      +

      the label to set

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set a subaddress label.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the account to set the label for

      +
      +
    • +
    • +
      subaddressIdx: number
      +

      index of the subaddress to set the label for

      +
      +
    • +
    • +
      label: string
      +

      the label to set

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set a note for a specific transaction.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      hash of the transaction to set a note for

      +
      +
    • +
    • +
      note: string
      +

      the transaction note

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set notes for multiple transactions.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      transactions to set notes for

      +
      +
    • +
    • +
      notes: string[]
      +

      notes to set for the transactions

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Sign a message.

    +
    +
    +

    Parameters

    +
      +
    • +
      message: string
      +

      the message to sign

      +
      +
    • +
    • +
      Optional signatureType: MoneroMessageSignatureType = MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY
      +

      sign with spend key or view key (default spend key)

      +
      +
    • +
    • +
      Optional accountIdx: number = 0
      +

      the account index of the message signature (default 0)

      +
      +
    • +
    • +
      Optional subaddressIdx: number = 0
      +

      the subaddress index of the message signature (default 0)

      +
      +
    +

    Returns Promise<string>

    the signature

    + +
+
+ +
+
+ +
    + +
  • +

    Sign unsigned transactions from a view-only wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      unsignedTxHex: string
      +

      unsigned transaction hex from when the transactions were created

      +
      +
    +

    Returns Promise<string>

    the signed transaction hex

    + +
+
+ +
    + +
  • +

    Start mining.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional numThreads: number
      +

      number of threads created for mining (optional)

      +
      +
    • +
    • +
      Optional backgroundMining: boolean
      +

      specifies if mining should occur in the background (optional)

      +
      +
    • +
    • +
      Optional ignoreBattery: boolean
      +

      specifies if the battery should be ignored for mining (optional)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Start background synchronizing with a maximum period between syncs.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional syncPeriodInMs: number
      +

      maximum period between syncs in milliseconds (default is wallet-specific)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Submit signed multisig transactions from a multisig wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      signedMultisigTxHex: string
      +

      signed multisig hex returned from signMultisigTxHex()

      +
      +
    +

    Returns Promise<string[]>

    the resulting transaction hashes

    + +
+
+ +
    + +
  • +

    Submit signed transactions from a view-only wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      signedTxHex: string
      +

      signed transaction hex from signTxs()

      +
      +
    +

    Returns Promise<string[]>

    the resulting transaction hashes

    + +
+
+ +
    + +
  • +

    Sweep all unmixable dust outputs back to the wallet to make them easier to spend and mix.

    + +

    NOTE: Dust only exists pre RCT, so this method will throw "no dust to sweep" on new wallets.

    +
    +

    Parameters

    +
      +
    • +
      Optional relay: boolean
      +

      specifies if the resulting transaction should be relayed (default false)

      +
      +
    +

    Returns Promise<MoneroTxWallet[]>

    the created transactions

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Synchronize the wallet with the daemon as a one-time synchronous process.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional listenerOrStartHeight: number | MoneroWalletListener
      +

      listener xor start height (defaults to no sync listener, the last synced block)

      +
      +
    • +
    • +
      Optional startHeight: number
      +

      startHeight if not given in first arg (defaults to last synced block)

      +
      +
    +

    Returns Promise<MoneroSyncResult>

    +
+
+ +
    + +
  • +

    Tag accounts.

    +
    +
    +

    Parameters

    +
      +
    • +
      tag: string
      +

      tag to apply to the specified accounts

      +
      +
    • +
    • +
      accountIndices: number[]
      +

      indices of the accounts to tag

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Create a wallet using WebAssembly bindings to monero-project.

    + +

    Example:

    + + +let wallet = await MoneroWalletKeys.createWallet({
    +   password: "abc123",
    +   networkType: MoneroNetworkType.STAGENET,
    +   seed: "coexist igloo pamphlet lagoon..."
    +}); +
    +
    +

    Parameters

    +
      +
    • +
      config: Partial<MoneroWalletConfig>
      +

      MoneroWalletConfig or equivalent config object

      +
      +
    +

    Returns Promise<any>

    the created wallet

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroWalletListener.html b/docs/typedocs/classes/MoneroWalletListener.html new file mode 100644 index 000000000..6168ea67d --- /dev/null +++ b/docs/typedocs/classes/MoneroWalletListener.html @@ -0,0 +1,229 @@ +MoneroWalletListener | monero-ts
+
+ +
+
+
+
+ +

Class MoneroWalletListener

+
+

Default wallet listener which takes no action on notifications.

+
+
+
+

Hierarchy

+
    +
  • MoneroWalletListener
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Methods

+
+ +
    + +
  • +

    Invoked when the wallet's balances change.

    +
    +
    +

    Parameters

    +
      +
    • +
      newBalance: bigint
      +

      new wallet balance

      +
      +
    • +
    • +
      newUnlockedBalance: bigint
      +

      new unlocked wallet balance

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Invoked when a new block is added to the chain.

    +
    +
    +

    Parameters

    +
      +
    • +
      height: number
      +

      the height of the new block (i.e. the number of blocks before it).

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Invoked 3 times per received output: once when unconfirmed, once when confirmed, and +once when unlocked.

    +

    The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields.

    +
    +
    +

    Parameters

    +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Invoked twice per spent output: once when confirmed and once when unlocked.

    +

    The notified output includes basic fields only, so the output or its transaction should be fetched to get all available fields.

    +
    +
    +

    Parameters

    +
      +
    • +
      output: any
      +

      the spent output

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Invoked as the wallet is synchronized.

    +
    +
    +

    Parameters

    +
      +
    • +
      height: number
      +

      height of the synced block

      +
      +
    • +
    • +
      startHeight: number
      +

      starting height of the sync request

      +
      +
    • +
    • +
      endHeight: number
      +

      ending height of the sync request

      +
      +
    • +
    • +
      percentDone: number
      +

      sync progress as a percentage

      +
      +
    • +
    • +
      message: string
      +

      human-readable description of the current progress

      +
      +
    +

    Returns Promise<void>

    +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/MoneroWalletRpc.html b/docs/typedocs/classes/MoneroWalletRpc.html new file mode 100644 index 000000000..6a53cb786 --- /dev/null +++ b/docs/typedocs/classes/MoneroWalletRpc.html @@ -0,0 +1,3676 @@ +MoneroWalletRpc | monero-ts
+
+ +
+
+
+
+ +

Class MoneroWalletRpc

+
+

Implements a MoneroWallet as a client of monero-wallet-rpc.

+
+
+

Implements

+
+

Hierarchy

+
+
+
+
+ +
+
+

Properties

+
+
+

Methods

+
addAddressBookEntry +addListener +changePassword +checkReserveProof +checkSpendProof +checkTxKey +checkTxProof +clear +close +createAccount +createSubaddress +createTx +createTxs +createWallet +createWalletFromKeys +createWalletFromSeed +createWalletRandom +decodeIntegratedAddress +deleteAddressBookEntry +describeMultisigTxSet +describeTxSet +describeUnsignedTxSet +editAddressBookEntry +exchangeMultisigKeys +exportKeyImages +exportMultisigHex +exportOutputs +freezeOutput +getAccount +getAccountIndices +getAccountTags +getAccounts +getAddress +getAddressBookEntries +getAddressIndex +getAttribute +getBalance +getBalances +getConnectionManager +getDaemonConnection +getDaemonHeight +getHeight +getHeightByDate +getIncomingTransfers +getIntegratedAddress +getListeners +getMultisigInfo +getNewKeyImagesFromLastImport +getNumBlocksToUnlock +getOutgoingTransfers +getOutputs +getOutputsAux +getPath +getPaymentUri +getPrimaryAddress +getPrivateSpendKey +getPrivateViewKey +getProcess +getPublicSpendKey +getPublicViewKey +getReserveProofAccount +getReserveProofWallet +getRpcConnection +getSeed +getSeedLanguage +getSeedLanguages +getSpendProof +getSubaddress +getSubaddressIndices +getSubaddresses +getSyncPeriodInMs +getTransfers +getTransfersAux +getTx +getTxKey +getTxNote +getTxNotes +getTxProof +getTxs +getUnlockedBalance +getVersion +handleCreateWalletError +importKeyImages +importMultisigHex +importOutputs +isClosed +isConnectedToDaemon +isMultisig +isMultisigImportNeeded +isOutputFrozen +isViewOnly +makeMultisig +openWallet +parsePaymentUri +poll +prepareMultisig +refreshListening +relayTx +relayTxs +removeListener +rescanBlockchain +rescanSpent +rpcExportKeyImages +rpcSweepAccount +save +scanTxs +setAccountLabel +setAccountTagLabel +setAttribute +setConnectionManager +setDaemonConnection +setSubaddressLabel +setTxNote +setTxNotes +signMessage +signMultisigTxHex +signTxs +startMining +startSyncing +stop +stopMining +stopProcess +stopSyncing +submitMultisigTxHex +submitTxs +sweepDust +sweepOutput +sweepUnlocked +sync +tagAccounts +thawOutput +untagAccounts +verifyMessage +compareIncomingTransfers +compareOutputs +compareTxsByHeight +connectToWalletRpc +convertRpcAccount +convertRpcDescribeTransfer +convertRpcSentTxsToTxSet +convertRpcSubaddress +convertRpcTxSet +convertRpcTxToTxSet +convertRpcTxWalletWithOutput +convertRpcTxWithTransfer +decodeRpcType +decontextualize +initSentTxWallet +isContextual +mergeTx +normalizeConfig +normalizeCreateTxsConfig +normalizeOutputQuery +normalizeSweepOutputConfig +normalizeSweepUnlockedConfig +normalizeTransferQuery +normalizeTxQuery +startWalletRpcProcess +
+
+

Properties

+
+ +
addressCache: any
+
+ +
config: Partial<MoneroWalletConfig>
+
+ +
connectionManager: MoneroConnectionManager
+
+ +
connectionManagerListener: MoneroConnectionManagerListener
+
+ +
daemonConnection: MoneroRpcConnection
+
+ +
+
+ +
path: string
+
+ +
process: any
+
+ +
syncPeriodInMs: number
+
+ +
walletPoller: WalletPoller
+
+ +
DEFAULT_LANGUAGE: "English" = "English"
+
+ +
DEFAULT_SYNC_PERIOD_IN_MS: 20000 = 20000
+
+

Methods

+
+ +
    + +
  • +

    Add an address book entry.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: string
      +

      entry address

      +
      +
    • +
    • +
      Optional description: string
      +

      entry description (optional)

      +
      +
    +

    Returns Promise<number>

    the index of the added entry

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Proves a wallet has a disposable reserve using a signature.

    +
    +
    +

    Parameters

    +
      +
    • +
      address: string
      +

      public wallet address

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    • +
    • +
      signature: string
      +

      reserve proof signature to check

      +
      +
    +

    Returns Promise<MoneroCheckReserve>

    the result of checking the signature proof

    + +
+
+ +
    + +
  • +

    Prove a spend using a signature. Unlike proving a transaction, it does not require the destination public address.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    • +
    • +
      signature: string
      +

      transaction signature to confirm

      +
      +
    +

    Returns Promise<boolean>

    true if the signature is good, false otherwise

    + +
+
+ +
    + +
  • +

    Check a transaction in the blockchain with its secret key.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to check

      +
      +
    • +
    • +
      txKey: string
      +

      transaction's secret key

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    +

    Returns Promise<MoneroCheckTx>

    the result of the check

    + +
+
+ +
    + +
  • +

    Prove a transaction by checking its signature.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    • +
    • +
      message: string
      +

      message included with the signature to further authenticate the proof

      +
      +
    • +
    • +
      signature: string
      +

      transaction signature to confirm

      +
      +
    +

    Returns Promise<MoneroCheckTx>

    the result of the check

    + +
+
+ +
+
+ +
    + +
  • +

    Optionally save then close the wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      save: boolean = false
      +

      specifies if the wallet should be saved before being closed (default false)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Create and open a wallet on the monero-wallet-rpc server.

    + +

    Example:

    + + +// construct client to monero-wallet-rpc
    +let walletRpc = new MoneroWalletRpc("http://localhost:38084", "rpc_user", "abc123");

    + +

    // create and open wallet on monero-wallet-rpc
    +await walletRpc.createWallet({
    +   path: "mywallet",
    +   password: "abc123",
    +   seed: "coexist igloo pamphlet lagoon...",
    +   restoreHeight: 1543218l
    +}); +

    +
    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroWalletRpc>

    this wallet client

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Edit an address book entry.

    +
    +
    +

    Parameters

    +
      +
    • +
      index: number
      +

      index of the address book entry to edit

      +
      +
    • +
    • +
      setAddress: boolean
      +

      specifies if the address should be updated

      +
      +
    • +
    • +
      address: string
      +

      updated address

      +
      +
    • +
    • +
      setDescription: boolean
      +

      specifies if the description should be updated

      +
      +
    • +
    • +
      description: string
      +

      updated description

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Exchange multisig hex with participants in a M/N multisig wallet.

    +

    This process must be repeated with participants exactly N-M times.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      are multisig hex from each participant

      +
      +
    • +
    • +
      password: string
      +

      wallet's password // TODO monero-project: redundant? wallet is created with password

      +
      +
    +

    Returns Promise<MoneroMultisigInitResult>

    the result which has the multisig's address xor this wallet's multisig hex to share with participants iff not done

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Export outputs in hex format.

    +
    +
    +

    Parameters

    +
      +
    • +
      all: boolean = false
      +

      export all outputs if true, else export the outputs since the last export (default false)

      +
      +
    +

    Returns Promise<string>

    outputs in hex format

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +
    +

    Parameters

    +
      +
    • +
      Optional getSubaddressIndices: any
    +

    Returns Promise<Map<any, any>>

+
+ +
+
+ +
    + +
  • +

    Get accounts with a given tag.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional includeSubaddresses: boolean
      +

      include subaddresses if true

      +
      +
    • +
    • +
      Optional tag: string
      +

      tag for filtering accounts, all accounts if undefined

      +
      +
    • +
    • +
      Optional skipBalances: boolean
    +

    Returns Promise<MoneroAccount[]>

    all accounts with the given tag

    + +
+
+ +
    + +
  • +

    Get the address of a specific subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      the account index of the address's subaddress

      +
      +
    • +
    • +
      subaddressIdx: number
      +

      the subaddress index within the account

      +
      +
    +

    Returns Promise<string>

    the receive address of the specified subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the balance of the wallet, account, or subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional accountIdx: number
      +

      index of the account to get the balance of (default all accounts)

      +
      +
    • +
    • +
      Optional subaddressIdx: number
      +

      index of the subaddress to get the balance of (default all subaddresses)

      +
      +
    +

    Returns Promise<bigint>

    the balance of the wallet, account, or subaddress

    + +
+
+ +
    + +
  • +

    Get the locked and unlocked balances in a single request.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional accountIdx: number
      +

      account index

      +
      +
    • +
    • +
      Optional subaddressIdx: number
      +

      subaddress index

      +
      +
    +

    Returns Promise<bigint[]>

    is the locked and unlocked balances in an array, respectively

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the blockchain's height by date as a conservative estimate for scanning.

    +
    +
    +

    Parameters

    +
      +
    • +
      year: number
      +

      year of the height to get

      +
      +
    • +
    • +
      month: number
      +

      month of the height to get as a number between 1 and 12

      +
      +
    • +
    • +
      day: number
      +

      day of the height to get as a number between 1 and 31

      +
      +
    +

    Returns Promise<number>

    the blockchain's approximate height at the given date

    + +
+
+ +
+
+ +
    + +
  • +

    Get an integrated address based on the given standard address and payment +ID. Uses the wallet's primary address if an address is not given. +Generates a random payment ID if a payment ID is not given.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional standardAddress: string
      +

      is the standard address to generate the integrated address from (wallet's primary address if undefined)

      +
      +
    • +
    • +
      Optional paymentId: string
      +

      is the payment ID to generate an integrated address from (randomly generated if undefined)

      +
      +
    +

    Returns Promise<MoneroIntegratedAddress>

    the integrated address

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get outputs created from previous transactions that belong to the wallet +(i.e. that the wallet can spend one time). Outputs are part of +transactions which are stored in blocks on the blockchain.

    + +

    Results can be filtered by passing a query object. Outputs must +meet every criteria defined in the query in order to be returned. All +filtering is optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroOutputWallet[]>

    the queried outputs

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get the internal process running monero-wallet-rpc.

    +
    +

    Returns ChildProcess

    the process running monero-wallet-rpc, undefined if not created from new process

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Generate a signature to prove an available amount in an account.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      account to prove ownership of the amount

      +
      +
    • +
    • +
      amount: bigint
      +

      minimum amount to prove as available in the account

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the reserve proof signature

    + +
+
+ +
    + +
  • +

    Generate a signature to prove the entire balance of the wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional message: string
      +

      message included with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the reserve proof signature

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get a list of available languages for the wallet's seed.

    +
    +

    Returns Promise<any>

    the available languages for the wallet's seed.

    + +
+
+ +
    + +
  • +

    Generate a signature to prove a spend. Unlike proving a transaction, it does not require the destination public address.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the transaction signature

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get incoming and outgoing transfers to and from this wallet. An outgoing +transfer represents a total amount sent from one or more subaddresses +within an account to individual destination addresses, each with their +own amount. An incoming transfer represents a total amount received into +a subaddress within an account. Transfers belong to transactions which +are stored on the blockchain.

    + +

    Results can be filtered by passing a query object. Transfers must +meet every criteria defined in the query in order to be returned. All +criteria are optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroTransfer[]>

    wallet transfers that meet the query

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Get a transaction signature to prove it.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      transaction to prove

      +
      +
    • +
    • +
      address: string
      +

      destination public address of the transaction

      +
      +
    • +
    • +
      Optional message: string
      +

      message to include with the signature to further authenticate the proof (optional)

      +
      +
    +

    Returns Promise<string>

    the transaction signature

    + +
+
+ +
    + +
  • +

    Get wallet transactions. Wallet transactions contain one or more +transfers that are either incoming or outgoing to the wallet.

    + +

    Results can be filtered by passing a query object. Transactions must +meet every criteria defined in the query in order to be returned. All +criteria are optional and no filtering is applied when not defined.

    +
    +

    Parameters

    +
      +
    • +
      Optional query: string[] | Partial<MoneroTxQuery>
      +

      configures the query (optional)

      +
      +
    +

    Returns Promise<MoneroTxWallet[]>

    wallet transactions per the configuration

    + +
+
+ +
    + +
  • +

    Get the unlocked balance of the wallet, account, or subaddress.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional accountIdx: number
      +

      index of the account to get the unlocked balance of (optional)

      +
      +
    • +
    • +
      Optional subaddressIdx: number
      +

      index of the subaddress to get the unlocked balance of (optional)

      +
      +
    +

    Returns Promise<bigint>

    the unlocked balance of the wallet, account, or subaddress

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Import multisig info as hex from other participants.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      multisig hex from each participant

      +
      +
    +

    Returns Promise<number>

    the number of outputs signed with the given multisig hex

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Indicates if the wallet is view-only, meaning it does not have the private +spend key and can therefore only observe incoming outputs.

    +
    +

    Returns Promise<boolean>

    true if the wallet is view-only, false otherwise

    + +
+
+ +
    + +
  • +

    Make this wallet multisig by importing multisig hex from participants.

    +
    +
    +

    Parameters

    +
      +
    • +
      multisigHexes: string[]
      +

      multisig hex from each participant

      +
      +
    • +
    • +
      threshold: number
      +

      number of signatures needed to sign transfers

      +
      +
    • +
    • +
      password: string
      +

      wallet password

      +
      +
    +

    Returns Promise<string>

    this wallet's multisig hex to share with participants

    + +
+
+ +
    + +
  • +

    Open an existing wallet on the monero-wallet-rpc server.

    + +

    Example:

    + + +let wallet = new MoneroWalletRpc("http://localhost:38084", "rpc_user", "abc123");
    +await wallet.openWallet("mywallet1", "supersecretpassword");
    +
    +await wallet.openWallet({
    +   path: "mywallet2",
    +   password: "supersecretpassword",
    +   server: "http://locahost:38081", // or object with uri, username, password, etc
    +   rejectUnauthorized: false
    +});
    +

    +
    +

    Parameters

    +
      +
    • +
      pathOrConfig: string | Partial<MoneroWalletConfig>
      +

      the wallet's name or configuration to open

      +
      +
    • +
    • +
      Optional password: string
      +

      the wallet's password

      +
      +
    +

    Returns Promise<MoneroWalletRpc>

    this wallet client

    + +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Rescan the blockchain from scratch, losing any information which cannot be recovered from +the blockchain itself.

    + +

    WARNING: This method discards local wallet data like destination addresses, tx secret keys, +tx notes, etc.

    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Rescan the blockchain for spent outputs.

    + +

    Note: this can only be called with a trusted daemon.

    + +

    Example use case: peer multisig hex is import when connected to an untrusted daemon, +so the wallet will not rescan spent outputs. Then the wallet connects to a trusted +daemon. This method should be manually invoked to rescan outputs.

    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Common method to get key images.

    +
    +
    +

    Parameters

    +
      +
    • +
      all: any
      +

      pecifies to get all xor only new images from last import

      +
      +
    +

    Returns Promise<any>

    are the key images

    + +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set an account label.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the account to set the label for

      +
      +
    • +
    • +
      label: string
      +

      the label to set

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set the wallet's daemon connection.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional uriOrConnection: string | MoneroRpcConnection
      +

      the daemon's URI or connection (defaults to offline)

      +
      +
    • +
    • +
      Optional isTrusted: boolean
      +

      indicates if the daemon in trusted

      +
      +
    • +
    • +
      Optional sslOptions: SslOptions
      +

      custom SSL configuration

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set a subaddress label.

    +
    +
    +

    Parameters

    +
      +
    • +
      accountIdx: number
      +

      index of the account to set the label for

      +
      +
    • +
    • +
      subaddressIdx: number
      +

      index of the subaddress to set the label for

      +
      +
    • +
    • +
      label: string
      +

      the label to set

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set a note for a specific transaction.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHash: string
      +

      hash of the transaction to set a note for

      +
      +
    • +
    • +
      note: string
      +

      the transaction note

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Set notes for multiple transactions.

    +
    +
    +

    Parameters

    +
      +
    • +
      txHashes: string[]
      +

      transactions to set notes for

      +
      +
    • +
    • +
      notes: string[]
      +

      notes to set for the transactions

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Sign a message.

    +
    +
    +

    Parameters

    +
      +
    • +
      message: string
      +

      the message to sign

      +
      +
    • +
    • +
      signatureType: MoneroMessageSignatureType = MoneroMessageSignatureType.SIGN_WITH_SPEND_KEY
      +

      sign with spend key or view key (default spend key)

      +
      +
    • +
    • +
      accountIdx: number = 0
      +

      the account index of the message signature (default 0)

      +
      +
    • +
    • +
      subaddressIdx: number = 0
      +

      the subaddress index of the message signature (default 0)

      +
      +
    +

    Returns Promise<string>

    the signature

    + +
+
+ +
+
+ +
    + +
  • +

    Sign unsigned transactions from a view-only wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      unsignedTxHex: string
      +

      unsigned transaction hex from when the transactions were created

      +
      +
    +

    Returns Promise<string>

    the signed transaction hex

    + +
+
+ +
    + +
  • +

    Start mining.

    +
    +
    +

    Parameters

    +
      +
    • +
      numThreads: number
      +

      number of threads created for mining (optional)

      +
      +
    • +
    • +
      Optional backgroundMining: boolean
      +

      specifies if mining should occur in the background (optional)

      +
      +
    • +
    • +
      Optional ignoreBattery: boolean
      +

      specifies if the battery should be ignored for mining (optional)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
    + +
  • +

    Start background synchronizing with a maximum period between syncs.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional syncPeriodInMs: number
      +

      maximum period between syncs in milliseconds (default is wallet-specific)

      +
      +
    +

    Returns Promise<void>

    +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Stop the internal process running monero-wallet-rpc, if applicable.

    +
    +
    +

    Parameters

    +
      +
    • +
      force: boolean = false
      +

      specifies if the process should be destroyed forcibly (default false)

      +
      +
    +

    Returns Promise<number>

    the exit code from stopping the process

    + +
+
+ +
+
+ +
    + +
  • +

    Submit signed multisig transactions from a multisig wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      signedMultisigTxHex: string
      +

      signed multisig hex returned from signMultisigTxHex()

      +
      +
    +

    Returns Promise<string[]>

    the resulting transaction hashes

    + +
+
+ +
    + +
  • +

    Submit signed transactions from a view-only wallet.

    +
    +
    +

    Parameters

    +
      +
    • +
      signedTxHex: string
      +

      signed transaction hex from signTxs()

      +
      +
    +

    Returns Promise<string[]>

    the resulting transaction hashes

    + +
+
+ +
    + +
  • +

    Sweep all unmixable dust outputs back to the wallet to make them easier to spend and mix.

    + +

    NOTE: Dust only exists pre RCT, so this method will throw "no dust to sweep" on new wallets.

    +
    +

    Parameters

    +
      +
    • +
      Optional relay: boolean
      +

      specifies if the resulting transaction should be relayed (default false)

      +
      +
    +

    Returns Promise<MoneroTxWallet[]>

    the created transactions

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Synchronize the wallet with the daemon as a one-time synchronous process.

    +
    +
    +

    Parameters

    +
      +
    • +
      Optional listenerOrStartHeight: number | MoneroWalletListener
      +

      listener xor start height (defaults to no sync listener, the last synced block)

      +
      +
    • +
    • +
      Optional startHeight: number
      +

      startHeight if not given in first arg (defaults to last synced block)

      +
      +
    +

    Returns Promise<MoneroSyncResult>

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Compares two transfers by ascending account and subaddress indices.

    +
    +
    +

    Parameters

    +
      +
    • +
      t1: any
    • +
    • +
      t2: any
    +

    Returns number

    +
+
+ +
    + +
  • +

    Compares two outputs by ascending account and subaddress indices.

    +
    +
    +

    Parameters

    +
      +
    • +
      o1: any
    • +
    • +
      o2: any
    +

    Returns any

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Initializes a MoneroTxSet from a list of rpc txs.

    +
    +
    +

    Parameters

    +
      +
    • +
      rpcTxs: any
      +

      rpc txs to initialize the set from

      +
      +
    • +
    • +
      Optional txs: any
      +

      existing txs to further initialize (optional)

      +
      +
    • +
    • +
      Optional config: any
      +

      tx config

      +
      +
    +

    Returns MoneroTxSet

    the converted tx set

    + +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Converts a rpc tx with a transfer to a tx set with a tx and transfer.

    +
    +
    +

    Parameters

    +
      +
    • +
      rpcTx: any
      +

      rpc tx to build from

      +
      +
    • +
    • +
      tx: any
      +

      existing tx to continue initializing (optional)

      +
      +
    • +
    • +
      isOutgoing: any
      +

      specifies if the tx is outgoing if true, incoming if false, or decodes from type if undefined

      +
      +
    • +
    • +
      config: any
      +

      tx config

      +
      +
    +

    Returns MoneroTxSet

    the initialized tx set with a tx

    + +
+
+ +
+
+ +
    + +
  • +

    Builds a MoneroTxWallet from a RPC tx.

    +
    +
    +

    Parameters

    +
      +
    • +
      rpcTx: any
      +

      rpc tx to build from

      +
      +
    • +
    • +
      Optional tx: any
      +

      existing tx to continue initializing (optional)

      +
      +
    • +
    • +
      Optional isOutgoing: any
      +

      specifies if the tx is outgoing if true, incoming if false, or decodes from type if undefined

      +
      +
    • +
    • +
      Optional config: any
      +

      tx config

      +
      +
    +

    Returns any

    is the initialized tx

    + +
+
+ +
    + +
  • +

    Decodes a "type" from monero-wallet-rpc to initialize type and state +fields in the given transaction.

    +

    TODO: these should be safe set

    +
    +
    +

    Parameters

    +
      +
    • +
      rpcType: any
      +

      is the type to decode

      +
      +
    • +
    • +
      tx: any
      +

      is the transaction to decode known fields to

      +
      +
    +

    Returns any

    true if the rpc type indicates outgoing xor incoming

    + +
+
+ +
    + +
  • +

    Remove criteria which requires looking up other transfers/outputs to +fulfill query.

    +
    +
    +

    Parameters

    +
      +
    • +
      query: any
      +

      the query to decontextualize

      +
      +
    +

    Returns any

    a reference to the query for convenience

    + +
+
+ +
    + +
  • +

    Initializes a sent transaction.

    +

    TODO: remove copyDestinations after >18.2.2 when subtractFeeFrom fully supported

    +
    +
    +

    Parameters

    +
      +
    • +
      config: any
      +

      send config

      +
      +
    • +
    • +
      Optional tx: any
      +

      existing transaction to initialize (optional)

      +
      +
    • +
    • +
      copyDestinations: any
      +

      copies config destinations if true

      +
      +
    +

    Returns any

    is the initialized send tx

    + +
+
+ +
+
+ +
    + +
  • +

    Merges a transaction into a unique set of transactions.

    +
    +
    +

    Parameters

    +
      +
    • +
      tx: any
      +

      the transaction to merge into the existing txs

      +
      +
    • +
    • +
      txMap: any
      +

      maps tx hashes to txs

      +
      +
    • +
    • +
      blockMap: any
      +

      maps block heights to blocks

      +
      +
    +

    Returns void

    +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/SslOptions.html b/docs/typedocs/classes/SslOptions.html new file mode 100644 index 000000000..6e8ffefaf --- /dev/null +++ b/docs/typedocs/classes/SslOptions.html @@ -0,0 +1,268 @@ +SslOptions | monero-ts
+
+ +
+
+
+
+ +

Class SslOptions

+
+

SSL options for remote endpoints.

+
+
+
+

Hierarchy

+
    +
  • SslOptions
+
+
+
+ +
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
allowAnyCert: boolean
+
+ +
allowedFingerprints: string[]
+
+ +
certificateAuthorityFile: string
+
+ +
certificatePath: string
+
+ +
privateKeyPath: string
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/TaskLooper.html b/docs/typedocs/classes/TaskLooper.html new file mode 100644 index 000000000..4991957cd --- /dev/null +++ b/docs/typedocs/classes/TaskLooper.html @@ -0,0 +1,236 @@ +TaskLooper | monero-ts
+
+ +
+
+
+
+ +

Class TaskLooper

+
+

Run a task in a fixed period loop.

+
+
+
+

Hierarchy

+
    +
  • TaskLooper
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
_isStarted: any
+
+ +
isLooping: any
+
+ +
periodInMs: any
+
+ +
task: any
+
+

Methods

+
+ +
+
+ +
+
+ +
+
+ +
    + +
  • +

    Set the loop period in milliseconds.

    +
    +
    +

    Parameters

    +
      +
    • +
      periodInMs: any
      +

      the loop period in milliseconds

      +
      +
    +

    Returns void

    +
+
+ +
+
+ +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/classes/ThreadPool.html b/docs/typedocs/classes/ThreadPool.html new file mode 100644 index 000000000..4ccf60656 --- /dev/null +++ b/docs/typedocs/classes/ThreadPool.html @@ -0,0 +1,169 @@ +ThreadPool | monero-ts
+
+ +
+
+
+
+ +

Class ThreadPool

+
+

Simple thread pool using the async library.

+
+
+
+

Hierarchy

+
    +
  • ThreadPool
+
+
+
+ +
+
+

Constructors

+
+
+

Properties

+
+
+

Methods

+
+
+

Constructors

+
+ +
+
+

Properties

+
+ +
drainListeners: any
+
+ +
taskQueue: any
+
+

Methods

+
+ +
    + +
  • +

    Await all functions to complete.

    +
    +

    Returns Promise<void>

    resolves when all functions complete

    + +
+
+ +
    + +
  • +

    Submit an asynchronous function to run using the thread pool.

    +
    +
    +

    Type Parameters

    +
      +
    • +

      T

    +
    +

    Parameters

    +
      +
    • +
      asyncFn: any
      +

      asynchronous function to run with the thread pool

      +
      +
    +

    Returns Promise<T>

    resolves when the function completes execution

    + +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/enums/ConnectionType.html b/docs/typedocs/enums/ConnectionType.html new file mode 100644 index 000000000..1d20c338d --- /dev/null +++ b/docs/typedocs/enums/ConnectionType.html @@ -0,0 +1,130 @@ +ConnectionType | monero-ts
+
+ +
+
+
+
+ +

Enumeration ConnectionType

+
+

Enumerates connection types.

+

Based on enums.h in monero-project.

+
+
+
+
+
+ +
+
+

Enumeration Members

+
+
+

Enumeration Members

+
+ +
I2P: 4
+

I2P connection type (value=4).

+
+
+
+ +
INVALID: 0
+

Invalid connection type (value=0).

+
+
+
+ +
IPV4: 1
+

IPV4 connection type (value=1).

+
+
+
+ +
IPV6: 2
+

IPV6 connection type (value=2).

+
+
+
+ +
TOR: 3
+

TOR connection type (value=3).

+
+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/enums/MoneroKeyImageSpentStatus.html b/docs/typedocs/enums/MoneroKeyImageSpentStatus.html new file mode 100644 index 000000000..e2f2dc7a5 --- /dev/null +++ b/docs/typedocs/enums/MoneroKeyImageSpentStatus.html @@ -0,0 +1,110 @@ +MoneroKeyImageSpentStatus | monero-ts
+
+ +
+
+
+
+ +

Enumeration MoneroKeyImageSpentStatus

+
+

Enumerates connection types.

+

Based on enums.h in monero-project.

+
+
+
+
+
+ +
+
+

Enumeration Members

+
+
+

Enumeration Members

+
+ +
CONFIRMED: 1
+

Key image is confirmed (value=1).

+
+
+
+ +
NOT_SPENT: 0
+

Key image is not spent (value=0).

+
+
+
+ +
TX_POOL: 2
+

Key image is in the pool (value=2).

+
+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/enums/MoneroMessageSignatureType.html b/docs/typedocs/enums/MoneroMessageSignatureType.html new file mode 100644 index 000000000..b3d4aa4bd --- /dev/null +++ b/docs/typedocs/enums/MoneroMessageSignatureType.html @@ -0,0 +1,99 @@ +MoneroMessageSignatureType | monero-ts
+
+ +
+
+
+
+ +

Enumeration MoneroMessageSignatureType

+
+

Enumerate message signature types.

+
+
+
+
+
+ +
+
+

Enumeration Members

+
+
+

Enumeration Members

+
+ +
SIGN_WITH_SPEND_KEY: 0
+

Sign with spend key (value=0).

+
+
+
+ +
SIGN_WITH_VIEW_KEY: 1
+

Sign with the view key (value=1).

+
+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/enums/MoneroTxPriority.html b/docs/typedocs/enums/MoneroTxPriority.html new file mode 100644 index 000000000..c3a0e0aee --- /dev/null +++ b/docs/typedocs/enums/MoneroTxPriority.html @@ -0,0 +1,119 @@ +MoneroTxPriority | monero-ts
+
+ +
+
+
+
+ +

Enumeration MoneroTxPriority

+
+

Enumerates send priorities.

+
+
+
+
+
+ +
+
+

Enumeration Members

+
+
+

Enumeration Members

+
+ +
DEFAULT: 0
+

Default priority (i.e. normal) (value=0).

+
+
+
+ +
ELEVATED: 3
+

Elevated priority (value=3).

+
+
+
+ +
NORMAL: 2
+

Normal priority (value=2).

+
+
+
+ +
UNIMPORTANT: 1
+

Unimportant priority (value=1).

+
+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/functions/connectToDaemonRpc.html b/docs/typedocs/functions/connectToDaemonRpc.html new file mode 100644 index 000000000..e1a419994 --- /dev/null +++ b/docs/typedocs/functions/connectToDaemonRpc.html @@ -0,0 +1,108 @@ +connectToDaemonRpc | monero-ts
+
+ +
+
+
+
+ +

Function connectToDaemonRpc

+
+
    + +
  • +

    Create a client connected to monerod.

    + +

    Examples:

    + + +let daemon = await moneroTs.connectToDaemonRpc("http://localhost:38081");
    +

    +
    + +let daemon = await moneroTs.connectToDaemonRpc({
    +   uri: "http://localhost:38081",
    +   username: "superuser",
    +   password: "abctesting123"
    +}); +

    +
    + +// start monerod as an internal process
    +let daemon = await moneroTs.connectToDaemonRpc({
    +   cmd: ["path/to/monerod", ...params...],
    +}); +

    +
    +

    Parameters

    +
      +
    • +
      uriOrConfig: string | string[] | Partial<MoneroRpcConnection> | Partial<MoneroDaemonConfig>
      +

      uri or rpc connection or config or terminal parameters to connect to monerod

      +
      +
    • +
    • +
      Optional username: string
      +

      username to authenticate with monerod

      +
      +
    • +
    • +
      Optional password: string
      +

      password to authenticate with monerod

      +
      +
    +

    Returns Promise<MoneroDaemonRpc>

    the daemon RPC client

    + +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/functions/connectToWalletRpc.html b/docs/typedocs/functions/connectToWalletRpc.html new file mode 100644 index 000000000..1538613b5 --- /dev/null +++ b/docs/typedocs/functions/connectToWalletRpc.html @@ -0,0 +1,112 @@ +connectToWalletRpc | monero-ts
+
+ +
+
+
+
+ +

Function connectToWalletRpc

+
+
    + +
  • +

    Create a client connected to monero-wallet-rpc.

    + +

    Examples:

    + + +let walletRpc = await moneroTs.connectToWalletRpc({
    +   uri: "http://localhost:38081",
    +   username: "superuser",
    +   password: "abctesting123",
    +   rejectUnauthorized: false // e.g. local development
    +});
    +

    +
    + +// connect to monero-wallet-rpc running as internal process
    +let walletRpc = await moneroTs.connectToWalletRpc({cmd: [
    +   "/path/to/monero-wallet-rpc",
    +   "--stagenet",
    +   "--daemon-address", "http://localhost:38081",
    +   "--daemon-login", "superuser:abctesting123",
    +   "--rpc-bind-port", "38085",
    +   "--rpc-login", "rpc_user:abc123",
    +   "--wallet-dir", "/path/to/wallets", // defaults to monero-wallet-rpc directory
    +   "--rpc-access-control-origins", "http://localhost:8080"
    + ]}); +
    +
    +

    Parameters

    +
      +
    • +
      uriOrConfig: string | string[] | Partial<MoneroRpcConnection> | Partial<MoneroWalletConfig>
      +

      uri or rpc connection or config or terminal parameters to connect to monero-wallet-rpc

      +
      +
    • +
    • +
      Optional username: string
      +

      username to authenticate with monero-wallet-rpc

      +
      +
    • +
    • +
      Optional password: string
      +

      password to authenticate with monero-wallet-rpc

      +
      +
    +

    Returns Promise<MoneroWalletRpc>

    the wallet RPC client

    + +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/functions/createWalletFull.html b/docs/typedocs/functions/createWalletFull.html new file mode 100644 index 000000000..ee1040038 --- /dev/null +++ b/docs/typedocs/functions/createWalletFull.html @@ -0,0 +1,106 @@ +createWalletFull | monero-ts
+
+ +
+
+
+
+ +

Function createWalletFull

+
+
    + +
  • +

    Create a Monero wallet using client-side WebAssembly bindings to monero-project's wallet2 in C++.

    + +

    Example:

    + + +const wallet = await moneroTs.createWalletFull({
    +   path: "./test_wallets/wallet1", // leave blank for in-memory wallet
    +   password: "supersecretpassword",
    +   networkType: moneroTs.MoneroNetworkType.STAGENET,
    +   seed: "coexist igloo pamphlet lagoon...",
    +   restoreHeight: 1543218,
    +   server: "http://localhost:38081"
    +}); +

    +
    + +const wallet = await moneroTs.createWalletFull({
    +   path: "./test_wallets/wallet1", // leave blank for in-memory wallet
    +   password: "supersecretpassword",
    +   networkType: moneroTs.MoneroNetworkType.STAGENET,
    +   seed: "coexist igloo pamphlet lagoon...",
    +   restoreHeight: 1543218,
    +   proxyToWorker: false, // override default
    +   server: {
    +     uri: "http://localhost:38081",
    +     username: "daemon_user",
    +     password: "daemon_password_123"
    +   }
    +}); +
    +
    +

    Parameters

    +
      +
    • +
      config: Partial<MoneroWalletConfig>
      +

      MoneroWalletConfig or equivalent config object

      +
      +
    +

    Returns Promise<MoneroWalletFull>

    the created wallet

    + +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/functions/createWalletKeys.html b/docs/typedocs/functions/createWalletKeys.html new file mode 100644 index 000000000..d228154de --- /dev/null +++ b/docs/typedocs/functions/createWalletKeys.html @@ -0,0 +1,87 @@ +createWalletKeys | monero-ts
+
+ +
+
+
+
+ +

Function createWalletKeys

+
+
    + +
  • +

    Create a wallet using WebAssembly bindings to monero-project.

    + +

    Example:

    + + +const wallet = await moneroTs.createWalletKeys({
    +   password: "abc123",
    +   networkType: moneroTs.MoneroNetworkType.STAGENET,
    +   seed: "coexist igloo pamphlet lagoon..."
    +}); +
    +
    +

    Parameters

    +
      +
    • +
      config: Partial<MoneroWalletConfig>
      +

      MoneroWalletConfig or equivalent config object

      +
      +
    +

    Returns Promise<MoneroWalletKeys>

    the created wallet

    + +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/functions/getVersion.html b/docs/typedocs/functions/getVersion.html new file mode 100644 index 000000000..8c606ce7e --- /dev/null +++ b/docs/typedocs/functions/getVersion.html @@ -0,0 +1,69 @@ +getVersion | monero-ts
+
+ +
+
+
+
+ +

Function getVersion

+
+
    + +
  • +

    Get the version of the monero-ts library.

    +

    Returns string

    the version of this monero-ts library

    + +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/functions/openWalletFull.html b/docs/typedocs/functions/openWalletFull.html new file mode 100644 index 000000000..c95de14d4 --- /dev/null +++ b/docs/typedocs/functions/openWalletFull.html @@ -0,0 +1,92 @@ +openWalletFull | monero-ts
+
+ +
+
+
+
+ +

Function openWalletFull

+
+
    + +
  • +

    Open an existing Monero wallet using client-side WebAssembly bindings to monero-project's wallet2 in C++.

    + +

    Example:

    + + +const wallet = await moneroTs.openWalletFull({
    +   path: "./wallets/wallet1",
    +   password: "supersecretpassword",
    +   networkType: moneroTs.MoneroNetworkType.STAGENET,
    +   server: { // daemon configuration
    +     uri: "http://localhost:38081",
    +     username: "superuser",
    +     password: "abctesting123"
    +   }
    +}); +

    +
    +

    Parameters

    +
    +

    Returns Promise<MoneroWalletFull>

    the opened wallet

    + +
+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/index.html b/docs/typedocs/index.html new file mode 100644 index 000000000..9d91e3fa3 --- /dev/null +++ b/docs/typedocs/index.html @@ -0,0 +1,200 @@ +monero-ts
+
+ +
+
+
+
+

monero-ts

+

Monero TypeScript Library

A TypeScript library for creating Monero applications using RPC and WebAssembly bindings to monero v0.18.2.2 'Flourine Fermie'.

+
    +
  • Supports client-side wallets in Node.js and the browser using WebAssembly.
  • +
  • Supports wallet and daemon RPC clients.
  • +
  • Supports multisig, view-only, and offline wallets.
  • +
  • Wallet types are interchangeable by conforming to a common interface.
  • +
  • Uses a clearly defined data model and API specification intended to be intuitive and robust.
  • +
  • Query wallet transactions, transfers, and outputs by their properties.
  • +
  • Fetch and process binary data from the daemon (e.g. raw blocks).
  • +
  • Receive notifications when blocks are added to the chain or when wallets sync, send, or receive.
  • +
  • Over 300 passing Mocha tests.
  • +
+

Table of contents

+

Architecture

+
+ Build browser or Node.js applications using RPC or WebAssembly bindings to monero-project/monero. Wallet implementations are interchangeable by conforming to a common interface, MoneroWallet.ts. +

+ +

Sample code

// import monero-ts (or import types individually)
import * as moneroTs from "monero-ts";

// connect to daemon
let daemon = await moneroTs.connectToDaemonRpc("http://localhost:28081");
let height = await daemon.getHeight(); // 1523651
let txsInPool = await daemon.getTxPool(); // get transactions in the pool

// create wallet from mnemonic phrase using WebAssembly bindings to monero-project
let walletFull = await moneroTs.createWalletFull({
path: "sample_wallet_full"
password: "supersecretpassword123",
networkType: moneroTs.MoneroNetworkType.TESTNET,
seed: "hefty value scenic...",
restoreHeight: 573936,
server: { // provide url or MoneroRpcConnection
uri: "http://localhost:28081",
username: "superuser",
password: "abctesting123"
}
});

// synchronize with progress notifications
await walletFull.sync(new class extends moneroTs.MoneroWalletListener {
async onSyncProgress(height: number, startHeight: number, endHeight: number, percentDone: number, message: string) {
// feed a progress bar?
}
} as moneroTs.MoneroWalletListener);

// synchronize in the background every 5 seconds
await walletFull.startSyncing(5000);

// receive notifications when funds are received, confirmed, and unlocked
let fundsReceived = false;
await walletFull.addListener(new class extends moneroTs.MoneroWalletListener {
async onOutputReceived(output: moneroTs.MoneroOutputWallet) {
let amount = output.getAmount();
let txHash = output.getTx().getHash();
let isConfirmed = output.getTx().getIsConfirmed();
let isLocked = output.getTx().getIsLocked();
fundsReceived = true;
}
});

// connect to wallet RPC endpoint and open wallet
let walletRpc = await moneroTs.connectToWalletRpc("http://localhost:28084", "rpc_user", "abc123");
await walletRpc.openWallet("sample_wallet_rpc", "supersecretpassword123");
let primaryAddress = await walletRpc.getPrimaryAddress(); // 555zgduFhmKd2o8rPUz...
let balance = await walletRpc.getBalance(); // 533648366742
let txs = await walletRpc.getTxs(); // get transactions containing transfers to/from the wallet

// send funds from RPC wallet to WebAssembly wallet
let createdTx = await walletRpc.createTx({
accountIndex: 0,
address: await walletFull.getAddress(1, 0),
amount: BigInt("250000000000"), // send 0.25 XMR (denominated in atomic units)
relay: false // create transaction and relay to the network if true
});
let fee = createdTx.getFee(); // "Are you sure you want to send... ?"
await walletRpc.relayTx(createdTx); // relay the transaction

// recipient receives unconfirmed funds within 5 seconds
await new Promise(function(resolve) { setTimeout(resolve, 5000); });
assert(fundsReceived);

// save and close WebAssembly wallet
await walletFull.close(true); +
+

Documentation

+

Using monero-ts in your project

    +
  1. cd your_project or mkdir your_project && cd your_project && npm init
  2. +
  3. npm install monero-ts@0.9.0
  4. +
  5. Add require("monero-ts") to your application code.
  6. +
+

Running in Node.js

Node.js 18 LTS is recommended and requires using the --no-experimental-fetch flag. Alternatively, Node.js 16 LTS works.

+

Building a browser application

    +
  1. Bundle your application code for a browser. See xmr-sample-app for an example project using webpack.
  2. +
  3. Copy assets from ./dist to your web app's build directory.
  4. +
+

Using RPC servers:

    +
  1. Download and install Monero CLI.
  2. +
  3. Start monerod, e.g.: ./monerod --stagenet (or use a remote daemon).
  4. +
  5. Start monero-wallet-rpc, e.g.: ./monero-wallet-rpc --daemon-address http://localhost:38081 --stagenet --rpc-bind-port 38084 --rpc-login rpc_user:abc123 --wallet-dir ./
  6. +
+

Building WebAssembly binaries from source

This project uses WebAssembly to package and execute Monero's source code for use in a browser or other WebAssembly-supported environment.

+

Compiled WebAssembly binaries are committed to ./dist for convenience, but these files can be built independently from source code:

+
    +
  1. Install and activate emscripten.
      +
    1. Clone emscripten repository: git clone https://github.com/emscripten-core/emsdk.git
    2. +
    3. cd emsdk
    4. +
    5. git pull && ./emsdk install 3.1.10 && ./emsdk activate 3.1.10 && source ./emsdk_env.sh
    6. +
    7. export EMSCRIPTEN=path/to/emsdk/upstream/emscripten (change for your system)
    8. +
    +
  2. +
  3. Clone monero-ts repository: git clone --recursive https://github.com/monero-ecosystem/monero-ts.git
  4. +
  5. cd monero-ts
  6. +
  7. ./bin/update_submodules.sh
  8. +
  9. Modify ./external/monero-cpp/external/monero-project/src/crypto/wallet/CMakeLists.txt from set(MONERO_WALLET_CRYPTO_LIBRARY "auto" ... to set(MONERO_WALLET_CRYPTO_LIBRARY "cn" ....
  10. +
  11. Download and install unbound 1.17.0 to your home directory (~).
  12. +
  13. ./bin/build_all.sh (install monero-project dependencies as needed for your system)
  14. +
+

Running tests

    +
  1. Clone the project repository: git clone https://github.com/monero-ecosystem/monero-ts.git
  2. +
  3. cd monero-ts
  4. +
  5. Start RPC servers:
      +
    1. Download and install Monero CLI.
    2. +
    3. Start monerod, e.g.: ./monerod --testnet (or use a remote daemon).
    4. +
    5. Start monero-wallet-rpc, e.g.: ./monero-wallet-rpc --daemon-address http://localhost:38081 --testnet --rpc-bind-port 28084 --rpc-login rpc_user:abc123 --wallet-dir ./
    6. +
    +
  6. +
  7. Configure the appropriate RPC endpoints, authentication, and other settings in TestUtils.ts (e.g. WALLET_RPC_CONFIG and DAEMON_RPC_CONFIG).
  8. +
+

Running tests in Node.js

    +
  • Run all tests: npm test
  • +
  • Run tests by their description, e.g.: npm run test -- --grep "Can get transactions"
  • +
+

Running tests in a browser

    +
  1. Start monero-wallet-rpc servers used by tests: ./bin/start_wallet_rpc_test_servers.sh
  2. +
  3. In another terminal, build browser tests: ./bin/build_browser_tests.sh
  4. +
  5. Access http://localhost:8080/tests.html in a browser to run all tests
  6. +
+

Related projects

+

License

This project is licensed under MIT.

+

Donations

If this library brings you value, please consider donating.

+

+
+ 46FR1GKVqFNQnDiFkH7AuzbUBrGQwz2VdaXTDD4jcjRE8YkkoTYTmZ2Vohsz9gLSqkj5EM6ai9Q7sBoX4FPPYJdGKQQXPVz +

+
+
+

Generated using TypeDoc

+
\ No newline at end of file diff --git a/docs/typedocs/modules.html b/docs/typedocs/modules.html new file mode 100644 index 000000000..87a889ea1 --- /dev/null +++ b/docs/typedocs/modules.html @@ -0,0 +1,149 @@ +monero-ts
+
+ +
+
+
+
+

monero-ts

+
+
+

Index

+
+

Enumerations

+
+
+

Classes

+
+
+

Functions

+
+
+
+

Generated using TypeDoc

+
\ No newline at end of file

)CdQ3F!eKyF|9D2V!F-rhUpJ8J+l7g0OBBVM#THTI&O8)>EGR%u6Gd9D9pm5!S}%&6DxW}^f|7=Y zPoO3(pTZY#?(7(|!5}5Nn!D%DotZmlW)?smSMcEE<^aT$6gw#LlwubPI9BYTffL0! zyu-EPCnz{Y#ZR&1d{F!hr_NW!&#~mXis$jseXDo@U)-kR7sMBeUt-T&RQw9By@BF9 z3f?cpmw4m-R{RHncaC**(V--ipJ<~6LkW2fi6RVfh%vcYt9@z>&M0LBSf-Q|Et8wU zCt43_*JB)mHR71wb`K@~5Cizwp{`A2uuJ^_Bcl3k{7ree$8&@l?;^2nagS+NqCDBfkB?pJws=PbK~+A7|2 z{gCDJKI-i%m4LD$n{WIwWR|c+NRy`C1#)1sSBI7FiH6z-QkhY&Q_|%I3exQ zQ`X1M?cZH4^M&BSyr;2z$+^SZUMA*0001Z+HKHROw(}?!13=vX`$@Br+fGR zZ%e`5O6%Txi$Yrz0gF{}p>fY>OnlS0Uevf}oDXW;D{d2gcE<2)oFcV80@g$H)63L{HN*d{8kVzKVW(;E)$9N_%kx5Ku3R9WJbY?JW^G#k0Wdx>E$NBBVtKRLiL?sA*s%w`TdsNz1=+~FRNdB8&+@iBD0 zXFTC4C-8-Cwv(4U=LLQ~^Oa4^rG|OTr5?ItoaPMYxxh`%a*kVU z;HYGAjq6;IY{`*awo0DlOMw(hkrYdb(O28l;MYvSx*ChcQW4f^QL5UdE3HbqvbxB$pfSg`>Cj#;?~00;nMAg}==M6d%RaIhCe zARtS)01i=0um)3FSgr#ump{<1pq_<0a34Kp8x=7I1^|9 diff --git a/docs/fonts/OpenSans-Regular-webfont.eot b/docs/fonts/OpenSans-Regular-webfont.eot deleted file mode 100644 index 6bbc3cf58cb011a6b4bf3cb1612ce212608f7274..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19836 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docs/fonts/OpenSans-Regular-webfont.woff b/docs/fonts/OpenSans-Regular-webfont.woff deleted file mode 100644 index e231183dce4c7b452afc9e7799586fd285e146f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22660 zcmZsBb8u!&^yZs4wmESowrx9^*tTukn%K5&Yhv4(*qAukeD&L{+O67q>#5V{x##IV z{l`6h>vp@zi-`e10Npn{(tTN_YxCRmIVMn%D!3L|6nA35hpGpD)!9{ zef#*|AOyh!fQc)}D}8f^003Aa005ms>xd~NuB0La06>I)#{_(%EYB!BUtWox2>^hE z`}Xz!L*CzXKO-9h`)|(rTVDVG0AWyXSQL$1oe97DLHdqi_y!N<2n4sOy_wB7C-6PS z>$gpag7p+MGjRIWBJh02K>cqZnOS?7esdxKfFK_LU}yi!vWwQ-#K0H;kPrTjVg3di z2-xpH^KbH-Yy0*IzVQVPvfrVS zYieWQ{ynbJ^SADs2M~h(07BXt*q8tS%2?kqOW!$Cm?1=S+1oie0{|*F-`vZ0f57Xy z;#_-2lW(os#kVg0KirEDU$~hVe&?+2{p~~i2eTH%+HVW;4ZtLC!OVYloRu-^KRdOA z#p1qhq;IURzYA&z4S}R@s1G*qBrpj)V*H+W90)N0;J#j+A}jM-9BcHeljaJ;CZWY* zA0BA=y&k`bikBmz(zvjl#zZfM0XgNTDFX*3`2E}*s`jJlw1If96@D605R9|_vG zS&$Cj6Au`o6o)ET0%_FoG1XV#N^O&LG){ldbj>_7>UV^viY#ezHft8i%G$eP)w(MHlIZGb>OBVKBV_g#d2Z4ZfjiY@6`*P!L@TlmLz%OI&5gy4-HJ>-)t22%Fd#k)&OLVDMsL{u z3F+<^`fj#|YixitJqW%H-!Iw*Hpl=}(?_crz=|GZwd_D(-zD4B+}zvfYFuOk582X+ zV8T$LiFC)qQ{k>~RlY1+S8V22!LV~hvI}a}SY!wbMS#b{;bL(_xf&mKb6k~R4t0)c=88?Djji4{N` z4d82QUS>g#rR$As|4(!GJ)pT>$V}06?hqt)ci&$S9~J3=jao zzkxxRety?(C_|tUApj)zzh__);4R;V5CHn$9QE~0{q?aS#0bax#(;;6fiE<0^!`oQ zLBM!Y2;*C(MaFkC7GpTmDt)dI=cvQyo?H9op|AXKD*T7fL7uILb z$JxH@}Epi&2Fyp zIgEC<1*8)xbb9TcOBv1QD>kcb9_J}G+%4B@-EIWJic*$GACV#8YxI8_u((Va(U=*E zQiF6-l?Lk!)r=hR!?U&C2+PY|UiU~=>^9rI?w934gT!-r{2rbke}w+oc*4^3%<$@b zC6~F#==a7XY=w@)SsO`2h-gE{}l-5$Z>b zE9tk=kn`~cF&6jo1u`J7A3snuKQ$*wZmz&^CqxXoi>G*+!zxpXQH8>?_fsI`JdOEYRRl6HI%1ESG z9@HU*OZm=`FnMY8*C}7bkB+^+^@;t2wqvUMloqJXNh0Ic?A*VlwWnQ^t5Bco+%`Ol-MC0$)=$w6?23s6$mC$VY-D0 z;h7M>*l-@p1`9d}sIG8lI*OYi^otymNwn*AZH_t}xNaICC96;`YuxfP!d}x7Q(vj= zGbB%(T?a($mz`s>Z}^T2J#m{&1cdC>LbmG=jtja1wwf`UP1Is87f>wl^V6kNfq53j zkArR1Rjfb_*7=9xi1E&FqVq~rJeTEVDnGQZr3iZ5vEqoFs|IatR5y#QmYcm(SG_Gw z=Cjc15%$>MVYdwP2eZM`cXkM0E$l9x>Q1Q&$%2Sw`o91W6jqQZY0GPJgw-n-`x6BI z4%qvg6S7Ocd~z6BeCTK1I^vR0uf2G-I3{RUbTma$T!J>!c;B@mWn4ZAyNZ*~4#Qpk z8f!I&G8PR)6`WH`dc?N49$=EHsBTBiTfTUs+!?Rf3!6_Y^TN3XQ_6aThpi}6N+CA? zF1$brYeh4`xBn9as~I}fhTwu|X*G13?}_yTmMAp8sT-+If>H;4r|FN|Eq( z1L{kL`qmEw%_jjwbOPB~36&|v4#q!NF($Gvnf`Pmf9$ZTHLZKY-pZ4jB30awlYE@^ z@v~f8^-OwGoF>LPzSi?vW3+Fbejc@o2KXHdT%=S5dYUmI8G&%Z;tZ}193l+5z|o)I z_{qq9^}@qO9co;fXH6*))FebxwNIps>ex0+gyJ`IR=Ccuikn+oxEsde;m3xgVByAB z``!3Od-dsP#{)Q69I?p?*mTNDJ=;1)Ev8l^}PAUs+-lwl$ zUX$!mrrTtu+msiohytaMaTg01w1gmD&S;rYD`@2EksjyF#Jur~F+~tVvtIi|Pf|8-G3%;lO1qZ^?DVJMQ-{>8%qD9L7od)^pCO+Cbxa zUm%y5@7gdw_Tu=SY7A9^C{30Ix&Yu*_)AelLRmyKMc-dPnKoVh2Fmt%K-7lZBz`jb z4DM9nM$6DZ&zg^)=Z0i5)jv`3S|DOhzklR z2m9dHywCE_g2RDU?~8B;jVX1O&%ZZ;Z=agK9O}<5OJ{f*cgJ!zM_a6SmTP;?@}v6W z!sM~pk#p7mb)6HW@{VtG;oT2dd|gylrq+5pG~dqWnB~4KP!^y|GFUJ?4!?CVV~Yx63`Mc*A$;2-BlbC+fbrzi=_*lUHuu^I3+Dz^owT5w zr+%`zmmCNiYAMMGEXqh(0@E2i>Dq+ZPOELuk3boP=)QYQSPZ<7=+L;k*qYI+^*IT_tUr){! z#JU-j+$WQiVTq@6ify6Gu>;*nh_e0E09)1$V$<;2fGiKew4WkH0mNc??dgHwr-VU! zr1MdgicuGnLwVxW_|zxzmAO>|8z;}`&cxddLiW5uVf(M*H@e9)q7P=?h#is66tue# z!HjfdaCSWL)u;ztV%_>h2&cGps=BF@YbyTYqN8zBnW?i2&P%L0pDfil$I-?{)VHF) zL`nwM$sqQTwb}ymRm9uW?h7{VH>aiES$opcO^6Yd}u*{fWA!3404*!^q?x4So4i{fta|ye8;winh8S5weaR+NxM=vwv2JQhRlFm*vYbtQRLG8zrzrfj{Wlh z5c$2cf8tLo3%v_p(;STZ)3AlN+FWOIE?#oge)i5Eyvc*Ty3e2N`(??HiO!7h=hHs> z7GLh8)>#4YR%~?X?*g{hZ?AB^@XNfY?y4ksklPyya(RW(3E@%b>EXc!(W@!@E!ml5 zsB|%rkqx42xT-&_>G5{Y_A+6sT6f^j4?y6lm$ki#)g=%vdnHn_owL{HfZAeD2Mx^w zqcPaeQLONVQGt!h*--CN!7g#)qyYk1K~Q5gkiMr3_pAU^b*`V$0Jt{jU0XeKZv7!| zvdm$$VhIZTQR+MuN0Cxck6)al{wf%575k0M>{PkNJ`s-(Odl2o*KXt&elc{t_YwKv zhe9`XZXFEQ_w2O_T;}2_y|&!bk~D-~>Mbm6Gs#ts0X8w4oOI+>gvjq1c^(2` z7891C=<);1w}hK+mNNkdJ)djlT~B8})OaN#?ig_x}@KWeSM)qpO^AQ;Fp2h=hxn4qkfO!YJ(Ir8t>tXZNPm>JB* z%0;7&myJ*lZ1j6lI^6GDnW^j`y^}Bo-4mj_2zUf!MWa>HpnzZosbDIAQ|KLrYp1gy zisc|!;GyixC{jR-j#- zZGJson6dGxwq7ocrtH$)tIl{DPF*z5rx$i!@!4<0^Uv@)-(DK6sBQb+^pNXz=(>F+ zCL>0#t&-QNw4Hz6k`T~c{TmyDZba6bz{v|bg}}VCw4wx@dDD_=5IeHg3HLQH5O)RA zvYBaHI~rE8PiLlB-nSXhGD@VKcdCDkYp=Pu6y`H)jV3q6UEH!ZQ@A2BY9dFQ`c5 zjpOEz8Sm(h(fK`paiInDe56AP5X0gDfgbEHRQlzrvjcP+SH(m3y6@eyd!bc zzj-EO`xf;gR7X`|RmkW}Z1VjvhUG1{iw3@^BZLaPg~wtyUEdk@-F|3Z#Nfg8_w*ms zr85+{9K)I2&YShTt+Lo|*RvLG9j77T>TYsMb}!+J06q_7P2@VxI>D33`h40HMF>@6 zH4qMOc6$m@=2q_1iHc32-e1$}oj2;Gui98I@jASaC zWSyZa*B^V~kYvzR88I8Z*y?R{Xx*&WquAN5wr!ZC#3t{{_mhdY2@&%k*6-sXnc&38 z`46N!sTk%>-r$O#_hr@8rrX%S*MTCDaV2C{e65;j1 zA@7sgXU@A!87`(+mHy%tt4v!o$^IXnG(~U5qDbNdF!+|M(vd6i#9aB?ml5NuQ8RO~ z^YvE6MG(D=&f6!aO_dc<@QG3n9NSWqzMu{W2P_@V?c4bV1FTN zYilWMN6U;(ok*bAST-?}$pu<9!rVbiXFJ67kc0ZixD$>Y3Vg*>;Nw0Vg8%|x>zZ7vYWh(?fLf3Wdi@#(*n^@P_UsXwa{GkQ35A)nq%jZIe-~qL}`tv=0RN-s1UF!2P%dr2D`OfF7n9-rb;EL=veIOPSV+RFY_i88?R^4=L}4 ze(!k1NoaIen~AC|i6#ZXrU<*apPu+=sc=z%DHF3fi=C%f)RBQ-BNJJ^7Eu;53A}f` ztU7Kn`@EJ8#J&_91>OoROf;SZsy98CFhZgN#==`%J+W_Ob)H8z4o6wTU_-15VW+^l z6^IUc6n0xj|MjAJJ3jc(`@nlKQlGgzj|mNr;kj@N!}H1PJ=&k&ocy5j z3jPt_bI@N~(IhpV6-F5#lK1Be0zOEyx5( zpqAt*bQw%OF1&M%#aoMIRCu>jQ+}mU0cx*g&Y7>~h_Qh_eq=zZz!Q4+so&bIZfZ(o zIS*3SY=DfBOGyDQ;GHLJgy@I(-zRL2tD0A}llS1}*tgPwroq@;*om-b^io>RSu!c| zx-LXIQ-t(-u*#veDp!o(ZM^DxMF#vBy#lKqeLJf)?eq>=Qrf{-BpVN7PouS4qK`hZ?VRe^^;#P+$y)|DG*KV0NS0iJMJnE^JIeqvNdRxEwkdqs%3l0duP2V8`dyb{bBS; zm7++>sk6GA2al@5gCjZcBSRIV@|5#+c-xaFwFtbB&F^*jc41WXVCM@D%rgl3JV(1T zV?oNzL9@_6P52PDl8hmapm3Z>VG|SD>jWv`=Akl#bfC`BX`SB(GVVP>m$HrYLvKEL zxC!Hlq;~*38PY5OQcRy?DAn`G6_W&cpW-JBO~;~gL(4@S-9K~GXtqEEP^$<|evwj9 zpiDPWi@)ihRe(#{CwwiJEJ3MRujOj@adF)E$u7d_EVtR|4mm_={M`9+mBt%VUBJsH zn6oayJExDfu zTI+3&&t6N9UY)fXPpQWz?Y(%@+-+v3CDT!RDh)nId+UkdS=l6D_;9`Hxg5! z%L&tf4>_ZiK5b0N@fiM71peJlR5fmkgwdC4^_P=QF%>Ok>}T>PoFDy4uIJ;h(tQ5N zM(v!ugH&N%ZT-{U$_@uHt^vbt+_NT!_~1a0VT&;lHUuts+7@Ev;V5IxJ8;gO<9X|9 z7ZJX#O4?ErlXY&<{Y^>Bm2cbuLZ=wc|79O*TCQ=3iDZ~YXTA#7$gqlTslZ^jd(wEx z&dkY*@WS^rX6vDV8FSRRAor@o=||56T2g%2UkK~#!eVzz99wcKWQtAp{1NuCrq0|8Z>z-+@eHdTm>YBTDI>`SYDgc#ca)?TxV52)KXBAR+X-wtE~cUqa@kg1Gk+o!(XG8N2gk zK8wUT0}bKh2_hy6`)nSKO~Dk6eFvw9e#JH31~@z)$U2kq3V08sj6@t(5>DLjmWaKE z))kl2@9x5IAj!WL*iWzgNsNn5y%|&Ab9fyg{s%X7fC-*?5z0EwRfGv0m9m5yOQCXW zXgz{NcDjeD9i;yG1`e4!4%(1)47o(KdUffMcbWd%;&M2uy%vqr3vUwChqL1J$DWM? z$3+xN6NP?VKu?n)3Ln2kl)80@vFpDQ!h&e1;j|hQ-V_t2Mc`piX}iMJzBm-7dVghQevE3B|CX9ca(Z|ELQ$zHMQSa zK&kG}e}zi;>YwCayQoIGei0e1e0pwo?OrWgE*n?X?*5{5It;CjzHeDRwP1M6=j?Gx zzr9Kj3BXq`AwPJOT>VoMqFpPUJvA)#5+u-ft&Y+PVDPG zu>Bb~i!}n%;;|mYua7Orq}*%Mhsm0SQ`7h29#`p)qjgOOj&6zGu-M8^wEaK{q*pOGBOPnF0TFtcJBDz2%pR81 zykQwu>O9E1bIlo14l!!&{JHwqj$oYG3oORbEU5gY`sYbE!o{$d_2{LNPNgBr>1-?C zMMqEk8@+#+I^f(e$YsrAHW(cR<&LFWW|)Y$?JISC{VemI+!>tx`@m_cP;h`y8}8v`nRI7| z5mv!2bx(TY9=mVcA(Uy2k4#0!!!;9csV*x=a}encb@2EmokQhF{L!PmkAv||Ci5Rb zcVf22g57f^q;3hpoS*jdSw8k93}|<#%;(MFtnQ*_=iTP17kfA7WB(qk+57QmI%1>` z`LJinKaV?fons=6^kyrB?k=OPXP4W54PCZ_8y>DZTQ?a8TopK+c8)5woguahW?2246s9!*3G7<#u4WGvpmG_WKS?cBo#n1cXEi~qV;Om zI3U|Vg)L)c2_!2h5zlAe06(vyS}C(JL6*ZSi-*zp;3ywd4+Iyzk;JheiLNhuTIq-- zH^^MXyb0h3Ui!`vok!D=T#<*6Zk=BEn8QK7iwk`AM)T!-u}$Z+psL1`g?d}|5s*5u89-wVJPf|zDiUsjHW|czRY@KAlOZw-@BzNaO zs`if-)0;)))v35qI6 zz(g~cD9{TMnw7mr37uge3d6X5-NqH0hvf*RQAtNs3q(7e6E4mtC}m%|^t8*P)Adxs z^~u4VZ3?D_@NUbw;KJOyQNM$Xz@1_jqElIvJhGh*X94xuj%cOf47}16>DAFbO?0B#ZQ;@DgBXpfxl0h0d4_tlgntC(W2s-0$Eh}(I zDb`;M@0srB^;J9&vk!#!TED6ZQ(aR`V&f-GkzE);WF10=l>cqBTb+k?yqVf*X|=Kl zt~kiUj|4fdiJKAlBxLC}o%BWZ+g!Zm?jYtMy)CD}^K&`BPxyh)E&aooy%G>sUPmQ% zMJU&A|9z5qMNQ|-e!=6S#~B}Vuw$v$PVBa{jR&Xnl~7JDU$5ix02;f#OBI`HSvvyM zmAN8uB&bPgN32bG11OStOycK{H4r(_e0-k0&U}W)sP*>E#n4~+o|T*B`n;BN?HBXU z-pA?Rk=x@iopL|C>hX6te{K#VrV&7T`jQ=o{g{GzaUeF=Ms{+OF4OnOF+Tz=%Smng zS(L#nbg=pYblZCdX+IyS-%TF&r~aL`>pa>vm7kS;eV<5y-KPO1u3-t|SfnJt%@))y?S!gEp(0)>w))iBCI^N&OD2Pq z)S?uqO^LBngPbW2v^iL*n9J}>g2n0q<*cIvQ+u~YV+;40k;w^I+>B$uGk&ESI?&a%4qQ;Y1jNZq( zV^({6%}PoO9#trq*aHQwquUp$)*Bt|EUNGl;iohy#3oQbU=JPD@!Lc=^2lNOh`8A{*=T7JC3c~v+9L)7Rz644WToV5n9sb zb?_;!VCiumuign+8Kjz`+%B82r`Q4eg#$xb?G89;AU{hPJ^O$(%kosZ_(20ku;+u) z=4<@1n?E{}(5gt0DgV40k(+$97f`hDNRq!9auMLMQTNVXXjeyrQj)obZwhUX^2e`L(B{Gw zvW?p{htf1yNr<0jO??QTXuHiET@_uY`H?o^~!E#(2m$q*L^5Kl5dpv;6GdxV)Hy_Js zpn0fg%Cs@?cLgP7PUhV%iSwNFYK+pS4CY?*=*h-Iwb9SawiAgi>SvW38a^@Ur5ETE z2J9oZh9u`wa1lBjSYl}kMp_zGD;fy$a+H>E6^cjq3)hs0sJx_VLbvEh2F{yH!p>>s z+hLH5xwn}KhzDwlEhjBE{ih7XtA{U*oA?r0&FKjbCC7Mr8vNUDTFvPVf&ZHFQB zT?wa#7buc7vu{=)6k{-1%1}35OfBv`>#kpX$;&Xq_Q9x~ERGfruKC=*2Cxb6U-$1! z4u%qpNy~QvxmDGwiAlr{vZ}q*#>h{GVfhNLfk^hrnq!+OJ!nFvWR!*+LV{^z+sIT548+L@kWth6?0;YH z(t`RZ3~}a(sBuKWhwNYeB-}S*@ZIcgjFwKexlvKx>GbuW-bMOko^l(B#jB_+J!~HF z3T%xK}%igi$r{4ju z&HTnsFc_)wS*=<<434@y_06fl1VcY<$=r99%D5vQ=CC=(bMaM)SPi=f0O&M@4hRFZE495ocZXjRrPP>+?*~$z4xgh3sm(hL6$gl^#|O5Mi;cDI>KHov z2)nekq0#e=pD<{4j3@$h(twpEwjE$=2h~{q&Eyk=17<`ze%5QC3-@n3eB7Ihm;sQTfVAq;D3OzbqW0 zSIvd>XZOuRdyEx+fi;F-N$Ehof}gwf)GS|BPGqf&n+kR{hQVj$y@`!X5JNq^j?f%j zXgWU1m=3yKb`yEmpQr{K`POo&zbSUR#rtxg9f=jayrYW8r=ZNhIqHBF2%8bzoY;ph zYO0PPX z$QV|~=7#H^cur~*pD1r=9ndW*SSfZn{2nT!n~vm6FWVba_>+Zv>D0;1y@e5kti>%| zw&MLBp*Q!DW1evuW$EJ=4F{RN>BNb$Kx{!sgj{5Cu+QzWcVXQe_U=5wt<13FzaHJ- z;JS7>EUc}X4>8(*&JE`k`8s%KdsS@UP@L6y@kXk$AfryM4M*xAaxxmuLl?6bndUghRksjH-OG+ROnyaRE{$S4;DBL#GtDVoj&MD^B%WOh4yW9%f;BAf5UG0tY zy~#RRYc+YAuHxrf_kP-IC+M8ITOfJI?zpdJH{a?syS+*BD>(l8R$Z*%8#yj(*~gd9 zXA1Z+d8#LyG=d+(Mnf;?=h>kW>-o#7R*_b%2RFD#{1VWS=zmHDim(hQUIwDL9pd9kGp=k`W$MlNMr1rQkX8(ZI3&?+k1k5 zS*(~ADIoQVhQN?jAwuEd#-17Vm);?1mOh#rvG@k&{;6b^Ci4#y1R;e|{0|OuWv0ws&pD z6}uiHDf5x6P8XMEJs3>Y7&}EPo2~)CNyDd)3zQ#Ag}%tRM#01`BCd(a#nAr_2ex7;x4E#gzlD) z>nQ}yl1;bo3p;6wb|uuqb$gYyElPI8==^9%JM8I?UdqO{(+oJ@hOSTcX>ie(SHuEE z*U95o=N^VcZE)ZEP1t)S%?#EsB&n`dCt=ZC!jJ@4>(BlWSj6PoN^N)h*U5g9h0+u? z8O#-W9%p;SzZri*MgK08s4B~4Ln!rU1P(RoVo6iIy0Nwt2bl#|!Mwuc@4~63Vy$5g zQY}lOS4A?ZhoKJ_{mzgfiyAjns!rL?9-mQuOHkQW8)~3JK}B$pPiyz9!9xt=qO`Y& zUgrm)p)lX#ClWVe*FfKVlvQc(tfFwUuH6^S#Mjkp_9fsGdR6gbbe{BopVvL*94w*f zstb_6FD2V`rB)=jO?{If9Opx5|Oi zz{s(i8DeLVi$DEa{1$hy&0_Sid9OE}<+IY(khuTG^+ct~X}RWlJJHaojpxSKRC2#L zpKV2sNOh^3af+Rj%-^|`PH+GF1tOnW?{YWYP2kL98)T%BS#Mi&IAdCXl^VaRYvK3r z*7a*x8RXvU`rgvU<6G?%w*dDlG{XWc7C!H;60wykK2wIMIO2nAd!h2nsnBMqp~07* zK})tFmu7C~+UcwFxZ%uvA%7}E=XvE9X`|R>UbY`D)WQpu-8IHoE*c31?AI~-mymgO?xjU{r*J_Ut~OVlUBto9>hio;pK{ZL2<95 z`~m#Bf=X?LHV7jvxKxT%pg(-hS$CPa+HN~NCB#$YwKyD;bc;bNz2NeG7%xS@Uw;9- zr*m6j$Y?;gTDw_smyGi9()A_2%C5?~%?yn{B&EA!Wv{(6GtNu;++@2e({oYgzlf`t zJwkH3$Z-uhtNIz==Ff}~2h*JHhB0kDhQwp>L{kAx=8h-?`z6%@+mT%P98&VmRRfyj z2*<+_LwTy4lrT6n<;7gk&{*U}q($`rNFGNh2X%4cRui#06F?_uUr*7%Ro(#IF9W|n z`ZGwjkgK4eA6VAu==;)a(P;S`&`?*<(eYp!IORestiqToCs?hI?MbNn#Cd1w;3oF{ zBY$j9S%QAd>`uLlhWKKav+RJ{^Uot#CJ8=*tPwNUf{O(f76>SC8D=X&Kt^;|ZtibU zxd2`1K<EvttqCCi}SP~&$N3SnNr;btH zcL9yd)f&4jp3i)8h2-ze=fSKR-bh$=jJ~hF&_5ZUpxkk}8QT`8CxwsQxL3LcHz%R4r^@oV`)=)-RT2%uMTKy(gtVEh6!t}9TAPL>F!B;nf95G_w z2`YuGy+$yG0NP~UiI%{esDPxDHTWnJbg2sO@ zYJtc(P-D;(2Qkk?!UPdQJ>dB@U}~@`i{@ZXN+dOmCP`{&rnzaeQsvMWHd;iz=Ce9q z1q5=>vst!l&@>VVyGu-`<4v~v=X_hRMuW#GqgF=CCJaAx=^Ez**C+%%pjgou+!Z0k z%D0(lFuz_gwc_+bYlUKFnK3!=a&1Jf6W>1=oP4C624Uzi@AQKC4nCo47uGqcW@1 zFF3sscsc1w`z9BRGy7f?+DaO3c?ld*gqY%!B6@oUTKn7L(CZ3JF;81smQI_;H}SM( zSfguBnX{d`>|tkSWNZh&kcpn~xU?ia%rI!V<^>H?K<}N3;O5A~OqsQYnEgi0uprA; z(Loh-g7?8Z3O1KCrX#WX`q5vSD6B*}RPX89JwUGXYz*cCmOY=kGSsP_qG!mdrK+ul zULmc>?olQ@Zu!`!M)kC*k%}Vy=T45adTBJ5`0;PIlvAs9Kje-6`)E)HdLn z)q1r^%1UC4Gv}5luzy6;5^5q(8H}q_L#%rgs>RB^LosM-UAQzxIP~ikNyH ztInDtxtV#)Mpd11gtYXha{}<|zyoYWaRQth0>ahFW6e3uin+|ZwZp0=;q>ddIT>q| zyvZR5smj5(w^bP|XWsxpZvVpd!334!+Eg&%-VO{Zpo6XrkYo1A!s!n&MV3=1oK!Oo z=r8bO-F6iVPY;||z<46Bu;NC;Ge`PsxkvW6Pm>OA%y~S4TL@mxx(inG4yWRErqDFgm3bd?TAh=vc>#>?oNO~h$X<#=u zSr2MGFj}w8bL3?`R?k{#1s~fQeQ@`wZL8&<78iQ^IWPZgWw&Rek6##Bl5+febOdX& zr`!v-Q8#5IucX}jSM`2c$ZW~O=(4)#$@IQO(th~8$3worgTc;#ke_mUTQe{@bMiti zB25dEv-K&o-D;LBEprDKIgx1#9*+Xc?3w3k2rN}86D><=sTJi|?BvuI2eZLoL@uDp z+?BXAyy`wS`2zYvsNAwTBv91gj4^Z2pmD9}P^NmtJa*aYH~x)3np6ScS1p%G0=ZjV zoIv57bHcjQUr1UiwpN{~{NodH@w0RKT@Ks@cblhDJ3PO0`oO<`R6K>a7K5iDzS>P! zjN)!G(o5`yY#f=+h8otpOh-Z)sS#DJOc(XQnoUEy@j%tfERdT|L=>b$P!~^V`Sx{m zW4E))~py z()PrLy~#oI5tU!iCBD{NaR>Zj@23?q*b46BDcd`hGkyavmQXy^C zv^V@`0a^=*ZA=EZ)vN;&O<;Zd2S&be~?-d)Yl93ZO<(fOUEdqf8FxeIfmcF^* zIC}~ZoP71p&ejWeMt|YKlkLrtuoys#%<2U*P%i3< zmINH^{K0A<2&W~1QBKCP#O}< zZ0+vHkM0s)nzJH`C=cO|Prjg2JGL_N?znTAGYTXj2Fn7^AD~eFz{&Fm0+D55 zbVP@fETc+At^IA8KY)=$VDkLyLtEqzqD_(c1K!i4>PC)hU)4q(L}+y&+M7aT1vx)a;P#X1vW5?EC; z;OZa_!>`~v>voQ-yA4s~8*v3h0o`U?W%*ZeZO&r+E?m87DarpETu*{7SRb(XJZ*#< zkni1x%S23G~zFm&5x+zjEUcujwCoK+nhfpZN+$wLDbA#9tw zy&xV^)cykp7_^pf4Jup)G^Z2j{j`*%)?kf{PfdRV=W(3MC+_>cs^w5v+NJLyErp`; zClNeDQ#B#U}X6?(nuAWH>_No+lyMTq189Okz_8v$unQwoQqrB*_a z_&u+o-k_F{)Z_~mT0wGfNQ{q7ERQqf2AWP%R$V^ea47Aff{GLIEn&rkGBd4!9pX7I z@bv-KHvlVHU9$*SHI&^lnHorD84C5dv}G3&PiCnBKVf&4ieqIrzso5*(80)xDvDXf zy~EDxs|`57ig5%?!WZkXYx+DXNolF9%!0K}Ab#(ct03JcL4fKjh~eR>O<+E@TJbE7 zrPqJ@JN*hPAALGrSNJyl?zXQ+j_S2-;?)6XH$A<(VH)nfcWY4^<|09!Uuc6cEKi1dNP0t)Y&E=K%oq#{Y)^tCoez58hnGsr}vbR&X z*TkSRfwE+o8%5DqFw5^KiD*wThTBteTRtMTdZcB~iZR@?k_eF^&TQ8<-Q!M9Y7-xm z<;ntc>tuD`X=c^OnXd9VyuZp-UHcwFqYinJcnBT39Tt9u0F@nRn@eumx57%#Z%7oi z7*TbYrHZ^Pt#eD*vxYL*$?-hQ4#9?>MYSL4S76_eP-+d^`CG70!YYkB>~+Tr&A>hE z0;k`Eo^q4SQ%mpxy+cJnaYyL3v8wMJfy1fq5IbRtNIFT9Qo$6P;}*cNk`!fXDyS~wBh*EK)4OILqx_t1B;>XAq2 zKe}}<>QWdeB0p$9aDQ-m(=l{Hh zSF)7L^I7@4>uSq=mD5Hoz{aavW>n4`Gr#erJbbSIw5RIGMnCP?XX;bWsy$e}X5PMN z6Gp5JYryOQi#PqUXChgW_rZI+#s}y5FR^vuJsq0v-^KOBFm>m>j?n!~`q=?V=w5-4 za}z2lVa|=Nx%Hzm-1-se*l2@wt(rh8Lrox7Elm|t2zsWwZ;98esSK}#7=Ex4!Ykw& zgz#dnf$nB4DUnXhE%2&{z$-Z^KJItob<&2=yudYy4{52+dT{@`dM*a8e96V^`*{jl6+jPK;G=CO$TdS5ycu z-cO?HIl{0Ssjen)ZCb$6#zkZ)#tLf2!YaBn_N60PLXymjHhIqp*Z4Oyo+Jc3+R-q3R8PAtVhMF@LB`jhsb-LQ_(!NG^qmwS~9DFt5)xQKw6_2Z?7^pU;9uJg4;g) z0L!{5V(7vM6uyHZVmR<8)`d`VqAN8vmDQM99oDo|gM(Fmg|1Zcd0a7}4r#B}keFi4 zO~=EE>uWB2``rhBf50f}>gr_NclRc;r5<cAqJr$e+u?(l>o zr!&5M6YsxpE`tB6{*B;&4a71%0$szbZ|?8W@%Bolm>oB=oarR2j%#o=UgABa5zEWOBX*m8?Alhix+m1J=^N7{u+&Mm)8f57tBi{9?h<&_6dUk&mmac)G-hk9mE)AXHs4yzs)@XLu=xtMmRML6vb?!V1uQ=KD> zjp9XNANc=flzli#QLkuHCCJE2p~DrO242z0y6?wSH8>o0Rs_guI+L)=>0#G+da!Z+ zL|0wRJ@aM{TfD4dy7=v~hcenNUg#=Vv?Q1Ja!dhOS@L3Dx91KdH3t^pWDL@r1p)QB zN%fwR8*UcL7qaF~oN)h~@e}@dcd_4J+^sOTr*vTK?3rW7PM>U6LRwDmezZWng3E3{KP5LPDZVGEr^SecdIj0Hz# z`JmfUbNuG9rs*R(486T?N_MB{ai*!_C2y9uTlYE3;ak@pbC$Qf_a3#p+W!CJy>ble z^gHj;FBe9J@6w0ol;8cF()?VUZ~~X|yQz`_30S-9thrPZ{#TH~J_W$;%V!_Jpm>cj zV>{0+_6jFrhGQd0FuK`1;d{87KlwqM2lH!`Z3Q@w-JSeE?-c1!47)TLCw|CeUi)kU zCi6weE+h820BHd?xy7dxz)yOtcd`P0!f+rB9EWHo39Q+KZ4droH)`ao(>u=>3B#gs7BoWOckqskU-pb&a#K>o~V|$W#^Wt21hR%USTk|_UFJevOoHfGI z=Ff|8kbbbv$B+T6eWyT{8H)n@>;O^>E>rlk16ZvHGoJio0~}H6rv|WQaF5fIr+sQb zUT%R|h{mL0-dcJu-n3#K{a%)0laiu#3y!zmnm|f|Z@;#rztNYKW&M%$K7tRtTsni& z(H{cC(=dwi!V+1))3EZ)yn)F+)2vlGEGTNPo)OkQssiz280Q39b|`k~9FKum4 z0xiZ^UPupW&4UGxi+P<1ytcf+BjBlX&ynQwWY}q)Jp0eDpJ|vc>&}zU$z3%y!Of)O z0$NVa1<#R=!H#&>^5A*34|o;tKl(j-6yj?ZO^5sT`-pus-%)GZH)*x*R`7_#KG$Dl zU$AEqVQd>YneE|3wqtJNJ7oZ2w*}4(*kFqa;N6JemFpF7Zba>3D_`@)R*0QxA$Fvt zUSq}l+vrdwR)TsVvmP9RUmaH!Fr}q>*qsGwTE&}&oACzR265bWsb@jaCfERG9k^bK z*38CUQ6gT^>a!C$!U}G66;}vNb+#m4kT)peeTCmh5GE%1W;b?0P!bwZ#X3GTB6O*l zDh=}aFbzI*8`+N{_$=K6v}_E-q?(9X@R&)omb;_WYgZPtp za5L#%m2|d3Ek`1gsd*f`W9%jrn?2fn;>~}Q0}_^cjV{eb=>GwC+%CWX0C?JCU}Rum zV3eFSTV&(!cz&C&4DuWdAaM4ogb9rPSNTtXeI0u-kjufq1QG=RYH18{0C?JCU}Rw6 zNcy`LNHYAZ{8!DsjsYlw0zLo$kVOWx0C?JMlTTz^Q543%ckg|FR2Ef3q){;BrJz$5@AjAKh@&~T@aHXC^1ZKCXcM$I`yLlsdV zIa9#`=gQ6>y$-n3 zXt_fO-40r&PLdoSaeR!H%98Q;vH8LHBwGFqT3$f12u-`Ezc^Py#Vp|l^WK{efM3R_ z*+yVidDeBFV+Su;^Ds4S7Ld}L@tN6n*7(1oIYy*Ep-!!v5Owtix6C3Y`Oips*il}* zZqoKU@@t4BZaQ{-BsqGP`E8!_2xFYvH45-%FlNn3#vf?l z4)f=|9PX3b?<_tSFRTv(&>o{5SVgU}1>8P$5Zh|pi-K2q1dGsGTN zseyjS`%?${syOd_CAkZ5N)4$`IVbO-hXD$FTLtG4MlAAPK4L`BIij%Z&Cwg?sw(ef z74y!u^A*{fUM0+12h6jvs zOiWCZnAR~}Vfw{v#+=05#k`F981o|*1r`^U7M6RgGORhQCs^OH1+i^ld&DlqZp0qP zUdDcoqk>}#CmW{^XA9>B&TCw1Tz*_>TvNFAaoypT;P&F~;Xc5_#}mM_fad_uCtfMu z7~U@44ZL@F|M5xjS@9+CRq-w3SKwd4|3;ud;DDfj;5i`$As?X$LidFJ3D*dp5MdE1 z6L}))Cpt&;k(hy4jMxgX8{%T(PU0=%%f#PE7y)67#12U=$u!9|lJ}$%q$WuVNw-OF zkiI1SP9{gDO=geG6ImtM64?c^KjiG>667YyZIgQ?FD4%%KS4oAAxmM7!Z}4IMH|ID z#YKuwl&qAplx8WNQu?8+pzNVsq&!3Uj*5Val}d_ApUMH1XR2JPIjS>MkEni9lTmX~ zt5fGt&r(05VW2TjlR-00i$yC+YlAkMc7paS?Q=RTI#xO{Iy-a)bp3RDbkFHA=&9-D z>7CJ+&`;6dV!&YFVQ|3Uogs_i9wRfO7^6u>r;OQfKoMglV*_I!;|${-;|<2=OxR2u zOwvp`OjZHm5tDl+zf69anwc&#{b0spres!NcFEkxe2w`I0CXFPng9U+008g+LI4E- zJ^%#(0swjdhX8H>00A@r{Qv|20eIS-Q_C&{K@>eb?HSKlh=oPR%7WH2NJK>96(K@` zu(9dsX``9Z(%s^*_65Gd#xIBuU}NPIe1K1I>Q;HQ85^nG>QlGQxpnWYY5;wBfDNmq z6F@@K*unr;8W+%u8-s1k;nv_5jNrxKRt(|Y;5PJI9R|1K&Kfef1EbcX!CjcK-VE-> zL1Eb79^y-bd$C)1HTVgG_Nc+n@a%akBSMvy(XJ7q0*B^v?GpuvafU0_pjb!rI=H8m z;GswxH>ij)dRNJg$*VDrgC*jGYBl>3KgKCsY|$4IIoP596e+g3uHu|JpWFp{0%24* zC*+OO8dVM!sfnmkIjd~ErmTGQJ&Bo`Y?RIw?Wgin*DO*bv+7GGHL3jS67__>7>5l# z@TCezSXca(#hXY*Dq1Gl=&na{S|A?PeZ4+r=814CoP)1Erp&vsQ_Xv>?k%Ht784v7 zGFCJ=G|zo%6(n3 zcQ~eHuf($_xj&03@#w!~@&hCMrV%xx3>||Npk@hPSN6 z-JQW!fw7H_0>cTefspV9!Crvi8uS4OZox_58HWep6}t7u8~5_bU2>PZBZ`*zt-O6H6TNB#=lF$)u1<8tG(^Nfz1UkV_u<6i`SJ#gtG=D_YZrwzQ)? z9q33WI@5)&bfY^KG<2-kuv3PEaw_OSPkPatKJ=v@PF(b-5;qsKztm7)X`M`R%vxPkz=8(j&nYXNAml(yw zHZil28@!iT_Hu+@{Ny(WIL2LWbDUYsW(U>Wr-nP+<1r6-$Rj?6zxRwMJmmzw@XvPg zlIOg@&u6}}i8%zA%RFkSV;}X*r-2}igjm2r7V(M2ETM^|EN2-P+0RN=u!_}u;TxBD z#Ys+anb*AIjl@a3BuJtpNwTC!s-#J}WJsoDNj9fB!+9=nle3)T78^J!Ib7p9S0q>R zB%iH(mjWr2A}N*qGq^*+`sT!~_VKtP`-Ih%R;A6{ za<;Bp{{lIAr&0g_086+4$WmCb0RfI#xd;FV0AnDq0V71P10!&-7eyc-OSk|IQA@A} zQ(9QCG#jueSzu-$id9&!0wrOv0YzgYVz2@uM6wG31}d@)1_mm!6b1$=S+WEu2}M#w zvJ40ZDzOFuM6o0Rh*4OuK!{ke1_MN~CIN_1ShxfLh*+@(0Yq6@Sy{LN|Anvwjj;s) ML;wL%uV=LY00kR;TmS$7 diff --git a/docs/global.html b/docs/global.html deleted file mode 100644 index b4fb46cd5..000000000 --- a/docs/global.html +++ /dev/null @@ -1,2696 +0,0 @@ - - - - - JSDoc: Global - - - - - - - - - - -