From e703e9024f1071d9f83ecf938332338b8748cc8a Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 19 May 2026 11:02:12 -0500 Subject: [PATCH 01/11] refactor(dapi-client)!: expose Uint8Array instead of Buffer in public API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds lib/utils/bytes.js helper (hexToBytes/bytesToHex/base64ToBytes/bytesToBase64/concatBytes/bytesEqual) and converts all Buffer.* call sites in dapi-client lib/ to Uint8Array, with corresponding test updates. Package stays CJS. Production exceptions where Buffer is retained: BlockHeadersReader passes Buffer to dashcore-lib's BlockHeader (its BufferReader needs .readInt32LE), and GetIdentitiesContractKeysResponse passes Buffer to wasm-dpp's Identifier.from (it explicitly requires Node Buffer). createGrpcTransportError now handles both raw bytes (grpc-js path) and base64 strings (grpc-web path) for drive-error-data-bin, stack-bin, and dash-serialized-consensus-error-bin metadata fields, restoring the dual-format behavior that Buffer.from(x, 'base64') used to provide implicitly. Test updates: spec files that construct expected protobuf requests now wrap .toBuffer() with new Uint8Array(...) to match production's normalization (sinon calledOnceWithExactly distinguishes Buffer from plain Uint8Array). Breaking change for direct consumers: response object byte fields are now Uint8Array. Callers that do response.field.toString('hex') will fail — use bytesToHex(response.field) from lib/utils/bytes instead. Buffer.isBuffer(response.field) now returns false; use response.field instanceof Uint8Array. Test results: dapi-client 315/315, wallet-lib 377/377, js-dash-sdk 60/60 — downstream consumers continue passing without modification (they exercise dapi-client mostly via mocks). --- .../SimplifiedMasternodeListProvider.js | 9 +-- .../lib/methods/core/getBlockByHashFactory.js | 4 +- .../methods/core/getBlockByHeightFactory.js | 4 +- .../core/getBlockchainStatusFactory.js | 6 +- .../core/getMasternodeStatusFactory.js | 3 +- .../getTransaction/GetTransactionResponse.js | 12 ++-- ...ribeToBlockHeadersWithChainLocksFactory.js | 3 +- ...ubscribeToTransactionsWithProofsFactory.js | 3 +- .../GetDataContractResponse.js | 6 +- .../getDataContract/getDataContractFactory.js | 8 +-- .../getDataContractHistoryFactory.js | 8 +-- .../getDocuments/GetDocumentsResponse.js | 6 +- .../getDocuments/getDocumentsFactory.js | 11 ++-- .../GetIdentitiesContractKeysResponse.js | 1 + .../getIdentitiesContractKeysFactory.js | 13 ++-- .../getIdentity/GetIdentityResponse.js | 6 +- .../getIdentity/getIdentityFactory.js | 8 +-- .../getIdentityBalanceFactory.js | 8 +-- .../GetIdentityByPublicKeyHashResponse.js | 6 +- .../getIdentityContractNonceFactory.js | 12 ++-- .../getIdentityKeys/getIdentityKeysFactory.js | 6 +- .../getIdentityNonceFactory.js | 6 +- ...rotocolVersionUpgradeVoteStatusResponse.js | 3 +- ...ProtocolVersionUpgradeVoteStatusFactory.js | 3 +- .../platform/getStatus/GetStatusResponse.js | 13 ++-- .../lib/methods/platform/response/Proof.js | 18 +++--- .../WaitForStateTransitionResultResponse.js | 2 +- .../lib/test/fixtures/getProofFixture.js | 14 +++-- .../lib/test/fixtures/getStatusFixture.js | 14 +++-- .../lib/test/mocks/mockHeadersChain.js | 5 +- .../GrpcTransport/createGrpcTransportError.js | 19 ++++-- packages/js-dapi-client/lib/utils/bytes.js | 63 +++++++++++++++++++ .../methods/core/CoreMethodsFacade.spec.js | 10 +-- .../platform/PlatformMethodsFacade.spec.js | 19 +++--- .../core/broadcastTransactionFactory.spec.js | 2 +- .../core/getBlockByHashFactory.spec.js | 4 +- .../core/getBlockByHeightFactory.spec.js | 4 +- .../core/getBlockchainStatusFactory.spec.js | 6 +- .../core/getMasternodeStatusFactory.spec.js | 2 +- .../GetTransactionResponse.spec.js | 8 +-- .../getTransactionFactory.spec.js | 4 +- ...oBlockHeadersWithChainLocksFactory.spec.js | 3 +- ...ibeToTransactionsWithProofsFactory.spec.js | 3 +- .../GetDataContractResponse.spec.js | 6 +- .../getDataContractFactory.spec.js | 4 +- .../getDataContractHistoryFactory.spec.js | 2 +- .../getDocuments/GetDocumentsResponse.spec.js | 2 +- .../getDocuments/getDocumentsFactory.spec.js | 8 +-- .../getIdentitiesContractKeysFactory.spec.js | 4 +- .../getIdentity/GetIdentityResponse.spec.js | 6 +- .../getIdentity/getIdentityFactory.spec.js | 8 +-- .../getIdentityBalanceFactory.spec.js | 2 +- ...GetIdentityByPublicKeyHashResponse.spec.js | 2 +- .../getIdentityByPublicKeyHashFactory.spec.js | 2 +- .../GetIdentityContractNonce.spec.js | 4 +- .../getIdentityContractNonceFactory.spec.js | 4 +- .../getIdentityKeys/GetIdentityKeys.spec.js | 6 +- .../getIdentityKeysFactory.spec.js | 4 +- .../getIdentityNonce/GetIdentityNonce.spec.js | 4 +- .../getIdentityNonceFactory.spec.js | 2 +- ...olVersionUpgradeVoteStatusResponse.spec.js | 11 ++-- ...colVersionUpgradeVoteStatusFactory.spec.js | 19 +++--- .../getStatus/GetStatusResponse.spec.js | 37 +++++------ .../getStatus/getStatusFactory.spec.js | 23 +++---- ...aitForStateTransitionResultFactory.spec.js | 24 +++---- 65 files changed, 324 insertions(+), 228 deletions(-) create mode 100644 packages/js-dapi-client/lib/utils/bytes.js diff --git a/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js b/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js index 3c1c6e20c6b..1916b48cc1a 100644 --- a/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js +++ b/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js @@ -3,6 +3,7 @@ const SimplifiedMNListDiff = require('@dashevo/dashcore-lib/lib/deterministicmnl const cbor = require('cbor'); const logger = require('../logger'); +const { bytesToHex } = require('../utils/bytes'); class SimplifiedMasternodeListProvider { /** @@ -100,11 +101,11 @@ class SimplifiedMasternodeListProvider { let simplifiedMNListDiff; let simplifiedMNListDiffObject; - let simplifiedMNListDiffBuffer; + let simplifiedMNListDiffBytes; try { - simplifiedMNListDiffBuffer = Buffer.from(response.getMasternodeListDiff_asU8()); + simplifiedMNListDiffBytes = new Uint8Array(response.getMasternodeListDiff_asU8()); - simplifiedMNListDiffObject = cbor.decodeFirstSync(simplifiedMNListDiffBuffer); + simplifiedMNListDiffObject = cbor.decodeFirstSync(simplifiedMNListDiffBytes); simplifiedMNListDiff = new SimplifiedMNListDiff( simplifiedMNListDiffObject, @@ -118,7 +119,7 @@ class SimplifiedMasternodeListProvider { network: this.options.network, error: e, simplifiedMNListDiffObject, - simplifiedMNListDiffBytes: simplifiedMNListDiffBuffer.toString('hex'), + simplifiedMNListDiffBytes: bytesToHex(simplifiedMNListDiffBytes), }, ); diff --git a/packages/js-dapi-client/lib/methods/core/getBlockByHashFactory.js b/packages/js-dapi-client/lib/methods/core/getBlockByHashFactory.js index 72de31354be..d007018bd2b 100644 --- a/packages/js-dapi-client/lib/methods/core/getBlockByHashFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getBlockByHashFactory.js @@ -15,7 +15,7 @@ function getBlockByHashFactory(grpcTransport) { * @typedef {getBlockByHash} * @param {string} hash * @param {DAPIClientOptions} [options] - * @returns {Promise} + * @returns {Promise} */ async function getBlockByHash(hash, options = {}) { const getBlockRequest = new GetBlockRequest(); @@ -29,7 +29,7 @@ function getBlockByHashFactory(grpcTransport) { ); const blockBinaryArray = response.getBlock(); - return Buffer.from(blockBinaryArray); + return new Uint8Array(blockBinaryArray); } return getBlockByHash; diff --git a/packages/js-dapi-client/lib/methods/core/getBlockByHeightFactory.js b/packages/js-dapi-client/lib/methods/core/getBlockByHeightFactory.js index e95a58aeccc..88fdf0d357a 100644 --- a/packages/js-dapi-client/lib/methods/core/getBlockByHeightFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getBlockByHeightFactory.js @@ -15,7 +15,7 @@ function getBlockByHeightFactory(grpcTransport) { * @typedef {getBlockByHeight} * @param {number} height * @param {DAPIClientOptions} [options] - * @returns {Promise} + * @returns {Promise} */ async function getBlockByHeight(height, options = {}) { const getBlockRequest = new GetBlockRequest(); @@ -30,7 +30,7 @@ function getBlockByHeightFactory(grpcTransport) { const blockBinaryArray = response.getBlock(); - return Buffer.from(blockBinaryArray); + return new Uint8Array(blockBinaryArray); } return getBlockByHeight; diff --git a/packages/js-dapi-client/lib/methods/core/getBlockchainStatusFactory.js b/packages/js-dapi-client/lib/methods/core/getBlockchainStatusFactory.js index 22b1f88e573..486637c4530 100644 --- a/packages/js-dapi-client/lib/methods/core/getBlockchainStatusFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getBlockchainStatusFactory.js @@ -29,18 +29,18 @@ function getBlockchainStatusFactory(grpcTransport) { const responseObject = response.toObject(); - // Respond with Buffers instead of base64 for binary fields + // Respond with Uint8Arrays instead of base64 for binary fields if (response.getChain()) { if (response.getChain() .getBestBlockHash()) { - responseObject.chain.bestBlockHash = Buffer.from(response.getChain() + responseObject.chain.bestBlockHash = new Uint8Array(response.getChain() .getBestBlockHash()); } if (response.getChain() .getChainWork()) { - responseObject.chain.chainWork = Buffer.from(response.getChain() + responseObject.chain.chainWork = new Uint8Array(response.getChain() .getChainWork()); } } diff --git a/packages/js-dapi-client/lib/methods/core/getMasternodeStatusFactory.js b/packages/js-dapi-client/lib/methods/core/getMasternodeStatusFactory.js index c0da5feef98..9f63a28ffb1 100644 --- a/packages/js-dapi-client/lib/methods/core/getMasternodeStatusFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getMasternodeStatusFactory.js @@ -5,6 +5,7 @@ const { CorePromiseClient, }, } = require('@dashevo/dapi-grpc'); +const { base64ToBytes } = require('../../utils/bytes'); /** * @param {GrpcTransport} grpcTransport @@ -34,7 +35,7 @@ function getMasternodeStatusFactory(grpcTransport) { responseObject.status = Object.keys(GetMasternodeStatusResponse.Status) .find((key) => GetMasternodeStatusResponse.Status[key] === responseObject.status); - responseObject.proTxHash = Buffer.from(responseObject.proTxHash, 'base64'); + responseObject.proTxHash = base64ToBytes(responseObject.proTxHash); return responseObject; } diff --git a/packages/js-dapi-client/lib/methods/core/getTransaction/GetTransactionResponse.js b/packages/js-dapi-client/lib/methods/core/getTransaction/GetTransactionResponse.js index 9f65b503c39..97aeeae2c99 100644 --- a/packages/js-dapi-client/lib/methods/core/getTransaction/GetTransactionResponse.js +++ b/packages/js-dapi-client/lib/methods/core/getTransaction/GetTransactionResponse.js @@ -4,8 +4,8 @@ class GetTransactionResponse { /** * * @param {object} properties - * @param {Buffer} properties.transaction - * @param {Buffer} properties.blockHash + * @param {Uint8Array} properties.transaction + * @param {Uint8Array} properties.blockHash * @param {number} properties.height * @param {number} properties.confirmations * @param {boolean} properties.isInstantLocked @@ -22,7 +22,7 @@ class GetTransactionResponse { /** * Get transaction - * @returns {Buffer} + * @returns {Uint8Array} */ getTransaction() { return this.transaction; @@ -30,7 +30,7 @@ class GetTransactionResponse { /** * Get block hash - * @returns {Buffer} + * @returns {Uint8Array} */ getBlockHash() { return this.blockHash; @@ -75,8 +75,8 @@ class GetTransactionResponse { } return new GetTransactionResponse({ - transaction: Buffer.from(transactionBinaryArray), - blockHash: Buffer.from(proto.getBlockHash()), + transaction: new Uint8Array(transactionBinaryArray), + blockHash: new Uint8Array(proto.getBlockHash()), height: proto.getHeight(), confirmations: proto.getConfirmations(), isInstantLocked: proto.getIsInstantLocked(), diff --git a/packages/js-dapi-client/lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory.js b/packages/js-dapi-client/lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory.js index 397b3ffd939..8fe67b0c05b 100644 --- a/packages/js-dapi-client/lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory.js +++ b/packages/js-dapi-client/lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory.js @@ -6,6 +6,7 @@ const { } = require('@dashevo/dapi-grpc'); const DAPIClientError = require('../../errors/DAPIClientError'); +const { hexToBytes } = require('../../utils/bytes'); /** * @param {GrpcTransport} grpcTransport @@ -41,7 +42,7 @@ function subscribeToBlockHeadersWithChainLocksFactory(grpcTransport) { if (options.fromBlockHash) { request.setFromBlockHash( - Buffer.from(options.fromBlockHash, 'hex'), + hexToBytes(options.fromBlockHash), ); } diff --git a/packages/js-dapi-client/lib/methods/core/subscribeToTransactionsWithProofsFactory.js b/packages/js-dapi-client/lib/methods/core/subscribeToTransactionsWithProofsFactory.js index bf1784291eb..45d54ca3776 100644 --- a/packages/js-dapi-client/lib/methods/core/subscribeToTransactionsWithProofsFactory.js +++ b/packages/js-dapi-client/lib/methods/core/subscribeToTransactionsWithProofsFactory.js @@ -7,6 +7,7 @@ const { } = require('@dashevo/dapi-grpc'); const DAPIClientError = require('../../errors/DAPIClientError'); +const { hexToBytes } = require('../../utils/bytes'); /** * @param {GrpcTransport} grpcTransport @@ -65,7 +66,7 @@ function subscribeToTransactionsWithProofsFactory(grpcTransport) { if (options.fromBlockHash) { request.setFromBlockHash( - Buffer.from(options.fromBlockHash, 'hex'), + hexToBytes(options.fromBlockHash), ); } diff --git a/packages/js-dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js b/packages/js-dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js index e1be4b3506e..1ff6735b3dd 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js @@ -3,7 +3,7 @@ const InvalidResponseError = require('../response/errors/InvalidResponseError'); class GetDataContractResponse extends AbstractResponse { /** - * @param {Buffer} dataContract + * @param {Uint8Array} dataContract * @param {Metadata} metadata * @param {Proof} [proof] */ @@ -14,7 +14,7 @@ class GetDataContractResponse extends AbstractResponse { } /** - * @returns {Buffer} + * @returns {Uint8Array} */ getDataContract() { return this.dataContract; @@ -33,7 +33,7 @@ class GetDataContractResponse extends AbstractResponse { } return new GetDataContractResponse( - Buffer.from(dataContract), + new Uint8Array(dataContract), metadata, proof, ); diff --git a/packages/js-dapi-client/lib/methods/platform/getDataContract/getDataContractFactory.js b/packages/js-dapi-client/lib/methods/platform/getDataContract/getDataContractFactory.js index 0966fd05923..ed1a5548445 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDataContract/getDataContractFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getDataContract/getDataContractFactory.js @@ -16,7 +16,7 @@ function getDataContractFactory(grpcTransport) { /** * Fetch Data Contract by id * @typedef {getDataContract} - * @param {Buffer} contractId + * @param {Uint8Array} contractId * @param {DAPIClientOptions & {prove: boolean}} [options] * @returns {Promise} */ @@ -24,12 +24,12 @@ function getDataContractFactory(grpcTransport) { const { GetDataContractRequestV0 } = GetDataContractRequest; const getDataContractRequest = new GetDataContractRequest(); - // need to convert objects inherited from Buffer to pure buffer as google protobuf + // need to convert objects inherited from Uint8Array to pure Uint8Array as google protobuf // doesn't support extended buffers // https://github.com/protocolbuffers/protobuf/blob/master/js/binary/utils.js#L1049 - if (Buffer.isBuffer(contractId)) { + if (contractId instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - contractId = Buffer.from(contractId); + contractId = new Uint8Array(contractId); } getDataContractRequest.setV0( diff --git a/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory.js b/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory.js index 1059c74bd58..183bcd3e57e 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory.js @@ -17,7 +17,7 @@ function getDataContractHistoryFactory(grpcTransport) { /** * Fetch Data Contract by id * @typedef {getDataContractHistory} - * @param {Buffer} contractId + * @param {Uint8Array} contractId * @param {bigint} [startAtMs] * @param {number} [limit] * @param {number} [offset] @@ -34,12 +34,12 @@ function getDataContractHistoryFactory(grpcTransport) { const { GetDataContractHistoryRequestV0 } = GetDataContractHistoryRequest; const getDataContractHistoryRequest = new GetDataContractHistoryRequest(); - // need to convert objects inherited from Buffer to pure buffer as google protobuf + // need to convert objects inherited from Uint8Array to pure Uint8Array as google protobuf // doesn't support extended buffers // https://github.com/protocolbuffers/protobuf/blob/master/js/binary/utils.js#L1049 - if (Buffer.isBuffer(contractId)) { + if (contractId instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - contractId = Buffer.from(contractId); + contractId = new Uint8Array(contractId); } getDataContractHistoryRequest.setV0( diff --git a/packages/js-dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js b/packages/js-dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js index 5340a5d3b0d..0f65018a1d3 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js @@ -2,7 +2,7 @@ const AbstractResponse = require('../response/AbstractResponse'); class GetDocumentsResponse extends AbstractResponse { /** - * @param {Buffer[]} documents + * @param {Uint8Array[]} documents * @param {Metadata} metadata * @param {Proof} [proof] */ @@ -13,7 +13,7 @@ class GetDocumentsResponse extends AbstractResponse { } /** - * @returns {Buffer[]} + * @returns {Uint8Array[]} */ getDocuments() { return this.documents; @@ -30,7 +30,7 @@ class GetDocumentsResponse extends AbstractResponse { return new GetDocumentsResponse( documents !== undefined - ? documents.getDocumentsList().map((document) => Buffer.from(document)) : [], + ? documents.getDocumentsList().map((document) => new Uint8Array(document)) : [], metadata, proof, ); diff --git a/packages/js-dapi-client/lib/methods/platform/getDocuments/getDocumentsFactory.js b/packages/js-dapi-client/lib/methods/platform/getDocuments/getDocumentsFactory.js index 4c086b21f78..7af4c1b3d20 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDocuments/getDocumentsFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getDocuments/getDocumentsFactory.js @@ -18,7 +18,7 @@ function getDocumentsFactory(grpcTransport) { /** * Fetch Documents from Drive * @typedef {getDocuments} - * @param {Buffer} contractId - Data Contract ID + * @param {Uint8Array} contractId - Data Contract ID * @param {string} type - Document type * @param {DAPIClientOptions & getDocumentsOptions & {prove: boolean}} [options] * @returns {Promise} @@ -44,15 +44,16 @@ function getDocumentsFactory(grpcTransport) { const { GetDocumentsRequestV0 } = GetDocumentsRequest; const getDocumentsRequest = new GetDocumentsRequest(); - // need to convert Identifier to pure buffer as google protobuf doesn't support extended buffers + // need to convert Identifier to pure Uint8Array as google protobuf doesn't support + // extended buffers // https://github.com/protocolbuffers/protobuf/blob/master/js/binary/utils.js#L1049 - // need to convert objects inherited from Buffer to pure buffer as google protobuf + // need to convert objects inherited from Uint8Array to pure Uint8Array as google protobuf // doesn't support extended buffers // https://github.com/protocolbuffers/protobuf/blob/master/js/binary/utils.js#L1049 - if (Buffer.isBuffer(contractId)) { + if (contractId instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - contractId = Buffer.from(contractId); + contractId = new Uint8Array(contractId); } getDocumentsRequest.setV0( diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js index 4fd843f6f92..15c72b156e5 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js @@ -34,6 +34,7 @@ class GetIdentitiesContractKeysResponse extends AbstractResponse { const keysEntries = identitiesKeys.getEntriesList(); identitiesKeysMap = keysEntries.reduce((acc, entry) => { + // wasm-dpp Identifier.from requires Node Buffer (not plain Uint8Array) const identityId = Identifier.from(Buffer.from(entry.getIdentityId())).toString(); if (!acc[identityId]) { acc[identityId] = {}; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js index 47140bfe0cc..2297531bf1e 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js @@ -17,8 +17,8 @@ function getIdentitiesContractKeysFactory(grpcTransport) { /** * Fetch the identities by public key hashes * @typedef {getIdentitiesContractKeys} - * @param {Buffer[]} identitiesIds - * @param {Buffer} contractId + * @param {Uint8Array[]} identitiesIds + * @param {Uint8Array} contractId * @param {IdentityPublicKey.PURPOSES[]} keyPurposes * @param {string | null} documentTypeName * @param {DAPIClientOptions & {prove: boolean}} [options] @@ -36,17 +36,16 @@ function getIdentitiesContractKeysFactory(grpcTransport) { // eslint-disable-next-line no-param-reassign identitiesIds = identitiesIds.map((id) => { - if (Buffer.isBuffer(id)) { - // eslint-disable-next-line no-param-reassign - id = Buffer.from(id); + if (id instanceof Uint8Array) { + return new Uint8Array(id); } return id; }); - if (Buffer.isBuffer(contractId)) { + if (contractId instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - contractId = Buffer.from(contractId); + contractId = new Uint8Array(contractId); } getIdentitiesContractKeysRequest.setV0( diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js index 718633fb569..a23864d959c 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js @@ -3,7 +3,7 @@ const InvalidResponseError = require('../response/errors/InvalidResponseError'); class GetIdentityResponse extends AbstractResponse { /** - * @param {Buffer} identity + * @param {Uint8Array} identity * @param {Metadata} metadata * @param {Proof} [proof] */ @@ -14,7 +14,7 @@ class GetIdentityResponse extends AbstractResponse { } /** - * @returns {Buffer} + * @returns {Uint8Array} */ getIdentity() { return this.identity; @@ -33,7 +33,7 @@ class GetIdentityResponse extends AbstractResponse { } return new GetIdentityResponse( - Buffer.from(proto.getV0().getIdentity()), + new Uint8Array(proto.getV0().getIdentity()), metadata, proof, ); diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentity/getIdentityFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentity/getIdentityFactory.js index 6179fe0233e..abafd51d699 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentity/getIdentityFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentity/getIdentityFactory.js @@ -16,19 +16,19 @@ function getIdentityFactory(grpcTransport) { /** * Fetch the identity by id * @typedef {getIdentity} - * @param {Buffer} id + * @param {Uint8Array} id * @param {DAPIClientOptions & {prove: boolean}} [options] * @returns {Promise} */ async function getIdentity(id, options = {}) { const { GetIdentityRequestV0 } = GetIdentityRequest; const getIdentityRequest = new GetIdentityRequest(); - // need to convert objects inherited from Buffer to pure buffer as google protobuf + // need to convert objects inherited from Uint8Array to pure Uint8Array as google protobuf // doesn't support extended buffers // https://github.com/protocolbuffers/protobuf/blob/master/js/binary/utils.js#L1049 - if (Buffer.isBuffer(id)) { + if (id instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - id = Buffer.from(id); + id = new Uint8Array(id); } getIdentityRequest.setV0( diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory.js index 93862ccff9a..e7141239cde 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory.js @@ -16,19 +16,19 @@ function getIdentityBalanceFactory(grpcTransport) { /** * Fetch the identity balance by id * @typedef {getIdentityBalance} - * @param {Buffer} id + * @param {Uint8Array} id * @param {DAPIClientOptions & {prove: boolean}} [options] * @returns {Promise} */ async function getIdentityBalance(id, options = {}) { const { GetIdentityBalanceRequestV0 } = GetIdentityBalanceRequest; const getIdentityBalanceRequest = new GetIdentityBalanceRequest(); - // need to convert objects inherited from Buffer to pure buffer as google protobuf + // need to convert objects inherited from Uint8Array to pure Uint8Array as google protobuf // doesn't support extended buffers // https://github.com/protocolbuffers/protobuf/blob/master/js/binary/utils.js#L1049 - if (Buffer.isBuffer(id)) { + if (id instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - id = Buffer.from(id); + id = new Uint8Array(id); } getIdentityBalanceRequest.setV0( diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js index 86f97aecfe7..b67fa3d6cdf 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js @@ -2,7 +2,7 @@ const AbstractResponse = require('../response/AbstractResponse'); class GetIdentityByPublicKeyHashResponse extends AbstractResponse { /** - * @param {Buffer} identities + * @param {Uint8Array} identities * @param identity * @param {Metadata} metadata * @param {Proof} [proof] @@ -14,7 +14,7 @@ class GetIdentityByPublicKeyHashResponse extends AbstractResponse { } /** - * @returns {Buffer[]} + * @returns {Uint8Array[]} */ getIdentity() { return this.identity; @@ -30,7 +30,7 @@ class GetIdentityByPublicKeyHashResponse extends AbstractResponse { const identity = proto.getV0().getIdentity(); return new GetIdentityByPublicKeyHashResponse( - Buffer.from(identity), + new Uint8Array(identity), metadata, proof, ); diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.js index 59aec51dc87..683a01dc465 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.js @@ -16,8 +16,8 @@ function getIdentityContractNonceFactory(grpcTransport) { /** * Fetch the version upgrade votes status * @typedef {getIdentityContractNonce} - * @param {Buffer} identityId - * @param {Buffer} contractId + * @param {Uint8Array} identityId + * @param {Uint8Array} contractId * @param {DAPIClientOptions & {prove: boolean}} [options] * @returns {Promise} */ @@ -29,14 +29,14 @@ function getIdentityContractNonceFactory(grpcTransport) { // eslint-disable-next-line max-len const getIdentityContractNonceRequest = new GetIdentityContractNonceRequest(); - if (Buffer.isBuffer(identityId)) { + if (identityId instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - identityId = Buffer.from(identityId); + identityId = new Uint8Array(identityId); } - if (Buffer.isBuffer(contractId)) { + if (contractId instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - contractId = Buffer.from(contractId); + contractId = new Uint8Array(contractId); } getIdentityContractNonceRequest.setV0( diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js index 4bc32a03a65..772e6678f3c 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js @@ -23,16 +23,16 @@ function getIdentityKeysFactory(grpcTransport) { /** * Fetch the version upgrade votes status * @typedef {getIdentityKeys} - * @param {Buffer} identityId + * @param {Uint8Array} identityId * @param {number[]=} keyIds * @param {number} limit * @param {DAPIClientOptions & {prove: boolean}} [options] * @returns {Promise} */ async function getIdentityKeys(identityId, keyIds, limit = 100, options = {}) { - if (Buffer.isBuffer(identityId)) { + if (identityId instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - identityId = Buffer.from(identityId); + identityId = new Uint8Array(identityId); } const getIdentityKeysRequest = new GetIdentityKeysRequest(); diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/getIdentityNonceFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/getIdentityNonceFactory.js index 217cfe48c34..a0a62dc2fa0 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/getIdentityNonceFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/getIdentityNonceFactory.js @@ -16,7 +16,7 @@ function getIdentityNonceFactory(grpcTransport) { /** * Fetch the version upgrade votes status * @typedef {getIdentityNonce} - * @param {Buffer} identityId + * @param {Uint8Array} identityId * @param {DAPIClientOptions & {prove: boolean}} [options] * @returns {Promise} */ @@ -28,9 +28,9 @@ function getIdentityNonceFactory(grpcTransport) { // eslint-disable-next-line max-len const getIdentityNonceRequest = new GetIdentityNonceRequest(); - if (Buffer.isBuffer(identityId)) { + if (identityId instanceof Uint8Array) { // eslint-disable-next-line no-param-reassign - identityId = Buffer.from(identityId); + identityId = new Uint8Array(identityId); } getIdentityNonceRequest.setV0( diff --git a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js index a28ec23e6c1..e072443c09c 100644 --- a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js @@ -1,6 +1,7 @@ const AbstractResponse = require('../response/AbstractResponse'); const VersionSignal = require('./VersionSignal'); const InvalidResponseError = require('../response/errors/InvalidResponseError'); +const { bytesToHex } = require('../../../utils/bytes'); class GetProtocolVersionUpgradeVoteStatusResponse extends AbstractResponse { /** @@ -40,7 +41,7 @@ class GetProtocolVersionUpgradeVoteStatusResponse extends AbstractResponse { const versionSignalsList = versions && versions.getVersionSignalsList(); if (versionSignalsList) { versionSignals = versionSignalsList.map((versionSignal) => new VersionSignal( - Buffer.from(versionSignal.getProTxHash()).toString('hex'), + bytesToHex(new Uint8Array(versionSignal.getProTxHash())), versionSignal.getVersion(), )); } diff --git a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js index bc79c54315c..e7ecf26c02d 100644 --- a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js @@ -7,6 +7,7 @@ const { const GetProtocolVersionUpgradeVoteStatusResponse = require('./GetProtocolVersionUpgradeVoteStatusResponse'); const InvalidResponseError = require('../response/errors/InvalidResponseError'); +const { hexToBytes } = require('../../../utils/bytes'); /** * @param {GrpcTransport} grpcTransport @@ -31,7 +32,7 @@ function getProtocolVersionUpgradeVoteStatusFactory(grpcTransport) { getProtocolVersionUpgradeVoteStatusRequest.setV0( new GetProtocolVersionUpgradeVoteStatusRequestV0() - .setStartProTxHash(Buffer.from(startProTxHash, 'hex')) + .setStartProTxHash(hexToBytes(startProTxHash)) .setCount(count) .setProve(!!options.prove), ); diff --git a/packages/js-dapi-client/lib/methods/platform/getStatus/GetStatusResponse.js b/packages/js-dapi-client/lib/methods/platform/getStatus/GetStatusResponse.js index 1509b69b64a..ff465a82d00 100644 --- a/packages/js-dapi-client/lib/methods/platform/getStatus/GetStatusResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getStatus/GetStatusResponse.js @@ -4,6 +4,7 @@ const ChainStatus = require('./ChainStatus'); const TimeStatus = require('./TimeStatus'); const StateSyncStatus = require('./StateSyncStatus'); const NetworkStatus = require('./NetworkStatus'); +const { bytesToHex } = require('../../../utils/bytes'); class GetStatusResponse { /** @@ -92,17 +93,17 @@ class GetStatusResponse { driveNextEpochProtocol, ); - const nodeId = Buffer.from(v0.getNode().getId()).toString('hex'); - const proTxHash = Buffer.from(v0.getNode().getProTxHash()).toString('hex'); + const nodeId = bytesToHex(new Uint8Array(v0.getNode().getId())); + const proTxHash = bytesToHex(new Uint8Array(v0.getNode().getProTxHash())); const node = new NodeStatus(nodeId, proTxHash); const catchingUp = v0.getChain().getCatchingUp(); - const latestBlockHash = Buffer.from(v0.getChain().getLatestBlockHash()).toString('hex'); - const latestAppHash = Buffer.from(v0.getChain().getLatestAppHash()).toString('hex'); + const latestBlockHash = bytesToHex(new Uint8Array(v0.getChain().getLatestBlockHash())); + const latestAppHash = bytesToHex(new Uint8Array(v0.getChain().getLatestAppHash())); const latestBlockHeight = BigInt(v0.getChain().getLatestBlockHeight()); - const earliestBlockHash = Buffer.from(v0.getChain().getEarliestBlockHash()).toString('hex'); - const earliestAppHash = Buffer.from(v0.getChain().getEarliestAppHash()).toString('hex'); + const earliestBlockHash = bytesToHex(new Uint8Array(v0.getChain().getEarliestBlockHash())); + const earliestAppHash = bytesToHex(new Uint8Array(v0.getChain().getEarliestAppHash())); const earliestBlockHeight = BigInt(v0.getChain().getEarliestBlockHeight()); const maxPeerBlockHeight = BigInt(v0.getChain().getMaxPeerBlockHeight()); const coreChainLockedHeight = v0.getChain().getCoreChainLockedHeight(); diff --git a/packages/js-dapi-client/lib/methods/platform/response/Proof.js b/packages/js-dapi-client/lib/methods/platform/response/Proof.js index 56111ac5458..9d284ea969a 100644 --- a/packages/js-dapi-client/lib/methods/platform/response/Proof.js +++ b/packages/js-dapi-client/lib/methods/platform/response/Proof.js @@ -1,9 +1,9 @@ class Proof { /** * @param {object} properties - * @param {Buffer} properties.merkleProof - * @param {Buffer} properties.quorumHash - * @param {Buffer} properties.signature + * @param {Uint8Array} properties.merkleProof + * @param {Uint8Array} properties.quorumHash + * @param {Uint8Array} properties.signature * @param {number} properties.round */ constructor(properties) { @@ -14,21 +14,21 @@ class Proof { } /** - * @returns {Buffer} + * @returns {Uint8Array} */ getGrovedbProof() { return this.merkleProof; } /** - * @returns {Buffer} + * @returns {Uint8Array} */ getQuorumHash() { return this.quorumHash; } /** - * @returns {Buffer} + * @returns {Uint8Array} */ getSignature() { return this.signature; @@ -48,9 +48,9 @@ class Proof { */ static createFromProto(proofProto) { return new Proof({ - merkleProof: Buffer.from(proofProto.getGrovedbProof()), - quorumHash: Buffer.from(proofProto.getQuorumHash()), - signature: Buffer.from(proofProto.getSignature()), + merkleProof: new Uint8Array(proofProto.getGrovedbProof()), + quorumHash: new Uint8Array(proofProto.getQuorumHash()), + signature: new Uint8Array(proofProto.getSignature()), round: proofProto.getRound(), }); } diff --git a/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/WaitForStateTransitionResultResponse.js b/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/WaitForStateTransitionResultResponse.js index 836987a2376..fad4c5cbc2f 100644 --- a/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/WaitForStateTransitionResultResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/WaitForStateTransitionResultResponse.js @@ -38,7 +38,7 @@ class WaitForStateTransitionResultResponse extends AbstractResponse { let data; if (proto.getV0().getError().getData()) { - data = Buffer.from(proto.getV0().getError().getData()); + data = new Uint8Array(proto.getV0().getError().getData()); } error = new ErrorResult( diff --git a/packages/js-dapi-client/lib/test/fixtures/getProofFixture.js b/packages/js-dapi-client/lib/test/fixtures/getProofFixture.js index 274b9f8a70f..a5710ea1ee3 100644 --- a/packages/js-dapi-client/lib/test/fixtures/getProofFixture.js +++ b/packages/js-dapi-client/lib/test/fixtures/getProofFixture.js @@ -1,15 +1,17 @@ +const { hexToBytes, base64ToBytes } = require('../../utils/bytes'); + /** * @returns {{ - * merkleProof: Buffer, - * signature: Buffer, - * quorumHash: Buffer + * merkleProof: Uint8Array, + * signature: Uint8Array, + * quorumHash: Uint8Array * }} */ function getProofFixture() { return { - quorumHash: Buffer.from('AQEBAQEBAQEBAQEB', 'base64'), - signature: Buffer.from('AgICAgICAgICAgIC', 'base64'), - merkleProof: Buffer.from('0100000001f0faf5f55674905a68eba1be2f946e667c1cb5010101', 'hex'), + quorumHash: base64ToBytes('AQEBAQEBAQEBAQEB'), + signature: base64ToBytes('AgICAgICAgICAgIC'), + merkleProof: hexToBytes('0100000001f0faf5f55674905a68eba1be2f946e667c1cb5010101'), round: 42, }; } diff --git a/packages/js-dapi-client/lib/test/fixtures/getStatusFixture.js b/packages/js-dapi-client/lib/test/fixtures/getStatusFixture.js index 1336e117372..49dbf60621b 100644 --- a/packages/js-dapi-client/lib/test/fixtures/getStatusFixture.js +++ b/packages/js-dapi-client/lib/test/fixtures/getStatusFixture.js @@ -1,3 +1,5 @@ +const { base64ToBytes } = require('../../utils/bytes'); + /** * */ @@ -22,16 +24,16 @@ function getStatusFixture() { }, }, node: { - id: new Uint8Array(Buffer.from('QbMI9zfKnjn2e1UxWJAxmKiMUW4=', 'base64')), - proTxHash: new Uint8Array(Buffer.from('s7V0hXG2D+mtEScV1qUXJdblpSqcOvX9NqFyTPUNhi8=', 'base64')), + id: base64ToBytes('QbMI9zfKnjn2e1UxWJAxmKiMUW4='), + proTxHash: base64ToBytes('s7V0hXG2D+mtEScV1qUXJdblpSqcOvX9NqFyTPUNhi8='), }, chain: { catchingUp: false, - latestBlockHash: new Uint8Array(Buffer.from('mVDwGtY2oJSaLLgv3WpLp2dFDyFEtqhD4z1gl2OJceY=', 'base64')), - latestAppHash: new Uint8Array(Buffer.from('jHgEBK8aZ74TUKcUGN58EFzUNvNsLboOgYe6eH/JetU=', 'base64')), + latestBlockHash: base64ToBytes('mVDwGtY2oJSaLLgv3WpLp2dFDyFEtqhD4z1gl2OJceY='), + latestAppHash: base64ToBytes('jHgEBK8aZ74TUKcUGN58EFzUNvNsLboOgYe6eH/JetU='), latestBlockHeight: '94461', - earliestBlockHash: new Uint8Array(Buffer.from('CPoCwn7AOQujAeT8fj1+rbNQyBk+PmKgk2iXBuOiC/o=', 'base64')), - earliestAppHash: new Uint8Array(Buffer.from('vwzLnKBxugGubmegwJD5eAPSbVbWddzVExeBy8rI7I8=', 'base64')), + earliestBlockHash: base64ToBytes('CPoCwn7AOQujAeT8fj1+rbNQyBk+PmKgk2iXBuOiC/o='), + earliestAppHash: base64ToBytes('vwzLnKBxugGubmegwJD5eAPSbVbWddzVExeBy8rI7I8='), earliestBlockHeight: '1', maxPeerBlockHeight: '94461', coreChainLockedHeight: 1187358, diff --git a/packages/js-dapi-client/lib/test/mocks/mockHeadersChain.js b/packages/js-dapi-client/lib/test/mocks/mockHeadersChain.js index 2ae0a911a27..3c7a04e3752 100644 --- a/packages/js-dapi-client/lib/test/mocks/mockHeadersChain.js +++ b/packages/js-dapi-client/lib/test/mocks/mockHeadersChain.js @@ -1,6 +1,7 @@ const X11 = require('wasm-x11-hash'); const { BlockHeader, configure } = require('@dashevo/dashcore-lib'); const { genesis } = require('@dashevo/dash-spv'); +const { hexToBytes } = require('../../utils/bytes'); const getRoot = (network) => { switch (network) { @@ -38,8 +39,8 @@ const mockHeadersChain = async (network, length, root) => { for (let i = 0; i < length - 1; i += 1) { const header = new BlockHeader({ version: prevHeader.version, - prevHash: Buffer.from(prevHeader.hash, 'hex').reverse(), - merkleRoot: Buffer.alloc(32), + prevHash: hexToBytes(prevHeader.hash).reverse(), + merkleRoot: new Uint8Array(32), time: prevHeader.time + BLOCK_TIME, bits: prevHeader.bits, nonce: 3861367235, diff --git a/packages/js-dapi-client/lib/transport/GrpcTransport/createGrpcTransportError.js b/packages/js-dapi-client/lib/transport/GrpcTransport/createGrpcTransportError.js index e5cae56b753..2fdc053c8b1 100644 --- a/packages/js-dapi-client/lib/transport/GrpcTransport/createGrpcTransportError.js +++ b/packages/js-dapi-client/lib/transport/GrpcTransport/createGrpcTransportError.js @@ -14,6 +14,7 @@ const ServerError = require('../errors/response/ServerError'); const InvalidRequestError = require('../errors/response/InvalidRequestError'); const InvalidRequestDPPError = require('../errors/response/InvalidRequestDPPError'); const InternalServerError = require('./errors/InternalServerError'); +const { base64ToBytes } = require('../../utils/bytes'); const INVALID_REQUEST_CODES = [ GrpcErrorCodes.INVALID_ARGUMENT, @@ -57,10 +58,13 @@ async function createGrpcTransportError(grpcError, dapiAddress) { const metadata = parseMetadata(grpcError.metadata) || {}; - // Error data + // Error data — grpc-js passes raw bytes; grpc-web passes a base64 string. + // Original Buffer.from(x, 'base64') silently passed through bytes; reproduce that. const driveErrorData = metadata['drive-error-data-bin']; if (driveErrorData) { - const encodedData = Buffer.from(driveErrorData, 'base64'); + const encodedData = typeof driveErrorData === 'string' + ? base64ToBytes(driveErrorData) + : new Uint8Array(driveErrorData); data = cbor.decode(encodedData); } @@ -70,10 +74,12 @@ async function createGrpcTransportError(grpcError, dapiAddress) { code = Number(driveErrorCode); } - // Error stack + // Error stack — same dual-format handling as driveErrorData above. const driveErrorStack = metadata['stack-bin']; if (driveErrorStack) { - const encodedStack = Buffer.from(driveErrorStack, 'base64'); + const encodedStack = typeof driveErrorStack === 'string' + ? base64ToBytes(driveErrorStack) + : new Uint8Array(driveErrorStack); data.stack = cbor.decode(encodedStack); } @@ -124,7 +130,10 @@ async function createGrpcTransportError(grpcError, dapiAddress) { throw new Error(`Can't deserialize consensus error ${code}: serialized data is missing`); } - const consensusErrorBytes = Buffer.from(consensusErrorString, 'base64'); + // grpc-js passes raw bytes; grpc-web passes a base64 string. Handle both. + const consensusErrorBytes = typeof consensusErrorString === 'string' + ? base64ToBytes(consensusErrorString) + : new Uint8Array(consensusErrorString); const consensusError = deserializeConsensusError(consensusErrorBytes); delete data.serializedError; diff --git a/packages/js-dapi-client/lib/utils/bytes.js b/packages/js-dapi-client/lib/utils/bytes.js new file mode 100644 index 00000000000..bed5176b2d0 --- /dev/null +++ b/packages/js-dapi-client/lib/utils/bytes.js @@ -0,0 +1,63 @@ +function hexToBytes(hex) { + if (typeof hex !== 'string') { + throw new TypeError('hex must be a string'); + } + if (hex.length % 2 !== 0) { + throw new Error('hex must have even length'); + } + const out = new Uint8Array(hex.length / 2); + for (let i = 0; i < out.length; i += 1) { + out[i] = parseInt(hex.substr(i * 2, 2), 16); + } + return out; +} + +function bytesToHex(bytes) { + return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join(''); +} + +function base64ToBytes(b64) { + const bin = atob(b64); + const out = new Uint8Array(bin.length); + for (let i = 0; i < bin.length; i += 1) { + out[i] = bin.charCodeAt(i); + } + return out; +} + +function bytesToBase64(bytes) { + let bin = ''; + for (let i = 0; i < bytes.length; i += 1) { + bin += String.fromCharCode(bytes[i]); + } + return btoa(bin); +} + +function concatBytes(arrays) { + let total = 0; + for (const a of arrays) total += a.length; + const out = new Uint8Array(total); + let offset = 0; + for (const a of arrays) { + out.set(a, offset); + offset += a.length; + } + return out; +} + +function bytesEqual(a, b) { + if (a.length !== b.length) return false; + for (let i = 0; i < a.length; i += 1) { + if (a[i] !== b[i]) return false; + } + return true; +} + +module.exports = { + hexToBytes, + bytesToHex, + base64ToBytes, + bytesToBase64, + concatBytes, + bytesEqual, +}; diff --git a/packages/js-dapi-client/test/integration/methods/core/CoreMethodsFacade.spec.js b/packages/js-dapi-client/test/integration/methods/core/CoreMethodsFacade.spec.js index d7eeecc6875..81a67152bc5 100644 --- a/packages/js-dapi-client/test/integration/methods/core/CoreMethodsFacade.spec.js +++ b/packages/js-dapi-client/test/integration/methods/core/CoreMethodsFacade.spec.js @@ -36,7 +36,7 @@ describe('CoreMethodsFacade', () => { response.setTransactionId('4f46066bd50cc2684484407696b7949e82bd906ea92c040f59a97cba47ed8176'); grpcTransportMock.request.resolves(response); - const transaction = Buffer.from('transaction'); + const transaction = new TextEncoder().encode('transaction'); await coreMethods.broadcastTransaction(transaction); expect(grpcTransportMock.request).to.be.calledOnce(); @@ -57,7 +57,7 @@ describe('CoreMethodsFacade', () => { describe('#getBlockByHash', () => { it('should get block by hash', async () => { - const block = Buffer.from('block'); + const block = new TextEncoder().encode('block'); const response = new GetBlockResponse(); response.setBlock(block); grpcTransportMock.request.resolves(response); @@ -70,7 +70,7 @@ describe('CoreMethodsFacade', () => { describe('#getBlockByHeight', () => { it('should get block by height', async () => { - const block = Buffer.from('block'); + const block = new TextEncoder().encode('block'); const response = new GetBlockResponse(); response.setBlock(block); grpcTransportMock.request.resolves(response); @@ -124,10 +124,10 @@ describe('CoreMethodsFacade', () => { describe('#getTransaction', () => { it('should get transaction', async () => { - const transaction = Buffer.from('transaction'); + const transaction = new TextEncoder().encode('transaction'); const response = new GetTransactionResponse(); response.setTransaction(transaction); - response.setBlockHash(Buffer.from('blockHash')); + response.setBlockHash(new TextEncoder().encode('blockHash')); response.setHeight(1); response.setConfirmations(2); diff --git a/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js b/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js index fbb1f32ed5c..a5288db5d52 100644 --- a/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js +++ b/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js @@ -25,6 +25,7 @@ const getDataContractFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getD const getIdentityFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture'); const PlatformMethodsFacade = require('../../../../lib/methods/platform/PlatformMethodsFacade'); +const { hexToBytes, bytesToHex } = require('../../../../lib/utils/bytes'); const { WaitForStateTransitionResultResponseV0 } = WaitForStateTransitionResultResponse; const { GetIdentityResponseV0 } = GetIdentityResponse; @@ -164,8 +165,8 @@ describe('PlatformMethodsFacade', () => { grpcTransportMock.request.resolves(response); await platformMethods.getIdentitiesContractKeys([ - Buffer.alloc(32).fill(1), - ], Buffer.alloc(32).fill(2), [KeyPurpose.ENCRYPTION]); + new Uint8Array(32).fill(1), + ], new Uint8Array(32).fill(2), [KeyPurpose.ENCRYPTION]); expect(grpcTransportMock.request).to.be.calledOnce(); }); @@ -182,7 +183,7 @@ describe('PlatformMethodsFacade', () => { grpcTransportMock.request.resolves(response); await platformMethods.waitForStateTransitionResult( - Buffer.from('6f49655a2906852a38e473dd47574fb70b8b7c4e5cee9ea8e7da3f07b970c421', 'hex'), + hexToBytes('6f49655a2906852a38e473dd47574fb70b8b7c4e5cee9ea8e7da3f07b970c421'), false, ); @@ -218,8 +219,8 @@ describe('PlatformMethodsFacade', () => { describe('#getProtocolVersionUpgradeVoteStatus', () => { it('should get version upgrade votes status', async () => { - const startProTxHash = Buffer.alloc(32).fill('a').toString('hex'); - const proTxHash = Buffer.alloc(32).fill('b').toString('hex'); + const startProTxHash = bytesToHex(new Uint8Array(32).fill(0x61)); + const proTxHash = bytesToHex(new Uint8Array(32).fill(0x62)); const { VersionSignal, VersionSignals } = GetProtocolVersionUpgradeVoteStatusResponseV0; @@ -277,7 +278,7 @@ describe('PlatformMethodsFacade', () => { grpcTransportMock.request.resolves(response); - await platformMethods.getIdentityContractNonce(Buffer.alloc(32), Buffer.alloc(32)); + await platformMethods.getIdentityContractNonce(new Uint8Array(32), new Uint8Array(32)); expect(grpcTransportMock.request).to.be.calledOnce(); }); @@ -295,7 +296,7 @@ describe('PlatformMethodsFacade', () => { grpcTransportMock.request.resolves(response); - await platformMethods.getIdentityNonce(Buffer.alloc(32), Buffer.alloc(32)); + await platformMethods.getIdentityNonce(new Uint8Array(32), new Uint8Array(32)); expect(grpcTransportMock.request).to.be.calledOnce(); }); @@ -309,13 +310,13 @@ describe('PlatformMethodsFacade', () => { response.setV0( new GetIdentityKeysResponseV0() - .setKeys(new Keys().setKeysBytesList([Buffer.alloc(41), Buffer.alloc(46)])) + .setKeys(new Keys().setKeysBytesList([new Uint8Array(41), new Uint8Array(46)])) .setMetadata(new ResponseMetadata()), ); grpcTransportMock.request.resolves(response); - await platformMethods.getIdentityKeys(Buffer.alloc(32), [0, 1], 100, {}); + await platformMethods.getIdentityKeys(new Uint8Array(32), [0, 1], 100, {}); expect(grpcTransportMock.request).to.be.calledOnce(); }); diff --git a/packages/js-dapi-client/test/unit/methods/core/broadcastTransactionFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/broadcastTransactionFactory.spec.js index 1b7ef038185..d7cba51b8f8 100644 --- a/packages/js-dapi-client/test/unit/methods/core/broadcastTransactionFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/broadcastTransactionFactory.spec.js @@ -25,7 +25,7 @@ describe('broadcastTransactionFactory', () => { grpcTransportMock, ); - transaction = Buffer.from('transaction'); + transaction = new TextEncoder().encode('transaction'); id = '4f46066bd50cc2684484407696b7949e82bd906ea92c040f59a97cba47ed8176'; }); diff --git a/packages/js-dapi-client/test/unit/methods/core/getBlockByHashFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getBlockByHashFactory.spec.js index d9548cf6b69..e16e60130d1 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getBlockByHashFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getBlockByHashFactory.spec.js @@ -14,7 +14,7 @@ describe('getBlockByHashFactory', () => { let block; beforeEach(function beforeEach() { - block = Buffer.from('block'); + block = new TextEncoder().encode('block'); const response = new GetBlockResponse(); response.setBlock(block); @@ -36,7 +36,7 @@ describe('getBlockByHashFactory', () => { const request = new GetBlockRequest(); request.setHash(hash); - expect(result).to.be.instanceof(Buffer); + expect(result).to.be.instanceof(Uint8Array); expect(result).to.deep.equal(block); expect(grpcTransportMock.request).to.be.calledOnceWithExactly( CorePromiseClient, diff --git a/packages/js-dapi-client/test/unit/methods/core/getBlockByHeightFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getBlockByHeightFactory.spec.js index 5a6ad896648..1ea27f50887 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getBlockByHeightFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getBlockByHeightFactory.spec.js @@ -14,7 +14,7 @@ describe('getBlockByHeightFactory', () => { let block; beforeEach(function beforeEach() { - block = Buffer.from('block'); + block = new TextEncoder().encode('block'); const response = new GetBlockResponse(); response.setBlock(block); @@ -36,7 +36,7 @@ describe('getBlockByHeightFactory', () => { const request = new GetBlockRequest(); request.setHeight(height); - expect(result).to.be.instanceof(Buffer); + expect(result).to.be.instanceof(Uint8Array); expect(result).to.deep.equal(block); expect(grpcTransportMock.request).to.be.calledOnceWithExactly( CorePromiseClient, diff --git a/packages/js-dapi-client/test/unit/methods/core/getBlockchainStatusFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getBlockchainStatusFactory.spec.js index bceb20a0ec6..f2fca4360d2 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getBlockchainStatusFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getBlockchainStatusFactory.spec.js @@ -7,6 +7,7 @@ const { } = require('@dashevo/dapi-grpc'); const getBlockchainStatusFactory = require('../../../../lib/methods/core/getBlockchainStatusFactory'); +const { base64ToBytes } = require('../../../../lib/utils/bytes'); describe('getBlockchainStatusFactory', () => { let getBlockchainStatus; @@ -25,7 +26,7 @@ describe('getBlockchainStatusFactory', () => { response.setStatus(GetBlockchainStatusResponse.Status.READY); const chain = new GetBlockchainStatusResponse.Chain(); - chain.setBestBlockHash(Buffer.from('bestBlockHash')); + chain.setBestBlockHash(new TextEncoder().encode('bestBlockHash')); response.setChain(chain); @@ -53,7 +54,8 @@ describe('getBlockchainStatusFactory', () => { status: 'READY', }; - expectedResult.chain.bestBlockHash = Buffer.from(expectedResult.chain.bestBlockHash, 'base64'); + // toObject returns bestBlockHash as base64 string; production code converts to Uint8Array + expectedResult.chain.bestBlockHash = base64ToBytes(expectedResult.chain.bestBlockHash); expect(result).to.deep.equal(expectedResult); }); diff --git a/packages/js-dapi-client/test/unit/methods/core/getMasternodeStatusFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getMasternodeStatusFactory.spec.js index fdd1b569e53..2a74dac3ba7 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getMasternodeStatusFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getMasternodeStatusFactory.spec.js @@ -45,7 +45,7 @@ describe('getMasternodeStatusFactory', () => { const expectedResult = { ...response.toObject(), - proTxHash: Buffer.alloc(0), + proTxHash: new Uint8Array(0), status: 'READY', }; diff --git a/packages/js-dapi-client/test/unit/methods/core/getTransaction/GetTransactionResponse.spec.js b/packages/js-dapi-client/test/unit/methods/core/getTransaction/GetTransactionResponse.spec.js index 294e9a6d253..6185d629db1 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getTransaction/GetTransactionResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getTransaction/GetTransactionResponse.spec.js @@ -13,8 +13,8 @@ describe('GetTransactionResponse', () => { beforeEach(() => { response = { - transaction: Buffer.from('transaction'), - blockHash: Buffer.from('blockHash'), + transaction: new TextEncoder().encode('transaction'), + blockHash: new TextEncoder().encode('blockHash'), height: 10, confirmations: 42, instantLocked: true, @@ -72,8 +72,8 @@ describe('GetTransactionResponse', () => { const instance = GetTransactionResponse.createFromProto(proto); expect(instance).to.be.an.instanceOf(GetTransactionResponse); - expect(instance.transaction).to.deep.equal(Buffer.from(proto.getTransaction())); - expect(instance.blockHash).to.deep.equal(Buffer.from(proto.getBlockHash())); + expect(instance.transaction).to.deep.equal(new Uint8Array(proto.getTransaction())); + expect(instance.blockHash).to.deep.equal(new Uint8Array(proto.getBlockHash())); expect(instance.height).to.deep.equal(proto.getHeight()); expect(instance.confirmations).to.deep.equal(proto.getConfirmations()); expect(instance.instantLocked).to.deep.equal(proto.getIsInstantLocked()); diff --git a/packages/js-dapi-client/test/unit/methods/core/getTransaction/getTransactionFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getTransaction/getTransactionFactory.spec.js index cbbe9312186..b7c9895e9b2 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getTransaction/getTransactionFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getTransaction/getTransactionFactory.spec.js @@ -20,8 +20,8 @@ describe('getTransactionFactory', () => { let isInstantLocked; beforeEach(function beforeEach() { - transaction = Buffer.from('transaction'); - blockHash = Buffer.from('blockHash'); + transaction = new TextEncoder().encode('transaction'); + blockHash = new TextEncoder().encode('blockHash'); height = 42; confirmations = 3; isChainLocked = true; diff --git a/packages/js-dapi-client/test/unit/methods/core/subscribeToBlockHeadersWithChainLocksFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/subscribeToBlockHeadersWithChainLocksFactory.spec.js index 32ce15e4a45..6132eccb95f 100644 --- a/packages/js-dapi-client/test/unit/methods/core/subscribeToBlockHeadersWithChainLocksFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/subscribeToBlockHeadersWithChainLocksFactory.spec.js @@ -9,6 +9,7 @@ const { EventEmitter } = require('events'); const subscribeToBlockHeadersWithChainLocksFactory = require('../../../../lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory'); const DAPIClientError = require('../../../../lib/errors/DAPIClientError'); +const { hexToBytes } = require('../../../../lib/utils/bytes'); describe('subscribeToBlockHeadersWithChainLocks', () => { let subscribeToBlockHeadersWithChainLocks; @@ -50,7 +51,7 @@ describe('subscribeToBlockHeadersWithChainLocks', () => { const request = new BlockHeadersWithChainLocksRequest(); request.setFromBlockHeight(1); - request.setFromBlockHash(Buffer.from(options.fromBlockHash, 'hex')); + request.setFromBlockHash(hexToBytes(options.fromBlockHash)); request.setCount(options.count); expect(grpcTransportMock.request).to.be.calledWith( diff --git a/packages/js-dapi-client/test/unit/methods/core/subscribeToTransactionsWithProofsFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/subscribeToTransactionsWithProofsFactory.spec.js index 7fb33af14a8..f77c6d3c658 100644 --- a/packages/js-dapi-client/test/unit/methods/core/subscribeToTransactionsWithProofsFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/subscribeToTransactionsWithProofsFactory.spec.js @@ -13,6 +13,7 @@ const { EventEmitter } = require('events'); const subscribeToTransactionsWithProofsFactory = require('../../../../lib/methods/core/subscribeToTransactionsWithProofsFactory'); const DAPIClientError = require('../../../../lib/errors/DAPIClientError'); +const { hexToBytes } = require('../../../../lib/utils/bytes'); describe('subscribeToTransactionsWithProofsFactory', () => { let subscribeToTransactionsWithProofs; @@ -54,7 +55,7 @@ describe('subscribeToTransactionsWithProofsFactory', () => { request.setBloomFilter(bloomFilterMessage); request.setFromBlockHeight(options.fromBlockHeight); request.setCount(options.count); - request.setFromBlockHash(Buffer.from(options.fromBlockHash, 'hex')); + request.setFromBlockHash(hexToBytes(options.fromBlockHash)); expect(grpcTransportMock.request).to.be.calledOnceWithExactly( CorePromiseClient, diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/GetDataContractResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/GetDataContractResponse.spec.js index 7ac39250489..2249c9e7dd9 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/GetDataContractResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/GetDataContractResponse.spec.js @@ -41,7 +41,7 @@ describe('GetDataContractResponse', () => { it('should return proof', () => { getDataContractResponse = new GetDataContractResponseClass( - Buffer.alloc(0), + new Uint8Array(0), new Metadata(metadataFixture), new Proof(proofFixture), ); @@ -49,7 +49,7 @@ describe('GetDataContractResponse', () => { const dataContract = getDataContractResponse.getDataContract(); const proof = getDataContractResponse.getProof(); - expect(dataContract).to.deep.equal(Buffer.alloc(0)); + expect(dataContract).to.deep.equal(new Uint8Array(0)); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); @@ -113,7 +113,7 @@ describe('GetDataContractResponse', () => { getDataContractResponse = GetDataContractResponseClass.createFromProto(proto); expect(getDataContractResponse).to.be.an.instanceOf(GetDataContractResponseClass); - expect(getDataContractResponse.getDataContract()).to.deep.equal(Buffer.alloc(0)); + expect(getDataContractResponse.getDataContract()).to.deep.equal(new Uint8Array(0)); expect(getDataContractResponse.getMetadata().getHeight()) .to.deep.equal(BigInt(metadataFixture.height)); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js index 4d725d0256f..18bf80a492d 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js @@ -118,7 +118,7 @@ describe('getDataContractFactory', () => { options, ]); - expect(result.getDataContract()).to.deep.equal(Buffer.alloc(0)); + expect(result.getDataContract()).to.deep.equal(new Uint8Array(0)); expect(result.getProof()).to.be.an.instanceOf(ProofClass); expect(result.getProof().getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); @@ -146,7 +146,7 @@ describe('getDataContractFactory', () => { const request = new GetDataContractRequest(); request.setV0( new GetDataContractRequestV0() - .setId(contractId.toBuffer()) + .setId(new Uint8Array(contractId.toBuffer())) .setProve(false), ); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js index b8597e45c22..5bd2c30006b 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js @@ -190,7 +190,7 @@ describe('getDataContractHistoryFactory', () => { const request = new GetDataContractHistoryRequest(); request.setV0( new GetDataContractHistoryRequestV0() - .setId(contractId.toBuffer()) + .setId(new Uint8Array(contractId.toBuffer())) .setLimit(new UInt32Value([10])) .setOffset(new UInt32Value([0])) .setStartAtMs('0') diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js index 777ceb112ff..afa2b6e92f9 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js @@ -28,7 +28,7 @@ describe('GetDocumentsResponse', () => { proofFixture = getProofFixture(); serializedDocuments = documentsFixture - .map((document) => Buffer.from(JSON.stringify(document))); + .map((document) => new TextEncoder().encode(JSON.stringify(document))); const { GetDocumentsResponseV0 } = GetDocumentsResponse; proto = new GetDocumentsResponse(); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/getDocumentsFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDocuments/getDocumentsFactory.spec.js index 02f99ae7fca..1486f0080b9 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/getDocumentsFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDocuments/getDocumentsFactory.spec.js @@ -53,7 +53,7 @@ describe('getDocumentsFactory', () => { documentsFixture = await getDocumentsFixture(); serializedDocuments = documentsFixture - .map((document) => Buffer.from(JSON.stringify(document))); + .map((document) => new TextEncoder().encode(JSON.stringify(document))); const metadata = new ResponseMetadata(); metadata.setHeight(metadataFixture.height); @@ -91,7 +91,7 @@ describe('getDocumentsFactory', () => { const request = new GetDocumentsRequest(); request.setV0( new GetDocumentsRequestV0() - .setDataContractId(contractIdBuffer) + .setDataContractId(new Uint8Array(contractIdBuffer)) .setDocumentType(type) .setLimit(options.limit) .setWhere(cbor.encode(options.where)) @@ -132,7 +132,7 @@ describe('getDocumentsFactory', () => { const request = new GetDocumentsRequest(); request.setV0( new GetDocumentsRequestV0() - .setDataContractId(contractIdBuffer) + .setDataContractId(new Uint8Array(contractIdBuffer)) .setDocumentType(type) .setLimit(options.limit) .setWhere(cbor.encode(options.where)) @@ -174,7 +174,7 @@ describe('getDocumentsFactory', () => { const request = new GetDocumentsRequest(); request.setV0( new GetDocumentsRequestV0() - .setDataContractId(contractIdBuffer) + .setDataContractId(new Uint8Array(contractIdBuffer)) .setDocumentType(type) .setLimit(options.limit) .setWhere(cbor.encode(options.where)) diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js index 1dbb6f6be1a..13628f3277b 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js @@ -113,9 +113,9 @@ describe('getIdentitiesContractKeysFactory', () => { new GetIdentitiesContractKeysRequestV0() .setProve(!!options.prove) .setIdentitiesIdsList( - [Buffer.from(identityFixtureA.getId()), Buffer.from(identityFixtureB.getId())], + [new Uint8Array(identityFixtureA.getId()), new Uint8Array(identityFixtureB.getId())], ) - .setContractId(Buffer.from(contractId)) + .setContractId(new Uint8Array(contractId)) .setPurposesList([KeyPurpose.ENCRYPTION, KeyPurpose.DECRYPTION]) .setDocumentTypeName('contactRequest'), ); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/GetIdentityResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/GetIdentityResponse.spec.js index 788184965fa..8ed386e2a6d 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/GetIdentityResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/GetIdentityResponse.spec.js @@ -58,7 +58,7 @@ describe('GetIdentityResponse', () => { it('should return proof', () => { getIdentityResponse = new GetIdentityResponseClass( - Buffer.alloc(0), + new Uint8Array(0), new Metadata(metadataFixture), new Proof(proofFixture), ); @@ -66,7 +66,7 @@ describe('GetIdentityResponse', () => { const identity = getIdentityResponse.getIdentity(); const proof = getIdentityResponse.getProof(); - expect(identity).to.deep.equal(Buffer.alloc(0)); + expect(identity).to.deep.equal(new Uint8Array(0)); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); @@ -104,7 +104,7 @@ describe('GetIdentityResponse', () => { getIdentityResponse = GetIdentityResponseClass.createFromProto(proto); - expect(getIdentityResponse.getIdentity()).to.deep.equal(Buffer.alloc(0)); + expect(getIdentityResponse.getIdentity()).to.deep.equal(new Uint8Array(0)); expect(getIdentityResponse.getMetadata().getHeight()) .to.deep.equal(BigInt(metadataFixture.height)); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js index 711ff8b16c3..f14e0644f14 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js @@ -72,7 +72,7 @@ describe('getIdentityFactory', () => { const request = new GetIdentityRequest(); request.setV0( new GetIdentityRequestV0() - .setId(identityId.toBuffer()) + .setId(new Uint8Array(identityId.toBuffer())) .setProve(false), ); @@ -107,7 +107,7 @@ describe('getIdentityFactory', () => { const request = new GetIdentityRequest(); request.setV0( new GetIdentityRequestV0() - .setId(identityId.toBuffer()) + .setId(new Uint8Array(identityId.toBuffer())) .setProve(true), ); @@ -118,7 +118,7 @@ describe('getIdentityFactory', () => { options, ); - expect(result.getIdentity()).to.deep.equal(Buffer.alloc(0)); + expect(result.getIdentity()).to.deep.equal(new Uint8Array(0)); expect(result.getMetadata().getHeight()) .to.deep.equal(BigInt(metadataFixture.height)); @@ -145,7 +145,7 @@ describe('getIdentityFactory', () => { const request = new GetIdentityRequest(); request.setV0( new GetIdentityRequestV0() - .setId(identityId.toBuffer()) + .setId(new Uint8Array(identityId.toBuffer())) .setProve(false), ); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/getIdentityBalanceFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/getIdentityBalanceFactory.spec.js index daffa9f3cbc..c8c47a47891 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/getIdentityBalanceFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/getIdentityBalanceFactory.spec.js @@ -29,7 +29,7 @@ describe('getIdentityBalanceFactory', () => { beforeEach(async function beforeEach() { balance = BigInt(1337); - identityId = Buffer.alloc(32).fill(0); + identityId = new Uint8Array(32); metadataFixture = getMetadataFixture(); proofFixture = getProofFixture(); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.spec.js index 18545b0f54c..8b87598ab59 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.spec.js @@ -118,7 +118,7 @@ describe('GetIdentityByPublicKeyHashResponse', () => { expect(getIdentityResponse).to.be.an.instanceOf( GetIdentityByPublicKeyHashResponseClass, ); - expect(getIdentityResponse.getIdentity()).to.deep.equal(Buffer.alloc(0)); + expect(getIdentityResponse.getIdentity()).to.deep.equal(new Uint8Array(0)); expect(getIdentityResponse.getMetadata().getHeight()) .to.deep.equal(BigInt(metadataFixture.height)); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.spec.js index 1a8514b375c..f38147513b6 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.spec.js @@ -121,7 +121,7 @@ describe('getIdentityByPublicKeyHashFactory', () => { request, options, ); - expect(result.getIdentity()).to.deep.equal(Buffer.alloc(0)); + expect(result.getIdentity()).to.deep.equal(new Uint8Array(0)); expect(result.getMetadata().getHeight()) .to.deep.equal(BigInt(metadataFixture.height)); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js index 1d8065f2875..84e1b20a6ef 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js @@ -56,7 +56,7 @@ describe('GetIdentityContractNonceResponse', () => { it('should return proof', () => { getIdentityContractNonceResponse = new GetIdentityContractNonceResponseClass( - Buffer.alloc(0), + new Uint8Array(0), new Metadata(metadataFixture), new Proof(proofFixture), ); @@ -64,7 +64,7 @@ describe('GetIdentityContractNonceResponse', () => { const identityContractNonce = getIdentityContractNonceResponse.getIdentityContractNonce(); const proof = getIdentityContractNonceResponse.getProof(); - expect(identityContractNonce).to.deep.equal(Buffer.alloc(0)); + expect(identityContractNonce).to.deep.equal(new Uint8Array(0)); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.spec.js index 966820157a5..f5a82d8def7 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.spec.js @@ -27,8 +27,8 @@ describe('getIdentityContractNonceFactory', () => { beforeEach(async function beforeEach() { nonce = BigInt(1); - identityId = Buffer.alloc(32).fill(0); - contractId = Buffer.alloc(32).fill(1); + identityId = new Uint8Array(32); + contractId = new Uint8Array(32).fill(1); metadataFixture = getMetadataFixture(); proofFixture = getProofFixture(); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js index 84e88aee243..f4e4dc0b3af 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js @@ -22,7 +22,7 @@ describe('GetIdentityKeysResponse', () => { beforeEach(async () => { metadataFixture = getMetadataFixture(); - keys = [Buffer.alloc(41).fill(1), Buffer.alloc(48).fill(2), Buffer.alloc(55).fill(3)]; + keys = [new Uint8Array(41).fill(1), new Uint8Array(48).fill(2), new Uint8Array(55).fill(3)]; proofFixture = getProofFixture(); const { GetIdentityKeysResponseV0 } = GetIdentityKeysResponse; @@ -58,7 +58,7 @@ describe('GetIdentityKeysResponse', () => { it('should return proof', () => { getIdentityKeysResponse = new GetIdentityKeysResponseClass( - Buffer.alloc(0), + new Uint8Array(0), new Metadata(metadataFixture), new Proof(proofFixture), ); @@ -66,7 +66,7 @@ describe('GetIdentityKeysResponse', () => { const identityKeys = getIdentityKeysResponse.getIdentityKeys(); const proof = getIdentityKeysResponse.getProof(); - expect(identityKeys).to.deep.equal(Buffer.alloc(0)); + expect(identityKeys).to.deep.equal(new Uint8Array(0)); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/getIdentityKeysFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/getIdentityKeysFactory.spec.js index f9873c97a62..d56fcf3b965 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/getIdentityKeysFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/getIdentityKeysFactory.spec.js @@ -35,11 +35,11 @@ describe('getIdentityKeysFactory', () => { let proofResponse; beforeEach(async function beforeEach() { - keys = [Buffer.alloc(41), Buffer.alloc(46)]; + keys = [new Uint8Array(41), new Uint8Array(46)]; keyIds = [0, 1]; limit = 100; - identityId = Buffer.alloc(32).fill(0); + identityId = new Uint8Array(32); metadataFixture = getMetadataFixture(); proofFixture = getProofFixture(); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js index b79e8a27014..9efee085b83 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js @@ -56,7 +56,7 @@ describe('GetIdentityNonceResponse', () => { it('should return proof', () => { getIdentityNonceResponse = new GetIdentityNonceResponseClass( - Buffer.alloc(0), + new Uint8Array(0), new Metadata(metadataFixture), new Proof(proofFixture), ); @@ -64,7 +64,7 @@ describe('GetIdentityNonceResponse', () => { const IdentityNonce = getIdentityNonceResponse.getIdentityNonce(); const proof = getIdentityNonceResponse.getProof(); - expect(IdentityNonce).to.deep.equal(Buffer.alloc(0)); + expect(IdentityNonce).to.deep.equal(new Uint8Array(0)); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/getIdentityNonceFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/getIdentityNonceFactory.spec.js index 564b7326da3..80237eb057e 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/getIdentityNonceFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/getIdentityNonceFactory.spec.js @@ -26,7 +26,7 @@ describe('getIdentityNonceFactory', () => { beforeEach(async function beforeEach() { nonce = BigInt(1); - identityId = Buffer.alloc(32).fill(0); + identityId = new Uint8Array(32); metadataFixture = getMetadataFixture(); proofFixture = getProofFixture(); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.spec.js index b6e6f887bd4..8ce67768cf7 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.spec.js @@ -13,6 +13,7 @@ const InvalidResponseError = require('../../../../../lib/methods/platform/respon const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); const Proof = require('../../../../../lib/methods/platform/response/Proof'); const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +const { bytesToHex, hexToBytes } = require('../../../../../lib/utils/bytes'); describe('GetProtocolVersionUpgradeVoteStatusResponse', () => { let getProtocolVersionUpgradeVoteStatus; @@ -23,7 +24,7 @@ describe('GetProtocolVersionUpgradeVoteStatusResponse', () => { beforeEach(async () => { metadataFixture = getMetadataFixture(); - versionSignalFixture = new VersionSignalClass(Buffer.alloc(32).toString('hex'), 1); + versionSignalFixture = new VersionSignalClass(bytesToHex(new Uint8Array(32)), 1); proofFixture = getProofFixture(); const { @@ -42,7 +43,7 @@ describe('GetProtocolVersionUpgradeVoteStatusResponse', () => { new GetProtocolVersionUpgradeVoteStatusResponseV0() .setVersions(new VersionSignals() .setVersionSignalsList([new VersionSignal() - .setProTxHash(Buffer.from(versionSignalFixture.getProTxHash(), 'hex')) + .setProTxHash(hexToBytes(versionSignalFixture.getProTxHash())) .setVersion(versionSignalFixture.getVersion()), ])) .setMetadata(metadata), @@ -125,9 +126,9 @@ describe('GetProtocolVersionUpgradeVoteStatusResponse', () => { const proof = getProtocolVersionUpgradeVoteStatus.getProof(); expect(proof).to.be.an.instanceOf(Proof); - expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); - expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); - expect(proof.getSignature()).to.deep.equal(proofFixture.signature); + expect(proof.getGrovedbProof()).to.deep.equal(new Uint8Array(proofFixture.merkleProof)); + expect(proof.getQuorumHash()).to.deep.equal(new Uint8Array(proofFixture.quorumHash)); + expect(proof.getSignature()).to.deep.equal(new Uint8Array(proofFixture.signature)); expect(proof.getRound()).to.deep.equal(proofFixture.round); }); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.spec.js index ff36627aa02..c241a9871ec 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.spec.js @@ -13,6 +13,7 @@ const VersionSignal = require('../../../../../lib/methods/platform/getProtocolVe const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); const Proof = require('../../../../../lib/methods/platform/response/Proof'); +const { bytesToHex, hexToBytes } = require('../../../../../lib/utils/bytes'); describe('getProtocolVersionUpgradeVoteStatusFactory', () => { let grpcTransportMock; @@ -26,8 +27,8 @@ describe('getProtocolVersionUpgradeVoteStatusFactory', () => { let startProTxHash; beforeEach(async function beforeEach() { - startProTxHash = Buffer.alloc(32).fill('a').toString('hex'); - versionSignalFixture = new VersionSignal(Buffer.alloc(32).toString('hex'), 1); + startProTxHash = bytesToHex(new Uint8Array(32).fill(0x61)); + versionSignalFixture = new VersionSignal(bytesToHex(new Uint8Array(32)), 1); metadataFixture = getMetadataFixture(); proofFixture = getProofFixture(); @@ -50,7 +51,7 @@ describe('getProtocolVersionUpgradeVoteStatusFactory', () => { new GetProtocolVersionUpgradeVoteStatusResponseV0() .setVersions(new VersionSignals() .setVersionSignalsList([new VersionSignalProto() - .setProTxHash(Buffer.from(versionSignalFixture.getProTxHash(), 'hex')) + .setProTxHash(hexToBytes(versionSignalFixture.getProTxHash())) .setVersion(versionSignalFixture.getVersion())])) .setMetadata(metadata), ); @@ -84,7 +85,7 @@ describe('getProtocolVersionUpgradeVoteStatusFactory', () => { const request = new GetProtocolVersionUpgradeVoteStatusRequest(); request.setV0( new GetProtocolVersionUpgradeVoteStatusRequestV0() - .setStartProTxHash(Buffer.from(startProTxHash, 'hex')) + .setStartProTxHash(hexToBytes(startProTxHash)) .setCount(1) .setProve(!!options.prove), ); @@ -124,7 +125,7 @@ describe('getProtocolVersionUpgradeVoteStatusFactory', () => { const request = new GetProtocolVersionUpgradeVoteStatusRequest(); request.setV0( new GetProtocolVersionUpgradeVoteStatusRequestV0() - .setStartProTxHash(Buffer.from(startProTxHash, 'hex')) + .setStartProTxHash(hexToBytes(startProTxHash)) .setCount(1) .setProve(!!options.ascending), ); @@ -148,9 +149,9 @@ describe('getProtocolVersionUpgradeVoteStatusFactory', () => { .to.deep.equal(metadataFixture.protocolVersion); expect(result.getProof()).to.be.an.instanceOf(Proof); - expect(result.getProof().getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); - expect(result.getProof().getQuorumHash()).to.deep.equal(proofFixture.quorumHash); - expect(result.getProof().getSignature()).to.deep.equal(proofFixture.signature); + expect(result.getProof().getGrovedbProof()).to.deep.equal(new Uint8Array(proofFixture.merkleProof)); + expect(result.getProof().getQuorumHash()).to.deep.equal(new Uint8Array(proofFixture.quorumHash)); + expect(result.getProof().getSignature()).to.deep.equal(new Uint8Array(proofFixture.signature)); expect(result.getProof().getRound()).to.deep.equal(proofFixture.round); }); @@ -165,7 +166,7 @@ describe('getProtocolVersionUpgradeVoteStatusFactory', () => { const request = new GetProtocolVersionUpgradeVoteStatusRequest(); request.setV0( new GetProtocolVersionUpgradeVoteStatusRequestV0() - .setStartProTxHash(Buffer.from(startProTxHash, 'hex')) + .setStartProTxHash(hexToBytes(startProTxHash)) .setCount(1) .setProve(!!options.ascending), ); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getStatus/GetStatusResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getStatus/GetStatusResponse.spec.js index 0639f6a3830..cb441388460 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getStatus/GetStatusResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getStatus/GetStatusResponse.spec.js @@ -12,6 +12,7 @@ const ChainStatus = require('../../../../../lib/methods/platform/getStatus/Chain const NetworkStatus = require('../../../../../lib/methods/platform/getStatus/NetworkStatus'); const StateSyncStatus = require('../../../../../lib/methods/platform/getStatus/StateSyncStatus'); const TimeStatus = require('../../../../../lib/methods/platform/getStatus/TimeStatus'); +const { bytesToHex } = require('../../../../../lib/utils/bytes'); describe('GetStatusResponse', () => { let getStatusResponse; @@ -90,17 +91,17 @@ describe('GetStatusResponse', () => { ); const node = new NodeStatus( - Buffer.from(statusFixture.node.id).toString('hex'), - Buffer.from(statusFixture.node.proTxHash).toString('hex'), + bytesToHex(statusFixture.node.id), + bytesToHex(statusFixture.node.proTxHash), ); const chain = new ChainStatus( statusFixture.chain.catchingUp, - Buffer.from(statusFixture.chain.latestBlockHash).toString('hex'), - Buffer.from(statusFixture.chain.latestAppHash).toString('hex'), + bytesToHex(statusFixture.chain.latestBlockHash), + bytesToHex(statusFixture.chain.latestAppHash), BigInt(statusFixture.chain.latestBlockHeight), - Buffer.from(statusFixture.chain.earliestBlockHash).toString('hex'), - Buffer.from(statusFixture.chain.earliestAppHash).toString('hex'), + bytesToHex(statusFixture.chain.earliestBlockHash), + bytesToHex(statusFixture.chain.earliestAppHash), BigInt(statusFixture.chain.earliestBlockHeight), BigInt(statusFixture.chain.maxPeerBlockHeight), statusFixture.chain.coreChainLockedHeight, @@ -219,22 +220,22 @@ describe('GetStatusResponse', () => { .to.equal(statusFixture.version.protocol.drive.nextEpoch); expect(nodeStatus).to.be.an.instanceOf(NodeStatus); - expect(nodeStatus.getNodeId()).to.equal(Buffer.from(statusFixture.node.id).toString('hex')); - expect(nodeStatus.getProTxHash()).to.equal(Buffer.from(statusFixture.node.proTxHash).toString('hex')); + expect(nodeStatus.getNodeId()).to.equal(bytesToHex(statusFixture.node.id)); + expect(nodeStatus.getProTxHash()).to.equal(bytesToHex(statusFixture.node.proTxHash)); expect(chainStatus).to.be.an.instanceOf(ChainStatus); expect(chainStatus.isCatchingUp()) .to.equal(statusFixture.chain.catchingUp); expect(chainStatus.getLatestBlockHash()) - .to.equal(Buffer.from(statusFixture.chain.latestBlockHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.latestBlockHash)); expect(chainStatus.getLatestAppHash()) - .to.equal(Buffer.from(statusFixture.chain.latestAppHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.latestAppHash)); expect(chainStatus.getLatestBlockHeight()) .to.equal(BigInt(statusFixture.chain.latestBlockHeight)); expect(chainStatus.getEarliestBlockHash()) - .to.equal(Buffer.from(statusFixture.chain.earliestBlockHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.earliestBlockHash)); expect(chainStatus.getEarliestAppHash()) - .to.equal(Buffer.from(statusFixture.chain.earliestAppHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.earliestAppHash)); expect(chainStatus.getEarliestBlockHeight()) .to.equal(BigInt(statusFixture.chain.earliestBlockHeight)); expect(chainStatus.getMaxPeerBlockHeight()) @@ -297,22 +298,22 @@ describe('GetStatusResponse', () => { .to.equal(statusFixture.version.protocol.drive.latest); expect(nodeStatus).to.be.an.instanceOf(NodeStatus); - expect(nodeStatus.getNodeId()).to.equal(Buffer.from(statusFixture.node.id).toString('hex')); - expect(nodeStatus.getProTxHash()).to.equal(Buffer.from(statusFixture.node.proTxHash).toString('hex')); + expect(nodeStatus.getNodeId()).to.equal(bytesToHex(statusFixture.node.id)); + expect(nodeStatus.getProTxHash()).to.equal(bytesToHex(statusFixture.node.proTxHash)); expect(chainStatus).to.be.an.instanceOf(ChainStatus); expect(chainStatus.isCatchingUp()) .to.equal(statusFixture.chain.catchingUp); expect(chainStatus.getLatestBlockHash()) - .to.equal(Buffer.from(statusFixture.chain.latestBlockHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.latestBlockHash)); expect(chainStatus.getLatestAppHash()) - .to.equal(Buffer.from(statusFixture.chain.latestAppHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.latestAppHash)); expect(chainStatus.getLatestBlockHeight()) .to.equal(BigInt(statusFixture.chain.latestBlockHeight)); expect(chainStatus.getEarliestBlockHash()) - .to.equal(Buffer.from(statusFixture.chain.earliestBlockHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.earliestBlockHash)); expect(chainStatus.getEarliestAppHash()) - .to.equal(Buffer.from(statusFixture.chain.earliestAppHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.earliestAppHash)); expect(chainStatus.getEarliestBlockHeight()) .to.equal(BigInt(statusFixture.chain.earliestBlockHeight)); expect(chainStatus.getMaxPeerBlockHeight()) diff --git a/packages/js-dapi-client/test/unit/methods/platform/getStatus/getStatusFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getStatus/getStatusFactory.spec.js index 40c91a9e4f5..63f69347b04 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getStatus/getStatusFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getStatus/getStatusFactory.spec.js @@ -14,6 +14,7 @@ const ChainStatus = require('../../../../../lib/methods/platform/getStatus/Chain const NetworkStatus = require('../../../../../lib/methods/platform/getStatus/NetworkStatus'); const StateSyncStatus = require('../../../../../lib/methods/platform/getStatus/StateSyncStatus'); const TimeStatus = require('../../../../../lib/methods/platform/getStatus/TimeStatus'); +const { bytesToHex } = require('../../../../../lib/utils/bytes'); describe('getStatusFactory', () => { let grpcTransportMock; @@ -131,22 +132,22 @@ describe('getStatusFactory', () => { .to.equal(statusFixture.version.protocol.drive.nextEpoch); expect(nodeStatus).to.be.an.instanceOf(NodeStatus); - expect(nodeStatus.getNodeId()).to.equal(Buffer.from(statusFixture.node.id).toString('hex')); - expect(nodeStatus.getProTxHash()).to.equal(Buffer.from(statusFixture.node.proTxHash).toString('hex')); + expect(nodeStatus.getNodeId()).to.equal(bytesToHex(statusFixture.node.id)); + expect(nodeStatus.getProTxHash()).to.equal(bytesToHex(statusFixture.node.proTxHash)); expect(chainStatus).to.be.an.instanceOf(ChainStatus); expect(chainStatus.isCatchingUp()) .to.equal(statusFixture.chain.catchingUp); expect(chainStatus.getLatestBlockHash()) - .to.equal(Buffer.from(statusFixture.chain.latestBlockHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.latestBlockHash)); expect(chainStatus.getLatestAppHash()) - .to.equal(Buffer.from(statusFixture.chain.latestAppHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.latestAppHash)); expect(chainStatus.getLatestBlockHeight()) .to.equal(BigInt(statusFixture.chain.latestBlockHeight)); expect(chainStatus.getEarliestBlockHash()) - .to.equal(Buffer.from(statusFixture.chain.earliestBlockHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.earliestBlockHash)); expect(chainStatus.getEarliestAppHash()) - .to.equal(Buffer.from(statusFixture.chain.earliestAppHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.earliestAppHash)); expect(chainStatus.getEarliestBlockHeight()) .to.equal(BigInt(statusFixture.chain.earliestBlockHeight)); expect(chainStatus.getMaxPeerBlockHeight()) @@ -227,22 +228,22 @@ describe('getStatusFactory', () => { .to.equal(statusFixture.version.protocol.drive.latest); expect(nodeStatus).to.be.an.instanceOf(NodeStatus); - expect(nodeStatus.getNodeId()).to.equal(Buffer.from(statusFixture.node.id).toString('hex')); + expect(nodeStatus.getNodeId()).to.equal(bytesToHex(statusFixture.node.id)); expect(nodeStatus.getProTxHash()).to.be.null(); expect(chainStatus).to.be.an.instanceOf(ChainStatus); expect(chainStatus.isCatchingUp()) .to.equal(statusFixture.chain.catchingUp); expect(chainStatus.getLatestBlockHash()) - .to.equal(Buffer.from(statusFixture.chain.latestBlockHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.latestBlockHash)); expect(chainStatus.getLatestAppHash()) - .to.equal(Buffer.from(statusFixture.chain.latestAppHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.latestAppHash)); expect(chainStatus.getLatestBlockHeight()) .to.equal(BigInt(statusFixture.chain.latestBlockHeight)); expect(chainStatus.getEarliestBlockHash()) - .to.equal(Buffer.from(statusFixture.chain.earliestBlockHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.earliestBlockHash)); expect(chainStatus.getEarliestAppHash()) - .to.equal(Buffer.from(statusFixture.chain.earliestAppHash).toString('hex')); + .to.equal(bytesToHex(statusFixture.chain.earliestAppHash)); expect(chainStatus.getEarliestBlockHeight()) .to.equal(BigInt(statusFixture.chain.earliestBlockHeight)); expect(chainStatus.getMaxPeerBlockHeight()) diff --git a/packages/js-dapi-client/test/unit/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.spec.js index 3f7d22932f7..fc9a3c3e012 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.spec.js @@ -13,6 +13,8 @@ const cbor = require('cbor'); const waitForStateTransitionResultFactory = require('../../../../../lib/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory'); const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); +const encoder = new TextEncoder(); + describe('waitForStateTransitionResultFactory', () => { let grpcTransportMock; let options; @@ -22,7 +24,7 @@ describe('waitForStateTransitionResultFactory', () => { let metadataFixture; beforeEach(function beforeEach() { - hash = Buffer.from('hash'); + hash = encoder.encode('hash'); metadataFixture = getMetadataFixture(); const metadata = new ResponseMetadata(); @@ -86,9 +88,9 @@ describe('waitForStateTransitionResultFactory', () => { it('should return response with proof', async () => { const proof = new Proof(); - proof.setGrovedbProof(Buffer.from('merkleProof')); - proof.setQuorumHash(Buffer.from('quorumHash')); - proof.setSignature(Buffer.from('signature')); + proof.setGrovedbProof(encoder.encode('merkleProof')); + proof.setQuorumHash(encoder.encode('quorumHash')); + proof.setSignature(encoder.encode('signature')); proof.setRound(42); response.getV0().setProof(proof); @@ -108,14 +110,14 @@ describe('waitForStateTransitionResultFactory', () => { expect(result.getError()).to.equal(undefined); expect(result.getProof()).to.be.deep.equal({ - merkleProof: Buffer.from('merkleProof'), - quorumHash: Buffer.from('quorumHash'), - signature: Buffer.from('signature'), + merkleProof: encoder.encode('merkleProof'), + quorumHash: encoder.encode('quorumHash'), + signature: encoder.encode('signature'), round: 42, }); - expect(result.getProof().getSignature()).to.deep.equal(Buffer.from('signature')); - expect(result.getProof().getGrovedbProof()).to.deep.equal(Buffer.from('merkleProof')); - expect(result.getProof().getQuorumHash()).to.deep.equal(Buffer.from('quorumHash')); + expect(result.getProof().getSignature()).to.deep.equal(encoder.encode('signature')); + expect(result.getProof().getGrovedbProof()).to.deep.equal(encoder.encode('merkleProof')); + expect(result.getProof().getQuorumHash()).to.deep.equal(encoder.encode('quorumHash')); expect(result.getProof().getRound()).to.deep.equal(42); const { WaitForStateTransitionResultRequestV0 } = WaitForStateTransitionResultRequest; @@ -161,7 +163,7 @@ describe('waitForStateTransitionResultFactory', () => { expect(result.getError()).to.be.deep.equal({ code: 2, message: 'Some error', - data: Buffer.from(data), + data: new Uint8Array(data), }); const { WaitForStateTransitionResultRequestV0 } = WaitForStateTransitionResultRequest; From ab0005689041348aba34b322bd6ad1a2aef2f351 Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 26 May 2026 11:41:54 -0500 Subject: [PATCH 02/11] refactor(wasm-dpp): widen Identifier to accept Uint8Array MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Identifier constructor and static from() now accept Uint8Array in addition to Buffer. Since Buffer extends Uint8Array in Node, existing Buffer callers continue to work unchanged — this is a widening, not a swap. Lets dapi-client and other web-facing consumers pass plain Uint8Array (e.g. from protobuf getters) without an explicit Buffer.from wrap. Error message updated from 'Identifier expects Buffer' to 'Identifier expects Uint8Array'. --- packages/wasm-dpp/lib/identifier/Identifier.ts | 17 ++++++++++------- packages/wasm-dpp/test/unit/Identifier.spec.js | 12 ++++++++++-- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/packages/wasm-dpp/lib/identifier/Identifier.ts b/packages/wasm-dpp/lib/identifier/Identifier.ts index 784913fd8e4..6571d42757a 100644 --- a/packages/wasm-dpp/lib/identifier/Identifier.ts +++ b/packages/wasm-dpp/lib/identifier/Identifier.ts @@ -14,16 +14,19 @@ type CborEncoder = { type IdentifierEncoding = BufferEncoding | 'base58'; /** - * @param {Buffer} buffer + * @param {Uint8Array} buffer * @returns {Identifier} * @constructor */ export class Identifier { static MEDIA_TYPE = 'application/x.dash.dpp.identifier'; - constructor(buffer: Buffer | Identifier) { - if (!Buffer.isBuffer(buffer)) { - throw new IdentifierError('Identifier expects Buffer'); + constructor(buffer: Uint8Array | Identifier) { + // Accept both Node Buffer and plain Uint8Array. Buffer extends Uint8Array, + // so an instanceof Uint8Array check matches both — existing Buffer callers + // continue to work unchanged. + if (!(buffer instanceof Uint8Array)) { + throw new IdentifierError('Identifier expects Uint8Array'); } if (buffer.length !== 32) { @@ -88,7 +91,7 @@ export class Identifier { * Compare to another Identifier * @param other */ - equals(other: Identifier | Buffer): boolean { + equals(other: Identifier | Uint8Array): boolean { // @ts-ignore return this.toBuffer().equals(Buffer.from(other)); } @@ -96,11 +99,11 @@ export class Identifier { /** * Create Identifier from buffer or encoded string * - * @param {string|Buffer|Identifier} value + * @param {string|Uint8Array|Identifier} value * @param {string} encoding * @return {Identifier} */ - static from(value: string | Buffer | Identifier, encoding: string = undefined): Identifier { + static from(value: string | Uint8Array | Identifier, encoding: string = undefined): Identifier { let buffer; if (typeof value === 'string') { diff --git a/packages/wasm-dpp/test/unit/Identifier.spec.js b/packages/wasm-dpp/test/unit/Identifier.spec.js index 1e5cdb50fdd..53f9d3264fd 100644 --- a/packages/wasm-dpp/test/unit/Identifier.spec.js +++ b/packages/wasm-dpp/test/unit/Identifier.spec.js @@ -20,7 +20,15 @@ describe('Identifier', () => { expect(identifier).to.be.an.instanceOf(Identifier); }); - it('should throw error if first argument is not Buffer', () => { + it('should accept Uint8Array', () => { + const uint8 = new Uint8Array(buffer); + const identifier = new Identifier(uint8); + + expect(identifier.toBuffer()).to.be.deep.equal(buffer); + expect(identifier).to.be.an.instanceOf(Identifier); + }); + + it('should throw error if first argument is not Uint8Array', () => { try { // eslint-disable-next-line no-unused-vars const id = new Identifier(1); @@ -28,7 +36,7 @@ describe('Identifier', () => { expect.fail('Expected to throw an error'); } catch (e) { expect(e).to.be.instanceOf(IdentifierError); - expect(e.toString()).to.be.equal('IdentifierError: Identifier expects Buffer'); + expect(e.toString()).to.be.equal('IdentifierError: Identifier expects Uint8Array'); } }); From d397803ffccd17cdf87003e8bf6e767ceaa0210f Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 26 May 2026 11:42:01 -0500 Subject: [PATCH 03/11] refactor(dapi-client): drop Buffer.from wrap around Identifier.from wasm-dpp's Identifier.from now accepts Uint8Array directly, so the explicit Buffer.from wrap around entry.getIdentityId() is no longer needed. Removes one of two remaining Buffer escape hatches in dapi-client (the BlockHeader path through dashcore-lib remains, pending an upstream change there). --- .../GetIdentitiesContractKeysResponse.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js index 15c72b156e5..8384ac69b54 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js @@ -34,8 +34,7 @@ class GetIdentitiesContractKeysResponse extends AbstractResponse { const keysEntries = identitiesKeys.getEntriesList(); identitiesKeysMap = keysEntries.reduce((acc, entry) => { - // wasm-dpp Identifier.from requires Node Buffer (not plain Uint8Array) - const identityId = Identifier.from(Buffer.from(entry.getIdentityId())).toString(); + const identityId = Identifier.from(entry.getIdentityId()).toString(); if (!acc[identityId]) { acc[identityId] = {}; } From 250a79c3ed1baba0d0c82b181d9db9024653fd53 Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 26 May 2026 11:52:40 -0500 Subject: [PATCH 04/11] refactor(dapi-client): polish bytes utils and document Buffer requirement MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace deprecated String.prototype.substr with slice in hexToBytes. - Add light input validation to bytesToHex, base64ToBytes, bytesToBase64, concatBytes, and bytesEqual — they now throw informative TypeErrors instead of opaque runtime errors on non-bytes input. - Export the helpers as DAPIClient.bytes so the recommended migration path (bytesToHex(field) instead of field.toString('hex')) is reachable via the package's public surface instead of a deep import into lib/utils/bytes. - README: add a Browser usage section explaining that response fields are Uint8Array, that DAPIClient.bytes is the conversion helper, and that two internal paths (BlockHeadersProvider via dashcore-lib, Identifier.from via wasm-dpp) still construct Buffer — browser consumers must ensure Buffer is reachable at runtime via their bundler or an explicit polyfill until dashcore-lib's BufferReader accepts Uint8Array. --- packages/js-dapi-client/README.md | 27 ++++++++++++++++++++++ packages/js-dapi-client/lib/index.js | 2 ++ packages/js-dapi-client/lib/utils/bytes.js | 26 ++++++++++++++++++++- 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/packages/js-dapi-client/README.md b/packages/js-dapi-client/README.md index 1be734e01bb..fec2218075f 100644 --- a/packages/js-dapi-client/README.md +++ b/packages/js-dapi-client/README.md @@ -27,6 +27,33 @@ hosted on Dash masternodes. npm install @dashevo/dapi-client ``` +### Browser usage + +Response objects expose byte-valued fields as `Uint8Array` (not Node `Buffer`). +You can convert via `DAPIClient.bytes`: + +```javascript +const DAPIClient = require('@dashevo/dapi-client'); +const { bytesToHex, hexToBytes } = DAPIClient.bytes; + +const hex = bytesToHex(proof.getQuorumHash()); +``` + +A small number of internal code paths still construct `Buffer` instances — +notably `BlockHeadersProvider` (uses `dashcore-lib.BlockHeader` for SPV +parsing) and the `Identifier` constructor inside wasm-dpp. Node has `Buffer` built in; +browser bundlers (Vite, esbuild, webpack 5) typically auto-shim it when the +`buffer` package is installed, or you can polyfill explicitly: + +```javascript +import { Buffer } from 'buffer'; +globalThis.Buffer = Buffer; +``` + +This requirement will go away once `dashcore-lib`'s `BufferReader` accepts +`Uint8Array` directly. Until then, browser consumers must ensure a `Buffer` +global is reachable at runtime. + ## Usage ### Basic diff --git a/packages/js-dapi-client/lib/index.js b/packages/js-dapi-client/lib/index.js index 65ad0f4deda..9ab05876c70 100644 --- a/packages/js-dapi-client/lib/index.js +++ b/packages/js-dapi-client/lib/index.js @@ -2,11 +2,13 @@ const DAPIClient = require('./DAPIClient'); const NotFoundError = require('./transport/GrpcTransport/errors/NotFoundError'); const BlockHeadersProvider = require('./BlockHeadersProvider/BlockHeadersProvider'); +const bytes = require('./utils/bytes'); DAPIClient.Errors = { NotFoundError, }; DAPIClient.BlockHeadersProvider = BlockHeadersProvider; +DAPIClient.bytes = bytes; module.exports = DAPIClient; diff --git a/packages/js-dapi-client/lib/utils/bytes.js b/packages/js-dapi-client/lib/utils/bytes.js index bed5176b2d0..b728845e76e 100644 --- a/packages/js-dapi-client/lib/utils/bytes.js +++ b/packages/js-dapi-client/lib/utils/bytes.js @@ -1,3 +1,13 @@ +// Lightweight byte utilities used in place of Node Buffer methods on the +// public surface. Inputs that look like bytes are required to be Uint8Array +// (Buffer extends Uint8Array, so existing Buffer callers continue to work). + +function assertBytes(value, name) { + if (!(value instanceof Uint8Array)) { + throw new TypeError(`${name} must be a Uint8Array`); + } +} + function hexToBytes(hex) { if (typeof hex !== 'string') { throw new TypeError('hex must be a string'); @@ -5,18 +15,25 @@ function hexToBytes(hex) { if (hex.length % 2 !== 0) { throw new Error('hex must have even length'); } + if (/[^0-9a-fA-F]/.test(hex)) { + throw new Error('hex contains non-hex characters'); + } const out = new Uint8Array(hex.length / 2); for (let i = 0; i < out.length; i += 1) { - out[i] = parseInt(hex.substr(i * 2, 2), 16); + out[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16); } return out; } function bytesToHex(bytes) { + assertBytes(bytes, 'bytes'); return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join(''); } function base64ToBytes(b64) { + if (typeof b64 !== 'string') { + throw new TypeError('b64 must be a string'); + } const bin = atob(b64); const out = new Uint8Array(bin.length); for (let i = 0; i < bin.length; i += 1) { @@ -26,6 +43,7 @@ function base64ToBytes(b64) { } function bytesToBase64(bytes) { + assertBytes(bytes, 'bytes'); let bin = ''; for (let i = 0; i < bytes.length; i += 1) { bin += String.fromCharCode(bytes[i]); @@ -34,6 +52,10 @@ function bytesToBase64(bytes) { } function concatBytes(arrays) { + if (!Array.isArray(arrays)) { + throw new TypeError('concatBytes expects an array'); + } + arrays.forEach((a, i) => assertBytes(a, `arrays[${i}]`)); let total = 0; for (const a of arrays) total += a.length; const out = new Uint8Array(total); @@ -46,6 +68,8 @@ function concatBytes(arrays) { } function bytesEqual(a, b) { + assertBytes(a, 'a'); + assertBytes(b, 'b'); if (a.length !== b.length) return false; for (let i = 0; i < a.length; i += 1) { if (a[i] !== b[i]) return false; From a0e881b5805723e183cd1d442f99801e89bd0223 Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 26 May 2026 12:26:42 -0500 Subject: [PATCH 05/11] refactor(wasm-dpp)!: Identifier extends Uint8Array; deprecate toBuffer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Identifier no longer extends Buffer at the prototype level. It now extends Uint8Array, so new Identifier(x), id.toString('hex'), id.toString('base64'), id.toString('base58'), id.toBytes(), and id.equals(other) work without a Buffer polyfill at runtime. The wasm-dpp module loader also drops Buffer.from in favor of an inline atob-based decode. toBuffer() is retained as a @deprecated compatibility shim that returns Buffer.from(this); it still requires the Buffer global to exist at call time but no longer at module load time. External callers migrating off Buffer should prefer toBytes() going forward. BREAKING for any code that relied on Identifier extending Buffer: Buffer.isBuffer(id), id instanceof Buffer, and Buffer-specific methods on id (.readUInt32LE, .equals, etc.) no longer work. The one such internal callsite (wallet-lib's IdentitySyncWorker) is migrated to check instanceof Uint8Array. The error message string changed from 'Identifier expects Buffer' to 'Identifier expects Uint8Array' (accepted-type check itself remains a widening — Buffer extends Uint8Array). bs58 (via safe-buffer) is the remaining transitive Buffer dependency in wasm-dpp; eliminating it requires replacing bs58 with a Uint8Array-native base58 library and is out of scope here. --- .../src/plugins/Workers/IdentitySyncWorker.js | 10 +- .../wasm-dpp/lib/identifier/Identifier.ts | 147 +++++++++++++----- packages/wasm-dpp/lib/index.ts | 19 ++- .../wasm-dpp/test/unit/Identifier.spec.js | 52 ++++++- 4 files changed, 176 insertions(+), 52 deletions(-) diff --git a/packages/wallet-lib/src/plugins/Workers/IdentitySyncWorker.js b/packages/wallet-lib/src/plugins/Workers/IdentitySyncWorker.js index f9ed5183b6a..563b674fc18 100644 --- a/packages/wallet-lib/src/plugins/Workers/IdentitySyncWorker.js +++ b/packages/wallet-lib/src/plugins/Workers/IdentitySyncWorker.js @@ -92,11 +92,11 @@ class IdentitySyncWorker extends Worker { } } - // If it's not an undefined and not a buffer or Identifier (which inherits Buffer), - // this method will loop forever. - // This check prevents this from happening - if (!Buffer.isBuffer(identityBuffer)) { - throw new Error(`Expected identity id to be a Buffer or undefined, got ${identityBuffer}`); + // If it's not undefined and not bytes (Uint8Array, which Buffer and + // Identifier both extend), this method will loop forever. + // This check prevents this from happening. + if (!(identityBuffer instanceof Uint8Array)) { + throw new Error(`Expected identity id to be bytes or undefined, got ${identityBuffer}`); } // reset gap counter if we got an identity diff --git a/packages/wasm-dpp/lib/identifier/Identifier.ts b/packages/wasm-dpp/lib/identifier/Identifier.ts index 6571d42757a..681dcf37512 100644 --- a/packages/wasm-dpp/lib/identifier/Identifier.ts +++ b/packages/wasm-dpp/lib/identifier/Identifier.ts @@ -1,55 +1,102 @@ import bs58 from 'bs58'; import IdentifierError from './errors/IdentifierError'; -// Buffer extending is not a trivial thing: +// Buffer extending is not a trivial thing — Identifier used to be a Buffer +// subclass. As of this revision, Identifier extends Uint8Array directly so it +// can be constructed and used in environments without a Buffer polyfill. +// The Buffer-returning toBuffer() method is retained as a deprecated shim +// for backward compatibility; it requires Buffer to exist at call time but +// no longer at module load. // * https://github.com/nodejs/node/commit/651a5b51eb838e8e23a5b94ba34e8e06630a004a // * https://github.com/nodejs/node/issues/4701 // * https://github.com/nodejs/help/issues/1300 // * https://github.com/nodejs/node/issues/2882 type CborEncoder = { - pushAny: (buffer: Buffer) => void; + pushAny: (bytes: Uint8Array) => void; } -type IdentifierEncoding = BufferEncoding | 'base58'; +// Encodings accepted by toString(). 'hex' decoding is not supported by from() +// because there is no precedent for it on the public surface and bs58/base64 +// already cover the user-facing identifier formats. +type IdentifierStringEncoding = 'base58' | 'base64' | 'hex'; +type IdentifierFromEncoding = 'base58' | 'base64'; + +function bytesToHex(bytes: Uint8Array): string { + let out = ''; + for (let i = 0; i < bytes.length; i += 1) { + out += bytes[i].toString(16).padStart(2, '0'); + } + return out; +} + +function bytesToBase64(bytes: Uint8Array): string { + let bin = ''; + for (let i = 0; i < bytes.length; i += 1) { + bin += String.fromCharCode(bytes[i]); + } + return btoa(bin); +} + +function base64ToBytes(b64: string): Uint8Array { + const bin = atob(b64); + const out = new Uint8Array(bin.length); + for (let i = 0; i < bin.length; i += 1) { + out[i] = bin.charCodeAt(i); + } + return out; +} /** - * @param {Uint8Array} buffer + * @param {Uint8Array} bytes * @returns {Identifier} * @constructor */ export class Identifier { static MEDIA_TYPE = 'application/x.dash.dpp.identifier'; - constructor(buffer: Uint8Array | Identifier) { + constructor(bytes: Uint8Array | Identifier) { // Accept both Node Buffer and plain Uint8Array. Buffer extends Uint8Array, // so an instanceof Uint8Array check matches both — existing Buffer callers // continue to work unchanged. - if (!(buffer instanceof Uint8Array)) { + if (!(bytes instanceof Uint8Array)) { throw new IdentifierError('Identifier expects Uint8Array'); } - if (buffer.length !== 32) { + if (bytes.length !== 32) { throw new IdentifierError('Identifier must be 32 long'); } - const patchedBuffer = Buffer.from(buffer); + // Copy into a fresh Uint8Array so callers cannot mutate the underlying + // bytes after construction, then patch the prototype so the result is + // an Identifier instance. + const patched = new Uint8Array(bytes); - Object.setPrototypeOf(patchedBuffer, Identifier.prototype); + Object.setPrototypeOf(patched, Identifier.prototype); // noinspection JSValidateTypes // @ts-ignore - return patchedBuffer; + return patched; + } + + /** + * Convert to a plain Uint8Array (copy) + * + * @return {Uint8Array} + */ + toBytes(): Uint8Array { + return new Uint8Array(this as unknown as Uint8Array); } /** * Convert to Buffer * + * @deprecated Prefer toBytes(). This method requires the `Buffer` global + * to exist at call time and is retained only for backward compatibility. * @return {Buffer} */ toBuffer(): Buffer { - // @ts-ignore - return Buffer.from(this); + return Buffer.from(this as unknown as Uint8Array); } /** @@ -59,7 +106,7 @@ export class Identifier { * @return {boolean} */ encodeCBOR(encoder: CborEncoder): boolean { - encoder.pushAny(this.toBuffer()); + encoder.pushAny(this.toBytes()); return true; } @@ -79,56 +126,82 @@ export class Identifier { * @param {string} [encoding=base58] * @return {string} */ - toString(encoding: IdentifierEncoding = 'base58'): string { + toString(encoding: IdentifierStringEncoding = 'base58'): string { + const bytes = this.toBytes(); if (encoding === 'base58') { - return bs58.encode(this.toBuffer()); + return bs58.encode(bytes); } - - return this.toBuffer().toString(encoding); + if (encoding === 'base64') { + return bytesToBase64(bytes); + } + if (encoding === 'hex') { + return bytesToHex(bytes); + } + throw new IdentifierError(`Unsupported encoding: ${encoding}`); } /** - * Compare to another Identifier - * @param other + * Compare to another Identifier or Uint8Array + * + * @param {Identifier | Uint8Array} other */ equals(other: Identifier | Uint8Array): boolean { - // @ts-ignore - return this.toBuffer().equals(Buffer.from(other)); + if (!(other instanceof Uint8Array)) { + return false; + } + if (other.length !== this.length) { + return false; + } + for (let i = 0; i < this.length; i += 1) { + // @ts-ignore — Identifier is a Uint8Array at runtime + if (this[i] !== other[i]) { + return false; + } + } + return true; } /** - * Create Identifier from buffer or encoded string + * Create Identifier from bytes or encoded string * - * @param {string|Uint8Array|Identifier} value - * @param {string} encoding + * @param {string | Uint8Array | Identifier} value + * @param {string} [encoding] — when value is a string, one of 'base58' (default) or 'base64' * @return {Identifier} */ - static from(value: string | Uint8Array | Identifier, encoding: string = undefined): Identifier { - let buffer; + static from(value: string | Uint8Array | Identifier, encoding?: IdentifierFromEncoding): Identifier { + let bytes; if (typeof value === 'string') { - if (encoding === undefined) { - // eslint-disable-next-line no-param-reassign - encoding = 'base58'; - } - - if (encoding === 'base58') { - buffer = bs58.decode(value); + const effectiveEncoding = encoding === undefined ? 'base58' : encoding; + + if (effectiveEncoding === 'base58') { + // bs58.decode returns a Uint8Array (currently backed by Buffer via + // safe-buffer, which transitively requires a Buffer polyfill in + // browsers; once bs58 is replaced with a Uint8Array-native base58 + // library, that transitive dependency goes away). + bytes = bs58.decode(value); + } else if (effectiveEncoding === 'base64') { + bytes = base64ToBytes(value); } else { - buffer = Buffer.from(value, 'base64'); + throw new IdentifierError(`Unsupported encoding for string input: ${effectiveEncoding}`); } } else { if (encoding !== undefined) { throw new IdentifierError('encoding accepted only with type string'); } - buffer = value; + bytes = value; } - return new Identifier(buffer); + return new Identifier(bytes); } + + // Required to satisfy TypeScript's structural typing when this class is + // declared as `extends _Identifier` elsewhere; instances are real Uint8Arrays + // at runtime via the prototype patch above. + declare length: number; } -Object.setPrototypeOf(Identifier.prototype, Buffer.prototype); +Object.setPrototypeOf(Identifier.prototype, Uint8Array.prototype); export default Identifier; diff --git a/packages/wasm-dpp/lib/index.ts b/packages/wasm-dpp/lib/index.ts index 629d85b8fdf..cecfaa7a164 100644 --- a/packages/wasm-dpp/lib/index.ts +++ b/packages/wasm-dpp/lib/index.ts @@ -26,13 +26,26 @@ export default async function loadDpp(): Promise { return dpp_module; }; +// Decode base64 to Uint8Array using only platform-standard APIs. atob is +// available globally in browsers and in Node ≥18. +const base64ToBytes = (b64: string): Uint8Array => { + const bin = atob(b64); + const out = new Uint8Array(bin.length); + for (let i = 0; i < bin.length; i += 1) { + out[i] = bin.charCodeAt(i); + } + return out; +}; + const loadDppModule = async () => { // @ts-ignore - let bytes = Buffer.from(wasmBase, 'base64'); + const bytes = base64ToBytes(wasmBase); if (typeof window !== 'undefined') { - let blob = new Blob([bytes], { type: "application/wasm" }); - let wasmUrl = URL.createObjectURL(blob); + // Blob's BlobPart typing in lib.dom.d.ts insists on an ArrayBuffer-backed + // view; our Uint8Array is structurally compatible at runtime. + const blob = new Blob([bytes as BlobPart], { type: "application/wasm" }); + const wasmUrl = URL.createObjectURL(blob); await init(wasmUrl); } else { dpp_module.initSync({ module: bytes }); diff --git a/packages/wasm-dpp/test/unit/Identifier.spec.js b/packages/wasm-dpp/test/unit/Identifier.spec.js index 53f9d3264fd..9e13ff884f1 100644 --- a/packages/wasm-dpp/test/unit/Identifier.spec.js +++ b/packages/wasm-dpp/test/unit/Identifier.spec.js @@ -16,16 +16,18 @@ describe('Identifier', () => { it('should accept Buffer', () => { const identifier = new Identifier(buffer); - expect(identifier.toBuffer()).to.be.deep.equal(buffer); + expect(identifier.toBytes()).to.be.deep.equal(new Uint8Array(buffer)); expect(identifier).to.be.an.instanceOf(Identifier); + expect(identifier).to.be.an.instanceOf(Uint8Array); }); it('should accept Uint8Array', () => { const uint8 = new Uint8Array(buffer); const identifier = new Identifier(uint8); - expect(identifier.toBuffer()).to.be.deep.equal(buffer); + expect(identifier.toBytes()).to.be.deep.equal(uint8); expect(identifier).to.be.an.instanceOf(Identifier); + expect(identifier).to.be.an.instanceOf(Uint8Array); }); it('should throw error if first argument is not Uint8Array', () => { @@ -53,11 +55,38 @@ describe('Identifier', () => { }); }); + describe('#toBytes', () => { + it('should return a new Uint8Array copy', () => { + const identifier = new Identifier(buffer); + + const bytes = identifier.toBytes(); + expect(bytes).to.be.an.instanceOf(Uint8Array); + expect(bytes).to.deep.equal(new Uint8Array(buffer)); + // mutating the returned copy must not affect the identifier + bytes[0] = (bytes[0] + 1) & 0xff; + expect(identifier.toBytes()[0]).to.equal(buffer[0]); + }); + + it('should be isolated from later mutations to the source bytes', () => { + const source = new Uint8Array(buffer); + const identifier = new Identifier(source); + + const originalByte = source[0]; + source[0] = (source[0] + 1) & 0xff; + + // The constructor must have copied the bytes; mutating the source + // after construction does not leak into the identifier. + expect(identifier.toBytes()[0]).to.equal(originalByte); + }); + }); + describe('#toBuffer', () => { - it('should return a new normal Buffer', () => { + it('should return a new normal Buffer (deprecated)', () => { const identifier = new Identifier(buffer); - expect(identifier.toBuffer()).to.deep.equal(buffer); + const buf = identifier.toBuffer(); + expect(Buffer.isBuffer(buf)).to.equal(true); + expect(buf).to.deep.equal(buffer); }); }); @@ -96,7 +125,16 @@ describe('Identifier', () => { const identifier = Identifier.from(buffer); expect(identifier).to.be.an.instanceOf(Identifier); - expect(identifier.toBuffer()).to.deep.equal(buffer); + expect(identifier.toBytes()).to.deep.equal(new Uint8Array(buffer)); + }); + + it('should create an instance from Uint8Array', async () => { + const uint8 = new Uint8Array(buffer); + + const identifier = Identifier.from(uint8); + + expect(identifier).to.be.an.instanceOf(Identifier); + expect(identifier.toBytes()).to.deep.equal(uint8); }); it('should throw error if buffer is passed among with encoding', () => { @@ -116,7 +154,7 @@ describe('Identifier', () => { const identifier = Identifier.from(string); expect(identifier).to.be.an.instanceOf(Identifier); - expect(identifier.toBuffer()).to.deep.equal(buffer); + expect(identifier.toBytes()).to.deep.equal(new Uint8Array(buffer)); }); it('should create an instance with a base64 string', () => { @@ -125,7 +163,7 @@ describe('Identifier', () => { const identifier = Identifier.from(string, 'base64'); expect(identifier).to.be.an.instanceOf(Identifier); - expect(identifier.toBuffer()).to.deep.equal(buffer); + expect(identifier.toBytes()).to.deep.equal(new Uint8Array(buffer)); }); }); }); From c43591061640cd91e0c94341cfef8eae90e655bc Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 26 May 2026 12:40:35 -0500 Subject: [PATCH 06/11] test(wasm-dpp,dapi-client): migrate Identifier .toBuffer() callsites to .toBytes() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mechanical follow-up to the Identifier extends Uint8Array commit. All internal test code now uses the Buffer-free .toBytes() accessor on Identifier instances (.getId(), .getOwnerId(), .getContractId(), .getDataContractId(), and direct identityId/contractId/ownerId variables). The deprecated .toBuffer() method is retained for external compatibility but no longer used inside the monorepo. Also strips redundant new Uint8Array(...) wraps around .toBytes() — toBytes already returns a fresh Uint8Array, so the wrap was a copy of a copy. --- .../platform/PlatformMethodsFacade.spec.js | 2 +- .../getDataContractFactory.spec.js | 2 +- .../getDataContractHistoryFactory.spec.js | 6 ++-- .../GetIdentitiesContractKeysResponse.spec.js | 4 +-- .../getIdentitiesContractKeysFactory.spec.js | 4 +-- .../getIdentity/getIdentityFactory.spec.js | 6 ++-- .../dataContract/DataContractFacade.spec.js | 2 +- .../integration/document/Document.spec.js | 16 ++++----- .../document/DocumentFacade.spec.js | 2 +- ...cumentsBatchTransitionBasicFactory.spec.js | 26 +++++++------- .../identity/IdentityFacade.spec.js | 8 ++--- .../wasm-dpp/test/unit/Identifier.spec.js | 1 + .../unit/dataContract/DataContract.spec.js | 10 +++--- .../dataContract/createDataContract.spec.js | 10 +++--- .../generateDataContractId.spec.js | 2 +- .../DataContractCreateTransition.spec.js | 2 +- ...ntractCreateTransitionStateFactory.spec.js | 2 +- .../DataContractUpdateTransition.spec.js | 2 +- ...ntractUpdateTransitionStateFactory.spec.js | 2 +- .../test/unit/document/Document.spec.js | 22 ++++++------ .../unit/document/DocumentFactory.spec.js | 8 ++--- .../DocumentsBatchTransition.spec.js | 6 ++-- ...cumentsBatchTransitionStateFactory.spec.js | 36 +++++++++---------- ...ocumentsUniquenessByIndicesFactory.spec.js | 12 +++---- .../unit/identity/IdentityFactory.spec.js | 4 +-- .../IdentityCreateTransition.spec.js | 14 ++++---- ...entityCreateTransitionStateFactory.spec.js | 2 +- ...IdentityCreditWithdrawalTransition.spec.js | 8 ++--- .../IdentityTopUpTransition.spec.js | 8 ++--- .../IdentityUpdateTransition.spec.js | 10 +++--- .../ChainAssetLockProof.spec.js | 2 +- .../InstantAssetLockProof.spec.js | 2 +- .../identityCreditTransferTransition.spec.js | 12 +++---- .../validateStateTransitionFeeFactory.spec.js | 6 ++-- ...TransitionIdentitySignatureFactory.spec.js | 12 +++---- ...StateTransitionKeySignatureFactory.spec.js | 4 +-- 36 files changed, 139 insertions(+), 138 deletions(-) diff --git a/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js b/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js index a5288db5d52..005a9d46be1 100644 --- a/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js +++ b/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js @@ -151,7 +151,7 @@ describe('PlatformMethodsFacade', () => { .setIdentitiesKeys(new IdentitiesKeys() .setEntriesList([ new IdentityKeys() - .setIdentityId(new Uint8Array(identityFixture.getId().toBuffer())) + .setIdentityId(identityFixture.getId().toBytes()) .setKeysList([ new PurposeKeys() .setPurpose(KeyPurpose.ENCRYPTION) diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js index 18bf80a492d..1d594c9cc16 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js @@ -146,7 +146,7 @@ describe('getDataContractFactory', () => { const request = new GetDataContractRequest(); request.setV0( new GetDataContractRequestV0() - .setId(new Uint8Array(contractId.toBuffer())) + .setId(contractId.toBytes()) .setProve(false), ); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js index 5bd2c30006b..1a9c929614b 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js @@ -102,7 +102,7 @@ describe('getDataContractHistoryFactory', () => { }); it('should return data contract history', async () => { - const contractId = dataContractFixture.getId().toBuffer(); + const contractId = dataContractFixture.getId().toBytes(); const result = await getDataContractHistory(contractId, BigInt(0), 10, 0, options); const { GetDataContractHistoryRequestV0 } = GetDataContractHistoryRequest; @@ -141,7 +141,7 @@ describe('getDataContractHistoryFactory', () => { response.getV0().setProof(proof); response.getV0().setDataContractHistory(undefined); - const contractId = dataContractFixture.getId().toBuffer(); + const contractId = dataContractFixture.getId().toBytes(); const result = await getDataContractHistory(contractId, BigInt(0), 10, 0, options); const { GetDataContractHistoryRequestV0 } = GetDataContractHistoryRequest; @@ -190,7 +190,7 @@ describe('getDataContractHistoryFactory', () => { const request = new GetDataContractHistoryRequest(); request.setV0( new GetDataContractHistoryRequestV0() - .setId(new Uint8Array(contractId.toBuffer())) + .setId(contractId.toBytes()) .setLimit(new UInt32Value([10])) .setOffset(new UInt32Value([0])) .setStartAtMs('0') diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.spec.js index 920ba2c8bf2..d785f8585a8 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.spec.js @@ -50,7 +50,7 @@ describe('GetIdentitiesContractKeysResponse', () => { .setIdentitiesKeys(new IdentitiesKeys() .setEntriesList([ new IdentityKeys() - .setIdentityId(new Uint8Array(identityFixtureA.getId().toBuffer())) + .setIdentityId(identityFixtureA.getId().toBytes()) .setKeysList([ new PurposeKeys() .setPurpose(KeyPurpose.ENCRYPTION) @@ -58,7 +58,7 @@ describe('GetIdentitiesContractKeysResponse', () => { .map((key) => new Uint8Array(key.toBuffer()))), ]), new IdentityKeys() - .setIdentityId(new Uint8Array(identityFixtureB.getId().toBuffer())) + .setIdentityId(identityFixtureB.getId().toBytes()) .setKeysList([ new PurposeKeys() .setPurpose(KeyPurpose.DECRYPTION) diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js index 13628f3277b..aab20ef5fe3 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js @@ -61,7 +61,7 @@ describe('getIdentitiesContractKeysFactory', () => { .setIdentitiesKeys(new IdentitiesKeys() .setEntriesList([ new IdentityKeys() - .setIdentityId(new Uint8Array(identityFixtureA.getId().toBuffer())) + .setIdentityId(identityFixtureA.getId().toBytes()) .setKeysList([ new PurposeKeys() .setPurpose(KeyPurpose.ENCRYPTION) @@ -69,7 +69,7 @@ describe('getIdentitiesContractKeysFactory', () => { .map((key) => new Uint8Array(key.toBuffer()))), ]), new IdentityKeys() - .setIdentityId(new Uint8Array(identityFixtureB.getId().toBuffer())) + .setIdentityId(identityFixtureB.getId().toBytes()) .setKeysList([ new PurposeKeys() .setPurpose(KeyPurpose.DECRYPTION) diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js index f14e0644f14..96fe5123a08 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js @@ -72,7 +72,7 @@ describe('getIdentityFactory', () => { const request = new GetIdentityRequest(); request.setV0( new GetIdentityRequestV0() - .setId(new Uint8Array(identityId.toBuffer())) + .setId(identityId.toBytes()) .setProve(false), ); @@ -107,7 +107,7 @@ describe('getIdentityFactory', () => { const request = new GetIdentityRequest(); request.setV0( new GetIdentityRequestV0() - .setId(new Uint8Array(identityId.toBuffer())) + .setId(identityId.toBytes()) .setProve(true), ); @@ -145,7 +145,7 @@ describe('getIdentityFactory', () => { const request = new GetIdentityRequest(); request.setV0( new GetIdentityRequestV0() - .setId(new Uint8Array(identityId.toBuffer())) + .setId(identityId.toBytes()) .setProve(false), ); diff --git a/packages/wasm-dpp/test/integration/dataContract/DataContractFacade.spec.js b/packages/wasm-dpp/test/integration/dataContract/DataContractFacade.spec.js index 48a06e099b3..bdbcf38e4f9 100644 --- a/packages/wasm-dpp/test/integration/dataContract/DataContractFacade.spec.js +++ b/packages/wasm-dpp/test/integration/dataContract/DataContractFacade.spec.js @@ -48,7 +48,7 @@ describe('DataContractFacade', () => { expect(result).to.be.an.instanceOf(DataContract); - expect(result.getOwnerId().toBuffer()).to.deep.equal(dataContract.getOwnerId().toBuffer()); + expect(result.getOwnerId().toBytes()).to.deep.equal(dataContract.getOwnerId().toBytes()); expect(result.getDocumentSchemas()).to.deep.equal(dataContract.getDocumentSchemas()); }); }); diff --git a/packages/wasm-dpp/test/integration/document/Document.spec.js b/packages/wasm-dpp/test/integration/document/Document.spec.js index cf153f3f0e1..f26b279e5ba 100644 --- a/packages/wasm-dpp/test/integration/document/Document.spec.js +++ b/packages/wasm-dpp/test/integration/document/Document.spec.js @@ -64,13 +64,13 @@ describe('ExtendedDocument', () => { $transferredAt: null, $transferredAtBlockHeight: null, $transferredAtCoreBlockHeight: null, - $dataContractId: dataContract.getId().toBuffer(), - $id: document.getId().toBuffer(), - $ownerId: document.getOwnerId().toBuffer(), + $dataContractId: dataContract.getId().toBytes(), + $id: document.getId().toBytes(), + $ownerId: document.getOwnerId().toBytes(), $revision: 1, $type: 'withByteArrays', byteArrayField: document.get('byteArrayField'), - identifierField: document.get('identifierField').toBuffer(), + identifierField: document.get('identifierField').toBytes(), }); }); @@ -82,10 +82,10 @@ describe('ExtendedDocument', () => { expect(result.$ownerId).to.be.an.instanceOf(Identifier); expect(result.identifierField).to.be.an.instanceOf(Identifier); - expect(result.$dataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBuffer()); - expect(result.$id.toBuffer()).to.deep.equal(document.getId().toBuffer()); - expect(result.$ownerId.toBuffer()).to.deep.equal(document.getOwnerId().toBuffer()); - expect(result.identifierField.toBuffer()).to.deep.equal(document.get('identifierField').toBuffer()); + expect(result.$dataContractId.toBytes()).to.deep.equal(dataContract.getId().toBytes()); + expect(result.$id.toBytes()).to.deep.equal(document.getId().toBytes()); + expect(result.$ownerId.toBytes()).to.deep.equal(document.getOwnerId().toBytes()); + expect(result.identifierField.toBytes()).to.deep.equal(document.get('identifierField').toBytes()); expect(BigInt(result.$revision)).to.deep.equal(document.getRevision()); expect(result.$type).to.deep.equal(document.getType()); expect(result.byteArrayField).to.deep.equal(document.get('byteArrayField')); diff --git a/packages/wasm-dpp/test/integration/document/DocumentFacade.spec.js b/packages/wasm-dpp/test/integration/document/DocumentFacade.spec.js index 803ee40ba1d..c9130016d49 100644 --- a/packages/wasm-dpp/test/integration/document/DocumentFacade.spec.js +++ b/packages/wasm-dpp/test/integration/document/DocumentFacade.spec.js @@ -23,7 +23,7 @@ describe('DocumentFacade', () => { beforeEach(async function beforeEach() { ownerId = await generateRandomIdentifier(); - const dataContractFixture = await getDataContractFixture(ownerId.toBuffer()); + const dataContractFixture = await getDataContractFixture(ownerId.toBytes()); const dataContractObject = dataContractFixture.toObject(); dataContract = new DataContract({ diff --git a/packages/wasm-dpp/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js b/packages/wasm-dpp/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js index ad8cb42ca87..0892bafed93 100644 --- a/packages/wasm-dpp/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js +++ b/packages/wasm-dpp/test/integration/document/stateTransition/DocumentsBatchTransition/validation/basic/validateDocumentsBatchTransitionBasicFactory.spec.js @@ -450,7 +450,7 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); }); @@ -474,7 +474,7 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); it('should be a byte array - Rust', async () => { @@ -515,11 +515,11 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { const [error] = result.getErrors(); expect(error.getCode()).to.equal(1018); - expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBuffer()); + expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBytes()); expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); }); @@ -543,7 +543,7 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); it('should be defined in Data Contract - Rust', async () => { @@ -565,11 +565,11 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(error.getCode()).to.equal(1024); expect(error.getType()).to.equal(firstDocumentTransition.$type); - expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBuffer()); + expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBytes()); expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); }); @@ -594,7 +594,7 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); it('should throw InvalidDocumentTransitionActionError if action is not valid - Rust', async () => { @@ -616,7 +616,7 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); } }); }); @@ -647,7 +647,7 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); }); @@ -920,7 +920,7 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); }); }); @@ -1053,7 +1053,7 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); it('should not validate Document transitions on dry run - Rust', async () => { @@ -1073,6 +1073,6 @@ describe.skip('validateDocumentsBatchTransitionBasicFactory', () => { expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBuffer()); + expect(fetchDataContractId.toBuffer()).is.deep.equal(dataContract.getId().toBytes()); }); }); diff --git a/packages/wasm-dpp/test/integration/identity/IdentityFacade.spec.js b/packages/wasm-dpp/test/integration/identity/IdentityFacade.spec.js index c3888c4661c..838ab424f5d 100644 --- a/packages/wasm-dpp/test/integration/identity/IdentityFacade.spec.js +++ b/packages/wasm-dpp/test/integration/identity/IdentityFacade.spec.js @@ -152,8 +152,8 @@ describe('IdentityFacade', () => { ); expect(stateTransition).to.be.instanceOf(IdentityTopUpTransition); - expect(stateTransition.getIdentityId().toBuffer()) - .to.be.deep.equal(identity.getId().toBuffer()); + expect(stateTransition.getIdentityId().toBytes()) + .to.be.deep.equal(identity.getId().toBytes()); expect(stateTransition.getAssetLockProof().toObject()).to.deep.equal( instantAssetLockProof.toObject(), ); @@ -178,8 +178,8 @@ describe('IdentityFacade', () => { ); expect(stateTransition).to.be.instanceOf(IdentityUpdateTransition); - expect(stateTransition.getIdentityId().toBuffer()) - .to.be.deep.equal(identity.getId().toBuffer()); + expect(stateTransition.getIdentityId().toBytes()) + .to.be.deep.equal(identity.getId().toBytes()); expect(stateTransition.getRevision()).to.equal( identity.getRevision() + BigInt(1), ); diff --git a/packages/wasm-dpp/test/unit/Identifier.spec.js b/packages/wasm-dpp/test/unit/Identifier.spec.js index 9e13ff884f1..39f1f22624d 100644 --- a/packages/wasm-dpp/test/unit/Identifier.spec.js +++ b/packages/wasm-dpp/test/unit/Identifier.spec.js @@ -84,6 +84,7 @@ describe('Identifier', () => { it('should return a new normal Buffer (deprecated)', () => { const identifier = new Identifier(buffer); + // Intentionally exercises the deprecated toBuffer() compatibility shim. const buf = identifier.toBuffer(); expect(Buffer.isBuffer(buf)).to.equal(true); expect(buf).to.deep.equal(buffer); diff --git a/packages/wasm-dpp/test/unit/dataContract/DataContract.spec.js b/packages/wasm-dpp/test/unit/dataContract/DataContract.spec.js index 38b139b54f1..6ba4f58a55e 100644 --- a/packages/wasm-dpp/test/unit/dataContract/DataContract.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/DataContract.spec.js @@ -46,10 +46,10 @@ describe('DataContract', () => { [documentType]: documentSchema, }; - ownerId = (await generateRandomIdentifier()).toBuffer(); + ownerId = (await generateRandomIdentifier()).toBytes(); // eslint-disable-next-line identityNonce = BigInt(1); - contractId = (await generateRandomIdentifier()).toBuffer(); + contractId = (await generateRandomIdentifier()).toBytes(); schemaDefs = { something: { type: 'string' } }; @@ -73,8 +73,8 @@ describe('DataContract', () => { schemaDefs, }); - expect(dataContract.getId().toBuffer()).to.deep.equal(contractId); - expect(dataContract.getOwnerId().toBuffer()).to.deep.equal(ownerId); + expect(dataContract.getId().toBytes()).to.deep.equal(contractId); + expect(dataContract.getOwnerId().toBytes()).to.deep.equal(ownerId); expect(dataContract.getDocumentSchemas()).to.deep.equal(documentSchemas); expect(dataContract.getSchemaDefs()).to.deep.equal(schemaDefs); }); @@ -84,7 +84,7 @@ describe('DataContract', () => { it('should return DataContract Identifier', () => { const result = dataContract.getId(); - expect(result.toBuffer()).to.deep.equal(contractId); + expect(result.toBytes()).to.deep.equal(contractId); expect(result).to.be.instanceof(Identifier); }); }); diff --git a/packages/wasm-dpp/test/unit/dataContract/createDataContract.spec.js b/packages/wasm-dpp/test/unit/dataContract/createDataContract.spec.js index fd37706e7b1..45161a5acba 100644 --- a/packages/wasm-dpp/test/unit/dataContract/createDataContract.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/createDataContract.spec.js @@ -14,8 +14,8 @@ describe.skip('createDataContract', () => { beforeEach(async () => { rawDataContract = { - $id: (await generateRandomIdentifier()).toBuffer(), - ownerId: (await generateRandomIdentifier()).toBuffer(), + $id: (await generateRandomIdentifier()).toBytes(), + ownerId: (await generateRandomIdentifier()).toBytes(), protocolVersion: 4, version: 20, $schema: 'http://test.com/schema', @@ -32,7 +32,7 @@ describe.skip('createDataContract', () => { expect(dataContract).to.be.an.instanceOf(DataContract); - expect(dataContract.getOwnerId().toBuffer()).to.deep.equal(rawDataContract.ownerId); + expect(dataContract.getOwnerId().toBytes()).to.deep.equal(rawDataContract.ownerId); expect(dataContract.getDocuments()).to.deep.equal(rawDataContract.documents); }); @@ -45,7 +45,7 @@ describe.skip('createDataContract', () => { expect(dataContract.getJsonMetaSchema()).to.equal(rawDataContract.$schema); - expect(dataContract.getOwnerId().toBuffer()).to.deep.equal(rawDataContract.ownerId); + expect(dataContract.getOwnerId().toBytes()).to.deep.equal(rawDataContract.ownerId); expect(dataContract.getDocuments()).to.deep.equal(rawDataContract.documents); }); @@ -60,7 +60,7 @@ describe.skip('createDataContract', () => { expect(dataContract.getDefinitions()).to.deep.equal(rawDataContract.$defs); - expect(dataContract.getOwnerId().toBuffer()).to.deep.equal(rawDataContract.ownerId); + expect(dataContract.getOwnerId().toBytes()).to.deep.equal(rawDataContract.ownerId); expect(dataContract.getDocuments()).to.deep.equal(rawDataContract.documents); }); }); diff --git a/packages/wasm-dpp/test/unit/dataContract/generateDataContractId.spec.js b/packages/wasm-dpp/test/unit/dataContract/generateDataContractId.spec.js index d79b930f153..dd13b8e06bf 100644 --- a/packages/wasm-dpp/test/unit/dataContract/generateDataContractId.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/generateDataContractId.spec.js @@ -31,6 +31,6 @@ describe.skip('generateDataContractId', () => { const factory = new DataContractFactory(1337, new DataContractValidator(), entropyGenerator); const dataContract = factory.create(ownerId, {}); - expect(Buffer.compare(id, dataContract.getId().toBuffer())).to.equal(0); + expect(Buffer.compare(id, dataContract.getId().toBytes())).to.equal(0); }); }); diff --git a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js index 2fa931c11ab..4979188fbf3 100644 --- a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/DataContractCreateTransition.spec.js @@ -103,7 +103,7 @@ describe('DataContractCreateTransition', () => { const contractId = result[0]; expect(contractId).to.be.an.instanceOf(Identifier); - expect(contractId.toBuffer()).to.be.deep.equal(dataContract.getId().toBuffer()); + expect(contractId.toBytes()).to.be.deep.equal(dataContract.getId().toBytes()); }); }); diff --git a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js index d27dcc3c53e..9faf7439535 100644 --- a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractCreateTransition/validation/state/validateDataContractCreateTransitionStateFactory.spec.js @@ -71,7 +71,7 @@ describe.skip('validateDataContractCreateTransitionStateFactory', () => { const [error] = result.getErrors(); expect(error.getCode()).to.equal(4000); - expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBuffer()); + expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBytes()); }); it('should return valid result', async () => { diff --git a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js index 444f695113c..a2f162bd072 100644 --- a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/DataContractUpdateTransition.spec.js @@ -106,7 +106,7 @@ describe('DataContractUpdateTransition', () => { const contractId = result[0]; expect(contractId).to.be.an.instanceOf(Identifier); - expect(contractId.toBuffer()).to.be.deep.equal(dataContract.getId().toBuffer()); + expect(contractId.toBytes()).to.be.deep.equal(dataContract.getId().toBytes()); }); }); diff --git a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js index 2addf1f98d0..28c85ab2b6f 100644 --- a/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js +++ b/packages/wasm-dpp/test/unit/dataContract/stateTransition/DataContractUpdateTransition/validation/state/validateDataContractUpdateTransitionStateFactory.spec.js @@ -79,7 +79,7 @@ describe.skip('validateDataContractUpdateTransitionStateFactory', () => { expect(error).to.be.an.instanceOf(DataContractNotPresentError); expect(error.getCode()).to.equal(1018); - expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBuffer()); + expect(error.getDataContractId()).to.deep.equal(dataContract.getId().toBytes()); }); it('should return invalid result if Data Contract version is not larger by 1', async () => { diff --git a/packages/wasm-dpp/test/unit/document/Document.spec.js b/packages/wasm-dpp/test/unit/document/Document.spec.js index 7e2a3afbaa2..cd362570fd2 100644 --- a/packages/wasm-dpp/test/unit/document/Document.spec.js +++ b/packages/wasm-dpp/test/unit/document/Document.spec.js @@ -95,10 +95,10 @@ describe('Document', () => { rawDocumentWithBuffers = { $protocolVersion: getLatestProtocolVersion(), - $id: id.toBuffer(), + $id: id.toBytes(), $type: 'test', - $dataContractId: dataContract.getId().toBuffer(), - $ownerId: ownerId.toBuffer(), + $dataContractId: dataContract.getId().toBytes(), + $ownerId: ownerId.toBytes(), $revision: Number(DocumentCreateTransition.INITIAL_REVISION.toString()), $createdAt: now, $createdAtBlockHeight: 1, @@ -129,7 +129,7 @@ describe('Document', () => { }; document = new ExtendedDocument(rawDocument, dataContract); - expect(document.getId().toBuffer()).to.deep.equal(rawDocument.$id.toBuffer()); + expect(document.getId().toBytes()).to.deep.equal(rawDocument.$id.toBytes()); }); it.skip('should create DocumentCreateTransition with $type and data if present', () => { @@ -317,7 +317,7 @@ describe('Document', () => { const actualId = document.getId(); - expect(id.toBuffer()).to.deep.equal(actualId.toBuffer()); + expect(id.toBytes()).to.deep.equal(actualId.toBytes()); }); }); @@ -329,13 +329,13 @@ describe('Document', () => { describe('#getOwnerId', () => { it('should return $ownerId', () => { - expect(document.getOwnerId().toBuffer()).to.deep.equal(rawDocument.$ownerId.toBuffer()); + expect(document.getOwnerId().toBytes()).to.deep.equal(rawDocument.$ownerId.toBytes()); }); }); describe('#getDataContractId', () => { it('should return $dataContractId', () => { - expect(document.getOwnerId().toBuffer()).to.deep.equal(rawDocument.$ownerId.toBuffer()); + expect(document.getOwnerId().toBytes()).to.deep.equal(rawDocument.$ownerId.toBytes()); }); }); @@ -374,12 +374,12 @@ describe('Document', () => { it('should set identifier', () => { const path = 'dataObject.binaryObject.identifier'; - const buffer = Buffer.alloc(32); - const identifier = new Identifier(buffer); + const bytes = new Uint8Array(32); + const identifier = new Identifier(bytes); document.set(path, identifier); - expect(document.get(path).toBuffer()).to.deep.equal(buffer); + expect(document.get(path).toBytes()).to.deep.equal(bytes); }); // It should return Identifier instead of string @@ -393,7 +393,7 @@ describe('Document', () => { document.set(path, value); const returnedIdentifier = document.get(identifierPath); - expect(returnedIdentifier.toBuffer()).to.deep.equal(buffer); + expect(returnedIdentifier.toBytes()).to.deep.equal(buffer); }); }); diff --git a/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js b/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js index 2ed208c04ee..80f5928f901 100644 --- a/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/DocumentFactory.spec.js @@ -84,9 +84,9 @@ describe('DocumentFactory', () => { expect(newDocument.get('name')).to.equal(name); - expect(newDocument.getDataContractId().toBuffer()).to.deep.equal(contractId); + expect(newDocument.getDataContractId().toBytes()).to.deep.equal(contractId); - expect(newDocument.getOwnerId().toBuffer()).to.deep.equal(ownerIdJs); + expect(newDocument.getOwnerId().toBytes()).to.deep.equal(ownerIdJs); expect(newDocument.getRevision()).to.equal(DocumentCreateTransition.INITIAL_REVISION); @@ -109,7 +109,7 @@ describe('DocumentFactory', () => { } catch (e) { expect(e).to.be.an.instanceOf(InvalidDocumentTypeInDataContractError); expect(e.getType()).to.equal(type); - expect(e.getDataContractId().toBuffer()).to.deep.equal(dataContractId); + expect(e.getDataContractId().toBytes()).to.deep.equal(dataContractId); } }); @@ -182,7 +182,7 @@ describe('DocumentFactory', () => { expect(stateRepositoryMock.fetchDataContract.callCount).to.be.equal(1); const callArguments = stateRepositoryMock.fetchDataContract.getCall(0).args[0]; - expect(callArguments.toBuffer()).to.be.deep.equal(dataContract.getId().toBuffer()); + expect(callArguments.toBytes()).to.be.deep.equal(dataContract.getId().toBytes()); } }); }); diff --git a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js index f695d4ee9df..50cc29fa176 100644 --- a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js +++ b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/DocumentsBatchTransition.spec.js @@ -127,14 +127,14 @@ describe.skip('DocumentsBatchTransition', () => { // it('should return owner id', async () => { // const result = stateTransition.getOwnerId(); // - // expect(result.toBuffer()).to.deep.equal(getDocumentsFixture.ownerId.toBuffer()); + // expect(result.toBuffer()).to.deep.equal(getDocumentsFixture.ownerId.toBytes()); // }); // }); // // describe('#getModifiedDataIds', () => { // it('should return ids of affected documents', () => { - // const expectedIds = documentsJs.map((doc) => doc.getId().toBuffer()); - // const result = stateTransition.getModifiedDataIds().map((id) => id.toBuffer()); + // const expectedIds = documentsJs.map((doc) => doc.getId().toBytes()); + // const result = stateTransition.getModifiedDataIds().map((id) => id.toBytes()); // // expect(result.length).to.be.equal(10); // expect(result).to.be.deep.equal(expectedIds); diff --git a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js index e8419681d6f..e97299d1ec1 100644 --- a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsBatchTransitionStateFactory.spec.js @@ -108,11 +108,11 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // } catch (e) { // expect(e).to.be.instanceOf(DataContractNotPresentNotConsensusError); // - // expect(e.getDataContractId()).to.deep.equal(dataContract.getId().toBuffer()); + // expect(e.getDataContractId()).to.deep.equal(dataContract.getId().toBytes()); // // expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); // const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBuffer()); + // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBytes()); // } // }); // @@ -128,11 +128,11 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // const [error] = result.getErrors(); // // expect(error.getCode()).to.equal(4004); - // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBuffer()); + // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBytes()); // // expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); // const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBuffer()); + // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBytes()); // }); // // it('should return invalid result if document transition with action "replace" is not present - Rust', async () => { @@ -155,11 +155,11 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // const [error] = result.getErrors(); // expect(error).is.instanceOf(DocumentNotFoundError); // expect(error.getCode()).to.equal(4005); - // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBuffer()); + // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBytes()); // // expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); // const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBuffer()); + // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBytes()); // // expect(stateRepositoryMock.fetchDocuments) // .to.have.been.callCount(documentTransitionsJs.length); @@ -186,11 +186,11 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // const [error] = result.getErrors(); // expect(error).is.instanceOf(DocumentNotFoundError); // expect(error.getCode()).to.equal(4005); - // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBuffer()); + // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBytes()); // // expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); // const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBuffer()); + // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBytes()); // // expect(stateRepositoryMock.fetchDocuments).to.have.been // .callCount(documentTransitionsJs.length); @@ -224,12 +224,12 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // expect(error).is.instanceOf(InvalidDocumentRevisionError); // expect(error.getCode()).to.equal(4010); // - // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBuffer()); + // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBytes()); // expect(Number(error.getCurrentRevision())).to.deep.equal(documents[0].getRevision()); // // expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); // const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBuffer()); + // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBytes()); // // expect(stateRepositoryMock.fetchDocuments).to.have.been // .callCount(documentTransitionsJs.length); @@ -240,7 +240,7 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // replaceDocument.setRevision(1); // // const fetchedDocument = new ExtendedDocument(documentsJs[0].toObject(), dataContract); - // fetchedDocument.setOwnerId(Identifier.from((await generateRandomIdentifier()).toBuffer())); + // fetchedDocument.setOwnerId(Identifier.from((await generateRandomIdentifier()).toBytes())); // // documentTransitionsJs = getDocumentTransitionsFixture({ // create: [], @@ -266,14 +266,14 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // const [error] = result.getErrors(); // expect(error).is.instanceOf(DocumentOwnerIdMismatchError); // expect(error.getCode()).to.equal(4006); - // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBuffer()); + // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBytes()); // expect(error.getExistingDocumentOwnerId()).to.deep.equal( - // fetchedDocument.getOwnerId().toBuffer(), + // fetchedDocument.getOwnerId().toBytes(), // ); // // expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); // const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBuffer()); + // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBytes()); // // expect(stateRepositoryMock.fetchDocuments).to.have.been // .callCount(documentTransitionsJs.length); @@ -419,7 +419,7 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // ); // documentTransitionsJs[0].createdAt = undefined; // - // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBuffer()); + // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBytes()); // expect(error.getTimestampName()).to.equal('updatedAt'); // expect(error.getTimestamp().getMilliseconds()).to.deep.equal( // documentTransitionsJs[0].updatedAt.getMilliseconds(), @@ -533,7 +533,7 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // documentTransitionsJs[0].updatedAt.getMinutes() - 6, // ); // - // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBuffer()); + // expect(error.getDocumentId()).to.deep.equal(documentTransitionsJs[0].getId().toBytes()); // expect(error.getTimestampName()).to.equal('updatedAt'); // expect(error.getTimestamp()).to.deep.equal(documentTransitionsJs[0].updatedAt); // expect(error.getTimeWindowStart()).to.deep.equal(timeWindowStart); @@ -608,7 +608,7 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // // expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); // const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBuffer()); + // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBytes()); // // expect(stateRepositoryMock.fetchDocuments).to.have.been.calledOnce(); // }); @@ -645,7 +645,7 @@ describe.skip('validateDocumentsBatchTransitionStateFactory', () => { // // expect(stateRepositoryMock.fetchDataContract).to.have.been.calledOnce(); // const [fetchDataContractId] = stateRepositoryMock.fetchDataContract.getCall(0).args; - // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBuffer()); + // expect(fetchDataContractId.toBuffer()).to.deep.equal(dataContract.getId().toBytes()); // // expect(stateRepositoryMock.fetchDocuments).to.have.been.calledOnce(); // }); diff --git a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js index 3bd09da5bcd..9405aa0371f 100644 --- a/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js +++ b/packages/wasm-dpp/test/unit/document/stateTransition/DocumetsBatchTransition/validation/state/validateDocumentsUniquenessByIndicesFactory.spec.js @@ -91,7 +91,7 @@ describe.skip('validateDocumentsUniquenessByIndices', () => { stateRepositoryMock.fetchDocuments .withArgs( - dataContract.getId().toBuffer(), + dataContract.getId().toBytes(), william.getType(), { where: [ @@ -104,7 +104,7 @@ describe.skip('validateDocumentsUniquenessByIndices', () => { stateRepositoryMock.fetchDocuments .withArgs( - dataContractJs.getId().toBuffer(), + dataContractJs.getId().toBytes(), william.getType(), { where: [ @@ -204,10 +204,10 @@ describe.skip('validateDocumentsUniquenessByIndices', () => { expect(error.getCode()).to.equal(40105); expect(errors.map((e) => e.getDocumentId())).to.have.deep.members([ - documentTransitionsJs[3].getId().toBuffer(), - documentTransitionsJs[3].getId().toBuffer(), - documentTransitionsJs[4].getId().toBuffer(), - documentTransitionsJs[4].getId().toBuffer(), + documentTransitionsJs[3].getId().toBytes(), + documentTransitionsJs[3].getId().toBytes(), + documentTransitionsJs[4].getId().toBytes(), + documentTransitionsJs[4].getId().toBytes(), ]); expect(errors.map((e) => e.getDuplicatingProperties())).to.have.deep.members([ diff --git a/packages/wasm-dpp/test/unit/identity/IdentityFactory.spec.js b/packages/wasm-dpp/test/unit/identity/IdentityFactory.spec.js index 01417544e6f..aa35123e292 100644 --- a/packages/wasm-dpp/test/unit/identity/IdentityFactory.spec.js +++ b/packages/wasm-dpp/test/unit/identity/IdentityFactory.spec.js @@ -218,7 +218,7 @@ describe('IdentityFactory', () => { ); expect(stateTransition).to.be.instanceOf(IdentityTopUpTransition); - expect(stateTransition.getIdentityId().toBuffer()).to.deep.equal(identity.getId().toBuffer()); + expect(stateTransition.getIdentityId().toBytes()).to.deep.equal(identity.getId().toBytes()); expect(stateTransition.getAssetLockProof().toObject()) .to.deep.equal(instantAssetLockProof.toObject()); }); @@ -245,7 +245,7 @@ describe('IdentityFactory', () => { ); expect(stateTransition).to.be.instanceOf(IdentityUpdateTransition); - expect(stateTransition.getIdentityId().toBuffer()).to.deep.equal(identity.getId().toBuffer()); + expect(stateTransition.getIdentityId().toBytes()).to.deep.equal(identity.getId().toBytes()); expect(stateTransition.getRevision()).to.deep.equal(revision); expect(stateTransition.getPublicKeysToAdd().map((k) => k.toObject())) .to.deep.equal(addPublicKeys.map((k) => k.toObject())); diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js index 6e96c52fa40..2d1247e0dc4 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreateTransition/IdentityCreateTransition.spec.js @@ -55,8 +55,8 @@ describe('IdentityCreateTransition', () => { new InstantAssetLockProof(rawStateTransition.assetLockProof), ); - expect(stateTransition.identityId.toBuffer()).to.deep.equal( - stateTransition.getAssetLockProof().createIdentifier().toBuffer(), + expect(stateTransition.identityId.toBytes()).to.deep.equal( + stateTransition.getAssetLockProof().createIdentifier().toBytes(), ); }); }); @@ -107,16 +107,16 @@ describe('IdentityCreateTransition', () => { describe('#getIdentityId', () => { it('should return identity id', () => { - expect(stateTransition.getIdentityId().toBuffer()).to.deep.equal( - stateTransition.getAssetLockProof().createIdentifier().toBuffer(), + expect(stateTransition.getIdentityId().toBytes()).to.deep.equal( + stateTransition.getAssetLockProof().createIdentifier().toBytes(), ); }); }); describe('#getOwnerId', () => { it('should return owner id', () => { - expect(stateTransition.getOwnerId().toBuffer()).to.deep.equal( - stateTransition.getIdentityId().toBuffer(), + expect(stateTransition.getOwnerId().toBytes()).to.deep.equal( + stateTransition.getIdentityId().toBytes(), ); }); }); @@ -168,7 +168,7 @@ describe('IdentityCreateTransition', () => { const identityId = result[0]; expect(identityId).to.be.an.instanceOf(Identifier); - expect(identityId.toBuffer()).to.be.deep.equal( + expect(identityId.toBytes()).to.be.deep.equal( stateTransition.getAssetLockProof().createIdentifier(), ); }); diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js index 30d73f45f55..335e873d3d9 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreateTransition/validation/state/validateIdentityCreateTransitionStateFactory.spec.js @@ -56,7 +56,7 @@ describe.skip('validateIdentityCreateTransitionStateFactory', () => { expect(error.getCode()).to.equal(4011); expect(error.getIdentityId()).to.exist(); - expect(error.getIdentityId()).to.deep.equal(stateTransition.getIdentityId().toBuffer()); + expect(error.getIdentityId()).to.deep.equal(stateTransition.getIdentityId().toBytes()); }); it('should return valid result if state transition is valid', async () => { diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreditWithdrawalTransition/IdentityCreditWithdrawalTransition.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreditWithdrawalTransition/IdentityCreditWithdrawalTransition.spec.js index 503ecf4bef1..b2689f1f748 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreditWithdrawalTransition/IdentityCreditWithdrawalTransition.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityCreditWithdrawalTransition/IdentityCreditWithdrawalTransition.spec.js @@ -24,7 +24,7 @@ describe('IdentityCreditWithdrawalTransition', () => { describe('#getIdentityId', () => { it('should return identity id', () => { - expect(stateTransition.getIdentityId().toBuffer()).to.deep.equal( + expect(stateTransition.getIdentityId().toBytes()).to.deep.equal( rawStateTransition.identityId, ); }); @@ -77,7 +77,7 @@ describe('IdentityCreditWithdrawalTransition', () => { expect(rawStateTransition).to.deep.equal({ $version: '1', type: StateTransitionTypes.IdentityCreditWithdrawal, - identityId: stateTransition.getIdentityId().toBuffer(), + identityId: stateTransition.getIdentityId().toBytes(), amount: stateTransition.getAmount(), coreFeePerByte: stateTransition.getCoreFeePerByte(), pooling: stateTransition.getPooling(), @@ -94,7 +94,7 @@ describe('IdentityCreditWithdrawalTransition', () => { expect(rawStateTransition).to.deep.equal({ $version: '1', type: StateTransitionTypes.IdentityCreditWithdrawal, - identityId: stateTransition.getIdentityId().toBuffer(), + identityId: stateTransition.getIdentityId().toBytes(), amount: stateTransition.getAmount(), coreFeePerByte: stateTransition.getCoreFeePerByte(), pooling: stateTransition.getPooling(), @@ -131,7 +131,7 @@ describe('IdentityCreditWithdrawalTransition', () => { const [identityId] = result; expect(identityId).to.be.an.instanceOf(Identifier); - expect(identityId.toBuffer()).to.be.deep.equal(rawStateTransition.identityId); + expect(identityId.toBytes()).to.be.deep.equal(rawStateTransition.identityId); }); }); diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js index c9ca815b5b4..c4daf05ce22 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityTopUpTransition/IdentityTopUpTransition.spec.js @@ -17,7 +17,7 @@ describe('IdentityTopUpTransition', () => { expect(stateTransition.getAssetLockProof().toObject()).to.be.deep.equal( rawStateTransition.assetLockProof, ); - expect(stateTransition.getIdentityId().toBuffer()).to.be.deep.equal( + expect(stateTransition.getIdentityId().toBytes()).to.be.deep.equal( rawStateTransition.identityId, ); }); @@ -50,7 +50,7 @@ describe('IdentityTopUpTransition', () => { describe('#getIdentityId', () => { it('should return identity id', () => { - expect(stateTransition.getIdentityId().toBuffer()).to.deep.equal( + expect(stateTransition.getIdentityId().toBytes()).to.deep.equal( rawStateTransition.identityId, ); }); @@ -58,7 +58,7 @@ describe('IdentityTopUpTransition', () => { describe('#getOwnerId', () => { it('should return owner id', () => { - expect(stateTransition.getOwnerId().toBuffer()).to.deep.equal( + expect(stateTransition.getOwnerId().toBytes()).to.deep.equal( rawStateTransition.identityId, ); }); @@ -111,7 +111,7 @@ describe('IdentityTopUpTransition', () => { const identityId = result[0]; expect(identityId).to.be.an.instanceOf(Identifier); - expect(identityId.toBuffer()).to.be.deep.equal(rawStateTransition.identityId); + expect(identityId.toBytes()).to.be.deep.equal(rawStateTransition.identityId); }); }); diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js index 0b94ee83021..3013171d1ff 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/IdentityUpdateTransition/IdentityUpdateTransition.spec.js @@ -25,14 +25,14 @@ describe('IdentityUpdateTransition', () => { stateTransition.setIdentityId(id); - expect(stateTransition.identityId.toBuffer()) - .to.deep.equal(id.toBuffer()); + expect(stateTransition.identityId.toBytes()) + .to.deep.equal(id.toBytes()); }); }); describe('#getIdentityId', () => { it('should return identityId', () => { - expect(stateTransition.getIdentityId().toBuffer()) + expect(stateTransition.getIdentityId().toBytes()) .to.deep.equal(rawStateTransition.identityId); }); }); @@ -53,7 +53,7 @@ describe('IdentityUpdateTransition', () => { describe('#getOwnerId', () => { it('should return owner id', () => { - expect(stateTransition.getOwnerId().toBuffer()).to.deep.equal( + expect(stateTransition.getOwnerId().toBytes()).to.deep.equal( rawStateTransition.identityId, ); }); @@ -170,7 +170,7 @@ describe('IdentityUpdateTransition', () => { const identityId = result[0]; expect(identityId).to.be.an.instanceOf(Identifier); - expect(identityId.toBuffer()).to.be.deep.equal(rawStateTransition.identityId); + expect(identityId.toBytes()).to.be.deep.equal(rawStateTransition.identityId); }); }); diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js index 650aa892231..5a2afda8aec 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/assetLockProof/ChainAssetLockProof.spec.js @@ -37,7 +37,7 @@ describe('ChainAssetLockProof', () => { it('should return correct identifier', () => { const identifier = chainAssetLockProof.createIdentifier(); - expect(identifier.toBuffer()) + expect(identifier.toBytes()) .to.have.length(32); }); }); diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js index 89dc4d73d7a..1d3b8831a6c 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/assetLockProof/InstantAssetLockProof.spec.js @@ -39,7 +39,7 @@ describe('InstantAssetLockProof', () => { it('should return correct identifier', () => { const identifier = instantAssetLockProof.createIdentifier(); - expect(identifier.toBuffer()) + expect(identifier.toBytes()) .to.have.length(32); }); }); diff --git a/packages/wasm-dpp/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js b/packages/wasm-dpp/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js index 688a42ac4da..9dc2bd3e4d5 100644 --- a/packages/wasm-dpp/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js +++ b/packages/wasm-dpp/test/unit/identity/stateTransition/identityCreditTransferTransition/identityCreditTransferTransition.spec.js @@ -15,11 +15,11 @@ describe('IdentityCreditTransferTransition', () => { describe('#constructor', () => { it('should create an instance with specified data from specified raw transition', () => { - expect(stateTransition.getIdentityId().toBuffer()).to.be.deep.equal( + expect(stateTransition.getIdentityId().toBytes()).to.be.deep.equal( rawStateTransition.identityId, ); - expect(stateTransition.getRecipientId().toBuffer()).to.be.deep.equal( + expect(stateTransition.getRecipientId().toBytes()).to.be.deep.equal( rawStateTransition.recipientId, ); @@ -37,7 +37,7 @@ describe('IdentityCreditTransferTransition', () => { describe('#getIdentityId', () => { it('should return identity id', () => { - expect(stateTransition.getIdentityId().toBuffer()).to.deep.equal( + expect(stateTransition.getIdentityId().toBytes()).to.deep.equal( rawStateTransition.identityId, ); }); @@ -45,7 +45,7 @@ describe('IdentityCreditTransferTransition', () => { describe('#getRecipientId', () => { it('should return recipient id', () => { - expect(stateTransition.getRecipientId().toBuffer()).to.deep.equal( + expect(stateTransition.getRecipientId().toBytes()).to.deep.equal( rawStateTransition.recipientId, ); }); @@ -103,10 +103,10 @@ describe('IdentityCreditTransferTransition', () => { const [identityId, recipientId] = result; expect(identityId).to.be.an.instanceOf(Identifier); - expect(identityId.toBuffer()).to.be.deep.equal(rawStateTransition.identityId); + expect(identityId.toBytes()).to.be.deep.equal(rawStateTransition.identityId); expect(recipientId).to.be.an.instanceOf(Identifier); - expect(recipientId.toBuffer()).to.be.deep.equal(rawStateTransition.recipientId); + expect(recipientId.toBytes()).to.be.deep.equal(rawStateTransition.recipientId); }); }); diff --git a/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js b/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js index 3215f7f65de..2a661789aa4 100644 --- a/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js +++ b/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionFeeFactory.spec.js @@ -53,7 +53,7 @@ describe.skip('validateStateTransitionFeeFactory', () => { let dataContractCreateTransition; beforeEach(() => { - dataContractOwnerId = dataContract.getOwnerId().toBuffer(); + dataContractOwnerId = dataContract.getOwnerId().toBytes(); dataContractCreateTransition = dpp.dataContract .createDataContractCreateTransition(dataContract); }); @@ -102,7 +102,7 @@ describe.skip('validateStateTransitionFeeFactory', () => { create: await getDocumentsFixture(), }); - ownerId = documentsBatchTransition.getOwnerId().toBuffer(); + ownerId = documentsBatchTransition.getOwnerId().toBytes(); }); it('should return invalid result if balance is not enough', async () => { @@ -218,7 +218,7 @@ describe.skip('validateStateTransitionFeeFactory', () => { beforeEach(async () => { identityTopUpTransition = await getIdentityTopUpTransitionFixture(); - identityId = identityTopUpTransition.getIdentityId().toBuffer(); + identityId = identityTopUpTransition.getIdentityId().toBytes(); const { satoshis } = identityTopUpTransition .getAssetLockProof() diff --git a/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js b/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js index 0d5cfd0903d..866ffaf7413 100644 --- a/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js +++ b/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionIdentitySignatureFactory.spec.js @@ -99,7 +99,7 @@ describe.skip('validateStateTransitionIdentitySignatureFactory', () => { expect( stateRepositoryMock.fetchIdentity.getCall(0).args[0].toBuffer(), ).to.be.deep.equal( - ownerId.toBuffer(), + ownerId.toBytes(), ); }); @@ -116,13 +116,13 @@ describe.skip('validateStateTransitionIdentitySignatureFactory', () => { expect(error).to.be.an.instanceOf(IdentityNotFoundError); expect(error.getCode()).to.equal(2000); - expect(error.getIdentityId()).to.deep.equal(identity.getId().toBuffer()); + expect(error.getIdentityId()).to.deep.equal(identity.getId().toBytes()); expect(stateRepositoryMock.fetchIdentity).to.be.calledOnce(); expect( stateRepositoryMock.fetchIdentity.getCall(0).args[0].toBuffer(), ).to.be.deep.equal( - ownerId.toBuffer(), + ownerId.toBytes(), ); }); @@ -141,7 +141,7 @@ describe.skip('validateStateTransitionIdentitySignatureFactory', () => { expect( stateRepositoryMock.fetchIdentity.getCall(0).args[0].toBuffer(), ).to.be.deep.equal( - ownerId.toBuffer(), + ownerId.toBytes(), ); expect(result.getErrors()).to.be.an('array'); @@ -172,7 +172,7 @@ describe.skip('validateStateTransitionIdentitySignatureFactory', () => { expect( stateRepositoryMock.fetchIdentity.getCall(0).args[0].toBuffer(), ).to.be.deep.equal( - ownerId.toBuffer(), + ownerId.toBytes(), ); expect(result.getErrors()).to.be.an('array'); @@ -207,7 +207,7 @@ describe.skip('validateStateTransitionIdentitySignatureFactory', () => { expect( stateRepositoryMock.fetchIdentity.getCall(0).args[0].toBuffer(), ).to.be.deep.equal( - ownerId.toBuffer(), + ownerId.toBytes(), ); }); diff --git a/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js b/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js index 5c0c83662e1..220b840a4b5 100644 --- a/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js +++ b/packages/wasm-dpp/test/unit/stateTransition/validation/validateStateTransitionKeySignatureFactory.spec.js @@ -101,8 +101,8 @@ describe.skip('validateStateTransitionKeySignatureFactory', () => { const { match } = this.sinon; expect(stateRepositoryMock.fetchIdentityBalance).to.be.calledOnceWithExactly( - match((identityId) => Buffer.from(identityId.toBuffer()) - .equals(stateTransition.getIdentityId().toBuffer())), + match((identityId) => Buffer.from(identityId.toBytes()) + .equals(stateTransition.getIdentityId().toBytes())), match.instanceOf(StateTransitionExecutionContext), ); }); From b925e100d271baaf8e72e837d12afb59f0510099 Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 26 May 2026 13:08:04 -0500 Subject: [PATCH 07/11] docs(dapi-client): link upstream dashcore-lib#315 in browser-usage note --- packages/js-dapi-client/README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/js-dapi-client/README.md b/packages/js-dapi-client/README.md index fec2218075f..827a6ed4d8d 100644 --- a/packages/js-dapi-client/README.md +++ b/packages/js-dapi-client/README.md @@ -50,9 +50,11 @@ import { Buffer } from 'buffer'; globalThis.Buffer = Buffer; ``` -This requirement will go away once `dashcore-lib`'s `BufferReader` accepts -`Uint8Array` directly. Until then, browser consumers must ensure a `Buffer` -global is reachable at runtime. +This requirement will go away once +[dashpay/dashcore-lib#315](https://github.com/dashpay/dashcore-lib/pull/315) +(widening `BufferReader` to accept `Uint8Array`) lands and is picked up here. +Until then, browser consumers must ensure a `Buffer` global is reachable at +runtime. ## Usage From 4ed842817f3df3ecc455c6abe6e074fdc09669e5 Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 26 May 2026 13:43:09 -0500 Subject: [PATCH 08/11] fix(dapi-client,wallet-lib,wasm-dpp): address CodeRabbit review findings Acted on real findings, dropped false positives. Fixed: - wallet-lib getTransaction: Buffer.from(response.getBlockHash()).toString('hex') instead of relying on Uint8Array.toString('hex') which ignores the encoding arg. After PR 2's migration, GetTransactionResponse.getBlockHash() returns a plain Uint8Array, so the previous code returned a comma-delimited decimal string instead of hex. - GetProtocolVersionUpgradeVoteStatusResponse: use versionSignal.getProTxHash_asU8() instead of new Uint8Array(versionSignal.getProTxHash()). The default protobuf getter yields a base64 string under grpc-web; new Uint8Array(string) does not base64-decode, it iterates chars and produces zeros. _asU8 explicitly returns Uint8Array bytes in both grpc-js and grpc-web. - wallet-lib Transport.d.ts: getIdentityByPublicKeyHash signature updated from (publicKeyHash: Buffer): Promise to (publicKeyHash: Uint8Array): Promise. Matches the post-migration runtime contract. - wasm-dpp Document.spec.js #getDataContractId: was calling getOwnerId() and asserting against $ownerId. Now actually exercises getDataContractId. - GetIdentityByPublicKeyHashResponse JSDoc: @param renamed from identities (plural) to identity (singular); @returns Uint8Array[] corrected to Uint8Array. Both predate this PR; cleaned up while touching the file. - GetIdentityContractNonce.spec.js, GetIdentityNonce.spec.js: proof-only constructor-pass-through tests now use BigInt(0) (matches the actual nonce type) instead of new Uint8Array(0). - GetIdentityKeys.spec.js: proof-only test now uses [] (matches the array-of-keys contract) instead of new Uint8Array(0). - PlatformMethodsFacade.spec.js: getIdentityNonce second arg is now {} (options) instead of a second Uint8Array. Predates the migration. - SimplifiedMasternodeListProvider catch block: guards bytesToHex call when simplifiedMNListDiffBytes is undefined, so the original error isn't masked by a secondary TypeError from the new bytesToHex input validation. Skipped (false positives): - GetDataContractResponse, GetIdentityResponse, GetIdentityByPublicKeyHashResponse createFromProto 'new Uint8Array(undefined)' findings: the existing tests explicitly assert new Uint8Array(0) for the proof-only path, and new Uint8Array(undefined) === new Uint8Array(0). Current behavior matches contract. - wasm-dpp loadDpp atob fallback: atob has been a Node global since 16.0.0, and the package's engines.node is >=18.18 (PR 1). No fallback needed. - validateDocumentsBatchTransitionBasicFactory.spec.js .toBuffer() nitpick: inside a describe.skip block; dead code. --- .../SimplifiedMasternodeListProvider.js | 8 +++++++- .../GetIdentityByPublicKeyHashResponse.js | 5 ++--- .../GetProtocolVersionUpgradeVoteStatusResponse.js | 6 +++++- .../methods/platform/PlatformMethodsFacade.spec.js | 2 +- .../GetIdentityContractNonce.spec.js | 4 ++-- .../platform/getIdentityKeys/GetIdentityKeys.spec.js | 4 ++-- .../platform/getIdentityNonce/GetIdentityNonce.spec.js | 4 ++-- .../DAPIClientTransport/methods/getTransaction.js | 4 +++- packages/wallet-lib/src/transport/Transport.d.ts | 2 +- packages/wasm-dpp/test/unit/document/Document.spec.js | 3 ++- 10 files changed, 27 insertions(+), 15 deletions(-) diff --git a/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js b/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js index 1916b48cc1a..9fadf3184ab 100644 --- a/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js +++ b/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js @@ -112,6 +112,12 @@ class SimplifiedMasternodeListProvider { this.options.network, ); } catch (e) { + // Guard against bytesToHex throwing (and masking the real error) + // if simplifiedMNListDiffBytes is undefined because the failure + // happened before line 106 assigned it. + const diffBytesHex = simplifiedMNListDiffBytes instanceof Uint8Array + ? bytesToHex(simplifiedMNListDiffBytes) + : null; this.logger.warn( `Can't parse masternode list diff: ${e.message}`, { @@ -119,7 +125,7 @@ class SimplifiedMasternodeListProvider { network: this.options.network, error: e, simplifiedMNListDiffObject, - simplifiedMNListDiffBytes: bytesToHex(simplifiedMNListDiffBytes), + simplifiedMNListDiffBytes: diffBytesHex, }, ); diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js index b67fa3d6cdf..1f3c03433c9 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js @@ -2,8 +2,7 @@ const AbstractResponse = require('../response/AbstractResponse'); class GetIdentityByPublicKeyHashResponse extends AbstractResponse { /** - * @param {Uint8Array} identities - * @param identity + * @param {Uint8Array} identity * @param {Metadata} metadata * @param {Proof} [proof] */ @@ -14,7 +13,7 @@ class GetIdentityByPublicKeyHashResponse extends AbstractResponse { } /** - * @returns {Uint8Array[]} + * @returns {Uint8Array} */ getIdentity() { return this.identity; diff --git a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js index e072443c09c..9d9c8010a8a 100644 --- a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js @@ -41,7 +41,11 @@ class GetProtocolVersionUpgradeVoteStatusResponse extends AbstractResponse { const versionSignalsList = versions && versions.getVersionSignalsList(); if (versionSignalsList) { versionSignals = versionSignalsList.map((versionSignal) => new VersionSignal( - bytesToHex(new Uint8Array(versionSignal.getProTxHash())), + // Use _asU8 so we get bytes regardless of the underlying protobuf + // representation (grpc-js: Uint8Array; grpc-web: base64 string). + // The default getter would yield the base64 string under grpc-web, + // and new Uint8Array(string) does NOT base64-decode it. + bytesToHex(versionSignal.getProTxHash_asU8()), versionSignal.getVersion(), )); } diff --git a/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js b/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js index 005a9d46be1..d8e1983202c 100644 --- a/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js +++ b/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js @@ -296,7 +296,7 @@ describe('PlatformMethodsFacade', () => { grpcTransportMock.request.resolves(response); - await platformMethods.getIdentityNonce(new Uint8Array(32), new Uint8Array(32)); + await platformMethods.getIdentityNonce(new Uint8Array(32), {}); expect(grpcTransportMock.request).to.be.calledOnce(); }); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js index 84e1b20a6ef..369487a5a94 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js @@ -56,7 +56,7 @@ describe('GetIdentityContractNonceResponse', () => { it('should return proof', () => { getIdentityContractNonceResponse = new GetIdentityContractNonceResponseClass( - new Uint8Array(0), + BigInt(0), new Metadata(metadataFixture), new Proof(proofFixture), ); @@ -64,7 +64,7 @@ describe('GetIdentityContractNonceResponse', () => { const identityContractNonce = getIdentityContractNonceResponse.getIdentityContractNonce(); const proof = getIdentityContractNonceResponse.getProof(); - expect(identityContractNonce).to.deep.equal(new Uint8Array(0)); + expect(identityContractNonce).to.deep.equal(BigInt(0)); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js index f4e4dc0b3af..00f75ed10e1 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js @@ -58,7 +58,7 @@ describe('GetIdentityKeysResponse', () => { it('should return proof', () => { getIdentityKeysResponse = new GetIdentityKeysResponseClass( - new Uint8Array(0), + [], new Metadata(metadataFixture), new Proof(proofFixture), ); @@ -66,7 +66,7 @@ describe('GetIdentityKeysResponse', () => { const identityKeys = getIdentityKeysResponse.getIdentityKeys(); const proof = getIdentityKeysResponse.getProof(); - expect(identityKeys).to.deep.equal(new Uint8Array(0)); + expect(identityKeys).to.deep.equal([]); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js index 9efee085b83..af22d131912 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js @@ -56,7 +56,7 @@ describe('GetIdentityNonceResponse', () => { it('should return proof', () => { getIdentityNonceResponse = new GetIdentityNonceResponseClass( - new Uint8Array(0), + BigInt(0), new Metadata(metadataFixture), new Proof(proofFixture), ); @@ -64,7 +64,7 @@ describe('GetIdentityNonceResponse', () => { const IdentityNonce = getIdentityNonceResponse.getIdentityNonce(); const proof = getIdentityNonceResponse.getProof(); - expect(IdentityNonce).to.deep.equal(new Uint8Array(0)); + expect(IdentityNonce).to.deep.equal(BigInt(0)); expect(proof).to.be.an.instanceOf(Proof); expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.js index 936076c91b4..b491b8763ab 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.js @@ -22,7 +22,9 @@ module.exports = async function getTransaction(txid) { return { transaction: new Transaction(response.getTransaction()), - blockHash: response.getBlockHash().toString('hex'), + // dapi-client returns blockHash as a plain Uint8Array, whose toString() + // ignores the encoding argument. Wrap to Buffer to get hex semantics. + blockHash: Buffer.from(response.getBlockHash()).toString('hex'), height, instantLocked, chainLocked, diff --git a/packages/wallet-lib/src/transport/Transport.d.ts b/packages/wallet-lib/src/transport/Transport.d.ts index 9a9697c8975..c9fd3ac7e93 100644 --- a/packages/wallet-lib/src/transport/Transport.d.ts +++ b/packages/wallet-lib/src/transport/Transport.d.ts @@ -20,7 +20,7 @@ export declare interface Transport { getBlockHeaderByHeight(height: number): Promise - getIdentityByPublicKeyHash(publicKeyHash: Buffer): Promise + getIdentityByPublicKeyHash(publicKeyHash: Uint8Array): Promise getBlockchainStatus(): Promise diff --git a/packages/wasm-dpp/test/unit/document/Document.spec.js b/packages/wasm-dpp/test/unit/document/Document.spec.js index cd362570fd2..c3ef458b34e 100644 --- a/packages/wasm-dpp/test/unit/document/Document.spec.js +++ b/packages/wasm-dpp/test/unit/document/Document.spec.js @@ -335,7 +335,8 @@ describe('Document', () => { describe('#getDataContractId', () => { it('should return $dataContractId', () => { - expect(document.getOwnerId().toBytes()).to.deep.equal(rawDocument.$ownerId.toBytes()); + expect(document.getDataContractId().toBytes()) + .to.deep.equal(rawDocument.$dataContractId.toBytes()); }); }); From 904695b497b45ccd5631a1c7da9f03a8ba71868e Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 19 May 2026 11:05:52 -0500 Subject: [PATCH 09/11] refactor(dapi-client)!: convert to ESM, drop webpack/karma MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Converts @dashevo/dapi-client to pure ESM: type: module, exports map with ./lib/* wildcard, all CJS require/module.exports replaced with import/export, .js extensions on relative imports. Engine bumped to >=18.18. Drops webpack.config.js, karma.conf.js, and lib/test/karma/. Removes the @babel/core, babel-loader, browser-polyfill, karma, and webpack devDeps. Consumers must use a modern bundler (Vite/esbuild/webpack 5) which handles ESM natively. Moves 'events' npm package from devDependencies to dependencies — used by DAPIClient, ReconnectableStream, and BlockHeadersProvider for EventEmitter, and resolves correctly in both Node and browser bundlers. BREAKING: CJS consumers (require) no longer work. Downstream consumers wallet-lib (PR 4) and js-dash-sdk (PR 5) are temporarily broken between this PR merging and PRs 4/5 merging — they must land as a sequence. Dashmate is already ESM and continues to work. Test results: dapi-client 315/315. wallet-lib + js-dash-sdk fail as expected (fixed by PRs 4 + 5). --- .pnp.cjs | 319 +----------------- ...loader-npm-9.1.3-cbf4da21df-7086e67827.zip | Bin 16539 -> 0 bytes ...prefix-npm-3.0.0-68b78785c1-09c180e8d8.zip | Bin 2957 -> 0 bytes ...re-js-npm-3.33.2-08a6fba407-d62554d51c.zip | Bin 1193535 -> 0 bytes ...he-dir-npm-4.0.0-ad2504e37e-52a456a80d.zip | Bin 3710 -> 0 bytes ...ind-up-npm-6.3.0-e5056fc655-4f3bdc30d4.zip | Bin 5548 -> 0 bytes ...e-path-npm-7.2.0-0e1169e19b-1c6d269d4e.zip | Bin 4229 -> 0 bytes ...-limit-npm-4.0.0-5dccf29b67-01d9d70695.zip | Bin 4617 -> 0 bytes ...locate-npm-6.0.0-b6cfb720dc-2bfe5234ef.zip | Bin 4478 -> 0 bytes ...exists-npm-5.0.0-0bf403c56c-8ca842868c.zip | Bin 3103 -> 0 bytes ...kg-dir-npm-7.0.0-02ff099b31-94298b20a4.zip | Bin 3361 -> 0 bytes ...-utils-npm-4.2.0-e822c5b02e-808784735e.zip | Bin 22405 -> 0 bytes ...-queue-npm-1.0.0-7b502f1987-2cac84540f.zip | Bin 4163 -> 0 bytes packages/js-dapi-client/.mocharc.yml | 2 +- packages/js-dapi-client/karma.conf.js | 45 --- .../BlockHeadersProvider.js | 10 +- .../BlockHeadersReader.js | 10 +- .../createBlockHeadersProviderFromOptions.js | 8 +- packages/js-dapi-client/lib/DAPIClient.js | 26 +- .../SimplifiedMasternodeListProvider.js | 12 +- .../createMasternodeListStreamFactory.js | 14 +- .../lib/dapiAddressProvider/DAPIAddress.js | 4 +- .../ListDAPIAddressProvider.js | 5 +- ...lifiedMasternodeListDAPIAddressProvider.js | 4 +- .../createDAPIAddressProviderFromOptions.js | 18 +- .../errors/DAPIAddressHostMissingError.js | 4 +- .../lib/errors/DAPIClientError.js | 2 +- packages/js-dapi-client/lib/index.js | 12 +- packages/js-dapi-client/lib/logger/index.js | 2 +- .../lib/methods/core/CoreMethodsFacade.js | 26 +- .../core/broadcastTransactionFactory.js | 8 +- .../methods/core/getBestBlockHashFactory.js | 2 +- .../methods/core/getBestBlockHeightFactory.js | 6 +- .../lib/methods/core/getBlockByHashFactory.js | 6 +- .../methods/core/getBlockByHeightFactory.js | 6 +- .../lib/methods/core/getBlockHashFactory.js | 2 +- .../core/getBlockchainStatusFactory.js | 6 +- .../core/getMasternodeStatusFactory.js | 8 +- .../getTransaction/GetTransactionResponse.js | 4 +- .../getTransaction/getTransactionFactory.js | 13 +- ...ribeToBlockHeadersWithChainLocksFactory.js | 11 +- .../core/subscribeToMasternodeListFactory.js | 6 +- ...ubscribeToTransactionsWithProofsFactory.js | 11 +- .../methods/platform/PlatformMethodsFacade.js | 38 +-- .../BroadcastStateTransitionResponse.js | 2 +- .../broadcastStateTransitionFactory.js | 12 +- .../ConsensusParamsBlock.js | 2 +- .../ConsensusParamsEvidence.js | 2 +- .../getConsensusParamsFactory.js | 10 +- .../getConsensusParamsResponse.js | 8 +- .../GetDataContractResponse.js | 6 +- .../getDataContract/getDataContractFactory.js | 11 +- .../DataContractHistoryEntry.js | 6 +- .../GetDataContractHistoryResponse.js | 8 +- .../getDataContractHistoryFactory.js | 13 +- .../getDocuments/GetDocumentsResponse.js | 4 +- .../getDocuments/getDocumentsFactory.js | 12 +- .../platform/getEpochsInfo/EpochInfo.js | 2 +- .../getEpochsInfo/GetEpochsInfoResponse.js | 8 +- .../getEpochsInfo/getEpochsInfoFactory.js | 14 +- .../GetIdentitiesContractKeysResponse.js | 8 +- .../getIdentitiesContractKeysFactory.js | 12 +- .../getIdentity/GetIdentityResponse.js | 6 +- .../getIdentity/getIdentityFactory.js | 11 +- .../GetIdentityBalanceResponse.js | 6 +- .../getIdentityBalanceFactory.js | 11 +- .../GetIdentityByPublicKeyHashResponse.js | 4 +- .../getIdentityByPublicKeyHashFactory.js | 13 +- .../GetIdentityContractNonceResponse.js | 6 +- .../getIdentityContractNonceFactory.js | 11 +- .../GetIdentityKeysResponse.js | 6 +- .../getIdentityKeys/getIdentityKeysFactory.js | 14 +- .../GetIdentityNonceResponse.js | 6 +- .../getIdentityNonceFactory.js | 11 +- .../GetProtocolVersionUpgradeStateResponse.js | 8 +- .../VersionEntry.js | 2 +- .../getProtocolVersionUpgradeStateFactory.js | 12 +- ...rotocolVersionUpgradeVoteStatusResponse.js | 10 +- .../VersionSignal.js | 2 +- ...ProtocolVersionUpgradeVoteStatusFactory.js | 14 +- .../methods/platform/getStatus/ChainStatus.js | 2 +- .../platform/getStatus/GetStatusResponse.js | 16 +- .../platform/getStatus/NetworkStatus.js | 2 +- .../methods/platform/getStatus/NodeStatus.js | 2 +- .../platform/getStatus/StateSyncStatus.js | 2 +- .../methods/platform/getStatus/TimeStatus.js | 2 +- .../platform/getStatus/VersionStatus.js | 2 +- .../platform/getStatus/getStatusFactory.js | 12 +- .../GetTotalCreditsInPlatformResponse.js | 6 +- .../getTotalCreditsInPlatformFactory.js | 12 +- .../platform/response/AbstractResponse.js | 8 +- .../lib/methods/platform/response/Metadata.js | 2 +- .../lib/methods/platform/response/Proof.js | 2 +- .../platform/response/StoreTreeProofs.js | 18 +- .../response/errors/InvalidResponseError.js | 4 +- .../ErrorResult.js | 6 +- .../WaitForStateTransitionResultResponse.js | 10 +- .../waitForStateTransitionResultFactory.js | 14 +- packages/js-dapi-client/lib/networkConfigs.js | 2 +- packages/js-dapi-client/lib/test/bootstrap.js | 29 +- .../lib/test/fixtures/getHeadersFixture.js | 5 +- .../test/fixtures/getMNListDiffsFixture.js | 2 +- .../lib/test/fixtures/getMetadataFixture.js | 2 +- .../lib/test/fixtures/getProofFixture.js | 4 +- .../lib/test/fixtures/getStatusFixture.js | 4 +- .../lib/test/karma/bootstrap.js | 34 -- .../js-dapi-client/lib/test/karma/loader.js | 7 - .../BlockHeadersWithChainLocksStreamMock.js | 4 +- .../lib/test/mocks/mockHeadersChain.js | 11 +- .../transport/GrpcTransport/GrpcTransport.js | 16 +- .../GrpcTransport/createGrpcTransportError.js | 36 +- .../errors/InternalServerError.js | 4 +- .../GrpcTransport/errors/NotFoundError.js | 6 +- .../GrpcTransport/errors/TimeoutError.js | 6 +- .../JsonRpcTransport/JsonRpcTransport.js | 12 +- .../createJsonTransportError.js | 12 +- .../JsonRpcTransport/errors/JsonRpcError.js | 4 +- .../errors/WrongHttpCodeError.js | 4 +- .../JsonRpcTransport/requestJsonRpc.js | 6 +- .../lib/transport/ReconnectableStream.js | 8 +- .../errors/NoAvailableAddressesError.js | 4 +- .../errors/response/InvalidRequestDPPError.js | 4 +- .../errors/response/InvalidRequestError.js | 4 +- .../errors/response/MaxRetriesReachedError.js | 4 +- .../NoAvailableAddressesForRetryError.js | 4 +- .../errors/response/ResponseError.js | 4 +- .../errors/response/RetriableResponseError.js | 4 +- .../transport/errors/response/ServerError.js | 4 +- packages/js-dapi-client/lib/utils/bytes.js | 21 +- packages/js-dapi-client/lib/utils/wait.js | 2 +- packages/js-dapi-client/package.json | 50 +-- .../BlockHeadersProvider.spec.js | 8 +- .../test/integration/DAPIClient.spec.js | 4 +- .../SimplifiedMasternodeListProvider.spec.js | 10 +- .../methods/core/CoreMethodsFacade.spec.js | 11 +- .../platform/PlatformMethodsFacade.spec.js | 19 +- .../BlockHeadersProvider.spec.js | 14 +- .../BlockHeadersReader.spec.js | 10 +- ...ateBlockHeadersProviderFromOptions.spec.js | 4 +- .../test/unit/DAPIClient.spec.js | 12 +- .../dapiAddressProvider/DAPIAddress.spec.js | 6 +- .../ListDAPIAddressProvider.spec.js | 4 +- ...dMasternodeListDAPIAddressProvider.spec.js | 6 +- ...eateDAPIAddressProviderFromOptions.spec.js | 12 +- .../core/broadcastTransactionFactory.spec.js | 9 +- .../core/getBestBlockHashFactory.spec.js | 2 +- .../core/getBlockByHashFactory.spec.js | 7 +- .../core/getBlockByHeightFactory.spec.js | 7 +- .../methods/core/getBlockHashFactory.spec.js | 2 +- .../core/getBlockchainStatusFactory.spec.js | 9 +- .../core/getMasternodeStatusFactory.spec.js | 7 +- .../GetTransactionResponse.spec.js | 8 +- .../getTransactionFactory.spec.js | 9 +- ...oBlockHeadersWithChainLocksFactory.spec.js | 14 +- ...ibeToTransactionsWithProofsFactory.spec.js | 16 +- .../broadcastStateTransitionFactory.spec.js | 15 +- .../ConsensusParamsBlock.spec.js | 2 +- .../ConsensusParamsEvidence.spec.js | 2 +- .../getConsensusParamsFactory.spec.js | 8 +- .../getConsensusParamsResponse.spec.js | 12 +- .../GetDataContractResponse.spec.js | 19 +- .../getDataContractFactory.spec.js | 16 +- .../GetDataContractHistoryResponse.spec.js | 19 +- .../getDataContractHistoryFactory.spec.js | 31 +- .../getDocuments/GetDocumentsResponse.spec.js | 19 +- .../getDocuments/getDocumentsFactory.spec.js | 24 +- .../GetEpochsInfoResponse.spec.js | 19 +- .../getEpochsInfoFactory.spec.js | 18 +- .../GetIdentitiesContractKeysResponse.spec.js | 21 +- .../getIdentitiesContractKeysFactory.spec.js | 20 +- .../getIdentity/GetIdentityResponse.spec.js | 19 +- .../getIdentity/getIdentityFactory.spec.js | 16 +- .../GetIdentityBalanceResponse.spec.js | 17 +- .../getIdentityBalanceFactory.spec.js | 13 +- ...GetIdentityByPublicKeyHashResponse.spec.js | 19 +- .../getIdentityByPublicKeyHashFactory.spec.js | 18 +- .../GetIdentityContractNonce.spec.js | 17 +- .../getIdentityContractNonceFactory.spec.js | 13 +- .../getIdentityKeys/GetIdentityKeys.spec.js | 17 +- .../getIdentityKeysFactory.spec.js | 17 +- .../getIdentityNonce/GetIdentityNonce.spec.js | 17 +- .../getIdentityNonceFactory.spec.js | 13 +- ...rotocolVersionUpgradeStateResponse.spec.js | 26 +- ...ProtocolVersionUpgradeStateFactory.spec.js | 22 +- ...olVersionUpgradeVoteStatusResponse.spec.js | 22 +- ...colVersionUpgradeVoteStatusFactory.spec.js | 18 +- .../getStatus/GetStatusResponse.spec.js | 24 +- .../getStatus/getStatusFactory.spec.js | 24 +- ...aitForStateTransitionResultFactory.spec.js | 12 +- .../GrpcTransport/GrpcTransport.spec.js | 24 +- .../createGrpcTransportError.spec.js | 48 +-- .../JsonRpcTransport/JsonRpcTransport.spec.js | 18 +- .../createJsonTransportError.spec.js | 14 +- .../JsonRpcTransport/requestJsonRpc.spec.js | 6 +- .../transport/ReconnectableStream.spec.js | 10 +- packages/js-dapi-client/webpack.config.js | 52 --- yarn.lock | 132 -------- 197 files changed, 986 insertions(+), 1505 deletions(-) delete mode 100644 .yarn/cache/babel-loader-npm-9.1.3-cbf4da21df-7086e67827.zip delete mode 100644 .yarn/cache/common-path-prefix-npm-3.0.0-68b78785c1-09c180e8d8.zip delete mode 100644 .yarn/cache/core-js-npm-3.33.2-08a6fba407-d62554d51c.zip delete mode 100644 .yarn/cache/find-cache-dir-npm-4.0.0-ad2504e37e-52a456a80d.zip delete mode 100644 .yarn/cache/find-up-npm-6.3.0-e5056fc655-4f3bdc30d4.zip delete mode 100644 .yarn/cache/locate-path-npm-7.2.0-0e1169e19b-1c6d269d4e.zip delete mode 100644 .yarn/cache/p-limit-npm-4.0.0-5dccf29b67-01d9d70695.zip delete mode 100644 .yarn/cache/p-locate-npm-6.0.0-b6cfb720dc-2bfe5234ef.zip delete mode 100644 .yarn/cache/path-exists-npm-5.0.0-0bf403c56c-8ca842868c.zip delete mode 100644 .yarn/cache/pkg-dir-npm-7.0.0-02ff099b31-94298b20a4.zip delete mode 100644 .yarn/cache/schema-utils-npm-4.2.0-e822c5b02e-808784735e.zip delete mode 100644 .yarn/cache/yocto-queue-npm-1.0.0-7b502f1987-2cac84540f.zip delete mode 100644 packages/js-dapi-client/karma.conf.js delete mode 100644 packages/js-dapi-client/lib/test/karma/bootstrap.js delete mode 100644 packages/js-dapi-client/lib/test/karma/loader.js delete mode 100644 packages/js-dapi-client/webpack.config.js diff --git a/.pnp.cjs b/.pnp.cjs index 8304b5561bd..ad4e9515b1d 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -2566,49 +2566,26 @@ const RAW_RUNTIME_STATE = ["workspace:packages/js-dapi-client", {\ "packageLocation": "./packages/js-dapi-client/",\ "packageDependencies": [\ - ["@babel/core", "npm:7.26.10"],\ ["@dashevo/dapi-client", "workspace:packages/js-dapi-client"],\ ["@dashevo/dapi-grpc", "workspace:packages/dapi-grpc"],\ ["@dashevo/dash-spv", "workspace:packages/dash-spv"],\ ["@dashevo/dashcore-lib", "npm:0.22.0"],\ ["@dashevo/grpc-common", "workspace:packages/js-grpc-common"],\ ["@dashevo/wasm-dpp", "workspace:packages/wasm-dpp"],\ - ["assert-browserify", "npm:2.0.0"],\ - ["babel-loader", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:9.1.3"],\ - ["browserify-zlib", "npm:0.2.0"],\ - ["buffer", "npm:6.0.3"],\ ["cbor", "npm:8.1.0"],\ ["chai", "npm:4.3.10"],\ ["chai-as-promised", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:7.1.1"],\ ["comment-parser", "npm:0.7.6"],\ - ["core-js", "npm:3.33.2"],\ - ["crypto-browserify", "npm:3.12.1"],\ ["dirty-chai", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:2.0.1"],\ ["eslint", "virtual:de32c10d523830f1843784ae863166d6ef2e074b6da9615f2b3296a1f90385ed3f59e274e3957326ba7cf3442d82470d9e1ec01e6720989a570c075c95d90dbc#npm:9.39.2"],\ ["events", "npm:3.3.0"],\ ["google-protobuf", "npm:3.19.1"],\ - ["karma", "npm:6.4.3"],\ - ["karma-chai", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:0.1.0"],\ - ["karma-chrome-launcher", "npm:3.1.0"],\ - ["karma-firefox-launcher", "npm:2.1.2"],\ - ["karma-mocha", "npm:2.0.1"],\ - ["karma-mocha-reporter", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:2.2.5"],\ - ["karma-webpack", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.0.0"],\ ["mocha", "npm:11.1.0"],\ ["nyc", "npm:15.1.0"],\ - ["os-browserify", "npm:0.3.0"],\ - ["path-browserify", "npm:1.0.1"],\ - ["process", "npm:0.11.10"],\ ["sinon", "npm:18.0.1"],\ ["sinon-chai", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:3.7.0"],\ - ["stream-browserify", "npm:3.0.0"],\ - ["string_decoder", "npm:1.3.0"],\ ["undici", "npm:6.25.0"],\ - ["url", "npm:0.11.3"],\ - ["util", "npm:0.12.4"],\ - ["wasm-x11-hash", "npm:0.0.2"],\ - ["webpack", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.105.0"],\ - ["webpack-cli", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:4.9.1"]\ + ["wasm-x11-hash", "npm:0.0.2"]\ ],\ "linkType": "SOFT"\ }]\ @@ -6136,23 +6113,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:b37ef7cf98ceabe8c7b789a7db3f0a5f3444d083afa5f0e3ab570292e74eff241f890fadbf245a134b2ebfcba326b1782124a4dd4f16ca7cdb6091dd9a987c04#npm:1.1.0", {\ - "packageLocation": "./.yarn/__virtual__/@webpack-cli-configtest-virtual-34b876bdf7/0/cache/@webpack-cli-configtest-npm-1.1.0-2b6b2ef3d7-69e7816b5b.zip/node_modules/@webpack-cli/configtest/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["@types/webpack-cli", null],\ - ["@webpack-cli/configtest", "virtual:b37ef7cf98ceabe8c7b789a7db3f0a5f3444d083afa5f0e3ab570292e74eff241f890fadbf245a134b2ebfcba326b1782124a4dd4f16ca7cdb6091dd9a987c04#npm:1.1.0"],\ - ["webpack", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.105.0"],\ - ["webpack-cli", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:4.9.1"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "@types/webpack",\ - "webpack-cli",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:b65947dc409e3c56a3ffe1d9845d7e7551f7c6a754af3941e9848fc9815659e0053c64fd038dddc29d956633aad694f761d0d61fe40b22419d9d10b8b52633c6#npm:1.1.0", {\ "packageLocation": "./.yarn/__virtual__/@webpack-cli-configtest-virtual-1656ebbd4e/0/cache/@webpack-cli-configtest-npm-1.1.0-2b6b2ef3d7-69e7816b5b.zip/node_modules/@webpack-cli/configtest/",\ "packageDependencies": [\ @@ -6252,20 +6212,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:b37ef7cf98ceabe8c7b789a7db3f0a5f3444d083afa5f0e3ab570292e74eff241f890fadbf245a134b2ebfcba326b1782124a4dd4f16ca7cdb6091dd9a987c04#npm:1.4.0", {\ - "packageLocation": "./.yarn/__virtual__/@webpack-cli-info-virtual-5b3c564e68/0/cache/@webpack-cli-info-npm-1.4.0-4a26ccee64-6385b1e2c5.zip/node_modules/@webpack-cli/info/",\ - "packageDependencies": [\ - ["@types/webpack-cli", null],\ - ["@webpack-cli/info", "virtual:b37ef7cf98ceabe8c7b789a7db3f0a5f3444d083afa5f0e3ab570292e74eff241f890fadbf245a134b2ebfcba326b1782124a4dd4f16ca7cdb6091dd9a987c04#npm:1.4.0"],\ - ["envinfo", "npm:7.8.1"],\ - ["webpack-cli", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:4.9.1"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "webpack-cli"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:b65947dc409e3c56a3ffe1d9845d7e7551f7c6a754af3941e9848fc9815659e0053c64fd038dddc29d956633aad694f761d0d61fe40b22419d9d10b8b52633c6#npm:1.4.0", {\ "packageLocation": "./.yarn/__virtual__/@webpack-cli-info-virtual-f31931ce84/0/cache/@webpack-cli-info-npm-1.4.0-4a26ccee64-6385b1e2c5.zip/node_modules/@webpack-cli/info/",\ "packageDependencies": [\ @@ -6371,23 +6317,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:b37ef7cf98ceabe8c7b789a7db3f0a5f3444d083afa5f0e3ab570292e74eff241f890fadbf245a134b2ebfcba326b1782124a4dd4f16ca7cdb6091dd9a987c04#npm:1.6.0", {\ - "packageLocation": "./.yarn/__virtual__/@webpack-cli-serve-virtual-bcf913d932/0/cache/@webpack-cli-serve-npm-1.6.0-c7b35aa4ef-3fd2e5f365.zip/node_modules/@webpack-cli/serve/",\ - "packageDependencies": [\ - ["@types/webpack-cli", null],\ - ["@types/webpack-dev-server", null],\ - ["@webpack-cli/serve", "virtual:b37ef7cf98ceabe8c7b789a7db3f0a5f3444d083afa5f0e3ab570292e74eff241f890fadbf245a134b2ebfcba326b1782124a4dd4f16ca7cdb6091dd9a987c04#npm:1.6.0"],\ - ["webpack-cli", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:4.9.1"],\ - ["webpack-dev-server", null]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "@types/webpack-dev-server",\ - "webpack-cli",\ - "webpack-dev-server"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:b65947dc409e3c56a3ffe1d9845d7e7551f7c6a754af3941e9848fc9815659e0053c64fd038dddc29d956633aad694f761d0d61fe40b22419d9d10b8b52633c6#npm:1.6.0", {\ "packageLocation": "./.yarn/__virtual__/@webpack-cli-serve-virtual-4711a17f04/0/cache/@webpack-cli-serve-npm-1.6.0-c7b35aa4ef-3fd2e5f365.zip/node_modules/@webpack-cli/serve/",\ "packageDependencies": [\ @@ -7444,34 +7373,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["babel-loader", [\ - ["npm:9.1.3", {\ - "packageLocation": "./.yarn/cache/babel-loader-npm-9.1.3-cbf4da21df-7086e67827.zip/node_modules/babel-loader/",\ - "packageDependencies": [\ - ["babel-loader", "npm:9.1.3"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:9.1.3", {\ - "packageLocation": "./.yarn/__virtual__/babel-loader-virtual-814c93af3e/0/cache/babel-loader-npm-9.1.3-cbf4da21df-7086e67827.zip/node_modules/babel-loader/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.26.10"],\ - ["@types/babel__core", null],\ - ["@types/webpack", null],\ - ["babel-loader", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:9.1.3"],\ - ["find-cache-dir", "npm:4.0.0"],\ - ["schema-utils", "npm:4.2.0"],\ - ["webpack", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.105.0"]\ - ],\ - "packagePeers": [\ - "@babel/core",\ - "@types/babel__core",\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["babel-plugin-polyfill-corejs2", [\ ["npm:0.4.12", {\ "packageLocation": "./.yarn/cache/babel-plugin-polyfill-corejs2-npm-0.4.12-d572de89f3-38b8cd69f0.zip/node_modules/babel-plugin-polyfill-corejs2/",\ @@ -9023,15 +8924,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["common-path-prefix", [\ - ["npm:3.0.0", {\ - "packageLocation": "./.yarn/cache/common-path-prefix-npm-3.0.0-68b78785c1-09c180e8d8.zip/node_modules/common-path-prefix/",\ - "packageDependencies": [\ - ["common-path-prefix", "npm:3.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["commondir", [\ ["npm:1.0.1", {\ "packageLocation": "./.yarn/cache/commondir-npm-1.0.1-291b790340-4620bc4936.zip/node_modules/commondir/",\ @@ -9358,15 +9250,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["core-js", [\ - ["npm:3.33.2", {\ - "packageLocation": "./.yarn/unplugged/core-js-npm-3.33.2-08a6fba407/node_modules/core-js/",\ - "packageDependencies": [\ - ["core-js", "npm:3.33.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["core-js-compat", [\ ["npm:3.41.0", {\ "packageLocation": "./.yarn/cache/core-js-compat-npm-3.41.0-3a60c76839-a59da111fc.zip/node_modules/core-js-compat/",\ @@ -12053,15 +11936,6 @@ const RAW_RUNTIME_STATE = ["pkg-dir", "npm:4.2.0"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/find-cache-dir-npm-4.0.0-ad2504e37e-52a456a80d.zip/node_modules/find-cache-dir/",\ - "packageDependencies": [\ - ["common-path-prefix", "npm:3.0.0"],\ - ["find-cache-dir", "npm:4.0.0"],\ - ["pkg-dir", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["find-up", [\ @@ -12090,15 +11964,6 @@ const RAW_RUNTIME_STATE = ["path-exists", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:6.3.0", {\ - "packageLocation": "./.yarn/cache/find-up-npm-6.3.0-e5056fc655-4f3bdc30d4.zip/node_modules/find-up/",\ - "packageDependencies": [\ - ["find-up", "npm:6.3.0"],\ - ["locate-path", "npm:7.2.0"],\ - ["path-exists", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["find-yarn-workspace-root", [\ @@ -15014,22 +14879,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.0.0", {\ - "packageLocation": "./.yarn/__virtual__/karma-webpack-virtual-bbb0fdb943/0/cache/karma-webpack-npm-5.0.0-d7c66b2a8a-9bd565adbc.zip/node_modules/karma-webpack/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["glob", "npm:7.2.3"],\ - ["karma-webpack", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.0.0"],\ - ["minimatch", "npm:3.1.2"],\ - ["webpack", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.105.0"],\ - ["webpack-merge", "npm:4.2.2"]\ - ],\ - "packagePeers": [\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:98d1afeac78a19485e4cb7428abff692e58b6fc468d8040035b560ed49383fc95857be6b5014af27e53063e6f08b654690c2b945f3443c22dd60c6b083684b3c#npm:5.0.0", {\ "packageLocation": "./.yarn/__virtual__/karma-webpack-virtual-3f3d78beea/0/cache/karma-webpack-npm-5.0.0-d7c66b2a8a-9bd565adbc.zip/node_modules/karma-webpack/",\ "packageDependencies": [\ @@ -15346,14 +15195,6 @@ const RAW_RUNTIME_STATE = ["p-locate", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:7.2.0", {\ - "packageLocation": "./.yarn/cache/locate-path-npm-7.2.0-0e1169e19b-1c6d269d4e.zip/node_modules/locate-path/",\ - "packageDependencies": [\ - ["locate-path", "npm:7.2.0"],\ - ["p-locate", "npm:6.0.0"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["lodash", [\ @@ -17434,14 +17275,6 @@ const RAW_RUNTIME_STATE = ["yocto-queue", "npm:0.1.0"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:4.0.0", {\ - "packageLocation": "./.yarn/cache/p-limit-npm-4.0.0-5dccf29b67-01d9d70695.zip/node_modules/p-limit/",\ - "packageDependencies": [\ - ["p-limit", "npm:4.0.0"],\ - ["yocto-queue", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["p-locate", [\ @@ -17468,14 +17301,6 @@ const RAW_RUNTIME_STATE = ["p-locate", "npm:5.0.0"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:6.0.0", {\ - "packageLocation": "./.yarn/cache/p-locate-npm-6.0.0-b6cfb720dc-2bfe5234ef.zip/node_modules/p-locate/",\ - "packageDependencies": [\ - ["p-limit", "npm:4.0.0"],\ - ["p-locate", "npm:6.0.0"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["p-map", [\ @@ -17808,13 +17633,6 @@ const RAW_RUNTIME_STATE = ["path-exists", "npm:4.0.0"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:5.0.0", {\ - "packageLocation": "./.yarn/cache/path-exists-npm-5.0.0-0bf403c56c-8ca842868c.zip/node_modules/path-exists/",\ - "packageDependencies": [\ - ["path-exists", "npm:5.0.0"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["path-is-absolute", [\ @@ -18056,14 +17874,6 @@ const RAW_RUNTIME_STATE = ["pkg-dir", "npm:4.2.0"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:7.0.0", {\ - "packageLocation": "./.yarn/cache/pkg-dir-npm-7.0.0-02ff099b31-94298b20a4.zip/node_modules/pkg-dir/",\ - "packageDependencies": [\ - ["find-up", "npm:6.3.0"],\ - ["pkg-dir", "npm:7.0.0"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["plur", [\ @@ -19284,17 +19094,6 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["schema-utils", [\ - ["npm:4.2.0", {\ - "packageLocation": "./.yarn/cache/schema-utils-npm-4.2.0-e822c5b02e-808784735e.zip/node_modules/schema-utils/",\ - "packageDependencies": [\ - ["@types/json-schema", "npm:7.0.15"],\ - ["ajv", "npm:8.18.0"],\ - ["ajv-formats", "virtual:4954c4a72ee1ac7afec22da3b17d9a937f807567fbfd843f7fb4d48a0c27456b3fd63f5453a6ffa910bcac753ec013f5554ffe0d1c324703fa4d0658622f21bd#npm:2.1.1"],\ - ["ajv-keywords", "virtual:4954c4a72ee1ac7afec22da3b17d9a937f807567fbfd843f7fb4d48a0c27456b3fd63f5453a6ffa910bcac753ec013f5554ffe0d1c324703fa4d0658622f21bd#npm:5.1.0"],\ - ["schema-utils", "npm:4.2.0"]\ - ],\ - "linkType": "HARD"\ - }],\ ["npm:4.3.0", {\ "packageLocation": "./.yarn/cache/schema-utils-npm-4.3.0-6f0a75e2e2-86c5a7c72a.zip/node_modules/schema-utils/",\ "packageDependencies": [\ @@ -20830,36 +20629,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:62941717b655ac142dd4cd1370e0c48afd49b5b0e864a88fae8030cff430b00a6538f10d6ec6916a973bebc3c0274b8dad2e2dfd6263382ab5c42f6550c4185a#npm:5.3.16", {\ - "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-50314d7465/0/cache/terser-webpack-plugin-npm-5.3.16-7d59a4385c-09dfbff602.zip/node_modules/terser-webpack-plugin/",\ - "packageDependencies": [\ - ["@jridgewell/trace-mapping", "npm:0.3.25"],\ - ["@swc/core", null],\ - ["@types/esbuild", null],\ - ["@types/swc__core", null],\ - ["@types/uglify-js", null],\ - ["@types/webpack", null],\ - ["esbuild", null],\ - ["jest-worker", "npm:27.5.1"],\ - ["schema-utils", "npm:4.3.0"],\ - ["serialize-javascript", "npm:7.0.4"],\ - ["terser", "npm:5.39.0"],\ - ["terser-webpack-plugin", "virtual:62941717b655ac142dd4cd1370e0c48afd49b5b0e864a88fae8030cff430b00a6538f10d6ec6916a973bebc3c0274b8dad2e2dfd6263382ab5c42f6550c4185a#npm:5.3.16"],\ - ["uglify-js", null],\ - ["webpack", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.105.0"]\ - ],\ - "packagePeers": [\ - "@swc/core",\ - "@types/esbuild",\ - "@types/swc__core",\ - "@types/uglify-js",\ - "@types/webpack",\ - "esbuild",\ - "uglify-js",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:ac08d1802148a23c9b3f7a8749cbaaded258daba072aa6e761629ffa5f56f8f3e419894607861c1572ce1b35ea47b30ac3d38935ced0e4c1e2540eff8deb5e8f#npm:5.3.16", {\ "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-dbe00d6a37/0/cache/terser-webpack-plugin-npm-5.3.16-7d59a4385c-09dfbff602.zip/node_modules/terser-webpack-plugin/",\ "packageDependencies": [\ @@ -22682,44 +22451,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.105.0", {\ - "packageLocation": "./.yarn/__virtual__/webpack-virtual-62941717b6/0/cache/webpack-npm-5.105.0-ff5d0a44ab-95e0a0f04f.zip/node_modules/webpack/",\ - "packageDependencies": [\ - ["@types/eslint-scope", "npm:3.7.7"],\ - ["@types/estree", "npm:1.0.8"],\ - ["@types/json-schema", "npm:7.0.15"],\ - ["@types/webpack-cli", null],\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-edit", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-parser", "npm:1.14.1"],\ - ["acorn", "npm:8.15.0"],\ - ["acorn-import-phases", "virtual:4007bcbf54b6a1fc892cfdfa87d57c16a3d9d04f40d8627892c15aab1e876c161341a8d50416117b4d1b25d4709d289b42728585c69b09237cab14322e1446c6#npm:1.0.4"],\ - ["browserslist", "npm:4.28.1"],\ - ["chrome-trace-event", "npm:1.0.3"],\ - ["enhanced-resolve", "npm:5.19.0"],\ - ["es-module-lexer", "npm:2.0.0"],\ - ["eslint-scope", "npm:5.1.1"],\ - ["events", "npm:3.3.0"],\ - ["glob-to-regexp", "npm:0.4.1"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["json-parse-even-better-errors", "npm:2.3.1"],\ - ["loader-runner", "npm:4.3.1"],\ - ["mime-types", "npm:2.1.34"],\ - ["neo-async", "npm:2.6.2"],\ - ["schema-utils", "npm:4.3.3"],\ - ["tapable", "npm:2.3.0"],\ - ["terser-webpack-plugin", "virtual:62941717b655ac142dd4cd1370e0c48afd49b5b0e864a88fae8030cff430b00a6538f10d6ec6916a973bebc3c0274b8dad2e2dfd6263382ab5c42f6550c4185a#npm:5.3.16"],\ - ["watchpack", "npm:2.5.1"],\ - ["webpack", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.105.0"],\ - ["webpack-cli", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:4.9.1"],\ - ["webpack-sources", "npm:3.3.4"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "webpack-cli"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:98d1afeac78a19485e4cb7428abff692e58b6fc468d8040035b560ed49383fc95857be6b5014af27e53063e6f08b654690c2b945f3443c22dd60c6b083684b3c#npm:5.105.0", {\ "packageLocation": "./.yarn/__virtual__/webpack-virtual-4f0f9b68e7/0/cache/webpack-npm-5.105.0-ff5d0a44ab-95e0a0f04f.zip/node_modules/webpack/",\ "packageDependencies": [\ @@ -22963,47 +22694,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:4.9.1", {\ - "packageLocation": "./.yarn/__virtual__/webpack-cli-virtual-b37ef7cf98/0/cache/webpack-cli-npm-4.9.1-1b8a5f360f-14eb69cec6.zip/node_modules/webpack-cli/",\ - "packageDependencies": [\ - ["@discoveryjs/json-ext", "npm:0.5.5"],\ - ["@types/webpack", null],\ - ["@types/webpack-bundle-analyzer", null],\ - ["@types/webpack-cli__generators", null],\ - ["@types/webpack-cli__migrate", null],\ - ["@types/webpack-dev-server", null],\ - ["@webpack-cli/configtest", "virtual:b37ef7cf98ceabe8c7b789a7db3f0a5f3444d083afa5f0e3ab570292e74eff241f890fadbf245a134b2ebfcba326b1782124a4dd4f16ca7cdb6091dd9a987c04#npm:1.1.0"],\ - ["@webpack-cli/generators", null],\ - ["@webpack-cli/info", "virtual:b37ef7cf98ceabe8c7b789a7db3f0a5f3444d083afa5f0e3ab570292e74eff241f890fadbf245a134b2ebfcba326b1782124a4dd4f16ca7cdb6091dd9a987c04#npm:1.4.0"],\ - ["@webpack-cli/migrate", null],\ - ["@webpack-cli/serve", "virtual:b37ef7cf98ceabe8c7b789a7db3f0a5f3444d083afa5f0e3ab570292e74eff241f890fadbf245a134b2ebfcba326b1782124a4dd4f16ca7cdb6091dd9a987c04#npm:1.6.0"],\ - ["colorette", "npm:2.0.20"],\ - ["commander", "npm:7.2.0"],\ - ["execa", "npm:5.1.1"],\ - ["fastest-levenshtein", "npm:1.0.12"],\ - ["import-local", "npm:3.0.3"],\ - ["interpret", "npm:2.2.0"],\ - ["rechoir", "npm:0.7.1"],\ - ["webpack", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:5.105.0"],\ - ["webpack-bundle-analyzer", null],\ - ["webpack-cli", "virtual:8f25fc90e0fb5fd89843707863857591fa8c52f9f33eadced4bf404b1871d91959f7bb86948ae0e1b53ee94d491ef8fde9c0b58b39c9490c0d0fa6c931945f97#npm:4.9.1"],\ - ["webpack-dev-server", null],\ - ["webpack-merge", "npm:5.8.0"]\ - ],\ - "packagePeers": [\ - "@types/webpack-bundle-analyzer",\ - "@types/webpack-cli__generators",\ - "@types/webpack-cli__migrate",\ - "@types/webpack-dev-server",\ - "@types/webpack",\ - "@webpack-cli/generators",\ - "@webpack-cli/migrate",\ - "webpack-bundle-analyzer",\ - "webpack-dev-server",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:98d1afeac78a19485e4cb7428abff692e58b6fc468d8040035b560ed49383fc95857be6b5014af27e53063e6f08b654690c2b945f3443c22dd60c6b083684b3c#npm:4.9.1", {\ "packageLocation": "./.yarn/__virtual__/webpack-cli-virtual-b65947dc40/0/cache/webpack-cli-npm-4.9.1-1b8a5f360f-14eb69cec6.zip/node_modules/webpack-cli/",\ "packageDependencies": [\ @@ -23837,13 +23527,6 @@ const RAW_RUNTIME_STATE = ["yocto-queue", "npm:0.1.0"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/yocto-queue-npm-1.0.0-7b502f1987-2cac84540f.zip/node_modules/yocto-queue/",\ - "packageDependencies": [\ - ["yocto-queue", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["z-schema", [\ diff --git a/.yarn/cache/babel-loader-npm-9.1.3-cbf4da21df-7086e67827.zip b/.yarn/cache/babel-loader-npm-9.1.3-cbf4da21df-7086e67827.zip deleted file mode 100644 index 6acd5dfdcbd39dcdefdadd76167b328ba4dbb632..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16539 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 diff --git a/.yarn/cache/common-path-prefix-npm-3.0.0-68b78785c1-09c180e8d8.zip b/.yarn/cache/common-path-prefix-npm-3.0.0-68b78785c1-09c180e8d8.zip deleted file mode 100644 index 0ba9492af1c62b0a3e8acc58b9bf292ba7f28d3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2957 zcma)82UJtp7L9bJOq3$wqk;@b4G;k#6hWkf5GfImZh+7Ngf2y;2`U{72&fb(qaYYM zqV%E+C7~lCH8cex?Gs?YiG}Z%HLl^l_3nLdt$X&n_wN19+4^u=Iu5{>rdl+>^!4F; z$4VXDuy$x`SFD|n3))Lk|Cdww_D{9Ny1HWBB-~NnjuP&kXnQBW@6j{>rmr6&zLD_g zJp=$O&;S5u4iK#iQ`fkJ)G*R-cgvRIc)u+cTkR}}^B1=#1KGtvinb3lEfdFO2Fiki z%l;fA$j(1GaTovFtxP##fCmfEP&rs5yHqQbfg*~7qFfzeg{kwLMBc4Re99QjwH@68 zsg*hfwhS27#4&%z^#P@>I2D^a{Z^O5`nVHWLIuyy`R)s)ZvQqy^ zI6O<{p(;u?VsQQ)Y3jy$`NOU=QEko@!3;L>6r|VPS`)#oar%z_1^sOCs(L}=ySm;Y zcV+K{Qb3nj__E`%DE8Zs(#_0HnxV@Hb8D)(0zqe?Sh)t_W`Vp~{xGg75QQt?jxEq9 zol)jqQ7*pxqa)m+X>OwNnhG~M%F|?4yR*R1IqhhPSx(yh&>7)K!w#4`Sb9p!v8A6V z9$pogEqCh5seu;gRAMZ*5|#8Be3D^6P`_KrdZEo31s%zS> zdvm4e8N!M(d=|C}H!EuDeZgCluyK3OrAgLO!meahquU@!+hI9?S#(xptNW9oFjE~I z47DwaD`Y;5%&<5$EdI)SvGsj>{a-xKP<20(>K`Jbn?WVDgi5OT0Z4U6*SeW7sfv^Bq-bhysg)43Np%@qpLjLF9E9(NylUn4#}h*1qm^a42) zrG-IOZ7IEIa8ELK9FE@*DE)22@;G6tCyMg0tD3z_*^vCkH;7>V`{Ss`7JlBiAr*K) z=yUj3c6en{#q=?*7l9^15Ky=rsaEBNzwnhhmd?P+lb>tqx^CgG`nh^|pAAqL|J+@} zkAntCB9$k$+7sM-O^7wHDY&1B=j8;Po zzIBhUz+xnKdF`mO=AbDWpBmta-TH7#AYM5g5;CLNrEHFS+8<|NZTlv-< z`k838xRz9YYDT|84*-Z9fM`PvwTlQ1u&Z4z4uO3q#S%f@;-oXIhb6QQqEvrV*Q@bX z_P&h*+qdM|a+b_}5I}5v)Pi*-3t=Kq=NkSBpd`+)@bEA|OtRN@`W=griu`Vl++kXb zwOT|wxj7{}0eNiFTf9bqzS|K-z2K60{ybBfC7u(*3laEaw(K!&h8XJxT8AbsD;#+u z*33d#fdc3$;~Ok%NdlIFMtEj(2YSRH7y5kO$9v=$q<8?5VuEZO2ppeV+E|Y)*RL}= zhiT5`(h3E0DT2xz-XuJ;7HWn%RL@@A5Yc0`ltPH_N*e`vo~H4W_q~O|Q+RPL{vMG? zaR?ESqbvfk?lYx#QZ*B^4yn$`4D(NZD^UVwaEz8R3~Mqln{T_&yPCc17zgxsA%Gm;>vm?@$`6=2NO+toHLBJR&4%cWp<=Wu}&pT_Z)4Gz2Z)*NIc#Irkg z!M*&{yzz(NKr*dS>=xxbYLvWVk(CcMd78hQd)Wv94axRLGd&wOnJ{)-3mIEsBl=expoucLBYU;2^c2C^N9p5^WlAi=5^i-#5;#rQ z0GRd~I#Fr;kXdmVk#dbBZJl4{o+Ddxail$&Xt|;>RAP@cAV?=O#!oBadL=)x|Ex3E zGms#hsxN!$EqVZ*eXA07U~ext4ABJ>*D=x->x6^bItWPZE<$G~fmvI;jY(Js(f*7m z41h!xazw%-A*(&vwmuw@Nah99bp&@)T9jD%W4^j47aO>mm@r^~KKu~PdD>rlC+fPs zwneos!#*eV>rlS0LEpMXHL?An|LCl~q3zYs{oZO1Fek+60BGNx*52;+K=&8sAD|)B zAO5G^{lgOX%JhEJ{gvSdsxjTaqyB%L*pIwF75zXy&+zZa|4U5!VfQQV2kakI^L(&l Z_@YC7I6ZY4001NPQl=gt^zfIrzX27P%V+=q diff --git a/.yarn/cache/core-js-npm-3.33.2-08a6fba407-d62554d51c.zip b/.yarn/cache/core-js-npm-3.33.2-08a6fba407-d62554d51c.zip deleted file mode 100644 index d4e3e88ae78f7c4f3ce053e69a9b625819d3df66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1193535 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

-)R}Q@rHNU|?wFMuK{PD~i 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

q~!9f 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

T!{Cut{vjXt=z5yDLC&#&J`LeBarZTb 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 dq{v`!tIjkS%*vCe^-hx@KuQ3%< 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 D-l+oo diff --git a/.yarn/cache/find-cache-dir-npm-4.0.0-ad2504e37e-52a456a80d.zip b/.yarn/cache/find-cache-dir-npm-4.0.0-ad2504e37e-52a456a80d.zip deleted file mode 100644 index 52c003246f73b97c8e2361181704b7ed13a9cb86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3710 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 HzPQ)k0{qpU)=c34Yw({J$!+iKVr^p% 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 diff --git a/.yarn/cache/locate-path-npm-7.2.0-0e1169e19b-1c6d269d4e.zip b/.yarn/cache/locate-path-npm-7.2.0-0e1169e19b-1c6d269d4e.zip deleted file mode 100644 index 746a29a206d4e8cb11706ecf5c35672337187e31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4229 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 b!26k$wA9E>G8h0radOa~?1${oXzu diff --git a/.yarn/cache/p-limit-npm-4.0.0-5dccf29b67-01d9d70695.zip b/.yarn/cache/p-limit-npm-4.0.0-5dccf29b67-01d9d70695.zip deleted file mode 100644 index f717a5b84aa11be2953bde01fe83fab7612dee18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4617 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 diff --git a/.yarn/cache/path-exists-npm-5.0.0-0bf403c56c-8ca842868c.zip b/.yarn/cache/path-exists-npm-5.0.0-0bf403c56c-8ca842868c.zip deleted file mode 100644 index 9a134355e6ff9b3b5b1ea5195b28028c99429575..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3103 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 diff --git a/.yarn/cache/schema-utils-npm-4.2.0-e822c5b02e-808784735e.zip b/.yarn/cache/schema-utils-npm-4.2.0-e822c5b02e-808784735e.zip deleted file mode 100644 index 6f296a3da9d8b5e7619887237227160dbf44f0ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22405 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 diff --git a/.yarn/cache/yocto-queue-npm-1.0.0-7b502f1987-2cac84540f.zip b/.yarn/cache/yocto-queue-npm-1.0.0-7b502f1987-2cac84540f.zip deleted file mode 100644 index c08ff193b801623bde40ff06d8e62684a7c899d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4163 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 M(6KFXF?@geA7la=UH||9 diff --git a/packages/js-dapi-client/.mocharc.yml b/packages/js-dapi-client/.mocharc.yml index bbd673997de..5ae84e7ee03 100644 --- a/packages/js-dapi-client/.mocharc.yml +++ b/packages/js-dapi-client/.mocharc.yml @@ -1,3 +1,3 @@ -require: lib/test/bootstrap.js +require: ./lib/test/bootstrap.js recursive: true timeout: 3000 diff --git a/packages/js-dapi-client/karma.conf.js b/packages/js-dapi-client/karma.conf.js deleted file mode 100644 index 12430bc899e..00000000000 --- a/packages/js-dapi-client/karma.conf.js +++ /dev/null @@ -1,45 +0,0 @@ -const karmaMocha = require('karma-mocha'); -const karmaMochaReporter = require('karma-mocha-reporter'); -const karmaChai = require('karma-chai'); -const karmaChromeLauncher = require('karma-chrome-launcher'); -const karmaFirefoxLauncher = require('karma-firefox-launcher'); -const karmaWebpack = require('karma-webpack'); -const webpackConfig = require('./webpack.config'); - -module.exports = (config) => { - config.set({ - frameworks: ['mocha', 'chai', 'webpack'], - files: [ - 'lib/test/karma/loader.js', - ], - preprocessors: { - 'lib/test/karma/loader.js': ['webpack'], - }, - webpack: { - mode: 'development', - resolve: webpackConfig[0].resolve, - plugins: webpackConfig[0].plugins, - }, - client: { - mocha: { - timeout: 5000, - }, - }, - reporters: ['mocha'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: false, - browsers: ['ChromeHeadless', 'FirefoxHeadless'], - singleRun: false, - concurrency: Infinity, - plugins: [ - karmaMocha, - karmaMochaReporter, - karmaChai, - karmaChromeLauncher, - karmaFirefoxLauncher, - karmaWebpack, - ], - }); -}; diff --git a/packages/js-dapi-client/lib/BlockHeadersProvider/BlockHeadersProvider.js b/packages/js-dapi-client/lib/BlockHeadersProvider/BlockHeadersProvider.js index d9ca211bcef..751b0c2212f 100644 --- a/packages/js-dapi-client/lib/BlockHeadersProvider/BlockHeadersProvider.js +++ b/packages/js-dapi-client/lib/BlockHeadersProvider/BlockHeadersProvider.js @@ -1,7 +1,9 @@ -const EventEmitter = require('events'); -const { SpvChain, SPVError } = require('@dashevo/dash-spv'); +import EventEmitter from 'events'; +import dashSpv from '@dashevo/dash-spv'; -const BlockHeadersReader = require('./BlockHeadersReader'); +import BlockHeadersReader from './BlockHeadersReader.js'; + +const { SpvChain, SPVError } = dashSpv; /** * @typedef {BlockHeadersProviderOptions} BlockHeadersProviderOptions @@ -253,4 +255,4 @@ BlockHeadersProvider.EVENTS = EVENTS; BlockHeadersProvider.STATES = STATES; BlockHeadersProvider.defaultOptions = { ...defaultOptions }; -module.exports = BlockHeadersProvider; +export default BlockHeadersProvider; diff --git a/packages/js-dapi-client/lib/BlockHeadersProvider/BlockHeadersReader.js b/packages/js-dapi-client/lib/BlockHeadersProvider/BlockHeadersReader.js index f8d8fe4fc11..06876fd7a60 100644 --- a/packages/js-dapi-client/lib/BlockHeadersProvider/BlockHeadersReader.js +++ b/packages/js-dapi-client/lib/BlockHeadersProvider/BlockHeadersReader.js @@ -1,6 +1,8 @@ -const { EventEmitter } = require('events'); -const { BlockHeader } = require('@dashevo/dashcore-lib'); -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); +import EventEmitter from 'events'; +import dashcoreLib from '@dashevo/dashcore-lib'; +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; + +const { BlockHeader } = dashcoreLib; const EVENTS = { BLOCK_HEADERS: 'BLOCK_HEADERS', @@ -302,4 +304,4 @@ class BlockHeadersReader extends EventEmitter { BlockHeadersReader.EVENTS = EVENTS; -module.exports = BlockHeadersReader; +export default BlockHeadersReader; diff --git a/packages/js-dapi-client/lib/BlockHeadersProvider/createBlockHeadersProviderFromOptions.js b/packages/js-dapi-client/lib/BlockHeadersProvider/createBlockHeadersProviderFromOptions.js index 642da97dc79..06bcd509e46 100644 --- a/packages/js-dapi-client/lib/BlockHeadersProvider/createBlockHeadersProviderFromOptions.js +++ b/packages/js-dapi-client/lib/BlockHeadersProvider/createBlockHeadersProviderFromOptions.js @@ -1,6 +1,6 @@ -const DAPIClientError = require('../errors/DAPIClientError'); -const BlockHeadersProvider = require('./BlockHeadersProvider'); -const ReconnectableStream = require('../transport/ReconnectableStream'); +import DAPIClientError from '../errors/DAPIClientError.js'; +import BlockHeadersProvider from './BlockHeadersProvider.js'; +import ReconnectableStream from '../transport/ReconnectableStream.js'; const validateNumber = (value, name, min = NaN, max = NaN) => { if (typeof value !== 'number') { @@ -91,4 +91,4 @@ function createBlockHeadersProviderFromOptions(options, coreMethods, logger) { return blockHeadersProvider; } -module.exports = createBlockHeadersProviderFromOptions; +export default createBlockHeadersProviderFromOptions; diff --git a/packages/js-dapi-client/lib/DAPIClient.js b/packages/js-dapi-client/lib/DAPIClient.js index 4731c54a2dc..68467ff637a 100644 --- a/packages/js-dapi-client/lib/DAPIClient.js +++ b/packages/js-dapi-client/lib/DAPIClient.js @@ -1,20 +1,20 @@ -const EventEmitter = require('events'); +import EventEmitter from 'events'; -const GrpcTransport = require('./transport/GrpcTransport/GrpcTransport'); -const JsonRpcTransport = require('./transport/JsonRpcTransport/JsonRpcTransport'); +import GrpcTransport from './transport/GrpcTransport/GrpcTransport.js'; +import JsonRpcTransport from './transport/JsonRpcTransport/JsonRpcTransport.js'; -const CoreMethodsFacade = require('./methods/core/CoreMethodsFacade'); -const PlatformMethodsFacade = require('./methods/platform/PlatformMethodsFacade'); +import CoreMethodsFacade from './methods/core/CoreMethodsFacade.js'; +import PlatformMethodsFacade from './methods/platform/PlatformMethodsFacade.js'; -const createDAPIAddressProviderFromOptions = require('./dapiAddressProvider/createDAPIAddressProviderFromOptions'); -const requestJsonRpc = require('./transport/JsonRpcTransport/requestJsonRpc'); -const createGrpcTransportError = require('./transport/GrpcTransport/createGrpcTransportError'); -const createJsonTransportError = require('./transport/JsonRpcTransport/createJsonTransportError'); +import createDAPIAddressProviderFromOptions from './dapiAddressProvider/createDAPIAddressProviderFromOptions.js'; +import requestJsonRpc from './transport/JsonRpcTransport/requestJsonRpc.js'; +import createGrpcTransportError from './transport/GrpcTransport/createGrpcTransportError.js'; +import createJsonTransportError from './transport/JsonRpcTransport/createJsonTransportError.js'; -const BlockHeadersProvider = require('./BlockHeadersProvider/BlockHeadersProvider'); -const createBlockHeadersProviderFromOptions = require('./BlockHeadersProvider/createBlockHeadersProviderFromOptions'); +import BlockHeadersProvider from './BlockHeadersProvider/BlockHeadersProvider.js'; +import createBlockHeadersProviderFromOptions from './BlockHeadersProvider/createBlockHeadersProviderFromOptions.js'; -const logger = require('./logger'); +import logger from './logger/index.js'; const EVENTS = { ERROR: 'error', @@ -120,4 +120,4 @@ DAPIClient.EVENTS = EVENTS; * @property {BlockHeadersProviderOptions} [blockHeadersProviderOptions] */ -module.exports = DAPIClient; +export default DAPIClient; diff --git a/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js b/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js index 9fadf3184ab..34df1bb900c 100644 --- a/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js +++ b/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js @@ -1,9 +1,9 @@ -const SimplifiedMNList = require('@dashevo/dashcore-lib/lib/deterministicmnlist/SimplifiedMNList'); -const SimplifiedMNListDiff = require('@dashevo/dashcore-lib/lib/deterministicmnlist/SimplifiedMNListDiff'); -const cbor = require('cbor'); +import SimplifiedMNList from '@dashevo/dashcore-lib/lib/deterministicmnlist/SimplifiedMNList.js'; +import SimplifiedMNListDiff from '@dashevo/dashcore-lib/lib/deterministicmnlist/SimplifiedMNListDiff.js'; +import cbor from 'cbor'; -const logger = require('../logger'); -const { bytesToHex } = require('../utils/bytes'); +import logger from '../logger/index.js'; +import { bytesToHex } from '../utils/bytes.js'; class SimplifiedMasternodeListProvider { /** @@ -225,4 +225,4 @@ class SimplifiedMasternodeListProvider { SimplifiedMasternodeListProvider.NULL_HASH = '0000000000000000000000000000000000000000000000000000000000000000'; -module.exports = SimplifiedMasternodeListProvider; +export default SimplifiedMasternodeListProvider; diff --git a/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/createMasternodeListStreamFactory.js b/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/createMasternodeListStreamFactory.js index 67511925dc4..37ebc34deff 100644 --- a/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/createMasternodeListStreamFactory.js +++ b/packages/js-dapi-client/lib/SimplifiedMasternodeListProvider/createMasternodeListStreamFactory.js @@ -1,13 +1,15 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import GrpcTransport from '../transport/GrpcTransport/GrpcTransport.js'; +import createGrpcTransportError from '../transport/GrpcTransport/createGrpcTransportError.js'; +import ReconnectableStream from '../transport/ReconnectableStream.js'; + const { v0: { MasternodeListRequest, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); - -const GrpcTransport = require('../transport/GrpcTransport/GrpcTransport'); -const createGrpcTransportError = require('../transport/GrpcTransport/createGrpcTransportError'); -const ReconnectableStream = require('../transport/ReconnectableStream'); +} = dapiGrpc; /** * Creates continues masternode list stream @@ -46,4 +48,4 @@ function createMasternodeListStreamFactory( ); } -module.exports = createMasternodeListStreamFactory; +export default createMasternodeListStreamFactory; diff --git a/packages/js-dapi-client/lib/dapiAddressProvider/DAPIAddress.js b/packages/js-dapi-client/lib/dapiAddressProvider/DAPIAddress.js index edcebf42b7e..076d9cfe135 100644 --- a/packages/js-dapi-client/lib/dapiAddressProvider/DAPIAddress.js +++ b/packages/js-dapi-client/lib/dapiAddressProvider/DAPIAddress.js @@ -1,4 +1,4 @@ -const DAPIAddressHostMissingError = require('./errors/DAPIAddressHostMissingError'); +import DAPIAddressHostMissingError from './errors/DAPIAddressHostMissingError.js'; class DAPIAddress { /** @@ -171,4 +171,4 @@ DAPIAddress.DEFAULT_PROTOCOL = 'https'; * @property {bool} [selfSigned] */ -module.exports = DAPIAddress; +export default DAPIAddress; diff --git a/packages/js-dapi-client/lib/dapiAddressProvider/ListDAPIAddressProvider.js b/packages/js-dapi-client/lib/dapiAddressProvider/ListDAPIAddressProvider.js index c13217e98d4..f78969b2032 100644 --- a/packages/js-dapi-client/lib/dapiAddressProvider/ListDAPIAddressProvider.js +++ b/packages/js-dapi-client/lib/dapiAddressProvider/ListDAPIAddressProvider.js @@ -1,5 +1,6 @@ +import networks from '@dashevo/dashcore-lib/lib/networks.js'; + const sample = (arr) => arr[Math.floor(Math.random() * arr.length)]; -const networks = require('@dashevo/dashcore-lib/lib/networks'); class ListDAPIAddressProvider { /** @@ -94,4 +95,4 @@ class ListDAPIAddressProvider { } } -module.exports = ListDAPIAddressProvider; +export default ListDAPIAddressProvider; diff --git a/packages/js-dapi-client/lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.js b/packages/js-dapi-client/lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.js index c6607e843eb..a8fb4a82637 100644 --- a/packages/js-dapi-client/lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.js +++ b/packages/js-dapi-client/lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.js @@ -1,4 +1,4 @@ -const DAPIAddress = require('./DAPIAddress'); +import DAPIAddress from './DAPIAddress.js'; class SimplifiedMasternodeListDAPIAddressProvider { /** @@ -72,4 +72,4 @@ class SimplifiedMasternodeListDAPIAddressProvider { } } -module.exports = SimplifiedMasternodeListDAPIAddressProvider; +export default SimplifiedMasternodeListDAPIAddressProvider; diff --git a/packages/js-dapi-client/lib/dapiAddressProvider/createDAPIAddressProviderFromOptions.js b/packages/js-dapi-client/lib/dapiAddressProvider/createDAPIAddressProviderFromOptions.js index 5a02a00b58d..61e8d2f2957 100644 --- a/packages/js-dapi-client/lib/dapiAddressProvider/createDAPIAddressProviderFromOptions.js +++ b/packages/js-dapi-client/lib/dapiAddressProvider/createDAPIAddressProviderFromOptions.js @@ -1,16 +1,16 @@ -const networks = require('@dashevo/dashcore-lib/lib/networks'); +import networks from '@dashevo/dashcore-lib/lib/networks.js'; -const DAPIAddress = require('./DAPIAddress'); +import DAPIAddress from './DAPIAddress.js'; -const ListDAPIAddressProvider = require('./ListDAPIAddressProvider'); +import ListDAPIAddressProvider from './ListDAPIAddressProvider.js'; -const SimplifiedMasternodeListProvider = require('../SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider'); -const SimplifiedMasternodeListDAPIAddressProvider = require('./SimplifiedMasternodeListDAPIAddressProvider'); -const createMasternodeListStreamFactory = require('../SimplifiedMasternodeListProvider/createMasternodeListStreamFactory'); +import SimplifiedMasternodeListProvider from '../SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js'; +import SimplifiedMasternodeListDAPIAddressProvider from './SimplifiedMasternodeListDAPIAddressProvider.js'; +import createMasternodeListStreamFactory from '../SimplifiedMasternodeListProvider/createMasternodeListStreamFactory.js'; -const DAPIClientError = require('../errors/DAPIClientError'); +import DAPIClientError from '../errors/DAPIClientError.js'; -const networkConfigs = require('../networkConfigs'); +import networkConfigs from '../networkConfigs.js'; /** * @typedef {createDAPIAddressProviderFromOptions} @@ -110,4 +110,4 @@ function createDAPIAddressProviderFromOptions(options) { return null; } -module.exports = createDAPIAddressProviderFromOptions; +export default createDAPIAddressProviderFromOptions; diff --git a/packages/js-dapi-client/lib/dapiAddressProvider/errors/DAPIAddressHostMissingError.js b/packages/js-dapi-client/lib/dapiAddressProvider/errors/DAPIAddressHostMissingError.js index a8feb72082e..a269dbc02ab 100644 --- a/packages/js-dapi-client/lib/dapiAddressProvider/errors/DAPIAddressHostMissingError.js +++ b/packages/js-dapi-client/lib/dapiAddressProvider/errors/DAPIAddressHostMissingError.js @@ -1,4 +1,4 @@ -const DAPIClientError = require('../../errors/DAPIClientError'); +import DAPIClientError from '../../errors/DAPIClientError.js'; class DAPIAddressHostMissingError extends DAPIClientError { constructor() { @@ -6,4 +6,4 @@ class DAPIAddressHostMissingError extends DAPIClientError { } } -module.exports = DAPIAddressHostMissingError; +export default DAPIAddressHostMissingError; diff --git a/packages/js-dapi-client/lib/errors/DAPIClientError.js b/packages/js-dapi-client/lib/errors/DAPIClientError.js index 0d55cc2b212..82904d82eac 100644 --- a/packages/js-dapi-client/lib/errors/DAPIClientError.js +++ b/packages/js-dapi-client/lib/errors/DAPIClientError.js @@ -14,4 +14,4 @@ class DAPIClientError extends Error { } } -module.exports = DAPIClientError; +export default DAPIClientError; diff --git a/packages/js-dapi-client/lib/index.js b/packages/js-dapi-client/lib/index.js index 9ab05876c70..1bf034c2432 100644 --- a/packages/js-dapi-client/lib/index.js +++ b/packages/js-dapi-client/lib/index.js @@ -1,8 +1,7 @@ -const DAPIClient = require('./DAPIClient'); - -const NotFoundError = require('./transport/GrpcTransport/errors/NotFoundError'); -const BlockHeadersProvider = require('./BlockHeadersProvider/BlockHeadersProvider'); -const bytes = require('./utils/bytes'); +import DAPIClient from './DAPIClient.js'; +import NotFoundError from './transport/GrpcTransport/errors/NotFoundError.js'; +import BlockHeadersProvider from './BlockHeadersProvider/BlockHeadersProvider.js'; +import * as bytes from './utils/bytes.js'; DAPIClient.Errors = { NotFoundError, @@ -11,4 +10,5 @@ DAPIClient.Errors = { DAPIClient.BlockHeadersProvider = BlockHeadersProvider; DAPIClient.bytes = bytes; -module.exports = DAPIClient; +export default DAPIClient; +export { NotFoundError, BlockHeadersProvider, bytes }; diff --git a/packages/js-dapi-client/lib/logger/index.js b/packages/js-dapi-client/lib/logger/index.js index feebafb9c66..9ea22987a6a 100644 --- a/packages/js-dapi-client/lib/logger/index.js +++ b/packages/js-dapi-client/lib/logger/index.js @@ -39,4 +39,4 @@ function build(level = LOG_LEVEL, prefix = '') { return logger; } -module.exports = build(); +export default build(); diff --git a/packages/js-dapi-client/lib/methods/core/CoreMethodsFacade.js b/packages/js-dapi-client/lib/methods/core/CoreMethodsFacade.js index 4aa080cb272..d081b2e1bcc 100644 --- a/packages/js-dapi-client/lib/methods/core/CoreMethodsFacade.js +++ b/packages/js-dapi-client/lib/methods/core/CoreMethodsFacade.js @@ -1,15 +1,15 @@ -const broadcastTransactionFactory = require('./broadcastTransactionFactory'); -const getBestBlockHashFactory = require('./getBestBlockHashFactory'); -const getBestBlockHeightFactory = require('./getBestBlockHeightFactory'); -const getBlockByHashFactory = require('./getBlockByHashFactory'); -const getBlockByHeightFactory = require('./getBlockByHeightFactory'); -const getBlockHashFactory = require('./getBlockHashFactory'); -const getBlockchainStatusFactory = require('./getBlockchainStatusFactory'); -const getMasternodeStatusFactory = require('./getMasternodeStatusFactory'); -const getTransactionFactory = require('./getTransaction/getTransactionFactory'); -const subscribeToTransactionsWithProofsFactory = require('./subscribeToTransactionsWithProofsFactory'); -const subscribeToBlockHeadersWithChainLocksFactory = require('./subscribeToBlockHeadersWithChainLocksFactory'); -const subscribeToToMasternodeListFactory = require('./subscribeToMasternodeListFactory'); +import broadcastTransactionFactory from './broadcastTransactionFactory.js'; +import getBestBlockHashFactory from './getBestBlockHashFactory.js'; +import getBestBlockHeightFactory from './getBestBlockHeightFactory.js'; +import getBlockByHashFactory from './getBlockByHashFactory.js'; +import getBlockByHeightFactory from './getBlockByHeightFactory.js'; +import getBlockHashFactory from './getBlockHashFactory.js'; +import getBlockchainStatusFactory from './getBlockchainStatusFactory.js'; +import getMasternodeStatusFactory from './getMasternodeStatusFactory.js'; +import getTransactionFactory from './getTransaction/getTransactionFactory.js'; +import subscribeToTransactionsWithProofsFactory from './subscribeToTransactionsWithProofsFactory.js'; +import subscribeToBlockHeadersWithChainLocksFactory from './subscribeToBlockHeadersWithChainLocksFactory.js'; +import subscribeToToMasternodeListFactory from './subscribeToMasternodeListFactory.js'; class CoreMethodsFacade { /** @@ -38,4 +38,4 @@ class CoreMethodsFacade { } } -module.exports = CoreMethodsFacade; +export default CoreMethodsFacade; diff --git a/packages/js-dapi-client/lib/methods/core/broadcastTransactionFactory.js b/packages/js-dapi-client/lib/methods/core/broadcastTransactionFactory.js index e4998994e9f..d98e66f82ae 100644 --- a/packages/js-dapi-client/lib/methods/core/broadcastTransactionFactory.js +++ b/packages/js-dapi-client/lib/methods/core/broadcastTransactionFactory.js @@ -1,9 +1,11 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + const { v0: { CorePromiseClient, BroadcastTransactionRequest, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -13,7 +15,7 @@ function broadcastTransactionFactory(grpcTransport) { /** * Broadcast Transaction * @typedef {broadcastTransaction} - * @param {Buffer} transaction + * @param {Uint8Array} transaction * @param {DAPIClientOptions & BroadcastTransactionOptions} [options] * @returns {string} */ @@ -42,4 +44,4 @@ function broadcastTransactionFactory(grpcTransport) { * @property {boolean} [bypassLimits=false] */ -module.exports = broadcastTransactionFactory; +export default broadcastTransactionFactory; diff --git a/packages/js-dapi-client/lib/methods/core/getBestBlockHashFactory.js b/packages/js-dapi-client/lib/methods/core/getBestBlockHashFactory.js index ee3f82aa22a..1f6d641283b 100644 --- a/packages/js-dapi-client/lib/methods/core/getBestBlockHashFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getBestBlockHashFactory.js @@ -17,4 +17,4 @@ function getBestBlockHashFactory(jsonRpcTransport) { return getBestBlockHash; } -module.exports = getBestBlockHashFactory; +export default getBestBlockHashFactory; diff --git a/packages/js-dapi-client/lib/methods/core/getBestBlockHeightFactory.js b/packages/js-dapi-client/lib/methods/core/getBestBlockHeightFactory.js index 485010fd33b..15bd0a86600 100644 --- a/packages/js-dapi-client/lib/methods/core/getBestBlockHeightFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getBestBlockHeightFactory.js @@ -1,9 +1,11 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + const { v0: { GetBestBlockHeightRequest, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; /** * @@ -31,4 +33,4 @@ function getBestBlockHeightFactory(grpcTransport) { return getBestBlockHeight; } -module.exports = getBestBlockHeightFactory; +export default getBestBlockHeightFactory; diff --git a/packages/js-dapi-client/lib/methods/core/getBlockByHashFactory.js b/packages/js-dapi-client/lib/methods/core/getBlockByHashFactory.js index d007018bd2b..8a56f41f40e 100644 --- a/packages/js-dapi-client/lib/methods/core/getBlockByHashFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getBlockByHashFactory.js @@ -1,9 +1,11 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + const { v0: { GetBlockRequest, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -35,4 +37,4 @@ function getBlockByHashFactory(grpcTransport) { return getBlockByHash; } -module.exports = getBlockByHashFactory; +export default getBlockByHashFactory; diff --git a/packages/js-dapi-client/lib/methods/core/getBlockByHeightFactory.js b/packages/js-dapi-client/lib/methods/core/getBlockByHeightFactory.js index 88fdf0d357a..32779a04627 100644 --- a/packages/js-dapi-client/lib/methods/core/getBlockByHeightFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getBlockByHeightFactory.js @@ -1,9 +1,11 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + const { v0: { GetBlockRequest, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -36,4 +38,4 @@ function getBlockByHeightFactory(grpcTransport) { return getBlockByHeight; } -module.exports = getBlockByHeightFactory; +export default getBlockByHeightFactory; diff --git a/packages/js-dapi-client/lib/methods/core/getBlockHashFactory.js b/packages/js-dapi-client/lib/methods/core/getBlockHashFactory.js index 51a6c93ab94..187967cf25e 100644 --- a/packages/js-dapi-client/lib/methods/core/getBlockHashFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getBlockHashFactory.js @@ -17,4 +17,4 @@ function getBlockHashFactory(jsonRpcTransport) { return getBlockHash; } -module.exports = getBlockHashFactory; +export default getBlockHashFactory; diff --git a/packages/js-dapi-client/lib/methods/core/getBlockchainStatusFactory.js b/packages/js-dapi-client/lib/methods/core/getBlockchainStatusFactory.js index 486637c4530..cf99fbd3068 100644 --- a/packages/js-dapi-client/lib/methods/core/getBlockchainStatusFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getBlockchainStatusFactory.js @@ -1,10 +1,12 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + const { v0: { GetBlockchainStatusRequest, GetBlockchainStatusResponse, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -56,4 +58,4 @@ function getBlockchainStatusFactory(grpcTransport) { return getBlockchainStatus; } -module.exports = getBlockchainStatusFactory; +export default getBlockchainStatusFactory; diff --git a/packages/js-dapi-client/lib/methods/core/getMasternodeStatusFactory.js b/packages/js-dapi-client/lib/methods/core/getMasternodeStatusFactory.js index 9f63a28ffb1..3a178213a5c 100644 --- a/packages/js-dapi-client/lib/methods/core/getMasternodeStatusFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getMasternodeStatusFactory.js @@ -1,11 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import { base64ToBytes } from '../../utils/bytes.js'; + const { v0: { GetMasternodeStatusRequest, GetMasternodeStatusResponse, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); -const { base64ToBytes } = require('../../utils/bytes'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -43,4 +45,4 @@ function getMasternodeStatusFactory(grpcTransport) { return getMasternodeStatus; } -module.exports = getMasternodeStatusFactory; +export default getMasternodeStatusFactory; diff --git a/packages/js-dapi-client/lib/methods/core/getTransaction/GetTransactionResponse.js b/packages/js-dapi-client/lib/methods/core/getTransaction/GetTransactionResponse.js index 97aeeae2c99..44e3cdeb7a5 100644 --- a/packages/js-dapi-client/lib/methods/core/getTransaction/GetTransactionResponse.js +++ b/packages/js-dapi-client/lib/methods/core/getTransaction/GetTransactionResponse.js @@ -1,4 +1,4 @@ -const InvalidResponseError = require('../../platform/response/errors/InvalidResponseError'); +import InvalidResponseError from '../../platform/response/errors/InvalidResponseError.js'; class GetTransactionResponse { /** @@ -85,4 +85,4 @@ class GetTransactionResponse { } } -module.exports = GetTransactionResponse; +export default GetTransactionResponse; diff --git a/packages/js-dapi-client/lib/methods/core/getTransaction/getTransactionFactory.js b/packages/js-dapi-client/lib/methods/core/getTransaction/getTransactionFactory.js index a64fc26aa1b..fe0cb9785fd 100644 --- a/packages/js-dapi-client/lib/methods/core/getTransaction/getTransactionFactory.js +++ b/packages/js-dapi-client/lib/methods/core/getTransaction/getTransactionFactory.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetTransactionResponse from './GetTransactionResponse.js'; +import InvalidResponseError from '../../platform/response/errors/InvalidResponseError.js'; + const { v0: { GetTransactionRequest, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); - -const GetTransactionResponse = require('./GetTransactionResponse'); -const InvalidResponseError = require('../../platform/response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -18,7 +19,7 @@ function getTransactionFactory(grpcTransport) { * @typedef {getTransaction} * @param {string} id * @param {DAPIClientOptions} [options] - * @returns {Promise} + * @returns {Promise} */ async function getTransaction(id, options = {}) { const getTransactionRequest = new GetTransactionRequest(); @@ -55,4 +56,4 @@ function getTransactionFactory(grpcTransport) { return getTransaction; } -module.exports = getTransactionFactory; +export default getTransactionFactory; diff --git a/packages/js-dapi-client/lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory.js b/packages/js-dapi-client/lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory.js index 8fe67b0c05b..4e4e0343314 100644 --- a/packages/js-dapi-client/lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory.js +++ b/packages/js-dapi-client/lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import DAPIClientError from '../../errors/DAPIClientError.js'; +import { hexToBytes } from '../../utils/bytes.js'; + const { v0: { BlockHeadersWithChainLocksRequest, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); - -const DAPIClientError = require('../../errors/DAPIClientError'); -const { hexToBytes } = require('../../utils/bytes'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -67,4 +68,4 @@ function subscribeToBlockHeadersWithChainLocksFactory(grpcTransport) { * if set to 0 syncing is continuously sends new data as well */ -module.exports = subscribeToBlockHeadersWithChainLocksFactory; +export default subscribeToBlockHeadersWithChainLocksFactory; diff --git a/packages/js-dapi-client/lib/methods/core/subscribeToMasternodeListFactory.js b/packages/js-dapi-client/lib/methods/core/subscribeToMasternodeListFactory.js index 1d7ba8228a6..b31e7d98967 100644 --- a/packages/js-dapi-client/lib/methods/core/subscribeToMasternodeListFactory.js +++ b/packages/js-dapi-client/lib/methods/core/subscribeToMasternodeListFactory.js @@ -1,9 +1,11 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + const { v0: { MasternodeListRequest, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -43,4 +45,4 @@ function subscribeToMasternodeListFactory(grpcTransport) { * @typedef {object} subscribeToMasternodeListOptions */ -module.exports = subscribeToMasternodeListFactory; +export default subscribeToMasternodeListFactory; diff --git a/packages/js-dapi-client/lib/methods/core/subscribeToTransactionsWithProofsFactory.js b/packages/js-dapi-client/lib/methods/core/subscribeToTransactionsWithProofsFactory.js index 45d54ca3776..c8aa6f187c5 100644 --- a/packages/js-dapi-client/lib/methods/core/subscribeToTransactionsWithProofsFactory.js +++ b/packages/js-dapi-client/lib/methods/core/subscribeToTransactionsWithProofsFactory.js @@ -1,13 +1,14 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import DAPIClientError from '../../errors/DAPIClientError.js'; +import { hexToBytes } from '../../utils/bytes.js'; + const { v0: { TransactionsWithProofsRequest, CorePromiseClient, BloomFilter: BloomFilterMessage, }, -} = require('@dashevo/dapi-grpc'); - -const DAPIClientError = require('../../errors/DAPIClientError'); -const { hexToBytes } = require('../../utils/bytes'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -91,4 +92,4 @@ function subscribeToTransactionsWithProofsFactory(grpcTransport) { * if set to 0 syncing is continuously sends new data as well */ -module.exports = subscribeToTransactionsWithProofsFactory; +export default subscribeToTransactionsWithProofsFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/PlatformMethodsFacade.js b/packages/js-dapi-client/lib/methods/platform/PlatformMethodsFacade.js index 8de255abdec..e57ea4494a1 100644 --- a/packages/js-dapi-client/lib/methods/platform/PlatformMethodsFacade.js +++ b/packages/js-dapi-client/lib/methods/platform/PlatformMethodsFacade.js @@ -1,21 +1,21 @@ -const broadcastStateTransitionFactory = require('./broadcastStateTransition/broadcastStateTransitionFactory'); -const getDataContractFactory = require('./getDataContract/getDataContractFactory'); -const getDataContractHistoryFactory = require('./getDataContractHistory/getDataContractHistoryFactory'); -const getDocumentsFactory = require('./getDocuments/getDocumentsFactory'); -const getIdentityFactory = require('./getIdentity/getIdentityFactory'); -const getIdentityByPublicKeyHashFactory = require('./getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory'); -const getIdentitiesContractKeysFactory = require('./getIdentitiesContractKeys/getIdentitiesContractKeysFactory'); -const waitForStateTransitionResultFactory = require('./waitForStateTransitionResult/waitForStateTransitionResultFactory'); -const getConsensusParamsFactory = require('./getConsensusParams/getConsensusParamsFactory'); -const getEpochsInfoFactory = require('./getEpochsInfo/getEpochsInfoFactory'); -const getProtocolVersionUpgradeVoteStatusFactory = require('./getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory'); -const getProtocolVersionUpgradeStateFactory = require('./getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory'); -const getIdentityContractNonceFactory = require('./getIdentityContractNonce/getIdentityContractNonceFactory'); -const getIdentityNonceFactory = require('./getIdentityNonce/getIdentityNonceFactory'); -const getIdentityKeysFactory = require('./getIdentityKeys/getIdentityKeysFactory'); -const getTotalCreditsInPlatformFactory = require('./getTotalCreditsInPlatform/getTotalCreditsInPlatformFactory'); -const getStatusFactory = require('./getStatus/getStatusFactory'); -const getIdentityBalanceFactory = require('./getIdentityBalance/getIdentityBalanceFactory'); +import broadcastStateTransitionFactory from './broadcastStateTransition/broadcastStateTransitionFactory.js'; +import getDataContractFactory from './getDataContract/getDataContractFactory.js'; +import getDataContractHistoryFactory from './getDataContractHistory/getDataContractHistoryFactory.js'; +import getDocumentsFactory from './getDocuments/getDocumentsFactory.js'; +import getIdentityFactory from './getIdentity/getIdentityFactory.js'; +import getIdentityByPublicKeyHashFactory from './getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.js'; +import getIdentitiesContractKeysFactory from './getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js'; +import waitForStateTransitionResultFactory from './waitForStateTransitionResult/waitForStateTransitionResultFactory.js'; +import getConsensusParamsFactory from './getConsensusParams/getConsensusParamsFactory.js'; +import getEpochsInfoFactory from './getEpochsInfo/getEpochsInfoFactory.js'; +import getProtocolVersionUpgradeVoteStatusFactory from './getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js'; +import getProtocolVersionUpgradeStateFactory from './getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.js'; +import getIdentityContractNonceFactory from './getIdentityContractNonce/getIdentityContractNonceFactory.js'; +import getIdentityNonceFactory from './getIdentityNonce/getIdentityNonceFactory.js'; +import getIdentityKeysFactory from './getIdentityKeys/getIdentityKeysFactory.js'; +import getTotalCreditsInPlatformFactory from './getTotalCreditsInPlatform/getTotalCreditsInPlatformFactory.js'; +import getStatusFactory from './getStatus/getStatusFactory.js'; +import getIdentityBalanceFactory from './getIdentityBalance/getIdentityBalanceFactory.js'; class PlatformMethodsFacade { /** @@ -45,4 +45,4 @@ class PlatformMethodsFacade { } } -module.exports = PlatformMethodsFacade; +export default PlatformMethodsFacade; diff --git a/packages/js-dapi-client/lib/methods/platform/broadcastStateTransition/BroadcastStateTransitionResponse.js b/packages/js-dapi-client/lib/methods/platform/broadcastStateTransition/BroadcastStateTransitionResponse.js index 3567f2a7427..b4ec0322ee3 100644 --- a/packages/js-dapi-client/lib/methods/platform/broadcastStateTransition/BroadcastStateTransitionResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/broadcastStateTransition/BroadcastStateTransitionResponse.js @@ -7,4 +7,4 @@ class BroadcastStateTransitionResponse { } } -module.exports = BroadcastStateTransitionResponse; +export default BroadcastStateTransitionResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/broadcastStateTransition/broadcastStateTransitionFactory.js b/packages/js-dapi-client/lib/methods/platform/broadcastStateTransition/broadcastStateTransitionFactory.js index f6a715f33b8..c4349023bac 100644 --- a/packages/js-dapi-client/lib/methods/platform/broadcastStateTransition/broadcastStateTransitionFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/broadcastStateTransition/broadcastStateTransitionFactory.js @@ -1,11 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import BroadcastStateTransitionResponse from './BroadcastStateTransitionResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { BroadcastStateTransitionRequest, PlatformPromiseClient, }, -} = require('@dashevo/dapi-grpc'); -const BroadcastStateTransitionResponse = require('./BroadcastStateTransitionResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -15,7 +17,7 @@ function broadcastStateTransitionFactory(grpcTransport) { /** * Broadcast State Transaction * @typedef {broadcastStateTransition} - * @param {Buffer} stateTransition + * @param {Uint8Array} stateTransition * @param {DAPIClientOptions} [options] * @returns {Promise} */ @@ -53,4 +55,4 @@ function broadcastStateTransitionFactory(grpcTransport) { return broadcastStateTransition; } -module.exports = broadcastStateTransitionFactory; +export default broadcastStateTransitionFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getConsensusParams/ConsensusParamsBlock.js b/packages/js-dapi-client/lib/methods/platform/getConsensusParams/ConsensusParamsBlock.js index 31e05d884fb..02bd512958e 100644 --- a/packages/js-dapi-client/lib/methods/platform/getConsensusParams/ConsensusParamsBlock.js +++ b/packages/js-dapi-client/lib/methods/platform/getConsensusParams/ConsensusParamsBlock.js @@ -33,4 +33,4 @@ class ConsensusParamsBlock { } } -module.exports = ConsensusParamsBlock; +export default ConsensusParamsBlock; diff --git a/packages/js-dapi-client/lib/methods/platform/getConsensusParams/ConsensusParamsEvidence.js b/packages/js-dapi-client/lib/methods/platform/getConsensusParams/ConsensusParamsEvidence.js index dd5bd03a6e0..ddb19b6ac18 100644 --- a/packages/js-dapi-client/lib/methods/platform/getConsensusParams/ConsensusParamsEvidence.js +++ b/packages/js-dapi-client/lib/methods/platform/getConsensusParams/ConsensusParamsEvidence.js @@ -33,4 +33,4 @@ class ConsensusParamsEvidence { } } -module.exports = ConsensusParamsEvidence; +export default ConsensusParamsEvidence; diff --git a/packages/js-dapi-client/lib/methods/platform/getConsensusParams/getConsensusParamsFactory.js b/packages/js-dapi-client/lib/methods/platform/getConsensusParams/getConsensusParamsFactory.js index c66ed9874c8..787b5155362 100644 --- a/packages/js-dapi-client/lib/methods/platform/getConsensusParams/getConsensusParamsFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getConsensusParams/getConsensusParamsFactory.js @@ -1,11 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; +import GetConsensusParamsResponse from './getConsensusParamsResponse.js'; + const { v0: { PlatformPromiseClient, GetConsensusParamsRequest, }, -} = require('@dashevo/dapi-grpc'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); -const GetConsensusParamsResponse = require('./getConsensusParamsResponse'); +} = dapiGrpc; const { GetConsensusParamsRequestV0, @@ -66,4 +68,4 @@ function getConsensusParamsFactory(grpcTransport) { return getConsensusParams; } -module.exports = getConsensusParamsFactory; +export default getConsensusParamsFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getConsensusParams/getConsensusParamsResponse.js b/packages/js-dapi-client/lib/methods/platform/getConsensusParams/getConsensusParamsResponse.js index 0e0dbe25f9a..105eb24a5bd 100644 --- a/packages/js-dapi-client/lib/methods/platform/getConsensusParams/getConsensusParamsResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getConsensusParams/getConsensusParamsResponse.js @@ -1,6 +1,6 @@ -const InvalidResponseError = require('../response/errors/InvalidResponseError'); -const ConsensusParamsBlock = require('./ConsensusParamsBlock'); -const ConsensusParamsEvidence = require('./ConsensusParamsEvidence'); +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; +import ConsensusParamsBlock from './ConsensusParamsBlock.js'; +import ConsensusParamsEvidence from './ConsensusParamsEvidence.js'; class GetConsensusParamsResponse { /** @@ -58,4 +58,4 @@ class GetConsensusParamsResponse { } } -module.exports = GetConsensusParamsResponse; +export default GetConsensusParamsResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js b/packages/js-dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js index 1ff6735b3dd..9ffce5f7032 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js @@ -1,5 +1,5 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +import AbstractResponse from '../response/AbstractResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; class GetDataContractResponse extends AbstractResponse { /** @@ -40,4 +40,4 @@ class GetDataContractResponse extends AbstractResponse { } } -module.exports = GetDataContractResponse; +export default GetDataContractResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getDataContract/getDataContractFactory.js b/packages/js-dapi-client/lib/methods/platform/getDataContract/getDataContractFactory.js index ed1a5548445..7dceeda717b 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDataContract/getDataContractFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getDataContract/getDataContractFactory.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetDataContractResponse from './GetDataContractResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetDataContractRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetDataContractResponse = require('./GetDataContractResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -69,4 +70,4 @@ function getDataContractFactory(grpcTransport) { return getDataContract; } -module.exports = getDataContractFactory; +export default getDataContractFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/DataContractHistoryEntry.js b/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/DataContractHistoryEntry.js index b34a49fc98a..a3d6851f2b2 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/DataContractHistoryEntry.js +++ b/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/DataContractHistoryEntry.js @@ -1,7 +1,7 @@ class DataContractHistoryEntry { /** * @param {bigint} date - timestamp - * @param {Buffer} value - buffer value of the data contract + * @param {Uint8Array} value - byte value of the data contract */ constructor(date, value) { this.date = date; @@ -16,11 +16,11 @@ class DataContractHistoryEntry { } /** - * @returns {Buffer} - raw binary value of the data contract + * @returns {Uint8Array} - raw binary value of the data contract */ getValue() { return this.value; } } -module.exports = DataContractHistoryEntry; +export default DataContractHistoryEntry; diff --git a/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.js b/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.js index 1dfbb0747c0..b25e61c21b7 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.js @@ -1,6 +1,6 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); -const DataContractHistoryEntry = require('./DataContractHistoryEntry'); +import AbstractResponse from '../response/AbstractResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; +import DataContractHistoryEntry from './DataContractHistoryEntry.js'; class GetDataContractHistoryResponse extends AbstractResponse { /** @@ -46,4 +46,4 @@ class GetDataContractHistoryResponse extends AbstractResponse { } } -module.exports = GetDataContractHistoryResponse; +export default GetDataContractHistoryResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory.js b/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory.js index 183bcd3e57e..926838de539 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory.js @@ -1,14 +1,17 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import wrappersPb from 'google-protobuf/google/protobuf/wrappers_pb.js'; +import GetDataContractHistoryResponse from './GetDataContractHistoryResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetDataContractHistoryRequest, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; -const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb'); +const { UInt32Value } = wrappersPb; -const GetDataContractHistoryResponse = require('./GetDataContractHistoryResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); /** * @param {GrpcTransport} grpcTransport * @returns {getDataContractHistory} @@ -82,4 +85,4 @@ function getDataContractHistoryFactory(grpcTransport) { return getDataContractHistory; } -module.exports = getDataContractHistoryFactory; +export default getDataContractHistoryFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js b/packages/js-dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js index 0f65018a1d3..5b45ee80a41 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js @@ -1,4 +1,4 @@ -const AbstractResponse = require('../response/AbstractResponse'); +import AbstractResponse from '../response/AbstractResponse.js'; class GetDocumentsResponse extends AbstractResponse { /** @@ -37,4 +37,4 @@ class GetDocumentsResponse extends AbstractResponse { } } -module.exports = GetDocumentsResponse; +export default GetDocumentsResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getDocuments/getDocumentsFactory.js b/packages/js-dapi-client/lib/methods/platform/getDocuments/getDocumentsFactory.js index 7af4c1b3d20..48a8d09a742 100644 --- a/packages/js-dapi-client/lib/methods/platform/getDocuments/getDocumentsFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getDocuments/getDocumentsFactory.js @@ -1,14 +1,14 @@ -const cbor = require('cbor'); +import cbor from 'cbor'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetDocumentsResponse from './GetDocumentsResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; const { v0: { PlatformPromiseClient, GetDocumentsRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetDocumentsResponse = require('./GetDocumentsResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -108,4 +108,4 @@ function getDocumentsFactory(grpcTransport) { * @property {object} [startAfter] */ -module.exports = getDocumentsFactory; +export default getDocumentsFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/EpochInfo.js b/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/EpochInfo.js index 61bd651c75f..4dc2a6d788e 100644 --- a/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/EpochInfo.js +++ b/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/EpochInfo.js @@ -51,4 +51,4 @@ class EpochInfo { } } -module.exports = EpochInfo; +export default EpochInfo; diff --git a/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/GetEpochsInfoResponse.js b/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/GetEpochsInfoResponse.js index 3db067e1a77..a39765ae22a 100644 --- a/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/GetEpochsInfoResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/GetEpochsInfoResponse.js @@ -1,6 +1,6 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const EpochInfo = require('./EpochInfo'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +import AbstractResponse from '../response/AbstractResponse.js'; +import EpochInfo from './EpochInfo.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; class GetEpochsInfoResponse extends AbstractResponse { /** @@ -56,4 +56,4 @@ class GetEpochsInfoResponse extends AbstractResponse { } } -module.exports = GetEpochsInfoResponse; +export default GetEpochsInfoResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/getEpochsInfoFactory.js b/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/getEpochsInfoFactory.js index 9982c6f9e6a..bb837b06f71 100644 --- a/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/getEpochsInfoFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getEpochsInfo/getEpochsInfoFactory.js @@ -1,14 +1,16 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import wrappersPb from 'google-protobuf/google/protobuf/wrappers_pb.js'; +import GetEpochsInfoResponse from './GetEpochsInfoResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetEpochsInfoRequest, }, -} = require('@dashevo/dapi-grpc'); - -const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb'); +} = dapiGrpc; -const GetEpochsInfoResponse = require('./GetEpochsInfoResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +const { UInt32Value } = wrappersPb; /** * @param {GrpcTransport} grpcTransport @@ -65,4 +67,4 @@ function getEpochsInfoFactory(grpcTransport) { return getEpochsInfo; } -module.exports = getEpochsInfoFactory; +export default getEpochsInfoFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js index 8384ac69b54..4a9c9064fe3 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js @@ -1,5 +1,7 @@ -const { Identifier } = require('@dashevo/wasm-dpp'); -const AbstractResponse = require('../response/AbstractResponse'); +import wasmDpp from '@dashevo/wasm-dpp'; +import AbstractResponse from '../response/AbstractResponse.js'; + +const { Identifier } = wasmDpp; class GetIdentitiesContractKeysResponse extends AbstractResponse { /** @@ -62,4 +64,4 @@ class GetIdentitiesContractKeysResponse extends AbstractResponse { } } -module.exports = GetIdentitiesContractKeysResponse; +export default GetIdentitiesContractKeysResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js index 2297531bf1e..ed5e3c2b077 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js @@ -1,13 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentitiesContractKeysResponse from './GetIdentitiesContractKeysResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetIdentitiesContractKeysRequest, }, -} = require('@dashevo/dapi-grpc'); -const { IdentityPublicKey } = require('@dashevo/wasm-dpp'); - -const GetIdentitiesContractKeysResponse = require('./GetIdentitiesContractKeysResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -89,4 +89,4 @@ function getIdentitiesContractKeysFactory(grpcTransport) { return getIdentitiesContractKeys; } -module.exports = getIdentitiesContractKeysFactory; +export default getIdentitiesContractKeysFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js index a23864d959c..bc170f9ae2d 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js @@ -1,5 +1,5 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +import AbstractResponse from '../response/AbstractResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; class GetIdentityResponse extends AbstractResponse { /** @@ -40,4 +40,4 @@ class GetIdentityResponse extends AbstractResponse { } } -module.exports = GetIdentityResponse; +export default GetIdentityResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentity/getIdentityFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentity/getIdentityFactory.js index abafd51d699..1f0d99a31c3 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentity/getIdentityFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentity/getIdentityFactory.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityResponse from './GetIdentityResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetIdentityRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityResponse = require('./GetIdentityResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -68,4 +69,4 @@ function getIdentityFactory(grpcTransport) { return getIdentity; } -module.exports = getIdentityFactory; +export default getIdentityFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/GetIdentityBalanceResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/GetIdentityBalanceResponse.js index 76c0f4e4a53..afcb1b390cf 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/GetIdentityBalanceResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/GetIdentityBalanceResponse.js @@ -1,5 +1,5 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +import AbstractResponse from '../response/AbstractResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; class GetIdentityBalanceResponse extends AbstractResponse { /** @@ -40,4 +40,4 @@ class GetIdentityBalanceResponse extends AbstractResponse { } } -module.exports = GetIdentityBalanceResponse; +export default GetIdentityBalanceResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory.js index e7141239cde..e8c62749fc5 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityBalanceResponse from './GetIdentityBalanceResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetIdentityBalanceRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityBalanceResponse = require('./GetIdentityBalanceResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -68,4 +69,4 @@ function getIdentityBalanceFactory(grpcTransport) { return getIdentityBalance; } -module.exports = getIdentityBalanceFactory; +export default getIdentityBalanceFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js index 1f3c03433c9..3b8494031ac 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js @@ -1,4 +1,4 @@ -const AbstractResponse = require('../response/AbstractResponse'); +import AbstractResponse from '../response/AbstractResponse.js'; class GetIdentityByPublicKeyHashResponse extends AbstractResponse { /** @@ -36,4 +36,4 @@ class GetIdentityByPublicKeyHashResponse extends AbstractResponse { } } -module.exports = GetIdentityByPublicKeyHashResponse; +export default GetIdentityByPublicKeyHashResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.js index ed3ca1fca7e..dfbcf1ede39 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityByPublicKeyHashResponse from './GetIdentityByPublicKeyHashResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetIdentityByPublicKeyHashRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityByPublicKeyHashResponse = require('./GetIdentityByPublicKeyHashResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -16,7 +17,7 @@ function getIdentityByPublicKeyHashFactory(grpcTransport) { /** * Fetch the identity by public key hash * @typedef {getIdentityByPublicKeyHash} - * @param {Buffer} publicKeyHash + * @param {Uint8Array} publicKeyHash * @param {DAPIClientOptions & {prove: boolean}} [options] * @returns {Promise} */ @@ -61,4 +62,4 @@ function getIdentityByPublicKeyHashFactory(grpcTransport) { return getIdentityByPublicKeyHash; } -module.exports = getIdentityByPublicKeyHashFactory; +export default getIdentityByPublicKeyHashFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/GetIdentityContractNonceResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/GetIdentityContractNonceResponse.js index 0cca1d9708e..e65233f929c 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/GetIdentityContractNonceResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/GetIdentityContractNonceResponse.js @@ -1,5 +1,5 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +import AbstractResponse from '../response/AbstractResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; const IDENTITY_CONTRACT_NONCE_VALUE_FILTER = BigInt(0xFFFFFFFFFF); @@ -46,4 +46,4 @@ class GetIdentityContractNonceResponse extends AbstractResponse { } } -module.exports = GetIdentityContractNonceResponse; +export default GetIdentityContractNonceResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.js index 683a01dc465..337a727f2ca 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityContractNonceResponse from './GetIdentityContractNonceResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetIdentityContractNonceRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityContractNonceResponse = require('./GetIdentityContractNonceResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -78,4 +79,4 @@ function getIdentityContractNonceFactory(grpcTransport) { return getIdentityContractNonce; } -module.exports = getIdentityContractNonceFactory; +export default getIdentityContractNonceFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/GetIdentityKeysResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/GetIdentityKeysResponse.js index de377cfdfb5..ca59c52eded 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/GetIdentityKeysResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/GetIdentityKeysResponse.js @@ -1,5 +1,5 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +import AbstractResponse from '../response/AbstractResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; class GetIdentityKeysResponse extends AbstractResponse { /** @@ -49,4 +49,4 @@ class GetIdentityKeysResponse extends AbstractResponse { } } -module.exports = GetIdentityKeysResponse; +export default GetIdentityKeysResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js index 772e6678f3c..e31f95e78d7 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js @@ -1,3 +1,8 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import wrappersPb from 'google-protobuf/google/protobuf/wrappers_pb.js'; +import GetIdentityKeysResponse from './GetIdentityKeysResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, @@ -6,15 +11,12 @@ const { SpecificKeys, AllKeys, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; -const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb'); +const { UInt32Value } = wrappersPb; const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest; -const GetIdentityKeysResponse = require('./GetIdentityKeysResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); - /** * @param {GrpcTransport} grpcTransport * @returns {getIdentityKeys} @@ -84,4 +86,4 @@ function getIdentityKeysFactory(grpcTransport) { return getIdentityKeys; } -module.exports = getIdentityKeysFactory; +export default getIdentityKeysFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/GetIdentityNonceResponse.js b/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/GetIdentityNonceResponse.js index daead898b39..fbc4057c0d9 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/GetIdentityNonceResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/GetIdentityNonceResponse.js @@ -1,5 +1,5 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +import AbstractResponse from '../response/AbstractResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; const IDENTITY_NONCE_VALUE_FILTER = BigInt(0xFFFFFFFFFF); @@ -46,4 +46,4 @@ class GetIdentityNonceResponse extends AbstractResponse { } } -module.exports = GetIdentityNonceResponse; +export default GetIdentityNonceResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/getIdentityNonceFactory.js b/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/getIdentityNonceFactory.js index a0a62dc2fa0..a2fd8f419f8 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/getIdentityNonceFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityNonce/getIdentityNonceFactory.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityNonceResponse from './GetIdentityNonceResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetIdentityNonceRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityNonceResponse = require('./GetIdentityNonceResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -71,4 +72,4 @@ function getIdentityNonceFactory(grpcTransport) { return getIdentityNonce; } -module.exports = getIdentityNonceFactory; +export default getIdentityNonceFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse.js b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse.js index 0d01b9fa2d4..02024eb5108 100644 --- a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse.js @@ -1,6 +1,6 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const VersionEntry = require('./VersionEntry'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +import AbstractResponse from '../response/AbstractResponse.js'; +import VersionEntry from './VersionEntry.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; class GetProtocolVersionUpgradeStateResponse extends AbstractResponse { /** @@ -53,4 +53,4 @@ class GetProtocolVersionUpgradeStateResponse extends AbstractResponse { } } -module.exports = GetProtocolVersionUpgradeStateResponse; +export default GetProtocolVersionUpgradeStateResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/VersionEntry.js b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/VersionEntry.js index 7ddfe52c454..e4aedcec109 100644 --- a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/VersionEntry.js +++ b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/VersionEntry.js @@ -23,4 +23,4 @@ class VersionEntry { } } -module.exports = VersionEntry; +export default VersionEntry; diff --git a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.js b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.js index 235c8ced930..f5a41cbc930 100644 --- a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.js @@ -1,12 +1,14 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import GetProtocolVersionUpgradeStateResponse from './GetProtocolVersionUpgradeStateResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetProtocolVersionUpgradeStateRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetProtocolVersionUpgradeStateResponse = require('./GetProtocolVersionUpgradeStateResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -59,4 +61,4 @@ function getProtocolVersionUpgradeStateFactory(grpcTransport) { return getProtocolVersionUpgradeState; } -module.exports = getProtocolVersionUpgradeStateFactory; +export default getProtocolVersionUpgradeStateFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js index 9d9c8010a8a..eb9ff75dec0 100644 --- a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js @@ -1,7 +1,7 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const VersionSignal = require('./VersionSignal'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); -const { bytesToHex } = require('../../../utils/bytes'); +import AbstractResponse from '../response/AbstractResponse.js'; +import VersionSignal from './VersionSignal.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; +import { bytesToHex } from '../../../utils/bytes.js'; class GetProtocolVersionUpgradeVoteStatusResponse extends AbstractResponse { /** @@ -58,4 +58,4 @@ class GetProtocolVersionUpgradeVoteStatusResponse extends AbstractResponse { } } -module.exports = GetProtocolVersionUpgradeVoteStatusResponse; +export default GetProtocolVersionUpgradeVoteStatusResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/VersionSignal.js b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/VersionSignal.js index 7bd4a234f3c..799a025f1fd 100644 --- a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/VersionSignal.js +++ b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/VersionSignal.js @@ -23,4 +23,4 @@ class VersionSignal { } } -module.exports = VersionSignal; +export default VersionSignal; diff --git a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js index e7ecf26c02d..bf15d822c12 100644 --- a/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js @@ -1,13 +1,15 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import GetProtocolVersionUpgradeVoteStatusResponse from './GetProtocolVersionUpgradeVoteStatusResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; +import { hexToBytes } from '../../../utils/bytes.js'; + const { v0: { PlatformPromiseClient, GetProtocolVersionUpgradeVoteStatusRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetProtocolVersionUpgradeVoteStatusResponse = require('./GetProtocolVersionUpgradeVoteStatusResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); -const { hexToBytes } = require('../../../utils/bytes'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -69,4 +71,4 @@ function getProtocolVersionUpgradeVoteStatusFactory(grpcTransport) { return getProtocolVersionUpgradeVoteStatus; } -module.exports = getProtocolVersionUpgradeVoteStatusFactory; +export default getProtocolVersionUpgradeVoteStatusFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getStatus/ChainStatus.js b/packages/js-dapi-client/lib/methods/platform/getStatus/ChainStatus.js index caa2ca991ef..692a1762b74 100644 --- a/packages/js-dapi-client/lib/methods/platform/getStatus/ChainStatus.js +++ b/packages/js-dapi-client/lib/methods/platform/getStatus/ChainStatus.js @@ -96,4 +96,4 @@ class ChainStatus { } } -module.exports = ChainStatus; +export default ChainStatus; diff --git a/packages/js-dapi-client/lib/methods/platform/getStatus/GetStatusResponse.js b/packages/js-dapi-client/lib/methods/platform/getStatus/GetStatusResponse.js index ff465a82d00..cbc3f02738e 100644 --- a/packages/js-dapi-client/lib/methods/platform/getStatus/GetStatusResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getStatus/GetStatusResponse.js @@ -1,10 +1,10 @@ -const VersionStatus = require('./VersionStatus'); -const NodeStatus = require('./NodeStatus'); -const ChainStatus = require('./ChainStatus'); -const TimeStatus = require('./TimeStatus'); -const StateSyncStatus = require('./StateSyncStatus'); -const NetworkStatus = require('./NetworkStatus'); -const { bytesToHex } = require('../../../utils/bytes'); +import VersionStatus from './VersionStatus.js'; +import NodeStatus from './NodeStatus.js'; +import ChainStatus from './ChainStatus.js'; +import TimeStatus from './TimeStatus.js'; +import StateSyncStatus from './StateSyncStatus.js'; +import NetworkStatus from './NetworkStatus.js'; +import { bytesToHex } from '../../../utils/bytes.js'; class GetStatusResponse { /** @@ -164,4 +164,4 @@ class GetStatusResponse { } } -module.exports = GetStatusResponse; +export default GetStatusResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getStatus/NetworkStatus.js b/packages/js-dapi-client/lib/methods/platform/getStatus/NetworkStatus.js index 0b2f66693a8..3a8d6df540e 100644 --- a/packages/js-dapi-client/lib/methods/platform/getStatus/NetworkStatus.js +++ b/packages/js-dapi-client/lib/methods/platform/getStatus/NetworkStatus.js @@ -32,4 +32,4 @@ class NetworkStatus { } } -module.exports = NetworkStatus; +export default NetworkStatus; diff --git a/packages/js-dapi-client/lib/methods/platform/getStatus/NodeStatus.js b/packages/js-dapi-client/lib/methods/platform/getStatus/NodeStatus.js index 5a73a568a27..0cea8987593 100644 --- a/packages/js-dapi-client/lib/methods/platform/getStatus/NodeStatus.js +++ b/packages/js-dapi-client/lib/methods/platform/getStatus/NodeStatus.js @@ -23,4 +23,4 @@ class NodeStatus { } } -module.exports = NodeStatus; +export default NodeStatus; diff --git a/packages/js-dapi-client/lib/methods/platform/getStatus/StateSyncStatus.js b/packages/js-dapi-client/lib/methods/platform/getStatus/StateSyncStatus.js index 1927d214ade..935630aa6b7 100644 --- a/packages/js-dapi-client/lib/methods/platform/getStatus/StateSyncStatus.js +++ b/packages/js-dapi-client/lib/methods/platform/getStatus/StateSyncStatus.js @@ -86,4 +86,4 @@ class StateSyncStatus { } } -module.exports = StateSyncStatus; +export default StateSyncStatus; diff --git a/packages/js-dapi-client/lib/methods/platform/getStatus/TimeStatus.js b/packages/js-dapi-client/lib/methods/platform/getStatus/TimeStatus.js index 1c26509354b..8658ac828c2 100644 --- a/packages/js-dapi-client/lib/methods/platform/getStatus/TimeStatus.js +++ b/packages/js-dapi-client/lib/methods/platform/getStatus/TimeStatus.js @@ -46,4 +46,4 @@ class TimeStatus { } } -module.exports = TimeStatus; +export default TimeStatus; diff --git a/packages/js-dapi-client/lib/methods/platform/getStatus/VersionStatus.js b/packages/js-dapi-client/lib/methods/platform/getStatus/VersionStatus.js index 8ce56a81f7e..2477666beba 100644 --- a/packages/js-dapi-client/lib/methods/platform/getStatus/VersionStatus.js +++ b/packages/js-dapi-client/lib/methods/platform/getStatus/VersionStatus.js @@ -86,4 +86,4 @@ class VersionStatus { } } -module.exports = VersionStatus; +export default VersionStatus; diff --git a/packages/js-dapi-client/lib/methods/platform/getStatus/getStatusFactory.js b/packages/js-dapi-client/lib/methods/platform/getStatus/getStatusFactory.js index 0c2bd5fec26..c474c8dcd02 100644 --- a/packages/js-dapi-client/lib/methods/platform/getStatus/getStatusFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getStatus/getStatusFactory.js @@ -1,12 +1,14 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; +import GetStatusResponse from './GetStatusResponse.js'; + const { v0: { PlatformPromiseClient, GetStatusRequest, }, -} = require('@dashevo/dapi-grpc'); - -const InvalidResponseError = require('../response/errors/InvalidResponseError'); -const GetStatusResponse = require('./GetStatusResponse'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -63,4 +65,4 @@ function getStatusFactory(grpcTransport) { return getStatus; } -module.exports = getStatusFactory; +export default getStatusFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/getTotalCreditsInPlatform/GetTotalCreditsInPlatformResponse.js b/packages/js-dapi-client/lib/methods/platform/getTotalCreditsInPlatform/GetTotalCreditsInPlatformResponse.js index 5dc64e1bd98..a0879c4ceb6 100644 --- a/packages/js-dapi-client/lib/methods/platform/getTotalCreditsInPlatform/GetTotalCreditsInPlatformResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/getTotalCreditsInPlatform/GetTotalCreditsInPlatformResponse.js @@ -1,5 +1,5 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +import AbstractResponse from '../response/AbstractResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; class GetTotalCreditsInPlatformResponse extends AbstractResponse { /** @@ -43,4 +43,4 @@ class GetTotalCreditsInPlatformResponse extends AbstractResponse { } } -module.exports = GetTotalCreditsInPlatformResponse; +export default GetTotalCreditsInPlatformResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/getTotalCreditsInPlatform/getTotalCreditsInPlatformFactory.js b/packages/js-dapi-client/lib/methods/platform/getTotalCreditsInPlatform/getTotalCreditsInPlatformFactory.js index 1bbbd3f022f..f12c22ada15 100644 --- a/packages/js-dapi-client/lib/methods/platform/getTotalCreditsInPlatform/getTotalCreditsInPlatformFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getTotalCreditsInPlatform/getTotalCreditsInPlatformFactory.js @@ -1,12 +1,14 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import GetTotalCreditsInPlatformResponse from './GetTotalCreditsInPlatformResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetTotalCreditsInPlatformRequest, }, -} = require('@dashevo/dapi-grpc'); - -const GetTotalCreditsInPlatformResponse = require('./GetTotalCreditsInPlatformResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @param {GrpcTransport} grpcTransport @@ -64,4 +66,4 @@ function getTotalCreditsInPlatformFactory(grpcTransport) { return getTotalCreditsInPlatform; } -module.exports = getTotalCreditsInPlatformFactory; +export default getTotalCreditsInPlatformFactory; diff --git a/packages/js-dapi-client/lib/methods/platform/response/AbstractResponse.js b/packages/js-dapi-client/lib/methods/platform/response/AbstractResponse.js index 50a3508bd07..2cffe2d1f7a 100644 --- a/packages/js-dapi-client/lib/methods/platform/response/AbstractResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/response/AbstractResponse.js @@ -1,6 +1,6 @@ -const InvalidResponseError = require('./errors/InvalidResponseError'); -const Metadata = require('./Metadata'); -const Proof = require('./Proof'); +import InvalidResponseError from './errors/InvalidResponseError.js'; +import Metadata from './Metadata.js'; +import Proof from './Proof.js'; /** * @abstract @@ -61,4 +61,4 @@ class AbstractResponse { } } -module.exports = AbstractResponse; +export default AbstractResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/response/Metadata.js b/packages/js-dapi-client/lib/methods/platform/response/Metadata.js index 070134e3935..03e8c89a80f 100644 --- a/packages/js-dapi-client/lib/methods/platform/response/Metadata.js +++ b/packages/js-dapi-client/lib/methods/platform/response/Metadata.js @@ -46,4 +46,4 @@ class Metadata { } } -module.exports = Metadata; +export default Metadata; diff --git a/packages/js-dapi-client/lib/methods/platform/response/Proof.js b/packages/js-dapi-client/lib/methods/platform/response/Proof.js index 9d284ea969a..f93b1d5e3dd 100644 --- a/packages/js-dapi-client/lib/methods/platform/response/Proof.js +++ b/packages/js-dapi-client/lib/methods/platform/response/Proof.js @@ -56,4 +56,4 @@ class Proof { } } -module.exports = Proof; +export default Proof; diff --git a/packages/js-dapi-client/lib/methods/platform/response/StoreTreeProofs.js b/packages/js-dapi-client/lib/methods/platform/response/StoreTreeProofs.js index 5a3ad028286..60b69a7a710 100644 --- a/packages/js-dapi-client/lib/methods/platform/response/StoreTreeProofs.js +++ b/packages/js-dapi-client/lib/methods/platform/response/StoreTreeProofs.js @@ -1,10 +1,10 @@ class StoreTreeProofs { /** * @param {object} properties - * @param {Buffer} properties.publicKeyHashesToIdentityIdsProof - * @param {Buffer} properties.identitiesProof - * @param {Buffer} properties.documentsProof - * @param {Buffer} properties.dataContractsProof + * @param {Uint8Array} properties.publicKeyHashesToIdentityIdsProof + * @param {Uint8Array} properties.identitiesProof + * @param {Uint8Array} properties.documentsProof + * @param {Uint8Array} properties.dataContractsProof */ constructor(properties) { this.publicKeyHashesToIdentityIdsProof = properties.publicKeyHashesToIdentityIdsProof; @@ -14,32 +14,32 @@ class StoreTreeProofs { } /** - * @returns {Buffer} + * @returns {Uint8Array} */ getPublicKeyHashesToIdentityIdsProof() { return this.publicKeyHashesToIdentityIdsProof; } /** - * @returns {Buffer} + * @returns {Uint8Array} */ getIdentitiesProof() { return this.identitiesProof; } /** - * @returns {Buffer} + * @returns {Uint8Array} */ getDocumentsProof() { return this.documentsProof; } /** - * @returns {Buffer} + * @returns {Uint8Array} */ getDataContractsProof() { return this.dataContractsProof; } } -module.exports = StoreTreeProofs; +export default StoreTreeProofs; diff --git a/packages/js-dapi-client/lib/methods/platform/response/errors/InvalidResponseError.js b/packages/js-dapi-client/lib/methods/platform/response/errors/InvalidResponseError.js index d547af0d864..d85e77b1b5e 100644 --- a/packages/js-dapi-client/lib/methods/platform/response/errors/InvalidResponseError.js +++ b/packages/js-dapi-client/lib/methods/platform/response/errors/InvalidResponseError.js @@ -1,4 +1,4 @@ -const DAPIClientError = require('../../../../errors/DAPIClientError'); +import DAPIClientError from '../../../../errors/DAPIClientError.js'; class InvalidResponseError extends DAPIClientError { constructor(message) { @@ -6,4 +6,4 @@ class InvalidResponseError extends DAPIClientError { } } -module.exports = InvalidResponseError; +export default InvalidResponseError; diff --git a/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/ErrorResult.js b/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/ErrorResult.js index 55072f849b6..c4544608894 100644 --- a/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/ErrorResult.js +++ b/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/ErrorResult.js @@ -2,7 +2,7 @@ class ErrorResult { /** * @param {number} code * @param {string} message - * @param {Buffer|undefined} data + * @param {Uint8Array|undefined} data */ constructor(code, message, data) { this.code = code; @@ -25,11 +25,11 @@ class ErrorResult { } /** - * @returns {Buffer|undefined} + * @returns {Uint8Array|undefined} */ getData() { return this.data; } } -module.exports = ErrorResult; +export default ErrorResult; diff --git a/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/WaitForStateTransitionResultResponse.js b/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/WaitForStateTransitionResultResponse.js index fad4c5cbc2f..4d6e8ea1407 100644 --- a/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/WaitForStateTransitionResultResponse.js +++ b/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/WaitForStateTransitionResultResponse.js @@ -1,7 +1,7 @@ -const AbstractResponse = require('../response/AbstractResponse'); -const Metadata = require('../response/Metadata'); -const Proof = require('../response/Proof'); -const ErrorResult = require('./ErrorResult'); +import AbstractResponse from '../response/AbstractResponse.js'; +import Metadata from '../response/Metadata.js'; +import Proof from '../response/Proof.js'; +import ErrorResult from './ErrorResult.js'; class WaitForStateTransitionResultResponse extends AbstractResponse { /** @@ -59,4 +59,4 @@ class WaitForStateTransitionResultResponse extends AbstractResponse { } } -module.exports = WaitForStateTransitionResultResponse; +export default WaitForStateTransitionResultResponse; diff --git a/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.js b/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.js index 62d7466fba2..d185abcf093 100644 --- a/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.js @@ -1,12 +1,14 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import WaitForStateTransitionResultResponse from './WaitForStateTransitionResultResponse.js'; +import InvalidResponseError from '../response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, WaitForStateTransitionResultRequest, }, -} = require('@dashevo/dapi-grpc'); - -const WaitForStateTransitionResultResponse = require('./WaitForStateTransitionResultResponse'); -const InvalidResponseError = require('../response/errors/InvalidResponseError'); +} = dapiGrpc; /** * @@ -16,7 +18,7 @@ const InvalidResponseError = require('../response/errors/InvalidResponseError'); function waitForStateTransitionResultFactory(grpcTransport) { /** * @typedef waitForStateTransitionResult - * @param {Buffer} stateTransitionHash + * @param {Uint8Array} stateTransitionHash * @param {DAPIClientOptions & getDocumentsOptions & {prove: boolean}} [options] * @returns {Promise} */ @@ -72,4 +74,4 @@ function waitForStateTransitionResultFactory(grpcTransport) { return waitForStateTransitionResult; } -module.exports = waitForStateTransitionResultFactory; +export default waitForStateTransitionResultFactory; diff --git a/packages/js-dapi-client/lib/networkConfigs.js b/packages/js-dapi-client/lib/networkConfigs.js index e45953ac3a1..518736b06d2 100644 --- a/packages/js-dapi-client/lib/networkConfigs.js +++ b/packages/js-dapi-client/lib/networkConfigs.js @@ -1,4 +1,4 @@ -module.exports = { +export default { testnet: { seeds: [ 'seed-1.testnet.networks.dash.org:1443', diff --git a/packages/js-dapi-client/lib/test/bootstrap.js b/packages/js-dapi-client/lib/test/bootstrap.js index 85d7947d666..bd148b7d798 100644 --- a/packages/js-dapi-client/lib/test/bootstrap.js +++ b/packages/js-dapi-client/lib/test/bootstrap.js @@ -1,16 +1,21 @@ -const { expect, use } = require('chai'); -const sinon = require('sinon'); -const sinonChai = require('sinon-chai'); -const dirtyChai = require('dirty-chai'); -const chaiAsPromised = require('chai-as-promised'); -const { default: loadDpp } = require('@dashevo/wasm-dpp'); +import chai from 'chai'; +import sinon from 'sinon'; +import sinonChai from 'sinon-chai'; +import dirtyChai from 'dirty-chai'; +import chaiAsPromised from 'chai-as-promised'; +import loadDpp from '@dashevo/wasm-dpp'; -use(sinonChai); -use(chaiAsPromised); -use(dirtyChai); +chai.use(sinonChai); +chai.use(chaiAsPromised); +chai.use(dirtyChai); -exports.mochaHooks = { - beforeAll: loadDpp, +export const mochaHooks = { + // wasm-dpp is CJS; under NodeNext the default may resolve to the namespace + // object instead of the callable. Unwrap defensively. + beforeAll: async () => { + const load = loadDpp.default ?? loadDpp; + return load(); + }, beforeEach() { if (!this.sinon) { @@ -25,4 +30,4 @@ exports.mochaHooks = { }, }; -global.expect = expect; +global.expect = chai.expect; diff --git a/packages/js-dapi-client/lib/test/fixtures/getHeadersFixture.js b/packages/js-dapi-client/lib/test/fixtures/getHeadersFixture.js index 8c0fc19ce26..bfbed1c6adb 100644 --- a/packages/js-dapi-client/lib/test/fixtures/getHeadersFixture.js +++ b/packages/js-dapi-client/lib/test/fixtures/getHeadersFixture.js @@ -1,4 +1,5 @@ -const { BlockHeader } = require('@dashevo/dashcore-lib'); +import dashcore from '@dashevo/dashcore-lib'; +const { BlockHeader } = dashcore; const headers = [ { @@ -212,4 +213,4 @@ function getHeadersFixture() { .map((header) => new BlockHeader({ ...header, bits: parseInt(header.bits, 16) })); } -module.exports = getHeadersFixture; +export default getHeadersFixture; diff --git a/packages/js-dapi-client/lib/test/fixtures/getMNListDiffsFixture.js b/packages/js-dapi-client/lib/test/fixtures/getMNListDiffsFixture.js index 771d0f81741..f363bf1eb31 100644 --- a/packages/js-dapi-client/lib/test/fixtures/getMNListDiffsFixture.js +++ b/packages/js-dapi-client/lib/test/fixtures/getMNListDiffsFixture.js @@ -90,4 +90,4 @@ function getMNListDiffsFixture() { ]; } -module.exports = getMNListDiffsFixture; +export default getMNListDiffsFixture; diff --git a/packages/js-dapi-client/lib/test/fixtures/getMetadataFixture.js b/packages/js-dapi-client/lib/test/fixtures/getMetadataFixture.js index 6ce49e99854..c67b7eb2dd5 100644 --- a/packages/js-dapi-client/lib/test/fixtures/getMetadataFixture.js +++ b/packages/js-dapi-client/lib/test/fixtures/getMetadataFixture.js @@ -15,4 +15,4 @@ function getMetadataFixture() { }; } -module.exports = getMetadataFixture; +export default getMetadataFixture; diff --git a/packages/js-dapi-client/lib/test/fixtures/getProofFixture.js b/packages/js-dapi-client/lib/test/fixtures/getProofFixture.js index a5710ea1ee3..2bf7e9eec64 100644 --- a/packages/js-dapi-client/lib/test/fixtures/getProofFixture.js +++ b/packages/js-dapi-client/lib/test/fixtures/getProofFixture.js @@ -1,4 +1,4 @@ -const { hexToBytes, base64ToBytes } = require('../../utils/bytes'); +import { hexToBytes, base64ToBytes } from '../../utils/bytes.js'; /** * @returns {{ @@ -16,4 +16,4 @@ function getProofFixture() { }; } -module.exports = getProofFixture; +export default getProofFixture; diff --git a/packages/js-dapi-client/lib/test/fixtures/getStatusFixture.js b/packages/js-dapi-client/lib/test/fixtures/getStatusFixture.js index 49dbf60621b..e4bdc5be9e0 100644 --- a/packages/js-dapi-client/lib/test/fixtures/getStatusFixture.js +++ b/packages/js-dapi-client/lib/test/fixtures/getStatusFixture.js @@ -1,4 +1,4 @@ -const { base64ToBytes } = require('../../utils/bytes'); +import { base64ToBytes } from '../../utils/bytes.js'; /** * @@ -62,4 +62,4 @@ function getStatusFixture() { }; } -module.exports = getStatusFixture; +export default getStatusFixture; diff --git a/packages/js-dapi-client/lib/test/karma/bootstrap.js b/packages/js-dapi-client/lib/test/karma/bootstrap.js deleted file mode 100644 index d3052dd3f57..00000000000 --- a/packages/js-dapi-client/lib/test/karma/bootstrap.js +++ /dev/null @@ -1,34 +0,0 @@ -const { expect, use } = require('chai'); -const sinon = require('sinon'); -const sinonChai = require('sinon-chai'); -const dirtyChai = require('dirty-chai'); -const chaiAsPromised = require('chai-as-promised'); -const { default: loadDpp } = require('@dashevo/wasm-dpp'); - -use(sinonChai); -use(chaiAsPromised); -use(dirtyChai); - -before(async () => { - await loadDpp(); -}); - -beforeEach(function beforeEach() { - if (!this.sinon) { - this.sinon = sinon.createSandbox(); - } else { - this.sinon.restore(); - } -}); - -afterEach(function afterEach() { - this.sinon.restore(); -}); - -before(function before() { - if (!this.sinon) { - this.sinon = sinon.createSandbox(); - } -}); - -global.expect = expect; diff --git a/packages/js-dapi-client/lib/test/karma/loader.js b/packages/js-dapi-client/lib/test/karma/loader.js deleted file mode 100644 index f4731dcbe32..00000000000 --- a/packages/js-dapi-client/lib/test/karma/loader.js +++ /dev/null @@ -1,7 +0,0 @@ -// This file is used for compiling tests with webpack into one file for using with karma -require('./bootstrap'); - -// noinspection JSUnresolvedFunction -const testsContext = require.context('../../../test', true, /^(?!.*functional).*\.js$/); - -testsContext.keys().forEach(testsContext); diff --git a/packages/js-dapi-client/lib/test/mocks/BlockHeadersWithChainLocksStreamMock.js b/packages/js-dapi-client/lib/test/mocks/BlockHeadersWithChainLocksStreamMock.js index af846163968..fd39cb08f69 100644 --- a/packages/js-dapi-client/lib/test/mocks/BlockHeadersWithChainLocksStreamMock.js +++ b/packages/js-dapi-client/lib/test/mocks/BlockHeadersWithChainLocksStreamMock.js @@ -1,4 +1,4 @@ -const EventEmitter = require('events'); +import EventEmitter from 'events'; class BlockHeadersWithChainLocksStreamMock extends EventEmitter { constructor(sinon) { @@ -51,4 +51,4 @@ class BlockHeadersWithChainLocksStreamMock extends EventEmitter { } } -module.exports = BlockHeadersWithChainLocksStreamMock; +export default BlockHeadersWithChainLocksStreamMock; diff --git a/packages/js-dapi-client/lib/test/mocks/mockHeadersChain.js b/packages/js-dapi-client/lib/test/mocks/mockHeadersChain.js index 3c7a04e3752..b03891937e4 100644 --- a/packages/js-dapi-client/lib/test/mocks/mockHeadersChain.js +++ b/packages/js-dapi-client/lib/test/mocks/mockHeadersChain.js @@ -1,7 +1,8 @@ -const X11 = require('wasm-x11-hash'); -const { BlockHeader, configure } = require('@dashevo/dashcore-lib'); -const { genesis } = require('@dashevo/dash-spv'); -const { hexToBytes } = require('../../utils/bytes'); +import X11 from 'wasm-x11-hash'; +import dashcore from '@dashevo/dashcore-lib'; +const { BlockHeader, configure } = dashcore; +import { genesis } from '@dashevo/dash-spv'; +import { hexToBytes } from '../../utils/bytes.js'; const getRoot = (network) => { switch (network) { @@ -53,4 +54,4 @@ const mockHeadersChain = async (network, length, root) => { return chain; }; -module.exports = mockHeadersChain; +export default mockHeadersChain; diff --git a/packages/js-dapi-client/lib/transport/GrpcTransport/GrpcTransport.js b/packages/js-dapi-client/lib/transport/GrpcTransport/GrpcTransport.js index 5a25bf5e2e1..172bd25802a 100644 --- a/packages/js-dapi-client/lib/transport/GrpcTransport/GrpcTransport.js +++ b/packages/js-dapi-client/lib/transport/GrpcTransport/GrpcTransport.js @@ -1,11 +1,11 @@ -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); -const logger = require('../../logger'); +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; +import logger from '../../logger/index.js'; -const MaxRetriesReachedError = require('../errors/response/MaxRetriesReachedError'); -const NoAvailableAddressesForRetryError = require('../errors/response/NoAvailableAddressesForRetryError'); -const NoAvailableAddressesError = require('../errors/NoAvailableAddressesError'); -const TimeoutError = require('./errors/TimeoutError'); -const RetriableResponseError = require('../errors/response/RetriableResponseError'); +import MaxRetriesReachedError from '../errors/response/MaxRetriesReachedError.js'; +import NoAvailableAddressesForRetryError from '../errors/response/NoAvailableAddressesForRetryError.js'; +import NoAvailableAddressesError from '../errors/NoAvailableAddressesError.js'; +import TimeoutError from './errors/TimeoutError.js'; +import RetriableResponseError from '../errors/response/RetriableResponseError.js'; class GrpcTransport { /** @@ -156,4 +156,4 @@ class GrpcTransport { } } -module.exports = GrpcTransport; +export default GrpcTransport; diff --git a/packages/js-dapi-client/lib/transport/GrpcTransport/createGrpcTransportError.js b/packages/js-dapi-client/lib/transport/GrpcTransport/createGrpcTransportError.js index 2fdc053c8b1..217809761b0 100644 --- a/packages/js-dapi-client/lib/transport/GrpcTransport/createGrpcTransportError.js +++ b/packages/js-dapi-client/lib/transport/GrpcTransport/createGrpcTransportError.js @@ -1,20 +1,20 @@ -const cbor = require('cbor'); - -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); -const { parseMetadata } = require('@dashevo/dapi-grpc'); - -const { - deserializeConsensusError, -} = require('@dashevo/wasm-dpp'); -const { default: loadWasmDpp } = require('@dashevo/wasm-dpp'); -const NotFoundError = require('./errors/NotFoundError'); -const TimeoutError = require('./errors/TimeoutError'); -const ResponseError = require('../errors/response/ResponseError'); -const ServerError = require('../errors/response/ServerError'); -const InvalidRequestError = require('../errors/response/InvalidRequestError'); -const InvalidRequestDPPError = require('../errors/response/InvalidRequestDPPError'); -const InternalServerError = require('./errors/InternalServerError'); -const { base64ToBytes } = require('../../utils/bytes'); +import cbor from 'cbor'; + +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; +import dapiGrpc from '@dashevo/dapi-grpc'; + +import wasmDpp from '@dashevo/wasm-dpp'; +import NotFoundError from './errors/NotFoundError.js'; +import TimeoutError from './errors/TimeoutError.js'; +import ResponseError from '../errors/response/ResponseError.js'; +import ServerError from '../errors/response/ServerError.js'; +import InvalidRequestError from '../errors/response/InvalidRequestError.js'; +import InvalidRequestDPPError from '../errors/response/InvalidRequestDPPError.js'; +import InternalServerError from './errors/InternalServerError.js'; +import { base64ToBytes } from '../../utils/bytes.js'; + +const { parseMetadata } = dapiGrpc; +const { deserializeConsensusError, default: loadWasmDpp } = wasmDpp; const INVALID_REQUEST_CODES = [ GrpcErrorCodes.INVALID_ARGUMENT, @@ -149,4 +149,4 @@ async function createGrpcTransportError(grpcError, dapiAddress) { ); } -module.exports = createGrpcTransportError; +export default createGrpcTransportError; diff --git a/packages/js-dapi-client/lib/transport/GrpcTransport/errors/InternalServerError.js b/packages/js-dapi-client/lib/transport/GrpcTransport/errors/InternalServerError.js index 74ec7058517..bec33c8b901 100644 --- a/packages/js-dapi-client/lib/transport/GrpcTransport/errors/InternalServerError.js +++ b/packages/js-dapi-client/lib/transport/GrpcTransport/errors/InternalServerError.js @@ -1,4 +1,4 @@ -const RetriableResponseError = require('../../errors/response/RetriableResponseError'); +import RetriableResponseError from '../../errors/response/RetriableResponseError.js'; class InternalServerError extends RetriableResponseError { /** @@ -17,4 +17,4 @@ class InternalServerError extends RetriableResponseError { } } -module.exports = InternalServerError; +export default InternalServerError; diff --git a/packages/js-dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js b/packages/js-dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js index 12a93f43849..59f8ad9c46e 100644 --- a/packages/js-dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js +++ b/packages/js-dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js @@ -1,6 +1,6 @@ -const grpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); +import grpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; -const ResponseError = require('../../errors/response/ResponseError'); +import ResponseError from '../../errors/response/ResponseError.js'; class NotFoundError extends ResponseError { /** @@ -14,4 +14,4 @@ class NotFoundError extends ResponseError { } } -module.exports = NotFoundError; +export default NotFoundError; diff --git a/packages/js-dapi-client/lib/transport/GrpcTransport/errors/TimeoutError.js b/packages/js-dapi-client/lib/transport/GrpcTransport/errors/TimeoutError.js index 57d4d572777..1c0aee1a496 100644 --- a/packages/js-dapi-client/lib/transport/GrpcTransport/errors/TimeoutError.js +++ b/packages/js-dapi-client/lib/transport/GrpcTransport/errors/TimeoutError.js @@ -1,6 +1,6 @@ -const grpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); +import grpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; -const RetriableResponseError = require('../../errors/response/RetriableResponseError'); +import RetriableResponseError from '../../errors/response/RetriableResponseError.js'; class TimeoutError extends RetriableResponseError { /** @@ -13,4 +13,4 @@ class TimeoutError extends RetriableResponseError { } } -module.exports = TimeoutError; +export default TimeoutError; diff --git a/packages/js-dapi-client/lib/transport/JsonRpcTransport/JsonRpcTransport.js b/packages/js-dapi-client/lib/transport/JsonRpcTransport/JsonRpcTransport.js index a76afe2aeb1..eb54f19f95d 100644 --- a/packages/js-dapi-client/lib/transport/JsonRpcTransport/JsonRpcTransport.js +++ b/packages/js-dapi-client/lib/transport/JsonRpcTransport/JsonRpcTransport.js @@ -1,9 +1,9 @@ -const logger = require('../../logger'); +import logger from '../../logger/index.js'; -const MaxRetriesReachedError = require('../errors/response/MaxRetriesReachedError'); -const NoAvailableAddressesForRetryError = require('../errors/response/NoAvailableAddressesForRetryError'); -const NoAvailableAddressesError = require('../errors/NoAvailableAddressesError'); -const RetriableResponseError = require('../errors/response/RetriableResponseError'); +import MaxRetriesReachedError from '../errors/response/MaxRetriesReachedError.js'; +import NoAvailableAddressesForRetryError from '../errors/response/NoAvailableAddressesForRetryError.js'; +import NoAvailableAddressesError from '../errors/NoAvailableAddressesError.js'; +import RetriableResponseError from '../errors/response/RetriableResponseError.js'; class JsonRpcTransport { /** @@ -127,4 +127,4 @@ class JsonRpcTransport { } } -module.exports = JsonRpcTransport; +export default JsonRpcTransport; diff --git a/packages/js-dapi-client/lib/transport/JsonRpcTransport/createJsonTransportError.js b/packages/js-dapi-client/lib/transport/JsonRpcTransport/createJsonTransportError.js index e037f8e042b..9d9f3a02779 100644 --- a/packages/js-dapi-client/lib/transport/JsonRpcTransport/createJsonTransportError.js +++ b/packages/js-dapi-client/lib/transport/JsonRpcTransport/createJsonTransportError.js @@ -1,8 +1,8 @@ -const WrongHttpCodeError = require('./errors/WrongHttpCodeError'); -const JsonRpcError = require('./errors/JsonRpcError'); -const ServerError = require('../errors/response/ServerError'); -const ResponseError = require('../errors/response/ResponseError'); -const RetriableResponseError = require('../errors/response/RetriableResponseError'); +import WrongHttpCodeError from './errors/WrongHttpCodeError.js'; +import JsonRpcError from './errors/JsonRpcError.js'; +import ServerError from '../errors/response/ServerError.js'; +import ResponseError from '../errors/response/ResponseError.js'; +import RetriableResponseError from '../errors/response/RetriableResponseError.js'; /** * @typedef {createJsonTransportError} @@ -63,4 +63,4 @@ function createJsonTransportError(error, dapiAddress) { ); } -module.exports = createJsonTransportError; +export default createJsonTransportError; diff --git a/packages/js-dapi-client/lib/transport/JsonRpcTransport/errors/JsonRpcError.js b/packages/js-dapi-client/lib/transport/JsonRpcTransport/errors/JsonRpcError.js index 747a472c8a5..c6ac7dff61e 100644 --- a/packages/js-dapi-client/lib/transport/JsonRpcTransport/errors/JsonRpcError.js +++ b/packages/js-dapi-client/lib/transport/JsonRpcTransport/errors/JsonRpcError.js @@ -1,4 +1,4 @@ -const DAPIClientError = require('../../../errors/DAPIClientError'); +import DAPIClientError from '../../../errors/DAPIClientError.js'; class JsonRpcError extends DAPIClientError { /** @@ -53,4 +53,4 @@ class JsonRpcError extends DAPIClientError { } } -module.exports = JsonRpcError; +export default JsonRpcError; diff --git a/packages/js-dapi-client/lib/transport/JsonRpcTransport/errors/WrongHttpCodeError.js b/packages/js-dapi-client/lib/transport/JsonRpcTransport/errors/WrongHttpCodeError.js index 041d74869d4..e4fc7788602 100644 --- a/packages/js-dapi-client/lib/transport/JsonRpcTransport/errors/WrongHttpCodeError.js +++ b/packages/js-dapi-client/lib/transport/JsonRpcTransport/errors/WrongHttpCodeError.js @@ -1,4 +1,4 @@ -const DAPIClientError = require('../../../errors/DAPIClientError'); +import DAPIClientError from '../../../errors/DAPIClientError.js'; class WrongHttpCodeError extends DAPIClientError { /** @@ -35,4 +35,4 @@ class WrongHttpCodeError extends DAPIClientError { } } -module.exports = WrongHttpCodeError; +export default WrongHttpCodeError; diff --git a/packages/js-dapi-client/lib/transport/JsonRpcTransport/requestJsonRpc.js b/packages/js-dapi-client/lib/transport/JsonRpcTransport/requestJsonRpc.js index 49bab7c6338..1b489c154ea 100644 --- a/packages/js-dapi-client/lib/transport/JsonRpcTransport/requestJsonRpc.js +++ b/packages/js-dapi-client/lib/transport/JsonRpcTransport/requestJsonRpc.js @@ -1,5 +1,5 @@ -const JsonRpcError = require('./errors/JsonRpcError'); -const WrongHttpCodeError = require('./errors/WrongHttpCodeError'); +import JsonRpcError from './errors/JsonRpcError.js'; +import WrongHttpCodeError from './errors/WrongHttpCodeError.js'; // Lazily-created undici Agent that disables TLS verification, shared across // all self-signed requests. A per-request Agent would leak its socket pool @@ -88,4 +88,4 @@ async function requestJsonRpc(protocol, host, port, selfSigned, method, params, return data.result; } -module.exports = requestJsonRpc; +export default requestJsonRpc; diff --git a/packages/js-dapi-client/lib/transport/ReconnectableStream.js b/packages/js-dapi-client/lib/transport/ReconnectableStream.js index 460bdd4da47..0d93a89baf4 100644 --- a/packages/js-dapi-client/lib/transport/ReconnectableStream.js +++ b/packages/js-dapi-client/lib/transport/ReconnectableStream.js @@ -1,6 +1,6 @@ -const EventEmitter = require('events'); -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); -const wait = require('../utils/wait'); +import EventEmitter from 'events'; +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; +import wait from '../utils/wait.js'; /** * @typedef ReconnectableStreamOptions @@ -315,4 +315,4 @@ class ReconnectableStream extends EventEmitter { ReconnectableStream.EVENTS = EVENTS; -module.exports = ReconnectableStream; +export default ReconnectableStream; diff --git a/packages/js-dapi-client/lib/transport/errors/NoAvailableAddressesError.js b/packages/js-dapi-client/lib/transport/errors/NoAvailableAddressesError.js index d6356322f5d..999b98c9012 100644 --- a/packages/js-dapi-client/lib/transport/errors/NoAvailableAddressesError.js +++ b/packages/js-dapi-client/lib/transport/errors/NoAvailableAddressesError.js @@ -1,4 +1,4 @@ -const DAPIClientError = require('../../errors/DAPIClientError'); +import DAPIClientError from '../../errors/DAPIClientError.js'; class NoAvailableAddressesError extends DAPIClientError { constructor() { @@ -6,4 +6,4 @@ class NoAvailableAddressesError extends DAPIClientError { } } -module.exports = NoAvailableAddressesError; +export default NoAvailableAddressesError; diff --git a/packages/js-dapi-client/lib/transport/errors/response/InvalidRequestDPPError.js b/packages/js-dapi-client/lib/transport/errors/response/InvalidRequestDPPError.js index e0cc9162c22..c64557032ac 100644 --- a/packages/js-dapi-client/lib/transport/errors/response/InvalidRequestDPPError.js +++ b/packages/js-dapi-client/lib/transport/errors/response/InvalidRequestDPPError.js @@ -1,4 +1,4 @@ -const ResponseError = require('./ResponseError'); +import ResponseError from './ResponseError.js'; class InvalidRequestDPPError extends ResponseError { /** @@ -21,4 +21,4 @@ class InvalidRequestDPPError extends ResponseError { } } -module.exports = InvalidRequestDPPError; +export default InvalidRequestDPPError; diff --git a/packages/js-dapi-client/lib/transport/errors/response/InvalidRequestError.js b/packages/js-dapi-client/lib/transport/errors/response/InvalidRequestError.js index a93c98c3078..7be0eaf1f55 100644 --- a/packages/js-dapi-client/lib/transport/errors/response/InvalidRequestError.js +++ b/packages/js-dapi-client/lib/transport/errors/response/InvalidRequestError.js @@ -1,7 +1,7 @@ -const ResponseError = require('./ResponseError'); +import ResponseError from './ResponseError.js'; class InvalidRequestError extends ResponseError { } -module.exports = InvalidRequestError; +export default InvalidRequestError; diff --git a/packages/js-dapi-client/lib/transport/errors/response/MaxRetriesReachedError.js b/packages/js-dapi-client/lib/transport/errors/response/MaxRetriesReachedError.js index 5b26aee31f6..e20e1c54653 100644 --- a/packages/js-dapi-client/lib/transport/errors/response/MaxRetriesReachedError.js +++ b/packages/js-dapi-client/lib/transport/errors/response/MaxRetriesReachedError.js @@ -1,4 +1,4 @@ -const ResponseError = require('./ResponseError'); +import ResponseError from './ResponseError.js'; class MaxRetriesReachedError extends ResponseError { /** @@ -23,4 +23,4 @@ class MaxRetriesReachedError extends ResponseError { } } -module.exports = MaxRetriesReachedError; +export default MaxRetriesReachedError; diff --git a/packages/js-dapi-client/lib/transport/errors/response/NoAvailableAddressesForRetryError.js b/packages/js-dapi-client/lib/transport/errors/response/NoAvailableAddressesForRetryError.js index ac9455faea2..8d3d536bead 100644 --- a/packages/js-dapi-client/lib/transport/errors/response/NoAvailableAddressesForRetryError.js +++ b/packages/js-dapi-client/lib/transport/errors/response/NoAvailableAddressesForRetryError.js @@ -1,4 +1,4 @@ -const ResponseError = require('./ResponseError'); +import ResponseError from './ResponseError.js'; class NoAvailableAddressesForRetryError extends ResponseError { /** @@ -23,4 +23,4 @@ class NoAvailableAddressesForRetryError extends ResponseError { } } -module.exports = NoAvailableAddressesForRetryError; +export default NoAvailableAddressesForRetryError; diff --git a/packages/js-dapi-client/lib/transport/errors/response/ResponseError.js b/packages/js-dapi-client/lib/transport/errors/response/ResponseError.js index b45256bc06a..61dd677701d 100644 --- a/packages/js-dapi-client/lib/transport/errors/response/ResponseError.js +++ b/packages/js-dapi-client/lib/transport/errors/response/ResponseError.js @@ -1,4 +1,4 @@ -const DAPIClientError = require('../../../errors/DAPIClientError'); +import DAPIClientError from '../../../errors/DAPIClientError.js'; class ResponseError extends DAPIClientError { /** @@ -37,4 +37,4 @@ class ResponseError extends DAPIClientError { } } -module.exports = ResponseError; +export default ResponseError; diff --git a/packages/js-dapi-client/lib/transport/errors/response/RetriableResponseError.js b/packages/js-dapi-client/lib/transport/errors/response/RetriableResponseError.js index d15537763a6..71c2d63a4d4 100644 --- a/packages/js-dapi-client/lib/transport/errors/response/RetriableResponseError.js +++ b/packages/js-dapi-client/lib/transport/errors/response/RetriableResponseError.js @@ -1,7 +1,7 @@ -const ResponseError = require('./ResponseError'); +import ResponseError from './ResponseError.js'; class RetriableResponseError extends ResponseError { } -module.exports = RetriableResponseError; +export default RetriableResponseError; diff --git a/packages/js-dapi-client/lib/transport/errors/response/ServerError.js b/packages/js-dapi-client/lib/transport/errors/response/ServerError.js index 0af6ec6c03a..d8d8eadce6f 100644 --- a/packages/js-dapi-client/lib/transport/errors/response/ServerError.js +++ b/packages/js-dapi-client/lib/transport/errors/response/ServerError.js @@ -1,7 +1,7 @@ -const RetriableResponseError = require('./RetriableResponseError'); +import RetriableResponseError from './RetriableResponseError.js'; class ServerError extends RetriableResponseError { } -module.exports = ServerError; +export default ServerError; diff --git a/packages/js-dapi-client/lib/utils/bytes.js b/packages/js-dapi-client/lib/utils/bytes.js index b728845e76e..6f69b7dd885 100644 --- a/packages/js-dapi-client/lib/utils/bytes.js +++ b/packages/js-dapi-client/lib/utils/bytes.js @@ -8,7 +8,7 @@ function assertBytes(value, name) { } } -function hexToBytes(hex) { +export function hexToBytes(hex) { if (typeof hex !== 'string') { throw new TypeError('hex must be a string'); } @@ -25,12 +25,12 @@ function hexToBytes(hex) { return out; } -function bytesToHex(bytes) { +export function bytesToHex(bytes) { assertBytes(bytes, 'bytes'); return Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join(''); } -function base64ToBytes(b64) { +export function base64ToBytes(b64) { if (typeof b64 !== 'string') { throw new TypeError('b64 must be a string'); } @@ -42,7 +42,7 @@ function base64ToBytes(b64) { return out; } -function bytesToBase64(bytes) { +export function bytesToBase64(bytes) { assertBytes(bytes, 'bytes'); let bin = ''; for (let i = 0; i < bytes.length; i += 1) { @@ -51,7 +51,7 @@ function bytesToBase64(bytes) { return btoa(bin); } -function concatBytes(arrays) { +export function concatBytes(arrays) { if (!Array.isArray(arrays)) { throw new TypeError('concatBytes expects an array'); } @@ -67,7 +67,7 @@ function concatBytes(arrays) { return out; } -function bytesEqual(a, b) { +export function bytesEqual(a, b) { assertBytes(a, 'a'); assertBytes(b, 'b'); if (a.length !== b.length) return false; @@ -76,12 +76,3 @@ function bytesEqual(a, b) { } return true; } - -module.exports = { - hexToBytes, - bytesToHex, - base64ToBytes, - bytesToBase64, - concatBytes, - bytesEqual, -}; diff --git a/packages/js-dapi-client/lib/utils/wait.js b/packages/js-dapi-client/lib/utils/wait.js index 3494def469a..4ad8718c945 100644 --- a/packages/js-dapi-client/lib/utils/wait.js +++ b/packages/js-dapi-client/lib/utils/wait.js @@ -7,4 +7,4 @@ async function wait(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); } -module.exports = wait; +export default wait; diff --git a/packages/js-dapi-client/package.json b/packages/js-dapi-client/package.json index 46dab74f186..3447fe7906d 100644 --- a/packages/js-dapi-client/package.json +++ b/packages/js-dapi-client/package.json @@ -2,7 +2,14 @@ "name": "@dashevo/dapi-client", "version": "3.1.0-dev.5", "description": "Client library used to access Dash DAPI endpoints", - "main": "lib/index.js", + "type": "module", + "exports": { + ".": "./lib/index.js", + "./lib/*": "./lib/*" + }, + "engines": { + "node": ">=18.18" + }, "contributors": [ { "name": "Ivan Shumkov", @@ -32,63 +39,32 @@ "@dashevo/grpc-common": "workspace:*", "@dashevo/wasm-dpp": "workspace:*", "cbor": "^8.0.0", + "events": "^3.3.0", "google-protobuf": "^3.12.2", "undici": "^6.0.0", "wasm-x11-hash": "~0.0.2" }, "devDependencies": { - "@babel/core": "^7.26.10", - "assert-browserify": "^2.0.0", - "babel-loader": "^9.1.3", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", "chai": "^4.3.10", "chai-as-promised": "^7.1.1", "comment-parser": "^0.7.6", - "core-js": "^3.33.1", - "crypto-browserify": "^3.12.1", "dirty-chai": "^2.0.1", "eslint": "^9.18.0", - "events": "^3.3.0", - "karma": "^6.4.3", - "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^3.1.0", - "karma-firefox-launcher": "^2.1.2", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-webpack": "^5.0.0", "mocha": "^11.1.0", "nyc": "^15.1.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", "sinon": "^18.0.1", - "sinon-chai": "^3.7.0", - "stream-browserify": "^3.0.0", - "string_decoder": "^1.3.0", - "url": "^0.11.3", - "util": "^0.12.4", - "webpack": "^5.104.0", - "webpack-cli": "^4.9.1" - }, - "engines": { - "node": ">=18.18" + "sinon-chai": "^3.7.0" }, "files": [ "docs", - "lib", - "dist" + "lib" ], "scripts": { - "build:web": "webpack", "lint": "eslint .", - "test": "yarn run test:coverage && yarn run test:browsers", + "test": "yarn run test:coverage", "test:unit": "mocha './test/unit/**/*.spec.js'", "test:integration": "mocha './test/integration/**/*.spec.js'", - "test:node": "NODE_ENV=test mocha", - "test:browsers": "karma start ./karma.conf.js --single-run", - "test:coverage": "NODE_ENV=test nyc --check-coverage --stmts=98 --branch=98 --funcs=98 --lines=89 yarn run mocha 'test/unit/**/*.spec.js' 'test/integration/**/*.spec.js'", - "prepublishOnly": "yarn run build:web" + "test:coverage": "NODE_ENV=test nyc --check-coverage --stmts=98 --branch=98 --funcs=98 --lines=89 yarn run mocha 'test/unit/**/*.spec.js' 'test/integration/**/*.spec.js'" }, "ultra": { "concurrent": [ diff --git a/packages/js-dapi-client/test/integration/BlockHeadersProvider/BlockHeadersProvider.spec.js b/packages/js-dapi-client/test/integration/BlockHeadersProvider/BlockHeadersProvider.spec.js index cc731c751aa..616862c3d1b 100644 --- a/packages/js-dapi-client/test/integration/BlockHeadersProvider/BlockHeadersProvider.spec.js +++ b/packages/js-dapi-client/test/integration/BlockHeadersProvider/BlockHeadersProvider.spec.js @@ -1,8 +1,8 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const BlockHeadersProvider = require('../../../lib/BlockHeadersProvider/BlockHeadersProvider'); -const BlockHeadersWithChainLocksStreamMock = require('../../../lib/test/mocks/BlockHeadersWithChainLocksStreamMock'); -const mockHeadersChain = require('../../../lib/test/mocks/mockHeadersChain'); +import BlockHeadersProvider from '../../../lib/BlockHeadersProvider/BlockHeadersProvider.js'; +import BlockHeadersWithChainLocksStreamMock from '../../../lib/test/mocks/BlockHeadersWithChainLocksStreamMock.js'; +import mockHeadersChain from '../../../lib/test/mocks/mockHeadersChain.js'; describe('BlockHeadersProvider - integration', function describe() { this.timeout(6000); diff --git a/packages/js-dapi-client/test/integration/DAPIClient.spec.js b/packages/js-dapi-client/test/integration/DAPIClient.spec.js index be852d3dbe1..e0f7f653c8c 100644 --- a/packages/js-dapi-client/test/integration/DAPIClient.spec.js +++ b/packages/js-dapi-client/test/integration/DAPIClient.spec.js @@ -1,6 +1,6 @@ -const DAPIClient = require('../../lib/DAPIClient'); +import DAPIClient from '../../lib/DAPIClient.js'; -const BlockHeadersProvider = require('../../lib/BlockHeadersProvider/BlockHeadersProvider'); +import BlockHeadersProvider from '../../lib/BlockHeadersProvider/BlockHeadersProvider.js'; describe('DAPIClient - integration', () => { let dapiClient; diff --git a/packages/js-dapi-client/test/integration/SMLProvider/SimplifiedMasternodeListProvider.spec.js b/packages/js-dapi-client/test/integration/SMLProvider/SimplifiedMasternodeListProvider.spec.js index aeb50c773bd..12c29fe00af 100644 --- a/packages/js-dapi-client/test/integration/SMLProvider/SimplifiedMasternodeListProvider.spec.js +++ b/packages/js-dapi-client/test/integration/SMLProvider/SimplifiedMasternodeListProvider.spec.js @@ -1,11 +1,11 @@ -const SimplifiedMNList = require('@dashevo/dashcore-lib/lib/deterministicmnlist/SimplifiedMNList'); +import SimplifiedMNList from '@dashevo/dashcore-lib/lib/deterministicmnlist/SimplifiedMNList.js'; -const SimplifiedMasternodeListProvider = require('../../../lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider'); -const DAPIAddress = require('../../../lib/dapiAddressProvider/DAPIAddress'); +import SimplifiedMasternodeListProvider from '../../../lib/SimplifiedMasternodeListProvider/SimplifiedMasternodeListProvider.js'; +import DAPIAddress from '../../../lib/dapiAddressProvider/DAPIAddress.js'; -const getMNListDiffsFixture = require('../../../lib/test/fixtures/getMNListDiffsFixture'); +import getMNListDiffsFixture from '../../../lib/test/fixtures/getMNListDiffsFixture.js'; -const wait = require('../../../lib/utils/wait'); +import wait from '../../../lib/utils/wait.js'; // TODO: Update test to new implementation describe.skip('SimplifiedMasternodeListProvider', () => { diff --git a/packages/js-dapi-client/test/integration/methods/core/CoreMethodsFacade.spec.js b/packages/js-dapi-client/test/integration/methods/core/CoreMethodsFacade.spec.js index 81a67152bc5..ee8723ec442 100644 --- a/packages/js-dapi-client/test/integration/methods/core/CoreMethodsFacade.spec.js +++ b/packages/js-dapi-client/test/integration/methods/core/CoreMethodsFacade.spec.js @@ -1,4 +1,7 @@ -const { EventEmitter } = require('events'); +import EventEmitter from 'events'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import BloomFilter from '@dashevo/dashcore-lib/lib/bloomfilter.js'; +import CoreMethodsFacade from '../../../../lib/methods/core/CoreMethodsFacade.js'; const { v0: { @@ -8,11 +11,7 @@ const { GetBlockchainStatusResponse, GetMasternodeStatusResponse, }, -} = require('@dashevo/dapi-grpc'); - -const BloomFilter = require('@dashevo/dashcore-lib/lib/bloomfilter'); - -const CoreMethodsFacade = require('../../../../lib/methods/core/CoreMethodsFacade'); +} = dapiGrpc; describe('CoreMethodsFacade', () => { let jsonRpcTransportMock; diff --git a/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js b/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js index d8e1983202c..3a104a94dc4 100644 --- a/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js +++ b/packages/js-dapi-client/test/integration/methods/platform/PlatformMethodsFacade.spec.js @@ -1,3 +1,12 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import wasmDpp from '@dashevo/wasm-dpp'; + +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; +import getIdentityFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture.js'; + +import PlatformMethodsFacade from '../../../../lib/methods/platform/PlatformMethodsFacade.js'; +import { hexToBytes, bytesToHex } from '../../../../lib/utils/bytes.js'; + const { v0: { ResponseMetadata, @@ -17,15 +26,9 @@ const { WaitForStateTransitionResultResponse, KeyPurpose, }, -} = require('@dashevo/dapi-grpc'); - -const { DashPlatformProtocol } = require('@dashevo/wasm-dpp'); - -const getDataContractFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'); -const getIdentityFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture'); +} = dapiGrpc; -const PlatformMethodsFacade = require('../../../../lib/methods/platform/PlatformMethodsFacade'); -const { hexToBytes, bytesToHex } = require('../../../../lib/utils/bytes'); +const { DashPlatformProtocol } = wasmDpp; const { WaitForStateTransitionResultResponseV0 } = WaitForStateTransitionResultResponse; const { GetIdentityResponseV0 } = GetIdentityResponse; diff --git a/packages/js-dapi-client/test/unit/BlockHeadersProvider/BlockHeadersProvider.spec.js b/packages/js-dapi-client/test/unit/BlockHeadersProvider/BlockHeadersProvider.spec.js index 533653210d2..93547c7bc06 100644 --- a/packages/js-dapi-client/test/unit/BlockHeadersProvider/BlockHeadersProvider.spec.js +++ b/packages/js-dapi-client/test/unit/BlockHeadersProvider/BlockHeadersProvider.spec.js @@ -1,11 +1,13 @@ -const EventEmitter = require('events'); -const { expect } = require('chai'); +import EventEmitter from 'events'; +import { expect } from 'chai'; -const { SPVError } = require('@dashevo/dash-spv'); +import dashSpv from '@dashevo/dash-spv'; -const BlockHeadersProvider = require('../../../lib/BlockHeadersProvider/BlockHeadersProvider'); -const BlockHeadersReader = require('../../../lib/BlockHeadersProvider/BlockHeadersReader'); -const getHeadersFixture = require('../../../lib/test/fixtures/getHeadersFixture'); +import BlockHeadersProvider from '../../../lib/BlockHeadersProvider/BlockHeadersProvider.js'; +import BlockHeadersReader from '../../../lib/BlockHeadersProvider/BlockHeadersReader.js'; +import getHeadersFixture from '../../../lib/test/fixtures/getHeadersFixture.js'; + +const { SPVError } = dashSpv; describe('BlockHeadersProvider - unit', () => { let blockHeadersProvider; diff --git a/packages/js-dapi-client/test/unit/BlockHeadersProvider/BlockHeadersReader.spec.js b/packages/js-dapi-client/test/unit/BlockHeadersProvider/BlockHeadersReader.spec.js index dca2784a9c0..bf9d0a594e2 100644 --- a/packages/js-dapi-client/test/unit/BlockHeadersProvider/BlockHeadersReader.spec.js +++ b/packages/js-dapi-client/test/unit/BlockHeadersProvider/BlockHeadersReader.spec.js @@ -1,8 +1,8 @@ -const { expect } = require('chai'); -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); -const BlockHeadersReader = require('../../../lib/BlockHeadersProvider/BlockHeadersReader'); -const getHeadersFixture = require('../../../lib/test/fixtures/getHeadersFixture'); -const BlockHeadersWithChainLocksStreamMock = require('../../../lib/test/mocks/BlockHeadersWithChainLocksStreamMock'); +import { expect } from 'chai'; +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; +import BlockHeadersReader from '../../../lib/BlockHeadersProvider/BlockHeadersReader.js'; +import getHeadersFixture from '../../../lib/test/fixtures/getHeadersFixture.js'; +import BlockHeadersWithChainLocksStreamMock from '../../../lib/test/mocks/BlockHeadersWithChainLocksStreamMock.js'; const sleepOneTick = () => new Promise((resolve) => { if (typeof setImmediate === 'undefined') { diff --git a/packages/js-dapi-client/test/unit/BlockHeadersProvider/createBlockHeadersProviderFromOptions.spec.js b/packages/js-dapi-client/test/unit/BlockHeadersProvider/createBlockHeadersProviderFromOptions.spec.js index 995a965e836..4baa5db1428 100644 --- a/packages/js-dapi-client/test/unit/BlockHeadersProvider/createBlockHeadersProviderFromOptions.spec.js +++ b/packages/js-dapi-client/test/unit/BlockHeadersProvider/createBlockHeadersProviderFromOptions.spec.js @@ -1,5 +1,5 @@ -const BlockHeadersProvider = require('../../../lib/BlockHeadersProvider/BlockHeadersProvider'); -const createBlockHeadersProviderFromOptions = require('../../../lib/BlockHeadersProvider/createBlockHeadersProviderFromOptions'); +import BlockHeadersProvider from '../../../lib/BlockHeadersProvider/BlockHeadersProvider.js'; +import createBlockHeadersProviderFromOptions from '../../../lib/BlockHeadersProvider/createBlockHeadersProviderFromOptions.js'; describe('#createBlockHeadersProviderFromOptions', () => { const coreMethodsMock = {}; diff --git a/packages/js-dapi-client/test/unit/DAPIClient.spec.js b/packages/js-dapi-client/test/unit/DAPIClient.spec.js index cee8f160f5b..ce1a5f34ce2 100644 --- a/packages/js-dapi-client/test/unit/DAPIClient.spec.js +++ b/packages/js-dapi-client/test/unit/DAPIClient.spec.js @@ -1,9 +1,9 @@ -const DAPIClient = require('../../lib/DAPIClient'); -const CoreMethodsFacade = require('../../lib/methods/core/CoreMethodsFacade'); -const PlatformMethodsFacade = require('../../lib/methods/platform/PlatformMethodsFacade'); -const SimplifiedMasternodeListDAPIAddressProvider = require('../../lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider'); -const ListDAPIAddressProvider = require('../../lib/dapiAddressProvider/ListDAPIAddressProvider'); -const BlockHeadersProvider = require('../../lib/BlockHeadersProvider/BlockHeadersProvider'); +import DAPIClient from '../../lib/DAPIClient.js'; +import CoreMethodsFacade from '../../lib/methods/core/CoreMethodsFacade.js'; +import PlatformMethodsFacade from '../../lib/methods/platform/PlatformMethodsFacade.js'; +import SimplifiedMasternodeListDAPIAddressProvider from '../../lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.js'; +import ListDAPIAddressProvider from '../../lib/dapiAddressProvider/ListDAPIAddressProvider.js'; +import BlockHeadersProvider from '../../lib/BlockHeadersProvider/BlockHeadersProvider.js'; describe('DAPIClient', () => { let options; diff --git a/packages/js-dapi-client/test/unit/dapiAddressProvider/DAPIAddress.spec.js b/packages/js-dapi-client/test/unit/dapiAddressProvider/DAPIAddress.spec.js index 2cc07090a2c..314fc57c99c 100644 --- a/packages/js-dapi-client/test/unit/dapiAddressProvider/DAPIAddress.spec.js +++ b/packages/js-dapi-client/test/unit/dapiAddressProvider/DAPIAddress.spec.js @@ -1,7 +1,5 @@ -const DAPIAddress = require('../../../lib/dapiAddressProvider/DAPIAddress'); -const DAPIAddressHostMissingError = require( - '../../../lib/dapiAddressProvider/errors/DAPIAddressHostMissingError', -); +import DAPIAddress from '../../../lib/dapiAddressProvider/DAPIAddress.js'; +import DAPIAddressHostMissingError from '../../../lib/dapiAddressProvider/errors/DAPIAddressHostMissingError.js'; describe('DAPIAddress', () => { let host; diff --git a/packages/js-dapi-client/test/unit/dapiAddressProvider/ListDAPIAddressProvider.spec.js b/packages/js-dapi-client/test/unit/dapiAddressProvider/ListDAPIAddressProvider.spec.js index 8b887a4ad78..6d9ca20b884 100644 --- a/packages/js-dapi-client/test/unit/dapiAddressProvider/ListDAPIAddressProvider.spec.js +++ b/packages/js-dapi-client/test/unit/dapiAddressProvider/ListDAPIAddressProvider.spec.js @@ -1,5 +1,5 @@ -const ListDAPIAddressProvider = require('../../../lib/dapiAddressProvider/ListDAPIAddressProvider'); -const DAPIAddress = require('../../../lib/dapiAddressProvider/DAPIAddress'); +import ListDAPIAddressProvider from '../../../lib/dapiAddressProvider/ListDAPIAddressProvider.js'; +import DAPIAddress from '../../../lib/dapiAddressProvider/DAPIAddress.js'; describe('ListDAPIAddressProvider', () => { let listDAPIAddressProvider; diff --git a/packages/js-dapi-client/test/unit/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.spec.js b/packages/js-dapi-client/test/unit/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.spec.js index f130795e44e..06a72885e42 100644 --- a/packages/js-dapi-client/test/unit/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.spec.js +++ b/packages/js-dapi-client/test/unit/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.spec.js @@ -1,8 +1,8 @@ -const SimplifiedMNListEntry = require('@dashevo/dashcore-lib/lib/deterministicmnlist/SimplifiedMNListEntry'); +import SimplifiedMNListEntry from '@dashevo/dashcore-lib/lib/deterministicmnlist/SimplifiedMNListEntry.js'; -const DAPIAddress = require('../../../lib/dapiAddressProvider/DAPIAddress'); +import DAPIAddress from '../../../lib/dapiAddressProvider/DAPIAddress.js'; -const SimplifiedMasternodeListDAPIAddressProvider = require('../../../lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider'); +import SimplifiedMasternodeListDAPIAddressProvider from '../../../lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.js'; describe('SimplifiedMasternodeListDAPIAddressProvider', () => { let smlDAPIAddressProvider; diff --git a/packages/js-dapi-client/test/unit/dapiAddressProvider/createDAPIAddressProviderFromOptions.spec.js b/packages/js-dapi-client/test/unit/dapiAddressProvider/createDAPIAddressProviderFromOptions.spec.js index 52710eec1bb..b0ed3142259 100644 --- a/packages/js-dapi-client/test/unit/dapiAddressProvider/createDAPIAddressProviderFromOptions.spec.js +++ b/packages/js-dapi-client/test/unit/dapiAddressProvider/createDAPIAddressProviderFromOptions.spec.js @@ -1,12 +1,10 @@ -const createDAPIAddressProviderFromOptions = require( - '../../../lib/dapiAddressProvider/createDAPIAddressProviderFromOptions', -); -const ListDAPIAddressProvider = require('../../../lib/dapiAddressProvider/ListDAPIAddressProvider'); -const SimplifiedMasternodeListDAPIAddressProvider = require('../../../lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider'); +import createDAPIAddressProviderFromOptions from '../../../lib/dapiAddressProvider/createDAPIAddressProviderFromOptions.js'; +import ListDAPIAddressProvider from '../../../lib/dapiAddressProvider/ListDAPIAddressProvider.js'; +import SimplifiedMasternodeListDAPIAddressProvider from '../../../lib/dapiAddressProvider/SimplifiedMasternodeListDAPIAddressProvider.js'; -const networkConfigs = require('../../../lib/networkConfigs'); +import networkConfigs from '../../../lib/networkConfigs.js'; -const DAPIClientError = require('../../../lib/errors/DAPIClientError'); +import DAPIClientError from '../../../lib/errors/DAPIClientError.js'; describe('createDAPIAddressProviderFromOptions', () => { describe('dapiAddressProvider', () => { diff --git a/packages/js-dapi-client/test/unit/methods/core/broadcastTransactionFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/broadcastTransactionFactory.spec.js index d7cba51b8f8..7bd0bb1a32e 100644 --- a/packages/js-dapi-client/test/unit/methods/core/broadcastTransactionFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/broadcastTransactionFactory.spec.js @@ -1,14 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import broadcastTransactionFactory from '../../../../lib/methods/core/broadcastTransactionFactory.js'; + const { v0: { CorePromiseClient, BroadcastTransactionRequest, BroadcastTransactionResponse, }, -} = require('@dashevo/dapi-grpc'); - -const broadcastTransactionFactory = require( - '../../../../lib/methods/core/broadcastTransactionFactory', -); +} = dapiGrpc; describe('broadcastTransactionFactory', () => { let broadcastTransaction; diff --git a/packages/js-dapi-client/test/unit/methods/core/getBestBlockHashFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getBestBlockHashFactory.spec.js index 28a2a20281e..7e416ec8362 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getBestBlockHashFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getBestBlockHashFactory.spec.js @@ -1,4 +1,4 @@ -const getBestBlockHashFactory = require('../../../../lib/methods/core/getBestBlockHashFactory'); +import getBestBlockHashFactory from '../../../../lib/methods/core/getBestBlockHashFactory.js'; describe('getBestBlockHashFactory', () => { let getBestBlockHash; diff --git a/packages/js-dapi-client/test/unit/methods/core/getBlockByHashFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getBlockByHashFactory.spec.js index e16e60130d1..35fe2e9e577 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getBlockByHashFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getBlockByHashFactory.spec.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getBlockByHashFactory from '../../../../lib/methods/core/getBlockByHashFactory.js'; + const { v0: { GetBlockRequest, GetBlockResponse, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); - -const getBlockByHashFactory = require('../../../../lib/methods/core/getBlockByHashFactory'); +} = dapiGrpc; describe('getBlockByHashFactory', () => { let getBlockByHash; diff --git a/packages/js-dapi-client/test/unit/methods/core/getBlockByHeightFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getBlockByHeightFactory.spec.js index 1ea27f50887..4546d609532 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getBlockByHeightFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getBlockByHeightFactory.spec.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getBlockByHeightFactory from '../../../../lib/methods/core/getBlockByHeightFactory.js'; + const { v0: { GetBlockRequest, GetBlockResponse, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); - -const getBlockByHeightFactory = require('../../../../lib/methods/core/getBlockByHeightFactory'); +} = dapiGrpc; describe('getBlockByHeightFactory', () => { let getBlockByHeight; diff --git a/packages/js-dapi-client/test/unit/methods/core/getBlockHashFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getBlockHashFactory.spec.js index 9d14ff6de78..74011973a07 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getBlockHashFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getBlockHashFactory.spec.js @@ -1,4 +1,4 @@ -const getBlockHashFactory = require('../../../../lib/methods/core/getBlockHashFactory'); +import getBlockHashFactory from '../../../../lib/methods/core/getBlockHashFactory.js'; describe('getBlockHashFactory', () => { let getBlockHash; diff --git a/packages/js-dapi-client/test/unit/methods/core/getBlockchainStatusFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getBlockchainStatusFactory.spec.js index f2fca4360d2..52bed5f7aff 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getBlockchainStatusFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getBlockchainStatusFactory.spec.js @@ -1,13 +1,14 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getBlockchainStatusFactory from '../../../../lib/methods/core/getBlockchainStatusFactory.js'; +import { base64ToBytes } from '../../../../lib/utils/bytes.js'; + const { v0: { GetBlockchainStatusRequest, GetBlockchainStatusResponse, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); - -const getBlockchainStatusFactory = require('../../../../lib/methods/core/getBlockchainStatusFactory'); -const { base64ToBytes } = require('../../../../lib/utils/bytes'); +} = dapiGrpc; describe('getBlockchainStatusFactory', () => { let getBlockchainStatus; diff --git a/packages/js-dapi-client/test/unit/methods/core/getMasternodeStatusFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getMasternodeStatusFactory.spec.js index 2a74dac3ba7..594e9aff501 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getMasternodeStatusFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getMasternodeStatusFactory.spec.js @@ -1,12 +1,13 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getMasternodeStatusFactory from '../../../../lib/methods/core/getMasternodeStatusFactory.js'; + const { v0: { GetMasternodeStatusRequest, GetMasternodeStatusResponse, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); - -const getMasternodeStatusFactory = require('../../../../lib/methods/core/getMasternodeStatusFactory'); +} = dapiGrpc; describe('getMasternodeStatusFactory', () => { let getMasternodeStatus; diff --git a/packages/js-dapi-client/test/unit/methods/core/getTransaction/GetTransactionResponse.spec.js b/packages/js-dapi-client/test/unit/methods/core/getTransaction/GetTransactionResponse.spec.js index 6185d629db1..8ddab2c8679 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getTransaction/GetTransactionResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getTransaction/GetTransactionResponse.spec.js @@ -1,10 +1,12 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetTransactionResponse from '../../../../../lib/methods/core/getTransaction/GetTransactionResponse.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; + const { v0: { GetTransactionResponse: ProtoGetTransactionResponse, }, -} = require('@dashevo/dapi-grpc'); -const GetTransactionResponse = require('../../../../../lib/methods/core/getTransaction/GetTransactionResponse'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); +} = dapiGrpc; describe('GetTransactionResponse', () => { let getTransactionResponse; diff --git a/packages/js-dapi-client/test/unit/methods/core/getTransaction/getTransactionFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/getTransaction/getTransactionFactory.spec.js index b7c9895e9b2..7d4b399decd 100644 --- a/packages/js-dapi-client/test/unit/methods/core/getTransaction/getTransactionFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/getTransaction/getTransactionFactory.spec.js @@ -1,13 +1,14 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getTransactionFactory from '../../../../../lib/methods/core/getTransaction/getTransactionFactory.js'; +import GetTransactionResponse from '../../../../../lib/methods/core/getTransaction/GetTransactionResponse.js'; + const { v0: { GetTransactionRequest, GetTransactionResponse: ProtoGetTransactionResponse, CorePromiseClient, }, -} = require('@dashevo/dapi-grpc'); - -const getTransactionFactory = require('../../../../../lib/methods/core/getTransaction/getTransactionFactory'); -const GetTransactionResponse = require('../../../../../lib/methods/core/getTransaction/GetTransactionResponse'); +} = dapiGrpc; describe('getTransactionFactory', () => { let getTransaction; diff --git a/packages/js-dapi-client/test/unit/methods/core/subscribeToBlockHeadersWithChainLocksFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/subscribeToBlockHeadersWithChainLocksFactory.spec.js index 6132eccb95f..59f4164f198 100644 --- a/packages/js-dapi-client/test/unit/methods/core/subscribeToBlockHeadersWithChainLocksFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/subscribeToBlockHeadersWithChainLocksFactory.spec.js @@ -1,15 +1,15 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import EventEmitter from 'events'; +import subscribeToBlockHeadersWithChainLocksFactory from '../../../../lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory.js'; +import DAPIClientError from '../../../../lib/errors/DAPIClientError.js'; +import { hexToBytes } from '../../../../lib/utils/bytes.js'; + const { v0: { CorePromiseClient, BlockHeadersWithChainLocksRequest, }, -} = require('@dashevo/dapi-grpc'); -const { EventEmitter } = require('events'); - -const subscribeToBlockHeadersWithChainLocksFactory = require('../../../../lib/methods/core/subscribeToBlockHeadersWithChainLocksFactory'); - -const DAPIClientError = require('../../../../lib/errors/DAPIClientError'); -const { hexToBytes } = require('../../../../lib/utils/bytes'); +} = dapiGrpc; describe('subscribeToBlockHeadersWithChainLocks', () => { let subscribeToBlockHeadersWithChainLocks; diff --git a/packages/js-dapi-client/test/unit/methods/core/subscribeToTransactionsWithProofsFactory.spec.js b/packages/js-dapi-client/test/unit/methods/core/subscribeToTransactionsWithProofsFactory.spec.js index f77c6d3c658..18ba865c88f 100644 --- a/packages/js-dapi-client/test/unit/methods/core/subscribeToTransactionsWithProofsFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/core/subscribeToTransactionsWithProofsFactory.spec.js @@ -1,4 +1,9 @@ -const BloomFilter = require('@dashevo/dashcore-lib/lib/bloomfilter'); +import BloomFilter from '@dashevo/dashcore-lib/lib/bloomfilter.js'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import EventEmitter from 'events'; +import subscribeToTransactionsWithProofsFactory from '../../../../lib/methods/core/subscribeToTransactionsWithProofsFactory.js'; +import DAPIClientError from '../../../../lib/errors/DAPIClientError.js'; +import { hexToBytes } from '../../../../lib/utils/bytes.js'; const { v0: { @@ -6,14 +11,7 @@ const { CorePromiseClient, TransactionsWithProofsRequest, }, -} = require('@dashevo/dapi-grpc'); - -const { EventEmitter } = require('events'); - -const subscribeToTransactionsWithProofsFactory = require('../../../../lib/methods/core/subscribeToTransactionsWithProofsFactory'); - -const DAPIClientError = require('../../../../lib/errors/DAPIClientError'); -const { hexToBytes } = require('../../../../lib/utils/bytes'); +} = dapiGrpc; describe('subscribeToTransactionsWithProofsFactory', () => { let subscribeToTransactionsWithProofs; diff --git a/packages/js-dapi-client/test/unit/methods/platform/broadcaseStateTransition/broadcastStateTransitionFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/broadcaseStateTransition/broadcastStateTransitionFactory.spec.js index f95878fb668..2f5ce704efd 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/broadcaseStateTransition/broadcastStateTransitionFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/broadcaseStateTransition/broadcastStateTransitionFactory.spec.js @@ -1,16 +1,17 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import wasmDpp from '@dashevo/wasm-dpp'; +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; +import broadcastStateTransitionFactory from '../../../../../lib/methods/platform/broadcastStateTransition/broadcastStateTransitionFactory.js'; +import BroadcastStateTransitionResponse from '../../../../../lib/methods/platform/broadcastStateTransition/BroadcastStateTransitionResponse.js'; + const { v0: { BroadcastStateTransitionRequest, PlatformPromiseClient, }, -} = require('@dashevo/dapi-grpc'); - -const { DashPlatformProtocol } = require('@dashevo/wasm-dpp'); - -const getDataContractFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'); +} = dapiGrpc; -const broadcastStateTransitionFactory = require('../../../../../lib/methods/platform/broadcastStateTransition/broadcastStateTransitionFactory'); -const BroadcastStateTransitionResponse = require('../../../../../lib/methods/platform/broadcastStateTransition/BroadcastStateTransitionResponse'); +const { DashPlatformProtocol } = wasmDpp; describe('broadcastStateTransitionFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/ConsensusParamsBlock.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/ConsensusParamsBlock.spec.js index 245c0bceaac..ce73bb5f12c 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/ConsensusParamsBlock.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/ConsensusParamsBlock.spec.js @@ -1,4 +1,4 @@ -const ConsensusParamsBlock = require('../../../../../lib/methods/platform/getConsensusParams/ConsensusParamsBlock'); +import ConsensusParamsBlock from '../../../../../lib/methods/platform/getConsensusParams/ConsensusParamsBlock.js'; describe('ConsensusParamsBlock', () => { let consensusParamsBlock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/ConsensusParamsEvidence.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/ConsensusParamsEvidence.spec.js index 70c6074dc4c..d2411b1845f 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/ConsensusParamsEvidence.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/ConsensusParamsEvidence.spec.js @@ -1,4 +1,4 @@ -const ConsensusParamsEvidence = require('../../../../../lib/methods/platform/getConsensusParams/ConsensusParamsEvidence'); +import ConsensusParamsEvidence from '../../../../../lib/methods/platform/getConsensusParams/ConsensusParamsEvidence.js'; describe('ConsensusParamsEvidence', () => { let consensusParamsEvidence; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/getConsensusParamsFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/getConsensusParamsFactory.spec.js index 77ab7d32b4b..7ac775eb8e3 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/getConsensusParamsFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/getConsensusParamsFactory.spec.js @@ -1,12 +1,14 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getConsensusParamsFactory from '../../../../../lib/methods/platform/getConsensusParams/getConsensusParamsFactory.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; + const { v0: { PlatformPromiseClient, GetConsensusParamsResponse, GetConsensusParamsRequest, }, -} = require('@dashevo/dapi-grpc'); -const getConsensusParamsFactory = require('../../../../../lib/methods/platform/getConsensusParams/getConsensusParamsFactory'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); +} = dapiGrpc; const { GetConsensusParamsRequestV0, diff --git a/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/getConsensusParamsResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/getConsensusParamsResponse.spec.js index 4a0a8083111..abe00f808f4 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/getConsensusParamsResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getConsensusParams/getConsensusParamsResponse.spec.js @@ -1,12 +1,14 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetConsensusParamsResponse from '../../../../../lib/methods/platform/getConsensusParams/getConsensusParamsResponse.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import ConsensusParamsBlock from '../../../../../lib/methods/platform/getConsensusParams/ConsensusParamsBlock.js'; +import ConsensusParamsEvidence from '../../../../../lib/methods/platform/getConsensusParams/ConsensusParamsEvidence.js'; + const { v0: { GetConsensusParamsResponse: GetConsensusParamsResponseProto, }, -} = require('@dashevo/dapi-grpc'); -const GetConsensusParamsResponse = require('../../../../../lib/methods/platform/getConsensusParams/getConsensusParamsResponse'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const ConsensusParamsBlock = require('../../../../../lib/methods/platform/getConsensusParams/ConsensusParamsBlock'); -const ConsensusParamsEvidence = require('../../../../../lib/methods/platform/getConsensusParams/ConsensusParamsEvidence'); +} = dapiGrpc; const { ConsensusParamsBlock: ConsensusParamsBlockProto, diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/GetDataContractResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/GetDataContractResponse.spec.js index 2249c9e7dd9..8c4fdbe0c38 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/GetDataContractResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/GetDataContractResponse.spec.js @@ -1,18 +1,19 @@ -const getDataContractFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'); +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetDataContractResponseClass from '../../../../../lib/methods/platform/getDataContract/GetDataContractResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetDataContractResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetDataContractResponseClass = require('../../../../../lib/methods/platform/getDataContract/GetDataContractResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetDataContractResponse', () => { let getDataContractResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js index 1d594c9cc16..95ccb8f9c23 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDataContract/getDataContractFactory.spec.js @@ -1,3 +1,10 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; +import getDataContractFactory from '../../../../../lib/methods/platform/getDataContract/getDataContractFactory.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import ProofClass from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -6,14 +13,7 @@ const { ResponseMetadata, Proof, }, -} = require('@dashevo/dapi-grpc'); - -const getDataContractFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'); - -const getDataContractFactory = require('../../../../../lib/methods/platform/getDataContract/getDataContractFactory'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const ProofClass = require('../../../../../lib/methods/platform/response/Proof'); +} = dapiGrpc; describe('getDataContractFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.spec.js index 90da73d3739..406eb2a3677 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.spec.js @@ -1,18 +1,19 @@ -const getDataContractFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'); +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetDataContractHistoryResponseClass from '../../../../../lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetDataContractHistoryResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetDataContractHistoryResponseClass = require('../../../../../lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetDataContractHistoryResponse', () => { let getDataContractHistoryResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js index 1a9c929614b..1f5e00eeea5 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDataContractHistory/getDataContractHistoryFactory.spec.js @@ -1,4 +1,12 @@ -const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb'); +import wrappersPb from 'google-protobuf/google/protobuf/wrappers_pb.js'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; +import getDataContractHistoryFactory from '../../../../../lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import ProofClass from '../../../../../lib/methods/platform/response/Proof.js'; + +const { UInt32Value } = wrappersPb; const { v0: { @@ -8,25 +16,16 @@ const { ResponseMetadata, Proof, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; const { - v0: { - GetDataContractHistoryResponse: { - GetDataContractHistoryResponseV0: { - DataContractHistory, - DataContractHistoryEntry, - }, + GetDataContractHistoryResponse: { + GetDataContractHistoryResponseV0: { + DataContractHistory, + DataContractHistoryEntry, }, }, -} = require('@dashevo/dapi-grpc'); - -const getDataContractFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'); - -const getDataContractHistoryFactory = require('../../../../../lib/methods/platform/getDataContractHistory/getDataContractHistoryFactory'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const ProofClass = require('../../../../../lib/methods/platform/response/Proof'); +} = dapiGrpc.v0; describe('getDataContractHistoryFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js index afa2b6e92f9..7ab0a121f60 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDocuments/GetDocumentsResponse.spec.js @@ -1,18 +1,19 @@ -const getDocumentsFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDocumentsFixture'); +import getDocumentsFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDocumentsFixture.js'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetDocumentsResponseClass from '../../../../../lib/methods/platform/getDocuments/GetDocumentsResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetDocumentsResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetDocumentsResponseClass = require('../../../../../lib/methods/platform/getDocuments/GetDocumentsResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetDocumentsResponse', () => { let getDocumentsResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/getDocumentsFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getDocuments/getDocumentsFactory.spec.js index 1486f0080b9..f2e2a87afda 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getDocuments/getDocumentsFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getDocuments/getDocumentsFactory.spec.js @@ -1,5 +1,15 @@ -const cbor = require('cbor'); -const { Identifier } = require('@dashevo/wasm-dpp'); +import cbor from 'cbor'; +import wasmDpp from '@dashevo/wasm-dpp'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import getDocumentsFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDocumentsFixture.js'; +import generateRandomIdentifier from '@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync.js'; +import getDocumentsFactory from '../../../../../lib/methods/platform/getDocuments/getDocumentsFactory.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import { hexToBytes } from '../../../../../lib/utils/bytes.js'; + +const { Identifier } = wasmDpp; const { v0: { @@ -9,15 +19,7 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const getDocumentsFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDocumentsFixture'); - -const generateRandomIdentifier = require('@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync'); -const getDocumentsFactory = require('../../../../../lib/methods/platform/getDocuments/getDocumentsFactory'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); +} = dapiGrpc; describe('getDocumentsFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getEpochsInfo/GetEpochsInfoResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getEpochsInfo/GetEpochsInfoResponse.spec.js index bb0c1e44b1f..cfd7d10745d 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getEpochsInfo/GetEpochsInfoResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getEpochsInfo/GetEpochsInfoResponse.spec.js @@ -1,18 +1,19 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetEpochsInfoResponseClass from '../../../../../lib/methods/platform/getEpochsInfo/GetEpochsInfoResponse.js'; +import EpochInfoClass from '../../../../../lib/methods/platform/getEpochsInfo/EpochInfo.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetEpochsInfoResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetEpochsInfoResponseClass = require('../../../../../lib/methods/platform/getEpochsInfo/GetEpochsInfoResponse'); -const EpochInfoClass = require('../../../../../lib/methods/platform/getEpochsInfo/EpochInfo'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetEpochsInfoResponse', () => { let getEpochsInfoResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getEpochsInfo/getEpochsInfoFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getEpochsInfo/getEpochsInfoFactory.spec.js index 6e099599fa3..bbfaa0517d8 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getEpochsInfo/getEpochsInfoFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getEpochsInfo/getEpochsInfoFactory.spec.js @@ -1,3 +1,11 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import wrappersPb from 'google-protobuf/google/protobuf/wrappers_pb.js'; +import getEpochsInfoFactory from '../../../../../lib/methods/platform/getEpochsInfo/getEpochsInfoFactory.js'; +import EpochInfo from '../../../../../lib/methods/platform/getEpochsInfo/EpochInfo.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -6,15 +14,9 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb'); +} = dapiGrpc; -const getEpochsInfoFactory = require('../../../../../lib/methods/platform/getEpochsInfo/getEpochsInfoFactory'); -const EpochInfo = require('../../../../../lib/methods/platform/getEpochsInfo/EpochInfo'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); +const { UInt32Value } = wrappersPb; describe('getEpochsInfoFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.spec.js index d785f8585a8..eb98d664a6e 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.spec.js @@ -1,5 +1,13 @@ -const generateRandomIdentifier = require('@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync'); -const getIdentityFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture'); +import generateRandomIdentifier from '@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync.js'; +import getIdentityFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture.js'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentitiesContractKeysResponseClass from '../../../../../lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetIdentitiesContractKeysResponse, @@ -7,14 +15,7 @@ const { KeyPurpose, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentitiesContractKeysResponseClass = require('../../../../../lib/methods/platform/getIdentitiesContractKeys/GetIdentitiesContractKeysResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetIdentitiesContractKeysResponse', () => { let getIdentitiesContractKeysResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js index aab20ef5fe3..cbc35e192a2 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.spec.js @@ -1,3 +1,11 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import generateRandomIdentifier from '@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync.js'; +import getIdentityFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import getIdentitiesContractKeysFactory from '../../../../../lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -7,17 +15,7 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); -const generateRandomIdentifier = require('@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync'); - -const getIdentityFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); - -const getIdentitiesContractKeysFactory = require( - '../../../../../lib/methods/platform/getIdentitiesContractKeys/getIdentitiesContractKeysFactory', -); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); +} = dapiGrpc; describe('getIdentitiesContractKeysFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/GetIdentityResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/GetIdentityResponse.spec.js index 8ed386e2a6d..a340631d8f7 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/GetIdentityResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/GetIdentityResponse.spec.js @@ -1,18 +1,19 @@ -const getIdentityFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture'); +import getIdentityFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture.js'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityResponseClass from '../../../../../lib/methods/platform/getIdentity/GetIdentityResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetIdentityResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityResponseClass = require('../../../../../lib/methods/platform/getIdentity/GetIdentityResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetIdentityResponse', () => { let getIdentityResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js index 96fe5123a08..4b7542dc5d2 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentity/getIdentityFactory.spec.js @@ -1,3 +1,10 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getIdentityFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture.js'; +import getIdentityFactory from '../../../../../lib/methods/platform/getIdentity/getIdentityFactory.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -6,14 +13,7 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const getIdentityFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture'); - -const getIdentityFactory = require('../../../../../lib/methods/platform/getIdentity/getIdentityFactory'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); +} = dapiGrpc; describe('getIdentityFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/GetIdentityBalanceResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/GetIdentityBalanceResponse.spec.js index 51d5d1ccce3..acff90b7138 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/GetIdentityBalanceResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/GetIdentityBalanceResponse.spec.js @@ -1,17 +1,18 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityBalanceResponseClass from '../../../../../lib/methods/platform/getIdentityBalance/GetIdentityBalanceResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetIdentityBalanceResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityBalanceResponseClass = require('../../../../../lib/methods/platform/getIdentityBalance/GetIdentityBalanceResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetIdentityBalanceResponse', () => { let getIdentityBalanceResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/getIdentityBalanceFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/getIdentityBalanceFactory.spec.js index c8c47a47891..ef6b724c524 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/getIdentityBalanceFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityBalance/getIdentityBalanceFactory.spec.js @@ -1,3 +1,9 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getIdentityBalanceFactory from '../../../../../lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -6,15 +12,10 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); +} = dapiGrpc; const { GetIdentityBalanceResponseV0 } = GetIdentityBalanceResponse; -const getIdentityBalanceFactory = require('../../../../../lib/methods/platform/getIdentityBalance/getIdentityBalanceFactory'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); - describe('getIdentityBalanceFactory', () => { let grpcTransportMock; let getIdentityBalance; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.spec.js index 8b87598ab59..63aee92fc83 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.spec.js @@ -1,18 +1,19 @@ -const getIdentityFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture'); +import getIdentityFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture.js'; +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityByPublicKeyHashResponseClass from '../../../../../lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetIdentityByPublicKeyHashResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityByPublicKeyHashResponseClass = require('../../../../../lib/methods/platform/getIdentityByPublicKeyHash/GetIdentityByPublicKeyHashResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetIdentityByPublicKeyHashResponse', () => { let getIdentityResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.spec.js index f38147513b6..08c80e80493 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.spec.js @@ -1,3 +1,10 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getIdentityFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import getIdentityByPublicKeyHashFactory from '../../../../../lib/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -6,16 +13,7 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const getIdentityFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); - -const getIdentityByPublicKeyHashFactory = require( - '../../../../../lib/methods/platform/getIdentityByPublicKeyHash/getIdentityByPublicKeyHashFactory', -); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); +} = dapiGrpc; describe('getIdentityByPublicKeyHashFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js index 369487a5a94..c6b7cf91222 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/GetIdentityContractNonce.spec.js @@ -1,17 +1,18 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityContractNonceResponseClass from '../../../../../lib/methods/platform/getIdentityContractNonce/GetIdentityContractNonceResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetIdentityContractNonceResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityContractNonceResponseClass = require('../../../../../lib/methods/platform/getIdentityContractNonce/GetIdentityContractNonceResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetIdentityContractNonceResponse', () => { let getIdentityContractNonceResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.spec.js index f5a82d8def7..743b6b12216 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.spec.js @@ -1,3 +1,9 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getIdentityContractNonceFactory from '../../../../../lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -6,12 +12,7 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const getIdentityContractNonceFactory = require('../../../../../lib/methods/platform/getIdentityContractNonce/getIdentityContractNonceFactory'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); +} = dapiGrpc; describe('getIdentityContractNonceFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js index 00f75ed10e1..bdd5c927136 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/GetIdentityKeys.spec.js @@ -1,17 +1,18 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityKeysResponseClass from '../../../../../lib/methods/platform/getIdentityKeys/GetIdentityKeysResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetIdentityKeysResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityKeysResponseClass = require('../../../../../lib/methods/platform/getIdentityKeys/GetIdentityKeysResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetIdentityKeysResponse', () => { let getIdentityKeysResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/getIdentityKeysFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/getIdentityKeysFactory.spec.js index d56fcf3b965..38899e14998 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/getIdentityKeysFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/getIdentityKeysFactory.spec.js @@ -1,3 +1,10 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import wrappersPb from 'google-protobuf/google/protobuf/wrappers_pb.js'; +import getIdentityKeysFactory from '../../../../../lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -9,17 +16,13 @@ const { SpecificKeys, AllKeys, }, -} = require('@dashevo/dapi-grpc'); -const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb'); +} = dapiGrpc; + +const { UInt32Value } = wrappersPb; const { GetIdentityKeysResponseV0 } = GetIdentityKeysResponse; const { Keys } = GetIdentityKeysResponseV0; -const getIdentityKeysFactory = require('../../../../../lib/methods/platform/getIdentityKeys/getIdentityKeysFactory'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); - describe('getIdentityKeysFactory', () => { let grpcTransportMock; let getIdentityKeys; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js index af22d131912..f83f0e8ff34 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/GetIdentityNonce.spec.js @@ -1,17 +1,18 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import GetIdentityNonceResponseClass from '../../../../../lib/methods/platform/getIdentityNonce/GetIdentityNonceResponse.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetIdentityNonceResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetIdentityNonceResponseClass = require('../../../../../lib/methods/platform/getIdentityNonce/GetIdentityNonceResponse'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetIdentityNonceResponse', () => { let getIdentityNonceResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/getIdentityNonceFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/getIdentityNonceFactory.spec.js index 80237eb057e..aeb7535e5b2 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/getIdentityNonceFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getIdentityNonce/getIdentityNonceFactory.spec.js @@ -1,3 +1,9 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import getIdentityNonceFactory from '../../../../../lib/methods/platform/getIdentityNonce/getIdentityNonceFactory.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -6,12 +12,7 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const getIdentityNonceFactory = require('../../../../../lib/methods/platform/getIdentityNonce/getIdentityNonceFactory'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); +} = dapiGrpc; describe('getIdentityNonceFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse.spec.js index e837ff1d0b8..369973f335e 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse.spec.js @@ -1,18 +1,20 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import GetProtocolVersionUpgradeStateResponseClass from '../../../../../lib/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse.js'; +import VersionEntryClass from '../../../../../lib/methods/platform/getProtocolVersionUpgradeState/VersionEntry.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; + const { v0: { GetProtocolVersionUpgradeStateResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetProtocolVersionUpgradeStateResponseClass = require('../../../../../lib/methods/platform/getProtocolVersionUpgradeState/GetProtocolVersionUpgradeStateResponse'); -const VersionEntryClass = require('../../../../../lib/methods/platform/getProtocolVersionUpgradeState/VersionEntry'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); +} = dapiGrpc; describe('GetProtocolVersionUpgradeStateResponse', () => { let getProtocolVersionUpgradeState; @@ -122,9 +124,9 @@ describe('GetProtocolVersionUpgradeStateResponse', () => { const proof = getProtocolVersionUpgradeState.getProof(); expect(proof).to.be.an.instanceOf(Proof); - expect(proof.getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); - expect(proof.getQuorumHash()).to.deep.equal(proofFixture.quorumHash); - expect(proof.getSignature()).to.deep.equal(proofFixture.signature); + expect(proof.getGrovedbProof()).to.deep.equal(new Uint8Array(proofFixture.merkleProof)); + expect(proof.getQuorumHash()).to.deep.equal(new Uint8Array(proofFixture.quorumHash)); + expect(proof.getSignature()).to.deep.equal(new Uint8Array(proofFixture.signature)); expect(proof.getRound()).to.deep.equal(proofFixture.round); }); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.spec.js index 06760cff863..4d1c1471cca 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.spec.js @@ -1,3 +1,11 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import getProtocolVersionUpgradeStateFactory from '../../../../../lib/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory.js'; +import VersionEntry from '../../../../../lib/methods/platform/getProtocolVersionUpgradeState/VersionEntry.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; + const { v0: { PlatformPromiseClient, @@ -6,13 +14,7 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const getProtocolVersionUpgradeStateFactory = require('../../../../../lib/methods/platform/getProtocolVersionUpgradeState/getProtocolVersionUpgradeStateFactory'); -const VersionEntry = require('../../../../../lib/methods/platform/getProtocolVersionUpgradeState/VersionEntry'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); +} = dapiGrpc; describe('getProtocolVersionUpgradeStateFactory', () => { let grpcTransportMock; @@ -134,9 +136,9 @@ describe('getProtocolVersionUpgradeStateFactory', () => { .to.deep.equal(metadataFixture.protocolVersion); expect(result.getProof()).to.be.an.instanceOf(Proof); - expect(result.getProof().getGrovedbProof()).to.deep.equal(proofFixture.merkleProof); - expect(result.getProof().getQuorumHash()).to.deep.equal(proofFixture.quorumHash); - expect(result.getProof().getSignature()).to.deep.equal(proofFixture.signature); + expect(result.getProof().getGrovedbProof()).to.deep.equal(new Uint8Array(proofFixture.merkleProof)); + expect(result.getProof().getQuorumHash()).to.deep.equal(new Uint8Array(proofFixture.quorumHash)); + expect(result.getProof().getSignature()).to.deep.equal(new Uint8Array(proofFixture.signature)); expect(result.getProof().getRound()).to.deep.equal(proofFixture.round); }); diff --git a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.spec.js index 8ce67768cf7..cdb3e38c81b 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.spec.js @@ -1,19 +1,21 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import GetProtocolVersionUpgradeVoteStatusResponseClass from '../../../../../lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse.js'; +import VersionSignalClass from '../../../../../lib/methods/platform/getProtocolVersionUpgradeVoteStatus/VersionSignal.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import InvalidResponseError from '../../../../../lib/methods/platform/response/errors/InvalidResponseError.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import Metadata from '../../../../../lib/methods/platform/response/Metadata.js'; +import { bytesToHex, hexToBytes } from '../../../../../lib/utils/bytes.js'; + const { v0: { GetProtocolVersionUpgradeVoteStatusResponse, ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetProtocolVersionUpgradeVoteStatusResponseClass = require('../../../../../lib/methods/platform/getProtocolVersionUpgradeVoteStatus/GetProtocolVersionUpgradeVoteStatusResponse'); -const VersionSignalClass = require('../../../../../lib/methods/platform/getProtocolVersionUpgradeVoteStatus/VersionSignal'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const InvalidResponseError = require('../../../../../lib/methods/platform/response/errors/InvalidResponseError'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const Metadata = require('../../../../../lib/methods/platform/response/Metadata'); -const { bytesToHex, hexToBytes } = require('../../../../../lib/utils/bytes'); +} = dapiGrpc; describe('GetProtocolVersionUpgradeVoteStatusResponse', () => { let getProtocolVersionUpgradeVoteStatus; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.spec.js index c241a9871ec..779cab9b3a8 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.spec.js @@ -1,3 +1,12 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import getProtocolVersionUpgradeVoteStatusFactory from '../../../../../lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory.js'; +import VersionSignal from '../../../../../lib/methods/platform/getProtocolVersionUpgradeVoteStatus/VersionSignal.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; +import getProofFixture from '../../../../../lib/test/fixtures/getProofFixture.js'; +import Proof from '../../../../../lib/methods/platform/response/Proof.js'; +import { bytesToHex, hexToBytes } from '../../../../../lib/utils/bytes.js'; + const { v0: { PlatformPromiseClient, @@ -6,14 +15,7 @@ const { ResponseMetadata, Proof: ProofResponse, }, -} = require('@dashevo/dapi-grpc'); - -const getProtocolVersionUpgradeVoteStatusFactory = require('../../../../../lib/methods/platform/getProtocolVersionUpgradeVoteStatus/getProtocolVersionUpgradeVoteStatusFactory'); -const VersionSignal = require('../../../../../lib/methods/platform/getProtocolVersionUpgradeVoteStatus/VersionSignal'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); -const getProofFixture = require('../../../../../lib/test/fixtures/getProofFixture'); -const Proof = require('../../../../../lib/methods/platform/response/Proof'); -const { bytesToHex, hexToBytes } = require('../../../../../lib/utils/bytes'); +} = dapiGrpc; describe('getProtocolVersionUpgradeVoteStatusFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getStatus/GetStatusResponse.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getStatus/GetStatusResponse.spec.js index cb441388460..9b576c9d895 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getStatus/GetStatusResponse.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getStatus/GetStatusResponse.spec.js @@ -1,18 +1,20 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import GetStatusResponseClass from '../../../../../lib/methods/platform/getStatus/GetStatusResponse.js'; +import getStatusFixture from '../../../../../lib/test/fixtures/getStatusFixture.js'; +import VersionStatus from '../../../../../lib/methods/platform/getStatus/VersionStatus.js'; +import NodeStatus from '../../../../../lib/methods/platform/getStatus/NodeStatus.js'; +import ChainStatus from '../../../../../lib/methods/platform/getStatus/ChainStatus.js'; +import NetworkStatus from '../../../../../lib/methods/platform/getStatus/NetworkStatus.js'; +import StateSyncStatus from '../../../../../lib/methods/platform/getStatus/StateSyncStatus.js'; +import TimeStatus from '../../../../../lib/methods/platform/getStatus/TimeStatus.js'; +import { bytesToHex } from '../../../../../lib/utils/bytes.js'; + const { v0: { GetStatusResponse, }, -} = require('@dashevo/dapi-grpc'); - -const GetStatusResponseClass = require('../../../../../lib/methods/platform/getStatus/GetStatusResponse'); -const getStatusFixture = require('../../../../../lib/test/fixtures/getStatusFixture'); -const VersionStatus = require('../../../../../lib/methods/platform/getStatus/VersionStatus'); -const NodeStatus = require('../../../../../lib/methods/platform/getStatus/NodeStatus'); -const ChainStatus = require('../../../../../lib/methods/platform/getStatus/ChainStatus'); -const NetworkStatus = require('../../../../../lib/methods/platform/getStatus/NetworkStatus'); -const StateSyncStatus = require('../../../../../lib/methods/platform/getStatus/StateSyncStatus'); -const TimeStatus = require('../../../../../lib/methods/platform/getStatus/TimeStatus'); -const { bytesToHex } = require('../../../../../lib/utils/bytes'); +} = dapiGrpc; describe('GetStatusResponse', () => { let getStatusResponse; diff --git a/packages/js-dapi-client/test/unit/methods/platform/getStatus/getStatusFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/getStatus/getStatusFactory.spec.js index 63f69347b04..20d718fb2dd 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/getStatus/getStatusFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/getStatus/getStatusFactory.spec.js @@ -1,20 +1,22 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; + +import getStatusFixture from '../../../../../lib/test/fixtures/getStatusFixture.js'; +import getStatusFactory from '../../../../../lib/methods/platform/getStatus/getStatusFactory.js'; +import VersionStatus from '../../../../../lib/methods/platform/getStatus/VersionStatus.js'; +import NodeStatus from '../../../../../lib/methods/platform/getStatus/NodeStatus.js'; +import ChainStatus from '../../../../../lib/methods/platform/getStatus/ChainStatus.js'; +import NetworkStatus from '../../../../../lib/methods/platform/getStatus/NetworkStatus.js'; +import StateSyncStatus from '../../../../../lib/methods/platform/getStatus/StateSyncStatus.js'; +import TimeStatus from '../../../../../lib/methods/platform/getStatus/TimeStatus.js'; +import { bytesToHex } from '../../../../../lib/utils/bytes.js'; + const { v0: { PlatformPromiseClient, GetStatusRequest, GetStatusResponse, }, -} = require('@dashevo/dapi-grpc'); - -const getStatusFixture = require('../../../../../lib/test/fixtures/getStatusFixture'); -const getStatusFactory = require('../../../../../lib/methods/platform/getStatus/getStatusFactory'); -const VersionStatus = require('../../../../../lib/methods/platform/getStatus/VersionStatus'); -const NodeStatus = require('../../../../../lib/methods/platform/getStatus/NodeStatus'); -const ChainStatus = require('../../../../../lib/methods/platform/getStatus/ChainStatus'); -const NetworkStatus = require('../../../../../lib/methods/platform/getStatus/NetworkStatus'); -const StateSyncStatus = require('../../../../../lib/methods/platform/getStatus/StateSyncStatus'); -const TimeStatus = require('../../../../../lib/methods/platform/getStatus/TimeStatus'); -const { bytesToHex } = require('../../../../../lib/utils/bytes'); +} = dapiGrpc; describe('getStatusFactory', () => { let grpcTransportMock; diff --git a/packages/js-dapi-client/test/unit/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.spec.js b/packages/js-dapi-client/test/unit/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.spec.js index fc9a3c3e012..7d0efa2bb3b 100644 --- a/packages/js-dapi-client/test/unit/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.spec.js +++ b/packages/js-dapi-client/test/unit/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.spec.js @@ -1,3 +1,9 @@ +import dapiGrpc from '@dashevo/dapi-grpc'; +import cbor from 'cbor'; + +import waitForStateTransitionResultFactory from '../../../../../lib/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory.js'; +import getMetadataFixture from '../../../../../lib/test/fixtures/getMetadataFixture.js'; + const { v0: { PlatformPromiseClient, @@ -7,11 +13,7 @@ const { Proof, ResponseMetadata, }, -} = require('@dashevo/dapi-grpc'); -const cbor = require('cbor'); - -const waitForStateTransitionResultFactory = require('../../../../../lib/methods/platform/waitForStateTransitionResult/waitForStateTransitionResultFactory'); -const getMetadataFixture = require('../../../../../lib/test/fixtures/getMetadataFixture'); +} = dapiGrpc; const encoder = new TextEncoder(); diff --git a/packages/js-dapi-client/test/unit/transport/GrpcTransport/GrpcTransport.spec.js b/packages/js-dapi-client/test/unit/transport/GrpcTransport/GrpcTransport.spec.js index 53e55f4911e..bc69e36af41 100644 --- a/packages/js-dapi-client/test/unit/transport/GrpcTransport/GrpcTransport.spec.js +++ b/packages/js-dapi-client/test/unit/transport/GrpcTransport/GrpcTransport.spec.js @@ -1,15 +1,15 @@ -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); - -const GrpcError = require('@dashevo/grpc-common/lib/server/error/GrpcError'); -const GrpcTransport = require('../../../../lib/transport/GrpcTransport/GrpcTransport'); -const DAPIAddress = require('../../../../lib/dapiAddressProvider/DAPIAddress'); - -const MaxRetriesReachedError = require('../../../../lib/transport/errors/response/MaxRetriesReachedError'); -const NoAvailableAddressesForRetryError = require('../../../../lib/transport/errors/response/NoAvailableAddressesForRetryError'); -const NoAvailableAddressesError = require('../../../../lib/transport/errors/NoAvailableAddressesError'); -const ResponseError = require('../../../../lib/transport/errors/response/ResponseError'); -const TimeoutError = require('../../../../lib/transport/GrpcTransport/errors/TimeoutError'); -const RetriableResponseError = require('../../../../lib/transport/errors/response/RetriableResponseError'); +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; + +import GrpcError from '@dashevo/grpc-common/lib/server/error/GrpcError.js'; +import GrpcTransport from '../../../../lib/transport/GrpcTransport/GrpcTransport.js'; +import DAPIAddress from '../../../../lib/dapiAddressProvider/DAPIAddress.js'; + +import MaxRetriesReachedError from '../../../../lib/transport/errors/response/MaxRetriesReachedError.js'; +import NoAvailableAddressesForRetryError from '../../../../lib/transport/errors/response/NoAvailableAddressesForRetryError.js'; +import NoAvailableAddressesError from '../../../../lib/transport/errors/NoAvailableAddressesError.js'; +import ResponseError from '../../../../lib/transport/errors/response/ResponseError.js'; +import TimeoutError from '../../../../lib/transport/GrpcTransport/errors/TimeoutError.js'; +import RetriableResponseError from '../../../../lib/transport/errors/response/RetriableResponseError.js'; describe('GrpcTransport', () => { let grpcTransport; diff --git a/packages/js-dapi-client/test/unit/transport/GrpcTransport/createGrpcTransportError.spec.js b/packages/js-dapi-client/test/unit/transport/GrpcTransport/createGrpcTransportError.spec.js index b3731276d12..7a7ff091ecc 100644 --- a/packages/js-dapi-client/test/unit/transport/GrpcTransport/createGrpcTransportError.spec.js +++ b/packages/js-dapi-client/test/unit/transport/GrpcTransport/createGrpcTransportError.spec.js @@ -1,20 +1,22 @@ -const { Metadata, parseMetadata } = require('@dashevo/dapi-grpc'); -const GrpcError = require('@dashevo/grpc-common/lib/server/error/GrpcError'); -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); - -const { - ProtocolVersionParsingError, -} = require('@dashevo/wasm-dpp'); - -const cbor = require('cbor'); -const createGrpcTransportError = require('../../../../lib/transport/GrpcTransport/createGrpcTransportError'); -const DAPIAddress = require('../../../../lib/dapiAddressProvider/DAPIAddress'); -const NotFoundError = require('../../../../lib/transport/GrpcTransport/errors/NotFoundError'); -const InvalidRequestError = require('../../../../lib/transport/errors/response/InvalidRequestError'); -const InternalServerError = require('../../../../lib/transport/GrpcTransport/errors/InternalServerError'); -const ServerError = require('../../../../lib/transport/errors/response/ServerError'); -const InvalidRequestDPPError = require('../../../../lib/transport/errors/response/InvalidRequestDPPError'); -const ResponseError = require('../../../../lib/transport/errors/response/ResponseError'); +import dapiGrpc from '@dashevo/dapi-grpc'; +import GrpcError from '@dashevo/grpc-common/lib/server/error/GrpcError.js'; +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; + +import wasmDpp from '@dashevo/wasm-dpp'; + +import cbor from 'cbor'; +import createGrpcTransportError from '../../../../lib/transport/GrpcTransport/createGrpcTransportError.js'; +import DAPIAddress from '../../../../lib/dapiAddressProvider/DAPIAddress.js'; +import NotFoundError from '../../../../lib/transport/GrpcTransport/errors/NotFoundError.js'; +import InvalidRequestError from '../../../../lib/transport/errors/response/InvalidRequestError.js'; +import InternalServerError from '../../../../lib/transport/GrpcTransport/errors/InternalServerError.js'; +import ServerError from '../../../../lib/transport/errors/response/ServerError.js'; +import InvalidRequestDPPError from '../../../../lib/transport/errors/response/InvalidRequestDPPError.js'; +import ResponseError from '../../../../lib/transport/errors/response/ResponseError.js'; +import { bytesToBase64 } from '../../../../lib/utils/bytes.js'; + +const { Metadata, parseMetadata } = dapiGrpc; +const { ProtocolVersionParsingError } = wasmDpp; describe('createGrpcTransportError', () => { let dapiAddress; @@ -28,13 +30,13 @@ describe('createGrpcTransportError', () => { }; metadata = new Metadata(); - // grpc-js expects Buffer + // grpc-js expects bytes let driveErrorDataBin = cbor.encode(errorData); // and grpc-web expects base64 string // TODO: remove when we switch to single grpc implementation for both Node and Web if (typeof window !== 'undefined') { - driveErrorDataBin = driveErrorDataBin.toString('base64'); + driveErrorDataBin = bytesToBase64(driveErrorDataBin); } metadata.set('drive-error-data-bin', driveErrorDataBin); @@ -107,13 +109,13 @@ describe('createGrpcTransportError', () => { 'Internal error', ); - // grpc-js expects Buffer + // grpc-js expects bytes let stackBin = cbor.encode(errorWithStack.stack); // and grpc-web expects string // TODO: remove when we switch to single grpc implementation for both Node and Web if (typeof window !== 'undefined') { - stackBin = stackBin.toString('base64'); + stackBin = bytesToBase64(stackBin); } metadata.set('stack-bin', stackBin); @@ -154,13 +156,13 @@ describe('createGrpcTransportError', () => { }); it('should return InvalidRequestDPPError', async () => { - // grpc-js expects Buffer + // grpc-js expects bytes let serializedError = new ProtocolVersionParsingError('test').serialize(); // and grpc-web expects string // TODO: remove when we switch to single grpc implementation for both Node and Web if (typeof window !== 'undefined') { - serializedError = serializedError.toString('base64'); + serializedError = bytesToBase64(serializedError); } metadata.set('dash-serialized-consensus-error-bin', serializedError); diff --git a/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/JsonRpcTransport.spec.js b/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/JsonRpcTransport.spec.js index 7f4e77a7021..fd363d19fe2 100644 --- a/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/JsonRpcTransport.spec.js +++ b/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/JsonRpcTransport.spec.js @@ -1,12 +1,12 @@ -const JsonRpcTransport = require('../../../../lib/transport/JsonRpcTransport/JsonRpcTransport'); -const DAPIAddress = require('../../../../lib/dapiAddressProvider/DAPIAddress'); - -const MaxRetriesReachedError = require('../../../../lib/transport/errors/response/MaxRetriesReachedError'); -const NoAvailableAddressesForRetryError = require('../../../../lib/transport/errors/response/NoAvailableAddressesForRetryError'); -const NoAvailableAddressesError = require('../../../../lib/transport/errors/NoAvailableAddressesError'); -const ResponseError = require('../../../../lib/transport/errors/response/ResponseError'); -const JsonRpcError = require('../../../../lib/transport/JsonRpcTransport/errors/JsonRpcError'); -const RetriableResponseError = require('../../../../lib/transport/errors/response/RetriableResponseError'); +import JsonRpcTransport from '../../../../lib/transport/JsonRpcTransport/JsonRpcTransport.js'; +import DAPIAddress from '../../../../lib/dapiAddressProvider/DAPIAddress.js'; + +import MaxRetriesReachedError from '../../../../lib/transport/errors/response/MaxRetriesReachedError.js'; +import NoAvailableAddressesForRetryError from '../../../../lib/transport/errors/response/NoAvailableAddressesForRetryError.js'; +import NoAvailableAddressesError from '../../../../lib/transport/errors/NoAvailableAddressesError.js'; +import ResponseError from '../../../../lib/transport/errors/response/ResponseError.js'; +import JsonRpcError from '../../../../lib/transport/JsonRpcTransport/errors/JsonRpcError.js'; +import RetriableResponseError from '../../../../lib/transport/errors/response/RetriableResponseError.js'; describe('JsonRpcTransport', () => { let jsonRpcTransport; diff --git a/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/createJsonTransportError.spec.js b/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/createJsonTransportError.spec.js index 15eab4e4d06..7578a53f184 100644 --- a/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/createJsonTransportError.spec.js +++ b/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/createJsonTransportError.spec.js @@ -1,10 +1,10 @@ -const DAPIAddress = require('../../../../lib/dapiAddressProvider/DAPIAddress'); -const WrongHttpCodeError = require('../../../../lib/transport/JsonRpcTransport/errors/WrongHttpCodeError'); -const createJsonTransportError = require('../../../../lib/transport/JsonRpcTransport/createJsonTransportError'); -const ServerError = require('../../../../lib/transport/errors/response/ServerError'); -const JsonRpcError = require('../../../../lib/transport/JsonRpcTransport/errors/JsonRpcError'); -const ResponseError = require('../../../../lib/transport/errors/response/ResponseError'); -const RetriableResponseError = require('../../../../lib/transport/errors/response/RetriableResponseError'); +import DAPIAddress from '../../../../lib/dapiAddressProvider/DAPIAddress.js'; +import WrongHttpCodeError from '../../../../lib/transport/JsonRpcTransport/errors/WrongHttpCodeError.js'; +import createJsonTransportError from '../../../../lib/transport/JsonRpcTransport/createJsonTransportError.js'; +import ServerError from '../../../../lib/transport/errors/response/ServerError.js'; +import JsonRpcError from '../../../../lib/transport/JsonRpcTransport/errors/JsonRpcError.js'; +import ResponseError from '../../../../lib/transport/errors/response/ResponseError.js'; +import RetriableResponseError from '../../../../lib/transport/errors/response/RetriableResponseError.js'; describe('createJsonTransportError', () => { let dapiAddress; diff --git a/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/requestJsonRpc.spec.js b/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/requestJsonRpc.spec.js index fb056544927..d792b5d07c3 100644 --- a/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/requestJsonRpc.spec.js +++ b/packages/js-dapi-client/test/unit/transport/JsonRpcTransport/requestJsonRpc.spec.js @@ -1,6 +1,6 @@ -const requestJsonRpc = require('../../../../lib/transport/JsonRpcTransport/requestJsonRpc'); -const JsonRpcError = require('../../../../lib/transport/JsonRpcTransport/errors/JsonRpcError'); -const WrongHttpCodeError = require('../../../../lib/transport/JsonRpcTransport/errors/WrongHttpCodeError'); +import requestJsonRpc from '../../../../lib/transport/JsonRpcTransport/requestJsonRpc.js'; +import JsonRpcError from '../../../../lib/transport/JsonRpcTransport/errors/JsonRpcError.js'; +import WrongHttpCodeError from '../../../../lib/transport/JsonRpcTransport/errors/WrongHttpCodeError.js'; describe('requestJsonRpc', () => { let protocol; diff --git a/packages/js-dapi-client/test/unit/transport/ReconnectableStream.spec.js b/packages/js-dapi-client/test/unit/transport/ReconnectableStream.spec.js index c946312a074..d3cd2419542 100644 --- a/packages/js-dapi-client/test/unit/transport/ReconnectableStream.spec.js +++ b/packages/js-dapi-client/test/unit/transport/ReconnectableStream.spec.js @@ -1,9 +1,9 @@ -const EventEmitter = require('events'); -const { expect } = require('chai'); +import EventEmitter from 'events'; +import { expect } from 'chai'; -const ReconnectableStream = require('../../../lib/transport/ReconnectableStream'); -const wait = require('../../../lib/utils/wait'); -const logger = require('../../../lib/logger'); +import ReconnectableStream from '../../../lib/transport/ReconnectableStream.js'; +import wait from '../../../lib/utils/wait.js'; +import logger from '../../../lib/logger/index.js'; describe('ReconnectableStream', () => { let reconnectableStream; diff --git a/packages/js-dapi-client/webpack.config.js b/packages/js-dapi-client/webpack.config.js deleted file mode 100644 index 0ea2b4d7eef..00000000000 --- a/packages/js-dapi-client/webpack.config.js +++ /dev/null @@ -1,52 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); - -const commonJSConfig = { - entry: ['core-js/stable', './lib/DAPIClient.js'], - mode: 'production', - resolve: { - fallback: { - fs: false, - http: false, - https: false, - ws: false, - crypto: require.resolve('crypto-browserify'), - buffer: require.resolve('buffer/'), - assert: require.resolve('assert-browserify'), - util: require.resolve('util/'), - os: require.resolve('os-browserify/browser'), - stream: require.resolve('stream-browserify'), - path: require.resolve('path-browserify'), - url: require.resolve('url/'), - events: require.resolve('events/'), - string_decoder: require.resolve('string_decoder/'), - zlib: require.resolve('browserify-zlib'), - process: require.resolve('process/browser'), - }, - }, - plugins: [ - new webpack.ProvidePlugin({ - Buffer: [require.resolve('buffer/'), 'Buffer'], - process: require.resolve('process/browser'), - }), - ], - module: { - rules: [ - { - test: /\.js$/, - exclude: /(node_modules)/, - use: { - loader: 'babel-loader', - }, - }, - ], - }, - output: { - path: path.resolve(__dirname, 'dist'), - filename: 'dapi-client.min.js', - library: 'DAPIClient', - libraryTarget: 'umd', - }, -}; - -module.exports = [commonJSConfig]; diff --git a/yarn.lock b/yarn.lock index 30cd9fc5881..e3b0966626a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1514,48 +1514,25 @@ __metadata: version: 0.0.0-use.local resolution: "@dashevo/dapi-client@workspace:packages/js-dapi-client" dependencies: - "@babel/core": "npm:^7.26.10" "@dashevo/dapi-grpc": "workspace:*" "@dashevo/dash-spv": "workspace:*" "@dashevo/dashcore-lib": "npm:~0.22.0" "@dashevo/grpc-common": "workspace:*" "@dashevo/wasm-dpp": "workspace:*" - assert-browserify: "npm:^2.0.0" - babel-loader: "npm:^9.1.3" - browserify-zlib: "npm:^0.2.0" - buffer: "npm:^6.0.3" cbor: "npm:^8.0.0" chai: "npm:^4.3.10" chai-as-promised: "npm:^7.1.1" comment-parser: "npm:^0.7.6" - core-js: "npm:^3.33.1" - crypto-browserify: "npm:^3.12.1" dirty-chai: "npm:^2.0.1" eslint: "npm:^9.18.0" events: "npm:^3.3.0" google-protobuf: "npm:^3.12.2" - karma: "npm:^6.4.3" - karma-chai: "npm:^0.1.0" - karma-chrome-launcher: "npm:^3.1.0" - karma-firefox-launcher: "npm:^2.1.2" - karma-mocha: "npm:^2.0.1" - karma-mocha-reporter: "npm:^2.2.5" - karma-webpack: "npm:^5.0.0" mocha: "npm:^11.1.0" nyc: "npm:^15.1.0" - os-browserify: "npm:^0.3.0" - path-browserify: "npm:^1.0.1" - process: "npm:^0.11.10" sinon: "npm:^18.0.1" sinon-chai: "npm:^3.7.0" - stream-browserify: "npm:^3.0.0" - string_decoder: "npm:^1.3.0" undici: "npm:^6.0.0" - url: "npm:^0.11.3" - util: "npm:^0.12.4" wasm-x11-hash: "npm:~0.0.2" - webpack: "npm:^5.104.0" - webpack-cli: "npm:^4.9.1" languageName: unknown linkType: soft @@ -5395,19 +5372,6 @@ __metadata: languageName: node linkType: hard -"babel-loader@npm:^9.1.3": - version: 9.1.3 - resolution: "babel-loader@npm:9.1.3" - dependencies: - find-cache-dir: "npm:^4.0.0" - schema-utils: "npm:^4.0.0" - peerDependencies: - "@babel/core": ^7.12.0 - webpack: ">=5" - checksum: 10/7086e678273b5d1261141dca84ed784caab9f7921c8c24d7278c8ee3088235a9a9fd85caac9f0fa687336cb3c27248ca22dbf431469769b1b995d55aec606992 - languageName: node - linkType: hard - "babel-plugin-polyfill-corejs2@npm:^0.4.10": version: 0.4.12 resolution: "babel-plugin-polyfill-corejs2@npm:0.4.12" @@ -6739,13 +6703,6 @@ __metadata: languageName: node linkType: hard -"common-path-prefix@npm:^3.0.0": - version: 3.0.0 - resolution: "common-path-prefix@npm:3.0.0" - checksum: 10/09c180e8d8495d42990d617f4d4b7522b5da20f6b236afe310192d401d1da8147a7835ae1ea37797ba0c2238ef3d06f3492151591451df34539fdb4b2630f2b3 - languageName: node - linkType: hard - "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -7051,13 +7008,6 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.33.1": - version: 3.33.2 - resolution: "core-js@npm:3.33.2" - checksum: 10/d62554d51ce8a3f33d0b1f8b064cbd21afcae275043ae96d3d43f18701b80cd423fab484517a81ee1d096db252e2aeada6ef6d1fd80a26db54f82f8f349a62c7 - languageName: node - linkType: hard - "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -9241,16 +9191,6 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^4.0.0": - version: 4.0.0 - resolution: "find-cache-dir@npm:4.0.0" - dependencies: - common-path-prefix: "npm:^3.0.0" - pkg-dir: "npm:^7.0.0" - checksum: 10/52a456a80deeb27daa3af6e06059b63bdb9cc4af4d845fc6d6229887e505ba913cd56000349caa60bc3aa59dacdb5b4c37903d4ba34c75102d83cab330b70d2f - languageName: node - linkType: hard - "find-up@npm:^2.0.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -9280,16 +9220,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^6.3.0": - version: 6.3.0 - resolution: "find-up@npm:6.3.0" - dependencies: - locate-path: "npm:^7.1.0" - path-exists: "npm:^5.0.0" - checksum: 10/4f3bdc30d41778c647e53f4923e72de5e5fb055157031f34501c5b36c2eb59f77b997edf9cb00165c6060cda7eaa2e3da82cb6be2e61d68ad3e07c4bc4cce67e - languageName: node - linkType: hard - "find-yarn-workspace-root2@npm:1.2.16": version: 1.2.16 resolution: "find-yarn-workspace-root2@npm:1.2.16" @@ -12110,15 +12040,6 @@ __metadata: languageName: node linkType: hard -"locate-path@npm:^7.1.0": - version: 7.2.0 - resolution: "locate-path@npm:7.2.0" - dependencies: - p-locate: "npm:^6.0.0" - checksum: 10/1c6d269d4efec555937081be964e8a9b4a136319c79ca1d45ac6382212a8466113c75bd89e44521ca8ecd1c47fb08523b56eee5c0712bc7d14fec5f729deeb42 - languageName: node - linkType: hard - "lodash._reinterpolate@npm:^3.0.0": version: 3.0.0 resolution: "lodash._reinterpolate@npm:3.0.0" @@ -13998,15 +13919,6 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^4.0.0": - version: 4.0.0 - resolution: "p-limit@npm:4.0.0" - dependencies: - yocto-queue: "npm:^1.0.0" - checksum: 10/01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b - languageName: node - linkType: hard - "p-locate@npm:^2.0.0": version: 2.0.0 resolution: "p-locate@npm:2.0.0" @@ -14034,15 +13946,6 @@ __metadata: languageName: node linkType: hard -"p-locate@npm:^6.0.0": - version: 6.0.0 - resolution: "p-locate@npm:6.0.0" - dependencies: - p-limit: "npm:^4.0.0" - checksum: 10/2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38 - languageName: node - linkType: hard - "p-map@npm:^3.0.0": version: 3.0.0 resolution: "p-map@npm:3.0.0" @@ -14350,13 +14253,6 @@ __metadata: languageName: node linkType: hard -"path-exists@npm:^5.0.0": - version: 5.0.0 - resolution: "path-exists@npm:5.0.0" - checksum: 10/8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254 - languageName: node - linkType: hard - "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -14577,15 +14473,6 @@ __metadata: languageName: node linkType: hard -"pkg-dir@npm:^7.0.0": - version: 7.0.0 - resolution: "pkg-dir@npm:7.0.0" - dependencies: - find-up: "npm:^6.3.0" - checksum: 10/94298b20a446bfbbd66604474de8a0cdd3b8d251225170970f15d9646f633e056c80520dd5b4c1d1050c9fed8f6a9e5054b141c93806439452efe72e57562c03 - languageName: node - linkType: hard - "plur@npm:^4.0.0": version: 4.0.0 resolution: "plur@npm:4.0.0" @@ -15710,18 +15597,6 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^4.0.0": - version: 4.2.0 - resolution: "schema-utils@npm:4.2.0" - dependencies: - "@types/json-schema": "npm:^7.0.9" - ajv: "npm:^8.9.0" - ajv-formats: "npm:^2.1.1" - ajv-keywords: "npm:^5.1.0" - checksum: 10/808784735eeb153ab7f3f787f840aa3bc63f423d2a5a7e96c9e70a0e53d0bc62d7b37ea396fc598ce19196e4fb86a72f897154b7c6ce2358bbc426166f205e14 - languageName: node - linkType: hard - "schema-utils@npm:^4.3.0": version: 4.3.0 resolution: "schema-utils@npm:4.3.0" @@ -19001,13 +18876,6 @@ __metadata: languageName: node linkType: hard -"yocto-queue@npm:^1.0.0": - version: 1.0.0 - resolution: "yocto-queue@npm:1.0.0" - checksum: 10/2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 - languageName: node - linkType: hard - "z-schema@npm:^4.2.2": version: 4.2.4 resolution: "z-schema@npm:4.2.4" From 75188d3fa1aa8b6567938c2c6fcc0a4c1be3cc76 Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 19 May 2026 11:08:07 -0500 Subject: [PATCH 10/11] refactor(wallet-lib)!: convert to ESM, consume ESM dapi-client Converts @dashevo/wallet-lib to pure ESM so it can consume the ESM dapi-client from PR 3. Adds 'type: module' to package.json. All src/, fixtures/, and tests/ files converted from CJS require/module.exports to ESM import/export with .js extensions on relative imports. Deletes webpack.config.js, karma/, src/test/karma/. Removes browser-polyfill devDeps (buffer, crypto-browserify, stream-browserify, etc.) and webpack/karma. Tests run via Mocha in Node 18+; browser builds are out of scope. Engines: >=18.18. CJS-named-import fixes: lodash, crypto-js, @dashevo/dashcore-lib, @dashevo/wasm-dpp, @dashevo/grpc-common all use default-import + destructure pattern because Node ESM cannot statically enumerate named exports of CJS modules. Surfaces three previously-silent CJS bugs that ESM strict mode catches: missing UnknownStrategy export from errors/index.js, missing named exports for coinSelection strategies, and a 'type=' implicit-global in DerivableKeyChain.spec.js. Defensive (loadDpp.default ?? loadDpp)() unwrap in IdentitySyncWorker.onStart for the same wasm-dpp NodeNext interop reason as PR 3's bootstrap. Test results: wallet-lib 377/377 passing. dapi-client unchanged (315/315). js-dash-sdk still broken (PR 5 fixes). --- .pnp.cjs | 201 +----------------- packages/wallet-lib/fixtures/DummyWorker.js | 4 +- .../fixtures/plugins/FaultyWorker.js | 4 +- .../fixtures/plugins/WorkingWorker.js | 4 +- .../craftedGenerousMinerStrategy.js | 8 +- .../getFixtureAccountWithStorage.js | 18 +- .../categorizeTransactions.expectedResults.js | 4 +- .../getFixtureAccountWithStorage.js | 18 +- packages/wallet-lib/karma/karma.conf.js | 14 -- .../wallet-lib/karma/karma.functional.conf.js | 14 -- packages/wallet-lib/karma/options.js | 66 ------ packages/wallet-lib/package.json | 46 +--- packages/wallet-lib/src/CONSTANTS.js | 37 +++- packages/wallet-lib/src/EVENTS.js | 87 +++++--- packages/wallet-lib/src/adapters/InMem.js | 2 +- .../wallet-lib/src/adapters/inMem.spec.js | 4 +- .../src/errors/BlockHeaderNotInStore.js | 4 +- .../errors/CoinSelectionUnsufficientUTXOS.js | 4 +- .../src/errors/CreateTransactionError.js | 6 +- .../src/errors/IndentityIdReplaceError.js | 4 +- .../src/errors/InjectionErrorCannotInject.js | 4 +- ...ctionErrorCannotInjectUnknownDependency.js | 4 +- .../src/errors/InjectionToPluginUnallowed.js | 4 +- .../src/errors/InstantLockTimeoutError.js | 4 +- .../wallet-lib/src/errors/InvalidAddress.js | 4 +- .../src/errors/InvalidAddressObject.js | 6 +- .../src/errors/InvalidDashcoreTransaction.js | 4 +- .../wallet-lib/src/errors/InvalidOutput.js | 9 +- .../src/errors/InvalidRawTransaction.js | 4 +- .../src/errors/InvalidStorageAdapter.js | 4 +- .../wallet-lib/src/errors/InvalidStrategy.js | 4 +- .../src/errors/InvalidTransactionObject.js | 9 +- packages/wallet-lib/src/errors/InvalidUTXO.js | 4 +- .../errors/MempoolPropagationTimeoutError.js | 4 +- .../src/errors/PluginFailedOnStart.js | 4 +- .../src/errors/PluginInjectionError.js | 4 +- .../errors/StorageUnableToAddTransaction.js | 4 +- .../errors/TransactionMetadataNotInStore.js | 4 +- .../src/errors/TransactionNotInStore.js | 4 +- .../src/errors/TransporterGenericError.js | 4 +- .../src/errors/TxMetadataTimeoutError.js | 4 +- .../wallet-lib/src/errors/UnknownPlugin.js | 4 +- .../wallet-lib/src/errors/UnknownStrategy.js | 4 +- .../wallet-lib/src/errors/UnknownWorker.js | 4 +- .../src/errors/ValidTransportLayerRequired.js | 4 +- .../wallet-lib/src/errors/WalletLibError.js | 2 +- .../src/errors/WorkerFailedOnExecute.js | 4 +- .../src/errors/WorkerFailedOnStart.js | 4 +- packages/wallet-lib/src/errors/index.js | 92 +++++--- packages/wallet-lib/src/index.js | 45 ++-- packages/wallet-lib/src/logger/index.js | 100 +++------ .../src/plugins/Plugins/ChainPlugin.js | 8 +- .../wallet-lib/src/plugins/StandardPlugin.js | 12 +- .../src/plugins/StandardPlugin.spec.js | 6 +- packages/wallet-lib/src/plugins/Worker.js | 6 +- .../wallet-lib/src/plugins/Worker.spec.js | 8 +- .../BlockHeadersSyncWorker.js | 10 +- .../BlockHeadersSyncWorker.spec.js | 19 +- .../src/plugins/Workers/IdentitySyncWorker.js | 16 +- .../TransactionsReader.js | 12 +- .../TransactionsReader.spec.js | 19 +- .../TransactionsSyncWorker.js | 16 +- .../TransactionsSyncWorker.spec.js | 19 +- .../Workers/TransactionsSyncWorker/utils.js | 23 +- .../TransactionsSyncWorker/utils.spec.js | 12 +- packages/wallet-lib/src/plugins/index.js | 11 +- packages/wallet-lib/src/test/bootstrap.js | 20 +- .../wallet-lib/src/test/karma/bootstrap.js | 30 --- packages/wallet-lib/src/test/karma/loader.js | 8 - .../src/test/mocks/BlockHeadersStreamMock.js | 4 +- .../src/test/mocks/LocalForageAdapterMock.js | 2 +- .../src/test/mocks/TransportMock.js | 8 +- .../test/mocks/TxStreamDataResponseMock.js | 2 +- .../wallet-lib/src/test/mocks/TxStreamMock.js | 8 +- .../createAndAttachTransportMocksToWallet.js | 8 +- .../test/mocks/createTransactionInAccount.js | 5 +- .../src/test/mocks/dashcore/block.js | 15 +- .../src/test/mocks/dashcore/instantlock.js | 9 +- .../src/test/mocks/dashcore/transaction.js | 8 +- .../test/mocks/mockBlockHeadersProvider.js | 4 +- .../wallet-lib/src/test/mocks/mockStorage.js | 6 +- packages/wallet-lib/src/test/utils.js | 2 +- .../src/transport/AbstractTransport.js | 8 +- .../DAPIClientTransport.js | 46 ++-- .../DAPIClientTransport/methods/disconnect.js | 4 +- .../methods/getBestBlock.js | 4 +- .../methods/getBestBlock.spec.js | 7 +- .../methods/getBestBlockHash.js | 4 +- .../methods/getBestBlockHash.spec.js | 4 +- .../methods/getBestBlockHeader.js | 4 +- .../methods/getBestBlockHeader.spec.js | 7 +- .../methods/getBestBlockHeight.js | 4 +- .../methods/getBestBlockHeight.spec.js | 6 +- .../methods/getBlockByHash.js | 7 +- .../methods/getBlockByHash.spec.js | 4 +- .../methods/getBlockByHeight.js | 7 +- .../methods/getBlockByHeight.spec.js | 4 +- .../methods/getBlockHeaderByHash.js | 4 +- .../methods/getBlockHeaderByHash.spec.js | 4 +- .../methods/getBlockHeaderByHeight.js | 4 +- .../methods/getBlockHeaderByHeight.spec.js | 4 +- .../methods/getBlockchainStatus.js | 4 +- .../methods/getBlockchainStatus.spec.js | 4 +- .../methods/getIdentityByPublicKeyHash.js | 2 +- .../methods/getTransaction.js | 11 +- .../methods/getTransaction.spec.js | 8 +- .../methods/sendTransaction.js | 6 +- .../subscribeToAddressesTransactions.js | 6 +- .../subscribeToTransactionsWithProofs.js | 12 +- .../utils/getHeightFromMerkleBlockBuffer.js | 5 +- .../FixtureTransport/FixtureTransport.js | 42 ++-- .../FixtureTransport/data/blocks/blocks.js | 7 +- .../FixtureTransport/methods/getBestBlock.js | 4 +- .../methods/getBestBlockHash.js | 2 +- .../methods/getBestBlockHeader.js | 4 +- .../methods/getBestBlockHeight.js | 2 +- .../methods/getBlockByHash.js | 15 +- .../methods/getBlockByHeight.js | 2 +- .../methods/getBlockHeaderByHash.js | 2 +- .../methods/getBlockHeaderByHeight.js | 2 +- .../methods/getBlockchainStatus.js | 2 +- .../methods/getTransaction.js | 13 +- .../methods/sendTransaction.js | 2 +- .../subscribeToAddressesTransactions.js | 6 +- .../wallet-lib/src/transport/Transport.d.ts | 2 +- .../transport/createTransportFromOptions.js | 8 +- .../wallet-lib/src/types/Account/Account.d.ts | 2 +- .../wallet-lib/src/types/Account/Account.js | 136 +++++++----- .../src/types/Account/Account.spec.js | 26 +-- .../src/types/Account/_addAccountToWallet.js | 2 +- .../types/Account/_addAccountToWallet.spec.js | 4 +- .../src/types/Account/_getBIP44Path.js | 8 +- .../src/types/Account/_getBIP44Path.spec.js | 4 +- .../src/types/Account/_getNetwork.js | 4 +- .../src/types/Account/_getNetwork.spec.js | 4 +- .../src/types/Account/_initializeAccount.js | 8 +- .../src/types/Account/_loadStrategy.js | 10 +- .../src/types/Account/_preparePlugins.js | 6 +- .../src/types/Account/_sortPlugins.js | 15 +- .../src/types/Account/_sortPlugins.spec.js | 16 +- .../types/Account/methods/addDefaultPaths.js | 2 +- .../types/Account/methods/addPathsToStore.js | 2 +- .../Account/methods/broadcastTransaction.js | 16 +- .../methods/broadcastTransaction.spec.js | 22 +- .../src/types/Account/methods/connect.js | 2 +- .../src/types/Account/methods/connect.spec.js | 6 +- .../methods/createPathsForTransactions.js | 4 +- .../Account/methods/createTransaction.js | 19 +- .../Account/methods/createTransaction.spec.js | 25 +-- .../src/types/Account/methods/decode.js | 4 +- .../src/types/Account/methods/decode.spec.js | 6 +- .../src/types/Account/methods/decrypt.js | 4 +- .../src/types/Account/methods/decrypt.spec.js | 6 +- .../src/types/Account/methods/disconnect.js | 2 +- .../types/Account/methods/disconnect.spec.js | 8 +- .../src/types/Account/methods/encode.js | 4 +- .../src/types/Account/methods/encode.spec.js | 6 +- .../src/types/Account/methods/encrypt.js | 4 +- .../src/types/Account/methods/encrypt.spec.js | 6 +- .../src/types/Account/methods/fetchStatus.js | 4 +- .../types/Account/methods/fetchStatus.spec.js | 4 +- .../Account/methods/forceRefreshAccount.js | 2 +- .../methods/forceRefreshAccount.spec.js | 4 +- .../types/Account/methods/generateAddress.js | 8 +- .../Account/methods/generateAddress.spec.js | 4 +- .../types/Account/methods/generateNewPaths.js | 2 +- .../src/types/Account/methods/getAddress.js | 4 +- .../types/Account/methods/getAddress.spec.js | 4 +- .../src/types/Account/methods/getAddresses.js | 4 +- .../Account/methods/getAddresses.spec.js | 4 +- .../types/Account/methods/getBlockHeader.js | 4 +- .../Account/methods/getConfirmedBalance.js | 4 +- .../methods/getConfirmedBalance.spec.js | 10 +- .../src/types/Account/methods/getPlugin.js | 6 +- .../types/Account/methods/getPlugin.spec.js | 4 +- .../types/Account/methods/getPrivateKeys.js | 2 +- .../Account/methods/getPrivateKeys.spec.js | 4 +- .../types/Account/methods/getTotalBalance.js | 4 +- .../Account/methods/getTotalBalance.spec.js | 10 +- .../types/Account/methods/getTransaction.js | 4 +- .../Account/methods/getTransaction.spec.js | 6 +- .../Account/methods/getTransactionHistory.js | 9 +- .../methods/getTransactionHistory.spec.js | 12 +- .../types/Account/methods/getTransactions.js | 2 +- .../Account/methods/getTransactions.spec.js | 6 +- .../src/types/Account/methods/getUTXOS.js | 7 +- .../types/Account/methods/getUTXOS.spec.js | 8 +- .../Account/methods/getUnconfirmedBalance.js | 4 +- .../methods/getUnconfirmedBalance.spec.js | 10 +- .../types/Account/methods/getUnusedAddress.js | 2 +- .../Account/methods/getUnusedAddress.spec.js | 6 +- .../Account/methods/getUnusedIdentityIndex.js | 2 +- .../src/types/Account/methods/getWorker.js | 6 +- .../src/types/Account/methods/hasPlugins.js | 4 +- .../Account/methods/importTransactions.js | 2 +- .../src/types/Account/methods/injectPlugin.js | 14 +- .../Account/methods/injectPlugin.spec.js | 12 +- .../src/types/Account/methods/sign.js | 5 +- .../src/types/Account/methods/sign.spec.js | 6 +- .../src/types/ChainStore/ChainStore.js | 55 +++-- .../src/types/ChainStore/ChainStore.spec.js | 11 +- .../ChainStore/methods/considerTransaction.js | 7 +- .../types/ChainStore/methods/exportState.js | 4 +- .../types/ChainStore/methods/getAddress.js | 2 +- .../types/ChainStore/methods/getAddresses.js | 2 +- .../ChainStore/methods/getBlockHeader.js | 2 +- .../ChainStore/methods/getInstantLock.js | 2 +- .../ChainStore/methods/getTransaction.js | 2 +- .../types/ChainStore/methods/importAddress.js | 4 +- .../ChainStore/methods/importInstantLock.js | 2 +- .../types/ChainStore/methods/importState.js | 4 +- .../ChainStore/methods/importTransaction.js | 7 +- .../DerivableKeyChain/DerivableKeyChain.d.ts | 2 +- .../DerivableKeyChain/DerivableKeyChain.js | 50 +++-- .../DerivableKeyChain.spec.js | 10 +- .../methods/getDIP15ExtendedKey.js | 2 +- .../methods/getFirstUnusedAddress.js | 2 +- .../methods/getForAddress.js | 2 +- .../DerivableKeyChain/methods/getForPath.js | 2 +- .../methods/getHardenedBIP44HDKey.js | 4 +- .../methods/getHardenedDIP15AccountKey.js | 2 +- .../methods/getHardenedDIP9FeatureHDKey.js | 4 +- .../methods/getIssuedPaths.js | 2 +- .../DerivableKeyChain/methods/getRootKey.js | 2 +- .../methods/getWatchedAddresses.js | 2 +- .../methods/markAddressAsUsed.js | 4 +- .../methods/maybeLookAhead.js | 2 +- .../types/DerivableKeyChain/methods/sign.js | 9 +- .../src/types/Identities/Identities.d.ts | 2 +- .../src/types/Identities/Identities.js | 15 +- .../methods/getIdentityHDKeyById.js | 2 +- .../methods/getIdentityHDKeyById.spec.js | 6 +- .../methods/getIdentityHDKeyByIndex.js | 2 +- .../methods/getIdentityHDKeyByIndex.spec.js | 4 +- .../Identities/methods/getIdentityIds.js | 2 +- .../Identities/methods/getIdentityIds.spec.js | 8 +- .../src/types/KeyChainStore/KeyChainStore.js | 17 +- .../types/KeyChainStore/KeyChainStore.spec.js | 9 +- .../KeyChainStore/methods/addKeyChain.js | 2 +- .../KeyChainStore/methods/getKeyChain.js | 2 +- .../KeyChainStore/methods/getKeyChains.js | 2 +- .../methods/getMasterKeyChain.js | 2 +- .../methods/makeChildKeyChainStore.js | 6 +- .../wallet-lib/src/types/Storage/Storage.js | 36 ++-- .../src/types/Storage/_configureAdapter.js | 4 +- .../src/types/Storage/_getDefaultAdapter.js | 6 +- .../src/types/Storage/methods/configure.js | 17 +- .../types/Storage/methods/createChainStore.js | 6 +- .../Storage/methods/createWalletStore.js | 4 +- .../types/Storage/methods/getChainStore.js | 2 +- .../types/Storage/methods/getWalletStore.js | 2 +- .../types/Storage/methods/rehydrateState.js | 8 +- .../src/types/Storage/methods/saveState.js | 6 +- .../src/types/Storage/methods/startWorker.js | 2 +- .../src/types/Storage/methods/stopWorker.js | 2 +- .../wallet-lib/src/types/Wallet/Wallet.d.ts | 2 +- .../wallet-lib/src/types/Wallet/Wallet.js | 59 ++--- .../src/types/Wallet/Wallet.spec.js | 22 +- .../src/types/Wallet/methods/createAccount.js | 15 +- .../Wallet/methods/createAccount.spec.js | 6 +- .../src/types/Wallet/methods/disconnect.js | 2 +- .../src/types/Wallet/methods/dumpStorage.js | 4 +- .../src/types/Wallet/methods/exportWallet.js | 4 +- .../types/Wallet/methods/exportWallet.spec.js | 17 +- .../src/types/Wallet/methods/fromAddress.js | 10 +- .../types/Wallet/methods/fromAddress.spec.js | 11 +- .../types/Wallet/methods/fromHDPrivateKey.js | 15 +- .../Wallet/methods/fromHDPrivateKey.spec.js | 8 +- .../types/Wallet/methods/fromHDPublicKey.js | 12 +- .../Wallet/methods/fromHDPublicKey.spec.js | 12 +- .../src/types/Wallet/methods/fromMnemonic.js | 12 +- .../types/Wallet/methods/fromMnemonic.spec.js | 10 +- .../types/Wallet/methods/fromPrivateKey.js | 10 +- .../Wallet/methods/fromPrivateKey.spec.js | 8 +- .../src/types/Wallet/methods/fromPublicKey.js | 10 +- .../Wallet/methods/fromPublicKey.spec.js | 11 +- .../src/types/Wallet/methods/fromSeed.js | 6 +- .../src/types/Wallet/methods/fromSeed.spec.js | 10 +- .../Wallet/methods/generateNewWalletId.js | 6 +- .../methods/generateNewWalletId.spec.js | 12 +- .../src/types/Wallet/methods/getAccount.js | 8 +- .../types/Wallet/methods/getAccount.spec.js | 8 +- .../src/types/Wallet/methods/sweepWallet.js | 6 +- .../src/types/WalletStore/WalletStore.js | 17 +- .../src/types/WalletStore/WalletStore.spec.js | 4 +- .../WalletStore/methods/createPathState.js | 4 +- .../methods/getIdentityIdByIndex.js | 2 +- .../methods/getIndexedIdentityIds.js | 2 +- .../types/WalletStore/methods/getPathState.js | 2 +- .../methods/insertIdentityIdAtIndex.js | 4 +- .../utils/bip44/ensureAddressesToGapLimit.js | 12 +- .../bip44/ensureAddressesToGapLimit.spec.js | 6 +- .../src/utils/bip44/getMissingIndexes.js | 4 +- .../src/utils/bip44/isContiguousPath.js | 4 +- .../src/utils/calculateDuffBalance.js | 2 +- .../src/utils/calculateTransactionFees.js | 4 +- .../utils/calculateTransactionFees.spec.js | 7 +- .../src/utils/castStorageItemsTypes.js | 2 +- .../src/utils/castStorageItemsTypes.spec.js | 13 +- .../src/utils/categorizeTransactions.js | 9 +- .../src/utils/categorizeTransactions.spec.js | 20 +- .../wallet-lib/src/utils/classifyAddresses.js | 4 +- .../src/utils/classifyAddresses.spec.js | 8 +- .../wallet-lib/src/utils/coinSelection.js | 2 +- .../src/utils/coinSelection.spec.js | 14 +- .../coinSelections/TransactionEstimator.js | 21 +- .../src/utils/coinSelections/helpers/index.js | 8 +- .../helpers/sortAndVerifyUTXOS.js | 2 +- .../src/utils/coinSelections/index.js | 13 +- .../utils/coinSelections/strategies/index.js | 7 +- .../strategies/simpleAscendingAccumulator.js | 7 +- .../simpleAscendingAccumulator.spec.js | 8 +- .../strategies/simpleDescendingAccumulator.js | 7 +- .../simpleDescendingAccumulator.spec.js | 8 +- packages/wallet-lib/src/utils/crypto.js | 10 +- packages/wallet-lib/src/utils/dashToDuffs.js | 4 +- .../wallet-lib/src/utils/dashToDuffs.spec.js | 6 +- packages/wallet-lib/src/utils/duffsToDash.js | 4 +- .../wallet-lib/src/utils/duffsToDash.spec.js | 6 +- .../wallet-lib/src/utils/expectThrowsAsync.js | 4 +- .../utils/extendTransactionsWithMetadata.js | 7 +- .../extendTransactionsWithMetadata.spec.js | 7 +- .../wallet-lib/src/utils/feeCalculation.js | 2 +- .../src/utils/feeCalculation.spec.js | 4 +- .../src/utils/filterTransactions.js | 7 +- .../src/utils/filterTransactions.spec.js | 9 +- packages/wallet-lib/src/utils/fundWallet.js | 4 +- packages/wallet-lib/src/utils/getBytesOf.js | 5 +- .../wallet-lib/src/utils/getBytesOf.spec.js | 4 +- packages/wallet-lib/src/utils/hasMethod.js | 2 +- .../wallet-lib/src/utils/hasMethod.spec.js | 4 +- packages/wallet-lib/src/utils/hasProp.js | 2 +- packages/wallet-lib/src/utils/hasProp.spec.js | 4 +- packages/wallet-lib/src/utils/index.js | 67 ++++-- packages/wallet-lib/src/utils/is.js | 5 +- packages/wallet-lib/src/utils/is.spec.js | 9 +- packages/wallet-lib/src/utils/isBrowser.js | 2 +- packages/wallet-lib/src/utils/mnemonic.js | 18 +- .../wallet-lib/src/utils/mnemonic.spec.js | 13 +- .../wallet-lib/src/utils/outputHandler.js | 2 +- .../src/utils/outputHandler.spec.js | 4 +- packages/wallet-lib/src/utils/sleep.js | 2 +- .../wallet-lib/src/utils/sortTransactions.js | 2 +- packages/wallet-lib/src/utils/varInt.js | 23 +- packages/wallet-lib/src/utils/varInt.spec.js | 4 +- .../tests/functional/sweepWallet.spec.js | 6 +- .../tests/functional/wallet.spec.js | 8 +- .../Workers/BlockHeadersSyncWorker.spec.js | 27 +-- .../Workers/TransactionsSyncWorker.spec.js | 23 +- .../tests/integration/types/Account.spec.js | 19 +- .../tests/integration/types/Wallet.spec.js | 27 +-- packages/wallet-lib/webpack.config.js | 42 ---- yarn.lock | 26 --- 353 files changed, 1720 insertions(+), 1793 deletions(-) delete mode 100644 packages/wallet-lib/karma/karma.conf.js delete mode 100644 packages/wallet-lib/karma/karma.functional.conf.js delete mode 100644 packages/wallet-lib/karma/options.js delete mode 100644 packages/wallet-lib/src/test/karma/bootstrap.js delete mode 100644 packages/wallet-lib/src/test/karma/loader.js delete mode 100644 packages/wallet-lib/webpack.config.js diff --git a/.pnp.cjs b/.pnp.cjs index ad4e9515b1d..881f7d1da52 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -2993,48 +2993,22 @@ const RAW_RUNTIME_STATE = ["@dashevo/wallet-lib", "workspace:packages/wallet-lib"],\ ["@dashevo/wasm-dpp", "workspace:packages/wasm-dpp"],\ ["@yarnpkg/pnpify", "npm:4.0.0-rc.42"],\ - ["assert", "npm:2.0.0"],\ - ["browserify-zlib", "npm:0.2.0"],\ - ["buffer", "npm:6.0.3"],\ ["cbor", "npm:8.1.0"],\ ["chai", "npm:4.3.10"],\ ["chai-as-promised", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:7.1.1"],\ - ["crypto-browserify", "npm:3.12.1"],\ ["crypto-js", "npm:4.2.0"],\ ["dirty-chai", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:2.0.1"],\ ["dotenv-safe", "npm:8.2.0"],\ ["eslint", "virtual:de32c10d523830f1843784ae863166d6ef2e074b6da9615f2b3296a1f90385ed3f59e274e3957326ba7cf3442d82470d9e1ec01e6720989a570c075c95d90dbc#npm:9.39.2"],\ ["events", "npm:3.3.0"],\ - ["https-browserify", "npm:1.0.0"],\ - ["karma", "npm:6.4.3"],\ - ["karma-chai", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:0.1.0"],\ - ["karma-chrome-launcher", "npm:3.1.0"],\ - ["karma-firefox-launcher", "npm:2.1.2"],\ - ["karma-mocha", "npm:2.0.1"],\ - ["karma-mocha-reporter", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:2.2.5"],\ - ["karma-sourcemap-loader", "npm:0.3.8"],\ - ["karma-webpack", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.0.0"],\ ["lodash", "npm:4.17.23"],\ ["mocha", "npm:11.1.0"],\ - ["node-inspect-extracted", "npm:1.0.8"],\ ["nyc", "npm:15.1.0"],\ - ["os-browserify", "npm:0.3.0"],\ - ["path-browserify", "npm:1.0.1"],\ ["pbkdf2", "npm:3.1.3"],\ - ["process", "npm:0.11.10"],\ - ["setimmediate", "npm:1.0.5"],\ ["sinon", "npm:18.0.1"],\ ["sinon-chai", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:3.7.0"],\ - ["stream-browserify", "npm:3.0.0"],\ - ["stream-http", "npm:3.2.0"],\ - ["string_decoder", "npm:1.3.0"],\ ["tsd", "npm:0.28.1"],\ - ["url", "npm:0.11.3"],\ - ["util", "npm:0.12.4"],\ - ["wasm-x11-hash", "npm:0.0.2"],\ - ["webpack", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.105.0"],\ - ["webpack-cli", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:4.9.1"],\ - ["winston", "npm:3.3.3"]\ + ["wasm-x11-hash", "npm:0.0.2"]\ ],\ "linkType": "SOFT"\ }]\ @@ -6045,23 +6019,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:0249f7ceb5542d6b732af2b44f9fcd16c60be8b8440f0f3abc6a5de67aabcff731bc3bc83f3067ab2f9037661176f001f89208fcea9e8962835fd43d0aabe88a#npm:1.1.0", {\ - "packageLocation": "./.yarn/__virtual__/@webpack-cli-configtest-virtual-7a30f6ad18/0/cache/@webpack-cli-configtest-npm-1.1.0-2b6b2ef3d7-69e7816b5b.zip/node_modules/@webpack-cli/configtest/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["@types/webpack-cli", null],\ - ["@webpack-cli/configtest", "virtual:0249f7ceb5542d6b732af2b44f9fcd16c60be8b8440f0f3abc6a5de67aabcff731bc3bc83f3067ab2f9037661176f001f89208fcea9e8962835fd43d0aabe88a#npm:1.1.0"],\ - ["webpack", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.105.0"],\ - ["webpack-cli", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:4.9.1"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "@types/webpack",\ - "webpack-cli",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:16885aa8448c33477ea2cd730ac3a5bbbcb89a3f570f5364364e7dc5830b16f19367cec64b723cc62ddb3078b4ee0f0ce5d244584279bc98369c8ee9e5959a27#npm:1.1.0", {\ "packageLocation": "./.yarn/__virtual__/@webpack-cli-configtest-virtual-1cf1a90458/0/cache/@webpack-cli-configtest-npm-1.1.0-2b6b2ef3d7-69e7816b5b.zip/node_modules/@webpack-cli/configtest/",\ "packageDependencies": [\ @@ -6156,20 +6113,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:0249f7ceb5542d6b732af2b44f9fcd16c60be8b8440f0f3abc6a5de67aabcff731bc3bc83f3067ab2f9037661176f001f89208fcea9e8962835fd43d0aabe88a#npm:1.4.0", {\ - "packageLocation": "./.yarn/__virtual__/@webpack-cli-info-virtual-b6b54dc15e/0/cache/@webpack-cli-info-npm-1.4.0-4a26ccee64-6385b1e2c5.zip/node_modules/@webpack-cli/info/",\ - "packageDependencies": [\ - ["@types/webpack-cli", null],\ - ["@webpack-cli/info", "virtual:0249f7ceb5542d6b732af2b44f9fcd16c60be8b8440f0f3abc6a5de67aabcff731bc3bc83f3067ab2f9037661176f001f89208fcea9e8962835fd43d0aabe88a#npm:1.4.0"],\ - ["envinfo", "npm:7.8.1"],\ - ["webpack-cli", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:4.9.1"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "webpack-cli"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:16885aa8448c33477ea2cd730ac3a5bbbcb89a3f570f5364364e7dc5830b16f19367cec64b723cc62ddb3078b4ee0f0ce5d244584279bc98369c8ee9e5959a27#npm:1.4.0", {\ "packageLocation": "./.yarn/__virtual__/@webpack-cli-info-virtual-c12065ef90/0/cache/@webpack-cli-info-npm-1.4.0-4a26ccee64-6385b1e2c5.zip/node_modules/@webpack-cli/info/",\ "packageDependencies": [\ @@ -6249,23 +6192,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:0249f7ceb5542d6b732af2b44f9fcd16c60be8b8440f0f3abc6a5de67aabcff731bc3bc83f3067ab2f9037661176f001f89208fcea9e8962835fd43d0aabe88a#npm:1.6.0", {\ - "packageLocation": "./.yarn/__virtual__/@webpack-cli-serve-virtual-5bd62e0e2f/0/cache/@webpack-cli-serve-npm-1.6.0-c7b35aa4ef-3fd2e5f365.zip/node_modules/@webpack-cli/serve/",\ - "packageDependencies": [\ - ["@types/webpack-cli", null],\ - ["@types/webpack-dev-server", null],\ - ["@webpack-cli/serve", "virtual:0249f7ceb5542d6b732af2b44f9fcd16c60be8b8440f0f3abc6a5de67aabcff731bc3bc83f3067ab2f9037661176f001f89208fcea9e8962835fd43d0aabe88a#npm:1.6.0"],\ - ["webpack-cli", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:4.9.1"],\ - ["webpack-dev-server", null]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "@types/webpack-dev-server",\ - "webpack-cli",\ - "webpack-dev-server"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:16885aa8448c33477ea2cd730ac3a5bbbcb89a3f570f5364364e7dc5830b16f19367cec64b723cc62ddb3078b4ee0f0ce5d244584279bc98369c8ee9e5959a27#npm:1.6.0", {\ "packageLocation": "./.yarn/__virtual__/@webpack-cli-serve-virtual-f46be14e99/0/cache/@webpack-cli-serve-npm-1.6.0-c7b35aa4ef-3fd2e5f365.zip/node_modules/@webpack-cli/serve/",\ "packageDependencies": [\ @@ -14847,22 +14773,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.0.0", {\ - "packageLocation": "./.yarn/__virtual__/karma-webpack-virtual-7645831669/0/cache/karma-webpack-npm-5.0.0-d7c66b2a8a-9bd565adbc.zip/node_modules/karma-webpack/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["glob", "npm:7.2.3"],\ - ["karma-webpack", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.0.0"],\ - ["minimatch", "npm:3.1.2"],\ - ["webpack", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.105.0"],\ - ["webpack-merge", "npm:4.2.2"]\ - ],\ - "packagePeers": [\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:897449be52adaf897095babe74bfcc926f5d083ac9aac6fbc5e260f1f71b7e3ada3f268ac9457d3009b9c6fca51fe685ec21fbed21ec5087df84ab489b719456#npm:5.0.0", {\ "packageLocation": "./.yarn/__virtual__/karma-webpack-virtual-91170ce8e7/0/cache/karma-webpack-npm-5.0.0-d7c66b2a8a-9bd565adbc.zip/node_modules/karma-webpack/",\ "packageDependencies": [\ @@ -20629,36 +20539,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:ac08d1802148a23c9b3f7a8749cbaaded258daba072aa6e761629ffa5f56f8f3e419894607861c1572ce1b35ea47b30ac3d38935ced0e4c1e2540eff8deb5e8f#npm:5.3.16", {\ - "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-dbe00d6a37/0/cache/terser-webpack-plugin-npm-5.3.16-7d59a4385c-09dfbff602.zip/node_modules/terser-webpack-plugin/",\ - "packageDependencies": [\ - ["@jridgewell/trace-mapping", "npm:0.3.25"],\ - ["@swc/core", null],\ - ["@types/esbuild", null],\ - ["@types/swc__core", null],\ - ["@types/uglify-js", null],\ - ["@types/webpack", null],\ - ["esbuild", null],\ - ["jest-worker", "npm:27.5.1"],\ - ["schema-utils", "npm:4.3.0"],\ - ["serialize-javascript", "npm:7.0.4"],\ - ["terser", "npm:5.39.0"],\ - ["terser-webpack-plugin", "virtual:ac08d1802148a23c9b3f7a8749cbaaded258daba072aa6e761629ffa5f56f8f3e419894607861c1572ce1b35ea47b30ac3d38935ced0e4c1e2540eff8deb5e8f#npm:5.3.16"],\ - ["uglify-js", null],\ - ["webpack", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.105.0"]\ - ],\ - "packagePeers": [\ - "@swc/core",\ - "@types/esbuild",\ - "@types/swc__core",\ - "@types/uglify-js",\ - "@types/webpack",\ - "esbuild",\ - "uglify-js",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.3.11", {\ "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-55a46e8527/0/cache/terser-webpack-plugin-npm-5.3.11-1a5bba0883-a8f7c92c75.zip/node_modules/terser-webpack-plugin/",\ "packageDependencies": [\ @@ -22375,44 +22255,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.105.0", {\ - "packageLocation": "./.yarn/__virtual__/webpack-virtual-ac08d18021/0/cache/webpack-npm-5.105.0-ff5d0a44ab-95e0a0f04f.zip/node_modules/webpack/",\ - "packageDependencies": [\ - ["@types/eslint-scope", "npm:3.7.7"],\ - ["@types/estree", "npm:1.0.8"],\ - ["@types/json-schema", "npm:7.0.15"],\ - ["@types/webpack-cli", null],\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-edit", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-parser", "npm:1.14.1"],\ - ["acorn", "npm:8.15.0"],\ - ["acorn-import-phases", "virtual:4007bcbf54b6a1fc892cfdfa87d57c16a3d9d04f40d8627892c15aab1e876c161341a8d50416117b4d1b25d4709d289b42728585c69b09237cab14322e1446c6#npm:1.0.4"],\ - ["browserslist", "npm:4.28.1"],\ - ["chrome-trace-event", "npm:1.0.3"],\ - ["enhanced-resolve", "npm:5.19.0"],\ - ["es-module-lexer", "npm:2.0.0"],\ - ["eslint-scope", "npm:5.1.1"],\ - ["events", "npm:3.3.0"],\ - ["glob-to-regexp", "npm:0.4.1"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["json-parse-even-better-errors", "npm:2.3.1"],\ - ["loader-runner", "npm:4.3.1"],\ - ["mime-types", "npm:2.1.34"],\ - ["neo-async", "npm:2.6.2"],\ - ["schema-utils", "npm:4.3.3"],\ - ["tapable", "npm:2.3.0"],\ - ["terser-webpack-plugin", "virtual:ac08d1802148a23c9b3f7a8749cbaaded258daba072aa6e761629ffa5f56f8f3e419894607861c1572ce1b35ea47b30ac3d38935ced0e4c1e2540eff8deb5e8f#npm:5.3.16"],\ - ["watchpack", "npm:2.5.1"],\ - ["webpack", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.105.0"],\ - ["webpack-cli", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:4.9.1"],\ - ["webpack-sources", "npm:3.3.4"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "webpack-cli"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:897449be52adaf897095babe74bfcc926f5d083ac9aac6fbc5e260f1f71b7e3ada3f268ac9457d3009b9c6fca51fe685ec21fbed21ec5087df84ab489b719456#npm:5.105.0", {\ "packageLocation": "./.yarn/__virtual__/webpack-virtual-48ff67a0e8/0/cache/webpack-npm-5.105.0-ff5d0a44ab-95e0a0f04f.zip/node_modules/webpack/",\ "packageDependencies": [\ @@ -22612,47 +22454,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:4.9.1", {\ - "packageLocation": "./.yarn/__virtual__/webpack-cli-virtual-0249f7ceb5/0/cache/webpack-cli-npm-4.9.1-1b8a5f360f-14eb69cec6.zip/node_modules/webpack-cli/",\ - "packageDependencies": [\ - ["@discoveryjs/json-ext", "npm:0.5.5"],\ - ["@types/webpack", null],\ - ["@types/webpack-bundle-analyzer", null],\ - ["@types/webpack-cli__generators", null],\ - ["@types/webpack-cli__migrate", null],\ - ["@types/webpack-dev-server", null],\ - ["@webpack-cli/configtest", "virtual:0249f7ceb5542d6b732af2b44f9fcd16c60be8b8440f0f3abc6a5de67aabcff731bc3bc83f3067ab2f9037661176f001f89208fcea9e8962835fd43d0aabe88a#npm:1.1.0"],\ - ["@webpack-cli/generators", null],\ - ["@webpack-cli/info", "virtual:0249f7ceb5542d6b732af2b44f9fcd16c60be8b8440f0f3abc6a5de67aabcff731bc3bc83f3067ab2f9037661176f001f89208fcea9e8962835fd43d0aabe88a#npm:1.4.0"],\ - ["@webpack-cli/migrate", null],\ - ["@webpack-cli/serve", "virtual:0249f7ceb5542d6b732af2b44f9fcd16c60be8b8440f0f3abc6a5de67aabcff731bc3bc83f3067ab2f9037661176f001f89208fcea9e8962835fd43d0aabe88a#npm:1.6.0"],\ - ["colorette", "npm:2.0.20"],\ - ["commander", "npm:7.2.0"],\ - ["execa", "npm:5.1.1"],\ - ["fastest-levenshtein", "npm:1.0.12"],\ - ["import-local", "npm:3.0.3"],\ - ["interpret", "npm:2.2.0"],\ - ["rechoir", "npm:0.7.1"],\ - ["webpack", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:5.105.0"],\ - ["webpack-bundle-analyzer", null],\ - ["webpack-cli", "virtual:45f214395bc38640da4dc5e940482d5df0572c5384e0262802601d1973e71077ec8bbd76b77eafa4c0550b706b664abd84d63fd67a5897139f0b2675530fc84f#npm:4.9.1"],\ - ["webpack-dev-server", null],\ - ["webpack-merge", "npm:5.8.0"]\ - ],\ - "packagePeers": [\ - "@types/webpack-bundle-analyzer",\ - "@types/webpack-cli__generators",\ - "@types/webpack-cli__migrate",\ - "@types/webpack-dev-server",\ - "@types/webpack",\ - "@webpack-cli/generators",\ - "@webpack-cli/migrate",\ - "webpack-bundle-analyzer",\ - "webpack-dev-server",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:897449be52adaf897095babe74bfcc926f5d083ac9aac6fbc5e260f1f71b7e3ada3f268ac9457d3009b9c6fca51fe685ec21fbed21ec5087df84ab489b719456#npm:4.9.1", {\ "packageLocation": "./.yarn/__virtual__/webpack-cli-virtual-a5a6463a0b/0/cache/webpack-cli-npm-4.9.1-1b8a5f360f-14eb69cec6.zip/node_modules/webpack-cli/",\ "packageDependencies": [\ diff --git a/packages/wallet-lib/fixtures/DummyWorker.js b/packages/wallet-lib/fixtures/DummyWorker.js index e5c4c054892..21397e49a50 100644 --- a/packages/wallet-lib/fixtures/DummyWorker.js +++ b/packages/wallet-lib/fixtures/DummyWorker.js @@ -1,4 +1,4 @@ -const Worker = require('../src/plugins/Worker'); +import Worker from '../src/plugins/Worker.js'; class DummyWorker extends Worker { constructor() { @@ -15,4 +15,4 @@ class DummyWorker extends Worker { console.log('Dummy worker successfully did nothing'); } } -module.exports = DummyWorker; +export default DummyWorker; diff --git a/packages/wallet-lib/fixtures/plugins/FaultyWorker.js b/packages/wallet-lib/fixtures/plugins/FaultyWorker.js index 1a65f0db92f..f32cbfc333f 100644 --- a/packages/wallet-lib/fixtures/plugins/FaultyWorker.js +++ b/packages/wallet-lib/fixtures/plugins/FaultyWorker.js @@ -1,4 +1,4 @@ -const Worker = require('../../src/plugins/Worker'); +import Worker from '../../src/plugins/Worker.js'; class FaultyWorker extends Worker { constructor() { @@ -19,4 +19,4 @@ class FaultyWorker extends Worker { } } -module.exports = FaultyWorker; +export default FaultyWorker; diff --git a/packages/wallet-lib/fixtures/plugins/WorkingWorker.js b/packages/wallet-lib/fixtures/plugins/WorkingWorker.js index 80d52494a1d..7d25f89599b 100644 --- a/packages/wallet-lib/fixtures/plugins/WorkingWorker.js +++ b/packages/wallet-lib/fixtures/plugins/WorkingWorker.js @@ -1,4 +1,4 @@ -const Worker = require('../../src/plugins/Worker'); +import Worker from '../../src/plugins/Worker.js'; class WorkingWorker extends Worker { constructor() { @@ -22,4 +22,4 @@ class WorkingWorker extends Worker { storage.workingWorkerPass += 1; } } -module.exports = WorkingWorker; +export default WorkingWorker; diff --git a/packages/wallet-lib/fixtures/strategies/craftedGenerousMinerStrategy.js b/packages/wallet-lib/fixtures/strategies/craftedGenerousMinerStrategy.js index e7823cdaa8a..0b9df25a230 100644 --- a/packages/wallet-lib/fixtures/strategies/craftedGenerousMinerStrategy.js +++ b/packages/wallet-lib/fixtures/strategies/craftedGenerousMinerStrategy.js @@ -1,7 +1,7 @@ -const TransactionEstimator = require('../../src/utils/coinSelections/TransactionEstimator.js'); -const { sortAndVerifyUTXOS } = require('../../src/utils/coinSelections/helpers'); +import TransactionEstimator from '../../src/utils/coinSelections/TransactionEstimator.js'; +import { sortAndVerifyUTXOS } from '../../src/utils/coinSelections/helpers/index.js'; -module.exports = function craftedGenerousMinerStrategy(utxosList, outputsList, deductFee = false, feeCategory = 'normal') { +export default function craftedGenerousMinerStrategy(utxosList, outputsList, deductFee = false, feeCategory = 'normal') { const txEstimator = new TransactionEstimator(feeCategory); // We add our outputs, theses will change only in case deductfee being true @@ -48,4 +48,4 @@ module.exports = function craftedGenerousMinerStrategy(utxosList, outputsList, d estimatedFee, utxosValue: txEstimator.getInValue(), }; -}; +} diff --git a/packages/wallet-lib/fixtures/wallets/2a331817b9d6bf85100ef0/getFixtureAccountWithStorage.js b/packages/wallet-lib/fixtures/wallets/2a331817b9d6bf85100ef0/getFixtureAccountWithStorage.js index 89579f3c9e4..68b9dc4ea01 100644 --- a/packages/wallet-lib/fixtures/wallets/2a331817b9d6bf85100ef0/getFixtureAccountWithStorage.js +++ b/packages/wallet-lib/fixtures/wallets/2a331817b9d6bf85100ef0/getFixtureAccountWithStorage.js @@ -1,13 +1,13 @@ -const walletStoreMock = require('./wallet-store.json'); -const chainStoreMock = require('./chain-store.json'); -const Storage = require('../../../src/types/Storage/Storage'); -const { KeyChainStore, DerivableKeyChain } = require('../../../src/index'); -const createPathsForTransactions = require("../../../src/types/Account/methods/createPathsForTransactions"); -const addPathsToStore = require("../../../src/types/Account/methods/addPathsToStore"); -const generateNewPaths = require("../../../src/types/Account/methods/generateNewPaths"); -const addDefaultPaths = require("../../../src/types/Account/methods/addDefaultPaths"); +import walletStoreMock from './wallet-store.json' with { type: 'json' }; +import chainStoreMock from './chain-store.json' with { type: 'json' }; +import Storage from '../../../src/types/Storage/Storage.js'; +import { KeyChainStore, DerivableKeyChain } from '../../../src/index.js'; +import createPathsForTransactions from '../../../src/types/Account/methods/createPathsForTransactions.js'; +import addPathsToStore from '../../../src/types/Account/methods/addPathsToStore.js'; +import generateNewPaths from '../../../src/types/Account/methods/generateNewPaths.js'; +import addDefaultPaths from '../../../src/types/Account/methods/addDefaultPaths.js'; -module.exports = (opts = {}) => { +export default (opts = {}) => { const { walletId } = walletStoreMock; const mockedAccount = { diff --git a/packages/wallet-lib/fixtures/wallets/apart-trip-dignity/categorizeTransactions.expectedResults.js b/packages/wallet-lib/fixtures/wallets/apart-trip-dignity/categorizeTransactions.expectedResults.js index 10e736a112f..8ba3e41f564 100644 --- a/packages/wallet-lib/fixtures/wallets/apart-trip-dignity/categorizeTransactions.expectedResults.js +++ b/packages/wallet-lib/fixtures/wallets/apart-trip-dignity/categorizeTransactions.expectedResults.js @@ -1,4 +1,4 @@ -const transactionsWithMetadataFixtures = require("./transactions-with-metadata.json"); +import transactionsWithMetadataFixtures from './transactions-with-metadata.json' with { type: 'json' }; const expectedResultTx1 = { from: [ {address: 'ygrRyPRf9vSHnP1ieoRRvY9THtFbTMc66e', addressType: "unknown"}, @@ -291,7 +291,7 @@ const expectedResultTx11 = { feeImpact: 394 }; -module.exports = [ +export default [ expectedResultTx1, expectedResultTx2, expectedResultTx3, diff --git a/packages/wallet-lib/fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js b/packages/wallet-lib/fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js index f5568b19bb8..dc88ce5db37 100644 --- a/packages/wallet-lib/fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js +++ b/packages/wallet-lib/fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js @@ -1,13 +1,13 @@ -const walletStoreMock = require('./wallet-store.json'); -const chainStoreMock = require('./chain-store.json'); -const Storage = require('../../../src/types/Storage/Storage'); -const { KeyChainStore, DerivableKeyChain } = require('../../../src/index'); -const createPathsForTransactions = require('../../../src/types/Account/methods/createPathsForTransactions'); -const addPathsToStore = require("../../../src/types/Account/methods/addPathsToStore"); -const generateNewPaths = require("../../../src/types/Account/methods/generateNewPaths"); -const addDefaultPaths = require("../../../src/types/Account/methods/addDefaultPaths"); +import walletStoreMock from './wallet-store.json' with { type: 'json' }; +import chainStoreMock from './chain-store.json' with { type: 'json' }; +import Storage from '../../../src/types/Storage/Storage.js'; +import { KeyChainStore, DerivableKeyChain } from '../../../src/index.js'; +import createPathsForTransactions from '../../../src/types/Account/methods/createPathsForTransactions.js'; +import addPathsToStore from '../../../src/types/Account/methods/addPathsToStore.js'; +import generateNewPaths from '../../../src/types/Account/methods/generateNewPaths.js'; +import addDefaultPaths from '../../../src/types/Account/methods/addDefaultPaths.js'; -module.exports = (opts = {}) => { +export default (opts = {}) => { const { walletId } = walletStoreMock; const mockedWallet = { diff --git a/packages/wallet-lib/karma/karma.conf.js b/packages/wallet-lib/karma/karma.conf.js deleted file mode 100644 index 0a2ac6fdcfb..00000000000 --- a/packages/wallet-lib/karma/karma.conf.js +++ /dev/null @@ -1,14 +0,0 @@ -const options = require('./options'); - -module.exports = (config) => { - config.set({ - ...options, - files: [ - '../src/test/karma/loader.js', - ], - preprocessors: { - '../src/test/karma/loader.js': ['webpack', 'sourcemap'], - }, - logLevel: config.LOG_INFO, - }); -}; diff --git a/packages/wallet-lib/karma/karma.functional.conf.js b/packages/wallet-lib/karma/karma.functional.conf.js deleted file mode 100644 index 1756c0010e3..00000000000 --- a/packages/wallet-lib/karma/karma.functional.conf.js +++ /dev/null @@ -1,14 +0,0 @@ -const options = require('./options'); - -module.exports = (config) => { - config.set({ - ...options, - logLevel: config.LOG_INFO, - files: [ - '../tests/functional/**.spec.js', - ], - preprocessors: { - '../tests/functional/**.spec.js': ['webpack', 'sourcemap'], - }, - }); -}; diff --git a/packages/wallet-lib/karma/options.js b/packages/wallet-lib/karma/options.js deleted file mode 100644 index f772d0a099d..00000000000 --- a/packages/wallet-lib/karma/options.js +++ /dev/null @@ -1,66 +0,0 @@ -/* eslint-disable import-x/no-extraneous-dependencies */ -const webpack = require('webpack'); -const dotenvSafe = require('dotenv-safe'); - -const karmaMocha = require('karma-mocha'); -const karmaMochaReporter = require('karma-mocha-reporter'); -const karmaChai = require('karma-chai'); -const karmaChromeLauncher = require('karma-chrome-launcher'); -const karmaFirefoxLauncher = require('karma-firefox-launcher'); -const karmaSourcemapLoader = require('karma-sourcemap-loader'); -const karmaWebpack = require('karma-webpack'); - -const webpackConfig = require('../webpack.config'); - -let env = {}; -if (process.env.LOAD_ENV) { - const dotenvResult = dotenvSafe.config(); - if (dotenvResult.error) { - throw dotenvResult.error; - } - env = dotenvResult.parsed; -} - -module.exports = { - client: { - mocha: { - bail: true, - }, - }, - frameworks: ['mocha', 'chai', 'webpack'], - webpack: { - mode: 'development', - devtool: 'inline-source-map', - plugins: [ - ...webpackConfig.plugins, - new webpack.EnvironmentPlugin( - env, - ), - ], - resolve: webpackConfig.resolve, - }, - reporters: ['mocha'], - port: 9876, - colors: true, - autoWatch: false, - browsers: ['ChromeHeadlessInsecure'], - singleRun: false, - concurrency: Infinity, - browserNoActivityTimeout: 10 * 60 * 1000, - plugins: [ - karmaMocha, - karmaMochaReporter, - karmaChai, - karmaChromeLauncher, - karmaFirefoxLauncher, - karmaSourcemapLoader, - karmaWebpack, - ], - customLaunchers: { - ChromeHeadlessInsecure: { - base: 'ChromeHeadless', - flags: ['--allow-insecure-localhost'], - displayName: 'Chrome w/o security', - }, - }, -}; diff --git a/packages/wallet-lib/package.json b/packages/wallet-lib/package.json index 73e3c63688b..350bf135856 100644 --- a/packages/wallet-lib/package.json +++ b/packages/wallet-lib/package.json @@ -2,21 +2,24 @@ "name": "@dashevo/wallet-lib", "version": "10.1.0-dev.5", "description": "Light wallet library for Dash", + "type": "module", "main": "src/index.js", - "unpkg": "dist/wallet-lib.min.js", "types": "src/index.d.ts", + "exports": { + ".": "./src/index.js", + "./src/*": "./src/*" + }, + "engines": { + "node": ">=18.18" + }, "scripts": { - "build:web": "webpack --stats-error-details", "lint": "eslint .", "lint:fix": "eslint . --fix", "test:unit": "nyc yarn mocha 'src/**/*.spec.js'", "test:functional": "LOAD_ENV=true nyc yarn run mocha 'tests/functional/*.js'", "test:integration": "nyc yarn run mocha 'tests/integration/**/*.spec.js'", - "test:browsers": "karma start ./karma/karma.conf.js --single-run", - "test:browsers:functional": "LOAD_ENV=true karma start ./karma/karma.functional.conf.js --single-run", "test:types": "yarn pnpify tsd", - "test": "yarn run test:types && yarn run test:unit && yarn run test:integration && yarn run test:browsers", - "prepublishOnly": "yarn run build:web" + "test": "yarn run test:types && yarn run test:unit && yarn run test:integration" }, "ultra": { "concurrent": [ @@ -24,7 +27,6 @@ ] }, "files": [ - "dist", "docs", "examples", "src" @@ -53,47 +55,21 @@ "cbor": "^8.0.0", "crypto-js": "^4.2.0", "lodash": "^4.17.23", - "pbkdf2": "^3.1.3", - "setimmediate": "^1.0.5", - "winston": "^3.2.1" + "pbkdf2": "^3.1.3" }, "devDependencies": { "@dashevo/dash-spv": "workspace:*", - "assert": "^2.0.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", "chai": "^4.3.10", "chai-as-promised": "^7.1.1", - "crypto-browserify": "^3.12.1", "dirty-chai": "^2.0.1", "dotenv-safe": "^8.2.0", "eslint": "^9.18.0", "events": "^3.3.0", - "https-browserify": "^1.0.0", - "karma": "^6.4.3", - "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^3.1.0", - "karma-firefox-launcher": "^2.1.2", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^5.0.0", "mocha": "^11.1.0", - "node-inspect-extracted": "^1.0.8", "nyc": "^15.1.0", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", "sinon": "^18.0.1", "sinon-chai": "^3.7.0", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", "tsd": "^0.28.1", - "url": "^0.11.3", - "util": "^0.12.4", - "wasm-x11-hash": "~0.0.2", - "webpack": "^5.104.0", - "webpack-cli": "^4.9.1" + "wasm-x11-hash": "~0.0.2" } } diff --git a/packages/wallet-lib/src/CONSTANTS.js b/packages/wallet-lib/src/CONSTANTS.js index a367f1269cf..4af46546561 100644 --- a/packages/wallet-lib/src/CONSTANTS.js +++ b/packages/wallet-lib/src/CONSTANTS.js @@ -115,4 +115,39 @@ const CONSTANTS = { BLOOM_FALSE_POSITIVE_RATE: 0.0001, NULL_HASH: '0000000000000000000000000000000000000000000000000000000000000000', }; -module.exports = CONSTANTS; +export const { + BIP45, + BIP44, + DUFFS_PER_DASH, + BIP44_ADDRESS_GAP, + SECURE_TRANSACTION_CONFIRMATIONS_NB, + BIP32__ROOT_PATH, + BIP44_LIVENET_ROOT_PATH, + BIP44_TESTNET_ROOT_PATH, + DIP9_LIVENET_ROOT_PATH, + DIP9_TESTNET_ROOT_PATH, + UTXO_SELECTION_MAX_SINGLE_UTXO_FACTOR, + UTXO_SELECTION_MIN_TX_AMOUNT_VS_UTXO_FACTOR, + UTXO_SELECTION_MAX_FEE_VS_TX_AMOUNT_FACTOR, + UTXO_SELECTION_MAX_FEE_VS_SINGLE_UTXO_FEE_FACTOR, + MAX_STANDARD_TX_SIZE, + MAX_P2SH_SIGOPS, + COINBASE_MATURITY, + UTXO_CHAINED_SPENDING_LIMIT_FOR_TX, + FEES, + UNCONFIRMED_TRANSACTION_STATUS_CODE, + WALLET_TYPES, + INJECTION_LISTS, + TRANSACTION_HISTORY_TYPES, + STORAGE, + TXIN_OUTPOINT_TXID_BYTES, + TXIN_OUTPOINT_INDEX_BYTES, + TXIN_SEQUENCE_BYTES, + TXOUT_DUFFS_VALUE_BYTES, + VERSION_BYTES, + N_LOCKTIME_BYTES, + BLOOM_FALSE_POSITIVE_RATE, + NULL_HASH, +} = CONSTANTS; + +export default CONSTANTS; \ No newline at end of file diff --git a/packages/wallet-lib/src/EVENTS.js b/packages/wallet-lib/src/EVENTS.js index 804bcf44e6e..a8be052f07f 100644 --- a/packages/wallet-lib/src/EVENTS.js +++ b/packages/wallet-lib/src/EVENTS.js @@ -1,30 +1,59 @@ -module.exports = { - PREFETCHED: 'prefetched', - CREATED: 'created', - STARTED: 'started', - READY: 'ready', - CONFIRMED_BALANCE_CHANGED: 'confirmed_balance_changed', - UNCONFIRMED_BALANCE_CHANGED: 'unconfirmed_balance_changed', - BLOCKHEIGHT_CHANGED: 'blockheight_changed', - BLOCK: 'block', - TRANSACTION: 'transaction', - BLOCKHEADER: 'blockheader', - FETCHED_ADDRESS: 'FETCHED/ADDRESS', - ERROR_UPDATE_ADDRESS: 'ERROR/UPDATE_ADDRESS', - FETCHED_TRANSACTION: 'FETCHED/TRANSACTION', - FETCHED_UNCONFIRMED_TRANSACTION: 'FETCHED/UNCONFIRMED_TRANSACTION', - FETCHED_CONFIRMED_TRANSACTION: 'FETCHED/CONFIRMED_TRANSACTION', - CONFIRMED_TRANSACTION: 'CONFIRMED_TRANSACTION', - GENERATED_ADDRESS: 'GENERATED_ADDRESS', - DISCOVERY_STARTED: 'DISCOVERY_STARTED', - CONFIGURED: 'CONFIGURED', - INITIALIZED: 'INITIALIZED', - SAVE_STATE_FAILED: 'SAVE_STATE_FAILED', - SAVE_STATE_SUCCESS: 'SAVE_STATE_SUCCESS', - REHYDRATE_STATE_FAILED: 'REHYDRATE_STATE_FAILED', - REHYDRATE_STATE_SUCCESS: 'REHYDRATE_STATE_SUCCESS', - INSTANT_LOCK: 'INSTANT_LOCK', - TX_METADATA: 'TX_METADATA', - HEADERS_SYNC_PROGRESS: 'HEADERS_SYNC_PROGRESS', - TRANSACTIONS_SYNC_PROGRESS: 'TRANSACTIONS_SYNC_PROGRESS', +export const PREFETCHED = 'prefetched'; +export const CREATED = 'created'; +export const STARTED = 'started'; +export const READY = 'ready'; +export const CONFIRMED_BALANCE_CHANGED = 'confirmed_balance_changed'; +export const UNCONFIRMED_BALANCE_CHANGED = 'unconfirmed_balance_changed'; +export const BLOCKHEIGHT_CHANGED = 'blockheight_changed'; +export const BLOCK = 'block'; +export const TRANSACTION = 'transaction'; +export const BLOCKHEADER = 'blockheader'; +export const FETCHED_ADDRESS = 'FETCHED/ADDRESS'; +export const ERROR_UPDATE_ADDRESS = 'ERROR/UPDATE_ADDRESS'; +export const FETCHED_TRANSACTION = 'FETCHED/TRANSACTION'; +export const FETCHED_UNCONFIRMED_TRANSACTION = 'FETCHED/UNCONFIRMED_TRANSACTION'; +export const FETCHED_CONFIRMED_TRANSACTION = 'FETCHED/CONFIRMED_TRANSACTION'; +export const CONFIRMED_TRANSACTION = 'CONFIRMED_TRANSACTION'; +export const GENERATED_ADDRESS = 'GENERATED_ADDRESS'; +export const DISCOVERY_STARTED = 'DISCOVERY_STARTED'; +export const CONFIGURED = 'CONFIGURED'; +export const INITIALIZED = 'INITIALIZED'; +export const SAVE_STATE_FAILED = 'SAVE_STATE_FAILED'; +export const SAVE_STATE_SUCCESS = 'SAVE_STATE_SUCCESS'; +export const REHYDRATE_STATE_FAILED = 'REHYDRATE_STATE_FAILED'; +export const REHYDRATE_STATE_SUCCESS = 'REHYDRATE_STATE_SUCCESS'; +export const INSTANT_LOCK = 'INSTANT_LOCK'; +export const TX_METADATA = 'TX_METADATA'; +export const HEADERS_SYNC_PROGRESS = 'HEADERS_SYNC_PROGRESS'; +export const TRANSACTIONS_SYNC_PROGRESS = 'TRANSACTIONS_SYNC_PROGRESS'; + +export default { + PREFETCHED, + CREATED, + STARTED, + READY, + CONFIRMED_BALANCE_CHANGED, + UNCONFIRMED_BALANCE_CHANGED, + BLOCKHEIGHT_CHANGED, + BLOCK, + TRANSACTION, + BLOCKHEADER, + FETCHED_ADDRESS, + ERROR_UPDATE_ADDRESS, + FETCHED_TRANSACTION, + FETCHED_UNCONFIRMED_TRANSACTION, + FETCHED_CONFIRMED_TRANSACTION, + CONFIRMED_TRANSACTION, + GENERATED_ADDRESS, + DISCOVERY_STARTED, + CONFIGURED, + INITIALIZED, + SAVE_STATE_FAILED, + SAVE_STATE_SUCCESS, + REHYDRATE_STATE_FAILED, + REHYDRATE_STATE_SUCCESS, + INSTANT_LOCK, + TX_METADATA, + HEADERS_SYNC_PROGRESS, + TRANSACTIONS_SYNC_PROGRESS, }; diff --git a/packages/wallet-lib/src/adapters/InMem.js b/packages/wallet-lib/src/adapters/InMem.js index f17cb5606ae..5e79e56ba1b 100644 --- a/packages/wallet-lib/src/adapters/InMem.js +++ b/packages/wallet-lib/src/adapters/InMem.js @@ -17,4 +17,4 @@ class InMem { return this.keys[key] || null; } } -module.exports = InMem; +export default InMem; \ No newline at end of file diff --git a/packages/wallet-lib/src/adapters/inMem.spec.js b/packages/wallet-lib/src/adapters/inMem.spec.js index 122a74421bb..a2a96487839 100644 --- a/packages/wallet-lib/src/adapters/inMem.spec.js +++ b/packages/wallet-lib/src/adapters/inMem.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const InMem = require('./InMem'); +import { expect } from 'chai'; +import InMem from './InMem.js'; const inMem = new InMem(); diff --git a/packages/wallet-lib/src/errors/BlockHeaderNotInStore.js b/packages/wallet-lib/src/errors/BlockHeaderNotInStore.js index 182fe8e767b..8dd177891b9 100644 --- a/packages/wallet-lib/src/errors/BlockHeaderNotInStore.js +++ b/packages/wallet-lib/src/errors/BlockHeaderNotInStore.js @@ -1,8 +1,8 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class BlockHeaderNotInStore extends WalletLibError { constructor(identifier) { super(`Blockheader is not in store: ${identifier}`); } } -module.exports = BlockHeaderNotInStore; +export default BlockHeaderNotInStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/CoinSelectionUnsufficientUTXOS.js b/packages/wallet-lib/src/errors/CoinSelectionUnsufficientUTXOS.js index df5f0c91f6a..c06dda03896 100644 --- a/packages/wallet-lib/src/errors/CoinSelectionUnsufficientUTXOS.js +++ b/packages/wallet-lib/src/errors/CoinSelectionUnsufficientUTXOS.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class CoinSelectionUnsufficientUTXOS extends WalletLibError { constructor(info) { @@ -10,4 +10,4 @@ class CoinSelectionUnsufficientUTXOS extends WalletLibError { super(getErrorMessageOf(info)); } } -module.exports = CoinSelectionUnsufficientUTXOS; +export default CoinSelectionUnsufficientUTXOS; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/CreateTransactionError.js b/packages/wallet-lib/src/errors/CreateTransactionError.js index 8eef2c63a7f..d030e910be2 100644 --- a/packages/wallet-lib/src/errors/CreateTransactionError.js +++ b/packages/wallet-lib/src/errors/CreateTransactionError.js @@ -1,5 +1,5 @@ -const WalletLibError = require('./WalletLibError'); -const CoinSelectionUnsufficientUTXOS = require('./CoinSelectionUnsufficientUTXOS'); +import WalletLibError from './WalletLibError.js'; +import CoinSelectionUnsufficientUTXOS from './CoinSelectionUnsufficientUTXOS.js'; class CreateTransactionError extends WalletLibError { constructor(e) { @@ -10,4 +10,4 @@ class CreateTransactionError extends WalletLibError { } } } -module.exports = CreateTransactionError; +export default CreateTransactionError; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/IndentityIdReplaceError.js b/packages/wallet-lib/src/errors/IndentityIdReplaceError.js index 82bfce3bb0b..af4b1bfef55 100644 --- a/packages/wallet-lib/src/errors/IndentityIdReplaceError.js +++ b/packages/wallet-lib/src/errors/IndentityIdReplaceError.js @@ -1,6 +1,6 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class IdentityIdReplaceError extends WalletLibError { } -module.exports = IdentityIdReplaceError; +export default IdentityIdReplaceError; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InjectionErrorCannotInject.js b/packages/wallet-lib/src/errors/InjectionErrorCannotInject.js index 26ad1077ada..320984376f2 100644 --- a/packages/wallet-lib/src/errors/InjectionErrorCannotInject.js +++ b/packages/wallet-lib/src/errors/InjectionErrorCannotInject.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InjectionErrorCannotInject extends WalletLibError { constructor(pluginName, reason) { @@ -9,4 +9,4 @@ class InjectionErrorCannotInject extends WalletLibError { } } -module.exports = InjectionErrorCannotInject; +export default InjectionErrorCannotInject; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InjectionErrorCannotInjectUnknownDependency.js b/packages/wallet-lib/src/errors/InjectionErrorCannotInjectUnknownDependency.js index 203c5a43869..0b5e89b4610 100644 --- a/packages/wallet-lib/src/errors/InjectionErrorCannotInjectUnknownDependency.js +++ b/packages/wallet-lib/src/errors/InjectionErrorCannotInjectUnknownDependency.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InjectionErrorCannotInjectUnknownDependency extends WalletLibError { constructor(pluginName, dependencyName) { @@ -9,4 +9,4 @@ class InjectionErrorCannotInjectUnknownDependency extends WalletLibError { } } -module.exports = InjectionErrorCannotInjectUnknownDependency; +export default InjectionErrorCannotInjectUnknownDependency; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InjectionToPluginUnallowed.js b/packages/wallet-lib/src/errors/InjectionToPluginUnallowed.js index 6d6767f0d32..7b1f0bd9ed3 100644 --- a/packages/wallet-lib/src/errors/InjectionToPluginUnallowed.js +++ b/packages/wallet-lib/src/errors/InjectionToPluginUnallowed.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InjectionToPluginUnallowed extends WalletLibError { constructor(currentPluginName, injectingPluginName) { @@ -6,4 +6,4 @@ class InjectionToPluginUnallowed extends WalletLibError { } } -module.exports = InjectionToPluginUnallowed; +export default InjectionToPluginUnallowed; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InstantLockTimeoutError.js b/packages/wallet-lib/src/errors/InstantLockTimeoutError.js index a2f69ee6959..59046cd0bdd 100644 --- a/packages/wallet-lib/src/errors/InstantLockTimeoutError.js +++ b/packages/wallet-lib/src/errors/InstantLockTimeoutError.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InstantLockTimeoutError extends WalletLibError { /** @@ -9,4 +9,4 @@ class InstantLockTimeoutError extends WalletLibError { } } -module.exports = InstantLockTimeoutError; +export default InstantLockTimeoutError; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InvalidAddress.js b/packages/wallet-lib/src/errors/InvalidAddress.js index fd347b5c936..ac565431101 100644 --- a/packages/wallet-lib/src/errors/InvalidAddress.js +++ b/packages/wallet-lib/src/errors/InvalidAddress.js @@ -1,8 +1,8 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InvalidAddress extends WalletLibError { constructor(address) { super(`Address Invalid : ${address} `); } } -module.exports = InvalidAddress; +export default InvalidAddress; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InvalidAddressObject.js b/packages/wallet-lib/src/errors/InvalidAddressObject.js index b073e539493..96544b38538 100644 --- a/packages/wallet-lib/src/errors/InvalidAddressObject.js +++ b/packages/wallet-lib/src/errors/InvalidAddressObject.js @@ -1,5 +1,5 @@ -const is = require('../utils/is'); -const WalletLibError = require('./WalletLibError'); +import is from '../utils/is.js'; +import WalletLibError from './WalletLibError.js'; class InvalidAddressObject extends WalletLibError { constructor(addressObject) { @@ -30,4 +30,4 @@ class InvalidAddressObject extends WalletLibError { super(getErrorMessageOf(evaluateAddressObjectError(addressObject))); } } -module.exports = InvalidAddressObject; +export default InvalidAddressObject; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InvalidDashcoreTransaction.js b/packages/wallet-lib/src/errors/InvalidDashcoreTransaction.js index 0beca37db34..b8ffa1fe67d 100644 --- a/packages/wallet-lib/src/errors/InvalidDashcoreTransaction.js +++ b/packages/wallet-lib/src/errors/InvalidDashcoreTransaction.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InvalidDashcoreTransaction extends WalletLibError { constructor(tx, reason = 'A Dashcore Transaction object or valid rawTransaction is required') { @@ -6,4 +6,4 @@ class InvalidDashcoreTransaction extends WalletLibError { } } -module.exports = InvalidDashcoreTransaction; +export default InvalidDashcoreTransaction; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InvalidOutput.js b/packages/wallet-lib/src/errors/InvalidOutput.js index f2ad02425ef..7929b590d2b 100644 --- a/packages/wallet-lib/src/errors/InvalidOutput.js +++ b/packages/wallet-lib/src/errors/InvalidOutput.js @@ -1,7 +1,8 @@ -const { has } = require('lodash'); -const is = require('../utils/is'); +import lodash from 'lodash'; +const { has } = lodash; +import is from '../utils/is.js'; -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InvalidOutput extends WalletLibError { constructor(output) { @@ -34,4 +35,4 @@ class InvalidOutput extends WalletLibError { super(getErrorMessageOf(evaluateUTXOObjectError(output))); } } -module.exports = InvalidOutput; +export default InvalidOutput; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InvalidRawTransaction.js b/packages/wallet-lib/src/errors/InvalidRawTransaction.js index 1a9b72f12ba..ec07f549155 100644 --- a/packages/wallet-lib/src/errors/InvalidRawTransaction.js +++ b/packages/wallet-lib/src/errors/InvalidRawTransaction.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InvalidTransaction extends WalletLibError { constructor() { @@ -6,4 +6,4 @@ class InvalidTransaction extends WalletLibError { } } -module.exports = InvalidTransaction; +export default InvalidTransaction; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InvalidStorageAdapter.js b/packages/wallet-lib/src/errors/InvalidStorageAdapter.js index 4b49480ff6e..960df38c037 100644 --- a/packages/wallet-lib/src/errors/InvalidStorageAdapter.js +++ b/packages/wallet-lib/src/errors/InvalidStorageAdapter.js @@ -1,8 +1,8 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InvalidStorageAdapter extends WalletLibError { constructor(reason) { super(`Invalid Storage Adapter : ${reason}`); } } -module.exports = InvalidStorageAdapter; +export default InvalidStorageAdapter; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InvalidStrategy.js b/packages/wallet-lib/src/errors/InvalidStrategy.js index fbffca99740..0fe144103ad 100644 --- a/packages/wallet-lib/src/errors/InvalidStrategy.js +++ b/packages/wallet-lib/src/errors/InvalidStrategy.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InvalidStrategy extends WalletLibError { constructor(arg) { @@ -6,4 +6,4 @@ class InvalidStrategy extends WalletLibError { super(`Unable to import strategy. Expected 'str' or 'fn' got ${type}`); } } -module.exports = InvalidStrategy; +export default InvalidStrategy; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InvalidTransactionObject.js b/packages/wallet-lib/src/errors/InvalidTransactionObject.js index 7d5ec0c552d..95af32f98f0 100644 --- a/packages/wallet-lib/src/errors/InvalidTransactionObject.js +++ b/packages/wallet-lib/src/errors/InvalidTransactionObject.js @@ -1,7 +1,8 @@ -const { has } = require('lodash'); -const is = require('../utils/is'); +import lodash from 'lodash'; +const { has } = lodash; +import is from '../utils/is.js'; -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InvalidTransactionObject extends WalletLibError { constructor(transactionObj) { @@ -34,4 +35,4 @@ class InvalidTransactionObject extends WalletLibError { super(getErrorMessageOf(evaluateTransactionObjectError(transactionObj))); } } -module.exports = InvalidTransactionObject; +export default InvalidTransactionObject; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/InvalidUTXO.js b/packages/wallet-lib/src/errors/InvalidUTXO.js index 690d1625fa9..9d7c35919d3 100644 --- a/packages/wallet-lib/src/errors/InvalidUTXO.js +++ b/packages/wallet-lib/src/errors/InvalidUTXO.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class InvalidUTXO extends WalletLibError { constructor() { @@ -6,4 +6,4 @@ class InvalidUTXO extends WalletLibError { super(message); } } -module.exports = InvalidUTXO; +export default InvalidUTXO; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/MempoolPropagationTimeoutError.js b/packages/wallet-lib/src/errors/MempoolPropagationTimeoutError.js index 07fb2738cb0..5940a080346 100644 --- a/packages/wallet-lib/src/errors/MempoolPropagationTimeoutError.js +++ b/packages/wallet-lib/src/errors/MempoolPropagationTimeoutError.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class MempoolPropagationTimeoutError extends WalletLibError { /** @@ -9,4 +9,4 @@ class MempoolPropagationTimeoutError extends WalletLibError { } } -module.exports = MempoolPropagationTimeoutError; +export default MempoolPropagationTimeoutError; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/PluginFailedOnStart.js b/packages/wallet-lib/src/errors/PluginFailedOnStart.js index 132b9ea802e..455e3cd9f50 100644 --- a/packages/wallet-lib/src/errors/PluginFailedOnStart.js +++ b/packages/wallet-lib/src/errors/PluginFailedOnStart.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class PluginFailedOnStart extends WalletLibError { constructor(pluginType, pluginName, error) { @@ -12,4 +12,4 @@ class PluginFailedOnStart extends WalletLibError { } } -module.exports = PluginFailedOnStart; +export default PluginFailedOnStart; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/PluginInjectionError.js b/packages/wallet-lib/src/errors/PluginInjectionError.js index 07f764bdcdb..1c74f2a6748 100644 --- a/packages/wallet-lib/src/errors/PluginInjectionError.js +++ b/packages/wallet-lib/src/errors/PluginInjectionError.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class PluginInjectionError extends WalletLibError { constructor(error) { @@ -12,4 +12,4 @@ class PluginInjectionError extends WalletLibError { } } -module.exports = PluginInjectionError; +export default PluginInjectionError; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/StorageUnableToAddTransaction.js b/packages/wallet-lib/src/errors/StorageUnableToAddTransaction.js index 6f1e6056ea7..a512de0f29a 100644 --- a/packages/wallet-lib/src/errors/StorageUnableToAddTransaction.js +++ b/packages/wallet-lib/src/errors/StorageUnableToAddTransaction.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class StorageUnableToAddTransaction extends WalletLibError { constructor(tx) { @@ -6,4 +6,4 @@ class StorageUnableToAddTransaction extends WalletLibError { super(getErrorMessageOf(tx)); } } -module.exports = StorageUnableToAddTransaction; +export default StorageUnableToAddTransaction; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/TransactionMetadataNotInStore.js b/packages/wallet-lib/src/errors/TransactionMetadataNotInStore.js index 4a915d480e3..01e9d2715a4 100644 --- a/packages/wallet-lib/src/errors/TransactionMetadataNotInStore.js +++ b/packages/wallet-lib/src/errors/TransactionMetadataNotInStore.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class TransactionMetadataNotInStore extends WalletLibError { constructor(txid) { @@ -6,4 +6,4 @@ class TransactionMetadataNotInStore extends WalletLibError { } } -module.exports = TransactionMetadataNotInStore; +export default TransactionMetadataNotInStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/TransactionNotInStore.js b/packages/wallet-lib/src/errors/TransactionNotInStore.js index 399ff46672b..8e71bbc3f2c 100644 --- a/packages/wallet-lib/src/errors/TransactionNotInStore.js +++ b/packages/wallet-lib/src/errors/TransactionNotInStore.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class TransactionNotInStore extends WalletLibError { constructor(txid) { @@ -6,4 +6,4 @@ class TransactionNotInStore extends WalletLibError { } } -module.exports = TransactionNotInStore; +export default TransactionNotInStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/TransporterGenericError.js b/packages/wallet-lib/src/errors/TransporterGenericError.js index 0e169f2aa3b..e99a65bef22 100644 --- a/packages/wallet-lib/src/errors/TransporterGenericError.js +++ b/packages/wallet-lib/src/errors/TransporterGenericError.js @@ -1,8 +1,8 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class TransporterGenericError extends WalletLibError { constructor(act, reason) { super(`Unable to ${act}, reason: ${reason}`); } } -module.exports = TransporterGenericError; +export default TransporterGenericError; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/TxMetadataTimeoutError.js b/packages/wallet-lib/src/errors/TxMetadataTimeoutError.js index 5c99ed4f5fb..0e2cbf2dad8 100644 --- a/packages/wallet-lib/src/errors/TxMetadataTimeoutError.js +++ b/packages/wallet-lib/src/errors/TxMetadataTimeoutError.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class TxMetadataTimeoutError extends WalletLibError { /** @@ -9,4 +9,4 @@ class TxMetadataTimeoutError extends WalletLibError { } } -module.exports = TxMetadataTimeoutError; +export default TxMetadataTimeoutError; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/UnknownPlugin.js b/packages/wallet-lib/src/errors/UnknownPlugin.js index 06e61238296..051b5a7c94e 100644 --- a/packages/wallet-lib/src/errors/UnknownPlugin.js +++ b/packages/wallet-lib/src/errors/UnknownPlugin.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class UnknownPlugin extends WalletLibError { constructor(pluginName) { @@ -7,4 +7,4 @@ class UnknownPlugin extends WalletLibError { } } -module.exports = UnknownPlugin; +export default UnknownPlugin; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/UnknownStrategy.js b/packages/wallet-lib/src/errors/UnknownStrategy.js index a7f72cba9fa..de66477868f 100644 --- a/packages/wallet-lib/src/errors/UnknownStrategy.js +++ b/packages/wallet-lib/src/errors/UnknownStrategy.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class UnknownStrategy extends WalletLibError { constructor(strategyName) { @@ -7,4 +7,4 @@ class UnknownStrategy extends WalletLibError { } } -module.exports = UnknownStrategy; +export default UnknownStrategy; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/UnknownWorker.js b/packages/wallet-lib/src/errors/UnknownWorker.js index c4812474ab5..fc35d70a4bb 100644 --- a/packages/wallet-lib/src/errors/UnknownWorker.js +++ b/packages/wallet-lib/src/errors/UnknownWorker.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class UnknownWorker extends WalletLibError { constructor(workerName) { @@ -7,4 +7,4 @@ class UnknownWorker extends WalletLibError { } } -module.exports = UnknownWorker; +export default UnknownWorker; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/ValidTransportLayerRequired.js b/packages/wallet-lib/src/errors/ValidTransportLayerRequired.js index fbfd43c4d0b..44ace3a2d7a 100644 --- a/packages/wallet-lib/src/errors/ValidTransportLayerRequired.js +++ b/packages/wallet-lib/src/errors/ValidTransportLayerRequired.js @@ -1,8 +1,8 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class ValidTransportLayerRequired extends WalletLibError { constructor(method) { super(`A transport layer is needed to perform a ${method}`); } } -module.exports = ValidTransportLayerRequired; +export default ValidTransportLayerRequired; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/WalletLibError.js b/packages/wallet-lib/src/errors/WalletLibError.js index 7ccb3b32bbe..6ea5df6f0dd 100644 --- a/packages/wallet-lib/src/errors/WalletLibError.js +++ b/packages/wallet-lib/src/errors/WalletLibError.js @@ -19,4 +19,4 @@ class WalletLibError extends Error { } } -module.exports = WalletLibError; +export default WalletLibError; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/WorkerFailedOnExecute.js b/packages/wallet-lib/src/errors/WorkerFailedOnExecute.js index b7f4162129d..20d324262ed 100644 --- a/packages/wallet-lib/src/errors/WorkerFailedOnExecute.js +++ b/packages/wallet-lib/src/errors/WorkerFailedOnExecute.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class WorkerFailedOnExecute extends WalletLibError { /** @@ -19,4 +19,4 @@ class WorkerFailedOnExecute extends WalletLibError { } } -module.exports = WorkerFailedOnExecute; +export default WorkerFailedOnExecute; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/WorkerFailedOnStart.js b/packages/wallet-lib/src/errors/WorkerFailedOnStart.js index 6585ea9d1a4..153036e1021 100644 --- a/packages/wallet-lib/src/errors/WorkerFailedOnStart.js +++ b/packages/wallet-lib/src/errors/WorkerFailedOnStart.js @@ -1,4 +1,4 @@ -const WalletLibError = require('./WalletLibError'); +import WalletLibError from './WalletLibError.js'; class WorkerFailedOnStart extends WalletLibError { /** @@ -19,4 +19,4 @@ class WorkerFailedOnStart extends WalletLibError { } } -module.exports = WorkerFailedOnStart; +export default WorkerFailedOnStart; \ No newline at end of file diff --git a/packages/wallet-lib/src/errors/index.js b/packages/wallet-lib/src/errors/index.js index e9f7407e248..2acd1de3bfa 100644 --- a/packages/wallet-lib/src/errors/index.js +++ b/packages/wallet-lib/src/errors/index.js @@ -1,39 +1,40 @@ -const CreateTransactionError = require('./CreateTransactionError'); -const CoinSelectionUnsufficientUTXOS = require('./CoinSelectionUnsufficientUTXOS'); -const InjectionErrorCannotInject = require('./InjectionErrorCannotInject'); -const InjectionErrorCannotInjectUnknownDependency = require('./InjectionErrorCannotInjectUnknownDependency'); -const InjectionToPluginUnallowed = require('./InjectionToPluginUnallowed'); +import CreateTransactionError from './CreateTransactionError.js'; +import CoinSelectionUnsufficientUTXOS from './CoinSelectionUnsufficientUTXOS.js'; +import InjectionErrorCannotInject from './InjectionErrorCannotInject.js'; +import InjectionErrorCannotInjectUnknownDependency from './InjectionErrorCannotInjectUnknownDependency.js'; +import InjectionToPluginUnallowed from './InjectionToPluginUnallowed.js'; -const PluginFailedOnStart = require('./PluginFailedOnStart'); -const WorkerFailedOnStart = require('./WorkerFailedOnStart'); -const WorkerFailedOnExecute = require('./WorkerFailedOnExecute'); +import PluginFailedOnStart from './PluginFailedOnStart.js'; +import WorkerFailedOnStart from './WorkerFailedOnStart.js'; +import WorkerFailedOnExecute from './WorkerFailedOnExecute.js'; -const InvalidAddress = require('./InvalidAddress'); -const InvalidAddressObject = require('./InvalidAddressObject'); -const InvalidOutput = require('./InvalidOutput'); -const InvalidDashcoreTransaction = require('./InvalidDashcoreTransaction'); -const InvalidRawTransaction = require('./InvalidRawTransaction'); -const InvalidStrategy = require('./InvalidStrategy'); -const InvalidStorageAdapter = require('./InvalidStorageAdapter'); +import InvalidAddress from './InvalidAddress.js'; +import InvalidAddressObject from './InvalidAddressObject.js'; +import InvalidOutput from './InvalidOutput.js'; +import InvalidDashcoreTransaction from './InvalidDashcoreTransaction.js'; +import InvalidRawTransaction from './InvalidRawTransaction.js'; +import InvalidStrategy from './InvalidStrategy.js'; +import InvalidStorageAdapter from './InvalidStorageAdapter.js'; -const InvalidTransactionObject = require('./InvalidTransactionObject'); -const InvalidUTXO = require('./InvalidUTXO'); -const StorageUnableToAddTransaction = require('./StorageUnableToAddTransaction'); -const TransactionNotInStore = require('./TransactionNotInStore'); -const TransactionMetadataNotInStore = require('./TransactionMetadataNotInStore'); -const BlockHeaderNotInStore = require('./BlockHeaderNotInStore'); +import InvalidTransactionObject from './InvalidTransactionObject.js'; +import InvalidUTXO from './InvalidUTXO.js'; +import StorageUnableToAddTransaction from './StorageUnableToAddTransaction.js'; +import TransactionNotInStore from './TransactionNotInStore.js'; +import TransactionMetadataNotInStore from './TransactionMetadataNotInStore.js'; +import BlockHeaderNotInStore from './BlockHeaderNotInStore.js'; -const UnknownWorker = require('./UnknownWorker'); -const UnknownPlugin = require('./UnknownPlugin'); +import UnknownWorker from './UnknownWorker.js'; +import UnknownPlugin from './UnknownPlugin.js'; +import UnknownStrategy from './UnknownStrategy.js'; -const ValidTransportLayerRequired = require('./ValidTransportLayerRequired'); -const WalletLibError = require('./WalletLibError'); +import ValidTransportLayerRequired from './ValidTransportLayerRequired.js'; +import WalletLibError from './WalletLibError.js'; -const PluginInjectionError = require('./PluginInjectionError'); -const InstantLockTimeoutError = require('./InstantLockTimeoutError'); -const TxMetadataTimeoutError = require('./TxMetadataTimeoutError'); +import PluginInjectionError from './PluginInjectionError.js'; +import InstantLockTimeoutError from './InstantLockTimeoutError.js'; +import TxMetadataTimeoutError from './TxMetadataTimeoutError.js'; -module.exports = { +export { BlockHeaderNotInStore, CreateTransactionError, CoinSelectionUnsufficientUTXOS, @@ -56,6 +57,39 @@ module.exports = { TransactionNotInStore, TransactionMetadataNotInStore, UnknownPlugin, + UnknownStrategy, + UnknownWorker, + ValidTransportLayerRequired, + WalletLibError, + PluginInjectionError, + InstantLockTimeoutError, + TxMetadataTimeoutError, +}; + +export default { + BlockHeaderNotInStore, + CreateTransactionError, + CoinSelectionUnsufficientUTXOS, + InjectionErrorCannotInject, + InjectionErrorCannotInjectUnknownDependency, + InjectionToPluginUnallowed, + InvalidAddress, + InvalidAddressObject, + InvalidOutput, + InvalidStrategy, + InvalidDashcoreTransaction, + InvalidRawTransaction, + InvalidStorageAdapter, + InvalidTransactionObject, + InvalidUTXO, + PluginFailedOnStart, + WorkerFailedOnStart, + WorkerFailedOnExecute, + StorageUnableToAddTransaction, + TransactionNotInStore, + TransactionMetadataNotInStore, + UnknownPlugin, + UnknownStrategy, UnknownWorker, ValidTransportLayerRequired, WalletLibError, diff --git a/packages/wallet-lib/src/index.js b/packages/wallet-lib/src/index.js index 71610cdc033..31a8f356e85 100644 --- a/packages/wallet-lib/src/index.js +++ b/packages/wallet-lib/src/index.js @@ -1,21 +1,32 @@ -// Default winston transport requires setImmediate to work, so -// polyfill included here. Making it work with webpack is rather tricky, so it is used as per -// documentation: https://github.com/YuzuJS/setImmediate#usage -require('setimmediate'); -const Account = require('./types/Account/Account'); -const ChainStore = require('./types/ChainStore/ChainStore'); -const Identities = require('./types/Identities/Identities'); -const DerivableKeyChain = require('./types/DerivableKeyChain/DerivableKeyChain'); -const KeyChainStore = require('./types/KeyChainStore/KeyChainStore'); -const Storage = require('./types/Storage/Storage'); -const Wallet = require('./types/Wallet/Wallet'); -const WalletStore = require('./types/WalletStore/WalletStore'); -const EVENTS = require('./EVENTS'); -const CONSTANTS = require('./CONSTANTS'); -const utils = require('./utils'); -const plugins = require('./plugins'); +import Account from './types/Account/Account.js'; +import ChainStore from './types/ChainStore/ChainStore.js'; +import Identities from './types/Identities/Identities.js'; +import DerivableKeyChain from './types/DerivableKeyChain/DerivableKeyChain.js'; +import KeyChainStore from './types/KeyChainStore/KeyChainStore.js'; +import Storage from './types/Storage/Storage.js'; +import Wallet from './types/Wallet/Wallet.js'; +import WalletStore from './types/WalletStore/WalletStore.js'; +import EVENTS from './EVENTS.js'; +import CONSTANTS from './CONSTANTS.js'; +import utils from './utils/index.js'; +import plugins from './plugins/index.js'; -module.exports = { +export { + Account, + ChainStore, + Identities, + DerivableKeyChain, + KeyChainStore, + Storage, + Wallet, + WalletStore, + EVENTS, + CONSTANTS, + utils, + plugins, +}; + +export default { Account, ChainStore, Identities, diff --git a/packages/wallet-lib/src/logger/index.js b/packages/wallet-lib/src/logger/index.js index c7fa9cffbf5..1f2bd14b16b 100644 --- a/packages/wallet-lib/src/logger/index.js +++ b/packages/wallet-lib/src/logger/index.js @@ -1,76 +1,38 @@ -const util = require('util'); -const winston = require('winston'); +// Minimal console-based logger; mirrors the previous winston API +// (error/warn/info/verbose/debug/silly + getForWallet) without external deps. -const LOG_LEVEL = process.env.LOG_LEVEL || 'info'; -const LOG_TO_FILE = process.env.LOG_WALLET_TO_FILE || 'false'; +const LOG_LEVEL = (typeof process !== 'undefined' && process.env && process.env.LOG_LEVEL) || 'info'; -// Log levels: -// error 0 -// warn 1 -// info 2 (default) -// verbose 3 -// debug 4 -// silly 5 - -const loggers = {}; - -const createLogger = (formats = [], walletId = '') => { - const format = winston.format.combine( - { - transform: (info) => { - const args = info[Symbol.for('splat')]; - const result = { ...info }; - if (args) { - result.message = util.format(info.message, ...args); - } - return result; - }, - }, - ...formats, - winston.format.colorize(), - winston.format.printf(({ - level, message, - }) => `${level}: ${message}`), - ); - - const transports = [ - new winston.transports.Console({ - format, - }), - ]; - - if (LOG_TO_FILE === 'true' && typeof window === 'undefined') { - transports.push( - new winston.transports.File({ - filename: `wallet${walletId !== '' ? `_${walletId}` : ''}`, - format, - }), - ); - } - - return winston.createLogger({ - level: LOG_LEVEL, - transports, - }); +const LEVELS = { + silent: -1, error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5, }; -const logger = createLogger(); - -logger.getForWallet = (walletId) => { - if (!loggers[walletId]) { - const format = { - transform: (info) => { - const message = `[Wallet: ${walletId}] ${info.message}`; - return { ...info, message }; - }, - }; - - loggers[walletId] = createLogger([format], walletId); - } +const cache = {}; + +function build(level = LOG_LEVEL, prefix = '') { + const threshold = LEVELS[level] != null ? LEVELS[level] : LEVELS.info; + const noop = () => {}; + const fmt = prefix ? (...a) => [prefix, ...a] : (...a) => a; + + const logger = { + error: threshold >= 0 ? (...a) => console.error(...fmt(...a)) : noop, + warn: threshold >= 1 ? (...a) => console.warn(...fmt(...a)) : noop, + info: threshold >= 2 ? (...a) => console.info(...fmt(...a)) : noop, + verbose: threshold >= 3 ? (...a) => console.debug(...fmt(...a)) : noop, + debug: threshold >= 4 ? (...a) => console.debug(...fmt(...a)) : noop, + silly: threshold >= 5 ? (...a) => console.debug(...fmt(...a)) : noop, + getForWallet(walletId) { + if (!cache[walletId]) { + cache[walletId] = build(level, `[Wallet: ${walletId}]`); + } + return cache[walletId]; + }, + }; + return logger; +} - return loggers[walletId]; -}; +const logger = build(); -logger.verbose(`Logger uses "${LOG_LEVEL}" level`, { level: LOG_LEVEL }); +logger.verbose(`Logger uses "${LOG_LEVEL}" level`); -module.exports = logger; +export default logger; diff --git a/packages/wallet-lib/src/plugins/Plugins/ChainPlugin.js b/packages/wallet-lib/src/plugins/Plugins/ChainPlugin.js index 66edb59a25b..37827d01c91 100644 --- a/packages/wallet-lib/src/plugins/Plugins/ChainPlugin.js +++ b/packages/wallet-lib/src/plugins/Plugins/ChainPlugin.js @@ -1,6 +1,6 @@ -const logger = require('../../logger'); -const { StandardPlugin } = require('..'); -const { dashToDuffs } = require('../../utils'); +import logger from '../../logger/index.js'; +import { StandardPlugin } from '../index.js'; +import { dashToDuffs } from '../../utils/index.js'; const defaultOpts = { firstExecutionRequired: true, @@ -57,4 +57,4 @@ class ChainPlugin extends StandardPlugin { } } -module.exports = ChainPlugin; +export default ChainPlugin; \ No newline at end of file diff --git a/packages/wallet-lib/src/plugins/StandardPlugin.js b/packages/wallet-lib/src/plugins/StandardPlugin.js index 6a5c5a22bb8..5be86a975b4 100644 --- a/packages/wallet-lib/src/plugins/StandardPlugin.js +++ b/packages/wallet-lib/src/plugins/StandardPlugin.js @@ -1,7 +1,9 @@ -const _ = require('lodash'); -const EventEmitter = require('events'); -const { InjectionToPluginUnallowed } = require('../errors'); -const { SAFE_FUNCTIONS, SAFE_PROPERTIES } = require('../CONSTANTS').INJECTION_LISTS; +import _ from 'lodash'; +import EventEmitter from 'events'; +import { InjectionToPluginUnallowed } from '../errors/index.js'; +import { INJECTION_LISTS } from '../CONSTANTS.js'; + +const { SAFE_FUNCTIONS, SAFE_PROPERTIES } = INJECTION_LISTS; const defaultOpts = { executeOnStart: false, @@ -73,4 +75,4 @@ class StandardPlugin extends EventEmitter { } } -module.exports = StandardPlugin; +export default StandardPlugin; \ No newline at end of file diff --git a/packages/wallet-lib/src/plugins/StandardPlugin.spec.js b/packages/wallet-lib/src/plugins/StandardPlugin.spec.js index b6794a6b0a1..73586bf0c73 100644 --- a/packages/wallet-lib/src/plugins/StandardPlugin.spec.js +++ b/packages/wallet-lib/src/plugins/StandardPlugin.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const { EventEmitter } = require('events'); -const StandardPluginSpec = require('./StandardPlugin'); +import { expect } from 'chai'; +import { EventEmitter } from 'events'; +import StandardPluginSpec from './StandardPlugin.js'; describe('Plugins - StandardPlugin', function suite() { this.timeout(60000); diff --git a/packages/wallet-lib/src/plugins/Worker.js b/packages/wallet-lib/src/plugins/Worker.js index 9cab6050519..3e721e9dcd3 100644 --- a/packages/wallet-lib/src/plugins/Worker.js +++ b/packages/wallet-lib/src/plugins/Worker.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const StandardPlugin = require('./StandardPlugin'); +import _ from 'lodash'; +import StandardPlugin from './StandardPlugin.js'; // eslint-disable-next-line no-underscore-dangle const _defaultOpts = { @@ -143,4 +143,4 @@ class Worker extends StandardPlugin { } } -module.exports = Worker; +export default Worker; \ No newline at end of file diff --git a/packages/wallet-lib/src/plugins/Worker.spec.js b/packages/wallet-lib/src/plugins/Worker.spec.js index bc5ded7c6eb..71e060b43b5 100644 --- a/packages/wallet-lib/src/plugins/Worker.spec.js +++ b/packages/wallet-lib/src/plugins/Worker.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const { EventEmitter } = require('events'); -const WorkerSpec = require('./Worker'); -const FaultyWorker = require('../../fixtures/plugins/FaultyWorker'); +import { expect } from 'chai'; +import { EventEmitter } from 'events'; +import WorkerSpec from './Worker.js'; +import FaultyWorker from '../../fixtures/plugins/FaultyWorker.js'; describe('Plugins - Worker', function suite() { this.timeout(60000); diff --git a/packages/wallet-lib/src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.js b/packages/wallet-lib/src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.js index 76f7e02658c..bcfadcd27b1 100644 --- a/packages/wallet-lib/src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.js +++ b/packages/wallet-lib/src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.js @@ -1,7 +1,7 @@ -const BlockHeadersProvider = require('@dashevo/dapi-client/lib/BlockHeadersProvider/BlockHeadersProvider'); -const Worker = require('../../Worker'); -const logger = require('../../../logger'); -const EVENTS = require('../../../EVENTS'); +import BlockHeadersProvider from '@dashevo/dapi-client/lib/BlockHeadersProvider/BlockHeadersProvider.js'; +import Worker from '../../Worker.js'; +import logger from '../../../logger/index.js'; +import EVENTS from '../../../EVENTS.js'; const PROGRESS_UPDATE_INTERVAL = 1000; @@ -391,4 +391,4 @@ class BlockHeadersSyncWorker extends Worker { BlockHeadersSyncWorker.MAX_HEADERS_TO_KEEP = MAX_HEADERS_TO_KEEP; BlockHeadersSyncWorker.STATES = STATES; -module.exports = BlockHeadersSyncWorker; +export default BlockHeadersSyncWorker; \ No newline at end of file diff --git a/packages/wallet-lib/src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.spec.js b/packages/wallet-lib/src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.spec.js index 69f0da74cf6..8d0abd76d44 100644 --- a/packages/wallet-lib/src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.spec.js +++ b/packages/wallet-lib/src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.spec.js @@ -1,19 +1,20 @@ /* eslint-disable no-unused-expressions */ -const EventEmitter = require('events'); -const DAPIClient = require('@dashevo/dapi-client'); -const { Block } = require('@dashevo/dashcore-lib'); -const { expect } = require('chai'); -const logger = require('../../../logger'); +import EventEmitter from 'events'; +import DAPIClient from '@dashevo/dapi-client'; +import dashcore from '@dashevo/dashcore-lib'; +const { Block } = dashcore; +import { expect } from 'chai'; +import logger from '../../../logger/index.js'; const { BlockHeadersProvider } = DAPIClient; -const BlockHeadersSyncWorker = require('./BlockHeadersSyncWorker'); +import BlockHeadersSyncWorker from './BlockHeadersSyncWorker.js'; -const { waitOneTick } = require('../../../test/utils'); +import { waitOneTick } from '../../../test/utils.js'; -const EVENTS = require('../../../EVENTS'); -const { mockHeadersChain } = require('../../../test/mocks/dashcore/block'); +import EVENTS from '../../../EVENTS.js'; +import { mockHeadersChain } from '../../../test/mocks/dashcore/block.js'; describe('BlockHeadersSyncWorker', () => { let blockHeadersSyncWorker; diff --git a/packages/wallet-lib/src/plugins/Workers/IdentitySyncWorker.js b/packages/wallet-lib/src/plugins/Workers/IdentitySyncWorker.js index 563b674fc18..ba92873bfb8 100644 --- a/packages/wallet-lib/src/plugins/Workers/IdentitySyncWorker.js +++ b/packages/wallet-lib/src/plugins/Workers/IdentitySyncWorker.js @@ -1,7 +1,8 @@ -const { default: loadDpp, Identity } = require('@dashevo/wasm-dpp'); -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); +import loadDpp from '@dashevo/wasm-dpp'; +const { Identity } = loadDpp; +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; -const Worker = require('../Worker'); +import Worker from '../Worker.js'; /** * @property {number} gapLimit @@ -27,8 +28,11 @@ class IdentitySyncWorker extends Worker { // eslint-disable-next-line async onStart() { - // Load DPP to make sure Identity and decodeProtocolEntity are available - await loadDpp(); + // Load DPP to make sure Identity and decodeProtocolEntity are available. + // wasm-dpp is CJS; under NodeNext the default import may resolve to the + // module namespace object instead of the callable. Unwrap defensively. + const load = loadDpp.default ?? loadDpp; + await load(); } async execute() { @@ -116,4 +120,4 @@ class IdentitySyncWorker extends Worker { } } -module.exports = IdentitySyncWorker; +export default IdentitySyncWorker; \ No newline at end of file diff --git a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsReader.js b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsReader.js index f398e535af4..50d4e06da1d 100644 --- a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsReader.js +++ b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsReader.js @@ -1,14 +1,14 @@ -const { EventEmitter } = require('events'); -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); -const { +import { EventEmitter } from 'events'; +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; +import { createBloomFilter, parseRawTransactions, parseRawMerkleBlock, parseRawInstantLocks, getTxHashesFromMerkleBlock, -} = require('./utils'); +} from './utils.js'; -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; const EVENTS = { HISTORICAL_TRANSACTIONS: 'HISTORICAL_TRANSACTIONS', @@ -500,4 +500,4 @@ class TransactionsReader extends EventEmitter { TransactionsReader.EVENTS = EVENTS; -module.exports = TransactionsReader; +export default TransactionsReader; \ No newline at end of file diff --git a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsReader.spec.js b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsReader.spec.js index 3044588b4d5..c2692993a24 100644 --- a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsReader.spec.js +++ b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsReader.spec.js @@ -1,12 +1,13 @@ -const { expect } = require('chai'); -const { Transaction, PrivateKey } = require('@dashevo/dashcore-lib'); - -const TransactionsReader = require('./TransactionsReader'); -const TxStreamMock = require('../../../test/mocks/TxStreamMock'); -const { createBloomFilter } = require('./utils'); -const { mockMerkleBlock } = require('../../../test/mocks/dashcore/block'); -const { mockInstantLock } = require('../../../test/mocks/dashcore/instantlock'); -const { waitOneTick } = require('../../../test/utils'); +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction, PrivateKey } = dashcore; + +import TransactionsReader from './TransactionsReader.js'; +import TxStreamMock from '../../../test/mocks/TxStreamMock.js'; +import { createBloomFilter } from './utils.js'; +import { mockMerkleBlock } from '../../../test/mocks/dashcore/block.js'; +import { mockInstantLock } from '../../../test/mocks/dashcore/instantlock.js'; +import { waitOneTick } from '../../../test/utils.js'; describe('TransactionsReader - unit', () => { let options; diff --git a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.js b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.js index df00b61c994..3e87e1175f4 100644 --- a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.js +++ b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.js @@ -1,10 +1,10 @@ -const BlockHeadersProvider = require('@dashevo/dapi-client/lib/BlockHeadersProvider/BlockHeadersProvider'); -const ReconnectableStream = require('@dashevo/dapi-client/lib/transport/ReconnectableStream'); -const Worker = require('../../Worker'); -const logger = require('../../../logger'); -const TransactionsReader = require('./TransactionsReader'); -const { getAddressesToSync, getTxHashesFromMerkleBlock } = require('./utils'); -const EVENTS = require('../../../EVENTS'); +import BlockHeadersProvider from '@dashevo/dapi-client/lib/BlockHeadersProvider/BlockHeadersProvider.js'; +import ReconnectableStream from '@dashevo/dapi-client/lib/transport/ReconnectableStream.js'; +import Worker from '../../Worker.js'; +import logger from '../../../logger/index.js'; +import TransactionsReader from './TransactionsReader.js'; +import { getAddressesToSync, getTxHashesFromMerkleBlock } from './utils.js'; +import EVENTS from '../../../EVENTS.js'; const STATES = { IDLE: 'STATE_IDLE', @@ -687,4 +687,4 @@ class TransactionsSyncWorker extends Worker { TransactionsSyncWorker.STATES = STATES; -module.exports = TransactionsSyncWorker; +export default TransactionsSyncWorker; \ No newline at end of file diff --git a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.spec.js b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.spec.js index aacd3b137db..d5d5a9a31db 100644 --- a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.spec.js +++ b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.spec.js @@ -1,12 +1,13 @@ -const { expect } = require('chai'); -const EventEmitter = require('events'); -const { Transaction } = require('@dashevo/dashcore-lib'); -const TransactionsSyncWorker = require('./TransactionsSyncWorker'); -const TransactionsReader = require('./TransactionsReader'); -const { waitOneTick } = require('../../../test/utils'); -const { mockMerkleBlock } = require('../../../test/mocks/dashcore/block'); -const EVENTS = require('../../../EVENTS'); -const logger = require('../../../logger'); +import { expect } from 'chai'; +import EventEmitter from 'events'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import TransactionsSyncWorker from './TransactionsSyncWorker.js'; +import TransactionsReader from './TransactionsReader.js'; +import { waitOneTick } from '../../../test/utils.js'; +import { mockMerkleBlock } from '../../../test/mocks/dashcore/block.js'; +import EVENTS from '../../../EVENTS.js'; +import logger from '../../../logger/index.js'; describe('TransactionsSyncWorker', () => { let transactionsSyncWorker; diff --git a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/utils.js b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/utils.js index 0648a2393dc..d5e357f3326 100644 --- a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/utils.js +++ b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/utils.js @@ -1,7 +1,12 @@ +import dashcore from '@dashevo/dashcore-lib'; const { - BloomFilter, Address, MerkleBlock, Transaction, InstantLock, -} = require('@dashevo/dashcore-lib'); -const { BLOOM_FALSE_POSITIVE_RATE } = require('../../../CONSTANTS'); + BloomFilter, + Address, + MerkleBlock, + Transaction, + InstantLock, +} = dashcore; +import { BLOOM_FALSE_POSITIVE_RATE } from '../../../CONSTANTS.js'; /** * @param {string[]} addresses @@ -104,7 +109,17 @@ const getTxHashesFromMerkleBlock = (merkleBlock) => merkleBlock return set; }, new Set()); -module.exports = { +export { + createBloomFilter, + filterTransactionsForAddresses, + parseRawTransactions, + parseRawMerkleBlock, + parseRawInstantLocks, + getAddressesToSync, + getTxHashesFromMerkleBlock, +}; + +export default { createBloomFilter, filterTransactionsForAddresses, parseRawTransactions, diff --git a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/utils.spec.js b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/utils.spec.js index f996e0835f2..3539dbc9609 100644 --- a/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/utils.spec.js +++ b/packages/wallet-lib/src/plugins/Workers/TransactionsSyncWorker/utils.spec.js @@ -1,12 +1,14 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; const { - PrivateKey, Transaction, -} = require('@dashevo/dashcore-lib'); + PrivateKey, + Transaction, +} = dashcore; -const { mockUtxo } = require('../../../test/mocks/dashcore/transaction'); +import { mockUtxo } from '../../../test/mocks/dashcore/transaction.js'; -const utils = require('./utils'); +import utils from './utils.js'; describe('TransactionsSyncWorker - utils', () => { describe('#filterTransactionsForAddresses()', () => { diff --git a/packages/wallet-lib/src/plugins/index.js b/packages/wallet-lib/src/plugins/index.js index ebad2cfcf18..fbfb5b9b1c1 100644 --- a/packages/wallet-lib/src/plugins/index.js +++ b/packages/wallet-lib/src/plugins/index.js @@ -1,6 +1,11 @@ -const Worker = require('./Worker'); -const StandardPlugin = require('./StandardPlugin'); +import Worker from './Worker.js'; +import StandardPlugin from './StandardPlugin.js'; -module.exports = { +export { + StandardPlugin, + Worker, +}; + +export default { StandardPlugin, Worker, }; diff --git a/packages/wallet-lib/src/test/bootstrap.js b/packages/wallet-lib/src/test/bootstrap.js index a47d8123f59..4ec2db84c31 100644 --- a/packages/wallet-lib/src/test/bootstrap.js +++ b/packages/wallet-lib/src/test/bootstrap.js @@ -1,11 +1,13 @@ -const { use } = require('chai'); -const { expect } = require('chai'); -const dotenvSafe = require('dotenv-safe'); -const path = require('path'); -const sinon = require('sinon'); -const sinonChai = require('sinon-chai'); -const dirtyChai = require('dirty-chai'); -const chaiAsPromised = require('chai-as-promised'); +import { use, expect } from 'chai'; +import dotenvSafe from 'dotenv-safe'; +import path from 'path'; +import sinon from 'sinon'; +import sinonChai from 'sinon-chai'; +import dirtyChai from 'dirty-chai'; +import chaiAsPromised from 'chai-as-promised'; +import { fileURLToPath } from 'url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); use(sinonChai); use(dirtyChai); @@ -17,7 +19,7 @@ if (process.env.LOAD_ENV === 'true') { }); } -exports.mochaHooks = { +export const mochaHooks = { beforeEach() { if (!this.sinon) { this.sinon = sinon.createSandbox(); diff --git a/packages/wallet-lib/src/test/karma/bootstrap.js b/packages/wallet-lib/src/test/karma/bootstrap.js deleted file mode 100644 index 12348a3e0f5..00000000000 --- a/packages/wallet-lib/src/test/karma/bootstrap.js +++ /dev/null @@ -1,30 +0,0 @@ -const { expect, use } = require('chai'); -const sinon = require('sinon'); -const chaiAsPromised = require('chai-as-promised'); -const sinonChai = require('sinon-chai'); -const dirtyChai = require('dirty-chai'); -require('setimmediate'); - -use(chaiAsPromised); -use(sinonChai); -use(dirtyChai); - -beforeEach(function beforeEach() { - if (!this.sinon) { - this.sinon = sinon.createSandbox(); - } else { - this.sinon.restore(); - } -}); - -afterEach(function afterEach() { - this.sinon.restore(); -}); - -before(function before() { - if (!this.sinon) { - this.sinon = sinon.createSandbox(); - } -}); - -global.expect = expect; diff --git a/packages/wallet-lib/src/test/karma/loader.js b/packages/wallet-lib/src/test/karma/loader.js deleted file mode 100644 index 03aaa20c9cc..00000000000 --- a/packages/wallet-lib/src/test/karma/loader.js +++ /dev/null @@ -1,8 +0,0 @@ -// This file is used for compiling tests with webpack into one file for using with karma -require('./bootstrap'); - -const testsContext = require.context('../../../src', true, /spec.js$/); -const integrationTestsContext = require.context('../../../tests/integration', true, /spec.js$/); - -testsContext.keys().forEach(testsContext); -integrationTestsContext.keys().forEach(integrationTestsContext); diff --git a/packages/wallet-lib/src/test/mocks/BlockHeadersStreamMock.js b/packages/wallet-lib/src/test/mocks/BlockHeadersStreamMock.js index 8ed3d1b91de..8e67a7b4a16 100644 --- a/packages/wallet-lib/src/test/mocks/BlockHeadersStreamMock.js +++ b/packages/wallet-lib/src/test/mocks/BlockHeadersStreamMock.js @@ -1,4 +1,4 @@ -const EventEmitter = require('events'); +import EventEmitter from 'events'; class BlockHeadersStreamMock extends EventEmitter { constructor() { @@ -51,4 +51,4 @@ BlockHeadersStreamMock.EVENTS = { error: 'error', }; -module.exports = BlockHeadersStreamMock; +export default BlockHeadersStreamMock; \ No newline at end of file diff --git a/packages/wallet-lib/src/test/mocks/LocalForageAdapterMock.js b/packages/wallet-lib/src/test/mocks/LocalForageAdapterMock.js index 818dcc61a00..8b1de748611 100644 --- a/packages/wallet-lib/src/test/mocks/LocalForageAdapterMock.js +++ b/packages/wallet-lib/src/test/mocks/LocalForageAdapterMock.js @@ -17,4 +17,4 @@ class LocalForageAdapterMock { return this.keys[key] ? JSON.parse(this.keys[key]) : null; } } -module.exports = LocalForageAdapterMock; +export default LocalForageAdapterMock; \ No newline at end of file diff --git a/packages/wallet-lib/src/test/mocks/TransportMock.js b/packages/wallet-lib/src/test/mocks/TransportMock.js index d4ea750e076..d4660e9644f 100644 --- a/packages/wallet-lib/src/test/mocks/TransportMock.js +++ b/packages/wallet-lib/src/test/mocks/TransportMock.js @@ -1,6 +1,6 @@ -const EventEmitter = require('events'); -const NotFoundError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'); -const getBlockchainStatus = require('../../transport/FixtureTransport/methods/getBlockchainStatus'); +import EventEmitter from 'events'; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; +import getBlockchainStatus from '../../transport/FixtureTransport/methods/getBlockchainStatus.js'; class TransportMock extends EventEmitter { constructor(sinon, transactionStreamMock) { @@ -53,4 +53,4 @@ class TransportMock extends EventEmitter { } } -module.exports = TransportMock; +export default TransportMock; \ No newline at end of file diff --git a/packages/wallet-lib/src/test/mocks/TxStreamDataResponseMock.js b/packages/wallet-lib/src/test/mocks/TxStreamDataResponseMock.js index e75feda32ee..27623628460 100644 --- a/packages/wallet-lib/src/test/mocks/TxStreamDataResponseMock.js +++ b/packages/wallet-lib/src/test/mocks/TxStreamDataResponseMock.js @@ -43,4 +43,4 @@ class TxStreamDataResponseMock { } } -module.exports = TxStreamDataResponseMock; +export default TxStreamDataResponseMock; \ No newline at end of file diff --git a/packages/wallet-lib/src/test/mocks/TxStreamMock.js b/packages/wallet-lib/src/test/mocks/TxStreamMock.js index 6545aaf6b14..8a3e12a503c 100644 --- a/packages/wallet-lib/src/test/mocks/TxStreamMock.js +++ b/packages/wallet-lib/src/test/mocks/TxStreamMock.js @@ -1,6 +1,6 @@ -const EventEmitter = require('events'); -const TxStreamDataResponseMock = require('./TxStreamDataResponseMock'); -const { waitOneTick } = require('../utils'); +import EventEmitter from 'events'; +import TxStreamDataResponseMock from './TxStreamDataResponseMock.js'; +import { waitOneTick } from '../utils.js'; class TxStreamMock extends EventEmitter { constructor(sinon) { @@ -79,4 +79,4 @@ TxStreamMock.EVENTS = { error: 'error', }; -module.exports = TxStreamMock; +export default TxStreamMock; \ No newline at end of file diff --git a/packages/wallet-lib/src/test/mocks/createAndAttachTransportMocksToWallet.js b/packages/wallet-lib/src/test/mocks/createAndAttachTransportMocksToWallet.js index ce1b504c856..21e8988b03e 100644 --- a/packages/wallet-lib/src/test/mocks/createAndAttachTransportMocksToWallet.js +++ b/packages/wallet-lib/src/test/mocks/createAndAttachTransportMocksToWallet.js @@ -1,9 +1,9 @@ -const DAPIClient = require('@dashevo/dapi-client'); +import DAPIClient from '@dashevo/dapi-client'; -const TxStreamMock = require('./TxStreamMock'); -const TransportMock = require('./TransportMock'); +import TxStreamMock from './TxStreamMock.js'; +import TransportMock from './TransportMock.js'; -module.exports = async function createAndAttachTransportMocksToWallet(wallet, sinon) { +export default async function createAndAttachTransportMocksToWallet(wallet, sinon) { const txStreamMock = new TxStreamMock(); const transportMock = new TransportMock(sinon, txStreamMock); diff --git a/packages/wallet-lib/src/test/mocks/createTransactionInAccount.js b/packages/wallet-lib/src/test/mocks/createTransactionInAccount.js index fbe1884b034..f6bca9649e7 100644 --- a/packages/wallet-lib/src/test/mocks/createTransactionInAccount.js +++ b/packages/wallet-lib/src/test/mocks/createTransactionInAccount.js @@ -1,4 +1,5 @@ -const { Transaction } = require('@dashevo/dashcore-lib'); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; /** * Creates a mocked transaction in the wallet that can be used to perform various tests @@ -27,4 +28,4 @@ async function createTransactionInAccount(account) { return walletTransaction; } -module.exports = createTransactionInAccount; +export default createTransactionInAccount; \ No newline at end of file diff --git a/packages/wallet-lib/src/test/mocks/dashcore/block.js b/packages/wallet-lib/src/test/mocks/dashcore/block.js index f2becaf7970..40e4ba6f66a 100644 --- a/packages/wallet-lib/src/test/mocks/dashcore/block.js +++ b/packages/wallet-lib/src/test/mocks/dashcore/block.js @@ -1,6 +1,7 @@ -const X11 = require('wasm-x11-hash'); -const { BlockHeader, MerkleBlock, configure } = require('@dashevo/dashcore-lib'); -const { genesis } = require('@dashevo/dash-spv'); +import X11 from 'wasm-x11-hash'; +import dashcore from '@dashevo/dashcore-lib'; +const { BlockHeader, MerkleBlock, configure } = dashcore; +import { genesis } from '@dashevo/dash-spv'; const getRoot = (network) => { switch (network) { @@ -82,7 +83,13 @@ const mockMerkleBlock = (txHashes, prevHeader, network = 'livenet') => { }); }; -module.exports = { +export { + mockHeadersChain, + mockHeader, + mockMerkleBlock, +}; + +export default { mockHeadersChain, mockHeader, mockMerkleBlock, diff --git a/packages/wallet-lib/src/test/mocks/dashcore/instantlock.js b/packages/wallet-lib/src/test/mocks/dashcore/instantlock.js index 0b30a89dfaa..160012c68da 100644 --- a/packages/wallet-lib/src/test/mocks/dashcore/instantlock.js +++ b/packages/wallet-lib/src/test/mocks/dashcore/instantlock.js @@ -1,4 +1,5 @@ -const { InstantLock } = require('@dashevo/dashcore-lib'); +import dashcore from '@dashevo/dashcore-lib'; +const { InstantLock } = dashcore; function mockInstantLock(transactionHash) { return new InstantLock({ @@ -15,6 +16,10 @@ function mockInstantLock(transactionHash) { }); } -module.exports = { +export { + mockInstantLock, +}; + +export default { mockInstantLock, }; diff --git a/packages/wallet-lib/src/test/mocks/dashcore/transaction.js b/packages/wallet-lib/src/test/mocks/dashcore/transaction.js index 47ac8bfc472..e69b028a377 100644 --- a/packages/wallet-lib/src/test/mocks/dashcore/transaction.js +++ b/packages/wallet-lib/src/test/mocks/dashcore/transaction.js @@ -1,5 +1,6 @@ -const crypto = require('crypto'); -const { Transaction, Script, PrivateKey } = require('@dashevo/dashcore-lib'); +import crypto from 'crypto'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction, Script, PrivateKey } = dashcore; /** * @@ -31,4 +32,5 @@ const transaction = { mockUtxo, }; -module.exports = transaction; +export default transaction; +export { mockUtxo }; \ No newline at end of file diff --git a/packages/wallet-lib/src/test/mocks/mockBlockHeadersProvider.js b/packages/wallet-lib/src/test/mocks/mockBlockHeadersProvider.js index 19078915dab..af4dad5048e 100644 --- a/packages/wallet-lib/src/test/mocks/mockBlockHeadersProvider.js +++ b/packages/wallet-lib/src/test/mocks/mockBlockHeadersProvider.js @@ -1,4 +1,4 @@ -const DAPIClient = require('@dashevo/dapi-client'); +import DAPIClient from '@dashevo/dapi-client'; const { BlockHeadersProvider, @@ -37,4 +37,4 @@ const mockBlockHeadersProvider = (sinon, historicalStreams, continuousStream, he ); }; -module.exports = mockBlockHeadersProvider; +export default mockBlockHeadersProvider; \ No newline at end of file diff --git a/packages/wallet-lib/src/test/mocks/mockStorage.js b/packages/wallet-lib/src/test/mocks/mockStorage.js index 5c987b101a9..0f9ed78a355 100644 --- a/packages/wallet-lib/src/test/mocks/mockStorage.js +++ b/packages/wallet-lib/src/test/mocks/mockStorage.js @@ -1,5 +1,5 @@ -const Storage = require('../../types/Storage/Storage'); -const LocalForageAdapterMock = require('./LocalForageAdapterMock'); +import Storage from '../../types/Storage/Storage.js'; +import LocalForageAdapterMock from './LocalForageAdapterMock.js'; const defaultOptions = { withAdapter: false, @@ -27,4 +27,4 @@ const mockStorage = async (opts = {}) => { return storage; }; -module.exports = mockStorage; +export default mockStorage; \ No newline at end of file diff --git a/packages/wallet-lib/src/test/utils.js b/packages/wallet-lib/src/test/utils.js index e8bb2602869..ad00dde6347 100644 --- a/packages/wallet-lib/src/test/utils.js +++ b/packages/wallet-lib/src/test/utils.js @@ -8,7 +8,7 @@ const waitOneTick = () => new Promise((resolve) => { const wait = (timeout) => new Promise(((resolve) => { setTimeout(resolve, timeout); })); -module.exports = { +export { waitOneTick, wait, }; diff --git a/packages/wallet-lib/src/transport/AbstractTransport.js b/packages/wallet-lib/src/transport/AbstractTransport.js index 76633f5d534..3a8c572e5ae 100644 --- a/packages/wallet-lib/src/transport/AbstractTransport.js +++ b/packages/wallet-lib/src/transport/AbstractTransport.js @@ -1,7 +1,7 @@ -const EventEmitter = require('events'); +import EventEmitter from 'events'; -const EVENTS = require('../EVENTS'); -const logger = require('../logger'); +import EVENTS from '../EVENTS.js'; +import logger from '../logger/index.js'; /** * @abstract @@ -61,4 +61,4 @@ class AbstractTransport extends EventEmitter { } } -module.exports = AbstractTransport; +export default AbstractTransport; \ No newline at end of file diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/DAPIClientTransport.js b/packages/wallet-lib/src/transport/DAPIClientTransport/DAPIClientTransport.js index 7e8f6f2663c..4a97e430ee3 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/DAPIClientTransport.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/DAPIClientTransport.js @@ -1,4 +1,4 @@ -const AbstractTransport = require('../AbstractTransport'); +import AbstractTransport from '../AbstractTransport.js'; /** * @implements {Transport} @@ -11,19 +11,33 @@ class DAPIClientTransport extends AbstractTransport { } } -DAPIClientTransport.prototype.disconnect = require('./methods/disconnect'); -DAPIClientTransport.prototype.getBestBlock = require('./methods/getBestBlock'); -DAPIClientTransport.prototype.getBestBlockHeader = require('./methods/getBestBlockHeader'); -DAPIClientTransport.prototype.getBestBlockHash = require('./methods/getBestBlockHash'); -DAPIClientTransport.prototype.getBestBlockHeight = require('./methods/getBestBlockHeight'); -DAPIClientTransport.prototype.getBlockByHash = require('./methods/getBlockByHash'); -DAPIClientTransport.prototype.getBlockByHeight = require('./methods/getBlockByHeight'); -DAPIClientTransport.prototype.getBlockHeaderByHash = require('./methods/getBlockHeaderByHash'); -DAPIClientTransport.prototype.getBlockHeaderByHeight = require('./methods/getBlockHeaderByHeight'); -DAPIClientTransport.prototype.getBlockchainStatus = require('./methods/getBlockchainStatus'); -DAPIClientTransport.prototype.getTransaction = require('./methods/getTransaction'); -DAPIClientTransport.prototype.sendTransaction = require('./methods/sendTransaction'); -DAPIClientTransport.prototype.getIdentityByPublicKeyHash = require('./methods/getIdentityByPublicKeyHash'); -DAPIClientTransport.prototype.subscribeToTransactionsWithProofs = require('./methods/subscribeToTransactionsWithProofs'); +import _DAPIClientTransport_disconnect from './methods/disconnect.js'; +DAPIClientTransport.prototype.disconnect = _DAPIClientTransport_disconnect; +import _DAPIClientTransport_getBestBlock from './methods/getBestBlock.js'; +DAPIClientTransport.prototype.getBestBlock = _DAPIClientTransport_getBestBlock; +import _DAPIClientTransport_getBestBlockHeader from './methods/getBestBlockHeader.js'; +DAPIClientTransport.prototype.getBestBlockHeader = _DAPIClientTransport_getBestBlockHeader; +import _DAPIClientTransport_getBestBlockHash from './methods/getBestBlockHash.js'; +DAPIClientTransport.prototype.getBestBlockHash = _DAPIClientTransport_getBestBlockHash; +import _DAPIClientTransport_getBestBlockHeight from './methods/getBestBlockHeight.js'; +DAPIClientTransport.prototype.getBestBlockHeight = _DAPIClientTransport_getBestBlockHeight; +import _DAPIClientTransport_getBlockByHash from './methods/getBlockByHash.js'; +DAPIClientTransport.prototype.getBlockByHash = _DAPIClientTransport_getBlockByHash; +import _DAPIClientTransport_getBlockByHeight from './methods/getBlockByHeight.js'; +DAPIClientTransport.prototype.getBlockByHeight = _DAPIClientTransport_getBlockByHeight; +import _DAPIClientTransport_getBlockHeaderByHash from './methods/getBlockHeaderByHash.js'; +DAPIClientTransport.prototype.getBlockHeaderByHash = _DAPIClientTransport_getBlockHeaderByHash; +import _DAPIClientTransport_getBlockHeaderByHeight from './methods/getBlockHeaderByHeight.js'; +DAPIClientTransport.prototype.getBlockHeaderByHeight = _DAPIClientTransport_getBlockHeaderByHeight; +import _DAPIClientTransport_getBlockchainStatus from './methods/getBlockchainStatus.js'; +DAPIClientTransport.prototype.getBlockchainStatus = _DAPIClientTransport_getBlockchainStatus; +import _DAPIClientTransport_getTransaction from './methods/getTransaction.js'; +DAPIClientTransport.prototype.getTransaction = _DAPIClientTransport_getTransaction; +import _DAPIClientTransport_sendTransaction from './methods/sendTransaction.js'; +DAPIClientTransport.prototype.sendTransaction = _DAPIClientTransport_sendTransaction; +import _DAPIClientTransport_getIdentityByPublicKeyHash from './methods/getIdentityByPublicKeyHash.js'; +DAPIClientTransport.prototype.getIdentityByPublicKeyHash = _DAPIClientTransport_getIdentityByPublicKeyHash; +import _DAPIClientTransport_subscribeToTransactionsWithProofs from './methods/subscribeToTransactionsWithProofs.js'; +DAPIClientTransport.prototype.subscribeToTransactionsWithProofs = _DAPIClientTransport_subscribeToTransactionsWithProofs; -module.exports = DAPIClientTransport; +export default DAPIClientTransport; \ No newline at end of file diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/disconnect.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/disconnect.js index 9bb5812019e..60e5e620203 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/disconnect.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/disconnect.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function disconnect() { +export default async function disconnect() { logger.silly('DAPIClientTransport.disconnect'); return this.client.disconnect(); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlock.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlock.js index 8ea7095c52f..96321c35db3 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlock.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlock.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function getBestBlock() { +export default async function getBestBlock() { logger.silly('DAPIClientTransport.getBestBlock'); return this.getBlockByHash(await this.getBestBlockHash()); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlock.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlock.spec.js index 0026b712808..c917e344d97 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlock.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlock.spec.js @@ -1,7 +1,8 @@ -const { expect } = require('chai'); -const { Block } = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { Block } = dashcore; -const DAPIClientTransport = require('../DAPIClientTransport'); +import DAPIClientTransport from '../DAPIClientTransport.js'; describe('transports - DAPIClientTransport - .getBestBlock', function suite() { let bestBlockHash; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHash.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHash.js index 6fdd38fa737..0102668862b 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHash.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHash.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function getBestBlockHash() { +export default async function getBestBlockHash() { logger.silly('DAPIClientTransport.getBestBlockHash'); return this.client.core.getBestBlockHash(); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHash.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHash.spec.js index d75034a4462..405e8a6bc08 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHash.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHash.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const DAPIClientTransport = require('../DAPIClientTransport'); +import DAPIClientTransport from '../DAPIClientTransport.js'; describe('transports - DAPIClientTransport - .getBestBlockHash', function suite() { let fixture; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeader.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeader.js index 2a81ceb492c..2d08be2eb75 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeader.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeader.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function getBestBlockHeader() { +export default async function getBestBlockHeader() { logger.silly('DAPIClientTransport.getBestBlockHeader'); return this.getBlockHeaderByHash(await this.getBestBlockHash()); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeader.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeader.spec.js index bf034065eee..2d43ba7c306 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeader.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeader.spec.js @@ -1,7 +1,8 @@ -const { expect } = require('chai'); -const { Block } = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { Block } = dashcore; -const DAPIClientTransport = require('../DAPIClientTransport'); +import DAPIClientTransport from '../DAPIClientTransport.js'; describe('transports - DAPIClientTransport - .getBestBlockHeader', function suite() { let bestBlockHash; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeight.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeight.js index e36257f6d15..70710a833be 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeight.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeight.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function getBestBlockHeight() { +export default async function getBestBlockHeight() { logger.silly('DAPIClientTransport.getBestBlockHeight'); return this.client.core.getBestBlockHeight(); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeight.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeight.spec.js index 81d6d505da6..0a866ee5545 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeight.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBestBlockHeight.spec.js @@ -1,8 +1,8 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const DAPIClientTransport = require('../DAPIClientTransport'); +import DAPIClientTransport from '../DAPIClientTransport.js'; -const getBlockchainStatus = require('../../FixtureTransport/methods/getBlockchainStatus'); +import getBlockchainStatus from '../../FixtureTransport/methods/getBlockchainStatus.js'; describe('transports - DAPIClientTransport - .getBestBlockHeight', function suite() { let fixture; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHash.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHash.js index 260fd6fe72f..27a077a2752 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHash.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHash.js @@ -1,7 +1,8 @@ -const { Block } = require('@dashevo/dashcore-lib'); -const logger = require('../../../logger'); +import dashcore from '@dashevo/dashcore-lib'; +const { Block } = dashcore; +import logger from '../../../logger/index.js'; -module.exports = async function getBlockByHash(blockHash) { +export default async function getBlockByHash(blockHash) { logger.silly(`DAPIClient.getBlockByHash[${blockHash}]`); return new Block(await this.client.core.getBlockByHash(blockHash)); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHash.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHash.spec.js index bd0a3db723d..3e7f5c255c4 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHash.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHash.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const DAPIClientTransport = require('../DAPIClientTransport'); +import DAPIClientTransport from '../DAPIClientTransport.js'; describe('transports - DAPIClientTransport - .getBlockByHash', function suite() { let fixture; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHeight.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHeight.js index 67323259e2b..52eb1f06b4e 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHeight.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHeight.js @@ -1,7 +1,8 @@ -const { Block } = require('@dashevo/dashcore-lib'); -const logger = require('../../../logger'); +import dashcore from '@dashevo/dashcore-lib'; +const { Block } = dashcore; +import logger from '../../../logger/index.js'; -module.exports = async function getBlockByHeight(height) { +export default async function getBlockByHeight(height) { logger.silly(`DAPIClient.getBlockByHeight[${height}]`); return new Block(await this.client.core.getBlockByHeight(height)); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHeight.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHeight.spec.js index de384167ff3..669e3abc56b 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHeight.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockByHeight.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const DAPIClientTransport = require('../DAPIClientTransport'); +import DAPIClientTransport from '../DAPIClientTransport.js'; describe('transports - DAPIClientTransport - .getBlockByHeight', function suite() { let fixture; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHash.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHash.js index 270d79f0b86..6239142a74c 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHash.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHash.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function getBlockHeaderByHash(blockHash) { +export default async function getBlockHeaderByHash(blockHash) { logger.silly(`DAPIClient.getBlockHeaderByHash[${blockHash}]`); return (await this.getBlockByHash(blockHash)).header; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHash.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHash.spec.js index 1c42d4f0f68..98251b1c6b6 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHash.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHash.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const DAPIClientTransport = require('../DAPIClientTransport'); +import DAPIClientTransport from '../DAPIClientTransport.js'; describe('transports - DAPIClientTransport .getBlockHeaderByHash', function suite() { let fixture; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHeight.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHeight.js index 8be7557c412..cac57da57a4 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHeight.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHeight.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function getBlockHeaderByHeight(blockHeight) { +export default async function getBlockHeaderByHeight(blockHeight) { logger.silly(`DAPIClient.getBlockHeaderByHeight[${blockHeight}]`); return (await this.getBlockByHeight(blockHeight)).header; }; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHeight.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHeight.spec.js index 80679fbc016..d4acc73f5b8 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHeight.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockHeaderByHeight.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const DAPIClientTransport = require('../DAPIClientTransport'); +import DAPIClientTransport from '../DAPIClientTransport.js'; describe('transports - DAPIClientTransport .getBlockHeaderByHash', function suite() { diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockchainStatus.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockchainStatus.js index 44faa64ada8..da72db62acd 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockchainStatus.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockchainStatus.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function getBlockchainStatus() { +export default async function getBlockchainStatus() { logger.silly('DAPIClientTransport.getBlockchainStatus'); return this.client.core.getBlockchainStatus(); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockchainStatus.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockchainStatus.spec.js index 705462a5187..2d3c569a591 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockchainStatus.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getBlockchainStatus.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const DAPIClientTransport = require('../DAPIClientTransport'); +import DAPIClientTransport from '../DAPIClientTransport.js'; describe('transports - DAPIClientTransport - .getBlockchainStatus', function suite() { let fixture; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getIdentityByPublicKeyHash.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getIdentityByPublicKeyHash.js index 00fa5e1286c..6aa690bed6a 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getIdentityByPublicKeyHash.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getIdentityByPublicKeyHash.js @@ -2,7 +2,7 @@ * @param {Buffer} publicKeyHash * @return {Promise} */ -module.exports = async function getIdentityByPublicKeyHash(publicKeyHash) { +export default async function getIdentityByPublicKeyHash(publicKeyHash) { const response = await this.client.platform.getIdentityByPublicKeyHash( publicKeyHash, ); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.js index b491b8763ab..3f4fb091b2e 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.js @@ -1,13 +1,14 @@ -const { Transaction } = require('@dashevo/dashcore-lib'); -const NotFoundError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'); -const { is } = require('../../../utils'); -const logger = require('../../../logger'); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; +import { is } from '../../../utils/index.js'; +import logger from '../../../logger/index.js'; /** * @param {string} txid * @returns {Promise} */ -module.exports = async function getTransaction(txid) { +export default async function getTransaction(txid) { logger.silly(`DAPIClient.getTransaction[${txid}]`); if (!is.txid(txid)) { throw new Error(`Received an invalid txid to fetch : ${txid}`); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.spec.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.spec.js index bb2dea976fc..986ff6558bf 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.spec.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/getTransaction.spec.js @@ -1,8 +1,8 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const DAPIClientTransport = require('../DAPIClientTransport'); -const NotFoundError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'); -const GetTransactionResponse = require('@dashevo/dapi-client/lib/methods/core/getTransaction/GetTransactionResponse'); +import DAPIClientTransport from '../DAPIClientTransport.js'; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; +import GetTransactionResponse from '@dashevo/dapi-client/lib/methods/core/getTransaction/GetTransactionResponse.js'; describe('transports - DAPIClientTransport .getTransaction', function suite() { let fixture; diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/sendTransaction.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/sendTransaction.js index b81da5d505f..a6cb0c62c11 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/sendTransaction.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/sendTransaction.js @@ -1,7 +1,7 @@ -const { is } = require('../../../utils'); -const logger = require('../../../logger'); +import { is } from '../../../utils/index.js'; +import logger from '../../../logger/index.js'; -module.exports = async function sendTransaction(serializedTransaction) { +export default async function sendTransaction(serializedTransaction) { logger.silly('DAPIClientTransport.sendTransaction'); if (!is.string(serializedTransaction)) throw new Error('Received an invalid rawtx'); return this.client.core.broadcastTransaction(Buffer.from(serializedTransaction, 'hex')); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/subscribeToAddressesTransactions.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/subscribeToAddressesTransactions.js index d28726f17ba..477c9d4d772 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/subscribeToAddressesTransactions.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/subscribeToAddressesTransactions.js @@ -1,5 +1,5 @@ -const EVENTS = require('../../../EVENTS'); -const logger = require('../../../logger'); +import EVENTS from '../../../EVENTS.js'; +import logger from '../../../logger/index.js'; // Artifact from previous optimisation made in SyncWorker plugin // Kept for reminder when Bloomfilters @@ -56,7 +56,7 @@ function startExecutor() { }, fastFetchThreshold); } -module.exports = async function subscribeToAddressesTransactions(addressList) { +export default async function subscribeToAddressesTransactions(addressList) { logger.silly(`DAPIClient.subscribeToAddressesTransactions[${addressList}]`); if (!Array.isArray(addressList)) throw new Error('Expected array of addresses'); diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/subscribeToTransactionsWithProofs.js b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/subscribeToTransactionsWithProofs.js index 0f33a7b74f6..77ddd0a090a 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/methods/subscribeToTransactionsWithProofs.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/methods/subscribeToTransactionsWithProofs.js @@ -1,9 +1,11 @@ +import dashcore from '@dashevo/dashcore-lib'; const { - BloomFilter, Address, -} = require('@dashevo/dashcore-lib'); -const logger = require('../../../logger'); + BloomFilter, + Address, +} = dashcore; +import logger from '../../../logger/index.js'; -const { BLOOM_FALSE_POSITIVE_RATE } = require('../../../CONSTANTS'); +import { BLOOM_FALSE_POSITIVE_RATE } from '../../../CONSTANTS.js'; /** * From a given addressList will create and submit a bloomfilter to DAPI @@ -16,7 +18,7 @@ const { BLOOM_FALSE_POSITIVE_RATE } = require('../../../CONSTANTS'); * @return {Promise} */ -module.exports = async function subscribeToTransactionsWithProofs( +export default async function subscribeToTransactionsWithProofs( addressList, opts = { fromBlockHeight: 1, count: 0 }, ) { diff --git a/packages/wallet-lib/src/transport/DAPIClientTransport/utils/getHeightFromMerkleBlockBuffer.js b/packages/wallet-lib/src/transport/DAPIClientTransport/utils/getHeightFromMerkleBlockBuffer.js index e067ca82619..a5bf741d61a 100644 --- a/packages/wallet-lib/src/transport/DAPIClientTransport/utils/getHeightFromMerkleBlockBuffer.js +++ b/packages/wallet-lib/src/transport/DAPIClientTransport/utils/getHeightFromMerkleBlockBuffer.js @@ -1,6 +1,7 @@ +import dashcore from '@dashevo/dashcore-lib'; const { MerkleBlock, -} = require('@dashevo/dashcore-lib'); +} = dashcore; const getHeightFromMerkleBlockBuffer = async (client, merkleBlockBuffer) => { // FIXME: MerkleBlock do not accept hex. @@ -16,4 +17,4 @@ const getHeightFromMerkleBlockBuffer = async (client, merkleBlockBuffer) => { return prevBlockHeight + 1; } }; -module.exports = getHeightFromMerkleBlockBuffer; +export default getHeightFromMerkleBlockBuffer; \ No newline at end of file diff --git a/packages/wallet-lib/src/transport/FixtureTransport/FixtureTransport.js b/packages/wallet-lib/src/transport/FixtureTransport/FixtureTransport.js index d6c98b0c652..1a4a4d8573f 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/FixtureTransport.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/FixtureTransport.js @@ -1,5 +1,5 @@ -const blocksData = require('./data/blocks/blocks'); -const AbstractTransport = require('../AbstractTransport'); +import blocksData from './data/blocks/blocks.js'; +import AbstractTransport from '../AbstractTransport.js'; const bestBlockDataHeight = 21546; @@ -55,17 +55,29 @@ class FixtureTransport extends AbstractTransport { } } -FixtureTransport.prototype.getBestBlock = require('./methods/getBestBlock'); -FixtureTransport.prototype.getBestBlockHash = require('./methods/getBestBlockHash'); -FixtureTransport.prototype.getBestBlockHeader = require('./methods/getBestBlockHeader'); -FixtureTransport.prototype.getBestBlockHeight = require('./methods/getBestBlockHeight'); -FixtureTransport.prototype.getBlockByHash = require('./methods/getBlockByHash'); -FixtureTransport.prototype.getBlockByHeight = require('./methods/getBlockByHeight'); -FixtureTransport.prototype.getBlockHeaderByHash = require('./methods/getBlockHeaderByHash'); -FixtureTransport.prototype.getBlockHeaderByHeight = require('./methods/getBlockHeaderByHeight'); -FixtureTransport.prototype.getBlockchainStatus = require('./methods/getBlockchainStatus'); -FixtureTransport.prototype.getTransaction = require('./methods/getTransaction'); -FixtureTransport.prototype.sendTransaction = require('./methods/sendTransaction'); -FixtureTransport.prototype.subscribeToAddressesTransactions = require('./methods/subscribeToAddressesTransactions'); +import _FixtureTransport_getBestBlock from './methods/getBestBlock.js'; +FixtureTransport.prototype.getBestBlock = _FixtureTransport_getBestBlock; +import _FixtureTransport_getBestBlockHash from './methods/getBestBlockHash.js'; +FixtureTransport.prototype.getBestBlockHash = _FixtureTransport_getBestBlockHash; +import _FixtureTransport_getBestBlockHeader from './methods/getBestBlockHeader.js'; +FixtureTransport.prototype.getBestBlockHeader = _FixtureTransport_getBestBlockHeader; +import _FixtureTransport_getBestBlockHeight from './methods/getBestBlockHeight.js'; +FixtureTransport.prototype.getBestBlockHeight = _FixtureTransport_getBestBlockHeight; +import _FixtureTransport_getBlockByHash from './methods/getBlockByHash.js'; +FixtureTransport.prototype.getBlockByHash = _FixtureTransport_getBlockByHash; +import _FixtureTransport_getBlockByHeight from './methods/getBlockByHeight.js'; +FixtureTransport.prototype.getBlockByHeight = _FixtureTransport_getBlockByHeight; +import _FixtureTransport_getBlockHeaderByHash from './methods/getBlockHeaderByHash.js'; +FixtureTransport.prototype.getBlockHeaderByHash = _FixtureTransport_getBlockHeaderByHash; +import _FixtureTransport_getBlockHeaderByHeight from './methods/getBlockHeaderByHeight.js'; +FixtureTransport.prototype.getBlockHeaderByHeight = _FixtureTransport_getBlockHeaderByHeight; +import _FixtureTransport_getBlockchainStatus from './methods/getBlockchainStatus.js'; +FixtureTransport.prototype.getBlockchainStatus = _FixtureTransport_getBlockchainStatus; +import _FixtureTransport_getTransaction from './methods/getTransaction.js'; +FixtureTransport.prototype.getTransaction = _FixtureTransport_getTransaction; +import _FixtureTransport_sendTransaction from './methods/sendTransaction.js'; +FixtureTransport.prototype.sendTransaction = _FixtureTransport_sendTransaction; +import _FixtureTransport_subscribeToAddressesTransactions from './methods/subscribeToAddressesTransactions.js'; +FixtureTransport.prototype.subscribeToAddressesTransactions = _FixtureTransport_subscribeToAddressesTransactions; -module.exports = FixtureTransport; +export default FixtureTransport; \ No newline at end of file diff --git a/packages/wallet-lib/src/transport/FixtureTransport/data/blocks/blocks.js b/packages/wallet-lib/src/transport/FixtureTransport/data/blocks/blocks.js index 44b57db171c..1361edeb32f 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/data/blocks/blocks.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/data/blocks/blocks.js @@ -27,6 +27,11 @@ const hashes = Object.entries(heights).reduce((obj, [height, hash]) => { return obj; }, {}); -module.exports = { +export { + heights, + hashes, +}; + +export default { heights, hashes, }; diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlock.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlock.js index f9525010f63..4e001e5fe68 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlock.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlock.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function getBestBlock() { +export default async function getBestBlock() { logger.silly('FakeNet.getBestBlock'); return this.getBlockByHash(await this.getBestBlockHash()); }; diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHash.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHash.js index 3036e32b8fe..a5b816c9100 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHash.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHash.js @@ -1,3 +1,3 @@ -module.exports = async function getBestBlockHash() { +export default async function getBestBlockHash() { return this.blockHash; }; diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHeader.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHeader.js index 5b66ae8f700..6fc951aca08 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHeader.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHeader.js @@ -1,6 +1,6 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; -module.exports = async function getBestBlockHeader() { +export default async function getBestBlockHeader() { logger.silly('FakeNet.getBestBlockHeader'); return this.getBlockHeaderByHash(await this.getBestBlockHash()); }; diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHeight.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHeight.js index 496671395fb..8e8fef4f528 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHeight.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBestBlockHeight.js @@ -1,3 +1,3 @@ -module.exports = async function getBestBlockHeight() { +export default async function getBestBlockHeight() { return this.height; }; diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockByHash.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockByHash.js index 1865926fd8e..c9bda96a149 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockByHash.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockByHash.js @@ -1,9 +1,14 @@ -const { Block } = require('@dashevo/dashcore-lib'); -const fs = require('fs'); -const blocks = require('../data/blocks/blocks'); +import dashcore from '@dashevo/dashcore-lib'; +const { Block } = dashcore; +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import blocks from '../data/blocks/blocks.js'; -module.exports = async function getBlockByHash(hash) { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default async function getBlockByHash(hash) { const height = blocks.hashes[hash]; const blockfile = JSON.parse(fs.readFileSync(`${__dirname}/../data/blocks/${height}.json`)); return new Block(Buffer.from(blockfile.block, 'hex')); -}; +} diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockByHeight.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockByHeight.js index 37b4adf26e2..bc813443add 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockByHeight.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockByHeight.js @@ -1,4 +1,4 @@ -module.exports = async function getBlockByHeight(height) { +export default async function getBlockByHeight(height) { const hash = this.blocks.heights[height]; return this.getBlockByHash(hash); }; diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockHeaderByHash.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockHeaderByHash.js index 24574389fc2..8439637782b 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockHeaderByHash.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockHeaderByHash.js @@ -1,3 +1,3 @@ -module.exports = async function getBlockHeaderByHash(blockHash) { +export default async function getBlockHeaderByHash(blockHash) { return (await this.getBlockByHash(blockHash)).header; }; diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockHeaderByHeight.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockHeaderByHeight.js index c7d7c80dde3..423423e8f69 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockHeaderByHeight.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockHeaderByHeight.js @@ -1,3 +1,3 @@ -module.exports = async function getBlockHeaderByHeight(blockHeight) { +export default async function getBlockHeaderByHeight(blockHeight) { return (await this.getBlockByHeight(blockHeight)).header; }; diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockchainStatus.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockchainStatus.js index eb36aa8e0ad..3015e030f11 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockchainStatus.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getBlockchainStatus.js @@ -1,4 +1,4 @@ -module.exports = async function getBlockchainStatus() { +export default async function getBlockchainStatus() { const { height, relayFee, network } = this; return { diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/getTransaction.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/getTransaction.js index 531ff9115bb..786f7deaef7 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/getTransaction.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/getTransaction.js @@ -1,7 +1,12 @@ -const { Transaction } = require('@dashevo/dashcore-lib'); -const fs = require('fs'); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; -module.exports = async function getTransaction(transactionHash) { +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +export default async function getTransaction(transactionHash) { const txFile = JSON.parse(fs.readFileSync(`${__dirname}/../data/transactions/${transactionHash}.json`)); return new Transaction(Buffer.from(txFile.transaction, 'hex')); -}; +} diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/sendTransaction.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/sendTransaction.js index c481f0dac07..f1e46127352 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/sendTransaction.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/sendTransaction.js @@ -1,3 +1,3 @@ -module.exports = async function sendTransaction() { +export default async function sendTransaction() { throw new Error('Not yet handled'); }; diff --git a/packages/wallet-lib/src/transport/FixtureTransport/methods/subscribeToAddressesTransactions.js b/packages/wallet-lib/src/transport/FixtureTransport/methods/subscribeToAddressesTransactions.js index c43dc843bd5..a9f7a5d6cf1 100644 --- a/packages/wallet-lib/src/transport/FixtureTransport/methods/subscribeToAddressesTransactions.js +++ b/packages/wallet-lib/src/transport/FixtureTransport/methods/subscribeToAddressesTransactions.js @@ -1,5 +1,5 @@ -const EVENTS = require('../../../EVENTS'); -const logger = require('../../../logger'); +import EVENTS from '../../../EVENTS.js'; +import logger from '../../../logger/index.js'; // Artifact from previous optimisation made in SyncWorker plugin // Kept for reminder when Bloomfilters @@ -49,7 +49,7 @@ function startExecutor() { this.state.executors.addresses = setInterval(() => executor.call(self), fastFetchThreshold); } -module.exports = async function subscribeToAddressesTransactions(addressList) { +export default async function subscribeToAddressesTransactions(addressList) { logger.silly(`FakeNet.subscribeToAddressesTransactions[${addressList}]`); if (!Array.isArray(addressList)) throw new Error('Expected array of addresses'); const { executors, subscriptions, addressesTransactionsMap } = this.state; diff --git a/packages/wallet-lib/src/transport/Transport.d.ts b/packages/wallet-lib/src/transport/Transport.d.ts index c9fd3ac7e93..19a5d111f24 100644 --- a/packages/wallet-lib/src/transport/Transport.d.ts +++ b/packages/wallet-lib/src/transport/Transport.d.ts @@ -1,4 +1,4 @@ -import {Block, BlockHeader, Transaction} from "@dashevo/dashcore-lib"; +import { Block, BlockHeader, Transaction } from '@dashevo/dashcore-lib'; export declare interface Transport { announce(eventName: string, args: any[]): void diff --git a/packages/wallet-lib/src/transport/createTransportFromOptions.js b/packages/wallet-lib/src/transport/createTransportFromOptions.js index 52ffbde993a..d1c58963dd3 100644 --- a/packages/wallet-lib/src/transport/createTransportFromOptions.js +++ b/packages/wallet-lib/src/transport/createTransportFromOptions.js @@ -1,8 +1,8 @@ -const DAPIClient = require('@dashevo/dapi-client'); +import DAPIClient from '@dashevo/dapi-client'; -const _ = require('lodash'); +import _ from 'lodash'; -const DAPIClientTransport = require('./DAPIClientTransport/DAPIClientTransport'); +import DAPIClientTransport from './DAPIClientTransport/DAPIClientTransport.js'; /** * @@ -20,4 +20,4 @@ function createTransportFromOptions(options) { return new DAPIClientTransport(client); } -module.exports = createTransportFromOptions; +export default createTransportFromOptions; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/Account.d.ts b/packages/wallet-lib/src/types/Account/Account.d.ts index 974440babe9..604fb7b25f8 100644 --- a/packages/wallet-lib/src/types/Account/Account.d.ts +++ b/packages/wallet-lib/src/types/Account/Account.d.ts @@ -13,7 +13,7 @@ import { Plugins, RawTransaction, TransactionsMap, WalletObj, StatusInfo } from "../types"; import { KeyChainStore } from "../KeyChainStore/KeyChainStore" -import { InstantLock } from "@dashevo/dashcore-lib"; +import { InstantLock } from '@dashevo/dashcore-lib'; import { Identities, Wallet} from "../../index"; import { Transport } from "../../transport/Transport"; import { BlockHeader } from "@dashevo/dashcore-lib/typings/block/BlockHeader"; diff --git a/packages/wallet-lib/src/types/Account/Account.js b/packages/wallet-lib/src/types/Account/Account.js index b8240f621b2..7c7ba07ad04 100644 --- a/packages/wallet-lib/src/types/Account/Account.js +++ b/packages/wallet-lib/src/types/Account/Account.js @@ -1,15 +1,15 @@ -const _ = require('lodash'); -const EventEmitter = require('events'); -const logger = require('../../logger'); -const { WALLET_TYPES, BIP44_ADDRESS_GAP } = require('../../CONSTANTS'); -const { is } = require('../../utils'); -const EVENTS = require('../../EVENTS'); -const Wallet = require('../Wallet/Wallet'); -const { simpleDescendingAccumulator } = require('../../utils/coinSelections/strategies'); -const { +import _ from 'lodash'; +import EventEmitter from 'events'; +import logger from '../../logger/index.js'; +import { WALLET_TYPES, BIP44_ADDRESS_GAP } from '../../CONSTANTS.js'; +import { is } from '../../utils/index.js'; +import EVENTS from '../../EVENTS.js'; +import Wallet from '../Wallet/Wallet.js'; +import { simpleDescendingAccumulator } from '../../utils/coinSelections/strategies/index.js'; +import { TxMetadataTimeoutError, InstantLockTimeoutError, -} = require('../../errors'); +} from '../../errors/index.js'; function getNextUnusedAccountIndexForWallet(wallet) { if (wallet && wallet.accounts) { @@ -43,12 +43,12 @@ const defaultOptions = { }; /* eslint-disable no-underscore-dangle */ -const _initializeAccount = require('./_initializeAccount'); -const _addAccountToWallet = require('./_addAccountToWallet'); -const _loadStrategy = require('./_loadStrategy'); +import _initializeAccount from './_initializeAccount.js'; +import _addAccountToWallet from './_addAccountToWallet.js'; +import _loadStrategy from './_loadStrategy.js'; -const getNetwork = require('./_getNetwork'); -const getBIP44Path = require('./_getBIP44Path'); +import getNetwork from './_getNetwork.js'; +import getBIP44Path from './_getBIP44Path.js'; class Account extends EventEmitter { constructor(wallet, opts = defaultOptions) { @@ -401,39 +401,73 @@ class Account extends EventEmitter { } } -Account.prototype.broadcastTransaction = require('./methods/broadcastTransaction'); -Account.prototype.connect = require('./methods/connect'); -Account.prototype.createTransaction = require('./methods/createTransaction'); -Account.prototype.decode = require('./methods/decode'); -Account.prototype.decrypt = require('./methods/decrypt'); -Account.prototype.disconnect = require('./methods/disconnect'); -Account.prototype.encode = require('./methods/encode'); -Account.prototype.encrypt = require('./methods/encrypt'); -Account.prototype.fetchStatus = require('./methods/fetchStatus'); -Account.prototype.forceRefreshAccount = require('./methods/forceRefreshAccount'); -Account.prototype.generateAddress = require('./methods/generateAddress'); -Account.prototype.getAddress = require('./methods/getAddress'); -Account.prototype.getAddresses = require('./methods/getAddresses'); -Account.prototype.getBlockHeader = require('./methods/getBlockHeader'); -Account.prototype.getConfirmedBalance = require('./methods/getConfirmedBalance'); -Account.prototype.getPlugin = require('./methods/getPlugin'); -Account.prototype.getPrivateKeys = require('./methods/getPrivateKeys'); -Account.prototype.getTotalBalance = require('./methods/getTotalBalance'); -Account.prototype.getTransaction = require('./methods/getTransaction'); -Account.prototype.getTransactionHistory = require('./methods/getTransactionHistory'); -Account.prototype.getTransactions = require('./methods/getTransactions'); -Account.prototype.getUnconfirmedBalance = require('./methods/getUnconfirmedBalance'); -Account.prototype.getUnusedAddress = require('./methods/getUnusedAddress'); -Account.prototype.getUnusedIdentityIndex = require('./methods/getUnusedIdentityIndex'); -Account.prototype.getUTXOS = require('./methods/getUTXOS'); -Account.prototype.getWorker = require('./methods/getWorker'); -Account.prototype.hasPlugins = require('./methods/hasPlugins'); -Account.prototype.injectPlugin = require('./methods/injectPlugin'); -Account.prototype.importTransactions = require('./methods/importTransactions'); -Account.prototype.createPathsForTransactions = require('./methods/createPathsForTransactions'); -Account.prototype.generateNewPaths = require('./methods/generateNewPaths'); -Account.prototype.addPathsToStore = require('./methods/addPathsToStore'); -Account.prototype.addDefaultPaths = require('./methods/addDefaultPaths'); -Account.prototype.sign = require('./methods/sign'); - -module.exports = Account; +import _Account_broadcastTransaction from './methods/broadcastTransaction.js'; +Account.prototype.broadcastTransaction = _Account_broadcastTransaction; +import _Account_connect from './methods/connect.js'; +Account.prototype.connect = _Account_connect; +import _Account_createTransaction from './methods/createTransaction.js'; +Account.prototype.createTransaction = _Account_createTransaction; +import _Account_decode from './methods/decode.js'; +Account.prototype.decode = _Account_decode; +import _Account_decrypt from './methods/decrypt.js'; +Account.prototype.decrypt = _Account_decrypt; +import _Account_disconnect from './methods/disconnect.js'; +Account.prototype.disconnect = _Account_disconnect; +import _Account_encode from './methods/encode.js'; +Account.prototype.encode = _Account_encode; +import _Account_encrypt from './methods/encrypt.js'; +Account.prototype.encrypt = _Account_encrypt; +import _Account_fetchStatus from './methods/fetchStatus.js'; +Account.prototype.fetchStatus = _Account_fetchStatus; +import _Account_forceRefreshAccount from './methods/forceRefreshAccount.js'; +Account.prototype.forceRefreshAccount = _Account_forceRefreshAccount; +import _Account_generateAddress from './methods/generateAddress.js'; +Account.prototype.generateAddress = _Account_generateAddress; +import _Account_getAddress from './methods/getAddress.js'; +Account.prototype.getAddress = _Account_getAddress; +import _Account_getAddresses from './methods/getAddresses.js'; +Account.prototype.getAddresses = _Account_getAddresses; +import _Account_getBlockHeader from './methods/getBlockHeader.js'; +Account.prototype.getBlockHeader = _Account_getBlockHeader; +import _Account_getConfirmedBalance from './methods/getConfirmedBalance.js'; +Account.prototype.getConfirmedBalance = _Account_getConfirmedBalance; +import _Account_getPlugin from './methods/getPlugin.js'; +Account.prototype.getPlugin = _Account_getPlugin; +import _Account_getPrivateKeys from './methods/getPrivateKeys.js'; +Account.prototype.getPrivateKeys = _Account_getPrivateKeys; +import _Account_getTotalBalance from './methods/getTotalBalance.js'; +Account.prototype.getTotalBalance = _Account_getTotalBalance; +import _Account_getTransaction from './methods/getTransaction.js'; +Account.prototype.getTransaction = _Account_getTransaction; +import _Account_getTransactionHistory from './methods/getTransactionHistory.js'; +Account.prototype.getTransactionHistory = _Account_getTransactionHistory; +import _Account_getTransactions from './methods/getTransactions.js'; +Account.prototype.getTransactions = _Account_getTransactions; +import _Account_getUnconfirmedBalance from './methods/getUnconfirmedBalance.js'; +Account.prototype.getUnconfirmedBalance = _Account_getUnconfirmedBalance; +import _Account_getUnusedAddress from './methods/getUnusedAddress.js'; +Account.prototype.getUnusedAddress = _Account_getUnusedAddress; +import _Account_getUnusedIdentityIndex from './methods/getUnusedIdentityIndex.js'; +Account.prototype.getUnusedIdentityIndex = _Account_getUnusedIdentityIndex; +import _Account_getUTXOS from './methods/getUTXOS.js'; +Account.prototype.getUTXOS = _Account_getUTXOS; +import _Account_getWorker from './methods/getWorker.js'; +Account.prototype.getWorker = _Account_getWorker; +import _Account_hasPlugins from './methods/hasPlugins.js'; +Account.prototype.hasPlugins = _Account_hasPlugins; +import _Account_injectPlugin from './methods/injectPlugin.js'; +Account.prototype.injectPlugin = _Account_injectPlugin; +import _Account_importTransactions from './methods/importTransactions.js'; +Account.prototype.importTransactions = _Account_importTransactions; +import _Account_createPathsForTransactions from './methods/createPathsForTransactions.js'; +Account.prototype.createPathsForTransactions = _Account_createPathsForTransactions; +import _Account_generateNewPaths from './methods/generateNewPaths.js'; +Account.prototype.generateNewPaths = _Account_generateNewPaths; +import _Account_addPathsToStore from './methods/addPathsToStore.js'; +Account.prototype.addPathsToStore = _Account_addPathsToStore; +import _Account_addDefaultPaths from './methods/addDefaultPaths.js'; +Account.prototype.addDefaultPaths = _Account_addDefaultPaths; +import _Account_sign from './methods/sign.js'; +Account.prototype.sign = _Account_sign; + +export default Account; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/Account.spec.js b/packages/wallet-lib/src/types/Account/Account.spec.js index 8d56e1943f4..7e31421b3cb 100644 --- a/packages/wallet-lib/src/types/Account/Account.spec.js +++ b/packages/wallet-lib/src/types/Account/Account.spec.js @@ -1,16 +1,16 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); -const knifeMnemonic = require('../../../fixtures/knifeeasily'); -const fluidMnemonic = require('../../../fixtures/fluidDepth'); -const cR4t6ePrivateKey = require('../../../fixtures/cR4t6e_pk'); -const { WALLET_TYPES } = require('../../CONSTANTS'); -const { Account, EVENTS } = require('../../index'); -const EventEmitter = require('events'); -const inMem = require('../../adapters/InMem'); -const Storage = require('../Storage/Storage'); -const {mock} = require("sinon"); -const KeyChainStore = require("../KeyChainStore/KeyChainStore"); -const DerivableKeyChain = require("../DerivableKeyChain/DerivableKeyChain"); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; +import knifeMnemonic from '../../../fixtures/knifeeasily.json' with { type: 'json' }; +import fluidMnemonic from '../../../fixtures/fluidDepth.json' with { type: 'json' }; +import cR4t6ePrivateKey from '../../../fixtures/cR4t6e_pk.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../CONSTANTS.js'; +import { Account, EVENTS } from '../../index.js'; +import EventEmitter from 'events'; +import inMem from '../../adapters/InMem.js'; +import Storage from '../Storage/Storage.js'; +import {mock} from 'sinon'; +import KeyChainStore from '../KeyChainStore/KeyChainStore.js'; +import DerivableKeyChain from '../DerivableKeyChain/DerivableKeyChain.js'; const blockHeader = new Dashcore.BlockHeader.fromObject({ hash: '00000ac3a0c9df709260e41290d6902e5a4a073099f11fe8c1ce80aadc4bb331', version: 2, diff --git a/packages/wallet-lib/src/types/Account/_addAccountToWallet.js b/packages/wallet-lib/src/types/Account/_addAccountToWallet.js index 935b0c90b48..a63d4747b0d 100644 --- a/packages/wallet-lib/src/types/Account/_addAccountToWallet.js +++ b/packages/wallet-lib/src/types/Account/_addAccountToWallet.js @@ -12,4 +12,4 @@ const _addAccountToWallet = function addAccountToWallet(account, wallet) { wallet.accounts.push(account); } }; -module.exports = _addAccountToWallet; +export default _addAccountToWallet; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/_addAccountToWallet.spec.js b/packages/wallet-lib/src/types/Account/_addAccountToWallet.spec.js index e3e7d6181d7..7a3cb24b93c 100644 --- a/packages/wallet-lib/src/types/Account/_addAccountToWallet.spec.js +++ b/packages/wallet-lib/src/types/Account/_addAccountToWallet.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const addAccountToWallet = require('./_addAccountToWallet'); +import { expect } from 'chai'; +import addAccountToWallet from './_addAccountToWallet.js'; describe('Account - addAccountToWallet', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Account/_getBIP44Path.js b/packages/wallet-lib/src/types/Account/_getBIP44Path.js index b26d039ce84..2db5ceeb8e0 100644 --- a/packages/wallet-lib/src/types/Account/_getBIP44Path.js +++ b/packages/wallet-lib/src/types/Account/_getBIP44Path.js @@ -1,14 +1,14 @@ -const Dashcore = require('@dashevo/dashcore-lib'); -const { +import Dashcore from '@dashevo/dashcore-lib'; +import { BIP44_LIVENET_ROOT_PATH, BIP44_TESTNET_ROOT_PATH, -} = require('../../CONSTANTS'); +} from '../../CONSTANTS.js'; /** * Will return a root account path * @param network - default : 'testnet' * @param accountIndex - default : 0 * @return {string} - BIP44 Path to account */ -module.exports = function getBIP44Path(network, accountIndex = 0) { +export default function getBIP44Path(network, accountIndex = 0) { return (network === Dashcore.Networks.livenet.toString()) ? `${BIP44_LIVENET_ROOT_PATH}/${accountIndex}'` : `${BIP44_TESTNET_ROOT_PATH}/${accountIndex}'`; diff --git a/packages/wallet-lib/src/types/Account/_getBIP44Path.spec.js b/packages/wallet-lib/src/types/Account/_getBIP44Path.spec.js index c744d5a677c..4b23e8f0d5c 100644 --- a/packages/wallet-lib/src/types/Account/_getBIP44Path.spec.js +++ b/packages/wallet-lib/src/types/Account/_getBIP44Path.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; describe('Account - getBIP44Path', () => { diff --git a/packages/wallet-lib/src/types/Account/_getNetwork.js b/packages/wallet-lib/src/types/Account/_getNetwork.js index b3d0ce6a0b5..6cff934b793 100644 --- a/packages/wallet-lib/src/types/Account/_getNetwork.js +++ b/packages/wallet-lib/src/types/Account/_getNetwork.js @@ -1,5 +1,5 @@ -const Dashcore = require('@dashevo/dashcore-lib'); +import Dashcore from '@dashevo/dashcore-lib'; -module.exports = function getNetwork(network) { +export default function getNetwork(network) { return Dashcore.Networks[network].toString() || Dashcore.Networks.testnet.toString(); }; diff --git a/packages/wallet-lib/src/types/Account/_getNetwork.spec.js b/packages/wallet-lib/src/types/Account/_getNetwork.spec.js index 237c2517800..0ed35778b2e 100644 --- a/packages/wallet-lib/src/types/Account/_getNetwork.spec.js +++ b/packages/wallet-lib/src/types/Account/_getNetwork.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; describe('Account - getNetwork', () => { diff --git a/packages/wallet-lib/src/types/Account/_initializeAccount.js b/packages/wallet-lib/src/types/Account/_initializeAccount.js index 65c69b7a207..e2f069b523b 100644 --- a/packages/wallet-lib/src/types/Account/_initializeAccount.js +++ b/packages/wallet-lib/src/types/Account/_initializeAccount.js @@ -1,6 +1,6 @@ -const logger = require('../../logger'); -const EVENTS = require('../../EVENTS'); -const preparePlugins = require('./_preparePlugins'); +import logger from '../../logger/index.js'; +import EVENTS from '../../EVENTS.js'; +import preparePlugins from './_preparePlugins.js'; // eslint-disable-next-line no-underscore-dangle async function _initializeAccount(account, userUnsafePlugins) { @@ -67,4 +67,4 @@ async function _initializeAccount(account, userUnsafePlugins) { }); } -module.exports = _initializeAccount; +export default _initializeAccount; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/_loadStrategy.js b/packages/wallet-lib/src/types/Account/_loadStrategy.js index 8675ec1c60f..3ceef21b08f 100644 --- a/packages/wallet-lib/src/types/Account/_loadStrategy.js +++ b/packages/wallet-lib/src/types/Account/_loadStrategy.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const { is } = require('../../utils'); -const { InvalidStrategy, UnknownStrategy } = require('../../errors'); -const buildInStrategies = require('../../utils/coinSelections/strategies'); +import _ from 'lodash'; +import { is } from '../../utils/index.js'; +import { InvalidStrategy, UnknownStrategy } from '../../errors/index.js'; +import buildInStrategies from '../../utils/coinSelections/strategies/index.js'; const fromString = function fromString(strategyName) { if (!_.has(buildInStrategies, strategyName)) return new UnknownStrategy(`Unknown strategy ${strategyName}`); @@ -18,4 +18,4 @@ const _loadStrategy = function _loadStrategy(arg) { throw new InvalidStrategy(arg); }; -module.exports = _loadStrategy; +export default _loadStrategy; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/_preparePlugins.js b/packages/wallet-lib/src/types/Account/_preparePlugins.js index 18138186e52..9007ce68cc8 100644 --- a/packages/wallet-lib/src/types/Account/_preparePlugins.js +++ b/packages/wallet-lib/src/types/Account/_preparePlugins.js @@ -1,6 +1,6 @@ -const Worker = require('../../plugins/Worker'); +import Worker from '../../plugins/Worker.js'; -const sortPlugins = require('./_sortPlugins'); +import sortPlugins from './_sortPlugins.js'; const preparePlugins = function preparePlugins(account, userUnsafePlugins) { return new Promise((resolve, reject) => { @@ -41,4 +41,4 @@ const preparePlugins = function preparePlugins(account, userUnsafePlugins) { }); }; -module.exports = preparePlugins; +export default preparePlugins; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/_sortPlugins.js b/packages/wallet-lib/src/types/Account/_sortPlugins.js index d35cde739c8..588ae3a2191 100644 --- a/packages/wallet-lib/src/types/Account/_sortPlugins.js +++ b/packages/wallet-lib/src/types/Account/_sortPlugins.js @@ -1,9 +1,10 @@ -const { each, findIndex } = require('lodash'); -const TransactionsSyncWorker = require('../../plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker'); -const BlockHeadersSyncWorker = require('../../plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker'); -const ChainPlugin = require('../../plugins/Plugins/ChainPlugin'); -const IdentitySyncWorker = require('../../plugins/Workers/IdentitySyncWorker'); -const { WALLET_TYPES } = require('../../CONSTANTS'); +import lodash from 'lodash'; +const { each, findIndex } = lodash; +import TransactionsSyncWorker from '../../plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.js'; +import BlockHeadersSyncWorker from '../../plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.js'; +import ChainPlugin from '../../plugins/Plugins/ChainPlugin.js'; +import IdentitySyncWorker from '../../plugins/Workers/IdentitySyncWorker.js'; +import { WALLET_TYPES } from '../../CONSTANTS.js'; const initPlugin = (UnsafePlugin) => { const isInit = !(typeof UnsafePlugin === 'function'); @@ -139,4 +140,4 @@ const sortPlugins = (account, userUnsafePlugins) => { } return sortUserPlugins(plugins, userUnsafePlugins, account.allowSensitiveOperations); }; -module.exports = sortPlugins; +export default sortPlugins; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/_sortPlugins.spec.js b/packages/wallet-lib/src/types/Account/_sortPlugins.spec.js index 1e697406934..6a0730c5c3f 100644 --- a/packages/wallet-lib/src/types/Account/_sortPlugins.spec.js +++ b/packages/wallet-lib/src/types/Account/_sortPlugins.spec.js @@ -1,13 +1,13 @@ -const {expect} = require('chai'); -const {WALLET_TYPES} = require('../../CONSTANTS'); -const sortPlugins = require('./_sortPlugins'); +import {expect} from 'chai'; +import {WALLET_TYPES} from '../../CONSTANTS.js'; +import sortPlugins from './_sortPlugins.js'; -const TransactionsSyncWorker = require('../../plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker'); -const BlockHeadersSyncWorker = require('../../plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker'); -const ChainPlugin = require('../../plugins/Plugins/ChainPlugin'); -const IdentitySyncWorker = require('../../plugins/Workers/IdentitySyncWorker'); +import TransactionsSyncWorker from '../../plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.js'; +import BlockHeadersSyncWorker from '../../plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.js'; +import ChainPlugin from '../../plugins/Plugins/ChainPlugin.js'; +import IdentitySyncWorker from '../../plugins/Workers/IdentitySyncWorker.js'; -const Worker = require('./../../plugins/Worker'); +import Worker from './../../plugins/Worker.js'; class dummyWorker extends Worker { constructor() { diff --git a/packages/wallet-lib/src/types/Account/methods/addDefaultPaths.js b/packages/wallet-lib/src/types/Account/methods/addDefaultPaths.js index f9428ce0158..ffe72362081 100644 --- a/packages/wallet-lib/src/types/Account/methods/addDefaultPaths.js +++ b/packages/wallet-lib/src/types/Account/methods/addDefaultPaths.js @@ -10,4 +10,4 @@ function addDefaultPaths() { this.addPathsToStore(defaultPaths, true); } -module.exports = addDefaultPaths; +export default addDefaultPaths; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/addPathsToStore.js b/packages/wallet-lib/src/types/Account/methods/addPathsToStore.js index d8bd5e5146c..d20b7820712 100644 --- a/packages/wallet-lib/src/types/Account/methods/addPathsToStore.js +++ b/packages/wallet-lib/src/types/Account/methods/addPathsToStore.js @@ -17,4 +17,4 @@ function addPathsToStore(paths, refreshUTXOState = true) { }); } -module.exports = addPathsToStore; +export default addPathsToStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/broadcastTransaction.js b/packages/wallet-lib/src/types/Account/methods/broadcastTransaction.js index 814b311e594..eb3e899fea7 100644 --- a/packages/wallet-lib/src/types/Account/methods/broadcastTransaction.js +++ b/packages/wallet-lib/src/types/Account/methods/broadcastTransaction.js @@ -1,13 +1,13 @@ -const Dashcore = require('@dashevo/dashcore-lib'); -const { is } = require('../../../utils'); -const { +import Dashcore from '@dashevo/dashcore-lib'; +import { is } from '../../../utils/index.js'; +import { ValidTransportLayerRequired, InvalidRawTransaction, InvalidDashcoreTransaction, -} = require('../../../errors'); -const EVENTS = require('../../../EVENTS'); -const MempoolPropagationTimeoutError = require('../../../errors/MempoolPropagationTimeoutError'); -const sleep = require('../../../utils/sleep'); +} from '../../../errors/index.js'; +import EVENTS from '../../../EVENTS.js'; +import MempoolPropagationTimeoutError from '../../../errors/MempoolPropagationTimeoutError.js'; +import sleep from '../../../utils/sleep.js'; const MEMPOOL_PROPAGATION_TIMEOUT = 360000; @@ -197,4 +197,4 @@ async function broadcastTransaction(transaction, options = { return transaction.hash; } -module.exports = broadcastTransaction; +export default broadcastTransaction; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/broadcastTransaction.spec.js b/packages/wallet-lib/src/types/Account/methods/broadcastTransaction.spec.js index 3f10f097e35..e3c9d7ed63c 100644 --- a/packages/wallet-lib/src/types/Account/methods/broadcastTransaction.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/broadcastTransaction.spec.js @@ -1,13 +1,15 @@ -const { expect } = require('chai'); -const EventEmitter = require('events'); -const Dashcore = require('@dashevo/dashcore-lib'); - -const broadcastTransaction = require('./broadcastTransaction'); -const EVENTS = require('../../../EVENTS'); -const validRawTxs = require('../../../../fixtures/rawtx').valid; -const invalidRawTxs = require('../../../../fixtures/rawtx').invalid; -const MempoolPropagationTimeoutError = require('../../../errors/MempoolPropagationTimeoutError'); -const ChainStore = require('../../ChainStore/ChainStore'); +import { expect } from 'chai'; +import EventEmitter from 'events'; +import Dashcore from '@dashevo/dashcore-lib'; + +import broadcastTransaction from './broadcastTransaction.js'; +import EVENTS from '../../../EVENTS.js'; +import rawTxs from '../../../../fixtures/rawtx.json' with { type: 'json' }; + +const validRawTxs = rawTxs.valid; +const invalidRawTxs = rawTxs.invalid; +import MempoolPropagationTimeoutError from '../../../errors/MempoolPropagationTimeoutError.js'; +import ChainStore from '../../ChainStore/ChainStore.js'; const { PrivateKey } = Dashcore; describe('Account - broadcastTransaction', function suite() { diff --git a/packages/wallet-lib/src/types/Account/methods/connect.js b/packages/wallet-lib/src/types/Account/methods/connect.js index 725a98d5a2a..c88649c0c1a 100644 --- a/packages/wallet-lib/src/types/Account/methods/connect.js +++ b/packages/wallet-lib/src/types/Account/methods/connect.js @@ -2,7 +2,7 @@ * This method will connect to all streams and workers available * @return {Boolean} */ -module.exports = function connect() { +export default function connect() { if (this.transport && this.transport.connect) { this.transport.connect(); } diff --git a/packages/wallet-lib/src/types/Account/methods/connect.spec.js b/packages/wallet-lib/src/types/Account/methods/connect.spec.js index 20200747c59..b1a53998b42 100644 --- a/packages/wallet-lib/src/types/Account/methods/connect.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/connect.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const connect = require('./connect'); -const DummyWorker = require('../../../../fixtures/DummyWorker'); +import { expect } from 'chai'; +import connect from './connect.js'; +import DummyWorker from '../../../../fixtures/DummyWorker.js'; let transportConnected = false; const emitted = []; diff --git a/packages/wallet-lib/src/types/Account/methods/createPathsForTransactions.js b/packages/wallet-lib/src/types/Account/methods/createPathsForTransactions.js index 22fb045aae8..d8d7d5ab126 100644 --- a/packages/wallet-lib/src/types/Account/methods/createPathsForTransactions.js +++ b/packages/wallet-lib/src/types/Account/methods/createPathsForTransactions.js @@ -1,4 +1,4 @@ -const sortTransactions = require('../../../utils/sortTransactions'); +import sortTransactions from '../../../utils/sortTransactions.js'; /** * Function goes through all transactions, and ensures address gap @@ -35,4 +35,4 @@ function createPathsForTransactions() { }); } -module.exports = createPathsForTransactions; +export default createPathsForTransactions; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/createTransaction.js b/packages/wallet-lib/src/types/Account/methods/createTransaction.js index 71334ed4be5..e0a83a218b8 100644 --- a/packages/wallet-lib/src/types/Account/methods/createTransaction.js +++ b/packages/wallet-lib/src/types/Account/methods/createTransaction.js @@ -1,11 +1,16 @@ /* eslint-disable no-underscore-dangle */ -const _ = require('lodash'); +import _ from 'lodash'; +import dashcore from '@dashevo/dashcore-lib'; const { - Transaction, PrivateKey, HDPrivateKey, crypto, Script, -} = require('@dashevo/dashcore-lib'); -const { CreateTransactionError } = require('../../../errors'); -const { dashToDuffs, coinSelection, is } = require('../../../utils'); -const _loadStrategy = require('../_loadStrategy'); + Transaction, + PrivateKey, + HDPrivateKey, + crypto, + Script, +} = dashcore; +import { CreateTransactionError } from '../../../errors/index.js'; +import { dashToDuffs, coinSelection, is } from '../../../utils/index.js'; +import _loadStrategy from '../_loadStrategy.js'; const parseUtxos = (utxos) => { // We do not allow mixmatch types (output, object together) utxo list @@ -128,4 +133,4 @@ function createTransaction(opts = {}) { } } -module.exports = createTransaction; +export default createTransaction; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/createTransaction.spec.js b/packages/wallet-lib/src/types/Account/methods/createTransaction.spec.js index 23b457fb988..5c63fd089ff 100644 --- a/packages/wallet-lib/src/types/Account/methods/createTransaction.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/createTransaction.spec.js @@ -1,20 +1,21 @@ -const _ = require('lodash'); -const { expect } = require('chai'); -const { HDPrivateKey, Transaction } = require('@dashevo/dashcore-lib'); +import _ from 'lodash'; +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { HDPrivateKey, Transaction } = dashcore; -const createTransaction = require('./createTransaction'); -const FixtureTransport = require('../../../transport/FixtureTransport/FixtureTransport'); +import createTransaction from './createTransaction.js'; +import FixtureTransport from '../../../transport/FixtureTransport/FixtureTransport.js'; -const getUTXOS = require('./getUTXOS'); -const getPrivateKeys = require('./getPrivateKeys'); -const getUnusedAddress = require('./getUnusedAddress'); +import getUTXOS from './getUTXOS.js'; +import getPrivateKeys from './getPrivateKeys.js'; +import getUnusedAddress from './getUnusedAddress.js'; -const getFixtureHDAccountWithStorage = require('../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage'); +import getFixtureHDAccountWithStorage from '../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; -const addressesFixtures = require('../../../../fixtures/addresses.json'); -const fixtureUTXOS = require('../../../transport/FixtureTransport/data/utxos/yQ1fb64aeLfgqFKyeV9Hg9KTaTq5ehHm22.json'); +import addressesFixtures from '../../../../fixtures/addresses.json' with { type: 'json' }; +import fixtureUTXOS from '../../../transport/FixtureTransport/data/utxos/yQ1fb64aeLfgqFKyeV9Hg9KTaTq5ehHm22.json' with { type: 'json' }; -const craftedGenerousMinerStrategy = require('../../../../fixtures/strategies/craftedGenerousMinerStrategy'); +import craftedGenerousMinerStrategy from '../../../../fixtures/strategies/craftedGenerousMinerStrategy.js'; describe('Account - createTransaction', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Account/methods/decode.js b/packages/wallet-lib/src/types/Account/methods/decode.js index bc0b692a54c..19a07f9c386 100644 --- a/packages/wallet-lib/src/types/Account/methods/decode.js +++ b/packages/wallet-lib/src/types/Account/methods/decode.js @@ -1,4 +1,4 @@ -const cbor = require('cbor'); +import cbor from 'cbor'; /** * Allow to decode an input @@ -13,4 +13,4 @@ const decode = function decode(method, data) { return cbor.decodeFirstSync(data); } }; -module.exports = decode; +export default decode; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/decode.spec.js b/packages/wallet-lib/src/types/Account/methods/decode.spec.js index 50b23e10594..eb9bf251940 100644 --- a/packages/wallet-lib/src/types/Account/methods/decode.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/decode.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const cbor = require('cbor'); -const decode = require('./decode'); +import { expect } from 'chai'; +import cbor from 'cbor'; +import decode from './decode.js'; describe('Account - decode', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Account/methods/decrypt.js b/packages/wallet-lib/src/types/Account/methods/decrypt.js index 108ab58c589..ecb197da563 100644 --- a/packages/wallet-lib/src/types/Account/methods/decrypt.js +++ b/packages/wallet-lib/src/types/Account/methods/decrypt.js @@ -1,4 +1,4 @@ -const CryptoJS = require('crypto-js'); +import CryptoJS from 'crypto-js'; const { AES } = CryptoJS; /** @@ -16,4 +16,4 @@ const decrypt = function decrypt(method, data, secret, encoding = '') { return (encoding === 'hex') ? decrypted.toString(CryptoJS.enc.Hex) : decrypted.toString(CryptoJS.enc.Utf8); } }; -module.exports = decrypt; +export default decrypt; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/decrypt.spec.js b/packages/wallet-lib/src/types/Account/methods/decrypt.spec.js index 5f42bf099f3..0e4c2ead0a4 100644 --- a/packages/wallet-lib/src/types/Account/methods/decrypt.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/decrypt.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const cbor = require('cbor'); -const decrypt = require('./decrypt'); +import { expect } from 'chai'; +import cbor from 'cbor'; +import decrypt from './decrypt.js'; const jsonObject = { string: 'string', diff --git a/packages/wallet-lib/src/types/Account/methods/disconnect.js b/packages/wallet-lib/src/types/Account/methods/disconnect.js index c60edef6af6..d5a3d2e9a74 100644 --- a/packages/wallet-lib/src/types/Account/methods/disconnect.js +++ b/packages/wallet-lib/src/types/Account/methods/disconnect.js @@ -4,7 +4,7 @@ * You want to use this method at the end of your life cycle of this lib. * @return {Promise} */ -module.exports = async function disconnect() { +export default async function disconnect() { this.isDisconnecting = true; if (this.transport && this.transport.disconnect) { await this.transport.disconnect(); diff --git a/packages/wallet-lib/src/types/Account/methods/disconnect.spec.js b/packages/wallet-lib/src/types/Account/methods/disconnect.spec.js index 8d924759413..d15aaf7edb5 100644 --- a/packages/wallet-lib/src/types/Account/methods/disconnect.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/disconnect.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const connect = require('./connect'); -const disconnect = require('./disconnect'); -const DummyWorker = require('../../../../fixtures/DummyWorker'); +import { expect } from 'chai'; +import connect from './connect.js'; +import disconnect from './disconnect.js'; +import DummyWorker from '../../../../fixtures/DummyWorker.js'; let transportConnected = false; const emitted = []; diff --git a/packages/wallet-lib/src/types/Account/methods/encode.js b/packages/wallet-lib/src/types/Account/methods/encode.js index e1991f84bcc..d5055935e52 100644 --- a/packages/wallet-lib/src/types/Account/methods/encode.js +++ b/packages/wallet-lib/src/types/Account/methods/encode.js @@ -1,4 +1,4 @@ -const cbor = require('cbor'); +import cbor from 'cbor'; /** * Allow to canonical encode an input @@ -12,4 +12,4 @@ const encode = function encode(method, data) { return cbor.encodeCanonical(data); } }; -module.exports = encode; +export default encode; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/encode.spec.js b/packages/wallet-lib/src/types/Account/methods/encode.spec.js index e8f2c2fc660..96d2904740e 100644 --- a/packages/wallet-lib/src/types/Account/methods/encode.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/encode.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const cbor = require('cbor'); -const encode = require('./encode'); +import { expect } from 'chai'; +import cbor from 'cbor'; +import encode from './encode.js'; describe('Account - encode', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Account/methods/encrypt.js b/packages/wallet-lib/src/types/Account/methods/encrypt.js index b66e66c2874..ebb2ae39b11 100644 --- a/packages/wallet-lib/src/types/Account/methods/encrypt.js +++ b/packages/wallet-lib/src/types/Account/methods/encrypt.js @@ -1,4 +1,4 @@ -const AES = require('crypto-js/aes'); +import AES from 'crypto-js/aes.js'; const encrypt = function encrypt(method, data, secret) { const str = typeof data === 'string' ? data : data.toString(); @@ -7,4 +7,4 @@ const encrypt = function encrypt(method, data, secret) { return AES.encrypt(str, secret).toString(); } }; -module.exports = encrypt; +export default encrypt; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/encrypt.spec.js b/packages/wallet-lib/src/types/Account/methods/encrypt.spec.js index facc317ea96..54fe26e7a4d 100644 --- a/packages/wallet-lib/src/types/Account/methods/encrypt.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/encrypt.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const CryptoJS = require('crypto-js'); -const { Wallet } = require('../../../index'); +import { expect } from 'chai'; +import CryptoJS from 'crypto-js'; +import { Wallet } from '../../../index.js'; const derivationPath = "m/44'/1'/0'/0"; diff --git a/packages/wallet-lib/src/types/Account/methods/fetchStatus.js b/packages/wallet-lib/src/types/Account/methods/fetchStatus.js index 9299f3d6e51..3d722f3192f 100644 --- a/packages/wallet-lib/src/types/Account/methods/fetchStatus.js +++ b/packages/wallet-lib/src/types/Account/methods/fetchStatus.js @@ -1,4 +1,4 @@ -const { ValidTransportLayerRequired } = require('../../../errors'); +import { ValidTransportLayerRequired } from '../../../errors/index.js'; /** * @return {Promise} status @@ -11,4 +11,4 @@ async function fetchStatus() { return this.transport.getBlockchainStatus(); } -module.exports = fetchStatus; +export default fetchStatus; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/fetchStatus.spec.js b/packages/wallet-lib/src/types/Account/methods/fetchStatus.spec.js index 6c9d2de1b5a..b4d5f585ceb 100644 --- a/packages/wallet-lib/src/types/Account/methods/fetchStatus.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/fetchStatus.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; describe('Account - fetchStatus', () => { diff --git a/packages/wallet-lib/src/types/Account/methods/forceRefreshAccount.js b/packages/wallet-lib/src/types/Account/methods/forceRefreshAccount.js index d7b231fd5cf..b6d93efa914 100644 --- a/packages/wallet-lib/src/types/Account/methods/forceRefreshAccount.js +++ b/packages/wallet-lib/src/types/Account/methods/forceRefreshAccount.js @@ -13,4 +13,4 @@ function forceRefreshAccount() { }); return true; } -module.exports = forceRefreshAccount; +export default forceRefreshAccount; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/forceRefreshAccount.spec.js b/packages/wallet-lib/src/types/Account/methods/forceRefreshAccount.spec.js index 4c942fe9d36..955a6f5566d 100644 --- a/packages/wallet-lib/src/types/Account/methods/forceRefreshAccount.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/forceRefreshAccount.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; describe('Account - forceRefreshAccount', () => { diff --git a/packages/wallet-lib/src/types/Account/methods/generateAddress.js b/packages/wallet-lib/src/types/Account/methods/generateAddress.js index 6d19109c108..9aebec2fc06 100644 --- a/packages/wallet-lib/src/types/Account/methods/generateAddress.js +++ b/packages/wallet-lib/src/types/Account/methods/generateAddress.js @@ -1,6 +1,6 @@ -const EVENTS = require('../../../EVENTS'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); -const { is } = require('../../../utils'); +import EVENTS from '../../../EVENTS.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; +import { is } from '../../../utils/index.js'; /** * Generate an address from a path and import it to the store @@ -91,4 +91,4 @@ function generateAddress(path, isWatchedAddress = true) { return addressData; } -module.exports = generateAddress; +export default generateAddress; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/generateAddress.spec.js b/packages/wallet-lib/src/types/Account/methods/generateAddress.spec.js index 79c73c2598e..1a51f7ef86e 100644 --- a/packages/wallet-lib/src/types/Account/methods/generateAddress.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/generateAddress.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; describe('Account - generateAddress', () => { diff --git a/packages/wallet-lib/src/types/Account/methods/generateNewPaths.js b/packages/wallet-lib/src/types/Account/methods/generateNewPaths.js index b43ad7362f6..a9adbbc702a 100644 --- a/packages/wallet-lib/src/types/Account/methods/generateNewPaths.js +++ b/packages/wallet-lib/src/types/Account/methods/generateNewPaths.js @@ -18,4 +18,4 @@ function generateNewPaths(addresses) { return issuedPaths; } -module.exports = generateNewPaths; +export default generateNewPaths; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getAddress.js b/packages/wallet-lib/src/types/Account/methods/getAddress.js index b4400635a07..77efa6df2a9 100644 --- a/packages/wallet-lib/src/types/Account/methods/getAddress.js +++ b/packages/wallet-lib/src/types/Account/methods/getAddress.js @@ -1,4 +1,4 @@ -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { WALLET_TYPES } from '../../../CONSTANTS.js'; /** * Get a specific address based on the index and type of address. @@ -23,4 +23,4 @@ function getAddress(addressIndex = 0, addressType = 'external') { ...chainStore.getAddress(address), }; } -module.exports = getAddress; +export default getAddress; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getAddress.spec.js b/packages/wallet-lib/src/types/Account/methods/getAddress.spec.js index e002c622f26..46c4dfe771d 100644 --- a/packages/wallet-lib/src/types/Account/methods/getAddress.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getAddress.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; describe('Account - getAddress', () => { diff --git a/packages/wallet-lib/src/types/Account/methods/getAddresses.js b/packages/wallet-lib/src/types/Account/methods/getAddresses.js index 6d957f63d61..6ab98066e8d 100644 --- a/packages/wallet-lib/src/types/Account/methods/getAddresses.js +++ b/packages/wallet-lib/src/types/Account/methods/getAddresses.js @@ -1,4 +1,4 @@ -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { WALLET_TYPES } from '../../../CONSTANTS.js'; /** * Get all the addresses from the store from a given type @@ -34,4 +34,4 @@ function getAddresses(addressType = 'external') { return typedAddresses; } -module.exports = getAddresses; +export default getAddresses; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getAddresses.spec.js b/packages/wallet-lib/src/types/Account/methods/getAddresses.spec.js index a3512b5ca7c..5899c4bbe29 100644 --- a/packages/wallet-lib/src/types/Account/methods/getAddresses.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getAddresses.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; describe('Account - getAddresses', () => { diff --git a/packages/wallet-lib/src/types/Account/methods/getBlockHeader.js b/packages/wallet-lib/src/types/Account/methods/getBlockHeader.js index 638beff2b65..325ff5946bf 100644 --- a/packages/wallet-lib/src/types/Account/methods/getBlockHeader.js +++ b/packages/wallet-lib/src/types/Account/methods/getBlockHeader.js @@ -1,4 +1,4 @@ -const { is } = require('../../../utils'); +import { is } from '../../../utils/index.js'; /** * Get a getBlockHeader from a provided block hash or block height @@ -17,4 +17,4 @@ async function getBlockHeader(identifier) { return blockHeader; } -module.exports = getBlockHeader; +export default getBlockHeader; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getConfirmedBalance.js b/packages/wallet-lib/src/types/Account/methods/getConfirmedBalance.js index 158ca50f02e..22194c923a8 100644 --- a/packages/wallet-lib/src/types/Account/methods/getConfirmedBalance.js +++ b/packages/wallet-lib/src/types/Account/methods/getConfirmedBalance.js @@ -1,4 +1,4 @@ -const { duffsToDash, calculateDuffBalance } = require('../../../utils'); +import { duffsToDash, calculateDuffBalance } from '../../../utils/index.js'; /** * Return the confirmed balance of an account. @@ -17,4 +17,4 @@ function getConfirmedBalance(displayDuffs = true) { return (displayDuffs) ? totalSat : duffsToDash(totalSat); } -module.exports = getConfirmedBalance; +export default getConfirmedBalance; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getConfirmedBalance.spec.js b/packages/wallet-lib/src/types/Account/methods/getConfirmedBalance.spec.js index 0c0c0e0d294..4f72a8e3830 100644 --- a/packages/wallet-lib/src/types/Account/methods/getConfirmedBalance.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getConfirmedBalance.spec.js @@ -1,8 +1,8 @@ -const { expect } = require('chai'); -const getTotalBalance = require('./getTotalBalance'); -const getConfirmedBalance = require('./getConfirmedBalance'); -const getUnconfirmedBalance = require('./getUnconfirmedBalance'); -const getFixtureHDAccountWithStorage = require("../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage"); +import { expect } from 'chai'; +import getTotalBalance from './getTotalBalance.js'; +import getConfirmedBalance from './getConfirmedBalance.js'; +import getUnconfirmedBalance from './getUnconfirmedBalance.js'; +import getFixtureHDAccountWithStorage from '../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; let mockedAccount; diff --git a/packages/wallet-lib/src/types/Account/methods/getPlugin.js b/packages/wallet-lib/src/types/Account/methods/getPlugin.js index 001e3467fff..3f4485473ef 100644 --- a/packages/wallet-lib/src/types/Account/methods/getPlugin.js +++ b/packages/wallet-lib/src/types/Account/methods/getPlugin.js @@ -1,6 +1,6 @@ -const { +import { UnknownPlugin, -} = require('../../../errors'); +} from '../../../errors/index.js'; /** * Get a plugin by name * @param {string} pluginName @@ -14,4 +14,4 @@ function getPlugin(pluginName) { } throw new UnknownPlugin(loweredPluginName); } -module.exports = getPlugin; +export default getPlugin; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getPlugin.spec.js b/packages/wallet-lib/src/types/Account/methods/getPlugin.spec.js index 1b77525575e..50ebb8b66a5 100644 --- a/packages/wallet-lib/src/types/Account/methods/getPlugin.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getPlugin.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; describe('Account - getPlugin', () => { diff --git a/packages/wallet-lib/src/types/Account/methods/getPrivateKeys.js b/packages/wallet-lib/src/types/Account/methods/getPrivateKeys.js index f7a068f8e17..7f938f9a177 100644 --- a/packages/wallet-lib/src/types/Account/methods/getPrivateKeys.js +++ b/packages/wallet-lib/src/types/Account/methods/getPrivateKeys.js @@ -23,4 +23,4 @@ function getPrivateKeys(addressList) { return privKeys; } -module.exports = getPrivateKeys; +export default getPrivateKeys; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getPrivateKeys.spec.js b/packages/wallet-lib/src/types/Account/methods/getPrivateKeys.spec.js index 2143aab6f90..f27bf5a9504 100644 --- a/packages/wallet-lib/src/types/Account/methods/getPrivateKeys.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getPrivateKeys.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; describe('Account - getPrivateKeys', () => { diff --git a/packages/wallet-lib/src/types/Account/methods/getTotalBalance.js b/packages/wallet-lib/src/types/Account/methods/getTotalBalance.js index 9c0161549d6..84a85dd3c98 100644 --- a/packages/wallet-lib/src/types/Account/methods/getTotalBalance.js +++ b/packages/wallet-lib/src/types/Account/methods/getTotalBalance.js @@ -1,4 +1,4 @@ -const { duffsToDash, calculateDuffBalance } = require('../../../utils'); +import { duffsToDash, calculateDuffBalance } from '../../../utils/index.js'; /** * Return the total balance of an account (confirmed + unconfirmed). @@ -18,4 +18,4 @@ function getTotalBalance(displayDuffs = true) { return (displayDuffs) ? totalSat : duffsToDash(totalSat); } -module.exports = getTotalBalance; +export default getTotalBalance; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getTotalBalance.spec.js b/packages/wallet-lib/src/types/Account/methods/getTotalBalance.spec.js index 443e93a2fa9..e46932716df 100644 --- a/packages/wallet-lib/src/types/Account/methods/getTotalBalance.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getTotalBalance.spec.js @@ -1,8 +1,8 @@ -const { expect } = require('chai'); -const getTotalBalance = require('./getTotalBalance'); -const getConfirmedBalance = require('./getConfirmedBalance'); -const getUnconfirmedBalance = require('./getUnconfirmedBalance'); -const getFixtureHDAccountWithStorage = require("../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage"); +import { expect } from 'chai'; +import getTotalBalance from './getTotalBalance.js'; +import getConfirmedBalance from './getConfirmedBalance.js'; +import getUnconfirmedBalance from './getUnconfirmedBalance.js'; +import getFixtureHDAccountWithStorage from '../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; let mockedAccount; describe('Account - getTotalBalance', function suite() { diff --git a/packages/wallet-lib/src/types/Account/methods/getTransaction.js b/packages/wallet-lib/src/types/Account/methods/getTransaction.js index da7a097052d..ae45664c7b5 100644 --- a/packages/wallet-lib/src/types/Account/methods/getTransaction.js +++ b/packages/wallet-lib/src/types/Account/methods/getTransaction.js @@ -1,4 +1,4 @@ -const EVENTS = require('../../../EVENTS'); +import EVENTS from '../../../EVENTS.js'; /** * Get a transaction from a provided txid @@ -56,4 +56,4 @@ async function getTransaction(txid = null) { return { transaction, metadata }; } -module.exports = getTransaction; +export default getTransaction; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getTransaction.spec.js b/packages/wallet-lib/src/types/Account/methods/getTransaction.spec.js index afcf859a884..ecb225a4300 100644 --- a/packages/wallet-lib/src/types/Account/methods/getTransaction.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getTransaction.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const getTransaction = require('./getTransaction'); -const getFixtureHDAccountWithStorage = require("../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage"); +import { expect } from 'chai'; +import getTransaction from './getTransaction.js'; +import getFixtureHDAccountWithStorage from '../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; let mockedAccount; let fetchTransactionInfoCalledNb = 0; diff --git a/packages/wallet-lib/src/types/Account/methods/getTransactionHistory.js b/packages/wallet-lib/src/types/Account/methods/getTransactionHistory.js index 0acc49c7d3f..a05008473b3 100644 --- a/packages/wallet-lib/src/types/Account/methods/getTransactionHistory.js +++ b/packages/wallet-lib/src/types/Account/methods/getTransactionHistory.js @@ -1,8 +1,9 @@ -const { each } = require('lodash'); -const { +import lodash from 'lodash'; +const { each } = lodash; +import { categorizeTransactions, // calculateTransactionFees, -} = require('../../../utils'); +} from '../../../utils/index.js'; const sortbyTimeDescending = (a, b) => (b.time - a.time); const sortByHeightDescending = (a, b) => (b.height - a.height); @@ -81,4 +82,4 @@ function getTransactionHistory() { return transactionHistory.sort(sortbyTimeDescending); } -module.exports = getTransactionHistory; +export default getTransactionHistory; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getTransactionHistory.spec.js b/packages/wallet-lib/src/types/Account/methods/getTransactionHistory.spec.js index 7caae444622..b6200bcdf3a 100644 --- a/packages/wallet-lib/src/types/Account/methods/getTransactionHistory.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getTransactionHistory.spec.js @@ -1,10 +1,10 @@ -const {expect} = require('chai'); -const getTransactions = require('./getTransactions'); -const getTransactionHistory = require('./getTransactionHistory'); -const getTotalBalance = require('./getTotalBalance'); +import {expect} from 'chai'; +import getTransactions from './getTransactions.js'; +import getTransactionHistory from './getTransactionHistory.js'; +import getTotalBalance from './getTotalBalance.js'; -const getFixtureHDAccountWithStorage = require('../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage'); -const getFixturePrivateAccountWithStorage = require('../../../../fixtures/wallets/2a331817b9d6bf85100ef0/getFixtureAccountWithStorage'); +import getFixtureHDAccountWithStorage from '../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; +import getFixturePrivateAccountWithStorage from '../../../../fixtures/wallets/2a331817b9d6bf85100ef0/getFixtureAccountWithStorage.js'; const mockedHDAccount = getFixtureHDAccountWithStorage(); diff --git a/packages/wallet-lib/src/types/Account/methods/getTransactions.js b/packages/wallet-lib/src/types/Account/methods/getTransactions.js index 4fa66aea933..2dcd5a83099 100644 --- a/packages/wallet-lib/src/types/Account/methods/getTransactions.js +++ b/packages/wallet-lib/src/types/Account/methods/getTransactions.js @@ -2,7 +2,7 @@ * Get transaction from the store * @return {[Transaction]} transactions - All transaction in the store */ -module.exports = function getTransactions() { +export default function getTransactions() { const chainStore = this.storage.getChainStore(this.network); const walletStore = this.storage.getWalletStore(this.walletId); const transactions = {}; diff --git a/packages/wallet-lib/src/types/Account/methods/getTransactions.spec.js b/packages/wallet-lib/src/types/Account/methods/getTransactions.spec.js index defa1d59220..d318c77c491 100644 --- a/packages/wallet-lib/src/types/Account/methods/getTransactions.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getTransactions.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const getTransactions = require('./getTransactions'); +import { expect } from 'chai'; +import getTransactions from './getTransactions.js'; -const getFixtureHDAccountWithStorage = require('../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage'); +import getFixtureHDAccountWithStorage from '../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; const mockedHDSelf = { ...getFixtureHDAccountWithStorage(), diff --git a/packages/wallet-lib/src/types/Account/methods/getUTXOS.js b/packages/wallet-lib/src/types/Account/methods/getUTXOS.js index d36208f97c8..fca0688e0c1 100644 --- a/packages/wallet-lib/src/types/Account/methods/getUTXOS.js +++ b/packages/wallet-lib/src/types/Account/methods/getUTXOS.js @@ -1,6 +1,7 @@ /* eslint-disable no-continue, no-restricted-syntax */ -const { Address, Transaction } = require('@dashevo/dashcore-lib'); -const { COINBASE_MATURITY } = require('../../../CONSTANTS'); +import dashcore from '@dashevo/dashcore-lib'; +const { Address, Transaction } = dashcore; +import { COINBASE_MATURITY } from '../../../CONSTANTS.js'; /** * Return all the utxos @@ -65,4 +66,4 @@ function getUTXOS(options = { return utxos.sort((a, b) => b.satoshis - a.satoshis); } -module.exports = getUTXOS; +export default getUTXOS; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getUTXOS.spec.js b/packages/wallet-lib/src/types/Account/methods/getUTXOS.spec.js index 906c907ac18..6f1891d0798 100644 --- a/packages/wallet-lib/src/types/Account/methods/getUTXOS.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getUTXOS.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); -const getUTXOS = require('./getUTXOS'); -const getFixtureHDAccountWithStorage = require("../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage"); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; +import getUTXOS from './getUTXOS.js'; +import getFixtureHDAccountWithStorage from '../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; describe('Account - getUTXOS', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Account/methods/getUnconfirmedBalance.js b/packages/wallet-lib/src/types/Account/methods/getUnconfirmedBalance.js index 9833525b4b1..cfbc264b28f 100644 --- a/packages/wallet-lib/src/types/Account/methods/getUnconfirmedBalance.js +++ b/packages/wallet-lib/src/types/Account/methods/getUnconfirmedBalance.js @@ -1,4 +1,4 @@ -const { duffsToDash, calculateDuffBalance } = require('../../../utils'); +import { duffsToDash, calculateDuffBalance } from '../../../utils/index.js'; /** * Return the total balance of unconfirmed utxo @@ -17,4 +17,4 @@ function getUnconfirmedBalance(displayDuffs = true) { return (displayDuffs) ? totalSat : duffsToDash(totalSat); } -module.exports = getUnconfirmedBalance; +export default getUnconfirmedBalance; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getUnconfirmedBalance.spec.js b/packages/wallet-lib/src/types/Account/methods/getUnconfirmedBalance.spec.js index 1494975803b..667fee6a72e 100644 --- a/packages/wallet-lib/src/types/Account/methods/getUnconfirmedBalance.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getUnconfirmedBalance.spec.js @@ -1,8 +1,8 @@ -const { expect } = require('chai'); -const getTotalBalance = require('./getTotalBalance'); -const getConfirmedBalance = require('./getConfirmedBalance'); -const getUnconfirmedBalance = require('./getUnconfirmedBalance'); -const getFixtureHDAccountWithStorage = require("../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage"); +import { expect } from 'chai'; +import getTotalBalance from './getTotalBalance.js'; +import getConfirmedBalance from './getConfirmedBalance.js'; +import getUnconfirmedBalance from './getUnconfirmedBalance.js'; +import getFixtureHDAccountWithStorage from '../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; let mockedAccount; describe('Account - getUnconfirmedBalance', function suite() { diff --git a/packages/wallet-lib/src/types/Account/methods/getUnusedAddress.js b/packages/wallet-lib/src/types/Account/methods/getUnusedAddress.js index 50d24f89672..027650c3a46 100644 --- a/packages/wallet-lib/src/types/Account/methods/getUnusedAddress.js +++ b/packages/wallet-lib/src/types/Account/methods/getUnusedAddress.js @@ -58,4 +58,4 @@ function getUnusedAddress(type = 'external', skip = 0) { return unused; } -module.exports = getUnusedAddress; +export default getUnusedAddress; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getUnusedAddress.spec.js b/packages/wallet-lib/src/types/Account/methods/getUnusedAddress.spec.js index fb1be0ba5b1..3d348628afb 100644 --- a/packages/wallet-lib/src/types/Account/methods/getUnusedAddress.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/getUnusedAddress.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const getUnusedAddress = require('./getUnusedAddress'); -const getFixtureHDAccountWithStorage = require('../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage'); +import { expect } from 'chai'; +import getUnusedAddress from './getUnusedAddress.js'; +import getFixtureHDAccountWithStorage from '../../../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; const mockedHDSelf = { ...getFixtureHDAccountWithStorage(), diff --git a/packages/wallet-lib/src/types/Account/methods/getUnusedIdentityIndex.js b/packages/wallet-lib/src/types/Account/methods/getUnusedIdentityIndex.js index 0e32b274e18..06170289695 100644 --- a/packages/wallet-lib/src/types/Account/methods/getUnusedIdentityIndex.js +++ b/packages/wallet-lib/src/types/Account/methods/getUnusedIdentityIndex.js @@ -13,4 +13,4 @@ async function getUnusedIdentityIndex() { return firstMissingIndex > -1 ? firstMissingIndex : identityIds.length; } -module.exports = getUnusedIdentityIndex; +export default getUnusedIdentityIndex; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/getWorker.js b/packages/wallet-lib/src/types/Account/methods/getWorker.js index 3b856a29732..49c482bf0a6 100644 --- a/packages/wallet-lib/src/types/Account/methods/getWorker.js +++ b/packages/wallet-lib/src/types/Account/methods/getWorker.js @@ -1,6 +1,6 @@ -const { +import { UnknownWorker, -} = require('../../../errors'); +} from '../../../errors/index.js'; /** * Get a worker by it's name * @param {string} workerName @@ -15,4 +15,4 @@ function getWorker(workerName) { throw new UnknownWorker(loweredWorkerName); } -module.exports = getWorker; +export default getWorker; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Account/methods/hasPlugins.js b/packages/wallet-lib/src/types/Account/methods/hasPlugins.js index 1f2bac0acca..695e11725b3 100644 --- a/packages/wallet-lib/src/types/Account/methods/hasPlugins.js +++ b/packages/wallet-lib/src/types/Account/methods/hasPlugins.js @@ -1,11 +1,11 @@ -const _ = require('lodash'); +import _ from 'lodash'; /** * To any Plugins (StandardPlugins, Worker,...) will lookup in account for it's presence. * * @param {[Plugin]} searchedPlugins - Array of constructor or single plugin constructor * @return {{found:Boolean, results:[{name: string}]}} search - results with presents plugin */ -module.exports = function hasPlugins(searchedPlugins = []) { +export default function hasPlugins(searchedPlugins = []) { const search = { found: false, results: [], diff --git a/packages/wallet-lib/src/types/Account/methods/importTransactions.js b/packages/wallet-lib/src/types/Account/methods/importTransactions.js index 40306e597eb..827a0d20791 100644 --- a/packages/wallet-lib/src/types/Account/methods/importTransactions.js +++ b/packages/wallet-lib/src/types/Account/methods/importTransactions.js @@ -4,7 +4,7 @@ * @param transactionsWithMayBeMetadata * @returns {{ addressesGenerated: number, mostRecentHeight: number }} */ -module.exports = function importTransactions(transactionsWithMayBeMetadata) { +export default function importTransactions(transactionsWithMayBeMetadata) { const { storage, network, diff --git a/packages/wallet-lib/src/types/Account/methods/injectPlugin.js b/packages/wallet-lib/src/types/Account/methods/injectPlugin.js index a20c8b03c25..2d0c6f2cbb2 100644 --- a/packages/wallet-lib/src/types/Account/methods/injectPlugin.js +++ b/packages/wallet-lib/src/types/Account/methods/injectPlugin.js @@ -1,10 +1,10 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; +import { InjectionErrorCannotInject, - InjectionErrorCannotInjectUnknownDependency: InjectionErrorCannotInjectUnknownDep, -} = require('../../../errors'); -const { is } = require('../../../utils'); -const logger = require('../../../logger'); + InjectionErrorCannotInjectUnknownDependency as InjectionErrorCannotInjectUnknownDep, +} from '../../../errors/index.js'; +import { is } from '../../../utils/index.js'; +import logger from '../../../logger/index.js'; /** * Will try to inject a given plugin. If needed, it will construct the object first (new). * @param {Plugin} UnsafePlugin - Either a child object, or it's parent class to inject @@ -12,7 +12,7 @@ const logger = require('../../../logger'); * @param {Boolean} [awaitOnInjection=true] - When true, wait for onInjected resolve first * @return {Promise<*>} plugin - instance of the plugin */ -module.exports = async function injectPlugin( +export default async function injectPlugin( UnsafePlugin, allowSensitiveOperations = false, awaitOnInjection = true, diff --git a/packages/wallet-lib/src/types/Account/methods/injectPlugin.spec.js b/packages/wallet-lib/src/types/Account/methods/injectPlugin.spec.js index 3d5558c62ea..3f56c7da005 100644 --- a/packages/wallet-lib/src/types/Account/methods/injectPlugin.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/injectPlugin.spec.js @@ -1,9 +1,9 @@ -const { expect } = require('chai'); -const EventEmitter = require('events'); -const FaultyWorker = require('../../../../fixtures/plugins/FaultyWorker'); -const WorkingWorker = require('../../../../fixtures/plugins/WorkingWorker'); -const injectPlugin = require('./injectPlugin'); -const expectThrowsAsync = require('../../../utils/expectThrowsAsync'); +import { expect } from 'chai'; +import EventEmitter from 'events'; +import FaultyWorker from '../../../../fixtures/plugins/FaultyWorker.js'; +import WorkingWorker from '../../../../fixtures/plugins/WorkingWorker.js'; +import injectPlugin from './injectPlugin.js'; +import expectThrowsAsync from '../../../utils/expectThrowsAsync.js'; describe('Account - injectPlugin', function suite() { this.timeout(12000); diff --git a/packages/wallet-lib/src/types/Account/methods/sign.js b/packages/wallet-lib/src/types/Account/methods/sign.js index de584004e02..c42da620c66 100644 --- a/packages/wallet-lib/src/types/Account/methods/sign.js +++ b/packages/wallet-lib/src/types/Account/methods/sign.js @@ -1,4 +1,5 @@ -const { PrivateKey, HDPrivateKey } = require('@dashevo/dashcore-lib'); +import dashcore from '@dashevo/dashcore-lib'; +const { PrivateKey, HDPrivateKey } = dashcore; /** * To any object passed (Transaction, ST,..), will try to sign the message given passed keys. * @param {Transaction} object - The object to sign @@ -8,7 +9,7 @@ const { PrivateKey, HDPrivateKey } = require('@dashevo/dashcore-lib'); */ // TODO move options to as last param // eslint-disable-next-line default-param-last -module.exports = function sign(object, privateKeys = [], sigType) { +export default function sign(object, privateKeys = [], sigType) { const { network } = this; if (object.inputs && (!privateKeys || !privateKeys.length)) { diff --git a/packages/wallet-lib/src/types/Account/methods/sign.spec.js b/packages/wallet-lib/src/types/Account/methods/sign.spec.js index 71a3031abf2..20455e0db9f 100644 --- a/packages/wallet-lib/src/types/Account/methods/sign.spec.js +++ b/packages/wallet-lib/src/types/Account/methods/sign.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); -const { Wallet } = require('../../../index'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; +import { Wallet } from '../../../index.js'; const transactions = {"4e2a8b05a805fcee959b8ecfd5557e196a9b8490dd280d6f599b391d650407c8":{"hash":"4e2a8b05a805fcee959b8ecfd5557e196a9b8490dd280d6f599b391d650407c8","version":2,"inputs":[{"prevTxId":"1a38feca081f5c03a4fedbb62eda8706b2b43d5fc13c60b0c84e0d2c67877a4c","outputIndex":1,"sequenceNumber":4294967294,"script":"4730440220297261672847b242b46f860a827d4ef6d392471739937fd19c9e5337dd8abcfc02206f2d3fc3485e8163ac470f67dcad52c650356dc797cae8832e50afd881eba257012103a65caff6ca4c0415a3ac182dfc2a6d3a4dceb98e8b831e71501df38aa156f2c1","scriptString":"71 0x30440220297261672847b242b46f860a827d4ef6d392471739937fd19c9e5337dd8abcfc02206f2d3fc3485e8163ac470f67dcad52c650356dc797cae8832e50afd881eba25701 33 0x03a65caff6ca4c0415a3ac182dfc2a6d3a4dceb98e8b831e71501df38aa156f2c1"}],"outputs":[{"satoshis":187719774,"script":"76a91489e98f97403bb0b5674f27177452c4e8980ac42488ac"},{"satoshis":12312280000,"script":"76a91427da1075bef6c1e932f5caab1ded021f2acb65e188ac"}],"nLockTime":13621}}; const mnemonic = 'wrist ladder salute build walk other scrap stumble true hotel layer treat'; diff --git a/packages/wallet-lib/src/types/ChainStore/ChainStore.js b/packages/wallet-lib/src/types/ChainStore/ChainStore.js index 11788f8aff5..6247dc3e893 100644 --- a/packages/wallet-lib/src/types/ChainStore/ChainStore.js +++ b/packages/wallet-lib/src/types/ChainStore/ChainStore.js @@ -1,9 +1,11 @@ -const EventEmitter = require('events'); +import EventEmitter from 'events'; +import dashcore from '@dashevo/dashcore-lib'; const { - Transaction, BlockHeader, -} = require('@dashevo/dashcore-lib'); -const CONSTANTS = require('../../CONSTANTS'); + Transaction, + BlockHeader, +} = dashcore; +import CONSTANTS from '../../CONSTANTS.js'; const SCHEMA = { lastSyncedHeaderHeight: 'number', @@ -130,20 +132,31 @@ class ChainStore extends EventEmitter { ChainStore.prototype.SCHEMA = SCHEMA; -ChainStore.prototype.considerTransaction = require('./methods/considerTransaction'); - -ChainStore.prototype.exportState = require('./methods/exportState'); -ChainStore.prototype.importState = require('./methods/importState'); - -ChainStore.prototype.getAddress = require('./methods/getAddress'); -ChainStore.prototype.getAddresses = require('./methods/getAddresses'); - -ChainStore.prototype.getBlockHeader = require('./methods/getBlockHeader'); -ChainStore.prototype.getInstantLock = require('./methods/getInstantLock'); -ChainStore.prototype.getTransaction = require('./methods/getTransaction'); - -ChainStore.prototype.importAddress = require('./methods/importAddress'); -ChainStore.prototype.importInstantLock = require('./methods/importInstantLock'); -ChainStore.prototype.importTransaction = require('./methods/importTransaction'); - -module.exports = ChainStore; +import _ChainStore_considerTransaction from './methods/considerTransaction.js'; +ChainStore.prototype.considerTransaction = _ChainStore_considerTransaction; + +import _ChainStore_exportState from './methods/exportState.js'; +ChainStore.prototype.exportState = _ChainStore_exportState; +import _ChainStore_importState from './methods/importState.js'; +ChainStore.prototype.importState = _ChainStore_importState; + +import _ChainStore_getAddress from './methods/getAddress.js'; +ChainStore.prototype.getAddress = _ChainStore_getAddress; +import _ChainStore_getAddresses from './methods/getAddresses.js'; +ChainStore.prototype.getAddresses = _ChainStore_getAddresses; + +import _ChainStore_getBlockHeader from './methods/getBlockHeader.js'; +ChainStore.prototype.getBlockHeader = _ChainStore_getBlockHeader; +import _ChainStore_getInstantLock from './methods/getInstantLock.js'; +ChainStore.prototype.getInstantLock = _ChainStore_getInstantLock; +import _ChainStore_getTransaction from './methods/getTransaction.js'; +ChainStore.prototype.getTransaction = _ChainStore_getTransaction; + +import _ChainStore_importAddress from './methods/importAddress.js'; +ChainStore.prototype.importAddress = _ChainStore_importAddress; +import _ChainStore_importInstantLock from './methods/importInstantLock.js'; +ChainStore.prototype.importInstantLock = _ChainStore_importInstantLock; +import _ChainStore_importTransaction from './methods/importTransaction.js'; +ChainStore.prototype.importTransaction = _ChainStore_importTransaction; + +export default ChainStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/ChainStore.spec.js b/packages/wallet-lib/src/types/ChainStore/ChainStore.spec.js index 8892823c9ed..f470f3f8012 100644 --- a/packages/wallet-lib/src/types/ChainStore/ChainStore.spec.js +++ b/packages/wallet-lib/src/types/ChainStore/ChainStore.spec.js @@ -1,8 +1,9 @@ -const { Transaction } = require('@dashevo/dashcore-lib'); -const { expect } = require('chai'); -const ChainStore = require('./ChainStore'); -const fixtures1 = require('../../../fixtures/wallets/2a331817b9d6bf85100ef0/chain-store.json'); -const { mockHeadersChain } = require("../../test/mocks/dashcore/block"); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import { expect } from 'chai'; +import ChainStore from './ChainStore.js'; +import fixtures1 from '../../../fixtures/wallets/2a331817b9d6bf85100ef0/chain-store.json' with { type: 'json' }; +import { mockHeadersChain } from '../../test/mocks/dashcore/block.js'; describe('ChainStore - class', () => { let testnetChainStore; diff --git a/packages/wallet-lib/src/types/ChainStore/methods/considerTransaction.js b/packages/wallet-lib/src/types/ChainStore/methods/considerTransaction.js index 2ee163b9f96..7bce4ebb5b5 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/considerTransaction.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/considerTransaction.js @@ -1,5 +1,6 @@ -const { Transaction } = require('@dashevo/dashcore-lib'); -const EVENTS = require('../../../EVENTS'); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import EVENTS from '../../../EVENTS.js'; const { Output } = Transaction; @@ -93,4 +94,4 @@ function considerTransaction(transactionHash) { return processedAddressesForTx; } -module.exports = considerTransaction; +export default considerTransaction; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/exportState.js b/packages/wallet-lib/src/types/ChainStore/methods/exportState.js index 81235800693..4fb7e45e6ba 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/exportState.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/exportState.js @@ -1,4 +1,4 @@ -const { STORAGE } = require('../../../CONSTANTS'); +import { STORAGE } from '../../../CONSTANTS.js'; function exportState() { const { state } = this; @@ -55,4 +55,4 @@ function exportState() { return serializedState; } -module.exports = exportState; +export default exportState; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/getAddress.js b/packages/wallet-lib/src/types/ChainStore/methods/getAddress.js index 1076c9ed22d..294e8a136a7 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/getAddress.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/getAddress.js @@ -2,4 +2,4 @@ function getAddress(address) { return this.state.addresses.get(address.toString()); } -module.exports = getAddress; +export default getAddress; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/getAddresses.js b/packages/wallet-lib/src/types/ChainStore/methods/getAddresses.js index 6d6b94bcf74..3f893794f84 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/getAddresses.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/getAddresses.js @@ -2,4 +2,4 @@ function getAddresses() { return this.state.addresses; } -module.exports = getAddresses; +export default getAddresses; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/getBlockHeader.js b/packages/wallet-lib/src/types/ChainStore/methods/getBlockHeader.js index be7d9c57925..6774c38baaf 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/getBlockHeader.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/getBlockHeader.js @@ -2,4 +2,4 @@ function getBlockHeader(blockHeaderHash) { return this.state.blockHeaders.get(blockHeaderHash); } -module.exports = getBlockHeader; +export default getBlockHeader; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/getInstantLock.js b/packages/wallet-lib/src/types/ChainStore/methods/getInstantLock.js index 523380658f6..c7b1f13970c 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/getInstantLock.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/getInstantLock.js @@ -2,4 +2,4 @@ function getInstantLock(transactionHash) { return this.state.instantLocks.get(transactionHash); } -module.exports = getInstantLock; +export default getInstantLock; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/getTransaction.js b/packages/wallet-lib/src/types/ChainStore/methods/getTransaction.js index 7f97e871321..d51428b64c2 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/getTransaction.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/getTransaction.js @@ -2,4 +2,4 @@ function getTransaction(transactionHash) { return this.state.transactions.get(transactionHash); } -module.exports = getTransaction; +export default getTransaction; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/importAddress.js b/packages/wallet-lib/src/types/ChainStore/methods/importAddress.js index 4f1a64a73cb..f615d68a35c 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/importAddress.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/importAddress.js @@ -1,4 +1,4 @@ -const sortTransactions = require('../../../utils/sortTransactions'); +import sortTransactions from '../../../utils/sortTransactions.js'; function importAddress(address, reconsiderTransactions = true) { if (this.state.addresses.has(address.toString())) { @@ -29,4 +29,4 @@ function importAddress(address, reconsiderTransactions = true) { } } -module.exports = importAddress; +export default importAddress; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/importInstantLock.js b/packages/wallet-lib/src/types/ChainStore/methods/importInstantLock.js index c39d5d493ce..59f6da2a625 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/importInstantLock.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/importInstantLock.js @@ -2,4 +2,4 @@ function importInstantLock(instantLock) { this.state.instantLocks.set(instantLock.txid, instantLock); } -module.exports = importInstantLock; +export default importInstantLock; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/importState.js b/packages/wallet-lib/src/types/ChainStore/methods/importState.js index 4f927bce475..18133b9e866 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/importState.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/importState.js @@ -1,4 +1,4 @@ -const castStorageItemsTypes = require('../../../utils/castStorageItemsTypes'); +import castStorageItemsTypes from '../../../utils/castStorageItemsTypes.js'; function importState(rawState) { const stateToImport = { ...rawState }; @@ -38,4 +38,4 @@ function importState(rawState) { }); } -module.exports = importState; +export default importState; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/ChainStore/methods/importTransaction.js b/packages/wallet-lib/src/types/ChainStore/methods/importTransaction.js index e4fbe1f3daf..5689c09efe5 100644 --- a/packages/wallet-lib/src/types/ChainStore/methods/importTransaction.js +++ b/packages/wallet-lib/src/types/ChainStore/methods/importTransaction.js @@ -1,5 +1,6 @@ -const { Transaction } = require('@dashevo/dashcore-lib'); -const is = require('../../../utils/is'); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import is from '../../../utils/is.js'; function importTransaction(transaction, metadata = {}) { // Even if transaction is a transaction object, if manglized, @@ -30,4 +31,4 @@ function importTransaction(transaction, metadata = {}) { return normalizedTransaction; } -module.exports = importTransaction; +export default importTransaction; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.d.ts b/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.d.ts index 6ddaa4bff4b..6e0bce13d4c 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.d.ts +++ b/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.d.ts @@ -1,5 +1,5 @@ import {PrivateKey, Network} from "../types"; -import {HDPrivateKey, HDPublicKey, Address} from "@dashevo/dashcore-lib"; +import { HDPrivateKey, HDPublicKey, Address } from '@dashevo/dashcore-lib'; import {Transaction} from "@dashevo/dashcore-lib/typings/transaction/Transaction"; export declare namespace DerivableKeyChain { diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.js b/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.js index 9191f40d7e2..345fb3b8c10 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.js @@ -1,7 +1,8 @@ -const { Networks, HDPrivateKey, HDPublicKey } = require('@dashevo/dashcore-lib'); -const { PrivateKey, PublicKey } = require('@dashevo/dashcore-lib'); -const { doubleSha256 } = require('../../utils/crypto'); -const { mnemonicToHDPrivateKey } = require('../../utils/mnemonic'); +import dashcore from '@dashevo/dashcore-lib'; +const { Networks, HDPrivateKey, HDPublicKey } = dashcore; +const { PrivateKey, PublicKey } = dashcore; +import { doubleSha256 } from '../../utils/crypto.js'; +import { mnemonicToHDPrivateKey } from '../../utils/mnemonic.js'; function generateKeyChainId(key) { const keyChainIdSuffix = doubleSha256(key.toString()).toString('hex').slice(0, 10); @@ -90,18 +91,31 @@ class DerivableKeyChain { this.maybeLookAhead(); } } -DerivableKeyChain.prototype.getForPath = require('./methods/getForPath'); -DerivableKeyChain.prototype.getForAddress = require('./methods/getForAddress'); -DerivableKeyChain.prototype.getDIP15ExtendedKey = require('./methods/getDIP15ExtendedKey'); -DerivableKeyChain.prototype.getFirstUnusedAddress = require('./methods/getFirstUnusedAddress'); -DerivableKeyChain.prototype.getHardenedBIP44HDKey = require('./methods/getHardenedBIP44HDKey'); -DerivableKeyChain.prototype.getHardenedDIP9FeatureHDKey = require('./methods/getHardenedDIP9FeatureHDKey'); -DerivableKeyChain.prototype.getHardenedDIP15AccountKey = require('./methods/getHardenedDIP15AccountKey'); -DerivableKeyChain.prototype.getRootKey = require('./methods/getRootKey'); -DerivableKeyChain.prototype.getWatchedAddresses = require('./methods/getWatchedAddresses'); -DerivableKeyChain.prototype.getIssuedPaths = require('./methods/getIssuedPaths'); -DerivableKeyChain.prototype.maybeLookAhead = require('./methods/maybeLookAhead'); -DerivableKeyChain.prototype.markAddressAsUsed = require('./methods/markAddressAsUsed'); -DerivableKeyChain.prototype.sign = require('./methods/sign'); +import _DerivableKeyChain_getForPath from './methods/getForPath.js'; +DerivableKeyChain.prototype.getForPath = _DerivableKeyChain_getForPath; +import _DerivableKeyChain_getForAddress from './methods/getForAddress.js'; +DerivableKeyChain.prototype.getForAddress = _DerivableKeyChain_getForAddress; +import _DerivableKeyChain_getDIP15ExtendedKey from './methods/getDIP15ExtendedKey.js'; +DerivableKeyChain.prototype.getDIP15ExtendedKey = _DerivableKeyChain_getDIP15ExtendedKey; +import _DerivableKeyChain_getFirstUnusedAddress from './methods/getFirstUnusedAddress.js'; +DerivableKeyChain.prototype.getFirstUnusedAddress = _DerivableKeyChain_getFirstUnusedAddress; +import _DerivableKeyChain_getHardenedBIP44HDKey from './methods/getHardenedBIP44HDKey.js'; +DerivableKeyChain.prototype.getHardenedBIP44HDKey = _DerivableKeyChain_getHardenedBIP44HDKey; +import _DerivableKeyChain_getHardenedDIP9FeatureHDKey from './methods/getHardenedDIP9FeatureHDKey.js'; +DerivableKeyChain.prototype.getHardenedDIP9FeatureHDKey = _DerivableKeyChain_getHardenedDIP9FeatureHDKey; +import _DerivableKeyChain_getHardenedDIP15AccountKey from './methods/getHardenedDIP15AccountKey.js'; +DerivableKeyChain.prototype.getHardenedDIP15AccountKey = _DerivableKeyChain_getHardenedDIP15AccountKey; +import _DerivableKeyChain_getRootKey from './methods/getRootKey.js'; +DerivableKeyChain.prototype.getRootKey = _DerivableKeyChain_getRootKey; +import _DerivableKeyChain_getWatchedAddresses from './methods/getWatchedAddresses.js'; +DerivableKeyChain.prototype.getWatchedAddresses = _DerivableKeyChain_getWatchedAddresses; +import _DerivableKeyChain_getIssuedPaths from './methods/getIssuedPaths.js'; +DerivableKeyChain.prototype.getIssuedPaths = _DerivableKeyChain_getIssuedPaths; +import _DerivableKeyChain_maybeLookAhead from './methods/maybeLookAhead.js'; +DerivableKeyChain.prototype.maybeLookAhead = _DerivableKeyChain_maybeLookAhead; +import _DerivableKeyChain_markAddressAsUsed from './methods/markAddressAsUsed.js'; +DerivableKeyChain.prototype.markAddressAsUsed = _DerivableKeyChain_markAddressAsUsed; +import _DerivableKeyChain_sign from './methods/sign.js'; +DerivableKeyChain.prototype.sign = _DerivableKeyChain_sign; -module.exports = DerivableKeyChain; +export default DerivableKeyChain; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.spec.js b/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.spec.js index 98dfc69bb5b..83a49463746 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.spec.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/DerivableKeyChain.spec.js @@ -1,7 +1,7 @@ -const Dashcore = require('@dashevo/dashcore-lib'); -const { expect } = require('chai'); -const DerivableKeyChain = require('./DerivableKeyChain'); -const { mnemonicToHDPrivateKey } = require('../../utils/mnemonic'); +import Dashcore from '@dashevo/dashcore-lib'; +import { expect } from 'chai'; +import DerivableKeyChain from './DerivableKeyChain.js'; +import { mnemonicToHDPrivateKey } from '../../utils/mnemonic.js'; let derivableKeyChain; let derivableKeyChain2; @@ -48,7 +48,7 @@ describe('DerivableKeyChain', function suite() { const contactUniqueId = '0xa137439f36d04a15474ff7423e4b904a14373fafb37a41db74c84f1dbb5c89b5'; // m/9'/5'/15'/0'/0x555d3854c910b7dee436869c4724bed2fe0784e198b8a39f02bbb49d8ebcfc3a'/0xa137439f36d04a15474ff7423e4b904a14373fafb37a41db74c84f1dbb5c89b5'/0 - const DIP15ExtPubKey_0 = derivableKeyChain2.getDIP15ExtendedKey(userUniqueId, contactUniqueId, 0, 0, type='HDPublicKey'); + const DIP15ExtPubKey_0 = derivableKeyChain2.getDIP15ExtendedKey(userUniqueId, contactUniqueId, 0, 0, 'HDPublicKey'); expect(DIP15ExtPubKey_0.toString()).to.equal('xpub6LTkTQFSb8KMgMSz4B6sMZLpkQAY6wSTDprDkHDmLwWLpnjxazuxZn13FrSLKUafitsxuaaffM5a49P6aswhpppWUuYW6eFnwBXshR2W2eY'); expect(DIP15ExtPubKey_0.publicKey.toString()).to.equal('038030c88ab0106e1f4af3b939db2bafc56f892554106f08da1ce1f9ef10f807bd') diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getDIP15ExtendedKey.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getDIP15ExtendedKey.js index b65dc10d7da..97584c8fadb 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getDIP15ExtendedKey.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getDIP15ExtendedKey.js @@ -23,4 +23,4 @@ function getDIP15ExtendedKey(userUniqueId, contactUniqueId, index = 0, accountIn return (type === 'HDPublicKey' ? extendedPrivateKey.hdPublicKey : extendedPrivateKey); } -module.exports = getDIP15ExtendedKey; +export default getDIP15ExtendedKey; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getFirstUnusedAddress.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getFirstUnusedAddress.js index ab7f3fefeeb..bba49d551f8 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getFirstUnusedAddress.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getFirstUnusedAddress.js @@ -9,4 +9,4 @@ function getFirstUnusedAddress() { address: firstUnused.address.toString(), }; } -module.exports = getFirstUnusedAddress; +export default getFirstUnusedAddress; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getForAddress.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getForAddress.js index 4b8a01ddf04..c9109328f96 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getForAddress.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getForAddress.js @@ -9,4 +9,4 @@ function getForAddress(address) { return this.getForPath(path); } -module.exports = getForAddress; +export default getForAddress; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getForPath.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getForPath.js index ca2b8da7027..a4e77514546 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getForPath.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getForPath.js @@ -36,4 +36,4 @@ function getForPath(path, opts = {}) { return data; } -module.exports = getForPath; +export default getForPath; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedBIP44HDKey.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedBIP44HDKey.js index 48da61c1616..9d287c95f66 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedBIP44HDKey.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedBIP44HDKey.js @@ -1,4 +1,4 @@ -const { BIP44_TESTNET_ROOT_PATH, BIP44_LIVENET_ROOT_PATH } = require('../../../CONSTANTS'); +import { BIP44_TESTNET_ROOT_PATH, BIP44_LIVENET_ROOT_PATH } from '../../../CONSTANTS.js'; /** * Return a safier root keys to derivate from @@ -8,4 +8,4 @@ function getHardenedBIP44HDKey() { const pathRoot = (this.network.toString() === 'testnet') ? BIP44_TESTNET_ROOT_PATH : BIP44_LIVENET_ROOT_PATH; return this.getForPath(pathRoot).key; } -module.exports = getHardenedBIP44HDKey; +export default getHardenedBIP44HDKey; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedDIP15AccountKey.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedDIP15AccountKey.js index c01f240fc85..1b04ada3c53 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedDIP15AccountKey.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedDIP15AccountKey.js @@ -11,4 +11,4 @@ function getHardenedDIP15AccountKey(accountIndex = 0, type = 'HDPrivateKey') { const featureKey = hardenedFeatureRootKey.deriveChild(15, true); return featureKey.deriveChild(accountIndex, true); } -module.exports = getHardenedDIP15AccountKey; +export default getHardenedDIP15AccountKey; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedDIP9FeatureHDKey.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedDIP9FeatureHDKey.js index 422c9fab667..41b6ea6f1f5 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedDIP9FeatureHDKey.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getHardenedDIP9FeatureHDKey.js @@ -1,4 +1,4 @@ -const { DIP9_LIVENET_ROOT_PATH, DIP9_TESTNET_ROOT_PATH } = require('../../../CONSTANTS'); +import { DIP9_LIVENET_ROOT_PATH, DIP9_TESTNET_ROOT_PATH } from '../../../CONSTANTS.js'; /** * Return a safier root path to derivate from @@ -8,4 +8,4 @@ function getHardenedDIP9FeatureHDKey() { const pathRoot = (this.network.toString() === 'testnet') ? DIP9_TESTNET_ROOT_PATH : DIP9_LIVENET_ROOT_PATH; return this.getForPath(pathRoot).key; } -module.exports = getHardenedDIP9FeatureHDKey; +export default getHardenedDIP9FeatureHDKey; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getIssuedPaths.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getIssuedPaths.js index 324750853ba..2b5f712c769 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getIssuedPaths.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getIssuedPaths.js @@ -2,4 +2,4 @@ function getWatchedAddresses() { return [...this.issuedPaths.values()]; } -module.exports = getWatchedAddresses; +export default getWatchedAddresses; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getRootKey.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getRootKey.js index f2b54723a48..2aaca8a3d88 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getRootKey.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getRootKey.js @@ -2,4 +2,4 @@ function getRootKey() { return this.rootKey; } -module.exports = getRootKey; +export default getRootKey; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getWatchedAddresses.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getWatchedAddresses.js index 8154329119a..53e68bd61aa 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/getWatchedAddresses.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/getWatchedAddresses.js @@ -4,4 +4,4 @@ function getWatchedAddresses() { .map(([, el]) => el.address.toString()); } -module.exports = getWatchedAddresses; +export default getWatchedAddresses; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/markAddressAsUsed.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/markAddressAsUsed.js index 55c189a640f..d6f3f065752 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/markAddressAsUsed.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/markAddressAsUsed.js @@ -1,4 +1,4 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; function markAddressAsUsed(address) { const searchResult = [...this.issuedPaths.entries()] @@ -17,4 +17,4 @@ function markAddressAsUsed(address) { return false; } -module.exports = markAddressAsUsed; +export default markAddressAsUsed; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/maybeLookAhead.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/maybeLookAhead.js index fd3841f40bd..0ec520a03b2 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/maybeLookAhead.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/maybeLookAhead.js @@ -79,4 +79,4 @@ function maybeLookAhead() { }); return generatedPaths; } -module.exports = maybeLookAhead; +export default maybeLookAhead; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/DerivableKeyChain/methods/sign.js b/packages/wallet-lib/src/types/DerivableKeyChain/methods/sign.js index b10b561f2c2..71a3dd6caa5 100644 --- a/packages/wallet-lib/src/types/DerivableKeyChain/methods/sign.js +++ b/packages/wallet-lib/src/types/DerivableKeyChain/methods/sign.js @@ -1,6 +1,9 @@ +import dashcore from '@dashevo/dashcore-lib'; const { - crypto, Transaction, Message, -} = require('@dashevo/dashcore-lib'); + crypto, + Transaction, + Message, +} = dashcore; /** * Allow to sign any transaction or a transition object from a valid privateKeys list @@ -26,4 +29,4 @@ function sign(object, privateKeys, sigType = crypto.Signature.SIGHASH_ALL) { } return obj; } -module.exports = sign; +export default sign; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Identities/Identities.d.ts b/packages/wallet-lib/src/types/Identities/Identities.d.ts index 9bd7a02bce9..1f416bf30f2 100644 --- a/packages/wallet-lib/src/types/Identities/Identities.d.ts +++ b/packages/wallet-lib/src/types/Identities/Identities.d.ts @@ -1,5 +1,5 @@ import { Wallet } from "../Wallet/Wallet"; -import { HDPrivateKey } from "@dashevo/dashcore-lib"; +import { HDPrivateKey } from '@dashevo/dashcore-lib'; export declare class Identities { constructor(wallet: Wallet); diff --git a/packages/wallet-lib/src/types/Identities/Identities.js b/packages/wallet-lib/src/types/Identities/Identities.js index f457fe9fc99..9395e296553 100644 --- a/packages/wallet-lib/src/types/Identities/Identities.js +++ b/packages/wallet-lib/src/types/Identities/Identities.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const Wallet = require('../Wallet/Wallet'); +import _ from 'lodash'; +import Wallet from '../Wallet/Wallet.js'; class Identities { constructor(wallet) { @@ -14,8 +14,11 @@ class Identities { } } -Identities.prototype.getIdentityHDKeyById = require('./methods/getIdentityHDKeyById'); -Identities.prototype.getIdentityHDKeyByIndex = require('./methods/getIdentityHDKeyByIndex'); -Identities.prototype.getIdentityIds = require('./methods/getIdentityIds'); +import _Identities_getIdentityHDKeyById from './methods/getIdentityHDKeyById.js'; +Identities.prototype.getIdentityHDKeyById = _Identities_getIdentityHDKeyById; +import _Identities_getIdentityHDKeyByIndex from './methods/getIdentityHDKeyByIndex.js'; +Identities.prototype.getIdentityHDKeyByIndex = _Identities_getIdentityHDKeyByIndex; +import _Identities_getIdentityIds from './methods/getIdentityIds.js'; +Identities.prototype.getIdentityIds = _Identities_getIdentityIds; -module.exports = Identities; +export default Identities; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyById.js b/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyById.js index 79cd6eedc77..8f03afc241d 100644 --- a/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyById.js +++ b/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyById.js @@ -17,4 +17,4 @@ function getIdentityHDKeyById(identityId, keyIndex) { return this.getIdentityHDKeyByIndex(identityIndex, keyIndex); } -module.exports = getIdentityHDKeyById; +export default getIdentityHDKeyById; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyById.spec.js b/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyById.spec.js index 87e60e4d58d..c0b1b88dd44 100644 --- a/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyById.spec.js +++ b/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyById.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const mockedStore = require('../../../../fixtures/sirentonight-fullstore-snapshot-1562711703'); -const getIdentityHDKeyById = require('./getIdentityHDKeyById'); +import { expect } from 'chai'; +import mockedStore from '../../../../fixtures/sirentonight-fullstore-snapshot-1562711703.json' with { type: 'json' }; +import getIdentityHDKeyById from './getIdentityHDKeyById.js'; let walletMock; let fetchTransactionInfoCalledNb = 0; diff --git a/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyByIndex.js b/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyByIndex.js index aee9b0919ab..27d88faa8f6 100644 --- a/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyByIndex.js +++ b/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyByIndex.js @@ -21,4 +21,4 @@ function getIdentityHDKeyByIndex(identityIndex, keyIndex) { .deriveChild(keyIndex, true); } -module.exports = getIdentityHDKeyByIndex; +export default getIdentityHDKeyByIndex; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyByIndex.spec.js b/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyByIndex.spec.js index e84db4788a3..e6aabfd04ad 100644 --- a/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyByIndex.spec.js +++ b/packages/wallet-lib/src/types/Identities/methods/getIdentityHDKeyByIndex.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const { Wallet, Identities } = require('../../../index'); +import { Wallet, Identities } from '../../../index.js'; let mnemonic; let expectedIdentityHDKey0_0; diff --git a/packages/wallet-lib/src/types/Identities/methods/getIdentityIds.js b/packages/wallet-lib/src/types/Identities/methods/getIdentityIds.js index e72711adb42..00a2870f563 100644 --- a/packages/wallet-lib/src/types/Identities/methods/getIdentityIds.js +++ b/packages/wallet-lib/src/types/Identities/methods/getIdentityIds.js @@ -9,4 +9,4 @@ function getIdentityIds() { .filter(Boolean); } -module.exports = getIdentityIds; +export default getIdentityIds; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Identities/methods/getIdentityIds.spec.js b/packages/wallet-lib/src/types/Identities/methods/getIdentityIds.spec.js index 6d0ee52d568..ecc6d2e4e41 100644 --- a/packages/wallet-lib/src/types/Identities/methods/getIdentityIds.spec.js +++ b/packages/wallet-lib/src/types/Identities/methods/getIdentityIds.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const mockedStore = require('../../../../fixtures/sirentonight-fullstore-snapshot-1562711703'); -const getIdentityIds = require('./getIdentityIds'); -const WalletStore = require("../../WalletStore/WalletStore"); +import { expect } from 'chai'; +import mockedStore from '../../../../fixtures/sirentonight-fullstore-snapshot-1562711703.json' with { type: 'json' }; +import getIdentityIds from './getIdentityIds.js'; +import WalletStore from '../../WalletStore/WalletStore.js'; let mockedWallet; let fetchTransactionInfoCalledNb = 0; diff --git a/packages/wallet-lib/src/types/KeyChainStore/KeyChainStore.js b/packages/wallet-lib/src/types/KeyChainStore/KeyChainStore.js index c81c2c0ac2a..ba8e5120203 100644 --- a/packages/wallet-lib/src/types/KeyChainStore/KeyChainStore.js +++ b/packages/wallet-lib/src/types/KeyChainStore/KeyChainStore.js @@ -5,10 +5,15 @@ class KeyChainStore { } } -KeyChainStore.prototype.addKeyChain = require('./methods/addKeyChain'); -KeyChainStore.prototype.getKeyChain = require('./methods/getKeyChain'); -KeyChainStore.prototype.getKeyChains = require('./methods/getKeyChains'); -KeyChainStore.prototype.makeChildKeyChainStore = require('./methods/makeChildKeyChainStore'); -KeyChainStore.prototype.getMasterKeyChain = require('./methods/getMasterKeyChain'); +import _KeyChainStore_addKeyChain from './methods/addKeyChain.js'; +KeyChainStore.prototype.addKeyChain = _KeyChainStore_addKeyChain; +import _KeyChainStore_getKeyChain from './methods/getKeyChain.js'; +KeyChainStore.prototype.getKeyChain = _KeyChainStore_getKeyChain; +import _KeyChainStore_getKeyChains from './methods/getKeyChains.js'; +KeyChainStore.prototype.getKeyChains = _KeyChainStore_getKeyChains; +import _KeyChainStore_makeChildKeyChainStore from './methods/makeChildKeyChainStore.js'; +KeyChainStore.prototype.makeChildKeyChainStore = _KeyChainStore_makeChildKeyChainStore; +import _KeyChainStore_getMasterKeyChain from './methods/getMasterKeyChain.js'; +KeyChainStore.prototype.getMasterKeyChain = _KeyChainStore_getMasterKeyChain; -module.exports = KeyChainStore; +export default KeyChainStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/KeyChainStore/KeyChainStore.spec.js b/packages/wallet-lib/src/types/KeyChainStore/KeyChainStore.spec.js index 4b139d98c1d..0346c9ace1d 100644 --- a/packages/wallet-lib/src/types/KeyChainStore/KeyChainStore.spec.js +++ b/packages/wallet-lib/src/types/KeyChainStore/KeyChainStore.spec.js @@ -1,7 +1,8 @@ -const {HDPrivateKey} = require("@dashevo/dashcore-lib"); -const KeyChainsStore = require('./KeyChainStore'); -const DerivableKeyChain = require("../DerivableKeyChain/DerivableKeyChain"); -const { expect } = require('chai'); +import dashcore from '@dashevo/dashcore-lib'; +const { HDPrivateKey } = dashcore; +import KeyChainsStore from './KeyChainStore.js'; +import DerivableKeyChain from '../DerivableKeyChain/DerivableKeyChain.js'; +import { expect } from 'chai'; describe('KeyChainStore', function suite() { let keyChainsStore; diff --git a/packages/wallet-lib/src/types/KeyChainStore/methods/addKeyChain.js b/packages/wallet-lib/src/types/KeyChainStore/methods/addKeyChain.js index 04e60a50739..aff6e5136dc 100644 --- a/packages/wallet-lib/src/types/KeyChainStore/methods/addKeyChain.js +++ b/packages/wallet-lib/src/types/KeyChainStore/methods/addKeyChain.js @@ -12,4 +12,4 @@ function addKeyChain(keychain, opts = {}) { } } -module.exports = addKeyChain; +export default addKeyChain; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/KeyChainStore/methods/getKeyChain.js b/packages/wallet-lib/src/types/KeyChainStore/methods/getKeyChain.js index d964ba395ee..eef97a4f83c 100644 --- a/packages/wallet-lib/src/types/KeyChainStore/methods/getKeyChain.js +++ b/packages/wallet-lib/src/types/KeyChainStore/methods/getKeyChain.js @@ -2,4 +2,4 @@ function getKeyChain(keyChainId) { return this.keyChains.get(keyChainId); } -module.exports = getKeyChain; +export default getKeyChain; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/KeyChainStore/methods/getKeyChains.js b/packages/wallet-lib/src/types/KeyChainStore/methods/getKeyChains.js index 4e0e16160cd..abac75c07d7 100644 --- a/packages/wallet-lib/src/types/KeyChainStore/methods/getKeyChains.js +++ b/packages/wallet-lib/src/types/KeyChainStore/methods/getKeyChains.js @@ -2,4 +2,4 @@ function getKeyChains() { return Array.from(this.keyChains.values()); } -module.exports = getKeyChains; +export default getKeyChains; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/KeyChainStore/methods/getMasterKeyChain.js b/packages/wallet-lib/src/types/KeyChainStore/methods/getMasterKeyChain.js index 512d6a28133..33b7f2d2d46 100644 --- a/packages/wallet-lib/src/types/KeyChainStore/methods/getMasterKeyChain.js +++ b/packages/wallet-lib/src/types/KeyChainStore/methods/getMasterKeyChain.js @@ -3,4 +3,4 @@ function getMasterKeyChain() { return this.keyChains.get(keyChainId); } -module.exports = getMasterKeyChain; +export default getMasterKeyChain; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/KeyChainStore/methods/makeChildKeyChainStore.js b/packages/wallet-lib/src/types/KeyChainStore/methods/makeChildKeyChainStore.js index 383baee3ce0..da49ee11399 100644 --- a/packages/wallet-lib/src/types/KeyChainStore/methods/makeChildKeyChainStore.js +++ b/packages/wallet-lib/src/types/KeyChainStore/methods/makeChildKeyChainStore.js @@ -1,5 +1,5 @@ -const DerivableKeyChain = require('../../DerivableKeyChain/DerivableKeyChain'); -const logger = require('../../../logger'); +import DerivableKeyChain from '../../DerivableKeyChain/DerivableKeyChain.js'; +import logger from '../../../logger/index.js'; function makeChildKeyChainStore(path, opts) { logger.debug(`KeyChainStore - make a child keychainstore for ${path}`); @@ -16,4 +16,4 @@ function makeChildKeyChainStore(path, opts) { return childKeyChainStore; } -module.exports = makeChildKeyChainStore; +export default makeChildKeyChainStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Storage/Storage.js b/packages/wallet-lib/src/types/Storage/Storage.js index ccbe4ffbd18..55712023e85 100644 --- a/packages/wallet-lib/src/types/Storage/Storage.js +++ b/packages/wallet-lib/src/types/Storage/Storage.js @@ -1,6 +1,7 @@ -const EventEmitter = require('events'); -const { has } = require('lodash'); -const CONSTANTS = require('../../CONSTANTS'); +import EventEmitter from 'events'; +import lodash from 'lodash'; +const { has } = lodash; +import CONSTANTS from '../../CONSTANTS.js'; const defaultOpts = { rehydrate: true, @@ -56,14 +57,23 @@ class Storage extends EventEmitter { } } -Storage.prototype.configure = require('./methods/configure'); -Storage.prototype.createChainStore = require('./methods/createChainStore'); -Storage.prototype.createWalletStore = require('./methods/createWalletStore'); -Storage.prototype.getChainStore = require('./methods/getChainStore'); -Storage.prototype.getWalletStore = require('./methods/getWalletStore'); -Storage.prototype.rehydrateState = require('./methods/rehydrateState'); -Storage.prototype.saveState = require('./methods/saveState'); -Storage.prototype.startWorker = require('./methods/startWorker'); -Storage.prototype.stopWorker = require('./methods/stopWorker'); +import _Storage_configure from './methods/configure.js'; +Storage.prototype.configure = _Storage_configure; +import _Storage_createChainStore from './methods/createChainStore.js'; +Storage.prototype.createChainStore = _Storage_createChainStore; +import _Storage_createWalletStore from './methods/createWalletStore.js'; +Storage.prototype.createWalletStore = _Storage_createWalletStore; +import _Storage_getChainStore from './methods/getChainStore.js'; +Storage.prototype.getChainStore = _Storage_getChainStore; +import _Storage_getWalletStore from './methods/getWalletStore.js'; +Storage.prototype.getWalletStore = _Storage_getWalletStore; +import _Storage_rehydrateState from './methods/rehydrateState.js'; +Storage.prototype.rehydrateState = _Storage_rehydrateState; +import _Storage_saveState from './methods/saveState.js'; +Storage.prototype.saveState = _Storage_saveState; +import _Storage_startWorker from './methods/startWorker.js'; +Storage.prototype.startWorker = _Storage_startWorker; +import _Storage_stopWorker from './methods/stopWorker.js'; +Storage.prototype.stopWorker = _Storage_stopWorker; -module.exports = Storage; +export default Storage; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Storage/_configureAdapter.js b/packages/wallet-lib/src/types/Storage/_configureAdapter.js index 1a54b7bf39b..f692dbbdd4d 100644 --- a/packages/wallet-lib/src/types/Storage/_configureAdapter.js +++ b/packages/wallet-lib/src/types/Storage/_configureAdapter.js @@ -1,6 +1,6 @@ -const { InvalidStorageAdapter } = require('../../errors'); +import { InvalidStorageAdapter } from '../../errors/index.js'; -module.exports = async function configureAdapter(argAdapter) { +export default async function configureAdapter(argAdapter) { let adapter; if (!argAdapter) throw new Error('Expected an adapter to configure'); const argAdapterConstructorName = argAdapter.constructor.name; diff --git a/packages/wallet-lib/src/types/Storage/_getDefaultAdapter.js b/packages/wallet-lib/src/types/Storage/_getDefaultAdapter.js index bfc4bfe7dbf..8fb73797f72 100644 --- a/packages/wallet-lib/src/types/Storage/_getDefaultAdapter.js +++ b/packages/wallet-lib/src/types/Storage/_getDefaultAdapter.js @@ -1,7 +1,7 @@ -const logger = require('../../logger'); -const InMem = require('../../adapters/InMem'); +import logger from '../../logger/index.js'; +import InMem from '../../adapters/InMem.js'; -module.exports = async function getDefaultAdapter() { +export default async function getDefaultAdapter() { const isBrowser = (typeof document !== 'undefined'); // eslint-disable-next-line no-undef const isReactNative = (typeof navigator !== 'undefined' && navigator.product === 'ReactNative'); diff --git a/packages/wallet-lib/src/types/Storage/methods/configure.js b/packages/wallet-lib/src/types/Storage/methods/configure.js index a965b909da3..7c81f918fff 100644 --- a/packages/wallet-lib/src/types/Storage/methods/configure.js +++ b/packages/wallet-lib/src/types/Storage/methods/configure.js @@ -1,17 +1,18 @@ -const { has } = require('lodash'); -const InMem = require('../../../adapters/InMem'); -const configureAdapter = require('../_configureAdapter'); -const getDefaultAdapter = require('../_getDefaultAdapter'); -const { CONFIGURED } = require('../../../EVENTS'); -const logger = require('../../../logger'); -const CONSTANTS = require('../../../CONSTANTS'); +import lodash from 'lodash'; +const { has } = lodash; +import InMem from '../../../adapters/InMem.js'; +import configureAdapter from '../_configureAdapter.js'; +import getDefaultAdapter from '../_getDefaultAdapter.js'; +import { CONFIGURED } from '../../../EVENTS.js'; +import logger from '../../../logger/index.js'; +import CONSTANTS from '../../../CONSTANTS.js'; /** * To be called after instantialization as it contains all the async logic / test of adapters * @param opts * @return {Promise} */ -module.exports = async function configure(opts = {}) { +export default async function configure(opts = {}) { this.rehydrate = has(opts, 'rehydrate') ? opts.rehydrate : this.rehydrate; this.autosave = has(opts, 'autosave') ? opts.autosave : this.autosave; this.adapter = await configureAdapter((opts.adapter) ? opts.adapter : await getDefaultAdapter()); diff --git a/packages/wallet-lib/src/types/Storage/methods/createChainStore.js b/packages/wallet-lib/src/types/Storage/methods/createChainStore.js index 890ac45c070..12b188cc47e 100644 --- a/packages/wallet-lib/src/types/Storage/methods/createChainStore.js +++ b/packages/wallet-lib/src/types/Storage/methods/createChainStore.js @@ -1,5 +1,5 @@ -const ChainStore = require('../../ChainStore/ChainStore'); -const EVENTS = require('../../../EVENTS'); +import ChainStore from '../../ChainStore/ChainStore.js'; +import EVENTS from '../../../EVENTS.js'; const EVENTS_TO_FORWARD = [ EVENTS.FETCHED_CONFIRMED_TRANSACTION, @@ -26,4 +26,4 @@ const createChainStore = function createChain(network) { } return false; }; -module.exports = createChainStore; +export default createChainStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Storage/methods/createWalletStore.js b/packages/wallet-lib/src/types/Storage/methods/createWalletStore.js index b398746ac47..f9ace15433b 100644 --- a/packages/wallet-lib/src/types/Storage/methods/createWalletStore.js +++ b/packages/wallet-lib/src/types/Storage/methods/createWalletStore.js @@ -1,4 +1,4 @@ -const WalletStore = require('../../WalletStore/WalletStore'); +import WalletStore from '../../WalletStore/WalletStore.js'; const createWalletStore = function createWallet(walletId = 'squawk7700') { if (!this.wallets.has(walletId)) { @@ -7,4 +7,4 @@ const createWalletStore = function createWallet(walletId = 'squawk7700') { } return false; }; -module.exports = createWalletStore; +export default createWalletStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Storage/methods/getChainStore.js b/packages/wallet-lib/src/types/Storage/methods/getChainStore.js index 5255eb71033..a79f8dc106c 100644 --- a/packages/wallet-lib/src/types/Storage/methods/getChainStore.js +++ b/packages/wallet-lib/src/types/Storage/methods/getChainStore.js @@ -1,4 +1,4 @@ function getChainStore(network) { return this.chains.get(network); } -module.exports = getChainStore; +export default getChainStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Storage/methods/getWalletStore.js b/packages/wallet-lib/src/types/Storage/methods/getWalletStore.js index 3f43fc2b25e..1af1090dd81 100644 --- a/packages/wallet-lib/src/types/Storage/methods/getWalletStore.js +++ b/packages/wallet-lib/src/types/Storage/methods/getWalletStore.js @@ -2,4 +2,4 @@ function getWalletStore(walletId) { if (!this.wallets.has(walletId)) return null; return this.wallets.get(walletId); } -module.exports = getWalletStore; +export default getWalletStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Storage/methods/rehydrateState.js b/packages/wallet-lib/src/types/Storage/methods/rehydrateState.js index 9c8565f2af9..d1e37830e9b 100644 --- a/packages/wallet-lib/src/types/Storage/methods/rehydrateState.js +++ b/packages/wallet-lib/src/types/Storage/methods/rehydrateState.js @@ -1,8 +1,8 @@ -const { hasMethod } = require('../../../utils'); +import { hasMethod } from '../../../utils/index.js'; -const { REHYDRATE_STATE_FAILED, REHYDRATE_STATE_SUCCESS } = require('../../../EVENTS'); +import { REHYDRATE_STATE_FAILED, REHYDRATE_STATE_SUCCESS } from '../../../EVENTS.js'; -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; /** * Fetch the state from the persistence adapter @@ -49,4 +49,4 @@ const rehydrateState = async function rehydrateState() { } } }; -module.exports = rehydrateState; +export default rehydrateState; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Storage/methods/saveState.js b/packages/wallet-lib/src/types/Storage/methods/saveState.js index cd59cb244dc..2af15c942d5 100644 --- a/packages/wallet-lib/src/types/Storage/methods/saveState.js +++ b/packages/wallet-lib/src/types/Storage/methods/saveState.js @@ -1,5 +1,5 @@ -const { SAVE_STATE_SUCCESS, SAVE_STATE_FAILED } = require('../../../EVENTS'); -const CONSTANTS = require('../../../CONSTANTS'); +import { SAVE_STATE_SUCCESS, SAVE_STATE_FAILED } from '../../../EVENTS.js'; +import CONSTANTS from '../../../CONSTANTS.js'; /** * Force persistence of the state to the adapter @@ -49,4 +49,4 @@ const saveState = async function saveState() { } return false; }; -module.exports = saveState; +export default saveState; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Storage/methods/startWorker.js b/packages/wallet-lib/src/types/Storage/methods/startWorker.js index 4976c0ebc53..53b6a403498 100644 --- a/packages/wallet-lib/src/types/Storage/methods/startWorker.js +++ b/packages/wallet-lib/src/types/Storage/methods/startWorker.js @@ -2,7 +2,7 @@ * Allow to start the working interval (worker for saving state). * @return {void} */ -module.exports = function startWorker() { +export default function startWorker() { this.interval = setInterval(() => { if (this.lastModified > this.lastSave) { this.saveState(); diff --git a/packages/wallet-lib/src/types/Storage/methods/stopWorker.js b/packages/wallet-lib/src/types/Storage/methods/stopWorker.js index f0aa6690313..5dea3adc7ee 100644 --- a/packages/wallet-lib/src/types/Storage/methods/stopWorker.js +++ b/packages/wallet-lib/src/types/Storage/methods/stopWorker.js @@ -2,7 +2,7 @@ * Allow to clear the working interval (worker). * @return {boolean} */ -module.exports = function stopWorker() { +export default function stopWorker() { clearInterval(this.interval); this.interval = null; return true; diff --git a/packages/wallet-lib/src/types/Wallet/Wallet.d.ts b/packages/wallet-lib/src/types/Wallet/Wallet.d.ts index 2d44e48b790..67598f07447 100644 --- a/packages/wallet-lib/src/types/Wallet/Wallet.d.ts +++ b/packages/wallet-lib/src/types/Wallet/Wallet.d.ts @@ -1,7 +1,7 @@ import { Mnemonic, PrivateKey, PublicKey, PublicAddress, Address, HDPublicKey, Network, Plugins } from "../types"; import { Account } from "../Account/Account"; import { Storage } from "../Storage/Storage"; -import { HDPrivateKey } from "@dashevo/dashcore-lib"; +import { HDPrivateKey } from '@dashevo/dashcore-lib'; import { Transport } from "../../transport/Transport"; export declare class Wallet { diff --git a/packages/wallet-lib/src/types/Wallet/Wallet.js b/packages/wallet-lib/src/types/Wallet/Wallet.js index e6ed98aec62..409cef7b656 100644 --- a/packages/wallet-lib/src/types/Wallet/Wallet.js +++ b/packages/wallet-lib/src/types/Wallet/Wallet.js @@ -1,11 +1,13 @@ -const { PrivateKey, Networks } = require('@dashevo/dashcore-lib'); - -const EventEmitter = require('events'); -const _ = require('lodash'); -const Storage = require('../Storage/Storage'); -const { +import dashcore from '@dashevo/dashcore-lib'; +const { PrivateKey, Networks } = dashcore; + +import EventEmitter from 'events'; +import _ from 'lodash'; +import Storage from '../Storage/Storage.js'; +import Identities from '../Identities/Identities.js'; +import { generateNewMnemonic, -} = require('../../utils'); +} from '../../utils/index.js'; const defaultOptions = { debug: false, @@ -20,16 +22,16 @@ const defaultOptions = { waitForTxMetadataTimeout: 540000, }; -const fromMnemonic = require('./methods/fromMnemonic'); -const fromPrivateKey = require('./methods/fromPrivateKey'); -const fromPublicKey = require('./methods/fromPublicKey'); -const fromAddress = require('./methods/fromAddress'); -const fromSeed = require('./methods/fromSeed'); -const fromHDPublicKey = require('./methods/fromHDPublicKey'); -const fromHDPrivateKey = require('./methods/fromHDPrivateKey'); -const generateNewWalletId = require('./methods/generateNewWalletId'); +import fromMnemonic from './methods/fromMnemonic.js'; +import fromPrivateKey from './methods/fromPrivateKey.js'; +import fromPublicKey from './methods/fromPublicKey.js'; +import fromAddress from './methods/fromAddress.js'; +import fromSeed from './methods/fromSeed.js'; +import fromHDPublicKey from './methods/fromHDPublicKey.js'; +import fromHDPrivateKey from './methods/fromHDPrivateKey.js'; +import generateNewWalletId from './methods/generateNewWalletId.js'; -const createTransportFromOptions = require('../../transport/createTransportFromOptions'); +import createTransportFromOptions from '../../transport/createTransportFromOptions.js'; /** * Instantiate a basic Wallet object, @@ -194,20 +196,23 @@ class Wallet extends EventEmitter { this.accounts = []; this.interface = opts.interface; - // Suppressed global require to avoid cyclic dependencies - // eslint-disable-next-line global-require - const Identities = require('../Identities/Identities'); this.identities = new Identities(this); this.savedBackup = false; // TODO: When true, we delete mnemonic from internals } } -Wallet.prototype.createAccount = require('./methods/createAccount'); -Wallet.prototype.disconnect = require('./methods/disconnect'); -Wallet.prototype.getAccount = require('./methods/getAccount'); +import _Wallet_createAccount from './methods/createAccount.js'; +Wallet.prototype.createAccount = _Wallet_createAccount; +import _Wallet_disconnect from './methods/disconnect.js'; +Wallet.prototype.disconnect = _Wallet_disconnect; +import _Wallet_getAccount from './methods/getAccount.js'; +Wallet.prototype.getAccount = _Wallet_getAccount; Wallet.prototype.generateNewWalletId = generateNewWalletId; -Wallet.prototype.exportWallet = require('./methods/exportWallet'); -Wallet.prototype.sweepWallet = require('./methods/sweepWallet'); -Wallet.prototype.dumpStorage = require('./methods/dumpStorage'); - -module.exports = Wallet; +import _Wallet_exportWallet from './methods/exportWallet.js'; +Wallet.prototype.exportWallet = _Wallet_exportWallet; +import _Wallet_sweepWallet from './methods/sweepWallet.js'; +Wallet.prototype.sweepWallet = _Wallet_sweepWallet; +import _Wallet_dumpStorage from './methods/dumpStorage.js'; +Wallet.prototype.dumpStorage = _Wallet_dumpStorage; + +export default Wallet; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Wallet/Wallet.spec.js b/packages/wallet-lib/src/types/Wallet/Wallet.spec.js index 87f509728c5..7d7419334d5 100644 --- a/packages/wallet-lib/src/types/Wallet/Wallet.spec.js +++ b/packages/wallet-lib/src/types/Wallet/Wallet.spec.js @@ -1,14 +1,14 @@ -const { expect } = require('chai'); -const Dashcore = require('@dashevo/dashcore-lib'); -const knifeMnemonic = require('../../../fixtures/knifeeasily'); -const gatherSailMnemonic = require('../../../fixtures/gathersail'); -const fluidMnemonic = require('../../../fixtures/fluidDepth'); -const cR4t6ePrivateKey = require('../../../fixtures/cR4t6e_pk'); -const { WALLET_TYPES } = require('../../CONSTANTS'); -const { Wallet } = require('../../index'); -const inMem = require('../../adapters/InMem'); -const fromHDPublicKey = require('./methods/fromHDPublicKey'); -const gatherSail = require('../../../fixtures/gathersail'); +import { expect } from 'chai'; +import Dashcore from '@dashevo/dashcore-lib'; +import knifeMnemonic from '../../../fixtures/knifeeasily.json' with { type: 'json' }; +import gatherSailMnemonic from '../../../fixtures/gathersail.json' with { type: 'json' }; +import fluidMnemonic from '../../../fixtures/fluidDepth.json' with { type: 'json' }; +import cR4t6ePrivateKey from '../../../fixtures/cR4t6e_pk.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../CONSTANTS.js'; +import { Wallet } from '../../index.js'; +import inMem from '../../adapters/InMem.js'; +import fromHDPublicKey from './methods/fromHDPublicKey.js'; +import gatherSail from '../../../fixtures/gathersail.json' with { type: 'json' }; const mocks = { adapter: inMem, diff --git a/packages/wallet-lib/src/types/Wallet/methods/createAccount.js b/packages/wallet-lib/src/types/Wallet/methods/createAccount.js index f74c4bb885c..1abdc93a41f 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/createAccount.js +++ b/packages/wallet-lib/src/types/Wallet/methods/createAccount.js @@ -1,5 +1,6 @@ -const { WALLET_TYPES } = require('../../../CONSTANTS'); -const EVENTS = require('../../../EVENTS'); +import { WALLET_TYPES } from '../../../CONSTANTS.js'; +import EVENTS from '../../../EVENTS.js'; +import Account from '../../Account/Account.js'; /** * Will derivate to a new account. * @param {object} accountOpts - options to pass, will autopopulate some @@ -10,14 +11,6 @@ async function createAccount(accountOpts) { await new Promise((resolve) => { this.storage.once(EVENTS.CONFIGURED, resolve); }); } - /** - * Wallet.createAccount calls Account that depends on Wallet. - * In order to avoid a cyclic dependency issue we put this require here and - * disable eslint global require for next line - */ - // eslint-disable-next-line global-require - const Account = require('../../Account/Account'); - const { injectDefaultPlugins, debug, plugins, allowSensitiveOperations, } = this; @@ -57,4 +50,4 @@ async function createAccount(accountOpts) { throw e; } } -module.exports = createAccount; +export default createAccount; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Wallet/methods/createAccount.spec.js b/packages/wallet-lib/src/types/Wallet/methods/createAccount.spec.js index 7c41ff641ef..0307b361f2a 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/createAccount.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/createAccount.spec.js @@ -1,6 +1,6 @@ -const { expect } = require('chai'); -const createAccount = require('./createAccount'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { expect } from 'chai'; +import createAccount from './createAccount.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; const exceptedException1 = 'getAccount expected index integer to be a property of accountOptions'; diff --git a/packages/wallet-lib/src/types/Wallet/methods/disconnect.js b/packages/wallet-lib/src/types/Wallet/methods/disconnect.js index c0a042b4b2a..b700afd3051 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/disconnect.js +++ b/packages/wallet-lib/src/types/Wallet/methods/disconnect.js @@ -14,4 +14,4 @@ async function disconnect() { } } } -module.exports = disconnect; +export default disconnect; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Wallet/methods/dumpStorage.js b/packages/wallet-lib/src/types/Wallet/methods/dumpStorage.js index ac141828187..4d2848c69d5 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/dumpStorage.js +++ b/packages/wallet-lib/src/types/Wallet/methods/dumpStorage.js @@ -1,4 +1,4 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; const defaultOptions = { log: false, @@ -50,4 +50,4 @@ function dumpStorage(options) { return storageDump; } -module.exports = dumpStorage; +export default dumpStorage; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Wallet/methods/exportWallet.js b/packages/wallet-lib/src/types/Wallet/methods/exportWallet.js index 39cc12bc41f..ff74fadd89d 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/exportWallet.js +++ b/packages/wallet-lib/src/types/Wallet/methods/exportWallet.js @@ -1,4 +1,4 @@ -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { WALLET_TYPES } from '../../../CONSTANTS.js'; function exportMnemonic(mnemonic) { if (!mnemonic) throw new Error('Wallet was not initiated with a mnemonic, can\'t export it'); @@ -77,7 +77,7 @@ function exportHDPublicWallet(outputType = 'HDPublicKey') { * @param outputType - Allow to overwrite the default output type * @return {Mnemonic|HDPrivateKey} */ -module.exports = function exportWallet(outputType) { +export default function exportWallet(outputType) { switch (this.walletType) { case WALLET_TYPES.PRIVATEKEY: case WALLET_TYPES.SINGLE_ADDRESS: diff --git a/packages/wallet-lib/src/types/Wallet/methods/exportWallet.spec.js b/packages/wallet-lib/src/types/Wallet/methods/exportWallet.spec.js index b0af3f6c3a5..21cd3ea508d 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/exportWallet.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/exportWallet.spec.js @@ -1,11 +1,12 @@ -const { expect } = require('chai'); -const Wallet = require('../Wallet'); -const { PrivateKey, Networks } = require('@dashevo/dashcore-lib'); -const exportWallet = require('./exportWallet'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); -const cR4t6ePrivateKey = require('../../../../fixtures/cR4t6e_pk'); -const knifeMnemonic = require('../../../../fixtures/knifeeasily'); -const cR4t6eFixture = require("../../../../fixtures/cR4t6e_pk"); +import { expect } from 'chai'; +import Wallet from '../Wallet.js'; +import dashcore from '@dashevo/dashcore-lib'; +const { PrivateKey, Networks } = dashcore; +import exportWallet from './exportWallet.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; +import cR4t6ePrivateKey from '../../../../fixtures/cR4t6e_pk.json' with { type: 'json' }; +import knifeMnemonic from '../../../../fixtures/knifeeasily.json' with { type: 'json' }; +import cR4t6eFixture from '../../../../fixtures/cR4t6e_pk.json' with { type: 'json' }; const cR4t6ePublicKey = new PrivateKey(cR4t6eFixture.privateKey).toPublicKey(); describe('Wallet - export Wallet', function suite() { diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromAddress.js b/packages/wallet-lib/src/types/Wallet/methods/fromAddress.js index ebf0aba2925..ab5fb616e6a 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromAddress.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromAddress.js @@ -1,12 +1,12 @@ -const { is } = require('../../../utils'); -const DerivableKeyChain = require('../../DerivableKeyChain/DerivableKeyChain'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); -const KeyChainStore = require('../../KeyChainStore/KeyChainStore'); +import { is } from '../../../utils/index.js'; +import DerivableKeyChain from '../../DerivableKeyChain/DerivableKeyChain.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; +import KeyChainStore from '../../KeyChainStore/KeyChainStore.js'; /** * @param address */ -module.exports = function fromAddress(address, network) { +export default function fromAddress(address, network) { if (!is.address(address)) throw new Error('Expected a valid address (typeof Address or String)'); this.walletType = WALLET_TYPES.ADDRESS; this.mnemonic = null; diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromAddress.spec.js b/packages/wallet-lib/src/types/Wallet/methods/fromAddress.spec.js index f0839308fc9..7ead5b918a1 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromAddress.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromAddress.spec.js @@ -1,8 +1,9 @@ -const { expect } = require('chai'); -const { PrivateKey } = require('@dashevo/dashcore-lib'); -const fromAddress = require('./fromAddress'); -const cR4t6eFixture = require('../../../../fixtures/cR4t6e_pk'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { PrivateKey } = dashcore; +import fromAddress from './fromAddress.js'; +import cR4t6eFixture from '../../../../fixtures/cR4t6e_pk.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; const cR4t6ePublicKey = new PrivateKey(cR4t6eFixture.privateKey).toPublicKey(); describe('Wallet - fromAddress', function suite() { diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromHDPrivateKey.js b/packages/wallet-lib/src/types/Wallet/methods/fromHDPrivateKey.js index a90dd2ca516..5b6808b41c2 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromHDPrivateKey.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromHDPrivateKey.js @@ -1,16 +1,17 @@ -const { HDPrivateKey } = require('@dashevo/dashcore-lib'); -const { +import dashcore from '@dashevo/dashcore-lib'; +const { HDPrivateKey } = dashcore; +import { is, -} = require('../../../utils'); -const DerivableKeyChain = require('../../DerivableKeyChain/DerivableKeyChain'); -const KeyChainStore = require('../../KeyChainStore/KeyChainStore'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +} from '../../../utils/index.js'; +import DerivableKeyChain from '../../DerivableKeyChain/DerivableKeyChain.js'; +import KeyChainStore from '../../KeyChainStore/KeyChainStore.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; /** * Will set a wallet to work with a seed (HDPrivateKey) * @param hdPrivateKey */ -module.exports = function fromHDPrivateKey(hdPrivateKey) { +export default function fromHDPrivateKey(hdPrivateKey) { if (!is.HDPrivateKey(hdPrivateKey)) throw new Error('Expected a valid HDPrivateKey (typeof HDPrivateKey or String)'); this.walletType = WALLET_TYPES.HDWALLET; this.mnemonic = null; diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromHDPrivateKey.spec.js b/packages/wallet-lib/src/types/Wallet/methods/fromHDPrivateKey.spec.js index c947a076b4c..5a854c91b4e 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromHDPrivateKey.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromHDPrivateKey.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const fromHDPrivateKey = require('./fromHDPrivateKey'); -const knifeFixture = require('../../../../fixtures/knifeeasily'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { expect } from 'chai'; +import fromHDPrivateKey from './fromHDPrivateKey.js'; +import knifeFixture from '../../../../fixtures/knifeeasily.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; describe('Wallet - fromHDPrivateKey', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromHDPublicKey.js b/packages/wallet-lib/src/types/Wallet/methods/fromHDPublicKey.js index 1a6b5aacdfc..9afa69677d0 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromHDPublicKey.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromHDPublicKey.js @@ -1,15 +1,15 @@ -const Dashcore = require('@dashevo/dashcore-lib'); -const { is } = require('../../../utils'); -const DerivableKeyChain = require('../../DerivableKeyChain/DerivableKeyChain'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); -const KeyChainStore = require('../../KeyChainStore/KeyChainStore'); +import Dashcore from '@dashevo/dashcore-lib'; +import { is } from '../../../utils/index.js'; +import DerivableKeyChain from '../../DerivableKeyChain/DerivableKeyChain.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; +import KeyChainStore from '../../KeyChainStore/KeyChainStore.js'; const normalizeHDPubKey = (key) => (is.string(key) ? Dashcore.HDPublicKey(key) : key); /** * Will set a wallet to work with a on readonly mode from a HDPublicKey * @param HDPublicKey */ -module.exports = function fromHDPublicKey(_hdPublicKey) { +export default function fromHDPublicKey(_hdPublicKey) { if (!is.HDPublicKey(_hdPublicKey)) throw new Error('Expected a valid HDPublicKey (typeof HDPublicKey or String)'); this.walletType = WALLET_TYPES.HDPUBLIC; this.mnemonic = null; diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromHDPublicKey.spec.js b/packages/wallet-lib/src/types/Wallet/methods/fromHDPublicKey.spec.js index 8a8086b7cd9..2f447129bfe 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromHDPublicKey.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromHDPublicKey.spec.js @@ -1,9 +1,9 @@ -const Dashcore = require('@dashevo/dashcore-lib'); -const { expect } = require('chai'); -const Wallet = require('../Wallet'); -const fromHDPublicKey = require('./fromHDPublicKey'); -const gatherSail = require('../../../../fixtures/gathersail'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import Dashcore from '@dashevo/dashcore-lib'; +import { expect } from 'chai'; +import Wallet from '../Wallet.js'; +import fromHDPublicKey from './fromHDPublicKey.js'; +import gatherSail from '../../../../fixtures/gathersail.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; /** * Theses first set of data labeled gatherSail correspond to the following mnemonic: * gather sail face invite together focus waste barely excuse slide harbor hint diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromMnemonic.js b/packages/wallet-lib/src/types/Wallet/methods/fromMnemonic.js index b0b436fbbf4..a0516f43f4b 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromMnemonic.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromMnemonic.js @@ -1,16 +1,16 @@ -const { +import { mnemonicToHDPrivateKey, is, -} = require('../../../utils'); -const DerivableKeyChain = require('../../DerivableKeyChain/DerivableKeyChain'); -const KeyChainStore = require('../../KeyChainStore/KeyChainStore'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +} from '../../../utils/index.js'; +import DerivableKeyChain from '../../DerivableKeyChain/DerivableKeyChain.js'; +import KeyChainStore from '../../KeyChainStore/KeyChainStore.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; /** * Will set a wallet to work with a mnemonic (keychain, walletType & HDPrivateKey) * @param mnemonic */ -module.exports = function fromMnemonic(mnemonic, network, passphrase = '') { +export default function fromMnemonic(mnemonic, network, passphrase = '') { if (!is.mnemonic(mnemonic)) { throw new Error('Expected a valid mnemonic (typeof String or Mnemonic)'); } diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromMnemonic.spec.js b/packages/wallet-lib/src/types/Wallet/methods/fromMnemonic.spec.js index 85f498c6172..23cd06f9c4e 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromMnemonic.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromMnemonic.spec.js @@ -1,8 +1,8 @@ -const Dashcore = require('@dashevo/dashcore-lib'); -const { expect } = require('chai'); -const fromMnemonic = require('./fromMnemonic'); -const knifeFixture = require('../../../../fixtures/knifeeasily'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import Dashcore from '@dashevo/dashcore-lib'; +import { expect } from 'chai'; +import fromMnemonic from './fromMnemonic.js'; +import knifeFixture from '../../../../fixtures/knifeeasily.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; describe('Wallet - fromMnemonic', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromPrivateKey.js b/packages/wallet-lib/src/types/Wallet/methods/fromPrivateKey.js index 60912dcac17..7b59f5f1ab8 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromPrivateKey.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromPrivateKey.js @@ -1,13 +1,13 @@ -const { is } = require('../../../utils'); -const DerivableKeyChain = require('../../DerivableKeyChain/DerivableKeyChain'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); -const KeyChainStore = require('../../KeyChainStore/KeyChainStore'); +import { is } from '../../../utils/index.js'; +import DerivableKeyChain from '../../DerivableKeyChain/DerivableKeyChain.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; +import KeyChainStore from '../../KeyChainStore/KeyChainStore.js'; /** * Will set a wallet to work with a mnemonic (keychain, walletType & HDPrivateKey) * @param privateKey */ -module.exports = function fromPrivateKey(privateKey, network) { +export default function fromPrivateKey(privateKey, network) { if (!is.privateKey(privateKey)) throw new Error('Expected a valid private key (typeof PrivateKey or String)'); this.walletType = WALLET_TYPES.PRIVATEKEY; this.mnemonic = null; diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromPrivateKey.spec.js b/packages/wallet-lib/src/types/Wallet/methods/fromPrivateKey.spec.js index 4b6ca5e89ab..4d779c2f98f 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromPrivateKey.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromPrivateKey.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const fromPrivateKey = require('./fromPrivateKey'); -const cR4t6eFixture = require('../../../../fixtures/cR4t6e_pk'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { expect } from 'chai'; +import fromPrivateKey from './fromPrivateKey.js'; +import cR4t6eFixture from '../../../../fixtures/cR4t6e_pk.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; describe('Wallet - fromPrivateKey', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromPublicKey.js b/packages/wallet-lib/src/types/Wallet/methods/fromPublicKey.js index c86dc6d6e37..a8388f15954 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromPublicKey.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromPublicKey.js @@ -1,13 +1,13 @@ -const { is } = require('../../../utils'); -const DerivableKeyChain = require('../../DerivableKeyChain/DerivableKeyChain'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); -const KeyChainStore = require('../../KeyChainStore/KeyChainStore'); +import { is } from '../../../utils/index.js'; +import DerivableKeyChain from '../../DerivableKeyChain/DerivableKeyChain.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; +import KeyChainStore from '../../KeyChainStore/KeyChainStore.js'; /** * Will set a wallet to work with a mnemonic (keychain, walletType & HDPrivateKey) * @param privateKey */ -module.exports = function fromPublicKey(publicKey, network) { +export default function fromPublicKey(publicKey, network) { if (!is.publicKey(publicKey)) throw new Error('Expected a valid public key (typeof PublicKey or String)'); this.walletType = WALLET_TYPES.PUBLICKEY; this.mnemonic = null; diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromPublicKey.spec.js b/packages/wallet-lib/src/types/Wallet/methods/fromPublicKey.spec.js index 07890f2d45d..f50511ea27c 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromPublicKey.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromPublicKey.spec.js @@ -1,8 +1,9 @@ -const { expect } = require('chai'); -const { PrivateKey } = require('@dashevo/dashcore-lib'); -const fromPublicKey = require('./fromPublicKey'); -const cR4t6eFixture = require('../../../../fixtures/cR4t6e_pk'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { PrivateKey } = dashcore; +import fromPublicKey from './fromPublicKey.js'; +import cR4t6eFixture from '../../../../fixtures/cR4t6e_pk.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; const cR4t6ePublicKey = new PrivateKey(cR4t6eFixture.privateKey).toPublicKey(); describe('Wallet - fromPublicKey', function suite() { diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromSeed.js b/packages/wallet-lib/src/types/Wallet/methods/fromSeed.js index 038fc138e6b..947ea8a74d4 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromSeed.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromSeed.js @@ -1,14 +1,14 @@ -const { +import { is, seedToHDPrivateKey, -} = require('../../../utils'); +} from '../../../utils/index.js'; /** * Will set a wallet to work with a seed (HDPrivateKey) * fixme: Term seed is often use, but we might want to rename to fromHDPrivateKey * @param seed */ -module.exports = function fromSeed(seed, network) { +export default function fromSeed(seed, network) { if (!is.seed(seed)) throw new Error('Expected a valid seed (typeof string)'); return this.fromHDPrivateKey(seedToHDPrivateKey(seed, network)); }; diff --git a/packages/wallet-lib/src/types/Wallet/methods/fromSeed.spec.js b/packages/wallet-lib/src/types/Wallet/methods/fromSeed.spec.js index a0a9ec827ca..7bac04740bd 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/fromSeed.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/fromSeed.spec.js @@ -1,8 +1,8 @@ -const { expect } = require('chai'); -const fromSeed = require('./fromSeed'); -const fromHDPrivateKey = require('./fromHDPrivateKey'); -const knifeFixture = require('../../../../fixtures/knifeeasily'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { expect } from 'chai'; +import fromSeed from './fromSeed.js'; +import fromHDPrivateKey from './fromHDPrivateKey.js'; +import knifeFixture from '../../../../fixtures/knifeeasily.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; describe('Wallet - fromSeed', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Wallet/methods/generateNewWalletId.js b/packages/wallet-lib/src/types/Wallet/methods/generateNewWalletId.js index 66d4f87c24e..7ff3c1aa7c1 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/generateNewWalletId.js +++ b/packages/wallet-lib/src/types/Wallet/methods/generateNewWalletId.js @@ -1,11 +1,11 @@ -const { mnemonicToWalletId } = require('../../../utils'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { mnemonicToWalletId } from '../../../utils/index.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; /** * Generate a wallet id for a specific wallet based on it's (HD)privateKey * @return walletId */ -module.exports = function generateNewWalletId() { +export default function generateNewWalletId() { const { walletType } = this; const errorMessageBase = 'Cannot generate a walletId'; switch (walletType) { diff --git a/packages/wallet-lib/src/types/Wallet/methods/generateNewWalletId.spec.js b/packages/wallet-lib/src/types/Wallet/methods/generateNewWalletId.spec.js index 409a630f449..f991eece62f 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/generateNewWalletId.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/generateNewWalletId.spec.js @@ -1,9 +1,9 @@ -const { expect } = require('chai'); -const generateNewWalletId = require('./generateNewWalletId'); -const knifeMnemonic = require('../../../../fixtures/knifeeasily'); -const gatherSail = require('../../../../fixtures/gathersail'); -const cR4t6ePrivateKey = require('../../../../fixtures/cR4t6e_pk'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); +import { expect } from 'chai'; +import generateNewWalletId from './generateNewWalletId.js'; +import knifeMnemonic from '../../../../fixtures/knifeeasily.json' with { type: 'json' }; +import gatherSail from '../../../../fixtures/gathersail.json' with { type: 'json' }; +import cR4t6ePrivateKey from '../../../../fixtures/cR4t6e_pk.json' with { type: 'json' }; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; describe('Wallet - generateNewWalletId', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/types/Wallet/methods/getAccount.js b/packages/wallet-lib/src/types/Wallet/methods/getAccount.js index 8e3f33c7128..f27c4db816c 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/getAccount.js +++ b/packages/wallet-lib/src/types/Wallet/methods/getAccount.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); -const { is } = require('../../../utils'); -const EVENTS = require('../../../EVENTS'); +import _ from 'lodash'; +import { is } from '../../../utils/index.js'; +import EVENTS from '../../../EVENTS.js'; const defaultOpts = { index: 0, @@ -35,4 +35,4 @@ async function getAccount(accountOpts = defaultOpts) { return acc[0] || this.createAccount(opts); } -module.exports = getAccount; +export default getAccount; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/Wallet/methods/getAccount.spec.js b/packages/wallet-lib/src/types/Wallet/methods/getAccount.spec.js index 597d690f930..871949bf03b 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/getAccount.spec.js +++ b/packages/wallet-lib/src/types/Wallet/methods/getAccount.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const getAccount = require('./getAccount'); -const { WALLET_TYPES } = require('../../../CONSTANTS'); -const expectThrowsAsync = require('../../../utils/expectThrowsAsync'); +import { expect } from 'chai'; +import getAccount from './getAccount.js'; +import { WALLET_TYPES } from '../../../CONSTANTS.js'; +import expectThrowsAsync from '../../../utils/expectThrowsAsync.js'; const exceptedException1 = 'getAccount expected index integer to be a property of accountOptions'; diff --git a/packages/wallet-lib/src/types/Wallet/methods/sweepWallet.js b/packages/wallet-lib/src/types/Wallet/methods/sweepWallet.js index 1beb89ee770..82f8d72a306 100644 --- a/packages/wallet-lib/src/types/Wallet/methods/sweepWallet.js +++ b/packages/wallet-lib/src/types/Wallet/methods/sweepWallet.js @@ -1,8 +1,8 @@ // todo refactor promise function to fit no-promise-executor-return /* eslint-disable no-promise-executor-return */ -const { WALLET_TYPES } = require('../../../CONSTANTS'); -const logger = require('../../../logger'); +import { WALLET_TYPES } from '../../../CONSTANTS.js'; +import logger from '../../../logger/index.js'; /** * This will sweep any paper wallet with remaining UTXOS to another Wallet created * via a random new mnemonic or via passed one. @@ -62,4 +62,4 @@ async function sweepWallet(opts = {}) { }); } -module.exports = sweepWallet; +export default sweepWallet; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/WalletStore/WalletStore.js b/packages/wallet-lib/src/types/WalletStore/WalletStore.js index b4bbd3dbcfa..106125f3c0b 100644 --- a/packages/wallet-lib/src/types/WalletStore/WalletStore.js +++ b/packages/wallet-lib/src/types/WalletStore/WalletStore.js @@ -13,10 +13,15 @@ class WalletStore { } } -WalletStore.prototype.createPathState = require('./methods/createPathState'); -WalletStore.prototype.getIdentityIdByIndex = require('./methods/getIdentityIdByIndex'); -WalletStore.prototype.getIndexedIdentityIds = require('./methods/getIndexedIdentityIds'); -WalletStore.prototype.getPathState = require('./methods/getPathState'); -WalletStore.prototype.insertIdentityIdAtIndex = require('./methods/insertIdentityIdAtIndex'); +import _WalletStore_createPathState from './methods/createPathState.js'; +WalletStore.prototype.createPathState = _WalletStore_createPathState; +import _WalletStore_getIdentityIdByIndex from './methods/getIdentityIdByIndex.js'; +WalletStore.prototype.getIdentityIdByIndex = _WalletStore_getIdentityIdByIndex; +import _WalletStore_getIndexedIdentityIds from './methods/getIndexedIdentityIds.js'; +WalletStore.prototype.getIndexedIdentityIds = _WalletStore_getIndexedIdentityIds; +import _WalletStore_getPathState from './methods/getPathState.js'; +WalletStore.prototype.getPathState = _WalletStore_getPathState; +import _WalletStore_insertIdentityIdAtIndex from './methods/insertIdentityIdAtIndex.js'; +WalletStore.prototype.insertIdentityIdAtIndex = _WalletStore_insertIdentityIdAtIndex; -module.exports = WalletStore; +export default WalletStore; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/WalletStore/WalletStore.spec.js b/packages/wallet-lib/src/types/WalletStore/WalletStore.spec.js index 5f9aceafb5a..731023550d6 100644 --- a/packages/wallet-lib/src/types/WalletStore/WalletStore.spec.js +++ b/packages/wallet-lib/src/types/WalletStore/WalletStore.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const WalletStore = require('./WalletStore'); +import { expect } from 'chai'; +import WalletStore from './WalletStore.js'; let walletStore; describe('WalletStore - Class', ()=> { diff --git a/packages/wallet-lib/src/types/WalletStore/methods/createPathState.js b/packages/wallet-lib/src/types/WalletStore/methods/createPathState.js index 2dd215942ce..9922687c2e2 100644 --- a/packages/wallet-lib/src/types/WalletStore/methods/createPathState.js +++ b/packages/wallet-lib/src/types/WalletStore/methods/createPathState.js @@ -1,4 +1,4 @@ -const logger = require('../../../logger'); +import logger from '../../../logger/index.js'; function createPathState(path) { logger.debug(`WalletStore - Creating path state ${path}`); @@ -9,4 +9,4 @@ function createPathState(path) { }); } } -module.exports = createPathState; +export default createPathState; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/WalletStore/methods/getIdentityIdByIndex.js b/packages/wallet-lib/src/types/WalletStore/methods/getIdentityIdByIndex.js index f90d1e5782a..a2dd9d82a48 100644 --- a/packages/wallet-lib/src/types/WalletStore/methods/getIdentityIdByIndex.js +++ b/packages/wallet-lib/src/types/WalletStore/methods/getIdentityIdByIndex.js @@ -1,4 +1,4 @@ function getIdentityIdByIndex(identityIndex) { return this.state.identities.get(identityIndex); } -module.exports = getIdentityIdByIndex; +export default getIdentityIdByIndex; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/WalletStore/methods/getIndexedIdentityIds.js b/packages/wallet-lib/src/types/WalletStore/methods/getIndexedIdentityIds.js index e251ba4806b..42845feac31 100644 --- a/packages/wallet-lib/src/types/WalletStore/methods/getIndexedIdentityIds.js +++ b/packages/wallet-lib/src/types/WalletStore/methods/getIndexedIdentityIds.js @@ -1,4 +1,4 @@ function getIndexedIdentityIds() { return [...this.state.identities.values()]; } -module.exports = getIndexedIdentityIds; +export default getIndexedIdentityIds; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/WalletStore/methods/getPathState.js b/packages/wallet-lib/src/types/WalletStore/methods/getPathState.js index d2143cd4d95..fab7202f5b7 100644 --- a/packages/wallet-lib/src/types/WalletStore/methods/getPathState.js +++ b/packages/wallet-lib/src/types/WalletStore/methods/getPathState.js @@ -1,4 +1,4 @@ function getPathState(path) { return this.state.paths.get(path); } -module.exports = getPathState; +export default getPathState; \ No newline at end of file diff --git a/packages/wallet-lib/src/types/WalletStore/methods/insertIdentityIdAtIndex.js b/packages/wallet-lib/src/types/WalletStore/methods/insertIdentityIdAtIndex.js index ee8a9325190..181220527c5 100644 --- a/packages/wallet-lib/src/types/WalletStore/methods/insertIdentityIdAtIndex.js +++ b/packages/wallet-lib/src/types/WalletStore/methods/insertIdentityIdAtIndex.js @@ -1,4 +1,4 @@ -const IdentityReplaceError = require('../../../errors/IndentityIdReplaceError'); +import IdentityReplaceError from '../../../errors/IndentityIdReplaceError.js'; function insertIdentityIdAtIndex(identityId, identityIndex) { const existingId = this.getIdentityIdByIndex(identityIndex); @@ -9,4 +9,4 @@ function insertIdentityIdAtIndex(identityId, identityIndex) { this.state.identities.set(identityIndex, identityId); } -module.exports = insertIdentityIdAtIndex; +export default insertIdentityIdAtIndex; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/bip44/ensureAddressesToGapLimit.js b/packages/wallet-lib/src/utils/bip44/ensureAddressesToGapLimit.js index 318d7959f8f..fbd1b522729 100644 --- a/packages/wallet-lib/src/utils/bip44/ensureAddressesToGapLimit.js +++ b/packages/wallet-lib/src/utils/bip44/ensureAddressesToGapLimit.js @@ -1,9 +1,9 @@ -const logger = require('../../logger'); -const { BIP44_ADDRESS_GAP } = require('../../CONSTANTS'); -const is = require('../is'); +import logger from '../../logger/index.js'; +import { BIP44_ADDRESS_GAP } from '../../CONSTANTS.js'; +import is from '../is.js'; -const getMissingIndexes = require('./getMissingIndexes'); -const isContiguousPath = require('./isContiguousPath'); +import getMissingIndexes from './getMissingIndexes.js'; +import isContiguousPath from './isContiguousPath.js'; const sortByIndex = (a, b) => parseInt(a.split('/')[5], 10) - parseInt(b.split('/')[5], 10); @@ -108,4 +108,4 @@ function ensureAccountAddressesToGapLimit(walletStore, walletType, accountIndex, return generated; } -module.exports = ensureAccountAddressesToGapLimit; +export default ensureAccountAddressesToGapLimit; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/bip44/ensureAddressesToGapLimit.spec.js b/packages/wallet-lib/src/utils/bip44/ensureAddressesToGapLimit.spec.js index a702a57263e..02e36cf7686 100644 --- a/packages/wallet-lib/src/utils/bip44/ensureAddressesToGapLimit.spec.js +++ b/packages/wallet-lib/src/utils/bip44/ensureAddressesToGapLimit.spec.js @@ -1,6 +1,6 @@ -const {expect} = require('chai'); -const ensureAddressesToGapLimit = require('./ensureAddressesToGapLimit'); -const {CONSTANTS} = require("../../index"); +import {expect} from 'chai'; +import ensureAddressesToGapLimit from './ensureAddressesToGapLimit.js'; +import {CONSTANTS} from '../../index.js'; const walletStore = { addresses: { diff --git a/packages/wallet-lib/src/utils/bip44/getMissingIndexes.js b/packages/wallet-lib/src/utils/bip44/getMissingIndexes.js index b7b50829b6b..3a32f4536e4 100644 --- a/packages/wallet-lib/src/utils/bip44/getMissingIndexes.js +++ b/packages/wallet-lib/src/utils/bip44/getMissingIndexes.js @@ -1,6 +1,6 @@ -const is = require('../is'); +import is from '../is.js'; -module.exports = function getMissingIndexes(paths, fromOrigin = true) { +export default function getMissingIndexes(paths, fromOrigin = true) { if (!is.arr(paths)) return false; let sortedIndexes = []; diff --git a/packages/wallet-lib/src/utils/bip44/isContiguousPath.js b/packages/wallet-lib/src/utils/bip44/isContiguousPath.js index 608148dd7de..ec704cbbf2d 100644 --- a/packages/wallet-lib/src/utils/bip44/isContiguousPath.js +++ b/packages/wallet-lib/src/utils/bip44/isContiguousPath.js @@ -1,6 +1,6 @@ -const is = require('../is'); +import is from '../is.js'; -module.exports = function isContiguousPath(currPath, prevPath) { +export default function isContiguousPath(currPath, prevPath) { if (is.undef(currPath)) return false; const splitCurrPath = currPath.split('/'); diff --git a/packages/wallet-lib/src/utils/calculateDuffBalance.js b/packages/wallet-lib/src/utils/calculateDuffBalance.js index f32da7d67ea..6491749d728 100644 --- a/packages/wallet-lib/src/utils/calculateDuffBalance.js +++ b/packages/wallet-lib/src/utils/calculateDuffBalance.js @@ -5,7 +5,7 @@ * @param type {{'confirmed','unconfirmed','total'}} Default: total. Calculate balance by utxo type. * @return {number} Balance in duff */ -module.exports = function calculateDuffBalance(addresses, chainStore, type = 'total') { +export default function calculateDuffBalance(addresses, chainStore, type = 'total') { let totalSat = 0; addresses.forEach((address) => { diff --git a/packages/wallet-lib/src/utils/calculateTransactionFees.js b/packages/wallet-lib/src/utils/calculateTransactionFees.js index 2d9a592bd2b..17e4127b80b 100644 --- a/packages/wallet-lib/src/utils/calculateTransactionFees.js +++ b/packages/wallet-lib/src/utils/calculateTransactionFees.js @@ -1,4 +1,4 @@ -const is = require('./is'); +import is from './is.js'; function calculateTransactionFees(transaction) { if (!is.dashcoreTransaction(transaction)) throw new Error('Expected a valid transaction'); @@ -10,4 +10,4 @@ function calculateTransactionFees(transaction) { const outputAmount = outputs.reduce((acc, output) => (acc + output.satoshis), 0); return transaction.isCoinbase() ? 0 : inputAmount - outputAmount; } -module.exports = calculateTransactionFees; +export default calculateTransactionFees; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/calculateTransactionFees.spec.js b/packages/wallet-lib/src/utils/calculateTransactionFees.spec.js index ecf44b0701e..7914d7615f6 100644 --- a/packages/wallet-lib/src/utils/calculateTransactionFees.spec.js +++ b/packages/wallet-lib/src/utils/calculateTransactionFees.spec.js @@ -1,6 +1,7 @@ -const { expect } = require('chai'); -const { Transaction } = require('@dashevo/dashcore-lib'); -const calculateTransactionFees = require('./calculateTransactionFees'); +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import calculateTransactionFees from './calculateTransactionFees.js'; const tx1 = '0300000001b51d5a6f5c7a680bce489e6f5a9b176ac85c49f10db4798867c7d1eb2036fbc3000000006a4730440220283fd42353767188532db4a4f1c3d0a9e96e313196ae1310af6d3006c7aa64ff022027fa50cf065c096f146e00516cb3e28a9bb387a6cf1103aae0592d5c882d25e5012102ba0588ffd3c838b715d7c79bcf1cff2ba69befd5ea52aa3474d66f094536cac0ffffffff0200131a4b000000001976a914838112cc6c85e074aa7f373e942c9f5240c3e13a88ac89959800000000001976a914f728c15b9a5fe4e6d7b6ed74b323e23f5c6e303f88ac00000000'; const tx2 = '0300000001338540c64b794f73913f39f2d42d9139ce7c9d1c0ec5317c62ab4a28d6b0376f000000006b483045022100b996d726d224a762acf8ab3e37c085e796b44960b8e9933571ac57750e8ed05102201c6a36d72f16140d6a152be40add102d95a4ac5b177d300b10c277859690a859012103b5614f077d750a1eaffb23ca188dbcc7e267f4b8ffdedf81cdf970643027191bffffffff02008c8647000000001976a91414b05906daab037707927bc6c83900d5dbf2849688ac09869303000000001976a914791e51fff6554c18216c83d9ca81cf30cc66aff388ac00000000'; diff --git a/packages/wallet-lib/src/utils/castStorageItemsTypes.js b/packages/wallet-lib/src/utils/castStorageItemsTypes.js index 38180a93090..e0836aac6ce 100644 --- a/packages/wallet-lib/src/utils/castStorageItemsTypes.js +++ b/packages/wallet-lib/src/utils/castStorageItemsTypes.js @@ -75,4 +75,4 @@ const castStorageItemsTypes = (originalItem, schema, path = '') => { return { ...acc, ...result }; }, {}); }; -module.exports = castStorageItemsTypes; +export default castStorageItemsTypes; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/castStorageItemsTypes.spec.js b/packages/wallet-lib/src/utils/castStorageItemsTypes.spec.js index cb5cb75d4a2..780c8a9efc8 100644 --- a/packages/wallet-lib/src/utils/castStorageItemsTypes.spec.js +++ b/packages/wallet-lib/src/utils/castStorageItemsTypes.spec.js @@ -1,9 +1,10 @@ -const _ = require('lodash'); -const {expect} = require('chai'); -const ChainStore = require('../../src/types/ChainStore/ChainStore'); -const castItemTypes = require('./castStorageItemsTypes'); -const {BlockHeader, Transaction} = require('@dashevo/dashcore-lib') -const WalletStore = require("../types/WalletStore/WalletStore"); +import _ from 'lodash'; +import {expect} from 'chai'; +import ChainStore from '../../src/types/ChainStore/ChainStore.js'; +import castItemTypes from './castStorageItemsTypes.js'; +import dashcore from '@dashevo/dashcore-lib'; +const { BlockHeader, Transaction } = dashcore; +import WalletStore from '../types/WalletStore/WalletStore.js'; const mockChainStorage = { "headersMetadata": { diff --git a/packages/wallet-lib/src/utils/categorizeTransactions.js b/packages/wallet-lib/src/utils/categorizeTransactions.js index a117c12388b..c63accddef6 100644 --- a/packages/wallet-lib/src/utils/categorizeTransactions.js +++ b/packages/wallet-lib/src/utils/categorizeTransactions.js @@ -1,6 +1,7 @@ -const { each } = require('lodash'); -const classifyAddresses = require('./classifyAddresses'); -const { TRANSACTION_HISTORY_TYPES } = require('../CONSTANTS'); +import lodash from 'lodash'; +const { each } = lodash; +import classifyAddresses from './classifyAddresses.js'; +import { TRANSACTION_HISTORY_TYPES } from '../CONSTANTS.js'; // TODO: On a private key based wallet, as change and external is similar, // we actually cannot differentiate correctly from an address_transfer @@ -216,4 +217,4 @@ function categorizeTransactions( return categorizedTransactions; } -module.exports = categorizeTransactions; +export default categorizeTransactions; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/categorizeTransactions.spec.js b/packages/wallet-lib/src/utils/categorizeTransactions.spec.js index 48e0e13a095..0a8b385c835 100644 --- a/packages/wallet-lib/src/utils/categorizeTransactions.spec.js +++ b/packages/wallet-lib/src/utils/categorizeTransactions.spec.js @@ -1,12 +1,14 @@ -const {expect} = require('chai'); -const {Transaction} = require('@dashevo/dashcore-lib'); -const {each} = require('lodash'); -const {WALLET_TYPES} = require('../CONSTANTS'); - -const categorizeTransactions = require('./categorizeTransactions'); -const transactionsWithMetadataFixtures = require('../../fixtures/wallets/apart-trip-dignity/transactions-with-metadata.json'); -const expectedResults = require('../../fixtures/wallets/apart-trip-dignity/categorizeTransactions.expectedResults'); -const getFixtureHDAccountWithStorage = require("../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage"); +import {expect} from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import lodash from 'lodash'; +const { each } = lodash; +import {WALLET_TYPES} from '../CONSTANTS.js'; + +import categorizeTransactions from './categorizeTransactions.js'; +import transactionsWithMetadataFixtures from '../../fixtures/wallets/apart-trip-dignity/transactions-with-metadata.json' with { type: 'json' }; +import expectedResults from '../../fixtures/wallets/apart-trip-dignity/categorizeTransactions.expectedResults.js'; +import getFixtureHDAccountWithStorage from '../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; const mockedHDAccount = getFixtureHDAccountWithStorage(); diff --git a/packages/wallet-lib/src/utils/classifyAddresses.js b/packages/wallet-lib/src/utils/classifyAddresses.js index c6f6f55d297..25667803f56 100644 --- a/packages/wallet-lib/src/utils/classifyAddresses.js +++ b/packages/wallet-lib/src/utils/classifyAddresses.js @@ -1,4 +1,4 @@ -const { WALLET_TYPES, BIP44_LIVENET_ROOT_PATH, BIP44_TESTNET_ROOT_PATH } = require('../CONSTANTS'); +import { WALLET_TYPES, BIP44_LIVENET_ROOT_PATH, BIP44_TESTNET_ROOT_PATH } from '../CONSTANTS.js'; function classifyAddresses(walletStore, accountIndex, walletType, network = 'testnet') { const externalAddressesList = []; @@ -46,4 +46,4 @@ function classifyAddresses(walletStore, accountIndex, walletType, network = 'tes miscAddressesList, }; } -module.exports = classifyAddresses; +export default classifyAddresses; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/classifyAddresses.spec.js b/packages/wallet-lib/src/utils/classifyAddresses.spec.js index 0e7c9e83b84..fe0915e74c1 100644 --- a/packages/wallet-lib/src/utils/classifyAddresses.spec.js +++ b/packages/wallet-lib/src/utils/classifyAddresses.spec.js @@ -1,7 +1,7 @@ -const {expect} = require('chai'); -const {WALLET_TYPES} = require('../CONSTANTS'); -const classifyAddresses = require('./classifyAddresses'); -const getFixtureHDAccountWithStorage = require("../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage"); +import {expect} from 'chai'; +import {WALLET_TYPES} from '../CONSTANTS.js'; +import classifyAddresses from './classifyAddresses.js'; +import getFixtureHDAccountWithStorage from '../../fixtures/wallets/apart-trip-dignity/getFixtureAccountWithStorage.js'; const mockedHDAccount = getFixtureHDAccountWithStorage(); diff --git a/packages/wallet-lib/src/utils/coinSelection.js b/packages/wallet-lib/src/utils/coinSelection.js index 7c3b0926600..ee2b580ffac 100644 --- a/packages/wallet-lib/src/utils/coinSelection.js +++ b/packages/wallet-lib/src/utils/coinSelection.js @@ -1 +1 @@ -module.exports = require('./coinSelections/index'); +export { default } from './coinSelections/index.js'; diff --git a/packages/wallet-lib/src/utils/coinSelection.spec.js b/packages/wallet-lib/src/utils/coinSelection.spec.js index fac952faeee..8c50c9951c8 100644 --- a/packages/wallet-lib/src/utils/coinSelection.spec.js +++ b/packages/wallet-lib/src/utils/coinSelection.spec.js @@ -1,9 +1,11 @@ -const {expect} = require('chai'); -const {Transaction, Address, Script} = require('@dashevo/dashcore-lib'); -const coinSelection = require('./coinSelection'); -const {utxosList} = require('../../fixtures/crackspice'); -const STRATEGIES = require('./coinSelections/strategies'); -const TransactionEstimator = require('./coinSelections/TransactionEstimator') +import {expect} from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction, Address, Script } = dashcore; +import coinSelection from './coinSelection.js'; +import crackspice from '../../fixtures/crackspice.json' with { type: 'json' }; +const { utxosList } = crackspice; +import STRATEGIES from './coinSelections/strategies/index.js'; +import TransactionEstimator from './coinSelections/TransactionEstimator.js'; const utxosListAsUnspentOutput = utxosList.map((utxo)=> Transaction.UnspentOutput(utxo)); const outputs = { diff --git a/packages/wallet-lib/src/utils/coinSelections/TransactionEstimator.js b/packages/wallet-lib/src/utils/coinSelections/TransactionEstimator.js index 22530490c3b..184d1841e2b 100644 --- a/packages/wallet-lib/src/utils/coinSelections/TransactionEstimator.js +++ b/packages/wallet-lib/src/utils/coinSelections/TransactionEstimator.js @@ -1,9 +1,12 @@ -const _ = require('lodash'); -const { - Address, Script, Transaction, -} = require('@dashevo/dashcore-lib'); -const logger = require('../../logger'); +import _ from 'lodash'; +import dashcore from '@dashevo/dashcore-lib'; const { + Address, + Script, + Transaction, +} = dashcore; +import logger from '../../logger/index.js'; +import { FEES, VERSION_BYTES, TXOUT_DUFFS_VALUE_BYTES, @@ -11,9 +14,9 @@ const { TXIN_OUTPOINT_TXID_BYTES, TXIN_OUTPOINT_INDEX_BYTES, TXIN_SEQUENCE_BYTES, -} = require('../../CONSTANTS'); -const is = require('../is'); -const { varIntSizeBytesFromLength } = require('../varInt'); +} from '../../CONSTANTS.js'; +import is from '../is.js'; +import { varIntSizeBytesFromLength } from '../varInt.js'; const { Output } = Transaction; const calculateInputsSize = (inputs) => { @@ -168,4 +171,4 @@ class TransactionEstimator { logger.info('========================='); } } -module.exports = TransactionEstimator; +export default TransactionEstimator; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/coinSelections/helpers/index.js b/packages/wallet-lib/src/utils/coinSelections/helpers/index.js index c0bddccd6a9..473bdc57197 100644 --- a/packages/wallet-lib/src/utils/coinSelections/helpers/index.js +++ b/packages/wallet-lib/src/utils/coinSelections/helpers/index.js @@ -1,6 +1,10 @@ -const sortAndVerifyUTXOS = require('./sortAndVerifyUTXOS'); +import sortAndVerifyUTXOS from './sortAndVerifyUTXOS.js'; -module.exports = { +export { + sortAndVerifyUTXOS, +}; + +export default { sortAndVerifyUTXOS, }; diff --git a/packages/wallet-lib/src/utils/coinSelections/helpers/sortAndVerifyUTXOS.js b/packages/wallet-lib/src/utils/coinSelections/helpers/sortAndVerifyUTXOS.js index 058683eb4e4..b0e2a8e01b1 100644 --- a/packages/wallet-lib/src/utils/coinSelections/helpers/sortAndVerifyUTXOS.js +++ b/packages/wallet-lib/src/utils/coinSelections/helpers/sortAndVerifyUTXOS.js @@ -25,4 +25,4 @@ const sort = { const sortAndVerifyUTXOS = (utxosList, opts) => sort.by(utxosList, opts); -module.exports = sortAndVerifyUTXOS; +export default sortAndVerifyUTXOS; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/coinSelections/index.js b/packages/wallet-lib/src/utils/coinSelections/index.js index 9e3cebbe356..246b58f9ff4 100644 --- a/packages/wallet-lib/src/utils/coinSelections/index.js +++ b/packages/wallet-lib/src/utils/coinSelections/index.js @@ -1,10 +1,11 @@ -const { Transaction } = require('@dashevo/dashcore-lib'); -const STRATEGIES = require('./strategies'); -const InvalidUTXO = require('../../errors/InvalidUTXO'); -const InvalidOutput = require('../../errors/InvalidOutput'); -const CoinSelectionUnsufficientUTXOS = require('../../errors/CoinSelectionUnsufficientUTXOS'); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import STRATEGIES from './strategies/index.js'; +import InvalidUTXO from '../../errors/InvalidUTXO.js'; +import InvalidOutput from '../../errors/InvalidOutput.js'; +import CoinSelectionUnsufficientUTXOS from '../../errors/CoinSelectionUnsufficientUTXOS.js'; -module.exports = function coinSelection(utxosList, outputsList, deductFee = false, feeCategory = 'normal', strategy = STRATEGIES.simpleDescendingAccumulator) { +export default function coinSelection(utxosList, outputsList, deductFee = false, feeCategory = 'normal', strategy = STRATEGIES.simpleDescendingAccumulator) { if (!utxosList) { throw new Error('A utxosList is required'); } if (utxosList.constructor.name !== Array.name) { throw new Error('UtxosList is expected to be an array of utxos'); } if (utxosList.length < 1) { throw new Error('utxosList must contain at least 1 utxo'); } diff --git a/packages/wallet-lib/src/utils/coinSelections/strategies/index.js b/packages/wallet-lib/src/utils/coinSelections/strategies/index.js index d38fd2a7e0f..ec8ec4c8b64 100644 --- a/packages/wallet-lib/src/utils/coinSelections/strategies/index.js +++ b/packages/wallet-lib/src/utils/coinSelections/strategies/index.js @@ -1,8 +1,9 @@ -const simpleAscendingAccumulator = require('./simpleAscendingAccumulator'); -const simpleDescendingAccumulator = require('./simpleDescendingAccumulator'); +import simpleAscendingAccumulator from './simpleAscendingAccumulator.js'; +import simpleDescendingAccumulator from './simpleDescendingAccumulator.js'; const STRATEGIES = { simpleDescendingAccumulator, simpleAscendingAccumulator, }; -module.exports = STRATEGIES; +export default STRATEGIES; +export { simpleAscendingAccumulator, simpleDescendingAccumulator }; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/coinSelections/strategies/simpleAscendingAccumulator.js b/packages/wallet-lib/src/utils/coinSelections/strategies/simpleAscendingAccumulator.js index 69cb660ca97..63fcaf871be 100644 --- a/packages/wallet-lib/src/utils/coinSelections/strategies/simpleAscendingAccumulator.js +++ b/packages/wallet-lib/src/utils/coinSelections/strategies/simpleAscendingAccumulator.js @@ -1,5 +1,6 @@ -const { sortBy } = require('lodash'); -const TransactionEstimator = require('../TransactionEstimator'); +import lodash from 'lodash'; +const { sortBy } = lodash; +import TransactionEstimator from '../TransactionEstimator.js'; /** * Given a utxos list and a thresholdSatoshis, will add them * without any further logic up to met with requested params. @@ -69,4 +70,4 @@ const simpleAscendingAccumulator = (utxosList, outputsList, deductFee = false, f utxosValue: txEstimator.getInValue(), }; }; -module.exports = simpleAscendingAccumulator; +export default simpleAscendingAccumulator; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/coinSelections/strategies/simpleAscendingAccumulator.spec.js b/packages/wallet-lib/src/utils/coinSelections/strategies/simpleAscendingAccumulator.spec.js index 649b3617f8c..985e5ab0292 100644 --- a/packages/wallet-lib/src/utils/coinSelections/strategies/simpleAscendingAccumulator.spec.js +++ b/packages/wallet-lib/src/utils/coinSelections/strategies/simpleAscendingAccumulator.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const { simpleAscendingAccumulator } = require('./index'); -const getUTXOS = require('../../../types/Account/methods/getUTXOS'); -const duringDevelopStore = require('../../../../fixtures/duringdevelop-fullstore-snapshot-1549310417'); +import { expect } from 'chai'; +import { simpleAscendingAccumulator } from './index.js'; +import getUTXOS from '../../../types/Account/methods/getUTXOS.js'; +import duringDevelopStore from '../../../../fixtures/duringdevelop-fullstore-snapshot-1549310417.json' with { type: 'json' }; describe('CoinSelection - Strategy - simpleAscendingAccumulator', () => { describe.skip('it should pass - requires FakeNet', ()=>{ diff --git a/packages/wallet-lib/src/utils/coinSelections/strategies/simpleDescendingAccumulator.js b/packages/wallet-lib/src/utils/coinSelections/strategies/simpleDescendingAccumulator.js index 1a5e9a7a21c..acca3e06347 100644 --- a/packages/wallet-lib/src/utils/coinSelections/strategies/simpleDescendingAccumulator.js +++ b/packages/wallet-lib/src/utils/coinSelections/strategies/simpleDescendingAccumulator.js @@ -1,5 +1,6 @@ -const { sortBy } = require('lodash'); -const TransactionEstimator = require('../TransactionEstimator'); +import lodash from 'lodash'; +const { sortBy } = lodash; +import TransactionEstimator from '../TransactionEstimator.js'; /** * Given a utxos list and a thresholdSatoshis, will add them @@ -67,4 +68,4 @@ const simpleDescendingAccumulator = (utxosList, outputsList, deductFee = false, utxosValue: txEstimator.getInValue(), }; }; -module.exports = simpleDescendingAccumulator; +export default simpleDescendingAccumulator; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/coinSelections/strategies/simpleDescendingAccumulator.spec.js b/packages/wallet-lib/src/utils/coinSelections/strategies/simpleDescendingAccumulator.spec.js index 6ac79a1f0dc..0b5d9034680 100644 --- a/packages/wallet-lib/src/utils/coinSelections/strategies/simpleDescendingAccumulator.spec.js +++ b/packages/wallet-lib/src/utils/coinSelections/strategies/simpleDescendingAccumulator.spec.js @@ -1,7 +1,7 @@ -const { expect } = require('chai'); -const { simpleDescendingAccumulator } = require('./index'); -const getUTXOS = require('../../../types/Account/methods/getUTXOS'); -const duringDevelopStore = require('../../../../fixtures/duringdevelop-fullstore-snapshot-1549310417'); +import { expect } from 'chai'; +import { simpleDescendingAccumulator } from './index.js'; +import getUTXOS from '../../../types/Account/methods/getUTXOS.js'; +import duringDevelopStore from '../../../../fixtures/duringdevelop-fullstore-snapshot-1549310417.json' with { type: 'json' }; console.error('coinSelection.strategies.simpleDescendingAccumulator needs a rebuilt store'); describe.skip('CoinSelection - Strategy - simpleDescendingAccumulator', () => { diff --git a/packages/wallet-lib/src/utils/crypto.js b/packages/wallet-lib/src/utils/crypto.js index 2859e74dc73..e85d2764899 100644 --- a/packages/wallet-lib/src/utils/crypto.js +++ b/packages/wallet-lib/src/utils/crypto.js @@ -1,4 +1,4 @@ -const crypto = require('crypto'); +import crypto from 'crypto'; function hash(alg, data) { return crypto.createHash(alg).update(data).digest(); @@ -12,7 +12,13 @@ function doubleSha256(data) { return sha256(sha256(data)); } -module.exports = { +export { + hash, + doubleSha256, + sha256, +}; + +export default { hash, doubleSha256, sha256, diff --git a/packages/wallet-lib/src/utils/dashToDuffs.js b/packages/wallet-lib/src/utils/dashToDuffs.js index c540377b2f6..9c9c2d8370b 100644 --- a/packages/wallet-lib/src/utils/dashToDuffs.js +++ b/packages/wallet-lib/src/utils/dashToDuffs.js @@ -1,4 +1,4 @@ -const { DUFFS_PER_DASH } = require('../CONSTANTS'); +import { DUFFS_PER_DASH } from '../CONSTANTS.js'; function dashToDuffs(dash) { if (dash === undefined || dash.constructor.name !== Number.name) { @@ -6,4 +6,4 @@ function dashToDuffs(dash) { } return parseInt((dash * DUFFS_PER_DASH).toFixed(0), 10); } -module.exports = dashToDuffs; +export default dashToDuffs; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/dashToDuffs.spec.js b/packages/wallet-lib/src/utils/dashToDuffs.spec.js index 598eaf9da50..da528519213 100644 --- a/packages/wallet-lib/src/utils/dashToDuffs.spec.js +++ b/packages/wallet-lib/src/utils/dashToDuffs.spec.js @@ -1,6 +1,6 @@ -const {expect} = require('chai'); -const dashToDuffs = require('./dashToDuffs'); -const {duffsToDash} = require("./index"); +import {expect} from 'chai'; +import dashToDuffs from './dashToDuffs.js'; +import {duffsToDash} from './index.js'; describe('Utils - dashToDuffs', function suite() { it('should correctly convert dash to duffs', () => { diff --git a/packages/wallet-lib/src/utils/duffsToDash.js b/packages/wallet-lib/src/utils/duffsToDash.js index b3d3226da86..b3de6e41199 100644 --- a/packages/wallet-lib/src/utils/duffsToDash.js +++ b/packages/wallet-lib/src/utils/duffsToDash.js @@ -1,4 +1,4 @@ -const { DUFFS_PER_DASH } = require('../CONSTANTS'); +import { DUFFS_PER_DASH } from '../CONSTANTS.js'; function duffsToDash(duffs) { if (duffs === undefined || duffs.constructor.name !== Number.name) { @@ -6,4 +6,4 @@ function duffsToDash(duffs) { } return duffs / DUFFS_PER_DASH; } -module.exports = duffsToDash; +export default duffsToDash; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/duffsToDash.spec.js b/packages/wallet-lib/src/utils/duffsToDash.spec.js index e15f79a2699..efb298946b0 100644 --- a/packages/wallet-lib/src/utils/duffsToDash.spec.js +++ b/packages/wallet-lib/src/utils/duffsToDash.spec.js @@ -1,6 +1,6 @@ -const {expect} = require('chai'); -const dashToDuffs = require('./dashToDuffs'); -const {duffsToDash} = require("./index"); +import {expect} from 'chai'; +import dashToDuffs from './dashToDuffs.js'; +import {duffsToDash} from './index.js'; describe('Utils - duffsToDash', function suite() { it('should correctly convert duffs to dash', () => { diff --git a/packages/wallet-lib/src/utils/expectThrowsAsync.js b/packages/wallet-lib/src/utils/expectThrowsAsync.js index 71f929f31f4..816d8deb645 100644 --- a/packages/wallet-lib/src/utils/expectThrowsAsync.js +++ b/packages/wallet-lib/src/utils/expectThrowsAsync.js @@ -1,5 +1,5 @@ // eslint-disable-next-line import-x/no-extraneous-dependencies -const { expect } = require('chai'); +import { expect } from 'chai'; const expectThrowsAsync = async (method, errorMessage) => { let error = null; @@ -19,4 +19,4 @@ const expectThrowsAsync = async (method, errorMessage) => { expect(error.message).to.equal(errorMessage); } }; -module.exports = expectThrowsAsync; +export default expectThrowsAsync; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/extendTransactionsWithMetadata.js b/packages/wallet-lib/src/utils/extendTransactionsWithMetadata.js index 82dea97c717..ea1521b3aa3 100644 --- a/packages/wallet-lib/src/utils/extendTransactionsWithMetadata.js +++ b/packages/wallet-lib/src/utils/extendTransactionsWithMetadata.js @@ -1,5 +1,6 @@ -const { each } = require('lodash'); -const logger = require('../logger'); +import lodash from 'lodash'; +const { each } = lodash; +import logger from '../logger/index.js'; const extendTransactionsWithMetadata = (transactions, transactionsMetadata) => { const transactionsWithMetadata = []; @@ -20,4 +21,4 @@ const extendTransactionsWithMetadata = (transactions, transactionsMetadata) => { }); return transactionsWithMetadata; }; -module.exports = extendTransactionsWithMetadata; +export default extendTransactionsWithMetadata; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/extendTransactionsWithMetadata.spec.js b/packages/wallet-lib/src/utils/extendTransactionsWithMetadata.spec.js index ef250da96ee..bf1266df8e1 100644 --- a/packages/wallet-lib/src/utils/extendTransactionsWithMetadata.spec.js +++ b/packages/wallet-lib/src/utils/extendTransactionsWithMetadata.spec.js @@ -1,6 +1,7 @@ -const { expect } = require('chai'); -const { Transaction } = require('@dashevo/dashcore-lib'); -const extendTransactionsWithMetadata = require('./extendTransactionsWithMetadata'); +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import extendTransactionsWithMetadata from './extendTransactionsWithMetadata.js'; const rawtx = '03000000012d9101b84d69adf1b168403ab2bcfbf3d2eebbf87a99a9be05d649d47d6c7bd3010000006a47304402201cc3d6887d5161eba36a5e6fb1ccd8e8f9eeda7fe95b4fb0a1accb99eeba0223022040d0df81fde8f59c807e541ca5bcfc9d7450f76657aeb44c708fa7d65b7d58410121038cdae47fceb5b117cd3ef5bdf8c9f2a83679a9105d012095762067bdb2351ceaffffffff0280969800000000001976a914e00939d2ec2f885f5e7dc7b9f5b06dcf868d0c4b88acabfe261f000000001976a914f03286cbb7954ea6affa9654af6cfe1210dd0c6288ac00000000'; const tx = new Transaction(rawtx); diff --git a/packages/wallet-lib/src/utils/feeCalculation.js b/packages/wallet-lib/src/utils/feeCalculation.js index 482dcf35a30..0358ecfd1ac 100644 --- a/packages/wallet-lib/src/utils/feeCalculation.js +++ b/packages/wallet-lib/src/utils/feeCalculation.js @@ -1,4 +1,4 @@ -module.exports = function feeCalculation(type = 'standard') { +export default function feeCalculation(type = 'standard') { const feeRate = { type: null, value: null, diff --git a/packages/wallet-lib/src/utils/feeCalculation.spec.js b/packages/wallet-lib/src/utils/feeCalculation.spec.js index 84aa8d0b478..2387b7e9d0d 100644 --- a/packages/wallet-lib/src/utils/feeCalculation.spec.js +++ b/packages/wallet-lib/src/utils/feeCalculation.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const feeCalculation = require('./feeCalculation'); +import { expect } from 'chai'; +import feeCalculation from './feeCalculation.js'; describe('Utils - feeCalculation', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/utils/filterTransactions.js b/packages/wallet-lib/src/utils/filterTransactions.js index 3badb90daef..734ac80c176 100644 --- a/packages/wallet-lib/src/utils/filterTransactions.js +++ b/packages/wallet-lib/src/utils/filterTransactions.js @@ -1,5 +1,6 @@ -const { uniq, each } = require('lodash'); -const { WALLET_TYPES } = require('../CONSTANTS'); +import lodash from 'lodash'; +const { uniq, each } = lodash; +import { WALLET_TYPES } from '../CONSTANTS.js'; const sortByNLockTime = (a, b) => (b.nLockTime - a.nLockTime); // Will filter out transaction that are not concerning us @@ -55,4 +56,4 @@ function filterTransactions(accountStore, walletType, accountIndex, transactions return filteredTransactions.sort(sortByNLockTime); } -module.exports = filterTransactions; +export default filterTransactions; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/filterTransactions.spec.js b/packages/wallet-lib/src/utils/filterTransactions.spec.js index a5a54495a0b..4d3e80fe96d 100644 --- a/packages/wallet-lib/src/utils/filterTransactions.spec.js +++ b/packages/wallet-lib/src/utils/filterTransactions.spec.js @@ -1,7 +1,8 @@ -const { Transaction } = require('@dashevo/dashcore-lib'); -const { expect } = require('chai'); -const { WALLET_TYPES } = require('../CONSTANTS'); -const filterTransactions = require('./filterTransactions'); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import { expect } from 'chai'; +import { WALLET_TYPES } from '../CONSTANTS.js'; +import filterTransactions from './filterTransactions.js'; const fixtureAddressesStore = { external: {}, diff --git a/packages/wallet-lib/src/utils/fundWallet.js b/packages/wallet-lib/src/utils/fundWallet.js index 9f872ac5166..934ad6a2cb1 100644 --- a/packages/wallet-lib/src/utils/fundWallet.js +++ b/packages/wallet-lib/src/utils/fundWallet.js @@ -1,4 +1,4 @@ -const EVENTS = require('../EVENTS'); +import EVENTS from '../EVENTS.js'; /** * @@ -45,4 +45,4 @@ async function fundWallet(faucetWallet, recipientWallet, amount) { return transaction.id; } -module.exports = fundWallet; +export default fundWallet; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/getBytesOf.js b/packages/wallet-lib/src/utils/getBytesOf.js index 247af4615c0..d54d57f2e45 100644 --- a/packages/wallet-lib/src/utils/getBytesOf.js +++ b/packages/wallet-lib/src/utils/getBytesOf.js @@ -1,4 +1,5 @@ -const { Script, Address } = require('@dashevo/dashcore-lib'); +import dashcore from '@dashevo/dashcore-lib'; +const { Script, Address } = dashcore; function getBytesOf(elem, type) { let BASE_BYTES = 0; @@ -17,4 +18,4 @@ function getBytesOf(elem, type) { return false; } } -module.exports = getBytesOf; +export default getBytesOf; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/getBytesOf.spec.js b/packages/wallet-lib/src/utils/getBytesOf.spec.js index 9ef1a6f9d58..881760ede4f 100644 --- a/packages/wallet-lib/src/utils/getBytesOf.spec.js +++ b/packages/wallet-lib/src/utils/getBytesOf.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const { getBytesOf } = require("./index"); +import { expect } from 'chai'; +import { getBytesOf } from './index.js'; describe('Utils - getBytesOf', function suite() { it('should have getBytesOf return false on unknown type', () => { diff --git a/packages/wallet-lib/src/utils/hasMethod.js b/packages/wallet-lib/src/utils/hasMethod.js index 6f00af1ac2c..b642b270f0a 100644 --- a/packages/wallet-lib/src/utils/hasMethod.js +++ b/packages/wallet-lib/src/utils/hasMethod.js @@ -7,4 +7,4 @@ function hasMethod(obj, methodName) { return !!obj && typeof obj[methodName] === 'function'; } -module.exports = hasMethod; +export default hasMethod; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/hasMethod.spec.js b/packages/wallet-lib/src/utils/hasMethod.spec.js index e635241ddc6..6293428d1e7 100644 --- a/packages/wallet-lib/src/utils/hasMethod.spec.js +++ b/packages/wallet-lib/src/utils/hasMethod.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const { hasMethod} = require("./index"); +import { expect } from 'chai'; +import { hasMethod} from './index.js'; describe('Utils - hasMethod', function suite() { it('should correctly handle method detection', function () { diff --git a/packages/wallet-lib/src/utils/hasProp.js b/packages/wallet-lib/src/utils/hasProp.js index a050ff046e3..5b765cabdd1 100644 --- a/packages/wallet-lib/src/utils/hasProp.js +++ b/packages/wallet-lib/src/utils/hasProp.js @@ -6,4 +6,4 @@ function hasProp(obj, prop) { return {}.hasOwnProperty.call(obj, prop); } -module.exports = hasProp; +export default hasProp; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/hasProp.spec.js b/packages/wallet-lib/src/utils/hasProp.spec.js index 43a7d9ef3b9..d6ee673d2cd 100644 --- a/packages/wallet-lib/src/utils/hasProp.spec.js +++ b/packages/wallet-lib/src/utils/hasProp.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const { hasProp } = require("./index"); +import { expect } from 'chai'; +import { hasProp } from './index.js'; describe('Utils - hasProp', function suite() { it('should correctly handle property detection', function () { diff --git a/packages/wallet-lib/src/utils/index.js b/packages/wallet-lib/src/utils/index.js index c23bb6a6e58..b21ca9688d6 100644 --- a/packages/wallet-lib/src/utils/index.js +++ b/packages/wallet-lib/src/utils/index.js @@ -1,30 +1,57 @@ -const extendTransactionsWithMetadata = require('./extendTransactionsWithMetadata'); -const calculateTransactionFees = require('./calculateTransactionFees'); -const categorizeTransactions = require('./categorizeTransactions'); -const calculateDuffBalance = require('./calculateDuffBalance'); -const filterTransactions = require('./filterTransactions'); -const { hash, doubleSha256, sha256 } = require('./crypto'); -const { varIntSizeBytesFromLength } = require('./varInt'); -const classifyAddresses = require('./classifyAddresses'); -const feeCalculation = require('./feeCalculation'); -const coinSelection = require('./coinSelection'); -const fundWallet = require('./fundWallet'); -const dashToDuffs = require('./dashToDuffs'); -const duffsToDash = require('./duffsToDash'); -const getBytesOf = require('./getBytesOf'); -const hasMethod = require('./hasMethod'); -const hasProp = require('./hasProp'); -const is = require('./is'); +import extendTransactionsWithMetadata from './extendTransactionsWithMetadata.js'; +import calculateTransactionFees from './calculateTransactionFees.js'; +import categorizeTransactions from './categorizeTransactions.js'; +import calculateDuffBalance from './calculateDuffBalance.js'; +import filterTransactions from './filterTransactions.js'; +import { hash, doubleSha256, sha256 } from './crypto.js'; +import { varIntSizeBytesFromLength } from './varInt.js'; +import classifyAddresses from './classifyAddresses.js'; +import feeCalculation from './feeCalculation.js'; +import coinSelection from './coinSelection.js'; +import fundWallet from './fundWallet.js'; +import dashToDuffs from './dashToDuffs.js'; +import duffsToDash from './duffsToDash.js'; +import getBytesOf from './getBytesOf.js'; +import hasMethod from './hasMethod.js'; +import hasProp from './hasProp.js'; +import is from './is.js'; -const { +import { generateNewMnemonic, mnemonicToHDPrivateKey, mnemonicToWalletId, seedToHDPrivateKey, mnemonicToSeed, -} = require('./mnemonic'); +} from './mnemonic.js'; -module.exports = { +export { + extendTransactionsWithMetadata, + varIntSizeBytesFromLength, + calculateTransactionFees, + categorizeTransactions, + mnemonicToHDPrivateKey, + calculateDuffBalance, + generateNewMnemonic, + seedToHDPrivateKey, + mnemonicToWalletId, + filterTransactions, + classifyAddresses, + mnemonicToSeed, + feeCalculation, + coinSelection, + doubleSha256, + dashToDuffs, + duffsToDash, + fundWallet, + getBytesOf, + hasMethod, + hasProp, + sha256, + hash, + is, +}; + +export default { extendTransactionsWithMetadata, varIntSizeBytesFromLength, calculateTransactionFees, diff --git a/packages/wallet-lib/src/utils/is.js b/packages/wallet-lib/src/utils/is.js index d8b25fa1120..0a910140a19 100644 --- a/packages/wallet-lib/src/utils/is.js +++ b/packages/wallet-lib/src/utils/is.js @@ -1,5 +1,6 @@ /* eslint-disable max-len */ // Todo : Some validators here are really proto type of methods, urgent impr is needed here. +import dashcore from '@dashevo/dashcore-lib'; const { PrivateKey, PublicKey, @@ -8,7 +9,7 @@ const { Transaction, Mnemonic, Address, -} = require('@dashevo/dashcore-lib'); +} = dashcore; const is = { // Primitives @@ -50,4 +51,4 @@ const is = { // aliases is.array = is.arr; -module.exports = is; +export default is; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/is.spec.js b/packages/wallet-lib/src/utils/is.spec.js index 4948857d37a..b969a38a05a 100644 --- a/packages/wallet-lib/src/utils/is.spec.js +++ b/packages/wallet-lib/src/utils/is.spec.js @@ -1,7 +1,8 @@ -const { Mnemonic, Networks, Address } = require('@dashevo/dashcore-lib'); -const { expect } = require('chai'); -const { is, generateNewMnemonic} = require("./index"); -const figureBridgeFixture = require("../../fixtures/figurebridge"); +import dashcore from '@dashevo/dashcore-lib'; +const { Mnemonic, Networks, Address } = dashcore; +import { expect } from 'chai'; +import { is, generateNewMnemonic} from './index.js'; +import figureBridgeFixture from '../../fixtures/figurebridge.json' with { type: 'json' }; describe('Utils - is', function suite() { it('should have is.num handle numbers', () => { diff --git a/packages/wallet-lib/src/utils/isBrowser.js b/packages/wallet-lib/src/utils/isBrowser.js index c11a2644b49..16cd4200af7 100644 --- a/packages/wallet-lib/src/utils/isBrowser.js +++ b/packages/wallet-lib/src/utils/isBrowser.js @@ -1,4 +1,4 @@ // eslint-disable-next-line no-new-func const isBrowser = new Function('try {return this===window;}catch(e){ return false;}'); -module.exports = isBrowser; +export default isBrowser; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/mnemonic.js b/packages/wallet-lib/src/utils/mnemonic.js index ff30fdabc8f..48d02d2930f 100644 --- a/packages/wallet-lib/src/utils/mnemonic.js +++ b/packages/wallet-lib/src/utils/mnemonic.js @@ -1,6 +1,8 @@ -const { pbkdf2Sync } = require('pbkdf2'); -const { Mnemonic, HDPrivateKey } = require('@dashevo/dashcore-lib'); -const { doubleSha256 } = require('./crypto'); +import pbkdf2 from 'pbkdf2'; +const { pbkdf2Sync } = pbkdf2; +import dashcore from '@dashevo/dashcore-lib'; +const { Mnemonic, HDPrivateKey } = dashcore; +import { doubleSha256 } from './crypto.js'; function generateNewMnemonic() { return Mnemonic(); @@ -38,7 +40,15 @@ const mnemonicToSeed = function mnemonicToSeed(mnemonic, password = '') { const seedToHDPrivateKey = function seedToHDPrivateKey(seed, network = 'testnet') { return HDPrivateKey.fromSeed(seed, network); }; -module.exports = { +export { + generateNewMnemonic, + mnemonicToHDPrivateKey, + mnemonicToWalletId, + mnemonicToSeed, + seedToHDPrivateKey, +}; + +export default { generateNewMnemonic, mnemonicToHDPrivateKey, mnemonicToWalletId, diff --git a/packages/wallet-lib/src/utils/mnemonic.spec.js b/packages/wallet-lib/src/utils/mnemonic.spec.js index 310465394ed..4d0030549e4 100644 --- a/packages/wallet-lib/src/utils/mnemonic.spec.js +++ b/packages/wallet-lib/src/utils/mnemonic.spec.js @@ -1,14 +1,15 @@ -const { expect } = require('chai'); -const { Networks } = require('@dashevo/dashcore-lib') -const { +import { expect } from 'chai'; +import dashcore from '@dashevo/dashcore-lib'; +const { Networks } = dashcore; +import { generateNewMnemonic, seedToHDPrivateKey, mnemonicToHDPrivateKey, mnemonicToWalletId, mnemonicToSeed, -} = require('./mnemonic'); -const is = require('./is'); -const knifeEasilyFixture = require("../../fixtures/knifeeasily"); +} from './mnemonic.js'; +import is from './is.js'; +import knifeEasilyFixture from '../../fixtures/knifeeasily.json' with { type: 'json' }; const mnemonic1 = 'hole lesson insane entire dolphin scissors game dwarf polar ethics drip math'; const mnemonic2 = 'woman forest output essay bleak satisfy era ordinary exotic source portion wire'; diff --git a/packages/wallet-lib/src/utils/outputHandler.js b/packages/wallet-lib/src/utils/outputHandler.js index 568b571726d..255442eab13 100644 --- a/packages/wallet-lib/src/utils/outputHandler.js +++ b/packages/wallet-lib/src/utils/outputHandler.js @@ -1,4 +1,4 @@ -module.exports = function outputHandler(outputs) { +export default function outputHandler(outputs) { return outputs.map((output) => { const result = {}; if (output.type === 'P2PKH') { diff --git a/packages/wallet-lib/src/utils/outputHandler.spec.js b/packages/wallet-lib/src/utils/outputHandler.spec.js index a7e715cc1e0..ae1580ab7f1 100644 --- a/packages/wallet-lib/src/utils/outputHandler.spec.js +++ b/packages/wallet-lib/src/utils/outputHandler.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const outputHandler = require('./outputHandler'); +import { expect } from 'chai'; +import outputHandler from './outputHandler.js'; describe('Utils - outputHandler', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/src/utils/sleep.js b/packages/wallet-lib/src/utils/sleep.js index 2691f5be9ad..ce6ecc4a37e 100644 --- a/packages/wallet-lib/src/utils/sleep.js +++ b/packages/wallet-lib/src/utils/sleep.js @@ -1,4 +1,4 @@ const sleep = (time) => new Promise((resolve) => { setTimeout(resolve, time); }); -module.exports = sleep; +export default sleep; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/sortTransactions.js b/packages/wallet-lib/src/utils/sortTransactions.js index d64e19c8ce8..cd817a8ce21 100644 --- a/packages/wallet-lib/src/utils/sortTransactions.js +++ b/packages/wallet-lib/src/utils/sortTransactions.js @@ -46,4 +46,4 @@ const sortTransactions = (txsWithMetadata) => { }, []); }; -module.exports = sortTransactions; +export default sortTransactions; \ No newline at end of file diff --git a/packages/wallet-lib/src/utils/varInt.js b/packages/wallet-lib/src/utils/varInt.js index 8fd8fffb97e..257a53cbb2a 100644 --- a/packages/wallet-lib/src/utils/varInt.js +++ b/packages/wallet-lib/src/utils/varInt.js @@ -1,15 +1,16 @@ -module.exports = { - varIntSizeBytesFromLength: (length) => { - let bytes = 1; - if (length >= 0xfd) { +const varIntSizeBytesFromLength = (length) => { + let bytes = 1; + if (length >= 0xfd) { + bytes += 2; + if (length >= 0xffff) { bytes += 2; - if (length >= 0xffff) { - bytes += 2; - if (length >= 0xffffffff) { - bytes += 4; - } + if (length >= 0xffffffff) { + bytes += 4; } } - return bytes; - }, + } + return bytes; }; + +export { varIntSizeBytesFromLength }; +export default { varIntSizeBytesFromLength }; diff --git a/packages/wallet-lib/src/utils/varInt.spec.js b/packages/wallet-lib/src/utils/varInt.spec.js index 7f51571cdc3..7f20bd3a884 100644 --- a/packages/wallet-lib/src/utils/varInt.spec.js +++ b/packages/wallet-lib/src/utils/varInt.spec.js @@ -1,5 +1,5 @@ -const { expect } = require('chai'); -const varInt = require('./varInt'); +import { expect } from 'chai'; +import varInt from './varInt.js'; describe('Utils - varInt', function suite() { this.timeout(10000); diff --git a/packages/wallet-lib/tests/functional/sweepWallet.spec.js b/packages/wallet-lib/tests/functional/sweepWallet.spec.js index d7941725966..f114fc77ae2 100644 --- a/packages/wallet-lib/tests/functional/sweepWallet.spec.js +++ b/packages/wallet-lib/tests/functional/sweepWallet.spec.js @@ -1,6 +1,6 @@ -const {Wallet} = require('../../src/index'); -const expectThrowsAsync = require('../../src/utils/expectThrowsAsync'); -const sweepWallet = require('../../src/types/Wallet/methods/sweepWallet'); +import {Wallet} from '../../src/index.js'; +import expectThrowsAsync from '../../src/utils/expectThrowsAsync.js'; +import sweepWallet from '../../src/types/Wallet/methods/sweepWallet.js'; const paperWallet = { publicKey: 'ybvbBPisVjiemj4qSg1mzZAzTSAPk64Ppf', diff --git a/packages/wallet-lib/tests/functional/wallet.spec.js b/packages/wallet-lib/tests/functional/wallet.spec.js index f10097dcdf3..0785889a5a7 100644 --- a/packages/wallet-lib/tests/functional/wallet.spec.js +++ b/packages/wallet-lib/tests/functional/wallet.spec.js @@ -1,9 +1,9 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const { Wallet } = require('../../src/index'); +import { Wallet } from '../../src/index.js'; -const { fundWallet } = require('../../src/utils'); -const { EVENTS } = require('../../src'); +import { fundWallet } from '../../src/utils/index.js'; +import { EVENTS } from '../../src/index.js'; const seeds = process.env.DAPI_SEED .split(','); diff --git a/packages/wallet-lib/tests/integration/plugins/Workers/BlockHeadersSyncWorker.spec.js b/packages/wallet-lib/tests/integration/plugins/Workers/BlockHeadersSyncWorker.spec.js index a64b2e06a46..035dc5000de 100644 --- a/packages/wallet-lib/tests/integration/plugins/Workers/BlockHeadersSyncWorker.spec.js +++ b/packages/wallet-lib/tests/integration/plugins/Workers/BlockHeadersSyncWorker.spec.js @@ -1,18 +1,19 @@ -const { expect } = require('chai'); -const EventEmitter = require('events'); -const { Block } = require('@dashevo/dashcore-lib'); -const DAPIClient = require('@dashevo/dapi-client'); -const EVENTS = require('../../../../src/EVENTS'); -const CONSTANTS = require('../../../../src/CONSTANTS'); -const BlockHeadersSyncWorker = require('../../../../src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker'); -const mockBlockHeadersProvider = require('../../../../src/test/mocks/mockBlockHeadersProvider'); -const mockStorage = require('../../../../src/test/mocks/mockStorage'); -const BlockHeadersStreamMock = require('../../../../src/test/mocks/BlockHeadersStreamMock'); -const { waitOneTick } = require('../../../../src/test/utils'); -const { mockHeadersChain } = require('../../../../src/test/mocks/dashcore/block'); +import { expect } from 'chai'; +import EventEmitter from 'events'; +import dashcore from '@dashevo/dashcore-lib'; +const { Block } = dashcore; +import DAPIClient from '@dashevo/dapi-client'; +import EVENTS from '../../../../src/EVENTS.js'; +import CONSTANTS from '../../../../src/CONSTANTS.js'; +import BlockHeadersSyncWorker from '../../../../src/plugins/Workers/BlockHeadersSyncWorker/BlockHeadersSyncWorker.js'; +import mockBlockHeadersProvider from '../../../../src/test/mocks/mockBlockHeadersProvider.js'; +import mockStorage from '../../../../src/test/mocks/mockStorage.js'; +import BlockHeadersStreamMock from '../../../../src/test/mocks/BlockHeadersStreamMock.js'; +import { waitOneTick } from '../../../../src/test/utils.js'; +import { mockHeadersChain } from '../../../../src/test/mocks/dashcore/block.js'; const { BlockHeadersProvider } = DAPIClient; -const logger = require('../../../../src/logger'); +import logger from '../../../../src/logger/index.js'; describe('BlockHeadersSyncWorker - integration', () => { let headersChain = []; diff --git a/packages/wallet-lib/tests/integration/plugins/Workers/TransactionsSyncWorker.spec.js b/packages/wallet-lib/tests/integration/plugins/Workers/TransactionsSyncWorker.spec.js index aab8022ccec..7804c8e86a3 100644 --- a/packages/wallet-lib/tests/integration/plugins/Workers/TransactionsSyncWorker.spec.js +++ b/packages/wallet-lib/tests/integration/plugins/Workers/TransactionsSyncWorker.spec.js @@ -1,15 +1,16 @@ /* eslint-disable no-console */ -const { Transaction } = require('@dashevo/dashcore-lib'); -const { expect } = require('chai'); -const TransactionsSyncWorker = require('../../../../src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker'); -const createTransportFromOptions = require('../../../../src/transport/createTransportFromOptions'); -const TxStreamMock = require('../../../../src/test/mocks/TxStreamMock'); -const { Wallet } = require('../../../../src'); -const LocalForageAdapterMock = require('../../../../src/test/mocks/LocalForageAdapterMock'); -const { waitOneTick } = require('../../../../src/test/utils'); -const { mockMerkleBlock } = require('../../../../src/test/mocks/dashcore/block'); -const EVENTS = require('../../../../src/EVENTS'); -const { mockInstantLock } = require('../../../../src/test/mocks/dashcore/instantlock'); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import { expect } from 'chai'; +import TransactionsSyncWorker from '../../../../src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.js'; +import createTransportFromOptions from '../../../../src/transport/createTransportFromOptions.js'; +import TxStreamMock from '../../../../src/test/mocks/TxStreamMock.js'; +import { Wallet } from '../../../../src/index.js'; +import LocalForageAdapterMock from '../../../../src/test/mocks/LocalForageAdapterMock.js'; +import { waitOneTick } from '../../../../src/test/utils.js'; +import { mockMerkleBlock } from '../../../../src/test/mocks/dashcore/block.js'; +import EVENTS from '../../../../src/EVENTS.js'; +import { mockInstantLock } from '../../../../src/test/mocks/dashcore/instantlock.js'; describe('TransactionsSyncWorker', () => { const WALLET_HD_KEY = 'xprv9s21ZrQH143K4PgfRZPuYjYUWRZkGfEPuWTEUESMoEZLC274ntC4G49qxgZJEPgmujsmY52eVggtwZgJPrWTMXmbYgqDVySWg46XzbGXrSZ'; diff --git a/packages/wallet-lib/tests/integration/types/Account.spec.js b/packages/wallet-lib/tests/integration/types/Account.spec.js index 3bdfcc4b5e8..34082f3c8e2 100644 --- a/packages/wallet-lib/tests/integration/types/Account.spec.js +++ b/packages/wallet-lib/tests/integration/types/Account.spec.js @@ -1,17 +1,18 @@ -const chai = require('chai'); -const chaiAsPromised = require('chai-as-promised'); +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import dashcore from '@dashevo/dashcore-lib'; const { - HDPrivateKey, - MerkleBlock, -} = require('@dashevo/dashcore-lib'); + HDPrivateKey, + MerkleBlock, +} = dashcore; -const TransactionsSyncWorker = require('../../../src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker'); +import TransactionsSyncWorker from '../../../src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.js'; -const LocalForageAdapterMock = require('../../../src/test/mocks/LocalForageAdapterMock'); -const createTransactionInAccount = require('../../../src/test/mocks/createTransactionInAccount'); +import LocalForageAdapterMock from '../../../src/test/mocks/LocalForageAdapterMock.js'; +import createTransactionInAccount from '../../../src/test/mocks/createTransactionInAccount.js'; -const { Wallet } = require('../../../src'); +import { Wallet } from '../../../src/index.js'; chai.use(chaiAsPromised); const { expect } = chai; diff --git a/packages/wallet-lib/tests/integration/types/Wallet.spec.js b/packages/wallet-lib/tests/integration/types/Wallet.spec.js index 46223e11132..400c6412dcd 100644 --- a/packages/wallet-lib/tests/integration/types/Wallet.spec.js +++ b/packages/wallet-lib/tests/integration/types/Wallet.spec.js @@ -1,19 +1,20 @@ +import dashcore from '@dashevo/dashcore-lib'; const { HDPrivateKey, Transaction, - PrivateKey -} = require('@dashevo/dashcore-lib'); - -const { expect } = require('chai'); - -const { Wallet } = require("../../../src"); -const TransactionsSyncWorker = require("../../../src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker"); -const ChainPlugin = require("../../../src/plugins/Plugins/ChainPlugin"); -const LocalForageAdapterMock = require("../../../src/test/mocks/LocalForageAdapterMock"); -const {waitOneTick} = require("../../../src/test/utils"); -const {mockMerkleBlock} = require("../../../src/test/mocks/dashcore/block"); -const createTransportFromOptions = require("../../../src/transport/createTransportFromOptions"); -const TxStreamMock = require("../../../src/test/mocks/TxStreamMock"); + PrivateKey, +} = dashcore; + +import { expect } from 'chai'; + +import { Wallet } from '../../../src/index.js'; +import TransactionsSyncWorker from '../../../src/plugins/Workers/TransactionsSyncWorker/TransactionsSyncWorker.js'; +import ChainPlugin from '../../../src/plugins/Plugins/ChainPlugin.js'; +import LocalForageAdapterMock from '../../../src/test/mocks/LocalForageAdapterMock.js'; +import {waitOneTick} from '../../../src/test/utils.js'; +import {mockMerkleBlock} from '../../../src/test/mocks/dashcore/block.js'; +import createTransportFromOptions from '../../../src/transport/createTransportFromOptions.js'; +import TxStreamMock from '../../../src/test/mocks/TxStreamMock.js'; describe('Wallet', () => { // TODO: write test that ensures that storage getting wiped after removing skipSynchronizationBeforeHeight flag diff --git a/packages/wallet-lib/webpack.config.js b/packages/wallet-lib/webpack.config.js deleted file mode 100644 index 7b43a5feec9..00000000000 --- a/packages/wallet-lib/webpack.config.js +++ /dev/null @@ -1,42 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); - -const webConfig = { - entry: './src/index.js', - mode: 'production', - target: 'web', - output: { - path: path.resolve(__dirname, 'dist'), - libraryTarget: 'umd', - filename: 'wallet-lib.min.js', - // fixes ReferenceError: window is not defined - globalObject: "(typeof self !== 'undefined' ? self : this)", - }, - resolve: { - fallback: { - fs: false, - crypto: require.resolve('crypto-browserify'), - buffer: require.resolve('buffer/'), - assert: require.resolve('assert/'), - url: require.resolve('url/'), - path: require.resolve('path-browserify'), - http: require.resolve('stream-http'), - https: require.resolve('https-browserify'), - stream: require.resolve('stream-browserify'), - util: require.resolve('util/'), - os: require.resolve('os-browserify/browser'), - zlib: require.resolve('browserify-zlib'), - events: require.resolve('events/'), - string_decoder: require.resolve('string_decoder/'), - process: require.resolve('process/browser'), - }, - extensions: ['.ts', '.js', '.json'], - }, - plugins: [ - new webpack.ProvidePlugin({ - Buffer: [require.resolve('buffer/'), 'Buffer'], - process: require.resolve('process/browser'), - }), - ], -}; -module.exports = webConfig; diff --git a/yarn.lock b/yarn.lock index e3b0966626a..b0db4e14fba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1953,48 +1953,22 @@ __metadata: "@dashevo/grpc-common": "workspace:*" "@dashevo/wasm-dpp": "workspace:*" "@yarnpkg/pnpify": "npm:^4.0.0-rc.42" - assert: "npm:^2.0.0" - browserify-zlib: "npm:^0.2.0" - buffer: "npm:^6.0.3" cbor: "npm:^8.0.0" chai: "npm:^4.3.10" chai-as-promised: "npm:^7.1.1" - crypto-browserify: "npm:^3.12.1" crypto-js: "npm:^4.2.0" dirty-chai: "npm:^2.0.1" dotenv-safe: "npm:^8.2.0" eslint: "npm:^9.18.0" events: "npm:^3.3.0" - https-browserify: "npm:^1.0.0" - karma: "npm:^6.4.3" - karma-chai: "npm:^0.1.0" - karma-chrome-launcher: "npm:^3.1.0" - karma-firefox-launcher: "npm:^2.1.2" - karma-mocha: "npm:^2.0.1" - karma-mocha-reporter: "npm:^2.2.5" - karma-sourcemap-loader: "npm:^0.3.7" - karma-webpack: "npm:^5.0.0" lodash: "npm:^4.17.23" mocha: "npm:^11.1.0" - node-inspect-extracted: "npm:^1.0.8" nyc: "npm:^15.1.0" - os-browserify: "npm:^0.3.0" - path-browserify: "npm:^1.0.1" pbkdf2: "npm:^3.1.3" - process: "npm:^0.11.10" - setimmediate: "npm:^1.0.5" sinon: "npm:^18.0.1" sinon-chai: "npm:^3.7.0" - stream-browserify: "npm:^3.0.0" - stream-http: "npm:^3.2.0" - string_decoder: "npm:^1.3.0" tsd: "npm:^0.28.1" - url: "npm:^0.11.3" - util: "npm:^0.12.4" wasm-x11-hash: "npm:~0.0.2" - webpack: "npm:^5.104.0" - webpack-cli: "npm:^4.9.1" - winston: "npm:^3.2.1" languageName: unknown linkType: soft From 1464665335f10a084663bc31d38553562bc86dfd Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 19 May 2026 11:11:11 -0500 Subject: [PATCH 11/11] refactor(js-dash-sdk,platform-test-suite)!: convert to ESM, consume ESM dapi-client and wallet-lib MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Final PR in the ESM migration stack. Converts the two remaining workspace packages that consumed dapi-client/wallet-lib, restoring monorepo-wide green tests after PR 3. js-dash-sdk: TypeScript-based package with NodeNext module resolution. Adds 'type: module' + exports map. tsconfig.build.json → module: nodenext, moduleResolution: nodenext, target: es2020. All .ts files get .js extensions on relative imports (TS NodeNext compiles .ts to .js but the import string must already say .js). Drops ts-mock-imports by refactoring register.ts to accept an injectable randomBytes parameter (ts-mock-imports relies on mutable module exports which ESM forbids). Deletes webpack/karma + browser polyfills. Replaces winston with console-backed logger. CJS-named-import conversions for @dashevo/dashcore-lib, @dashevo/wasm-dpp, @dashevo/grpc-common, and the system-id imports from contract packages. Adds parallel 'import type' aliases (via 'import type { X as XType }; type X = XType;') in 22 .ts files where destructured value names are also used as types — works around TS2440 namespace collision under NodeNext. platform-test-suite: converted ~35 files from CJS to ESM. Test bootstrap converted; .mocharc.yml uses 'import:' for ESM root hooks. Defensive (loadDpp.default ?? loadDpp)() unwrap in 4 sites (Platform.initializeDppModule, createIdentityFixtureInAccount, contracts/get.spec.ts, contracts/history.spec.ts). createGrpcTransportError-style dual-format byte handling preserved. Test results: 752 passing across the monorepo (dapi-client 315, wallet-lib 377, js-dash-sdk 60). platform-test-suite is end-to-end and requires live testnet credentials in .env (pre-existing constraint). --- .pnp.cjs | 656 +----------------- ...ostics-npm-2.0.2-83eb005a83-d0c7ae32da.zip | Bin 300959 -> 0 bytes ...serify-npm-2.0.0-8125e483ea-161984368c.zip | Bin 24803 -> 0 bytes ...y-zlib-npm-0.2.0-eab4087284-852e72effd.zip | Bin 56557 -> 0 bytes .../color-npm-3.2.1-568cf1014f-bf70438e01.zip | Bin 6446 -> 0 bytes ...string-npm-1.6.0-94ed25c258-27c2365153.zip | Bin 4578 -> 0 bytes ...colors-npm-1.4.0-7e2cf12234-90b2d54651.zip | Bin 19842 -> 0 bytes ...rspace-npm-1.1.4-f01655548a-bb3934ef3c.zip | Bin 2728 -> 0 bytes ...nabled-npm-2.0.0-bf5d96c9d8-9d256d89f4.zip | Bin 3732 -> 0 bytes .../fecha-npm-4.2.1-40d84f7733-6cf959d41a.zip | Bin 43702 -> 0 bytes ...n.name-npm-1.1.0-b472333184-000198af19.zip | Bin 3920 -> 0 bytes ...loader-npm-0.3.8-a7560c795e-f641355ec1.zip | Bin 3448 -> 0 bytes .../kuler-npm-2.0.0-19e74c9695-9e10b5a165.zip | Bin 3760 -> 0 bytes ...ogform-npm-2.3.0-13155f7f21-1fbe98725e.zip | Bin 48901 -> 0 bytes .../net-npm-1.0.2-1d5514df5b-d97e215d92.zip | Bin 2543 -> 0 bytes ...racted-npm-1.0.8-53baa7fd4f-4647a29afd.zip | Bin 21742 -> 0 bytes ...e-time-npm-1.0.0-aeaad5e524-64d0160480.zip | Bin 4034 -> 0 bytes ...serify-npm-0.3.0-cbc91c79a5-16e37ba3c0.zip | Bin 2562 -> 0 bytes .../pako-npm-1.0.11-b8f1b69d3e-1ad07210e8.zip | Bin 217242 -> 0 bytes ...ingify-npm-1.1.1-1c282e1c55-bddfc2334d.zip | Bin 12963 -> 0 bytes ...trace-npm-0.0.10-9460b173e1-7bd633f0e9.zip | Bin 4754 -> 0 bytes ...xt-hex-npm-1.0.0-22389e4d56-1138f68adc.zip | Bin 2519 -> 0 bytes .../tls-npm-0.0.1-d44eeeb72e-83aee8b284.zip | Bin 3626 -> 0 bytes ...e-beam-npm-1.3.0-eda4e2a46c-7d7b77d862.zip | Bin 6227 -> 0 bytes ...mports-npm-1.3.8-ce172e5189-82ee2a7256.zip | Bin 26620 -> 0 bytes ...inston-npm-3.3.3-3fa4527b42-60b74f2ea7.zip | Bin 98579 -> 0 bytes ...nsport-npm-4.4.0-e1b3134c1e-f1651e8a87.zip | Bin 19330 -> 0 bytes packages/js-dash-sdk/karma/karma.conf.js | 16 - .../karma/karma.functional.conf.js | 16 - packages/js-dash-sdk/karma/options.js | 59 -- packages/js-dash-sdk/package.json | 52 +- .../js-dash-sdk/src/SDK/Client/Client.spec.ts | 33 +- packages/js-dash-sdk/src/SDK/Client/Client.ts | 29 +- .../src/SDK/Client/ClientApps.spec.ts | 5 +- .../js-dash-sdk/src/SDK/Client/ClientApps.ts | 5 +- .../Client/Platform/Fetcher/Fetcher.spec.ts | 5 +- .../SDK/Client/Platform/Fetcher/Fetcher.ts | 21 +- .../src/SDK/Client/Platform/Fetcher/index.ts | 2 +- .../SDK/Client/Platform/Fetcher/withRetry.ts | 4 +- .../Client/Platform/IStateTransitionResult.ts | 4 +- .../NonceManager/NonceManager.spec.ts | 5 +- .../Platform/NonceManager/NonceManager.ts | 5 +- .../src/SDK/Client/Platform/Platform.spec.ts | 4 +- .../src/SDK/Client/Platform/Platform.ts | 79 ++- .../SDK/Client/Platform/StateRepository.ts | 13 +- .../Platform/broadcastStateTransition.ts | 17 +- .../Platform/createAssetLockTransaction.ts | 17 +- .../src/SDK/Client/Platform/index.ts | 2 +- .../Platform/methods/contracts/create.ts | 2 +- .../Platform/methods/contracts/get.spec.ts | 18 +- .../Client/Platform/methods/contracts/get.ts | 12 +- .../methods/contracts/history.spec.ts | 20 +- .../Platform/methods/contracts/history.ts | 18 +- .../Platform/methods/contracts/publish.ts | 17 +- .../Platform/methods/contracts/update.ts | 6 +- .../Platform/methods/documents/broadcast.ts | 11 +- .../Platform/methods/documents/create.ts | 7 +- .../Platform/methods/documents/get.spec.ts | 12 +- .../Client/Platform/methods/documents/get.ts | 11 +- .../methods/identities/creditTransfer.ts | 15 +- .../methods/identities/creditWithdrawal.ts | 20 +- .../Client/Platform/methods/identities/get.ts | 12 +- .../internal/createAssetLockProof.ts | 12 +- .../createIdentityCreateTransition.ts | 10 +- .../internal/createIdentityTopUpTransition.ts | 10 +- .../internal/waitForCoreChainLockedHeight.ts | 2 +- .../Platform/methods/identities/register.ts | 4 +- .../Platform/methods/identities/topUp.ts | 9 +- .../Platform/methods/identities/update.ts | 17 +- .../Platform/methods/names/register.spec.ts | 24 +- .../Client/Platform/methods/names/register.ts | 18 +- .../Platform/methods/names/resolve.spec.ts | 2 +- .../Client/Platform/methods/names/resolve.ts | 4 +- .../methods/names/resolveByRecord.spec.ts | 2 +- .../Platform/methods/names/resolveByRecord.ts | 5 +- .../Platform/methods/names/search.spec.ts | 2 +- .../Client/Platform/methods/names/search.ts | 4 +- .../Client/Platform/signStateTransition.ts | 2 +- .../src/SDK/Client/Platform/types.ts | 9 +- packages/js-dash-sdk/src/SDK/Client/index.ts | 2 +- packages/js-dash-sdk/src/SDK/Core/Core.d.ts | 16 +- packages/js-dash-sdk/src/SDK/Core/index.ts | 2 +- .../js-dash-sdk/src/SDK/Platform/Platform.ts | 2 +- .../js-dash-sdk/src/SDK/Platform/index.ts | 2 +- packages/js-dash-sdk/src/SDK/SDK.spec.ts | 2 +- packages/js-dash-sdk/src/SDK/SDK.ts | 8 +- packages/js-dash-sdk/src/SDK/index.ts | 2 +- packages/js-dash-sdk/src/bls/getBlsAdapter.ts | 6 +- packages/js-dash-sdk/src/index.ts | 20 +- packages/js-dash-sdk/src/logger/index.ts | 99 ++- packages/js-dash-sdk/src/test/bootstrap.js | 20 +- .../createIdentityFixtureInAccount.ts | 10 +- .../createTransactionFixtureInAccount.ts | 3 +- .../fixtures/getResponseMetadataFixture.ts | 2 +- .../js-dash-sdk/src/test/karma/bootstrap.ts | 22 - .../createAndAttachTransportMocksToClient.ts | 24 +- .../src/utils/createFakeIntantLock.ts | 5 +- packages/js-dash-sdk/tests/functional/sdk.js | 19 +- packages/js-dash-sdk/tsconfig.json | 7 +- packages/js-dash-sdk/tsconfig.mocha.json | 8 +- packages/js-dash-sdk/tsconfig.tsd.json | 4 +- packages/js-dash-sdk/webpack.base.config.js | 59 -- packages/js-dash-sdk/webpack.config.js | 22 - packages/platform-test-suite/.mocharc.yml | 2 +- packages/platform-test-suite/karma.conf.js | 131 ---- .../lib/parseRootTreeProof.js | 6 +- .../lib/parseStoreTreeProof.js | 4 +- .../platform-test-suite/lib/test/bootstrap.js | 19 +- .../lib/test/createClientWithFundedWallet.js | 15 +- .../lib/test/createClientWithoutWallet.js | 10 +- .../lib/test/createFaucetClient.js | 18 +- .../test/fixtures/getDataContractFixture.js | 10 +- .../lib/test/fixtures/getIdentityFixture.js | 8 +- .../lib/test/getDAPISeeds.js | 4 +- .../lib/test/karma/bootstrap.js | 26 - .../lib/test/testProofStructure.js | 2 +- .../lib/test/throwGrpcErrorWithMetadata.js | 4 +- .../test/utils/generateRandomIdentifier.js | 6 +- .../lib/test/waitForBalanceToChange.js | 4 +- packages/platform-test-suite/lib/wait.js | 4 +- .../platform-test-suite/lib/waitForBlocks.js | 6 +- .../lib/waitForSTPropagated.js | 4 +- packages/platform-test-suite/package.json | 33 +- .../test/e2e/contacts.spec.js | 8 +- .../platform-test-suite/test/e2e/dpns.spec.js | 11 +- .../test/e2e/wallet.spec.js | 8 +- .../test/e2e/withdrawals.spec.js | 10 +- .../core/broadcastTransaction.spec.js | 4 +- .../test/functional/core/getBlock.spec.js | 4 +- .../test/functional/core/getBlockHash.spec.js | 2 +- .../core/getBlockchainStatus.spec.js | 6 +- .../core/getMasternodeStatus.spec.js | 6 +- .../functional/core/getTransaction.spec.js | 6 +- ...eadersWithChainLocksHandlerFactory.spec.js | 38 +- .../functional/platform/DataContract.spec.js | 8 +- .../test/functional/platform/Document.spec.js | 14 +- .../test/functional/platform/Epoch.spec.js | 2 +- .../test/functional/platform/Identity.spec.js | 12 +- .../platform/ProtocolVersion.spec.js | 2 +- .../functional/platform/getStatus.spec.js | 2 +- .../test/functional/platform/proofs.spec.js | 260 +------ .../waitForStateTransitionResult.spec.js | 8 +- yarn.lock | 291 +------- 143 files changed, 637 insertions(+), 2113 deletions(-) delete mode 100644 .yarn/cache/@dabh-diagnostics-npm-2.0.2-83eb005a83-d0c7ae32da.zip delete mode 100644 .yarn/cache/assert-browserify-npm-2.0.0-8125e483ea-161984368c.zip delete mode 100644 .yarn/cache/browserify-zlib-npm-0.2.0-eab4087284-852e72effd.zip delete mode 100644 .yarn/cache/color-npm-3.2.1-568cf1014f-bf70438e01.zip delete mode 100644 .yarn/cache/color-string-npm-1.6.0-94ed25c258-27c2365153.zip delete mode 100644 .yarn/cache/colors-npm-1.4.0-7e2cf12234-90b2d54651.zip delete mode 100644 .yarn/cache/colorspace-npm-1.1.4-f01655548a-bb3934ef3c.zip delete mode 100644 .yarn/cache/enabled-npm-2.0.0-bf5d96c9d8-9d256d89f4.zip delete mode 100644 .yarn/cache/fecha-npm-4.2.1-40d84f7733-6cf959d41a.zip delete mode 100644 .yarn/cache/fn.name-npm-1.1.0-b472333184-000198af19.zip delete mode 100644 .yarn/cache/karma-sourcemap-loader-npm-0.3.8-a7560c795e-f641355ec1.zip delete mode 100644 .yarn/cache/kuler-npm-2.0.0-19e74c9695-9e10b5a165.zip delete mode 100644 .yarn/cache/logform-npm-2.3.0-13155f7f21-1fbe98725e.zip delete mode 100644 .yarn/cache/net-npm-1.0.2-1d5514df5b-d97e215d92.zip delete mode 100644 .yarn/cache/node-inspect-extracted-npm-1.0.8-53baa7fd4f-4647a29afd.zip delete mode 100644 .yarn/cache/one-time-npm-1.0.0-aeaad5e524-64d0160480.zip delete mode 100644 .yarn/cache/os-browserify-npm-0.3.0-cbc91c79a5-16e37ba3c0.zip delete mode 100644 .yarn/cache/pako-npm-1.0.11-b8f1b69d3e-1ad07210e8.zip delete mode 100644 .yarn/cache/safe-stable-stringify-npm-1.1.1-1c282e1c55-bddfc2334d.zip delete mode 100644 .yarn/cache/stack-trace-npm-0.0.10-9460b173e1-7bd633f0e9.zip delete mode 100644 .yarn/cache/text-hex-npm-1.0.0-22389e4d56-1138f68adc.zip delete mode 100644 .yarn/cache/tls-npm-0.0.1-d44eeeb72e-83aee8b284.zip delete mode 100644 .yarn/cache/triple-beam-npm-1.3.0-eda4e2a46c-7d7b77d862.zip delete mode 100644 .yarn/cache/ts-mock-imports-npm-1.3.8-ce172e5189-82ee2a7256.zip delete mode 100644 .yarn/cache/winston-npm-3.3.3-3fa4527b42-60b74f2ea7.zip delete mode 100644 .yarn/cache/winston-transport-npm-4.4.0-e1b3134c1e-f1651e8a87.zip delete mode 100644 packages/js-dash-sdk/karma/karma.conf.js delete mode 100644 packages/js-dash-sdk/karma/karma.functional.conf.js delete mode 100644 packages/js-dash-sdk/karma/options.js delete mode 100644 packages/js-dash-sdk/src/test/karma/bootstrap.ts delete mode 100644 packages/js-dash-sdk/webpack.base.config.js delete mode 100644 packages/js-dash-sdk/webpack.config.js delete mode 100644 packages/platform-test-suite/karma.conf.js delete mode 100644 packages/platform-test-suite/lib/test/karma/bootstrap.js diff --git a/.pnp.cjs b/.pnp.cjs index 881f7d1da52..d34e86710ee 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -2476,18 +2476,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["@dabh/diagnostics", [\ - ["npm:2.0.2", {\ - "packageLocation": "./.yarn/cache/@dabh-diagnostics-npm-2.0.2-83eb005a83-d0c7ae32da.zip/node_modules/@dabh/diagnostics/",\ - "packageDependencies": [\ - ["@dabh/diagnostics", "npm:2.0.2"],\ - ["colorspace", "npm:1.1.4"],\ - ["enabled", "npm:2.0.0"],\ - ["kuler", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["@dashevo/bench-suite", [\ ["workspace:packages/bench-suite", {\ "packageLocation": "./packages/bench-suite/",\ @@ -2769,7 +2757,7 @@ const RAW_RUNTIME_STATE = ["eslint", "virtual:de32c10d523830f1843784ae863166d6ef2e074b6da9615f2b3296a1f90385ed3f59e274e3957326ba7cf3442d82470d9e1ec01e6720989a570c075c95d90dbc#npm:9.39.2"],\ ["events", "npm:3.3.0"],\ ["karma", "npm:6.4.3"],\ - ["karma-chai", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:0.1.0"],\ + ["karma-chai", "virtual:98d1afeac78a19485e4cb7428abff692e58b6fc468d8040035b560ed49383fc95857be6b5014af27e53063e6f08b654690c2b945f3443c22dd60c6b083684b3c#npm:0.1.0"],\ ["karma-chrome-launcher", "npm:3.1.0"],\ ["karma-firefox-launcher", "npm:2.1.2"],\ ["karma-mocha", "npm:2.0.1"],\ @@ -2888,49 +2876,23 @@ const RAW_RUNTIME_STATE = ["@dashevo/wallet-lib", "workspace:packages/wallet-lib"],\ ["@dashevo/wasm-dpp", "workspace:packages/wasm-dpp"],\ ["@dashevo/withdrawals-contract", "workspace:packages/withdrawals-contract"],\ - ["assert", "npm:2.0.0"],\ - ["assert-browserify", "npm:2.0.0"],\ - ["browserify-zlib", "npm:0.2.0"],\ - ["buffer", "npm:6.0.3"],\ ["bufferutil", "npm:4.0.6"],\ ["chai", "npm:4.3.10"],\ ["chai-as-promised", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:7.1.1"],\ - ["crypto-browserify", "npm:3.12.1"],\ ["dash", "workspace:packages/js-dash-sdk"],\ ["dirty-chai", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:2.0.1"],\ ["dotenv-safe", "npm:8.2.0"],\ ["eslint", "virtual:de32c10d523830f1843784ae863166d6ef2e074b6da9615f2b3296a1f90385ed3f59e274e3957326ba7cf3442d82470d9e1ec01e6720989a570c075c95d90dbc#npm:9.39.2"],\ - ["events", "npm:3.3.0"],\ ["glob", "npm:10.4.1"],\ - ["https-browserify", "npm:1.0.0"],\ ["js-merkle", "npm:0.1.5"],\ - ["karma", "npm:6.4.3"],\ - ["karma-chai", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:0.1.0"],\ - ["karma-chrome-launcher", "npm:3.1.0"],\ - ["karma-firefox-launcher", "npm:2.1.2"],\ - ["karma-mocha", "npm:2.0.1"],\ - ["karma-mocha-reporter", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:2.2.5"],\ - ["karma-sourcemap-loader", "npm:0.3.8"],\ - ["karma-webpack", "virtual:01938c2be4835443e5a304e2b117c575220e96e8b7cedeb0f48d79264590b4c4babc6d1fea6367f522b1ca0149d795b42f2ab89c34a6ffe3c20f0a8cbb8b4453#npm:5.0.0"],\ ["localforage", "npm:1.10.0"],\ ["mocha", "npm:11.1.0"],\ - ["net", "npm:1.0.2"],\ ["nodeforage", "npm:1.1.2"],\ - ["os-browserify", "npm:0.3.0"],\ - ["path-browserify", "npm:1.0.1"],\ - ["process", "npm:0.11.10"],\ ["semver", "npm:7.5.3"],\ ["setimmediate", "npm:1.0.5"],\ ["sinon", "npm:18.0.1"],\ ["sinon-chai", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:3.7.0"],\ - ["stream-browserify", "npm:3.0.0"],\ - ["stream-http", "npm:3.2.0"],\ - ["string_decoder", "npm:1.3.0"],\ - ["tls", "npm:0.0.1"],\ - ["url", "npm:0.11.3"],\ ["utf-8-validate", "npm:5.0.9"],\ - ["util", "npm:0.12.4"],\ - ["webpack", "virtual:01938c2be4835443e5a304e2b117c575220e96e8b7cedeb0f48d79264590b4c4babc6d1fea6367f522b1ca0149d795b42f2ab89c34a6ffe3c20f0a8cbb8b4453#npm:5.105.0"],\ ["ws", "virtual:01938c2be4835443e5a304e2b117c575220e96e8b7cedeb0f48d79264590b4c4babc6d1fea6367f522b1ca0149d795b42f2ab89c34a6ffe3c20f0a8cbb8b4453#npm:8.17.1"]\ ],\ "linkType": "SOFT"\ @@ -3105,7 +3067,7 @@ const RAW_RUNTIME_STATE = ["eslint", "virtual:de32c10d523830f1843784ae863166d6ef2e074b6da9615f2b3296a1f90385ed3f59e274e3957326ba7cf3442d82470d9e1ec01e6720989a570c075c95d90dbc#npm:9.39.2"],\ ["events", "npm:3.3.0"],\ ["karma", "npm:6.4.3"],\ - ["karma-chai", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:0.1.0"],\ + ["karma-chai", "virtual:98d1afeac78a19485e4cb7428abff692e58b6fc468d8040035b560ed49383fc95857be6b5014af27e53063e6f08b654690c2b945f3443c22dd60c6b083684b3c#npm:0.1.0"],\ ["karma-chrome-launcher", "npm:3.1.0"],\ ["karma-firefox-launcher", "npm:2.1.2"],\ ["karma-mocha", "npm:2.0.1"],\ @@ -3142,7 +3104,7 @@ const RAW_RUNTIME_STATE = ["eslint", "virtual:de32c10d523830f1843784ae863166d6ef2e074b6da9615f2b3296a1f90385ed3f59e274e3957326ba7cf3442d82470d9e1ec01e6720989a570c075c95d90dbc#npm:9.39.2"],\ ["events", "npm:3.3.0"],\ ["karma", "npm:6.4.3"],\ - ["karma-chai", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:0.1.0"],\ + ["karma-chai", "virtual:98d1afeac78a19485e4cb7428abff692e58b6fc468d8040035b560ed49383fc95857be6b5014af27e53063e6f08b654690c2b945f3443c22dd60c6b083684b3c#npm:0.1.0"],\ ["karma-chrome-launcher", "npm:3.1.0"],\ ["karma-firefox-launcher", "npm:2.1.2"],\ ["karma-mocha", "npm:2.0.1"],\ @@ -6036,23 +5998,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:7fc88da9d00679384dc013444a3b1ed8ef8395fcad9d046790a1851d5db985e5ee052061731f87c5475e4bf20a92d69ea1a1a287c0d76d7b1a6bf97010c63532#npm:1.1.0", {\ - "packageLocation": "./.yarn/__virtual__/@webpack-cli-configtest-virtual-4b48f64ff3/0/cache/@webpack-cli-configtest-npm-1.1.0-2b6b2ef3d7-69e7816b5b.zip/node_modules/@webpack-cli/configtest/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["@types/webpack-cli", null],\ - ["@webpack-cli/configtest", "virtual:7fc88da9d00679384dc013444a3b1ed8ef8395fcad9d046790a1851d5db985e5ee052061731f87c5475e4bf20a92d69ea1a1a287c0d76d7b1a6bf97010c63532#npm:1.1.0"],\ - ["webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.105.0"],\ - ["webpack-cli", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:4.9.1"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "@types/webpack",\ - "webpack-cli",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:a5a6463a0bb826fa62fe988272ac511c2dd2d7b75a693754f12e5e1d5d09a8882a0c7fc9cc88d37e0f1a3647214b9bc4031426b2ba0ee449276ccbb9901a0ba8#npm:1.1.0", {\ "packageLocation": "./.yarn/__virtual__/@webpack-cli-configtest-virtual-962a737a82/0/cache/@webpack-cli-configtest-npm-1.1.0-2b6b2ef3d7-69e7816b5b.zip/node_modules/@webpack-cli/configtest/",\ "packageDependencies": [\ @@ -6127,20 +6072,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:7fc88da9d00679384dc013444a3b1ed8ef8395fcad9d046790a1851d5db985e5ee052061731f87c5475e4bf20a92d69ea1a1a287c0d76d7b1a6bf97010c63532#npm:1.4.0", {\ - "packageLocation": "./.yarn/__virtual__/@webpack-cli-info-virtual-c05860be1d/0/cache/@webpack-cli-info-npm-1.4.0-4a26ccee64-6385b1e2c5.zip/node_modules/@webpack-cli/info/",\ - "packageDependencies": [\ - ["@types/webpack-cli", null],\ - ["@webpack-cli/info", "virtual:7fc88da9d00679384dc013444a3b1ed8ef8395fcad9d046790a1851d5db985e5ee052061731f87c5475e4bf20a92d69ea1a1a287c0d76d7b1a6bf97010c63532#npm:1.4.0"],\ - ["envinfo", "npm:7.8.1"],\ - ["webpack-cli", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:4.9.1"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "webpack-cli"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:a5a6463a0bb826fa62fe988272ac511c2dd2d7b75a693754f12e5e1d5d09a8882a0c7fc9cc88d37e0f1a3647214b9bc4031426b2ba0ee449276ccbb9901a0ba8#npm:1.4.0", {\ "packageLocation": "./.yarn/__virtual__/@webpack-cli-info-virtual-8096a86511/0/cache/@webpack-cli-info-npm-1.4.0-4a26ccee64-6385b1e2c5.zip/node_modules/@webpack-cli/info/",\ "packageDependencies": [\ @@ -6209,23 +6140,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:7fc88da9d00679384dc013444a3b1ed8ef8395fcad9d046790a1851d5db985e5ee052061731f87c5475e4bf20a92d69ea1a1a287c0d76d7b1a6bf97010c63532#npm:1.6.0", {\ - "packageLocation": "./.yarn/__virtual__/@webpack-cli-serve-virtual-02793a9ef0/0/cache/@webpack-cli-serve-npm-1.6.0-c7b35aa4ef-3fd2e5f365.zip/node_modules/@webpack-cli/serve/",\ - "packageDependencies": [\ - ["@types/webpack-cli", null],\ - ["@types/webpack-dev-server", null],\ - ["@webpack-cli/serve", "virtual:7fc88da9d00679384dc013444a3b1ed8ef8395fcad9d046790a1851d5db985e5ee052061731f87c5475e4bf20a92d69ea1a1a287c0d76d7b1a6bf97010c63532#npm:1.6.0"],\ - ["webpack-cli", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:4.9.1"],\ - ["webpack-dev-server", null]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "@types/webpack-dev-server",\ - "webpack-cli",\ - "webpack-dev-server"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:a5a6463a0bb826fa62fe988272ac511c2dd2d7b75a693754f12e5e1d5d09a8882a0c7fc9cc88d37e0f1a3647214b9bc4031426b2ba0ee449276ccbb9901a0ba8#npm:1.6.0", {\ "packageLocation": "./.yarn/__virtual__/@webpack-cli-serve-virtual-29c8ff0174/0/cache/@webpack-cli-serve-npm-1.6.0-c7b35aa4ef-3fd2e5f365.zip/node_modules/@webpack-cli/serve/",\ "packageDependencies": [\ @@ -7132,19 +7046,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["assert-browserify", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/assert-browserify-npm-2.0.0-8125e483ea-161984368c.zip/node_modules/assert-browserify/",\ - "packageDependencies": [\ - ["assert-browserify", "npm:2.0.0"],\ - ["es6-object-assign", "npm:1.1.0"],\ - ["is-nan", "npm:1.3.2"],\ - ["object-is", "npm:1.1.5"],\ - ["util", "npm:0.12.4"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["assertion-error", [\ ["npm:1.1.0", {\ "packageLocation": "./.yarn/cache/assertion-error-npm-1.1.0-66b893015e-fd9429d3a3.zip/node_modules/assertion-error/",\ @@ -7771,16 +7672,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["browserify-zlib", [\ - ["npm:0.2.0", {\ - "packageLocation": "./.yarn/cache/browserify-zlib-npm-0.2.0-eab4087284-852e72effd.zip/node_modules/browserify-zlib/",\ - "packageDependencies": [\ - ["browserify-zlib", "npm:0.2.0"],\ - ["pako", "npm:1.0.11"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["browserslist", [\ ["npm:4.22.1", {\ "packageLocation": "./.yarn/cache/browserslist-npm-4.22.1-cccae6d74e-4a515168e0.zip/node_modules/browserslist/",\ @@ -8663,15 +8554,6 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["color", [\ - ["npm:3.2.1", {\ - "packageLocation": "./.yarn/cache/color-npm-3.2.1-568cf1014f-bf70438e01.zip/node_modules/color/",\ - "packageDependencies": [\ - ["color", "npm:3.2.1"],\ - ["color-convert", "npm:1.9.3"],\ - ["color-string", "npm:1.6.0"]\ - ],\ - "linkType": "HARD"\ - }],\ ["npm:4.2.3", {\ "packageLocation": "./.yarn/cache/color-npm-4.2.3-4a23227581-b23f5e500a.zip/node_modules/color/",\ "packageDependencies": [\ @@ -8717,15 +8599,6 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["color-string", [\ - ["npm:1.6.0", {\ - "packageLocation": "./.yarn/cache/color-string-npm-1.6.0-94ed25c258-27c2365153.zip/node_modules/color-string/",\ - "packageDependencies": [\ - ["color-name", "npm:1.1.4"],\ - ["color-string", "npm:1.6.0"],\ - ["simple-swizzle", "npm:0.2.2"]\ - ],\ - "linkType": "HARD"\ - }],\ ["npm:1.9.1", {\ "packageLocation": "./.yarn/cache/color-string-npm-1.9.1-dc020e56be-72aa0b81ee.zip/node_modules/color-string/",\ "packageDependencies": [\ @@ -8761,24 +8634,6 @@ const RAW_RUNTIME_STATE = ["colors", "npm:1.0.3"]\ ],\ "linkType": "HARD"\ - }],\ - ["npm:1.4.0", {\ - "packageLocation": "./.yarn/cache/colors-npm-1.4.0-7e2cf12234-90b2d54651.zip/node_modules/colors/",\ - "packageDependencies": [\ - ["colors", "npm:1.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["colorspace", [\ - ["npm:1.1.4", {\ - "packageLocation": "./.yarn/cache/colorspace-npm-1.1.4-f01655548a-bb3934ef3c.zip/node_modules/colorspace/",\ - "packageDependencies": [\ - ["color", "npm:3.2.1"],\ - ["colorspace", "npm:1.1.4"],\ - ["text-hex", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["commander", [\ @@ -9386,52 +9241,21 @@ const RAW_RUNTIME_STATE = ["@types/sinon", "npm:9.0.11"],\ ["@types/sinon-chai", "npm:3.2.5"],\ ["@yarnpkg/pnpify", "npm:4.0.0-rc.42"],\ - ["assert", "npm:2.0.0"],\ - ["browserify-zlib", "npm:0.2.0"],\ - ["bs58", "npm:4.0.1"],\ - ["buffer", "npm:6.0.3"],\ ["chai", "npm:4.3.10"],\ ["chai-as-promised", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:7.1.1"],\ ["chance", "npm:1.1.8"],\ - ["crypto-browserify", "npm:3.12.1"],\ ["dash", "workspace:packages/js-dash-sdk"],\ ["dirty-chai", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:2.0.1"],\ ["dotenv-safe", "npm:8.2.0"],\ ["eslint", "virtual:de32c10d523830f1843784ae863166d6ef2e074b6da9615f2b3296a1f90385ed3f59e274e3957326ba7cf3442d82470d9e1ec01e6720989a570c075c95d90dbc#npm:9.39.2"],\ - ["events", "npm:3.3.0"],\ - ["https-browserify", "npm:1.0.0"],\ - ["karma", "npm:6.4.3"],\ - ["karma-chai", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:0.1.0"],\ - ["karma-chrome-launcher", "npm:3.1.0"],\ - ["karma-firefox-launcher", "npm:2.1.2"],\ - ["karma-mocha", "npm:2.0.1"],\ - ["karma-mocha-reporter", "virtual:e2d057e7cc143d3cb9bec864f4a2d862441b5a09f81f8e6c46e7a098cbc89e4d07017cc6e2e2142d5704bb55da853cbec2d025ebc0b30e8696c31380c00f2c7d#npm:2.2.5"],\ - ["karma-webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.0.0"],\ ["mocha", "npm:11.1.0"],\ - ["net", "npm:1.0.2"],\ - ["node-inspect-extracted", "npm:1.0.8"],\ ["nodemon", "npm:2.0.20"],\ - ["os-browserify", "npm:0.3.0"],\ - ["path-browserify", "npm:1.0.1"],\ - ["process", "npm:0.11.10"],\ ["rimraf", "npm:3.0.2"],\ ["sinon", "npm:18.0.1"],\ ["sinon-chai", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:3.7.0"],\ - ["stream-browserify", "npm:3.0.0"],\ - ["stream-http", "npm:3.2.0"],\ - ["string_decoder", "npm:1.3.0"],\ - ["terser-webpack-plugin", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.3.11"],\ - ["tls", "npm:0.0.1"],\ - ["ts-loader", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:9.5.0"],\ - ["ts-mock-imports", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:1.3.8"],\ ["ts-node", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:10.9.2"],\ ["tsd", "npm:0.28.1"],\ - ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"],\ - ["url", "npm:0.11.3"],\ - ["util", "npm:0.12.4"],\ - ["webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.105.0"],\ - ["webpack-cli", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:4.9.1"],\ - ["winston", "npm:3.3.3"]\ + ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ ],\ "linkType": "SOFT"\ }]\ @@ -10311,15 +10135,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["enabled", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/enabled-npm-2.0.0-bf5d96c9d8-9d256d89f4.zip/node_modules/enabled/",\ - "packageDependencies": [\ - ["enabled", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["encodeurl", [\ ["npm:1.0.2", {\ "packageLocation": "./.yarn/cache/encodeurl-npm-1.0.2-f8c8454c41-e50e3d508c.zip/node_modules/encodeurl/",\ @@ -11779,15 +11594,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["fecha", [\ - ["npm:4.2.1", {\ - "packageLocation": "./.yarn/cache/fecha-npm-4.2.1-40d84f7733-6cf959d41a.zip/node_modules/fecha/",\ - "packageDependencies": [\ - ["fecha", "npm:4.2.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["figures", [\ ["npm:3.2.0", {\ "packageLocation": "./.yarn/cache/figures-npm-3.2.0-85d357e955-a3bf94e001.zip/node_modules/figures/",\ @@ -11959,15 +11765,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["fn.name", [\ - ["npm:1.1.0", {\ - "packageLocation": "./.yarn/cache/fn.name-npm-1.1.0-b472333184-000198af19.zip/node_modules/fn.name/",\ - "packageDependencies": [\ - ["fn.name", "npm:1.1.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["follow-redirects", [\ ["npm:1.15.6", {\ "packageLocation": "./.yarn/cache/follow-redirects-npm-1.15.6-50635fe51d-70c7612c4c.zip/node_modules/follow-redirects/",\ @@ -14647,14 +14444,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:0.1.0", {\ - "packageLocation": "./.yarn/__virtual__/karma-chai-virtual-e2e0d5ff8a/0/cache/karma-chai-npm-0.1.0-d1d807f507-7fae0b4ace.zip/node_modules/karma-chai/",\ + ["virtual:98d1afeac78a19485e4cb7428abff692e58b6fc468d8040035b560ed49383fc95857be6b5014af27e53063e6f08b654690c2b945f3443c22dd60c6b083684b3c#npm:0.1.0", {\ + "packageLocation": "./.yarn/__virtual__/karma-chai-virtual-a8d1d9b405/0/cache/karma-chai-npm-0.1.0-d1d807f507-7fae0b4ace.zip/node_modules/karma-chai/",\ "packageDependencies": [\ ["@types/chai", "npm:4.3.20"],\ ["@types/karma", null],\ ["chai", "npm:4.3.10"],\ ["karma", "npm:6.4.3"],\ - ["karma-chai", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:0.1.0"]\ + ["karma-chai", "virtual:98d1afeac78a19485e4cb7428abff692e58b6fc468d8040035b560ed49383fc95857be6b5014af27e53063e6f08b654690c2b945f3443c22dd60c6b083684b3c#npm:0.1.0"]\ ],\ "packagePeers": [\ "@types/chai",\ @@ -14739,16 +14536,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["karma-sourcemap-loader", [\ - ["npm:0.3.8", {\ - "packageLocation": "./.yarn/cache/karma-sourcemap-loader-npm-0.3.8-a7560c795e-f641355ec1.zip/node_modules/karma-sourcemap-loader/",\ - "packageDependencies": [\ - ["graceful-fs", "npm:4.2.10"],\ - ["karma-sourcemap-loader", "npm:0.3.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["karma-webpack", [\ ["npm:5.0.0", {\ "packageLocation": "./.yarn/cache/karma-webpack-npm-5.0.0-d7c66b2a8a-9bd565adbc.zip/node_modules/karma-webpack/",\ @@ -14757,22 +14544,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:01938c2be4835443e5a304e2b117c575220e96e8b7cedeb0f48d79264590b4c4babc6d1fea6367f522b1ca0149d795b42f2ab89c34a6ffe3c20f0a8cbb8b4453#npm:5.0.0", {\ - "packageLocation": "./.yarn/__virtual__/karma-webpack-virtual-df47bbf310/0/cache/karma-webpack-npm-5.0.0-d7c66b2a8a-9bd565adbc.zip/node_modules/karma-webpack/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["glob", "npm:7.2.3"],\ - ["karma-webpack", "virtual:01938c2be4835443e5a304e2b117c575220e96e8b7cedeb0f48d79264590b4c4babc6d1fea6367f522b1ca0149d795b42f2ab89c34a6ffe3c20f0a8cbb8b4453#npm:5.0.0"],\ - ["minimatch", "npm:3.1.2"],\ - ["webpack", "virtual:01938c2be4835443e5a304e2b117c575220e96e8b7cedeb0f48d79264590b4c4babc6d1fea6367f522b1ca0149d795b42f2ab89c34a6ffe3c20f0a8cbb8b4453#npm:5.105.0"],\ - ["webpack-merge", "npm:4.2.2"]\ - ],\ - "packagePeers": [\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:897449be52adaf897095babe74bfcc926f5d083ac9aac6fbc5e260f1f71b7e3ada3f268ac9457d3009b9c6fca51fe685ec21fbed21ec5087df84ab489b719456#npm:5.0.0", {\ "packageLocation": "./.yarn/__virtual__/karma-webpack-virtual-91170ce8e7/0/cache/karma-webpack-npm-5.0.0-d7c66b2a8a-9bd565adbc.zip/node_modules/karma-webpack/",\ "packageDependencies": [\ @@ -14805,22 +14576,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.0.0", {\ - "packageLocation": "./.yarn/__virtual__/karma-webpack-virtual-94955efe11/0/cache/karma-webpack-npm-5.0.0-d7c66b2a8a-9bd565adbc.zip/node_modules/karma-webpack/",\ - "packageDependencies": [\ - ["@types/webpack", null],\ - ["glob", "npm:7.2.3"],\ - ["karma-webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.0.0"],\ - ["minimatch", "npm:3.1.2"],\ - ["webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.105.0"],\ - ["webpack-merge", "npm:4.2.2"]\ - ],\ - "packagePeers": [\ - "@types/webpack",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:da12f6bb23b671689b7f4f5cfff69cabf980ba04aff1ffd96860c787f7d5d08d32b0db765d9f16463de0d1af2c01fa6987b861cf5df2362e38e0ef415f29b51c#npm:5.0.0", {\ "packageLocation": "./.yarn/__virtual__/karma-webpack-virtual-c873655e3d/0/cache/karma-webpack-npm-5.0.0-d7c66b2a8a-9bd565adbc.zip/node_modules/karma-webpack/",\ "packageDependencies": [\ @@ -14873,15 +14628,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["kuler", [\ - ["npm:2.0.0", {\ - "packageLocation": "./.yarn/cache/kuler-npm-2.0.0-19e74c9695-9e10b5a165.zip/node_modules/kuler/",\ - "packageDependencies": [\ - ["kuler", "npm:2.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["language-subtag-registry", [\ ["npm:0.3.23", {\ "packageLocation": "./.yarn/cache/language-subtag-registry-npm-0.3.23-06b360f90f-fe13ed74ab.zip/node_modules/language-subtag-registry/",\ @@ -15273,20 +15019,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["logform", [\ - ["npm:2.3.0", {\ - "packageLocation": "./.yarn/cache/logform-npm-2.3.0-13155f7f21-1fbe98725e.zip/node_modules/logform/",\ - "packageDependencies": [\ - ["colors", "npm:1.4.0"],\ - ["fecha", "npm:4.2.1"],\ - ["logform", "npm:2.3.0"],\ - ["ms", "npm:2.1.3"],\ - ["safe-stable-stringify", "npm:1.1.1"],\ - ["triple-beam", "npm:1.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["long", [\ ["npm:4.0.0", {\ "packageLocation": "./.yarn/cache/long-npm-4.0.0-ecd96a31ed-8296e2ba7b.zip/node_modules/long/",\ @@ -16335,15 +16067,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["net", [\ - ["npm:1.0.2", {\ - "packageLocation": "./.yarn/cache/net-npm-1.0.2-1d5514df5b-d97e215d92.zip/node_modules/net/",\ - "packageDependencies": [\ - ["net", "npm:1.0.2"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["nise", [\ ["npm:6.1.3", {\ "packageLocation": "./.yarn/cache/nise-npm-6.1.3-148369f991-a07be16c8b.zip/node_modules/nise/",\ @@ -16447,15 +16170,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["node-inspect-extracted", [\ - ["npm:1.0.8", {\ - "packageLocation": "./.yarn/cache/node-inspect-extracted-npm-1.0.8-53baa7fd4f-4647a29afd.zip/node_modules/node-inspect-extracted/",\ - "packageDependencies": [\ - ["node-inspect-extracted", "npm:1.0.8"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["node-preload", [\ ["npm:0.2.1", {\ "packageLocation": "./.yarn/cache/node-preload-npm-0.2.1-5b6aef1c8e-de36ed365b.zip/node_modules/node-preload/",\ @@ -17012,16 +16726,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["one-time", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/one-time-npm-1.0.0-aeaad5e524-64d0160480.zip/node_modules/one-time/",\ - "packageDependencies": [\ - ["fn.name", "npm:1.1.0"],\ - ["one-time", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["onetime", [\ ["npm:5.1.2", {\ "packageLocation": "./.yarn/cache/onetime-npm-5.1.2-3ed148fa42-e9fd0695a0.zip/node_modules/onetime/",\ @@ -17115,15 +16819,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["os-browserify", [\ - ["npm:0.3.0", {\ - "packageLocation": "./.yarn/cache/os-browserify-npm-0.3.0-cbc91c79a5-16e37ba3c0.zip/node_modules/os-browserify/",\ - "packageDependencies": [\ - ["os-browserify", "npm:0.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["own-keys", [\ ["npm:1.0.1", {\ "packageLocation": "./.yarn/cache/own-keys-npm-1.0.1-1253f9b344-ab4bb3b863.zip/node_modules/own-keys/",\ @@ -17363,15 +17058,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["pako", [\ - ["npm:1.0.11", {\ - "packageLocation": "./.yarn/cache/pako-npm-1.0.11-b8f1b69d3e-1ad07210e8.zip/node_modules/pako/",\ - "packageDependencies": [\ - ["pako", "npm:1.0.11"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["param-case", [\ ["npm:3.0.4", {\ "packageLocation": "./.yarn/cache/param-case-npm-3.0.4-cfb242ad97-b34227fd0f.zip/node_modules/param-case/",\ @@ -18953,13 +18639,6 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["safe-stable-stringify", [\ - ["npm:1.1.1", {\ - "packageLocation": "./.yarn/cache/safe-stable-stringify-npm-1.1.1-1c282e1c55-bddfc2334d.zip/node_modules/safe-stable-stringify/",\ - "packageDependencies": [\ - ["safe-stable-stringify", "npm:1.1.1"]\ - ],\ - "linkType": "HARD"\ - }],\ ["npm:2.4.3", {\ "packageLocation": "./.yarn/cache/safe-stable-stringify-npm-2.4.3-d895741b40-a6c192bbef.zip/node_modules/safe-stable-stringify/",\ "packageDependencies": [\ @@ -19881,15 +19560,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["stack-trace", [\ - ["npm:0.0.10", {\ - "packageLocation": "./.yarn/cache/stack-trace-npm-0.0.10-9460b173e1-7bd633f0e9.zip/node_modules/stack-trace/",\ - "packageDependencies": [\ - ["stack-trace", "npm:0.0.10"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["statuses", [\ ["npm:1.5.0", {\ "packageLocation": "./.yarn/cache/statuses-npm-1.5.0-f88f91b2e9-c469b9519d.zip/node_modules/statuses/",\ @@ -20539,96 +20209,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.3.11", {\ - "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-55a46e8527/0/cache/terser-webpack-plugin-npm-5.3.11-1a5bba0883-a8f7c92c75.zip/node_modules/terser-webpack-plugin/",\ - "packageDependencies": [\ - ["@jridgewell/trace-mapping", "npm:0.3.25"],\ - ["@swc/core", null],\ - ["@types/esbuild", null],\ - ["@types/swc__core", null],\ - ["@types/uglify-js", null],\ - ["@types/webpack", null],\ - ["esbuild", null],\ - ["jest-worker", "npm:27.5.1"],\ - ["schema-utils", "npm:4.3.0"],\ - ["serialize-javascript", "npm:7.0.4"],\ - ["terser", "npm:5.39.0"],\ - ["terser-webpack-plugin", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.3.11"],\ - ["uglify-js", null],\ - ["webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.105.0"]\ - ],\ - "packagePeers": [\ - "@swc/core",\ - "@types/esbuild",\ - "@types/swc__core",\ - "@types/uglify-js",\ - "@types/webpack",\ - "esbuild",\ - "uglify-js",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:be62dbe6a90b52c749baac6deb5de07ddeff4f1a8ddad2373494caee7afd79548ac93750b7f72d4d78e33d400acfe238653150a3f2538c2ac37dcb93c4b6f001#npm:5.3.16", {\ - "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-b21c422376/0/cache/terser-webpack-plugin-npm-5.3.16-7d59a4385c-09dfbff602.zip/node_modules/terser-webpack-plugin/",\ - "packageDependencies": [\ - ["@jridgewell/trace-mapping", "npm:0.3.25"],\ - ["@swc/core", null],\ - ["@types/esbuild", null],\ - ["@types/swc__core", null],\ - ["@types/uglify-js", null],\ - ["@types/webpack", null],\ - ["esbuild", null],\ - ["jest-worker", "npm:27.5.1"],\ - ["schema-utils", "npm:4.3.0"],\ - ["serialize-javascript", "npm:7.0.4"],\ - ["terser", "npm:5.39.0"],\ - ["terser-webpack-plugin", "virtual:be62dbe6a90b52c749baac6deb5de07ddeff4f1a8ddad2373494caee7afd79548ac93750b7f72d4d78e33d400acfe238653150a3f2538c2ac37dcb93c4b6f001#npm:5.3.16"],\ - ["uglify-js", null],\ - ["webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.105.0"]\ - ],\ - "packagePeers": [\ - "@swc/core",\ - "@types/esbuild",\ - "@types/swc__core",\ - "@types/uglify-js",\ - "@types/webpack",\ - "esbuild",\ - "uglify-js",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ - ["virtual:be6a302f4603f759eab24f466ff96c2ebfdecb1ae05baf7c5d5166535833a454d4fc20106f065d537e3f48f37a7c8fe3c565764f1b782ea734081dc93d0dfac9#npm:5.3.16", {\ - "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-221d2b7463/0/cache/terser-webpack-plugin-npm-5.3.16-7d59a4385c-09dfbff602.zip/node_modules/terser-webpack-plugin/",\ - "packageDependencies": [\ - ["@jridgewell/trace-mapping", "npm:0.3.25"],\ - ["@swc/core", null],\ - ["@types/esbuild", null],\ - ["@types/swc__core", null],\ - ["@types/uglify-js", null],\ - ["@types/webpack", null],\ - ["esbuild", null],\ - ["jest-worker", "npm:27.5.1"],\ - ["schema-utils", "npm:4.3.0"],\ - ["serialize-javascript", "npm:7.0.4"],\ - ["terser", "npm:5.39.0"],\ - ["terser-webpack-plugin", "virtual:be6a302f4603f759eab24f466ff96c2ebfdecb1ae05baf7c5d5166535833a454d4fc20106f065d537e3f48f37a7c8fe3c565764f1b782ea734081dc93d0dfac9#npm:5.3.16"],\ - ["uglify-js", null],\ - ["webpack", "virtual:01938c2be4835443e5a304e2b117c575220e96e8b7cedeb0f48d79264590b4c4babc6d1fea6367f522b1ca0149d795b42f2ab89c34a6ffe3c20f0a8cbb8b4453#npm:5.105.0"]\ - ],\ - "packagePeers": [\ - "@swc/core",\ - "@types/esbuild",\ - "@types/swc__core",\ - "@types/uglify-js",\ - "@types/webpack",\ - "esbuild",\ - "uglify-js",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:da12f6bb23b671689b7f4f5cfff69cabf980ba04aff1ffd96860c787f7d5d08d32b0db765d9f16463de0d1af2c01fa6987b861cf5df2362e38e0ef415f29b51c#npm:5.3.11", {\ "packageLocation": "./.yarn/__virtual__/terser-webpack-plugin-virtual-94d9a56ac4/0/cache/terser-webpack-plugin-npm-5.3.11-1a5bba0883-a8f7c92c75.zip/node_modules/terser-webpack-plugin/",\ "packageDependencies": [\ @@ -20721,15 +20301,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["text-hex", [\ - ["npm:1.0.0", {\ - "packageLocation": "./.yarn/cache/text-hex-npm-1.0.0-22389e4d56-1138f68adc.zip/node_modules/text-hex/",\ - "packageDependencies": [\ - ["text-hex", "npm:1.0.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["text-table", [\ ["npm:0.2.0", {\ "packageLocation": "./.yarn/cache/text-table-npm-0.2.0-d92a778b59-4383b5baae.zip/node_modules/text-table/",\ @@ -20815,15 +20386,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["tls", [\ - ["npm:0.0.1", {\ - "packageLocation": "./.yarn/cache/tls-npm-0.0.1-d44eeeb72e-83aee8b284.zip/node_modules/tls/",\ - "packageDependencies": [\ - ["tls", "npm:0.0.1"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["tmp", [\ ["npm:0.2.5", {\ "packageLocation": "./.yarn/cache/tmp-npm-0.2.5-e146296d91-dd4b78b323.zip/node_modules/tmp/",\ @@ -20919,15 +20481,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["triple-beam", [\ - ["npm:1.3.0", {\ - "packageLocation": "./.yarn/cache/triple-beam-npm-1.3.0-eda4e2a46c-7d7b77d862.zip/node_modules/triple-beam/",\ - "packageDependencies": [\ - ["triple-beam", "npm:1.3.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["ts-api-utils", [\ ["npm:1.0.3", {\ "packageLocation": "./.yarn/cache/ts-api-utils-npm-1.0.3-992f360d9b-1350a5110e.zip/node_modules/ts-api-utils/",\ @@ -21058,28 +20611,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:9.5.0", {\ - "packageLocation": "./.yarn/__virtual__/ts-loader-virtual-43597e08e9/0/cache/ts-loader-npm-9.5.0-9514617263-8ffc6411ec.zip/node_modules/ts-loader/",\ - "packageDependencies": [\ - ["@types/typescript", null],\ - ["@types/webpack", null],\ - ["chalk", "npm:4.1.2"],\ - ["enhanced-resolve", "npm:5.15.0"],\ - ["micromatch", "npm:4.0.8"],\ - ["semver", "npm:7.5.3"],\ - ["source-map", "npm:0.7.4"],\ - ["ts-loader", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:9.5.0"],\ - ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"],\ - ["webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.105.0"]\ - ],\ - "packagePeers": [\ - "@types/typescript",\ - "@types/webpack",\ - "typescript",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:da12f6bb23b671689b7f4f5cfff69cabf980ba04aff1ffd96860c787f7d5d08d32b0db765d9f16463de0d1af2c01fa6987b861cf5df2362e38e0ef415f29b51c#npm:9.5.0", {\ "packageLocation": "./.yarn/__virtual__/ts-loader-virtual-35b23e0e2c/0/cache/ts-loader-npm-9.5.0-9514617263-8ffc6411ec.zip/node_modules/ts-loader/",\ "packageDependencies": [\ @@ -21125,32 +20656,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["ts-mock-imports", [\ - ["npm:1.3.8", {\ - "packageLocation": "./.yarn/cache/ts-mock-imports-npm-1.3.8-ce172e5189-82ee2a7256.zip/node_modules/ts-mock-imports/",\ - "packageDependencies": [\ - ["ts-mock-imports", "npm:1.3.8"]\ - ],\ - "linkType": "SOFT"\ - }],\ - ["virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:1.3.8", {\ - "packageLocation": "./.yarn/__virtual__/ts-mock-imports-virtual-ed0dfa7cb7/0/cache/ts-mock-imports-npm-1.3.8-ce172e5189-82ee2a7256.zip/node_modules/ts-mock-imports/",\ - "packageDependencies": [\ - ["@types/sinon", "npm:9.0.11"],\ - ["@types/typescript", null],\ - ["sinon", "npm:18.0.1"],\ - ["ts-mock-imports", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:1.3.8"],\ - ["typescript", "patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5"]\ - ],\ - "packagePeers": [\ - "@types/sinon",\ - "@types/typescript",\ - "sinon",\ - "typescript"\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["ts-node", [\ ["npm:10.9.1", {\ "packageLocation": "./.yarn/cache/ts-node-npm-10.9.1-6c268be7f4-bee56d4dc9.zip/node_modules/ts-node/",\ @@ -22217,44 +21722,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:01938c2be4835443e5a304e2b117c575220e96e8b7cedeb0f48d79264590b4c4babc6d1fea6367f522b1ca0149d795b42f2ab89c34a6ffe3c20f0a8cbb8b4453#npm:5.105.0", {\ - "packageLocation": "./.yarn/__virtual__/webpack-virtual-be6a302f46/0/cache/webpack-npm-5.105.0-ff5d0a44ab-95e0a0f04f.zip/node_modules/webpack/",\ - "packageDependencies": [\ - ["@types/eslint-scope", "npm:3.7.7"],\ - ["@types/estree", "npm:1.0.8"],\ - ["@types/json-schema", "npm:7.0.15"],\ - ["@types/webpack-cli", null],\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-edit", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-parser", "npm:1.14.1"],\ - ["acorn", "npm:8.15.0"],\ - ["acorn-import-phases", "virtual:4007bcbf54b6a1fc892cfdfa87d57c16a3d9d04f40d8627892c15aab1e876c161341a8d50416117b4d1b25d4709d289b42728585c69b09237cab14322e1446c6#npm:1.0.4"],\ - ["browserslist", "npm:4.28.1"],\ - ["chrome-trace-event", "npm:1.0.3"],\ - ["enhanced-resolve", "npm:5.19.0"],\ - ["es-module-lexer", "npm:2.0.0"],\ - ["eslint-scope", "npm:5.1.1"],\ - ["events", "npm:3.3.0"],\ - ["glob-to-regexp", "npm:0.4.1"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["json-parse-even-better-errors", "npm:2.3.1"],\ - ["loader-runner", "npm:4.3.1"],\ - ["mime-types", "npm:2.1.34"],\ - ["neo-async", "npm:2.6.2"],\ - ["schema-utils", "npm:4.3.3"],\ - ["tapable", "npm:2.3.0"],\ - ["terser-webpack-plugin", "virtual:be6a302f4603f759eab24f466ff96c2ebfdecb1ae05baf7c5d5166535833a454d4fc20106f065d537e3f48f37a7c8fe3c565764f1b782ea734081dc93d0dfac9#npm:5.3.16"],\ - ["watchpack", "npm:2.5.1"],\ - ["webpack", "virtual:01938c2be4835443e5a304e2b117c575220e96e8b7cedeb0f48d79264590b4c4babc6d1fea6367f522b1ca0149d795b42f2ab89c34a6ffe3c20f0a8cbb8b4453#npm:5.105.0"],\ - ["webpack-cli", null],\ - ["webpack-sources", "npm:3.3.4"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "webpack-cli"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:897449be52adaf897095babe74bfcc926f5d083ac9aac6fbc5e260f1f71b7e3ada3f268ac9457d3009b9c6fca51fe685ec21fbed21ec5087df84ab489b719456#npm:5.105.0", {\ "packageLocation": "./.yarn/__virtual__/webpack-virtual-48ff67a0e8/0/cache/webpack-npm-5.105.0-ff5d0a44ab-95e0a0f04f.zip/node_modules/webpack/",\ "packageDependencies": [\ @@ -22331,44 +21798,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.105.0", {\ - "packageLocation": "./.yarn/__virtual__/webpack-virtual-be62dbe6a9/0/cache/webpack-npm-5.105.0-ff5d0a44ab-95e0a0f04f.zip/node_modules/webpack/",\ - "packageDependencies": [\ - ["@types/eslint-scope", "npm:3.7.7"],\ - ["@types/estree", "npm:1.0.8"],\ - ["@types/json-schema", "npm:7.0.15"],\ - ["@types/webpack-cli", null],\ - ["@webassemblyjs/ast", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-edit", "npm:1.14.1"],\ - ["@webassemblyjs/wasm-parser", "npm:1.14.1"],\ - ["acorn", "npm:8.15.0"],\ - ["acorn-import-phases", "virtual:4007bcbf54b6a1fc892cfdfa87d57c16a3d9d04f40d8627892c15aab1e876c161341a8d50416117b4d1b25d4709d289b42728585c69b09237cab14322e1446c6#npm:1.0.4"],\ - ["browserslist", "npm:4.28.1"],\ - ["chrome-trace-event", "npm:1.0.3"],\ - ["enhanced-resolve", "npm:5.19.0"],\ - ["es-module-lexer", "npm:2.0.0"],\ - ["eslint-scope", "npm:5.1.1"],\ - ["events", "npm:3.3.0"],\ - ["glob-to-regexp", "npm:0.4.1"],\ - ["graceful-fs", "npm:4.2.11"],\ - ["json-parse-even-better-errors", "npm:2.3.1"],\ - ["loader-runner", "npm:4.3.1"],\ - ["mime-types", "npm:2.1.34"],\ - ["neo-async", "npm:2.6.2"],\ - ["schema-utils", "npm:4.3.3"],\ - ["tapable", "npm:2.3.0"],\ - ["terser-webpack-plugin", "virtual:be62dbe6a90b52c749baac6deb5de07ddeff4f1a8ddad2373494caee7afd79548ac93750b7f72d4d78e33d400acfe238653150a3f2538c2ac37dcb93c4b6f001#npm:5.3.16"],\ - ["watchpack", "npm:2.5.1"],\ - ["webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.105.0"],\ - ["webpack-cli", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:4.9.1"],\ - ["webpack-sources", "npm:3.3.4"]\ - ],\ - "packagePeers": [\ - "@types/webpack-cli",\ - "webpack-cli"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:da12f6bb23b671689b7f4f5cfff69cabf980ba04aff1ffd96860c787f7d5d08d32b0db765d9f16463de0d1af2c01fa6987b861cf5df2362e38e0ef415f29b51c#npm:5.105.0", {\ "packageLocation": "./.yarn/__virtual__/webpack-virtual-f4ab5f842a/0/cache/webpack-npm-5.105.0-ff5d0a44ab-95e0a0f04f.zip/node_modules/webpack/",\ "packageDependencies": [\ @@ -22536,47 +21965,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:4.9.1", {\ - "packageLocation": "./.yarn/__virtual__/webpack-cli-virtual-7fc88da9d0/0/cache/webpack-cli-npm-4.9.1-1b8a5f360f-14eb69cec6.zip/node_modules/webpack-cli/",\ - "packageDependencies": [\ - ["@discoveryjs/json-ext", "npm:0.5.5"],\ - ["@types/webpack", null],\ - ["@types/webpack-bundle-analyzer", null],\ - ["@types/webpack-cli__generators", null],\ - ["@types/webpack-cli__migrate", null],\ - ["@types/webpack-dev-server", null],\ - ["@webpack-cli/configtest", "virtual:7fc88da9d00679384dc013444a3b1ed8ef8395fcad9d046790a1851d5db985e5ee052061731f87c5475e4bf20a92d69ea1a1a287c0d76d7b1a6bf97010c63532#npm:1.1.0"],\ - ["@webpack-cli/generators", null],\ - ["@webpack-cli/info", "virtual:7fc88da9d00679384dc013444a3b1ed8ef8395fcad9d046790a1851d5db985e5ee052061731f87c5475e4bf20a92d69ea1a1a287c0d76d7b1a6bf97010c63532#npm:1.4.0"],\ - ["@webpack-cli/migrate", null],\ - ["@webpack-cli/serve", "virtual:7fc88da9d00679384dc013444a3b1ed8ef8395fcad9d046790a1851d5db985e5ee052061731f87c5475e4bf20a92d69ea1a1a287c0d76d7b1a6bf97010c63532#npm:1.6.0"],\ - ["colorette", "npm:2.0.20"],\ - ["commander", "npm:7.2.0"],\ - ["execa", "npm:5.1.1"],\ - ["fastest-levenshtein", "npm:1.0.12"],\ - ["import-local", "npm:3.0.3"],\ - ["interpret", "npm:2.2.0"],\ - ["rechoir", "npm:0.7.1"],\ - ["webpack", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:5.105.0"],\ - ["webpack-bundle-analyzer", null],\ - ["webpack-cli", "virtual:ad53cff31b1dbd4927a99e71702e3b8b10338636eaff010987c27c9ccea2d52af36900a9e36a4231cbb6e5464248ccc9c1da5d1d24d9b0f4f95660296b1060a6#npm:4.9.1"],\ - ["webpack-dev-server", null],\ - ["webpack-merge", "npm:5.8.0"]\ - ],\ - "packagePeers": [\ - "@types/webpack-bundle-analyzer",\ - "@types/webpack-cli__generators",\ - "@types/webpack-cli__migrate",\ - "@types/webpack-dev-server",\ - "@types/webpack",\ - "@webpack-cli/generators",\ - "@webpack-cli/migrate",\ - "webpack-bundle-analyzer",\ - "webpack-dev-server",\ - "webpack"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:da12f6bb23b671689b7f4f5cfff69cabf980ba04aff1ffd96860c787f7d5d08d32b0db765d9f16463de0d1af2c01fa6987b861cf5df2362e38e0ef415f29b51c#npm:4.9.1", {\ "packageLocation": "./.yarn/__virtual__/webpack-cli-virtual-f4270a75ca/0/cache/webpack-cli-npm-4.9.1-1b8a5f360f-14eb69cec6.zip/node_modules/webpack-cli/",\ "packageDependencies": [\ @@ -22885,36 +22273,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["winston", [\ - ["npm:3.3.3", {\ - "packageLocation": "./.yarn/cache/winston-npm-3.3.3-3fa4527b42-60b74f2ea7.zip/node_modules/winston/",\ - "packageDependencies": [\ - ["@dabh/diagnostics", "npm:2.0.2"],\ - ["async", "npm:3.2.4"],\ - ["is-stream", "npm:2.0.1"],\ - ["logform", "npm:2.3.0"],\ - ["one-time", "npm:1.0.0"],\ - ["readable-stream", "npm:3.6.2"],\ - ["stack-trace", "npm:0.0.10"],\ - ["triple-beam", "npm:1.3.0"],\ - ["winston", "npm:3.3.3"],\ - ["winston-transport", "npm:4.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ - ["winston-transport", [\ - ["npm:4.4.0", {\ - "packageLocation": "./.yarn/cache/winston-transport-npm-4.4.0-e1b3134c1e-f1651e8a87.zip/node_modules/winston-transport/",\ - "packageDependencies": [\ - ["logform", "npm:2.3.0"],\ - ["readable-stream", "npm:2.3.7"],\ - ["triple-beam", "npm:1.3.0"],\ - ["winston-transport", "npm:4.4.0"]\ - ],\ - "linkType": "HARD"\ - }]\ - ]],\ ["word-wrap", [\ ["npm:1.2.4", {\ "packageLocation": "./.yarn/cache/word-wrap-npm-1.2.4-7a75a0d62c-a749c0cf41.zip/node_modules/word-wrap/",\ diff --git a/.yarn/cache/@dabh-diagnostics-npm-2.0.2-83eb005a83-d0c7ae32da.zip b/.yarn/cache/@dabh-diagnostics-npm-2.0.2-83eb005a83-d0c7ae32da.zip deleted file mode 100644 index b2c63b64ab996432530e9856066ef90ef4cec40d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 300959 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

$99Y3pj>rP^T64@)|Mi#LeHw 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 Zf;0qhKKXU+LINNHE;X8p1OJTx{vXI-Wbyz2 diff --git a/.yarn/cache/safe-stable-stringify-npm-1.1.1-1c282e1c55-bddfc2334d.zip b/.yarn/cache/safe-stable-stringify-npm-1.1.1-1c282e1c55-bddfc2334d.zip deleted file mode 100644 index c50765dc6bee662d1d4189cf451491b764fe5dde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12963 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 diff --git a/.yarn/cache/stack-trace-npm-0.0.10-9460b173e1-7bd633f0e9.zip b/.yarn/cache/stack-trace-npm-0.0.10-9460b173e1-7bd633f0e9.zip deleted file mode 100644 index a0d3185ba2548426081f78f1b32b57acc42f8f3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4754 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 F{syfe<+T6+ diff --git a/.yarn/cache/tls-npm-0.0.1-d44eeeb72e-83aee8b284.zip b/.yarn/cache/tls-npm-0.0.1-d44eeeb72e-83aee8b284.zip deleted file mode 100644 index d14c9e8966d7cbe0defc60810a4e20d0c056e543..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3626 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 diff --git a/.yarn/cache/triple-beam-npm-1.3.0-eda4e2a46c-7d7b77d862.zip b/.yarn/cache/triple-beam-npm-1.3.0-eda4e2a46c-7d7b77d862.zip deleted file mode 100644 index 5aab747e47c5a18a657ebc81a84314b67903d1cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6227 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 diff --git a/.yarn/cache/ts-mock-imports-npm-1.3.8-ce172e5189-82ee2a7256.zip b/.yarn/cache/ts-mock-imports-npm-1.3.8-ce172e5189-82ee2a7256.zip deleted file mode 100644 index fdcf45840df1cec6da84a96416cb031fc794a50e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26620 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 diff --git a/.yarn/cache/winston-npm-3.3.3-3fa4527b42-60b74f2ea7.zip b/.yarn/cache/winston-npm-3.3.3-3fa4527b42-60b74f2ea7.zip deleted file mode 100644 index df7da775899fb348060a3f17ee9dd853ff51b2c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98579 zcmb5VQ+Yu*h+qP|^PG;rzx6Eqw=AX4M_TCq3%(gE2 z9PJss&nYhj41xmiZ=YW^%Mkzm=Rdw+|Nh$A8Jpf+S|Kp>m|L3D_7Pd~# zcDDaf0t5i@@2f8us^wb)0RRwz007|pQ;D>Mkch03h>n7k-39|p_k|h)XS3g&3-@)& zswDAbJ&cA$N+G^vRbM@jl*X(t|Gb2jvmc-kNe_DZ`@_azjCWAzGolZVuWv|GZE2sz zY`4WG1_t$&vm+q~e*pCC#u%HOebzbSI-UQ3G3_gG69o4@9*PbmV!AI?pswb~X61 zXx_FbbPe6}Hf+zg0pw-fmL2IunI zJPh3##GP8XNU@y-g8RH2x>UE47H#*D9wZiVu@%oeKMRZFb}4HTQd%svX)Xz{yPI zwpM;^C?J-n9>#flyuumpwD3LQ{+~7F;@LHfIApP^L6q*LmzFWD7ivPT{?YK5n)fmxKYdVdtet4T8=ID_q z76~hq_^m9dh=?(E{sJrCo8s~OC2~tb3Bh#od~g2Y`lxfJ6YP;{Y6TKSE};!!WU?q~ zJ!0^0L6s_h_aSg)tDF;(p;xpmt9$Trsu#`fD%dKO97q~EP_Bas?ad+v z-$bTKf@o9bm&b6fRsy8+2d~AV6#<4t6%1IpkR^-9!0n02;(k^dbAqaxHb|lu!a*4l z2x?*2(A8Mo+8|=5UDbo&gvJ3UqroSX-B~wh`2Q?ytbbCev4xZKf3qQo{@c3$`|hCn z^A{*g35xLT$Yx3 z6_nWDn7*Wh3XzdvfO27_!Zm(cK#@ONUJuIrg`V2Ch&5mrh@coo*_lfh8+wbTvU zL_?)f{2cvTGB11w7M++w5>m5#`~#RHfx_(J{P?a$tGD z?#%gV`yZ=xiBQz5sxwTW1+jGgx+-E=Z3M=Ed@W58?ystMw8Su1>rJUhCOHc!Y}wyk z$FU4LSUCcNc5)Q2evQF&HY^xjRunz)ECFHULE5X~Pf;_l=4Gg-RYZp@T471T=ufZ( z4$DdKL}&{wS5zd`bwa}5%ML-dm`lq_IA*$C#y!bFm1}zplG`#LqrF&aly&*NU8n0>M^q>GV%}exh+e%6AFa)~& z2JLpsTnF1ou!la+c?CJ6smni!hf3+sL#hhGO<|?dFYp__O~?ec#*W9P3l6DPo^{NJbwTtS5P(7oI-!(2rp=xgIK4?$$aICaO`KXZ>mFOp6!D{ z`8IFsCutctNJ5k0S*bPuWh?MdL5B!cg?c>M07M8oqrg25qv;Aj4CuR@V49Ar8p8^F z1wf-*O(Ma9(~Jtpek@On!*BPTmN~6rIh30wAhu3KS=g9DDF70S7<8sif=2BkLU3J@ z&nf}c2=5IU=AS?dVQr9~q#VAIF(~F05J~b) zw$JaP_;OYEhV*AGw$JqFF*XI&r~%?_u~^pn!c`0}#wInQ{qh^FVyd%Z>4h4wA* z)>Yu;(@R|-&d>9-O)m*7b1v+@okCVWhF77uHNg+=2xQ-hV+b-1yy5)pbJR!Ik8}9u zP;O*ZFD<(JP3&}^rx9mVVDF82%``0L=vm}@@tW`_U)HEv$z>18x76)So?c$L8mSNR zq7)K2YhX?u^?6O9-aiYQ_Mas7?``~F5_NVouywMxb9DX}>immaXe};87yhyl0yY2u z`~T}wMs~JNcGf0;yY!U0jok(Z()YC<;~k(C<;Ccq>(*DttNtfkpdy+0Lt6(3pwt#~ zt!kQgaV`tGi=S?0FJw|q8@HZIR1qYH5axk&Gu_cSMtc>sWWF)zp<~ie$t)V-Vvz6O zJm*iMBfK17tqIQIn|rLEl6k(QvEe!366kssz(OcHxbXL@o54Wi>$c#Tp{mhR$ zlWSS2g{<_g+Eg5XQa7>r>Vk&+yT=yH=%iV>xk5Wq=L7KkzXEemGo(uHNJ13ShxjZU zB=>N18-yIY5|dLyBaK!Me0NFl4%{GmYh!f4FGX9TvMP^k_h4NoQ=r5QNH-+&K_!A# z_LS|Ho0rlNutO&5Z_r7VEc?eD8;&DqAVXvuE&DI{p2OTUZ2svT$Gs_RC3W;O6jzMyS2wkc-A4FSVU!^r z#%n|rgKiLMK0akjF5B9~fhWC`uY23b?JpLTVK`fm{)1M(o_rJu&`qejtJji1En;fz zDhW(qM<$u()QE|oX(Q~3U6{oCBG7^;NyLmLI`r)wQpT2rDNNijo#*N=HlGeSk6@L4SXzrQ04BQvWUT3c39A#qg2myr%B^1 zzh7Zd#cmq5zgV-##zMb-IMj6#+ggHygHXN_EP24jY84_WOMiK)6W zC>@ENMOvvM3U^u|6Xp%!_AeBvu>RH5a_)sG7d9L8j%63e0|zI_QXcCv*&twCrHWI$&dUcm#Kow`?mTClk%CQ9VH?pt&AIiG$IdLb?kKD;?-$oOp zgC{TJxzZ6M9a*k-N){~k zwSk?zqzYg49_}u7A#DncG&@)#I2lj!cJH%#o$@{Jx)%8$=`!p1`lx9t>5@5!k}$N( z1eC}K8xDN|W^AjveT{G|C^Zs3X07Qi;g9e!UVHgrE61ry=jr0kL-^H{F}g+$r4q1j z8dA@8RCaB0UDe5)VaKdXy|k)sEp;$-;=zju`$z_z$Sg1i0b0bq_efey+AxnGv?WCXCcD~g-E6=K zr#fd}2P!V?pFMzf_Gp)BwA>!M4qhPDRKMOXU|!sMCv0ZW{b@n`T1T_l5#;AkxOdYQ z`0{|HplL=JvbUn}`D0Wa!iz^h9H7S`(}9P8Ym8{LQ;ZB--{d=){6s*`jFZ6pyDVtt zv`FBBuME4iPcN`otCI52g)4A;V3clZf8$tRaTgFI`CiCOtsYIXLy6CSRj@Rj@@{h$@ z53kZbWCXB-5*J;*Qh}H}!CGvN{k;cle*F*wE6Ql)$Bdk_psg^+%J68JhvJ){N3axR z>@%TzTGGL_99odt#8+QK5Cs6fB6rN32SgcSkOnAwY15WBmd;Odzg~A3~6Q zm>Ap;WVNa-^j6{#!7k)jBdy|C0DLE!m7W z)}526GH-+knd$EmcFRRPt2!h9^DuWCNDeSVx-KPZEI{&C8ZtKh$~#4e=Q!*zh#A8^6+WLTC1a%|9Ebs%2NU;!F z>ZCW^OKBtPWjUBW0Q`>jtOr1sYTwpXSj@|Gi){% zON5F)2S;7L;C8VT;&3JKXGr{TlubRYO2&`2QNMYwuM(%9F4+GWxoG~0lm2a%`2Qs? z$g(n__`fdE9Si^f+yCQA{|UHM{{j~q!gr0H10a+-oFVr{_t5Qn|3e6nEHKG%1R;c_ zCfA0w@jP)khkxZyH@9Mf$)D48z=7wXhEdPo*EtJYu+xAxWXTuB^ARE;dCv568M{sBB0`C*RYzj2xD{7?^m3Vl%H+&j-y{^l%_Tm9^h}3^XN9 z9`*a2H1&N9{LZXqfVsIG=BC`$wZn|Ty@~`s?UQk*o|Ayi`kjvi^A7wj12;EV%v5Zm z=j=TTz(yXo1p6=;8VD#&5v(kP(};u((glMD_o<-z>T1=rAf2>goZhX5Az;DM>GKVf zouE}Qs=3&X5}m$}Y#KF@>wVa-QrS8jmYUuzq}IosaLrbg6v7Wt*uAtEF1dhrUge*= z1JT{`H8#~WDGv~Pt;r)7ZlFBq{JBuft|&ZmWE{7q=YWcEW|a-}epn*?6?$9W1X25% zVp$%3vNlD}u0}AA((fI?mLHq2*Noyz3*F);Y`i8&61!7kJ9`u&X_Q-ulB#H+xkxI! zYXs(~uu&BWzSS`WrbLM|?0_!HpZc~Tj_$@`F3pY37hzl2V(UOWd4PJk-0y$bFF1~f znmVsPShI7}^IYJJnyWmO>jyh70;;rGM@I`IUMsGGS6NN z7(_11BmZ@Dq0fCWsz)T2T`^~9i;$ZyM}hZQE%H$iaWQ3p83)YQgo2fx9DmMN5UyNG zMXT)46(qt+k^&(eC0_!s_)*VnMd%gVQRDch&j!UioGN1$JXMc40z@u+e;}f4`OVGv zPx66i$nOd~^0upLOWmtSwgFy=D}HHfhxt#ti54n9Q+P@~!)E%+BCUszV=<)>#h^9; z5pHOebK-9GFa?qe0?{wVG*2Xr=?<}&E!CYD(};Bf*00;5`l+1E~THx9N#%hd5 zQ0)!WTJ(b~(FHKUM5@@DOocCs}Ye z)OAo0KUA&BT@9BtUMg!%r}2DbW%H6$Uw3Rw=;EeAK{7@2xW0M$DxZTzo;V75OI#N; z;GB$->05bzGu<-!YTxBw9iblgoCi?B;WtMnAY#etf;CMaU<*9?<&v`$hm-Itg(2he zkQk=+Y*+&10GBKu18Q4%?Et^qMlSu`$SSG~oU?@5X&rQL*D=tt3^Bg`!+QDGSQ*YI zBvbL%0Kq~60HFJ)Cih<^)W5CG*}%fq#PRPmS*ilung4 z2^c8u>=2^X{IGWby`e8T@s*jmb6w=twSrrxh)+9ksAbnX3D2K0lNfHwX`soZ`|XIo zlnG-%b*EU3OuPipLU4?L`(~00Lxzu)P^>}q2Egg-S2+@pOHHb>nA^aU3Wl@^fw3y% zzem5A{s?YFkq@IJ^@dabT4dapjHoRZQVz;4L~$EmQVmgTK7fFo)_aD*@8cBdF#Hg# zv7eYqKNe@LSc6OoC5;?iz0}->2_9>dQ>&(3-w{bZ$I~ zCVV|<8sbMr>}QzAy-zG?M+UG=ashQg_&$IY=p zK*~=|@cx_wk0W*MW*H9ra92EbdoB*MyVOyitEOj?YlcTxvh)gO>|3fJRUu>Q+!%f1 zTB$GHj9Fu1JUOADye9w~X0N?~Lid9WlId8V9nd@*;BqOnGr}Uiag!mZR+tyyq{zai zyhf`EXg%<83nk!n+A-xW9?SbFg(6j?*AAL=J*suA_CT^dE%dmkT+0z`XMmg6^m4jC z(8dXB%p+EXOJ?{+c?4^JPdA31unO1eTBSF+Uv$(!Ql^LSo*PFnI(^2;N-4WNOL{Mt zn@nPV=JP(LwNw%V)Rqc;BZ|jr5kuMJsl(-IF^YHwUma1uNzXcoy3U*?rlQ+e^uFPM zL=zm*^`Avhxj}9H=T@Sw=siO?8aMw=8!ASOa-tt17P!_)1vQtYLyJ`M5&du!B5t)d zP+fwzCJj~uQJ@InksFy*J)#$*UnU57(^YVLWC{bz)v2d%;ERT##V(un32}00i*)nt zLSbPwM4SmB_E+y9pjR;OG%_Cp6?XF6Ga1wU$>K!=8F}qp+JRGHB1j6KW$NH=roo3J zQYDPTd3PcKV&Yd3s(48_x*Qm-*AScjxZP^J7M0A|W zQ3Q0^JbY+0m7*Ptwpg`_K2aoSznf^ii=9t{WHg^_blR`*uxxia>J?~KWYf92`{p@l zzJNPM`r}oAV4*b|U`Jwx#*{ASo;8q>QeDVSNqhBYf=y~EB#EGv-B&V^_7uFPQQace zX}Kqz=auh=^@d%^7ZaG71N`>nd? zFdw)IN4SU~{pvSNLxtwXLRM5uEe!tJD25b`oV?!YNONUnx75kzVC1kBeEZY)0zd%m zu3F-W(3!||Ktm4k%htW^#u1Wog_ld&osg-i3=H`guxtoL{+>lTQHH20Z6l6(v(|gG zuofWwg%?U1&y#U?SKA6MdP?~<-s$s)r#l!PrfLwZ_#V8G;;7>v&m*T@t(#igmjbm6n7@C|g z#GOlzV~+)~+BSz*CVeyAg+px=*uf9L|Ayp$b^W$m>@I-6Xxsi5ZU51i{Lhg5pPT-X zn#^Ad@!y)hv}{VCu#m1F8MK}gVd-s)nl$%<^r%W| z2^ALwU;=lcUlIZ60U`{Kqt;$5DmHYcl)D_YO|}dwL}~gCFDj~)6aaLioo2I1Hv~)o zssCa&*P(Bum+qg)_KH zY-F8F>uxn?y{Baz#=B`hSx`>9&q4-l<>`>wSz{ngF=3pU<_hT8yT#d0ybDT5z;w)VgJTH*jqfpdzXsaAlMxAE zAw?G4O5DaZtBI_kI#$_=PLvXt2)2*al>)}Y6kJN-uF0PtuLz9@SN+bu$cy}CBuLR2 zcUNA3yPACJ^ zXxcWLeGrE0CI(~ok?~&SP}s8NXt8$A-iw#*j8&tqIm`(A2y=aF&}8~7pLKQ`V$TdG>imuas~MPbSg(YqkF})dger71*+=6h7SZ z$VP7dVxjdw-69`jw0RvQYfo)(Asvs4`<^#l`oos4@CWd}wh{%g_^1BAxr8k`007hf z3?Lm%44h49t?kUr{v9Hd)wS$4hLL<$YST`4lZuEHWZxCVpDcieKw&u0Ib>%74Iro; zNf}GpXxvOhT%LBgnL8#TNlL2?#P_E!CokDoj!rMDz|G>66)`v`mmDc8Un}tjSbu_o z#iJ@*>*P_b8wIgd{EmP;kVJ@FqL9SJIih!;-YT8aYJ`)`kZc#dVzh-leO;he)D|Y- z7o@y!o&us%@??@p$5iH3tBrNXB?k~_y7>LA z0rS26W;&jB0KMtU;rTxSa6PgxH6VGSO%^*>$!TRNwR@dhmFKN1`X>g4ATRIm zjblb$(SdHyMr)8=iM6sQ23yxjw)ID>%Wn&G!zUy$MUeJV-<28oT9(ph*}X& zdQjbawI_@To#OKNSr|d%hUEDwBwqabWn&|{&r&IAlOLzmCQ_ZMQe08Tk1CQ6LsA9- zQm2UUsu#FIKG0rbG9;;*K9|2eS=wX-;1NjJ*V83)Jqqh@a4zWii-zs@cU69FIQn60 zLxN@^=0!9c0drtWulBv^uNNH6Ya8o7$3T43J>!FeYzzGEUMO#( zG5P-bk#S+aW2{Dlx#N7}Y1vg8ML9&-G}hgxnpko>OJXAz%J76o`p{VY5)w;0wzD4f zzh?ON>`cnt*^B^8nUj=c&ztrTo&miq9}GyC$1i(salxhwrHR4n0+MI(gZh%O|BTK} za~Uff(0GQRi8j9{O4dMC(FTtS)eeQgNou=BKMljkXKf!2w;yX{cDBJgdQwv*xd;|% zm~dI9MusOwcgpGt!LHQ-=G9GUqJi=1PQ+-UR;ToS)>BM)jbvzQ6}qZWqLx5}=u`r2 zGK^g{01<0NuGe_@6sEix_L}sQbELvdrp}@>N*w}KaGbxRnAN~BxV5&4R%=QhK0`7b znwZ$mtydB;r;j%B8;^_Ph_1MCWamF-s_<9P1V7jY3zUvZ8umGxga8!O(EtUih@h#< zS1Z#hUAkw*W2oD}HRzOlwSbEs`Df3FIkoC@wGUY;6*# zUpDq{_C7*}F=)QENKoTL-V;ty=6*rzrX5dEl>Z-ftU6tV@_9C=dOE<8`<4# zwvLx|tMT=w5=UMOi1%cu4@(qNgAMZQ#^G=U4E7JlZOmB>QCOYQdJ|&ldT5Jx^LktN z;Poj6vLJ&ZU`=iTfL zzz<0_{nK)gI&y*-YXx|Tv~cxCODU<(Y)XJKON#m!9*``O1DT4-hOlz3Sv)_u_^5j6yZ&Nzo(7`IA+7BQ-M(=9^{%&lrQ3{>>^8>aGiF z*Ku)g1<5Brz+&h`Tr)VsIarXX;AJ)oX?oDP4Tigp+%|DF2J7HA9LKKy#8No!#`m#= zz418KxB_lR-(aQIJQ!t~zn;BM1a6+yC7UTkVbe2$^^=8YEumU-!Uwu#oztFZbXB$d z=xxD+E#t+aPXRCg!U6$mA~UxiX%w&O3&t!-FS+NYVR#GSw4hjw)9fDC`SkOQXayP> z_R|7-RM5pgEjW{$O^XCgaiKBL>KtH1nHDyU*^4Zpk!S>kH?P4G@V_E~%ev{@$Rek` z?GDQ3>b9-$IzYsvKd9e1-SpElh(m=A=BR#R3b5AM*FuqTJr~U=GxjE;H#jw!eU4+p zSF%^tp;#FclzXvecciTdWh^EergH)4q1Q0sEa5ADSzG&{&$XMGZlhR)JQOjXv_zgw z=G%$LCL`l62155gW(E9-BWm7qjQ36~PgOV$I0FX-^K?-i+&0GM$)+(U8{{5-`4;|g zq~cRy@eZVLjTYciaNfzW<4|pbCq(#?r0kSa$H@Ya6y@H~60ZZ+;4&dt!LRaU`%)c; zk@7b%y|5hi0f`>4qU+ODHPmCL5EQJrS(TG}RO@!ONd2*^l)Mz&AJjU8NkmzJE~B!dixcfYOP$sbwJ=r%Sn*zkJ;?t-th!pL<{{ zutrJ-;F|>q*j=US-fy;f6Spg9ahDrhEoOQ00qx|*LU#{eCn#3tXqzog0281IT(!RN znQl(evy9FR#=!FpYR#<~4g&0DIY8G*-WzhA>4Jd+Y8GK45LiUiT;T;6<`p+ii4w8KM_l~*-fu#t_=hbLOC&atx1tH8iuo@a-2oo@T*TPXk+))G}iMq1{bfX>P4fkd4Pt8YkNC{pQE3V~u`cLzCPMSDVu)-!z3+R)!*EC9BFD37tihJ|E; z{0iCm>o929DmBNXKRwnZdMddo&D8S`txC)pryj{1FJTLIbVS zZy3sb8puH+9wPiZ1fHluzd&{K;yTo;tr?=$`G!P@~W$(2%7PqU|x$vRNT^0H)j z5?3Zosf>#Y--d>b#Sm!behm4{Uj~L70pL@TnWCnO#cPbn39z9k_;CU4J3+hZurRD`?eS||I&O=VmF$Ysw~m*fs*;7U zpW1u18ev(C_iZkRq?9mQy;xJ2-TwD)NXVmv$2xgZaca>HiF_Kn)NrzM8A-UjsUUww zlS|6MMD+>L((oO3d%QkBV1{ki1=108DgQ*`FXaUecTQ`>wrXlwbAF;JNe zMH0p{TMgG}sL$MCdUr6O4f=*|N{ST2Wz1pOS+xv`E`}f#lT^&IiW2q-$A*>{GVION zrQd1Je5*Vr2REe8A;u0`rE3b;H}wfq2T^7r;$v1djT34WMd^osuw!rdzMl55bFW%#RL99Nq~?`#JROBh9QhwJ0WPx}u!3i$Id zHT?-39x8)(#9vlQ8%cIZ)I@sde^=_R)KAt;X^QB-6j927olYZ@rymO-KkSt2iTwFx zb1bRxv@br)LV#$|8;Sl&O4X!F$B4(dM?2V&-m~_^x2idK_81EOgC7?7wxOHIh~PU~ z5O%YL%az_B;#$;bn>1h~@p%ysN4QCS30L>&9h?DqR|G|bBJ&&(2kc?6PPH4Ua>e$& zld1a+9b*>C@jmH(?xj*1N3ugc!u69h%L{6=9C7TpeeWkvAQ}7;Li8z==(Lbf#P(>( zB~n;-rxmuH`-Oa>mTjok_$}DGFmwC9H5COY5ss}v?-CFA$8GN|@^}m6noiUg_`mjE`xVGNKPUhIvcHF)|1q=uFL8#6yOD{#vxS{4 zt+|1%vGu=Cq*ItWcG&FqIz0hTfJ;=#E4J4%74aw$p0II)0{eVNKX5z8h+#@`|`qf1xls^$#{ z328RE^b$(wO&T?i#UlilF-w|9zrZL>8WDf{d_QoeSC>_B5aSPC(bl5oba{KrY7MR6GpGaD2s!8~E0<$dSFA;#>M{RXX`)+An*{MnmdOvsiMI=) z7k?JwAp4F~ZvsG6tSwqi$gmlEvK^o+Mq%PkpKC|UK(R;6AJmql_$1FsOq@%)9OE;o zHip)1d{MMcTg)n#R{CS?AJ93#CB++HjXf0K*~XpS?L(VL(n$ z4dRtlU`x6}%VGub`{JtO_8#PcdZYNF`xR=e%#<0$CFOK9Ob(i)dRQMx`C-2coq`EB zRt(%ZPJSG=2#mCpMeO;EwjVyhf|-#t;Y@V7Ttnv0piD6Tmu$kY^(V}K@LbL>?;s2fk}~R zX-2IEfFC%jUM;CjVEUF)^adc)>$4c_xn}9^n+6Q(coxxedNk1vHvOp7BJvyBv`=fF znO(tvejS>LQhnBzUC<)MQKQ*U+RV<+-JT<#uPa&<6)-U-f?*oLuc!C(rKO$Ur{iWc*0-Cqk<8P15X-mK2d_s|Gcq4u|0oeeEm`rv7*y1bbexgVuXtp^569tIfa=BI1ZQdqKlb4CCY<9l&5$6+j- zAPnpw5aA2!u^3@5jIUZw{k0i zH@|!m*k2Qgqu~O!C?%N7hNNdvPoMx5Aq;}Ead7;au_%j1w2vyf=PX;=_@+v80@)_7 z?B(b5i|PyxjR`o7mc!T$I5%86Cfjo3nmFM-n9K*DjJ_c4i@yYYQ3N}hoktKu@l&!RX*88`iIH47h|_TukxH#+hq`k=oc7I zi;W@dd9hR#(=LTuWedM&9KJ7!I*=dhffPL*-6+C`zXzu@>m1Q)Wbm~KVpe_|*()QQ zrfw@N9PQr_+;q4_7o-WQvpFL!pO6#BjWZ)oj-0mx^v>W8 z_Bs9caQ-iR)8@LY--mMu^T3j$N%~+Rac=#~7K5tBxexRKLVoY;i@)z&ff>Ww?t(KtRiNkO8+$7E}Fwb;g+U(G?XNu9H;WUB)GBX%}m3y(o$NeI-slm>o-Frbz)BGtB? z8N9rr2iApErx_EtW-P*$kGbueHWN3LTUAke>A!hy5+V*cq?(UWs~gY!V(-iXaWz0R zSt%m_g|K`mVg^hRNS0X53T z)0Dr>(JuKJU);DLkef6X(HoX#zB&a(jYdYMM+I;zl1d|3?JxNvZsrTOsdu#VEaAvm z)!PV>wjKSam;xrHv_ys|NrEj^d@PUapnYt0-1e1ae8lT&4g9taFtK){Z_}FXbeFmo zeY^ViGmY(=ssOIBR37=kJXHB4o9en+cH~wrQ#!q0FPFFLMwh%0SZEmbBuC}^qKp`) z*}L#)LlVA@gCOwD{C!x4H%Jk)s49Qw9pah7FPNdAd*(I_=e~BGyR-MH>9*rv=*y;n z86fb?WM5otm?($fQd`7Fv{9s7du=Kel7Kd0Hk!R3w!efB?5{b4iow_ON|T448Gnpk z{kchc0{2e|ola3bN2&_ISK$>XaCaJA$Is+xh_#v0>%V9L+)D9gm!#{5g9Vi4lvfD? z&IEKSRSU|ivJ8Hi-`XVM7qKVpBLUKR(dK9Z6zDFgE|&1U*x?9j^8%d?T*Mz(V3iX7 z7Jy&4h6^ZO--B|6Oc`1<*lm^;Xj>>HRpY4Ut6uBk8v=l!eV|m{m2@v;5Ll~vpiOqc zDNK0$9sI?)n}QijtOciLG`Ag1Oogv$!GH8Ug3*f|AKpZTNw$sQym0O)^nk2Hcw8Z( zMChC{J~o-$m|qOc+njjV1iee2%WWHCG`|($YJqy>4*c{v3v6Q|9ETbuUKUhhf@aAG z=VWsR7BIG&pnrmA)K0X4TDj3AeUS^7iu}j}$Z7;(rN4!!s=!E9d!^xL5nYX^ROfj| z$>+`>&S2C9lkxh8_3NCX*5q;(z!erB_xkf!^Iq+*kQ&aYWTmSSj%Yc*GV6Jw!6V@k zWviBLjKaWyaTo(>fw2BzKbQs0aGN_1CB~_7o=%1@g#k0fH1ikJ5Tk&};?50mB_oxP z9u?!`&g>OKvK|OX#%mEk%o|S=9|p!T$enzUTbbswW5SO>Uz^*JFxpF4RE@v3l~Yy1 zpPFC#9SLGf!R%r0sJH3q5?g)Y@-L;KuQObULs>0yamE{iaB!jno_(p7%nUcG0Dq%u z2Z%!68r9v}7`xWK@jY{AoQY@_padPUsIS*iW^X9i=^Z%Ut$;cm`ChS*@ENe#l}J^9 zkVE4Vv@*O!AP~qpEsXiR_Bg+}Jt9~%O&CG-*+=TYjpWi+{-Ky-r&n>@j_Hpn@ zU|8d0!Oon9K_GegzMDZq4UoOYq|K1cn3HA64LY79D{m{G{O=c|nCkt0KXfVcR`cDF zD|3cIMHvN8?-`PeatMDvAIdmpP>VK!j z3|`eHV1SwDV-qwo8!7ShYh(aN9`3FTMWE}C5h5t5mEJdVOC%zqfFiz>XjO02Z^)EJ zOJDLQjOV{C%(66@&2IUniwg7Dg$iw^yW%o)d8Bp-b*+ClPMyR3shl{|&y6nm*X^i( zg|+WGyDfu%6PEM87XexSCw{{J4QabHw*De5lJANhBOu%oRo#m1jZ6SNCC&?-pAmZW z$0E1zA{{BC2CWN;TEooJj}Pm)U>RCzC5q${Y7R=sUAo7x`8Ev{WOT|BG<6&?BQz}w4-{U6f`L>!;^ z$Y68UD{psS@Rb|-T3fo>+XrhFEVqn6Hc4eu9_(nUHA`T{0Z@wX8(9k7sA4=hQ=ibY z(3W?J3ToAAC#(*i7H916&f`eigdWSCRc$6Xg8Y$2DhjMv|T=^?AeyAJgzoVsRc(* zgcUQ{RO1cCmc@ZNr#JK9qW<{ycdcatiWjkx^`VO9A5tKRMFs$F_>AE^o%VwxRHw+2 zH#%gOGMyoXF?(rAw)d_Ca0fYlE4^ohHv^~jCL4sju!mKyx>`Z z$H!Kmc~)KIhjR~2nt{K@`EE7M2eg`|RxHm)>7jR!13|&y`uyP692!GeNmn%o z@s?(FqEyN{SjDh^%LnRiOB-0PMa#V_O7FFruN*+6_v_(B65QPM478aSBU5MPMv;fU zNf`Tk7SoodVC{;wXF%7qd$ju|=N9*3{E(yF*e@r@AP3e>C(@|fx~tbPK9;bJ^$hex zNLU<-Rh|+#KHf38bcefstJo$9w4y$@=tSi2uk7%`)!1Y2#H1mRTl86B*_*Yr zH)rK(^4OPeo`KsFo9F2{S(=%wT5wf|MB$#4S*8Z^*Ms;_Z*a9p>`pkbEAn_<`t3_F ziWX_daC0^C(_vz#$6`sWG38oG`R;P|BddAU0up+a^YP%z%L>2!%F%U{tPT~##fF^p zrF?~dsQ3i^>t1eFI6~~lD|9n@+u3?MJby}AsH0$_rc=%t<#CF@}-8p_4rwGY=G zd}vF^DC1wg#3@DkbU=3ob=T*LP&|bOy~QxF*p=OX^hXb+T@HymRF|lNX7UT`Q+k3^ zu-&F~{PKkWIRrR04p-RyV(K{+<)&nEe?r-w+DPJC)L_n*cW82G8~Ykw7ncE3De|ky zdJqvm^vL!>#!P=f(CEY?G|J><){#{BlsG-m~auuX|K`O3eLjB{O;yoiHFu-0iP zImZ%wJEeuFd(?D|UO<+`rh!idAr`MXLbcHa!AQ%Dj@fFFRYAiF34?DtopL&abOw;l zCC(5bq-Z8andWXjHHNiQGnM(Z6rS;kvopb3g65i3AAw zEJ-~--tZQm3^POC%&bck45ceRzJ~gT3ch=)+3&!C6LF2p*$I8(hd{VW^+Agn2X=PgD7^B$CGi+-wG+< z7#1|nn>W^xd^skLABt2dSM3ZM)%^0sj^+nNt*8raaqqb- zmZl+Z86)LQ6lLt6`>5+7??OhmiZa1F69v-^@!o^DyQ;dVJvlkS=A{?=B1xP&)t)Wb zM{o%epU$-h8axQ5%%r|jWe^y6F`*Zy$-qES-4TE|4?*-P%!r-M%oaqHZ~IowiCKud zLrigR-}P)BMA^WvGZ*-&XLwPSMw%iVm7(mP0ffvv>zyh#(EbX#tu6U{Va&yB|KZ6S zHA+5<8w<>~m_vgV=h4s)`2n8|lQgCX`3*wO=0iU7s%|?l_J+{jt}))Za&H`yv6{5n zf-yLqL>rT+l;a&%kn3S?vOLp6IU0iW#2r0g{rDeuYyX8sSkQduAz%OigMUvh|05Rt zgVpEc{5Nv3`FnslTkU_}&bZcdxbxHeUz~kYlW0M--q^Nn^Ne-Iwr$(CZQHhO+qP}b zUBST*S))@|;=IaFp+n*JyA;^;Jf0>-6wt^=FyY?}rAHOgWJn zV4{5t7{?eEW6FTtZ*A0_)oYP5?#J8;d(TRZFvF+2-J6|UA0Ax?{lR$!OE&NWb1MN~ z)UlOM##|2)vR##;A!7XH3_?Ha%`A0PiAt?fV=mu=RrBzL@&b(i25jA2)tG+N3nHl}1TGJ{ZH5Fs4y<#h9QsJhme zLF+PFRUm+2F{N54_tNtKar0ApPfjonXRkz3Hj8#S`OguzvI8^TJeVFkyyrMmZV_l7&{N7Ey~SKUr^vr{LI* z3k7#TFtd=uxWL({Y(@E%limz3AGPY6_otyxg&8a%Ql6fEmJO;>uD9zGnk5CAZTa{dEy5q@Vtt*U`7D3X~+cMd;90H zNx>8#sw12I-HT^o zEs-1&HvozwQL1I73o^IvsmDdi!K(mH>^O!%giX`b$7;JKbdI?1g3gUsMKc{DUo4& z;Pi%NWr~RgNY?kIW;N+r;ejF3uI|4ZJ@?SIiZ14N!jQ>q?n4q-110q`6qA{t!r8z? zExBmRGZ;278VRMhW0t7XA>!MjnTJu)ms=&zYUkB!+Z1%gm@*>@W#b<+EbI`prI)O6 z*SNE#VUuy1e+HI0rSQgHlnpqwTe)FKLm|V2Q&=^j;0Kv>$g8icLlO;Lu274iCsd4w zsEP~pGIi&h0!Y95GhJwA!}ibhT3;ct+2)8mk;nrAd-=DHIsWO2ao8fg2F{){GHmzM znvL!GauPcw<%XUzs-x`J|nN%iia`DUtP?y_1)2bE?dpSnoJ%-8EfGC}Lt*)g7^^pLDF9DT?xe{vc)-_QmG zmYj}2Z^OL6%M%VF z!p7{qlwiUDI?TMDkS^m=3J`6AhaUX^&&pA;uD>;OSr5X#duZG6+j4H8kE?~|cBNcM zS4W0(#bxXWuCALsRvtx_H_PBj`JY*M5#zVEcB|b&>9Qf*4zMK0m>u=g&wHhK$~z6xPl4fL5m5Yn!;?_OyD+0`Jr_KcZC>lTz^QWR@YHL7aS0 z-Q^>}jBnd@=Xn4ms(WgUhXBZ74YOsY)*hu_XA?rW$Y?;#BzEkid#= zH&__MO&ZrygQnCFr()T2?vM7QMtF&=sni9`|HoHyER_d)k7|HhYbK^}khM|6a7=Py z9U()URd|knLJ*Vzf#rUNlqJm|7!{}VATa&dVS9lKn?cX0;tiiFkwpAGH${M5BZjo@ z&LHyz6FIddc-T_ntuz2N>o=-X;AEy|xI|B)=~l2=BnaYPxOD+V!(|7iK};k&EqwdcI$o>u`LT>nKYoO)*k=Nb)5$_pd`MJa0GTtT{6XW_37!!2#RUi#hiHj zfVpkXJrysXEG=`s9^<3bNNBh=^IS)X5C8of;$+25%0nLIlEQ0uB#D9}k&CPp(Rose$aVUbp$5mt;)Iy$DAzP~Nb z@JnZLe{!P1!^gvoC`~m_HdW}NDP628E5H3TtsQcm&B@{M_4tzq8k(sQ(NW%@&diMo zgO+KqVr2a9zRql>K`(UpcvSO3@zj-GET4j>Gww-IrhN&%*yTc8{~NW0fAD3(O6zFv z;X(BRQ^a#$sT-chH;$!V4BIjYY-zJqsQgrLp!BpaKW?Ik3WkRzJ4E|~$Ta%r1`xov z`R<|*doV#=-H$gjT|f<9rTf6&T6{%$JqbjfyS@`?)LM%bir2vG#hh<)vBM|hkLa*N4Eg?w!z8@Y}nQRFn#)!ziijm4i+zDQvxFo=`=HMDgH zLz4guh5L)0PL|y<9=S)T1rSK9>gM~hIROmyr8B_Jl8CL@NxTmc*m+1Jb)c2GNFT^yDBy!gY~MmBmzyI z3O2S=%RA zjMMBa>}0$2mDzre+at;LG5^wIjw-kK=cj0#SQom7D!*yU1ur8N`6}SBNd)!4DUiJj z>7BB|^WkwnPr6#&dd@R|buE+UH8x^$tUn_bZZ)n$VbUOe)@#&h>}!Uz3+fQuyyB~u zUm>awB{ANXjdX-WdR($Wx(=y1#Q-tM(GRf|z6P|9!$H%bh<1NS<5J@pZ7LFBEyuN5 zMZHR%0b=2zZ`K;;m#%LCXyApPq1Je*8^|OduL84}kr-XAG0PE)ce|cCnKB~>ss30Usldx9{hGYru zvU$udhO$S=sHGv8jn?e+`z4JPfaN5AEs|9pnYERL9wIN-%VbLSM*g&9n|mux&E&Tj zF=S`LTiCQ3@*S-&;S2e0&OmQp!T0GCsjcTuII-f$f&u-0{#<>1UE0oy&7bRs+eGYf zzW@rL&W>LY?v!)uoqnZ)U)mRBD80hR9jV4mPCqbV95!DHTW1*&ZWPy!)6+$MkHFM( zdDZh*D*}mJp_rwo(q2U)^?>bnqVN^}LgE{UK{*!I;y1mJwqw{^eJzO0e?E544 zN1E}f;XJv@;8wFER?Dw7=smj1V>@18yJQrP+=YNLyhMd1GHmc@{pmMqEG0?mCm3uR zpUDwy6pQ5eG3&FGmN24$7Khub0MSIoycC-Lwa8Z4ONf;) zuoZ46lcK2c&iAD(%6pSmDmKB}+eNeg>sDk|e9q78HhN(T{IY~;j0+l0KTN1DvHA0H z2g}u^(k;janr+8m%X-GnuY|T0uSp?v#{H(3^hc$TMPiN<9Q*(#3eYtmOt*+S&LaQi ziXFMLNT+n4=M8d}gOy-8S1wTS#PMIS5r^&`g^PE(KzU<%@gS1z`cO}?UQ|l_ZJp+q z1h&%-g%b%qgqmKE2ph))gr4LL-!yPsD^_YNmTV^j{kv6u;2%em0pUt?_S6_h1J?)& z@tFQq<>Z|xx1-bp2=F1k*ZW5dUJwwFd;Ac*>@r7`Ea`vG_g2zG07w3q6Bt=8>@@$A8;>i4aZatXHh2$j(+-BPw@0Fo@j z7O+i0i~CtpmEb;EHt08lBRLqakUP!As@{1EBQWH1m?4RCE z{O~ECM>Q$!OM%b2)OL2$$LS7}!^haSRB z;??jDhu4it^~RId^b1xGW+(D;N3&-enHgn>T`d_fQjU0=qT?jB%KgQaF!KS5FG5lx zrKDkbq#8a^_g|HJG%G#=PZvFYTbb~b1rZP73dM}-qv|H=m?ia@22J{#Slv|I0(hIJ zX%E|cKtvAkhOo|WFLqsm*i&Y9fq}L20aSf{d7o(x*eefpK70!RD8L${vZ?c;F&?>ARU(&Fw{T@0jF-fC1d$Z{fP8ADWp-et zsBAQtej{ccc`i*H53%^N<8+vn%!WhZ?(7lz^N)(Mi}GJ~SIt%Dwo&Ew+W5y5Vf00$@(B`C0uX{qsv#>K5G_^EazC8HhN>7gqXsEwm)Fu!0 zrL&7b#0Cj_zgyXlq}@n2`A&>WoCbpjipXecjHUo_&h{&JKA9tU5&&Kszz4a2l@KIT zMd~LZ+=*B)ako&(Oe>t(WTPuw+7qd&8}pNwIaprcKjqkR*t1ESs&)b~j9eE+ zZ$70^{*1(s5138so#7xURH&QK&fV5+MoW3=>oQAH3Oeo?$ZTv=IpbzKO8ZYFJ9HU=FbXs z9Bd9>f`eFsYXX-+kWpZ|6P6}D@!QOSjfRY0<-B|!2_D&aZ3vsUdNE{pf1P55{C>xc zJQwR%=6zm;c2hgZaKob`sAqa#Mu7rm<%8xd41#xFN-)f_JdWaO=T9Xo$uB#gQV>&$-D1c-A${TZdC{torz|i^Lum*UBI;AcKd)K`7=Z<9lJ+h~ z;TWi@9GY8Nb(ahp;T2UYepRn}qVbIvd_7Z|eFOVf2~)H)Yq%d zK5I+j3d3Onl@Rmi^iiqglbb{i!fK7Aif#u+Gp%o|QF!Lh-|34>oH=B!^{iv)6Z5Vt zf~Nd(UY7&u=Vnf}+EqBNMth)j!6x;vQ$Nc6 z8Je4{Zsp@`5>_4ayQHPakglk~k??jM&WJLWTK4$^ml45eC!6z-yf*RTBn%&AAp6zl zO*VP@F7`6iJ?WjPCoILlf)JuTQ$GpAk>hZ_9@|PA?vM?7+)wfPEsEdR$Es0gsUXAg zqh(ToG~Eu!4_SF+a!xrtcc44J25dmU^Txzo^KFV8|@Ik;tQ~9T9$5%T-~bnaUPOJ;uuIGmPun z_R>i@>F5pd^lX= zAdX%eE@|^{3w!~f3p1%SWE_r92{2DImeahJBZctDwq?OCh4_2k62c4|gk~tVu22Qn z?v*LJTTY+N|2Ve+YcMS|isW2(Z`rl&543iAbt^^vImEnORVQ%buzcWV<7Ll>^jik5O)`gQBEdr~?NV4AGv1TkNcM$gCQxK>v94n9Y9UkZ>OR$l z&>$keSx@@=xnvs%azhqlh?%c+>J7D2guo!ilQE$vgspqxW?{e`o zd~tE{@OJ7^1DYmfSb(ad@4n3NDW0-m&m%O;Gh?pJqEWu3oi(@%lYe5ke{w1_Q$G%f zjjgMAEU^E0S3pRUzq&$9UI|Cl_`%Tq`xPBFb~mX0<<>7jdKJta?B7qQez^obP!*+4 zYsfHpOaM@KS-RQtfv9lNU^5GXU$KJL2q_0cI{>7Ao!qa&e1!aw9%$BFtfC4aCK}9J zp@aLgGuT~V0@pdM_LseZCu^+sI9ozM?8+!AKuczMx)wpZtc4-_XFMB7vM6h$E7nM! z*}YZhepWmsC3c_fx+`SNb~S#;WcCzsA<1h_sj4U0aLX$f%-c-D7Fx!vYsw>RX3TXH zmtFKuNV^*u-ft@j!X>b!!R#wGlk0*cW4#%qvGTnw`oQYdNPT6Xd{E;?h>&rb@Wb8!aZ2d~R zi*a06vfUcfM@;PY!dfrcwyxeR8W(+Sim%(}%R1`)+BLCb*vmx*&UwDyU2#?z z{(DE1@)@%^u!lO|9nk%&nUs0VM0-=9%}^HWanT;_KKmS7V02odl`p#+^QDm2GW}+4 z#k_>q(h1kId8hfwzXvD$Whf9E2ttm|vpG3?XZ4Ji46LwsjoPZ2e?9YHcB>(FR*9$!v*co(7@R_A};hJk+qfZLiKT)l9?1*JN&Y>(92>6`uBjqJwb zyrRRw0Cc)jumPK!$Jd~&IAq)W(G6xjNN9h)L0a- zc$FO!IZ5<@t2{H#U#T4ajznLhMKgWlRnZfjXG~Pt9L50_rT$sm^V_7+yrpC}{(IW{ z^I7W)33V;uvuaUczYNW)A+NmHykylju9*mEN_kwsLhYmtvR32UO(RwN@yyI>A&XlO zU_0qNHbGbKVk)CCI>c$1KkN56u47k4?uv?ZZk1SlLWm`yS-Z}WZ7HXI`sfHYjX}jV zP6&~S;`IW$F7}wA*NTL1iDEA6!{W)clix#}W<9!rp7ueWs{T_H2}k^6^3$bHL`#1rI_v-U~$dr4KCL`quRbZ)%AD6 z_DfA!n+550v(`}Pwuih4Jj$TCN+z?e+3`=03Z2jcYV?codho!_vreM+aeOPNS(h$Ryy5R_zn4 zP;tT2Z4PUA&)e!t!_WDh($bdpd$(YCG(hC-3UdsH_hao{ud-)ru27Ap{=-!c02Cn!V`7P?xw(r|=2xE%C>R z$Q7i$^W z=Go>@bYg!w9Byf%zPRsmTGSslTWwMTTEfF%fUMJx@B?!Zp!uBjbOY6vyriyDO%jen zd3X`%fwz$;sQ0sX2^qMC>+3NNPoGX=SQ=&A5DIs0S?hDm++S=nzR$0QWSF)pX+431 zJu6jzAE_^Ru**3b=wjz%ZRiL z`Lu|YSm~#5c+wL9L-)+TPwk%!2rGXBhx=)ephl4yK@QGAbxHn` zO$N>6_TnbfdR2Erm0 znfeNvlSApTOH6QwT@1($HuFzI#kzw6&&1q^x`{14*?0V|a?plakb66pzAnc%xNT_* z%IT()3wCFiOcrM|9o7-NBAxW_mVq4Du5_c9=5ro^GnxG){5JODw@o!EE2G^w0Are= zX%lfq;5P5-aiKnGxf^aOA?P<|{?w1wYwX7JGf9Fg=7*7Z3xn$xssaQ&!MqNk-+E1K zYuAwJPq=R0n`#Z*4qb^wZlCvUmN&Utwj7S-$Cd;Vc_noV1K-?V2zBANTIalCt|K-| z=t7O_qZ2=`5juxjvfJF6T^cpvUR#szw^6@5T*S29M zk*_Wk>XPuNk)IsEr3iGj?UKAyqw?O zEF9fzVNXQ$zWS%q zh$UmS@V@>=oqT%Xw$OGpbBS&EN=qdj2Egu7VEWqTZj?Loqws9=c_$*Z^z?N1+l}ha z4*>zx!L_V$!^3C}8>$A`!K}D;ueyqHr&`G4TsG3PzztQJC1e%Q<^ADbNBt4 z+91cLyAj#28SYdfI72^4!Dqv<;^BlT#=$xWYtkm5B4k#gZk79EEOpjQloTcIv%1So zG0VUdTs+$PA`_bcwvOZ)#SG(G*QTsnK|(0I3ojv}m;NL5(AQ9FN%;6j_f&xxX>CwM z7W#mWvA0PQEas`aL4sD#^4$R(@)0}a$~K(chfg2N`i0h|gm6aRl(CT@fz(Fl{FyO% z@J91q%$YPrEK+5!C&FCD=R;Jl2*j4*jDnGuP| zbZ6W*@ggcYva+p>$4p8m@|2ZYSsE}mhn}p(a3hHO$42Kroar3HlZPOtc#b`7se5l%CbJgzCvf;{)b*$Cw&%qO>D^t z`3|d!EB9G}5DY7)oElIOj#fSZuOS~)h(BDf*1tizVL+)DYmT0FH!he~!rK#FQ7+oD zQ#-%NyUhL}{Wsk;FprBBX^K@WNoaEh`E3b+mL8ymmv7GiUhf1*D2x{%fu%$?Nz{3+ zxUf1AY1CF!#m{35nQufqc?SfB4`cJY^qI`1RURckt#tuqBvsaltZY^ThVL?W}=U1tSA4;D)>5<*8 zWPUJe3i^AiPN%Gc`_|Wa>k-uvHfo1LRFv?BG)#5-KM7kD$H>m=xD}2y>zA&~8^z$~p#VKJ%SJ^jg$kYQ1iL`1<=VR&5uc1OrcLKIb<;mOQz`9ZBqe7o{ zRZ}&%O1(lvv2>f0Sf#f_mtc=p;Zm25FR$Z%YLyR0vl@}(TmY6DCl4E_{8I|3(C5y|x{r^QF?FVm z441R77P9SaIyD2y1U;qGCvl5vxLS}4=&V7+2Y)ecdQ zx4I3hGt%!P^>X}U3dKmwsg(GhZeS46rLU#F1Uh}O&1SfB$r>j=rP(CjT4)s@k;a`2 zyREG#iG;}DPQvveFC7H!bSIS+wDH2vQq`B~cztjpTaSwMQ-ibQz2vsTj3g>l-KDYA zgs3b6>I#EdP>z!UM@4{$BP9z;Gu}eqKFZlcKV}rq0gQ&y zoS)9QVT*+Tof7mAn?!5NhRR&Fmzd$6qdY6LWH&x=G7VWpENIK={Y^BHxwJ^t4T0%r zIbBFnJ-tM0M=!Vy_{CZ+=r-5+)JBi8dGK#JR$RyG)f2hu6$M)gN;`bHzNYNI)JPRe ztdh0t@q*PLO5>`;-zJzy~h-TPiBBlD2~FGysEhS6J_KDe^)-FgKe3a!sh4%RaJ zM<9@Y#!B%PPodRmGK`D#+yw?*9oHo6g}I>}Wv0a7kb-IZ#$*$xQji=%Vl*0BJ&L=i zfWdJyoIGs$0mE2*z`?c4NqQxMC4{6@#Eav`gti&<7mzdwR4J1!NwSlk;!_@`ACw9h z(^+W=w))y_{-w2B+a=L+-IG)PO&8%gAt?Mj6Pl-SQul7`vK2ie%-RSSfvR{b#rpLx z$C(PRYkJY6O0Ff-XU9EV3m7Wtp?9B!l+phOGFMRjg4Ao?tcZvs2kN2k3w4bn-`C`8Pf&64r%>?Vg?*t9hkt4rlLW!^KUHz zS}|0YE~f8Af!Eq1T5N5~ZoG*Dba@nR@BL^aegvKiJX}~(?O2LyLGGx~lMjCrx}yK zS%?e<)*<`J=+Oa7Tt)twsxqKT4A$fxzII~ltny}ax?JppxJvVYeFg9TrHkp(&NXhS zKOOp|epHu_v>|lNA(@?L5$d(6FG^*SL*!puYlc+igN0}xEZpyV&j zlAT5HTTqYnoGpyb^v^VmyaYJd856Jo#36J_&&zALJDOGr4Iwk|rC=hAfc5X2odbbX zM;u{Z7;g#GypeSax6}Qq5zn@tx2m~#B5~?m71eLKwQ80u5h;E3V$4V#J{)Ihnfcxu z^%8|p=G7HnXGTIv547IQCVPzN8*}K9Jt)rc z7JD%7znxmZS8QP>mDR`wIpb>uHWzQa;}4lqbcPYV8;0}C?ZI+$bcf%@t*c-U7cuh{ zE_rX~nYJZ5g@Fim+wclJ?jeAH$8#aC%8V;JwQF0tKqG3kwb&d)EpW$3$XzBK8ZJ0$ z``Bw`uP#M7gB!f1r>6T0)acD`p!s4twZ>GK z9hBSGJgE9f^l@RyKKkor_VfC7cW2jSNepvd<9)X5xv9sCzX3WCXF}W&2+iUsitpT0 zeia~!@2bXX*Ui@5cG5iKKwbsZ)N+wkA*EaN+dVS1wZ-YRq1*hOp-vjOU3HPijl7a3wVI>=hlHH94MBVyxGsM;D~JTk zJzO?5@p-{2X)FpwcHzzQp(r&9?_`W%e0p3#P6|)H;4=mNAU9K9REia8^c&?9^7X0= zQa*EO;fj2Ka}Lb5?bcEJ3U2a_jg&zb@RAd2bnM}T7NLPn=#bU0M?e8Gznl(t#{v~23RbllAT3;kNAWO@B97i7k%n9+VVKWq`nlp1-ZIw)vb`y^K*bK&>eOx~#T6Zpn7^PEX!Uh9~`4xH>~=f?z_~ zXE3z(q?7(P3VwjSdQu9xWjalqehhf?=4_mq$XKT(sl z;$=7?zH$f*t#a~)8{nciH!a!%GpTE~<~^ONWS$@I z0kh?eW`CZUm*IhEZPNAk0=iVU7iRl7=A^36$#>M)l`m6w=8g}{&O%aJ6JuNucIPEk zSFCFN<&{majc55X7jVrDGixiSva_8V&Z}zZaY~F3F5-T@9gv!QS6tc`><1yAXLqaU z#9y8_;C7Ey53LOFXhm~FUa304W?myw-DG{LEh%t-Uy%fiUwE`{ek-wakC`Z4Y_*li zGNE2~Ghw2VeSdEn*Wv)>>&F0Uzm?<|8~3aNOXJ?v{i>Dn2hbx#yQpX?n)x5f=$cX8 z&8YFds8T{-+k;s6#vL}GJr&jad;Y0d8%!FtD3v_pka<;d;HWW*OWWUT{g~aE^!RFK^0s zyezdtc(W(gYx9S$O(QY5X&fjw)O9uFaO+Q(k-msFvBQ+{?F|tS73~ll*!f62s{btB z#tYTQh_b~Oh+BM!b~+ply=fF5l)j2gbR|KHc+%evoI34iLHa-AgYrV;oI3FUKDvP} z`^E|$&Z?HuI|Cj+0s*UDsLKR_k_}X^Qa0W2)LsC37TUK%%iYfT7AYL@o0bJRP@bK8 z-fj$`yv`!|^kv#X2EFV#`DiZdRX|N+qI#5eFRCW*y>?lids_YpM@w7UeLmYBs`9aJ z`W&BgY~*?5cg&+_8o8h_LQTc-4f%o&lOV-Y5(}D;aQ~K9Iers!63CZAhjUTZk?;r= z4w^&*t!ku!VL;iF79UCS7m2I1G%9sSY5D;CW9+ac$dKg$IC`hhjV2&HlhZ8drkpq; z7(OkBp;cb7lUWRY@dm3bKX5x120!QKs4tETchtl1faz9lYH0?G_tWq(?AY~ohGuVG zCWlw01lNzBUAE2-QSa;2 zmGkKPSr72D$v&$SlB*p8K8*lhqip1-dh;oXhYrt#eBhAuJgJYnCn{My<|B)n&IZk2 z6`6v@?4}F^BZkXA;P;sF`{2=#;v@8tG9g8mBe=<$K&K z7wQPH5WsrVW%L4_in#-KgIIbZ|MQa@{*%osdP-E)^HiDrShP{x$p4bNW3Gr~I5nI~~C^M?AKF`Z4jD?7;iiKZXg2Z-;6Yk3;p6 z>jB&Zk&ioAPts#vOVoq+o$YCx*79gkUR$5#v}Urz%M^J?ER*Nf@RF=Cd()7F`Z^Mm zP@Vu-2ISy+}Rw)99W6qnyb(u$wEx zI(D@l?b5|C$kW#W+E*&@EKf)azuP#;@ktHAFqffHlI3%o!V=VxU|(LaB&O|R@Kca! ze`C$w_I!Hh#O>DiKlLG)P#%y%{)_9RqWJ&tB$zol+5NMUUTau8ZjK=SN70u-DWRTX z-oc4rNRo9Ctz;zaJo6f^qO~_w3H6f8Nnd5k9A4>?nzyr|0L# z)y@1MIz8MPbPJL}qF0sZRfR;PhoVXV?L%_u?f^w)qc=}PR$lj<^xkElZzf#=}cy zp($a-h${i6U1aUq9hy+!qpRgv3UTP^PBS7$uZ?Qg=0ni{+6Wpnm0O1GercqgriqNk) z7HM5cjI=xRgpr~)*j#nL5P+a;-}-(h(<-EKtetW}aE%jF#d|LN@I-)#;(cmH<6pOw z0&i|o296$f81`V!N!}?kIUl`?WymHCW!%XX5oKy)1SZVcaNOMakB%=h=9Yr}`rRj5 z{UsbBQ{stG88aD<7_qlZh09>+u;$qEKXf%V(jFqnyOS~Vf1{#xn$A_mLhosx4^o+!| za#v3J52*r({%P?Yczcm6Wk~&n!@qRQUA0Fq#<=4_k~SLBvDC4qQ49H&lM3HU`7Cps zxF!8fJkM-0+D|NkBS0n9xRsh#=5WuB(5ruIU zX@tP?YG~eoO8cM^p$8g|943_M@enk*0Y;~fIk$kE4X_!Wg&ZJK-8EMKRGI%8T9QJ! z5K%UTaEjgA__eGl5FGk;gFH#bqug*Qy?+*Uf06L zz^^_`_7;+ownylEQD14LC`_nfXmo_kI5b(ClWmGYx{p)+cPwj(pLb)|7QbL`+}$8d zogM~40B}21;NeIf_BQ|$RK8NlD&3Y!Pkp#uBAq>(TPBgecS`fb!>Ohbqh=SK`S5TU zzS@&yL6kC>GR0O{jP8WCPG2 zGk98p)+RP%0t1~nY#nm)4h+Mq7`^U0$Bzzf@pq)j=tJm=$g02XFqK@TCtmBe{jTNu zfusiBi~bz<(^03glT)I|~`Q=sB^q>Njb*LG<& zuzsXFjn7A-J90z3$rnu|lo?*aBu9N@R957YxJwehEjpFUUh86(L9eIzJOsk z*W@&r`7tw7mwgL-u}5nP0Q^*g zUyE?|ypnew$IPY_7^7a`figr%MuQAWp|dx*u>CQJuW8qmj~&xXcI4I9E)=OB6ch|M z^>tTX88{@y50};X%jp4?HqLIh^mImF3M+M%a?ZGx4L11@KLZuRzlQRI`M?o}QO2L@ zmoxVP>lV-KB3AneU`JBIUJ!M?2(wulLJTYv*dLeBS*uMVs!&=5S(pNtWv<(3+w%@w zu(xUWUnqO0AW@=dO|xvE|q-NL&QnXrMY}0ZCSgO(6bNpjerNNy5-2E+-VY5+U5xFt0-g6N6)bmsge| z^T~lsE@`Iv08Z>b&F4P$&7$yo!`T`~8<_Y&cJ<^CxonZE+Cq%to2@i^e|Mh#5mHTc zz|@d}<(GoG*^@4{)o$WU1nn)Tdbey6ppIZzkr{}0lM94vvynBlai^_xia~Q~+6O(; z$HxFpZ{>1f5hg@6zhuobXQ|NwDjIv~|E_ur3wkIEE3z)yG?`K|vJS457tjEOvCK{P zy(VFr_ZnV@uQ&d2NH%ZF{wCT;lV8m=SB54P-I!;``RI+RR;qy#@z-%=ioXQyX|rIb$i{By zO>W??hh9v5tC37;Y1Eo>JSEppTE}5{DVkhCG$NRap!ZcU`>Hgq$YFDq!}E+Z`y8H7 zIqj6QOA(Iy=t%O-v}Fg;BEK!%3y__9ANqws^EzY_)m|PPaA|JKS`z~%L^Cg zM?Jpeynx=H4NAs40umF<7P-dB1E?jH##>&3R#XrBcAe!i*2R`Y82VPi=leyvS3u+EzkprLeZP`In z$OoJ6i%)YNIwvPrPEL~;)R!FRsAMdGuyA*Ja6B*Vxfl{gRmjNb8M12!4D@`N01Wcp zl=#6)$<9y68=gy*%e@m4|kudx(5-4V#uiX$(a@mkDN%Wnyc!CY^Mi9!tb z??vhmuuon~n=$-9BweAkv@CKZ9mW&soR0p=_^x~;xGQIg{!Sf}hGi<&u+Xm7v}2B; zooBAa6HYW1%xD2?O!ab#mEaF|j1hWmCe3DWb=S_IopihN%--ArRVw$1mnW>9nO~mU zT>LE^KzD>cxT=pCcYrW|j}bseIY;$m@JHxnr>W#pvyDRYBHvxRG_dbjL<6ff+5+*_ zxjyPJpo6q%#o``whEq1yaP!}!FU%>^6koO6;gm=B#N}tPpC7qqm39ozHmHkE7ZU!% z;daI^d6NAk)e!(Hq7gA^g<-l``nql;u{NI0@6tLwTj9C_^s_4cr(vi8_GYL>Xo!x9 zCCs?6-w#g?oc;+%9*Zq2liqezrrAHBrK4w>6WFwmM!@bnX{e|#dKRj}Tn0Ug^l+)u zr5I*c-XD|Lq%~<@b_M42)z{NyVFLPL4*(xp=!mTfE0N}mx9~5^%{yw!EpfvO))ABh zR?X~++cD!DL?3doH;^&M3Dww@inC~Tl|gY>4R5XZ-rr|0VkH5o!FFz=;9C}_rSH4{ zkx2d0vvyVU4^yLx@_*m&@jw17jx~1vyB~o6KR*D#NGUrU&Ycg1b?Gfu>jfCwC3xVW zc{6C*g;t~tC&^07gA4y%Tz(QQxkjER!+t!ZtRvsYn=x*9e4eubU=52Nso7-+vP8%h zs**5G%7W^r%0(`8=Xp{F4&{>dq$(B1_mn9R&InGvt0DPM_}6`h0h0vhHwC$}4h5H& z6APfaI5_=oUZ21z!#Z@;$lygLc~_R3=S3w7+vOoZiJy{5(l}x*@oz_m%FeM$Ui~3) zT25^tT%>)u(NfS|<&%0+dmR@Yz&TK@ng!8o$v;)>&5WJe7Wpx-JWFZRaMo32Y}{X2 zCq&BiHyVmrXEamQR33wU3xFNjXfl)@qWkyRx{qtT0LFy*U&0RxY87J8<|z`cdQir- zdJfd3j4;aCi*<3D#6BVEcvjjLnj4eoED{-q*5f4 zDQJz5BH21EBW z8MYqrckCPj^I^3rB6-Yvc*+%G^gAE0d%45XzAV|ftN^}H@i@OQM4rEGQjF*K_RRjI zWzkv6Cx(TzlQ892D037$KlRTWl1zEV9qB3Q+DV7IvEu!WFjtPW~ox)ITHP6JJylG-eMWWr!EGWaOSVSSL+?TfKwCrWVTAfFC*#gKTQ zsIPlJzFboEOfDsGQ_(}S1As!;e%R&!$pMULUqE^i5iL$$B)yG9b9*Z$4{!+y9)aoN z4)#5iwS3ocIoX})XJQEjV8$H!Cs=@ql8CSp=2QP{9whowv+WYi#|8d^bx!;1Hw_W` z>`9Z&i6i8dG-m4SKJSwrGzemg{NWs94>;6H*&8e)7(y9ASh8lSF=M7GyRndJa*Y=7=p-HoyB2`3~PN> zW19XLiTWV258n1xdjK%Dg+h87%tqUqoq$8+C~Q?b&oT0N2IV;h3-YUt)lKhDz>8Z9 zt>{h{SU@JV4TA;15>wX~J#m8UG@0`OEDqGW4pbsP+i&?H%A*DFYJK%4Du>bA_u;)Z zRKY<5&*NStXf#_EN&H^){y^=`QGg~onE)C4W)?dFHw2zTtSt|M`RCq#v& z^G-nw-D=nEKxfOXz5(_m2)+DNq7?xfLBO)#+%C9n3Q=tN@0j^cG$5ePI_vOgyl&GK zITW`zETYmLzlNUEq7cd z9f&RLMW&12r2L0_`8BLywn5Bh-WJrhZqR~ac1X!iSRJCspZ6m$(m%F8K{~FQowmsy zL-q0oy>kuD8Q7-G>~V`8qr)XR%{!|jMB;JEX40tG#0mQ_XW$#y*imSlJZJerqRbGk z0<(YccT*9PZTR(eevGYO9);x;5Z9u0L{_4W4WG9e0$PSLvPQkulC7w%tHRFv-K%a% z#whM#0Y>%FPe^A3PR?EQz|C5ib4DIP{K>{oiS*WjV-#nPaR(9{k#`+GWJ+;Z!Q`um z<^4v6lup!Ng6TT@xPLe- z>vPC16uCXw9dQToVeJgWrr_ z4`JhEfW_~YZU@12>oNLe^WzyxgZQ|30= zu!ObFHxA2hH`BbfKf(Xs)9+tnBY;5d>OX4j|GFsu-P+lknCjcwo4DGTI@7yb+Bv(} z+tL3A*vCJoQ8P<(`u}){M$IXw@c{w=^!&r({FjzG|JgE@b|$7C|B`btO0v>J0th{~ zb?Mrfg_bK>B?^B)p;ZODr^qr`wA;EI-5249e{YI6T8WY~g$X|Y{>v4>eE0(TDwOuy zHa@-H1(evZ1d0=xqTxwh3RuBnt(EgCkV3LedNhLZMelgTXV_90W~f!9jXH35V+v_W zmZ1(-%`la=tuI}{o;109WXruf6BLdTdpJ>*S&$5Cam~98gi&Jz56y{jUWx8gL;@f4 z67+FaD_VEYDlpwj0q}RQmK=N?9)^%6Z`a- zNKc=8<7+`|>px1?qE>}_NWS`e4HSVMLW`B^<*;&kFr0RS2jBBgzU7z)MycUmcWZ~| z!Qj_CfHYDlRn;7dI=Z=L@0JSX#viCA*gdp~ukl!C|v>bYWbY+_7(*{g0Ub zPd*V;g!>S|zhDdj|DS^Q{)Oa-B)F{aji9(~{;m6jT zL8FbDt|mpHx7!<_h*9JOhs^0|@5hrV@L&kwdc?_>&H5R&*8Xga&d{??ee7;YQ%&k_ z>TgRzs%wtNlRf!Kl(nKN#K{td9Fp#{%7=$~@9f?KLoK=7$q4&L3b#~)jq%Jw$7Fmw zkDQ%Zs6VBG_Ac^a>=xszVlOl;P>k*SvhwSxTADixcK+0vs??R7*5xUYxpAu@y)XFi zi1;h_2wM>4Emp^an2N3{9xUR*{G`XLPv)%zbn{%Q;cxS#=RZIOe{vLieK;&BBAUAS z%!-Za*G0RY@KxL&Oo|D5DCDW>vJQpEWaib-U(0d5G(lzBj(AU+19wj7*p32@@ zy#rR5^tp$jHsn&EE#h}qGLr)`70JVBG&P|eq23N}irC?X^S@AHO?u8C?lC5|w|pJ0qwn0%E+G;DK^1%s0foKe5X#p`>c zRzawuB=CL$PU7#!>yQBkiA5)g7&E>3Mz#<5v7~miLgiQ)g(&Sye&qAZ3-`%{OZ%?z ztc$vFf?a*^d24a8dfzk5;r}0I3TQqQtr!OYV8;{yfcn4M?Em4&`2P%PXLP-t|2thO zFVARL128{88Ywb|8FMq0@~@_PV@c6bu@X#_1^}=@$p~Fz7s3R?+s*4`?kk_fq`AJR zq~^Nk)AZBRlegICT<-NBbD|k^XiX9PN#gsTnJIR0qTHEb9?24oNe?n;#-!tBiB;7^ zb3`tMyq|M{XgE0d;d3UsMUluyA12Ah#0x*4XT5GeSFe|)b4%>>F@#qH5wPPkhCJ^#PtrI20Kw zD&tp5_c-^b^p#w@Qs2Al$h$swNOH$r{3(^En^3%kR&MbgCzr!L+`BT5DmXYf5xc+^ zYu~geM@>Dk%FfS~mE zss50xu=D!zXF>fKq!TA-XjqlW*BU`8$!#S#mG_Q-lj_M3Zg~;7|1}7b+|kBj)mo8w zgG5^@zve0}3z8llfem1~Z-(kg(E-)RXOLLEYMRY*Q?mcIye6LgQYe*F*0_a|nlK5< z84-CR2UMa;Zow?}Zvro4R<&FCtt@eRa@;QW{(TtnSUoP3klprZLxjNejmKLjmFe?p z^pn}&*p*GR<<27l0JBQN4sFYtY`F#D`iHZNNJIx$(bJVh(b?)5hSt{EG27FC*ScS% zkVnZ`7-@~sV|jue`3Id@<>{qG9IP?q6u}b{$4&MkibcR-Q4US!48s1D ztY#(cB~EhS8*vfB&{f?+>|h3ZJ{=?7A|^uq|nl)hlE zY+52A0q1o-R{Y4QsRHiO=Jo6T9DPt%U5>TYjgBFQrxbhE~|$dQ+l2J*G!BkA+rp_nFIfF4Zzg-^pDX5bL&$g4V>fu9m<< zb3<-RJ}r~X!GA9?NRANRcnX1F1t`&<|Eh=?Ur{5!v*-oGm_oXVe=Jx9dG2>3>kg-! zktakCFD1ro+W?A!XgSfK?I~u^5qD|&;3HoS?PJ(ilEkRoGA1Kaj>x~u41%DW_EMHU z{K=%RveL!7zNOF4uq879ulk0m;Y_n(IE%l6~s|GKdDWZ=sFwfq>X zJ35k2TG(G>et%ALet*vE8h$~y&;lkB=#(}B>ebJ~dbyUTg8Cfe(fnSMCBetmH zomzpDKEb^1$<0ZeB>7&mkafz{j!(!-Mt#Z3rh?jrl5*cu3DtZg;pnUg|5MlT37Z@m|a0YAKx zxROhg5rD z)ERUl@`fE7>d6POSus%Y#Zsc%W`sH=i>CQ&Cw*eS^%TAh-Du~}e?@H8VbWunSvSEu zDh@Cm>RM-D@uZ_|jCv)iGgOD}pC}U4gp&>c988-|wp1)-Z>@V7KYL6?#}~9OnAQ1S zM)NR$I6$5DPL>0hRFw??-0>W1DpZTcC75WYfwk(HBaopw82l;dPid->CweFQfo3@3 zzJ1qtDS-}mjHo5Y4|K0m$QR4Kb%AWHbval6&6b_yR=^bVL|YuVYu=^&+p_X}q5X)@ z^;H~1J*`9ksFKPUuPotRj8a(rYvtr^!i6WcPIzWD9XKv?_ZI1qlt{mpQjSQbWWOat zLM;rM0LT$J%&lP#LS_CMU?{vk>%wd-M$SLbPDIQ*(witctdXA=zx*{MFodtUBs?#r zrp*19*Jf@4bA>FKxwDIFDxOAdXKmbXRHT^|T#Fesc!6%zC_`ghEZsAP2K(L`N>Zz- zg|y{S&W9Loyuaxf9X#!-tYIlc3Rfj)!6qE-l)i`bEfR zgykXfE7gi$mbj-&j~CT{U_>wr3_{mBQ>zG(`g#HK+%TqA&=|xsNyVOtZ_Ny+ZruK_ z4W`?RxY_Q4Vo?J8EH{Cdj`~5H@{`@B#l>q`ixd?=8|}2a^V(T-2={3Y)=yKcd0nt= z1E?Rh_k#?zJBqIq(c>XYdbc_XQLCHUj@UB1BSX}@(VdxcRXuq)DD--2oVSA~L@EcV z^o<&Hb&1Y32WG!l*x25(;$vvQqKFda(42urgXy-8Wn9XKr z06!@+XA^{RWJ3%v)jj-IRN)`{qT-{zV7T26*tp@)&rTk@KvYY0fn80yRwfk{pBN7m z!G2Fz+#}nhpbgh@IHuOk2kZw4?%p8!G2V1D*rfh&_q!oyV;`@{6!(R$rh}bEM*H{z zY@+yIzN!r)e<=C2@sJk)pI08P{$DTQg-=XAEs&4S<_D)WDq^V}WeHH5FWv6Q9nh3F_5T@le>$8MMt7d~;hY_-<|vuYCwA zEP-RQzOTHaEGjVO4p)Z-3%jBXZdT-?@64CuF1lJY;TlUNu{&7QegHj% z##d~~9@9=`v4dcepp?!xVHYD$U`(KxsZ_O@V7Z! z(pL)Y3v_Mh_WHP<*UhrAeIJv10o`wcrIb7bo(Z#FI1y%=hmC$Ww>Kn4xAqWoWGlPg z#l-`&w8hA{bAuhZ)T9m7kj>>fWeC>6;AAjm4@(ku@@M=IDB0LJ8}Cr zprv=#sC^&{?s^U7vee~H)UDb`%lZy7CrFWo?TTrx49(iM-lweAG)oVNL$)TX12+F) zztUIn&&?jDp2+y+lAg!D??N3|;;F7%I3?5&)oASCEPR74YQHH^GqQb%#AkC~&hY$k z1jl=&Wy8J5j9hAcKhw__!OS@{(B}E*+YmkU-+>)Zjf8IkNQBydhr&^+-pt}ORnIqj z0Jk&==WThvrn-TI^^`oq&q6Sw{Dq|Co7uN{NCx1(D~tpB24=AI>BIgN>Xp%$9kc8K zu8LUHv{6L=0H8|tQZ8wKJb3p_Hfy7_5)6`2f!z;rOF&%kfQ<)r`0~`S)rZ@445XjA z)4a(HGvnh7MJAj{($aB^dRTsC2cnkG1z8W~mCBaq>jkFtxtQ7Z5#DvAJj7&nc6z*g z-D{uRSvG16B1bqP{^Kq%p(M$Qc89f!Ut`cx zj2gsN`3`LB-m!9HtZn_bqe^3De(Y-xQ0q>0Bjq8V!p*?}^X$^Cj%38=Yo;*gC|6!< zSz2Lp1J*@&_@VNvXga?gNJ~sG^G!Lsc-pjODh!CssU<8G4cUCC3|@?CB-V)y>1D-X zkqL-8JvjTEr+{g>(o;l~g-3dRHgbvmE3OwmyrybF9wl0kmPXZlAJ8*HL&X}S@}>cc z=_X9T0iZrAKS&IINu`D}N`Y1cZ{f?3s@mNG!D!w90f*HLM58O>7beI80inK2T2bz3 z>**URn#c{jlnh`VD#ut6n4V7b$$&a`Ya<8>if!Hb;j4pxb`+&s0S_X5u=# z1gu0nXn|AS6kS)O{4sswc)Z)|6qk}mUbNzq*k9o3@|YtQw8_;#cvmUR!R(#~g8Y5-UuVViUs7H5=6SL7tkW-Nx|bg&JvI z4x*IQCmkUe>1}JFwn@``T4k=n30~EK0HH;d`ssD$ufTC_H)7jAgOGyOL8Up1#73Pey|PQHuf;cTHkquLHbACZChvIX zcpZ)@4k3ws#1$|X&^@iv_s%bjQ+3Qqa78tL%S`Rh>__rZztL`~1j?BCr6zIPRXcFI zVQnw_m^3qPspR}Y#cBMbj(Y-jp}nvWLl^xTW|cU38@J;Qc)sVEA=!SE{PUCIS}JC7 zf`VmBnx4}WZe`OPfkF?wG6b}XLin0kaH=7X`xWd$iDOtrz=RnYlQIkuq~J0n@Nt5( zI2+4b7%#wohV?n6ZLR}e&LPm9;)+;-an7`pw435Fby1baa`TaJZ#DJun}FZ)5uhCi zXo*#1qC2V3)VTx)l0K4?;+YrW+lkKESAayOm%cJf!c=)E&N*3>AV_`bbFo%9`}ED7 z#=Cu)JZITw`ct|cXZp!Aba`SYr-@#Z5gdzGQOK@42c$Db+a_r@hUO(Zt{}7NLekm$ zWwF9&fO7(j)4*Vu%_5r@@U#S6NXr};9aUurXZ3}f+aj$;_0q~uCjFGzzyX6BNuL0& z>l@{P&_Y@_sa&UE9I)#Mu{S)&U=df2YIMmDH%J+~_JVb!0fDs&nh0>MS8*@zCerO-(+7E)2vNDo<@XwTlg!PRTX&5e z3`kRY<5w4=_uN~EG#BdDKoV4Pa1EGU@sf(?bCVRnEs;I(lCtMP-s>fOXEh03PsYQW zqIm6?W(Yb~`pBbHCg^Z=lvG<8Cl!ieH?z4125vb5^CsYeYFhHKHGz{CE=yqQqZ(QB zBCK`vUnabmT|H&5CT)v^M6X;U4`W_q2kFULwLUb+TfWJP2Q(veEyt*g7wES2U(DYs z}T}8U-MIu(jrkL``Y~)bjbz4Ygu&9|P zu0Cp;z!Vy8OPbuViKKEImE8!2R=ptz3xN9Qvayvn2mR*QE?g-qf13iGiZ>j;lb2zY zg^?D8$2GRB56eA^2=xSjwc_ar&cRARV>tR^69Ae!a7&_%8>tQLw9TiOFC&5{+h1;3 zT#Wwe66d$wyB@=L;m*mN@Q_D*BfW9Xd&ZJo%BeadqnDA&NVf5HByju3yEoQCi z2(Rosuj>eYvJwdpohG`1rxU7OafO4Fy(KGd+q@rbY6-`pt{tzVkB29m%1PCB=Nryo z38bPx8P6Tg(lOx^Wwk1=ld*5~;s%yh$T<316n}Km+q%FBSTvm##~dV1^Lf?^gtA-r zO)aC#21Q=@W+78y5+L{OIaq5Y2z;+s5CVT34YYo^3nm zqLpG(z=@SUXeRTzZ2UZmRgw6P?d(ztjPJ61DDS z#B|&2#eQoU)%OoN6_Vlf5>c-e`fVgns|<{&9Jl`_-}`tDsTh7{jZ5rM231#=8twn9 z=W*u>-Ysu7dIqnhgrf11*JvMY@#j`(2498G8ZJ%$@T~lu%gg_Y7cb^h0LE&ud?%m{ zjH_~s=2UH`e=lc0@JD9{GRJUYl=bl=^0RPfn+dVQKiC9ySl_7dRi0|9?J`&r52QK0M5 z*qBmQ(nJ|T>?r2M@bRVO%kc7WD^rl%ovW$r1?*5CX7N~ z@q-53daCoBJmR@$wnjK79O2)n!a;%_ETROcz+yg+@dH804veYIt}!I2%oFaCYYFqXRq2RFE1VUt9g6`&$OK+iPO*17piJ7#l01D(gvs zeqk5Vo~!r@cVcPmH^x99Yms0n*mg%IY-)K@nTenwnEvZz7+F8yYCvGqREoq7znCd2 zLXSugS|rfGZGBEsru0D8LhP41DN}K~MHow9$W(#8aRmWSOyJO%SU5JEYy4iWNI*HW8qZDJ_j1Ed zO9#HEx473{zg}gHsM|eXa1Ys zCMWpwaFgFfxnBtp+Cz3cFUPdHUku1j*BvyhE6$URy17jT33aCV?|%b4&u{~unZG~Y zJrj5xTQgzsSFdO4yLYRUK7UiO5nk;-%5B$V*J6F~d5sQto#Xk{G!dvlY6$*eM^(~u zlzedJsI+I!xM!jJf1K0=%FWIy#luq*XZw|qLQ*c|i6~IXm1b%W8y_u$!S&cESpWRS znZst9+c5*~p97$WgN#v?(1+8vFf`N^9GGp|*H|!vWI}2rT?GQJcJMQ7Plu2q5soMYE zy{r4fG*h(*tRf|kNck0iJOU+nWk`F)UI<%G4X&xc`tq5#zQ{T+~1AGno7tf5gMZ!w)97YNB)^(N}zO z(;|Dn@2*lf{9lf)#>mY*vTv?qv`9m(E_@cEl_8{cRt$V#VLmOCE*rDDc=bv(qywIw{fpD=wN`8sNz9KF^i>?}qG0-Z%8;W?x69 z@@Db-BG>wJTQv;v2If-!YH~2B_t<9Z(vut>eKt=+TMj7m{K>nBq}bAQw*DI?(Is`sB&NostCA(F z`l0yt%cSo*HqVXK#J=+NOtQmfOPgY`s+4?f7JFP(LJ(ONgK-)mGb}s;qg1;ra#SKQ zLgh~`{TQ1r=aWX25mAZK)H)F*@~?mlO-z9;l5%sid>e44uOqvFDKep)bhsu7yNLmKo;Vcu$n?@p9zstALDC}0 zwacPXi)JhFJ?3Sago&V%laWXQT8>H;PVxv*TeC`sl>nL&4%Uu1MM^!NfddU57Nkv5 zR5?&b$zZm$vcy5A0*Uu>%T_Dc-yWamH04HQAunS^6rwk*!w8^k*YeS;%us+m@xMqj%k6My>WnkX}0 zOEM@KLvaNXaDBW1ug(4h%2D+c*3A?@)FTazR*$1P?$Jq8HVDv7)a$pH z048^nRbbCYH8!|FX#4NA_}ox<#2CWa9_U1+f2Q2wv51O@=1bicuM{xbrrELQJLuq>i*{FivxU5zm>9EPe2YzEM*%*j) zO;zi7z_YBVfMA$M=HyhU30P_~vnlGdsve5arBW^_+C0fb?ek+v=^p~sOdui_)I1il zgu5e22D^JSkwW&5eUmW>Vsf`?PZ;st&}4?N3{8uxe3`GeuAaMF?zuI&dHsbzOknlP z%6KYJB&%~0A>v^?)oJ_K=jI|16@^AaMtMeV1ikxig0lX;e`5=a@np#Fqe>eRA4MYF z$*{nc0{NSgToP){n3qWJa%figGHL;Cp8+FdrFjgpU&2F!_!|w~7{pm4;VqHstzI(K zHlB^CmK1Af({0nz89Sko<7bFPz6MNFV*i{`S--a=2qJR*3};XLg8{`v<`VqK>mE-$ zCv?Q1z@TLMUMc>vXZ~?4I<%3>KQA#x z_7o>DgYC%Q;`F;^zu?WoMGqPzYF}oL;>m1W_3Pmwz}pX%2T))WbugU!^$F!xKQynp zq0*p0ir0JsEWpZt1@~QK)=<1{H$9a!Ys1ayar;L+UfOfTSqAg4K+wgdg}D>Y(mu=; z0ack_i^pVVZz3PX!VAVTO7%|@j58!YeEsfm#x&9#p`A%Ts^3e6htAr$Y$Ej!H`b3V z$DM}GTiH|+Uh(iS6kZU=w^kms)L>uEu#bfHc2jC*2t+dToEp_PHhsoVPLka3q-422 zssv>pBx!MNElUOD%3u6;i0HAi)pMmXY9U_4vp)(OU{yk^btbsw&r0b4hgKKF`8zg^3BVp1-4zc`JRjU4-g6xsxKJ-Hdg8#I4N}dI3=Bg+EezgJO~6agxuF|* z`-Tr@&LbjR)RZW*qcmR)=939X@E_D2sR(f?HeZh%3XGpxp6RR>V?7gPWz|PtqcLe+ zGSH;NBw>UE(ME2&v~S@C_(KLaeV9S_`No>re%F}TVLt1?-0cx{@?98s{XkunWE>D_ z!QctJMfMGm4VP#I$KC8dS0NA)xHIp1G?BPba5=vw^lq%Mm0<|xs%RWvU!?C-4GT!#_35P#{$VABnSH3jXMU5E-T64)jP0%Ejw<|?jai1iN+ zvlWql#G7E)yqBhRJaY!2(`L=X2>mwfT67$uU2KEi#{Rumw<4M0z`oH@LDZsKQ$>RG zstcl_!cY)?fz()zg>z) z@pxwN_=|I6WX>VGdH9Q^l0mtYPKR9B@aX>0SD>fm_15_#PDnsgs2C6Y`h35NC?;e} zMhM1jnI*9`_V%9V?NLLY1`h1?uZJ#g2B3rYABT$GmwJ)2Zb9%r$*}+fYtXZudV{D@ z5l)!F1f4L76R?r7tT8NMG~uXVIRWlH@`auBi6VKd5PC*A&H><*Z0FB_QN@i#xx(FS z@BGD6@ikRoQ0B6lGJ|LlisQJG8O6uibHu6iw%?FHogubP%jSPWqDzCIefxmSg?lm# z;>8)@qwz{8fM=her_=Pdr9^)?VaVSAzcAtqyq~eOE-K*jMjKiV2)UXN{p-O-OEzwF zNbVcQ)vZlX>q(e$!XQ44{<4v1iNMQJ6oN~nbmzgu@nBlOSU&RqYAW=inv{@Zu`E`M zC|dB`&*b633ny&I(HMLcGm97#{>%>v#bZH{?Lajp85?r!FmUqcc_zga1O>37pU%2?X0h}L&qsK|u@c=M;+UTQ1Sx+Z z#uSop%1gK=HBRuqCWU*!r2SMJtrsr8i&9O9ez}vjw~$cF1BH2Po1WCzCPODztVHa} z`#xv$aVGz9!H(_A%6T$$RB}cl;ehPA5w7>@&&*!^0T6ai;`Tc6y|ZTIj$Sd078CYL z@6OU-acjjQSMj%6!D35>#+fu}aSjo*l*F93?e&0ewP}+mxo|mE$|nnbEk9sU5N=fe zX3!&iT;<=FopidNlhHPCJ`ymdvl4Uw(Vjr%prRlmYyxm|*}v}5R1~Orbf@sgC4gbgEkh1m#QGhjC%En}bsG8nIBg; z|FsmvY)N%(M4E#VC#P^OG!1eeFlVS+~@tY)_Qqh3fv$kVPC<2 zWHO5YBJLA?hvk;{F9E=xqk3LmRXr$jGsG^~$v~m^BKOM+$s1cW;7ElBS9gwTKj(T$Zr{yD72Z!{3N_?F7km4nZjM8>Qd= z)YC#RM$*^9vqy3Rvgl)cnL@2e{IdbA7VvMGN_ms!r5^`Mo@ z{!~k}WfFr{FCu1b*xaXqwvwXyzJ4d0-9aJ}9qc5vxbnEqu5H$KG$3^3M;N#{V>o5a z4I-7WGVH4{gLf&A1wCcYTeQ%!BX64U_v~p5;_}#v7YTtnIZ2D4;7=7w!pw&*^tijpH&6O+2M!)0Z>_+4a_Gc?FTppY zoEv6uhGP4{?nv2$s}pZi{$M0d)lf`w%*}>o0zg)`$k`kfW6F8UvhRl%Au z*3yJI6LjYIz-#=xzCx2sw@#XVaWDd+&d5t~E^ui{ZRVtGpzc-2&&Vtri4h@JUZx)7 z&MpYDzd$2-?De#7lMa`G;*Je zARZ17=MN3uJM=7BPT5u2{_Pm+^b~G^9fcp^RRN6kucLYN?HF4t7Bt~qE?U}HHKRp8 zbI=#B;>;0$i{lU*i2q1Z8ho))P@< zqlTvVk}U9|F@qpc?#kq2x1&(GW>C33_uZ3bS&q|Z!nNb5eTKGtgEll!I}lB-+ZEL# z8tzqIW7sG({2lhQT_k*%4*e-rX`S4XHkLp{9Y2$p&`qMqWx!S6p={WNgrVPY=vS^u1Nk#2W zq?9gEO_;2QAT~zKZo;xB^{ozF^lz9U?Yz@5jx-iVj+HrZfaaWyyp&qw1vP_9QuZ5; zfl8Zf1iHU9PeWV}rJW#=nem&Pt_v950=t#`Mj+=Fs#tla{nQTteXcEsMp(~h61GRy z)T@*ed!z#VVLrbXNa;%|YSZrs7m_K*wGI1lxJ#F}T)f>jd$V9w)QwqpDpgVBC-@tb z)pE>YZrtd*`7!s^)@ZjtrX4W-jsw=s2`S_hbYb+F518L8pSp2WY8m!OahCrqoWhWh z{BIEbIfx@vctz$-*E|)MI45o{KO6$nxw_SMGF;Etomu&{6s(B)8_Fvdwy6;Lah&0= zJ&W_0puUFI4G&dK0a&bsS)sI~=i-I@P}d%>5~&3KETIX3;?iM=OM?Zwt)NuEa@er| zn|V_@pjkDn4u){$G7S4oPcSs7J$yrwr5ke^F*1M)MX2kcCj!D`y)89HJ=v*Fm|Vx* zPj>P_2rQ{HC{>Em_4CJ?ut!F-D`>i=%kkb1isz-I$kQ85SgMLDcS(1mop;G;l3Y?3 zuj=-S-Tc`nSrU@uopkTPQmE5f2kTwJJJuL|m!@Pk7;c-e%~SP$bVdNa$`~CZICF7R z6i|!i*5quewRBh^8M;vSvBnE;G)p=&<_l60Tpc((S0jJJJJehP-Qi&M@uIq%kHxf! zy4GQ+qovERO`^DO9_9WC=#9*(R2CHZ7a1+l)GBLqS=$k52DKSJOYH2xBJ$0x!Ff!a zurg{{TV*Sw?Br-iUdYKf8JGOXNC_izdVKfG?Mxl=E9{oVMI_3H$Kv(K)Het+g~qBd zT_M5k!yZ902J;J1U$a3lNQ#-N{a3ETO%TMW?co%Br-C2`4)?&@qhRThc2@hoaL(+` z2iu8=7y;QV2^|c7{~94TE5$TgMYdRJ1o;AcF+c|;egn6ob2IDBA*684EHldX$niw& zKA9t~Ws@XFriKvro!z$rKCJDs8IeSfTWh5Hg4*HfU$vq+{Du_+@SGX9R$CEx=G`Je zsavJBQD;`p`DLzKXeRaKB(%PG{;UN2-2cYdJ8+4@CQX86+qP}nwr$(CZ`rnOyKdRG z?W%jr-0Iz(IsNvT{?7b|CnNI7%!s&r3u4($srEHow7Qhm@?$Qh#7Na|mY5SMQ(Tm;)?Dk0B&+87%*#y>jMe z=hZ)%rocdR`#XTk$Hl|LV&B~Qw~Nu|FuRM|oqct;_iXD}sN<=|DIzR4eexvgqNFm1 zy7N|@O$OOP&w7S5DNwI_0;F(iS^MKYC{n7lltxTSqL8D=W8o z^p=Aw*1EeAU&*6x|8DkTgYc`RcUG z5Bnv@NX&ZGl1nt5C2}rtb;*zI7=gTdz}98AE%@qkIHD|xs+YT6hJ>E*ZuYss7HoO( zG{;|?>;r7^&297b5LozybP!5^I>p(rEZkp#!!>`qf~WcyIu5amKw9L&vfMv<*9^K< zM(j^@K99-!wiPvklbi@s}g5CrAbQyLrennXu zSJYzK#m9%y>9&T}TP$!@2`+E##r?7rph;UWnl$FSmcTg`-0-N!JEgyjY1Wl~D6Ueu z?sh_N9_YU9&0)$1qucx}P`~y0&It~b8O&<>VBQW;BHUHp)NxNHv-8O<+qR-?{^c0i>qf8YG0fVHyV3`^*#mY0jek;~ zO?ep`M|Zkzk6yG|H%%yZpwDVX4^H<67Ylu;ET$La?@9rEOFf!H%Buxaw{wnxWwmkJ zS_^hP=J(f8DBC{g0W93wkaZO0KBezvkc>W`H{JcDG1pS$sBdlCgyym?zvBzhm25*{ z$Ykl}X{*Zpt#K#k-P}?yo=e5WSje1S8zjt>xbUREU2wvbe#To={JC!J&h>gXdg;DT z)A+8$c13<95F6VS;<=>4f{f0^^91)=+vHAHbYrHW7ePu&?qC-^@ucK49HqX`@#<;! z&kpLhF&MCITteIfL9dM+7f~M~`p4x0nNe>QRi%Am+!#Jf7$?H6il(%0{A#PTbl$DW zZQp+k$q68E@FYM005qWh0BHZ)ko+HtAO|P=e+AAv{Rl`?)NKFd!SHpX?>HZzC5Ov- z-8;;hIxrm$WQ*)V`9uhTqg6;t#&n*bfpUdYPzg=-l97$SvVd6z1Pq3MU~U3dv*?Q+wu~7IxOO!Tcz4`vLs@)FFrd9Q}*Gy7k7fmm75? ze|O9X55_e1g%+tL8ZOp2L42>Mftu4h+bTsM3p+;lT<&D6E_WZj3P+*T%bfVY{G~&u z3d`rWsw4F2w`d@;+)%2*mFNw&j`k{OS+Ha>SE7RE1Or-82-}y3))R_+RHlBBl8A*7 z!qOO!waU3uY@t>B^F<C}%)nc-dn2`Npzw7e2ne5c*Xdb6YuuGQ~I?AGHK)=8*<7wIg*v1*y(1yq<;NG3C+0wbQY* z9p{fayEjQ0U~^(v@%0$0izxFC%c^G9h}EN)wBdt`_qJcd2ObNlIYyYk0Bt1z?s7+^ z*eVAxw45Q=OAD9|%c%8R-kV*sRy`+*Iha^3n0@kRVRKl(m z&nJO_=*0HYfg%tSMd$sN9iF$?LM$78)!}^lmHL1CtO^hT2Uq$eg=(7!--suJpQRca zOWQS-kDI$3?+%8=tI3nB(zq^#w`QR=F~AM=tfxzC=j233nrb6z3t%sHPV9_V-216W zS9dn$)*4q47=o&|u0$}r<*+<I0r{wM_@|jerM*Gl?CP$ zEZ9`Fo}Y>8-h?Jlha!ZeJuJV8^$HxTy&&YB%#icV%!co!`xI;wkKO{_1LCI<;)e4M z3ry3OvSU8m^AoMo57@z22O%z75#r*q)qEX+Ur|GM7)C8b_8#PhKJ zQR9C9z!J@WgQS1o+x;6N#V8BfZ89KqU!pE19RZZ)JfRI)0E~tMNGhWMdQm{7r>-z5 zXQ)V0N$tJd>P9)4JTK_k#BXKfy$(IM&Nx0)4EH6D!X?%(g9>_atDAl%fGYQ~ES z(zR7SO;`-X2TY(5`(*3MHLOW#Qx38>=}}(~Zhl@9-`Jr~(*GjGCzniQi{0y1?T|N@ zWQvRl*YhOJdGCU*{j`={^S^$??d;m9G(WF6+|DShkeHLUt#(g;<`D;Yf}DEOB$d>@M-@8ie@wuEmMo8##91}H6(-P(=PeAB1qp+KbcOHE7NsN zI8g-XScKkVhdK|IKF9RKVF)Xf&32`L`^sBFTDN^Bt-B$$`IdGnncyC8!9t>~`8UIk}nE7tzo*j*z)27=J`TrLLg-G~ih zm47gu)JJ&E45yG4^>O%9vU%Zx zM)wY=*7VDI&B+!)#*kQ7Iov)pDH)EY5>^h&_ft}4_yL2QtEQ06)eX;~O~K}C#3A|{ zZ?ZZsg5Sf3Z+{5&DO>`}1LHvkwJ8T@XD2?)*h|R`=8n(jc)ebb*p8iMm1g3Km|IhP zUh9|=TIF*A*KGVhl(nRclcw=M9Lhih0KoR&9_>GP)XCJ!)Y!$+-j3G7(9Y!lBh+b3 zYkO?=KV5#HhrpdxDtcY#>=j~46gR8_NZ^t0l&~gVX^H98sZ?p!nrRn(yD+=&@i}`6 zdqMq3;~D!7JIq|(Z!RLaNN#yeH3x-Ux{H+*8B=_#%1*BD8OKpHp(I{e>eLG=oVIG# zuICI8UB)Su%ml&73$N)s+~4QfQ>!Ye*$K}FPpRsxxjmk)vU+`)`n@^&gMVz2Sy+i% z5_#0eZCJE`Y-Jr2(wb{en`ut1Q~f0Yb?2$fk(to%RM|R^oMd{DdP&Za{bjb$8*BiH zinXL0h*38aEe8BMg(ub-|mZfS8Pe<_)5e%W!P800|WdT+c@L$U` zn{yf}*BK=3rNIz}-u=I2Q=6+bq3O|=6YH?TAqNATQP#$BX|dga7NYt`8876VmW7zZ z;#+olpXuWm`s#hVZ+_9IMN_efE0!h1HoqhbEIfk91X1PoIRlB74&8eQfFqX32vaFI z$vE5O?ht(tWUwJK6J=PLpk^(@;D=G6u#QPK_F>U!W=3#f&Q1Z=Jga_X#iz08j}mx& z+gQT!xD423slq%J=C@ro1ud$QS{Z;sl#RpL>ZmA>D-aVX#nI0J8;Mc5RlbCI0(dBV z9cwMHrSI^nwqFzW*!wHw*UG}==7cIJUMm0QVpcTa&`Xa{>UPHw2Mq2O5KXB2x^hSM zh2!Fh7QrzZPyO21w0QSazQ?G*giJ9aU2&G4&+ms|5-8fQ6LY6fQY(Pl@m@3&ku>so;vm7j!cC2;WP+7a?IK zJwenE;cvc(K8sPZN_mG-$Xj*Fb3W0r`w*G{_$0`OHhmV*ra8}kJpq=$xb{!VQhPTu zw2QqL!M&-Gcoq*Jn^BVaToz``I#^{01Yrd9jXi^a++_vqp+gHvQ)q=M=C78vQvja` zwOoIufavbm@YtTS7G;aQ>`I^Q6SAE)u1PfC%c*=Y%I3eKQyP;~A}M6P$tDX#cpTWF zeJhM}Cc8~B?ZB%5hj4DNcCWa#2NImUW2{(4gaK45lnAh|PIZV3oQy!OaCCNBU*5u2 zrA*=%>BN}oLFO_NS2VG!#5V`A;W#IntHuhpqs=FJ6fJXlf3+H*VD`A1=N7vw0zN7l z-bzrinn`nI`YPl`4*{)rB|Ep>YIs{8&DjFXWLu84PY{WK{io!FoYomy&_vn0epg72 zz5^Q~H6`lhiwe$zCLp!%DonHWpiak+uz%n+Z%>#%(axu=1Fry}e`=-H?Nt&#Apj`t zHQ1tH&(Z4|)&PoU=(hN71b*BB4{!lYVd{H1Itn6PK~<_ESr>}dqr+cM0&xgC%HA6v zJkQKD(?B%CfOdVuCmHdOT1(W15^#&@j88S&@;+OTwp(+OMv`U7bmGX4k0$l*2Yu9o zfdk9po+^})Tav<9!+B>5#0nsuOUVo&{83AHib)^5Qhw5OfKc)m>OikuMOX~Lmh*{W zTL$&vpdhf3agFkV++A=i{S8ig&QfTd<7~wPyTl0zZiiE`RJKQ%IT`l2YroXlxx-{JS)y$|AykUcH0rM;WqH@VpM*lTJyeJ&ms79L*7Yr+5@bt6 zFKE3+fM@LL9VHbr80Q0XCB)+G3t{0)Tty$)sse9WK%~8$v&a5zRE`B)XZF8uHG1CG zf1l7M@^X(qXQU{Sb*6z;VYC26*VS0vp1tnWLZ^Tvw0$>9o0wZLErvH} z1hV!F$cpvH#14aO>Q{J`b_X2_kz=)6DpBSl(py2hZ^2kV08ev;HN5f>-&#A@cuxFb z_#MKJ+!b(mP2fJQZqqd%2;T*N?B%ppv6N1O?%mu0V`X8cb}%?hWFcjV zFz`{>Uba|B5nHCCSot8Iir>SAwu=NntH+MA1(d6&Ahy!YZxbU&REq=X2JkxZ{32#8 zrnfNOfDLL>Wi}oV8>q+Vg6U3OMz~wD9I(dG&QrV6%Q1ooX?;bpy3^ulnlsd_Yr;)Y zO)pD)@$7ij-AlF1Bj$!v7hb<1x7I_}G%Eh2edZql*olz&?J9}%TC^%#HUIc2FA


O?dKbwZ*dw8`|m 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 hTf_Iau>VElkP!#@a2x^vAb { - config.set({ - ...options, - logLevel: config.LOG_INFO, - files: [ - '../src/**/*.spec.ts', - '../src/test/karma/bootstrap.ts', - ], - preprocessors: { - '../src/**/*.spec.ts': ['webpack'], - '../src/test/karma/bootstrap.ts': ['webpack'], - }, - }); -}; diff --git a/packages/js-dash-sdk/karma/karma.functional.conf.js b/packages/js-dash-sdk/karma/karma.functional.conf.js deleted file mode 100644 index 94c82c0ae2d..00000000000 --- a/packages/js-dash-sdk/karma/karma.functional.conf.js +++ /dev/null @@ -1,16 +0,0 @@ -const options = require('./options'); - -module.exports = (config) => { - config.set({ - ...options, - logLevel: config.LOG_INFO, - files: [ - '../src/test/karma/bootstrap.ts', - '../tests/functional/sdk.js', - ], - preprocessors: { - '../src/test/karma/bootstrap.ts': ['webpack'], - '../tests/functional/sdk.js': ['webpack'], - }, - }); -}; diff --git a/packages/js-dash-sdk/karma/options.js b/packages/js-dash-sdk/karma/options.js deleted file mode 100644 index 0a068894e94..00000000000 --- a/packages/js-dash-sdk/karma/options.js +++ /dev/null @@ -1,59 +0,0 @@ -/* eslint-disable import-x/no-extraneous-dependencies */ -const webpack = require('webpack'); -const dotenvSafe = require('dotenv-safe'); - -const karmaMocha = require('karma-mocha'); -const karmaMochaReporter = require('karma-mocha-reporter'); -const karmaChai = require('karma-chai'); -const karmaChromeLauncher = require('karma-chrome-launcher'); -const karmaFirefoxLauncher = require('karma-firefox-launcher'); -const karmaWebpack = require('karma-webpack'); -const webpackBaseConfig = require('../webpack.base.config'); - -let env = {}; -if (process.env.LOAD_ENV) { - const dotenvResult = dotenvSafe.config(); - if (dotenvResult.error) { - throw dotenvResult.error; - } - env = dotenvResult.parsed; -} - -module.exports = { - frameworks: ['mocha', 'chai', 'webpack'], - webpack: { - ...webpackBaseConfig, - mode: 'development', - plugins: [ - ...webpackBaseConfig.plugins, - new webpack.EnvironmentPlugin( - env, - ), - ], - }, - reporters: ['mocha'], - port: 9876, - colors: true, - autoWatch: false, - browsers: ['ChromeHeadlessInsecure'], - singleRun: false, - concurrency: Infinity, - browserNoActivityTimeout: 7 * 60 * 1000, // 30000 default - browserDisconnectTimeout: 3 * 2000, // 2000 default - pingTimeout: 3 * 5000, // 5000 default - plugins: [ - karmaMocha, - karmaMochaReporter, - karmaChai, - karmaChromeLauncher, - karmaFirefoxLauncher, - karmaWebpack, - ], - customLaunchers: { - ChromeHeadlessInsecure: { - base: 'ChromeHeadless', - flags: ['--allow-insecure-localhost'], - displayName: 'Chrome w/o security', - }, - }, -}; diff --git a/packages/js-dash-sdk/package.json b/packages/js-dash-sdk/package.json index 6e01f738353..4e8fdf536e0 100644 --- a/packages/js-dash-sdk/package.json +++ b/packages/js-dash-sdk/package.json @@ -2,20 +2,23 @@ "name": "dash", "version": "6.1.0-dev.5", "description": "Dash library for JavaScript/TypeScript ecosystem (Wallet, DAPI, Primitives, BLS, ...)", + "type": "module", "main": "build/index.js", - "unpkg": "dist/dash.min.js", - "browser": "dist/dash.min.js", + "exports": { + ".": "./build/index.js", + "./*": "./build/*" + }, "types": "build/index.d.ts", + "engines": { + "node": ">=18.18" + }, "scripts": { - "start:dev": "nodemon --exec 'yarn run build && yarn run test:unit'", "start:ts": "tsc -p tsconfig.build.json --watch", - "build": "yarn run build:ts && webpack --stats-error-details", + "build": "yarn run build:ts", "build:ts": "tsc -p tsconfig.build.json", "lint": "eslint .", "lint:fix": "eslint . --fix", - "test": "yarn run test:types && yarn run test:unit && yarn run test:browsers", - "test:browsers": "karma start ./karma/karma.conf.js --single-run", - "test:browsers:functional": "LOAD_ENV=true karma start ./karma/karma.functional.conf.js --single-run", + "test": "yarn run test:types && yarn run test:unit", "test:unit": "tsc -p tsconfig.mocha.json && mocha build/**/*.spec.js", "test:functional": "yarn run build:ts && LOAD_ENV=true mocha --recursive tests/functional/**/*.js", "test:types": "yarn pnpify tsd", @@ -48,10 +51,7 @@ "@dashevo/masternode-reward-shares-contract": "workspace:*", "@dashevo/wallet-lib": "workspace:*", "@dashevo/wasm-dpp": "workspace:*", - "@dashevo/withdrawals-contract": "workspace:*", - "bs58": "^4.0.1", - "node-inspect-extracted": "^1.0.8", - "winston": "^3.2.1" + "@dashevo/withdrawals-contract": "workspace:*" }, "devDependencies": { "@types/chai": "^4.3.11", @@ -61,47 +61,19 @@ "@types/sinon": "^9.0.4", "@types/sinon-chai": "^3.2.4", "@yarnpkg/pnpify": "^4.0.0-rc.42", - "assert": "^2.0.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", "chai": "^4.3.10", "chai-as-promised": "^7.1.1", "chance": "^1.1.6", - "crypto-browserify": "^3.12.1", "dirty-chai": "^2.0.1", "dotenv-safe": "^8.2.0", "eslint": "^9.18.0", - "events": "^3.3.0", - "https-browserify": "^1.0.0", - "karma": "^6.4.3", - "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^3.1.0", - "karma-firefox-launcher": "^2.1.2", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-webpack": "^5.0.0", "mocha": "^11.1.0", - "net": "^1.0.2", "nodemon": "^2.0.20", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", "rimraf": "^3.0.2", "sinon": "^18.0.1", "sinon-chai": "^3.7.0", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", - "terser-webpack-plugin": "^5.3.11", - "tls": "^0.0.1", - "ts-loader": "^9.5.0", - "ts-mock-imports": "^1.3.0", "ts-node": "^10.9.2", "tsd": "^0.28.1", - "typescript": "^5.7.3", - "url": "^0.11.3", - "util": "^0.12.4", - "webpack": "^5.104.0", - "webpack-cli": "^4.9.1" + "typescript": "^5.7.3" } } diff --git a/packages/js-dash-sdk/src/SDK/Client/Client.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Client.spec.ts index ce4d8578ba2..acdaa1196b5 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Client.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Client.spec.ts @@ -1,20 +1,22 @@ import { expect } from 'chai'; -import { Transaction, BlockHeader, PrivateKey } from '@dashevo/dashcore-lib'; -import { IdentityPublicKey, IdentityPublicKeyWithWitness, StateTransitionTypes } from '@dashevo/wasm-dpp'; -import { Client } from './index'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction, BlockHeader, PrivateKey } = dashcore; +import wasmDpp from '@dashevo/wasm-dpp'; +const { IdentityPublicKey, IdentityPublicKeyWithWitness, StateTransitionTypes } = wasmDpp; +import { Client } from './index.js'; import 'mocha'; -import { createFakeInstantLock } from '../../utils/createFakeIntantLock'; +import { createFakeInstantLock } from '../../utils/createFakeIntantLock.js'; -import { StateTransitionBroadcastError } from '../../errors/StateTransitionBroadcastError'; +import { StateTransitionBroadcastError } from '../../errors/StateTransitionBroadcastError.js'; -import { createIdentityFixtureInAccount } from '../../test/fixtures/createIdentityFixtureInAccount'; +import { createIdentityFixtureInAccount } from '../../test/fixtures/createIdentityFixtureInAccount.js'; -import { createAndAttachTransportMocksToClient } from '../../test/mocks/createAndAttachTransportMocksToClient'; -import { createTransactionInAccount } from '../../test/fixtures/createTransactionFixtureInAccount'; +import { createAndAttachTransportMocksToClient } from '../../test/mocks/createAndAttachTransportMocksToClient.js'; +import { createTransactionInAccount } from '../../test/fixtures/createTransactionFixtureInAccount.js'; -const getDocumentsFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDocumentsFixture'); -const getDataContractFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'); +import getDocumentsFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDocumentsFixture.js'; +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; const blockHeaderFixture = '00000020e2bddfb998d7be4cc4c6b126f04d6e4bd201687523ded527987431707e0200005520320b4e263bec33e08944656f7ce17efbc2c60caab7c8ed8a73d413d02d3a169d555ecdd6021e56d000000203000500010000000000000000000000000000000000000000000000000000000000000000ffffffff050219250102ffffffff0240c3609a010000001976a914ecfd5aaebcbb8f4791e716e188b20d4f0183265c88ac40c3609a010000001976a914ecfd5aaebcbb8f4791e716e188b20d4f0183265c88ac0000000046020019250000476416132511031b71167f4bb7658eab5c3957d79636767f83e0e18e2b9ed7f8000000000000000000000000000000000000000000000000000000000000000003000600000000000000fd4901010019250000010001d02e9ee1b14c022ad6895450f3375a8e9a87f214912d4332fa997996d2000000320000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'; const privateKeyFixture = '9b67f852093bc61cea0eeca38599dbfba0de28574d2ed9b99d10d33dc1bde7b2'; @@ -38,9 +40,12 @@ describe('Dash - Client', function suite() { client = new Client({ network: 'testnet', + // wallet-lib's WalletOptions type is too narrow under NodeNext; + // it doesn't expose HDPrivateKey / mnemonic. Cast to bypass. + // eslint-disable-next-line @typescript-eslint/no-explicit-any wallet: { HDPrivateKey: testHDKey, - }, + } as any, }); ({ @@ -89,10 +94,11 @@ describe('Dash - Client', function suite() { it('should initiate wallet-lib with a mnemonic', async () => { client = new Client({ + // eslint-disable-next-line @typescript-eslint/no-explicit-any wallet: { mnemonic: testMnemonic, offlineMode: true, - }, + } as any, }); expect(client.wallet).to.exist; expect(client.wallet!.offlineMode).to.be.equal(true); @@ -109,11 +115,12 @@ describe('Dash - Client', function suite() { // eslint-disable-next-line new Client({ network: 'testnet', + // eslint-disable-next-line @typescript-eslint/no-explicit-any wallet: { mnemonic: testMnemonic, offlineMode: true, network: 'mainnet', - }, + } as any, }); expect.fail('should throw an error'); diff --git a/packages/js-dash-sdk/src/SDK/Client/Client.ts b/packages/js-dash-sdk/src/SDK/Client/Client.ts index b3f4df7ae54..56b43c46c55 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Client.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Client.ts @@ -1,14 +1,21 @@ import { EventEmitter } from 'events'; import { Account, Wallet } from '@dashevo/wallet-lib'; -import DAPIClientTransport from '@dashevo/wallet-lib/src/transport/DAPIClientTransport/DAPIClientTransport'; -import { Network } from '@dashevo/dashcore-lib'; +import DAPIClientTransport from '@dashevo/wallet-lib/src/transport/DAPIClientTransport/DAPIClientTransport.js'; +import dashcore from '@dashevo/dashcore-lib'; +const { Network } = dashcore; +import type { Network as NetworkType } from '@dashevo/dashcore-lib'; +type Network = NetworkType; import DAPIClient from '@dashevo/dapi-client'; -import { contractId as dpnsContractId } from '@dashevo/dpns-contract/lib/systemIds'; -import { contractId as dashpayContractId } from '@dashevo/dashpay-contract/lib/systemIds'; -import { contractId as masternodeRewardSharesContractId } from '@dashevo/masternode-reward-shares-contract/lib/systemIds'; -import { contractId as withdrawalsContractId } from '@dashevo/withdrawals-contract/lib/systemIds'; -import { Platform } from './Platform'; -import { ClientApps, ClientAppsOptions } from './ClientApps'; +import dpnsSystemIds from '@dashevo/dpns-contract/lib/systemIds.js'; +const { contractId: dpnsContractId } = dpnsSystemIds; +import dashpaySystemIds from '@dashevo/dashpay-contract/lib/systemIds.js'; +const { contractId: dashpayContractId } = dashpaySystemIds; +import masternodeRewardSharesSystemIds from '@dashevo/masternode-reward-shares-contract/lib/systemIds.js'; +const { contractId: masternodeRewardSharesContractId } = masternodeRewardSharesSystemIds; +import withdrawalsSystemIds from '@dashevo/withdrawals-contract/lib/systemIds.js'; +const { contractId: withdrawalsContractId } = withdrawalsSystemIds; +import { Platform } from './Platform/index.js'; +import { ClientApps, ClientAppsOptions } from './ClientApps.js'; export interface WalletOptions extends Wallet.IWalletOptions { defaultAccountIndex?: number; @@ -102,8 +109,10 @@ export class Client extends EventEmitter { // Initialize a wallet if `wallet` option is preset if (this.options.wallet !== undefined) { - if (this.options.wallet.network !== undefined - && this.options.wallet.network !== this.network) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const walletOpts = this.options.wallet as any; + if (walletOpts.network !== undefined + && walletOpts.network !== this.network) { throw new Error('Wallet and Client networks are different'); } diff --git a/packages/js-dash-sdk/src/SDK/Client/ClientApps.spec.ts b/packages/js-dash-sdk/src/SDK/Client/ClientApps.spec.ts index 0a1aed20d98..6af53edfd24 100644 --- a/packages/js-dash-sdk/src/SDK/Client/ClientApps.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/ClientApps.spec.ts @@ -1,6 +1,7 @@ -import { Identifier } from '@dashevo/wasm-dpp'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; import { expect } from 'chai'; -import { ClientApps } from './ClientApps'; +import { ClientApps } from './ClientApps.js'; import 'mocha'; describe('ClientApps', () => { diff --git a/packages/js-dash-sdk/src/SDK/Client/ClientApps.ts b/packages/js-dash-sdk/src/SDK/Client/ClientApps.ts index c429aa394e6..9a1c68c2e8a 100644 --- a/packages/js-dash-sdk/src/SDK/Client/ClientApps.ts +++ b/packages/js-dash-sdk/src/SDK/Client/ClientApps.ts @@ -1,4 +1,7 @@ -import { Identifier } from '@dashevo/wasm-dpp'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; +import type { Identifier as IdentifierType } from '@dashevo/wasm-dpp'; +type Identifier = IdentifierType; /** * Interface for ClientApps diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/Fetcher.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/Fetcher.spec.ts index 42cd2a07663..a18938a9875 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/Fetcher.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/Fetcher.spec.ts @@ -1,6 +1,7 @@ -import { Identifier } from '@dashevo/wasm-dpp'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; import { expect } from 'chai'; -import Fetcher from './index'; +import Fetcher from './index.js'; describe('Dash - Fetcher', () => { let fetcher: Fetcher; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/Fetcher.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/Fetcher.ts index 47817e81169..d95157d12f8 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/Fetcher.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/Fetcher.ts @@ -1,15 +1,18 @@ import DAPIClient from '@dashevo/dapi-client'; -import { Identifier } from '@dashevo/wasm-dpp/dist'; -import { GetDataContractResponse } from '@dashevo/dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse'; -import { GetIdentityResponse } from '@dashevo/dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse'; - -import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'; -import { GetDocumentsResponse } from '@dashevo/dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; +import type { Identifier as IdentifierType } from '@dashevo/wasm-dpp'; +type Identifier = IdentifierType; +import { GetDataContractResponse } from '@dashevo/dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js'; +import { GetIdentityResponse } from '@dashevo/dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js'; + +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; +import { GetDocumentsResponse } from '@dashevo/dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js'; import { GetDataContractHistoryResponse, -} from '@dashevo/dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse'; -import withRetry from './withRetry'; -import { QueryOptions } from '../types'; +} from '@dashevo/dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.js'; +import withRetry from './withRetry.js'; +import { QueryOptions } from '../types.js'; type FetcherOptions = { /** diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/index.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/index.ts index d0ed4633228..ae8a6d4094f 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/index.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/index.ts @@ -1,3 +1,3 @@ -import Fetcher from './Fetcher'; +import Fetcher from './Fetcher.js'; export default Fetcher; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/withRetry.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/withRetry.ts index 031601620ed..6c21ccb8ff4 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/withRetry.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/Fetcher/withRetry.ts @@ -1,5 +1,5 @@ -import { fibonacci } from '../../../../utils/fibonacci'; -import { wait } from '../../../../utils/wait'; +import { fibonacci } from '../../../../utils/fibonacci.js'; +import { wait } from '../../../../utils/wait.js'; /** * Maximum number of retry attempts diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/IStateTransitionResult.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/IStateTransitionResult.ts index 08e562082b4..75ac6e81b20 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/IStateTransitionResult.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/IStateTransitionResult.ts @@ -1,5 +1,5 @@ -import { Metadata } from '@dashevo/dapi-client/lib/methods/platform/response/Metadata'; -import { IPlatformStateProof } from './IPlatformStateProof'; +import { Metadata } from '@dashevo/dapi-client/lib/methods/platform/response/Metadata.js'; +import { IPlatformStateProof } from './IPlatformStateProof.js'; export interface IStateTransitionResult { metadata: Metadata, diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/NonceManager/NonceManager.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/NonceManager/NonceManager.spec.ts index 9b3eed06618..24a9f26d23f 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/NonceManager/NonceManager.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/NonceManager/NonceManager.spec.ts @@ -1,6 +1,7 @@ -import { Identifier } from '@dashevo/wasm-dpp'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; import { expect } from 'chai'; -import NonceManager, { NONCE_FETCH_INTERVAL } from './NonceManager'; +import NonceManager, { NONCE_FETCH_INTERVAL } from './NonceManager.js'; describe('Dash - NonceManager', () => { let nonceManager: NonceManager; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/NonceManager/NonceManager.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/NonceManager/NonceManager.ts index 3b522566c70..a1527df2243 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/NonceManager/NonceManager.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/NonceManager/NonceManager.ts @@ -1,5 +1,8 @@ import DAPIClient from '@dashevo/dapi-client'; -import { Identifier } from '@dashevo/wasm-dpp'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; +import type { Identifier as IdentifierType } from '@dashevo/wasm-dpp'; +type Identifier = IdentifierType; type NonceState = { value: bigint, diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/Platform.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/Platform.spec.ts index e5cfa443305..52c022b7e59 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/Platform.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/Platform.spec.ts @@ -1,8 +1,8 @@ import { expect } from 'chai'; // import { getLatestProtocolVersion } from '@dashevo/wasm-dpp'; -import { Platform } from './index'; +import { Platform } from './index.js'; import 'mocha'; -import Client from '../Client'; +import Client from '../Client.js'; describe('Dash - Platform', () => { it('should provide expected class', () => { diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/Platform.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/Platform.ts index 873fe62c53d..88e830c54f8 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/Platform.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/Platform.ts @@ -1,42 +1,43 @@ -import loadWasmDpp, { DashPlatformProtocol, getLatestProtocolVersion } from '@dashevo/wasm-dpp'; +import loadWasmDpp from '@dashevo/wasm-dpp'; +const { DashPlatformProtocol, getLatestProtocolVersion } = loadWasmDpp; import type { DPPModule } from '@dashevo/wasm-dpp'; import crypto from 'crypto'; -import Client from '../Client'; -import { IStateTransitionResult } from './IStateTransitionResult'; - -import createAssetLockTransaction from './createAssetLockTransaction'; - -import broadcastDocument from './methods/documents/broadcast'; -import createDocument from './methods/documents/create'; -import getDocument from './methods/documents/get'; - -import publishContract from './methods/contracts/publish'; -import updateContract from './methods/contracts/update'; -import createContract from './methods/contracts/create'; -import getContract from './methods/contracts/get'; -import getContractHistory from './methods/contracts/history'; - -import getIdentity from './methods/identities/get'; -import registerIdentity from './methods/identities/register'; -import topUpIdentity from './methods/identities/topUp'; -import creditTransferIdentity from './methods/identities/creditTransfer'; -import creditWithdrawal from './methods/identities/creditWithdrawal'; -import updateIdentity from './methods/identities/update'; -import createIdentityCreateTransition from './methods/identities/internal/createIdentityCreateTransition'; -import createIdentityTopUpTransition from './methods/identities/internal/createIdentityTopUpTransition'; -import createAssetLockProof from './methods/identities/internal/createAssetLockProof'; -import waitForCoreChainLockedHeight from './methods/identities/internal/waitForCoreChainLockedHeight'; - -import registerName from './methods/names/register'; -import resolveName from './methods/names/resolve'; -import resolveNameByRecord from './methods/names/resolveByRecord'; -import searchName from './methods/names/search'; -import broadcastStateTransition from './broadcastStateTransition'; - -import logger, { ConfigurableLogger } from '../../../logger'; -import Fetcher from './Fetcher'; -import NonceManager from './NonceManager/NonceManager'; +import Client from '../Client.js'; +import { IStateTransitionResult } from './IStateTransitionResult.js'; + +import createAssetLockTransaction from './createAssetLockTransaction.js'; + +import broadcastDocument from './methods/documents/broadcast.js'; +import createDocument from './methods/documents/create.js'; +import getDocument from './methods/documents/get.js'; + +import publishContract from './methods/contracts/publish.js'; +import updateContract from './methods/contracts/update.js'; +import createContract from './methods/contracts/create.js'; +import getContract from './methods/contracts/get.js'; +import getContractHistory from './methods/contracts/history.js'; + +import getIdentity from './methods/identities/get.js'; +import registerIdentity from './methods/identities/register.js'; +import topUpIdentity from './methods/identities/topUp.js'; +import creditTransferIdentity from './methods/identities/creditTransfer.js'; +import creditWithdrawal from './methods/identities/creditWithdrawal.js'; +import updateIdentity from './methods/identities/update.js'; +import createIdentityCreateTransition from './methods/identities/internal/createIdentityCreateTransition.js'; +import createIdentityTopUpTransition from './methods/identities/internal/createIdentityTopUpTransition.js'; +import createAssetLockProof from './methods/identities/internal/createAssetLockProof.js'; +import waitForCoreChainLockedHeight from './methods/identities/internal/waitForCoreChainLockedHeight.js'; + +import registerName from './methods/names/register.js'; +import resolveName from './methods/names/resolve.js'; +import resolveNameByRecord from './methods/names/resolveByRecord.js'; +import searchName from './methods/names/search.js'; +import broadcastStateTransition from './broadcastStateTransition.js'; + +import logger, { ConfigurableLogger } from '../../../logger/index.js'; +import Fetcher from './Fetcher/index.js'; +import NonceManager from './NonceManager/NonceManager.js'; /** * Interface for PlatformOpts @@ -246,6 +247,10 @@ export class Platform { // // Slash is missing before `dist` and TS compilation in consumers is breaking static async initializeDppModule(): Promise { - return loadWasmDpp(); + // wasm-dpp is CJS; under NodeNext the default import may resolve to the + // module namespace object instead of the callable. Unwrap defensively. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const load = (loadWasmDpp as any).default ?? loadWasmDpp; + return load(); } } diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/StateRepository.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/StateRepository.ts index 646fe148660..cb4f6494054 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/StateRepository.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/StateRepository.ts @@ -1,5 +1,14 @@ -import { DataContract, Identity, Identifier } from '@dashevo/wasm-dpp'; -import Client from '../Client'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { DataContract, Identity, Identifier } = wasmDpp; +import type { + DataContract as DataContractType, + Identity as IdentityType, + Identifier as IdentifierType, +} from '@dashevo/wasm-dpp'; +type DataContract = DataContractType; +type Identity = IdentityType; +type Identifier = IdentifierType; +import Client from '../Client.js'; class StateRepository { private readonly client: Client; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/broadcastStateTransition.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/broadcastStateTransition.ts index 9fb3d04e1f3..df14f766680 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/broadcastStateTransition.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/broadcastStateTransition.ts @@ -1,14 +1,11 @@ import crypto from 'crypto'; -import { Platform } from './Platform'; -import { StateTransitionBroadcastError } from '../../../errors/StateTransitionBroadcastError'; -import { IStateTransitionResult } from './IStateTransitionResult'; - -const ResponseError = require('@dashevo/dapi-client/lib/transport/errors/response/ResponseError'); -const InvalidRequestDPPError = require('@dashevo/dapi-client/lib/transport/errors/response/InvalidRequestDPPError'); - -const createGrpcTransportError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/createGrpcTransportError'); - -const GrpcError = require('@dashevo/grpc-common/lib/server/error/GrpcError'); +import ResponseError from '@dashevo/dapi-client/lib/transport/errors/response/ResponseError.js'; +import InvalidRequestDPPError from '@dashevo/dapi-client/lib/transport/errors/response/InvalidRequestDPPError.js'; +import createGrpcTransportError from '@dashevo/dapi-client/lib/transport/GrpcTransport/createGrpcTransportError.js'; +import GrpcError from '@dashevo/grpc-common/lib/server/error/GrpcError.js'; +import { Platform } from './Platform.js'; +import { StateTransitionBroadcastError } from '../../../errors/StateTransitionBroadcastError.js'; +import { IStateTransitionResult } from './IStateTransitionResult.js'; /** * @param {Platform} platform diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/createAssetLockTransaction.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/createAssetLockTransaction.ts index 6350677dff5..5f276bc973a 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/createAssetLockTransaction.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/createAssetLockTransaction.ts @@ -1,8 +1,19 @@ -import { - PrivateKey, Transaction, Script, Address, Opcode, +import dashcore from '@dashevo/dashcore-lib'; +const { + PrivateKey, + Transaction, + Script, + Address, + Opcode, +} = dashcore; +import type { + PrivateKey as PrivateKeyType, + Transaction as TransactionType, } from '@dashevo/dashcore-lib'; +type PrivateKey = PrivateKeyType; +type Transaction = TransactionType; import { utils } from '@dashevo/wallet-lib'; -import { Platform } from './Platform'; +import { Platform } from './Platform.js'; // We're creating a new transaction every time and the index is always 0 const ASSET_LOCK_OUTPUT_INDEX = 0; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/index.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/index.ts index be13241c9eb..397383c0cf6 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/index.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/index.ts @@ -1 +1 @@ -export { Platform, PlatformOpts } from './Platform'; +export { Platform, PlatformOpts } from './Platform.js'; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/create.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/create.ts index 8b40c79b141..0f3dc403ef5 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/create.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/create.ts @@ -1,4 +1,4 @@ -import { Platform } from '../../Platform'; +import { Platform } from '../../Platform.js'; /** * Create and prepare contracts for the platform diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/get.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/get.spec.ts index dad46135ac3..14a26bc249c 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/get.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/get.spec.ts @@ -2,16 +2,16 @@ import { expect } from 'chai'; import loadDpp from '@dashevo/wasm-dpp'; -import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'; +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; -import getResponseMetadataFixture from '../../../../../test/fixtures/getResponseMetadataFixture'; -import get from './get'; -import identitiesFixtures from '../../../../../../tests/fixtures/identities.json'; +import getResponseMetadataFixture from '../../../../../test/fixtures/getResponseMetadataFixture.js'; +import get from './get.js'; +import identitiesFixtures from '../../../../../../tests/fixtures/identities.json' with { type: 'json' }; import 'mocha'; -import { ClientApps } from '../../../ClientApps'; +import { ClientApps } from '../../../ClientApps.js'; -const GetDataContractResponse = require('@dashevo/dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse'); -const NotFoundError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'); +import GetDataContractResponse from '@dashevo/dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js'; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; let client; let fetcher; @@ -38,7 +38,9 @@ let apps; describe('Client - Platform - Contracts - .get()', () => { before(async function before() { - await loadDpp(); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const load = (loadDpp as any).default ?? loadDpp; + await load(); dataContractFixture = await getDataContractFixture(); metadataFixture = getResponseMetadataFixture(); diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/get.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/get.ts index 1a08b3d78a0..9170d92dcb8 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/get.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/get.ts @@ -1,8 +1,10 @@ -import { Identifier } from '@dashevo/wasm-dpp'; -import { GetDataContractResponse } from '@dashevo/dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse'; -import { Platform } from '../../Platform'; - -const NotFoundError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'); +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; +import type { Identifier as IdentifierType } from '@dashevo/wasm-dpp'; +type Identifier = IdentifierType; +import GetDataContractResponse from '@dashevo/dapi-client/lib/methods/platform/getDataContract/GetDataContractResponse.js'; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; +import { Platform } from '../../Platform.js'; declare type ContractIdentifier = string | Identifier; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/history.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/history.spec.ts index ca874e34ba3..00e716a15fc 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/history.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/history.spec.ts @@ -2,17 +2,17 @@ import { expect } from 'chai'; import loadDpp from '@dashevo/wasm-dpp'; -import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'; +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; -import getResponseMetadataFixture from '../../../../../test/fixtures/getResponseMetadataFixture'; -import history from './history'; -import identitiesFixtures from '../../../../../../tests/fixtures/identities.json'; +import getResponseMetadataFixture from '../../../../../test/fixtures/getResponseMetadataFixture.js'; +import history from './history.js'; +import identitiesFixtures from '../../../../../../tests/fixtures/identities.json' with { type: 'json' }; import 'mocha'; -import { ClientApps } from '../../../ClientApps'; +import { ClientApps } from '../../../ClientApps.js'; -const DataContractHistoryEntry = require('@dashevo/dapi-client/lib/methods/platform/getDataContractHistory/DataContractHistoryEntry'); -const GetDataContractHistoryResponse = require('@dashevo/dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse'); -const NotFoundError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'); +import DataContractHistoryEntry from '@dashevo/dapi-client/lib/methods/platform/getDataContractHistory/DataContractHistoryEntry.js'; +import GetDataContractHistoryResponse from '@dashevo/dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.js'; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; let client; let fetcher; @@ -39,7 +39,9 @@ let apps; describe('Client - Platform - Contracts - .history()', () => { before(async function before() { - await loadDpp(); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const load = (loadDpp as any).default ?? loadDpp; + await load(); dataContractFixture = await getDataContractFixture(); metadataFixture = getResponseMetadataFixture(); diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/history.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/history.ts index 55d2d9985ef..7b12125c012 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/history.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/history.ts @@ -1,10 +1,14 @@ -import { DataContract, Identifier } from '@dashevo/wasm-dpp'; -import { - GetDataContractHistoryResponse, -} from '@dashevo/dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse'; -import { Platform } from '../../Platform'; - -const NotFoundError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'); +import wasmDpp from '@dashevo/wasm-dpp'; +const { DataContract, Identifier } = wasmDpp; +import type { + DataContract as DataContractType, + Identifier as IdentifierType, +} from '@dashevo/wasm-dpp'; +type DataContract = DataContractType; +type Identifier = IdentifierType; +import GetDataContractHistoryResponse from '@dashevo/dapi-client/lib/methods/platform/getDataContractHistory/GetDataContractHistoryResponse.js'; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; +import { Platform } from '../../Platform.js'; declare type ContractIdentifier = string | Identifier; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/publish.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/publish.ts index 7eb12f7c053..16fb9dc19a4 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/publish.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/publish.ts @@ -1,7 +1,16 @@ -import { Identity, DataContract, DataContractCreateTransition } from '@dashevo/wasm-dpp'; -import { Platform } from '../../Platform'; -import broadcastStateTransition from '../../broadcastStateTransition'; -import { signStateTransition } from '../../signStateTransition'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identity, DataContract, DataContractCreateTransition } = wasmDpp; +import type { + Identity as IdentityType, + DataContract as DataContractType, + DataContractCreateTransition as DataContractCreateTransitionType, +} from '@dashevo/wasm-dpp'; +type Identity = IdentityType; +type DataContract = DataContractType; +type DataContractCreateTransition = DataContractCreateTransitionType; +import { Platform } from '../../Platform.js'; +import broadcastStateTransition from '../../broadcastStateTransition.js'; +import { signStateTransition } from '../../signStateTransition.js'; /** * Publish contract onto the platform diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/update.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/update.ts index 7da552988ba..6f06eefa581 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/update.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/contracts/update.ts @@ -1,6 +1,6 @@ -import { Platform } from '../../Platform'; -import broadcastStateTransition from '../../broadcastStateTransition'; -import { signStateTransition } from '../../signStateTransition'; +import { Platform } from '../../Platform.js'; +import broadcastStateTransition from '../../broadcastStateTransition.js'; +import { signStateTransition } from '../../signStateTransition.js'; /** * Publish contract onto the platform diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/broadcast.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/broadcast.ts index 4a6a7a06026..fa055dc47d0 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/broadcast.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/broadcast.ts @@ -1,7 +1,10 @@ -import { ExtendedDocument } from '@dashevo/wasm-dpp'; -import { Platform } from '../../Platform'; -import broadcastStateTransition from '../../broadcastStateTransition'; -import { signStateTransition } from '../../signStateTransition'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { ExtendedDocument } = wasmDpp; +import type { ExtendedDocument as ExtendedDocumentType } from '@dashevo/wasm-dpp'; +type ExtendedDocument = ExtendedDocumentType; +import { Platform } from '../../Platform.js'; +import broadcastStateTransition from '../../broadcastStateTransition.js'; +import { signStateTransition } from '../../signStateTransition.js'; /** * Broadcast document onto the platform diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/create.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/create.ts index 25595a76b55..290f407d113 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/create.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/create.ts @@ -1,5 +1,8 @@ -import { ExtendedDocument } from '@dashevo/wasm-dpp'; -import { Platform } from '../../Platform'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { ExtendedDocument } = wasmDpp; +import type { ExtendedDocument as ExtendedDocumentType } from '@dashevo/wasm-dpp'; +type ExtendedDocument = ExtendedDocumentType; +import { Platform } from '../../Platform.js'; declare interface CreateOpts { [name:string]: any; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/get.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/get.spec.ts index f4dc8ed2829..3d9e77677e2 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/get.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/get.spec.ts @@ -1,12 +1,12 @@ -import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture'; -import generateRandomIdentifier from '@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync'; -import getDocumentsFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDocumentsFixture'; +import getDataContractFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDataContractFixture.js'; +import generateRandomIdentifier from '@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync.js'; +import getDocumentsFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getDocumentsFixture.js'; import { expect } from 'chai'; -import getResponseMetadataFixture from '../../../../../test/fixtures/getResponseMetadataFixture'; +import getResponseMetadataFixture from '../../../../../test/fixtures/getResponseMetadataFixture.js'; -import get from './get'; +import get from './get.js'; -const GetDocumentsResponse = require('@dashevo/dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse'); +import GetDocumentsResponse from '@dashevo/dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js'; describe('Client - Platform - Documents - .get()', () => { let platform; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/get.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/get.ts index f2540c20304..7059fe7caee 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/get.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/documents/get.ts @@ -1,8 +1,9 @@ -import { Identifier, ExtendedDocument, Metadata } from '@dashevo/wasm-dpp'; -import { GetDocumentsResponse } from '@dashevo/dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse'; -import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'; -import { Platform } from '../../Platform'; -import { QueryOptions, WhereCondition } from '../../types'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier, ExtendedDocument, Metadata } = wasmDpp; +import { GetDocumentsResponse } from '@dashevo/dapi-client/lib/methods/platform/getDocuments/GetDocumentsResponse.js'; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; +import { Platform } from '../../Platform.js'; +import { QueryOptions, WhereCondition } from '../../types.js'; /** * Prefetch contract diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/creditTransfer.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/creditTransfer.ts index 71c0f196584..fad54cd0c09 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/creditTransfer.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/creditTransfer.ts @@ -1,7 +1,14 @@ -import { Identifier, Identity } from '@dashevo/wasm-dpp'; -import broadcastStateTransition from '../../broadcastStateTransition'; -import { Platform } from '../../Platform'; -import { signStateTransition } from '../../signStateTransition'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier, Identity } = wasmDpp; +import type { + Identifier as IdentifierType, + Identity as IdentityType, +} from '@dashevo/wasm-dpp'; +type Identifier = IdentifierType; +type Identity = IdentityType; +import broadcastStateTransition from '../../broadcastStateTransition.js'; +import { Platform } from '../../Platform.js'; +import { signStateTransition } from '../../signStateTransition.js'; export async function creditTransfer( this: Platform, diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/creditWithdrawal.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/creditWithdrawal.ts index 359c569b4b7..6187a34b283 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/creditWithdrawal.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/creditWithdrawal.ts @@ -1,10 +1,16 @@ -import { Identity } from '@dashevo/wasm-dpp'; -import { Address, Script } from '@dashevo/dashcore-lib'; -import { Metadata } from '@dashevo/dapi-client/lib/methods/platform/response/Metadata'; -import broadcastStateTransition from '../../broadcastStateTransition'; -import { Platform } from '../../Platform'; -import { signStateTransition } from '../../signStateTransition'; -import { nearestGreaterFibonacci } from '../../../../../utils/fibonacci'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identity } = wasmDpp; +import type { Identity as IdentityType } from '@dashevo/wasm-dpp'; +type Identity = IdentityType; +import dashcore from '@dashevo/dashcore-lib'; +const { Address, Script } = dashcore; +import type { Address as AddressType } from '@dashevo/dashcore-lib'; +type Address = AddressType; +import { Metadata } from '@dashevo/dapi-client/lib/methods/platform/response/Metadata.js'; +import broadcastStateTransition from '../../broadcastStateTransition.js'; +import { Platform } from '../../Platform.js'; +import { signStateTransition } from '../../signStateTransition.js'; +import { nearestGreaterFibonacci } from '../../../../../utils/fibonacci.js'; export const STATUSES = { PENDING: 0, diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/get.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/get.ts index 8c572f79bac..5c652b8c634 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/get.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/get.ts @@ -1,8 +1,10 @@ -import { Identifier, Metadata } from '@dashevo/wasm-dpp'; -import { GetIdentityResponse } from '@dashevo/dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse'; -import { Platform } from '../../Platform'; - -const NotFoundError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'); +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier, Metadata } = wasmDpp; +import type { Identifier as IdentifierType } from '@dashevo/wasm-dpp'; +type Identifier = IdentifierType; +import GetIdentityResponse from '@dashevo/dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js'; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; +import { Platform } from '../../Platform.js'; /** * Get an identity from the platform diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createAssetLockProof.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createAssetLockProof.ts index 891d4ac0809..d33174fae15 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createAssetLockProof.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createAssetLockProof.ts @@ -1,7 +1,11 @@ -import { Transaction } from '@dashevo/dashcore-lib'; -import { Platform } from '../../../Platform'; - -const { InstantLockTimeoutError, TxMetadataTimeoutError } = require('@dashevo/wallet-lib/src/errors'); +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; +import type { Transaction as TransactionType } from '@dashevo/dashcore-lib'; +type Transaction = TransactionType; +import walletLibErrors from '@dashevo/wallet-lib/src/errors/index.js'; +import { Platform } from '../../../Platform.js'; + +const { InstantLockTimeoutError, TxMetadataTimeoutError } = walletLibErrors; /** * Creates a funding transaction for the platform identity diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createIdentityCreateTransition.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createIdentityCreateTransition.ts index 83ece7d2377..ee9daa83669 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createIdentityCreateTransition.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createIdentityCreateTransition.ts @@ -1,6 +1,10 @@ -import { PrivateKey } from '@dashevo/dashcore-lib'; -import { IdentityPublicKey } from '@dashevo/wasm-dpp'; -import { Platform } from '../../../Platform'; +import dashcore from '@dashevo/dashcore-lib'; +const { PrivateKey } = dashcore; +import type { PrivateKey as PrivateKeyType } from '@dashevo/dashcore-lib'; +type PrivateKey = PrivateKeyType; +import wasmDpp from '@dashevo/wasm-dpp'; +const { IdentityPublicKey } = wasmDpp; +import { Platform } from '../../../Platform.js'; /** * Creates a funding transaction for the platform identity diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createIdentityTopUpTransition.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createIdentityTopUpTransition.ts index dfc0a26bddd..7db253c56c7 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createIdentityTopUpTransition.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/createIdentityTopUpTransition.ts @@ -1,6 +1,10 @@ -import { PrivateKey } from '@dashevo/dashcore-lib'; -import { IdentityPublicKey } from '@dashevo/wasm-dpp'; -import { Platform } from '../../../Platform'; +import dashcore from '@dashevo/dashcore-lib'; +const { PrivateKey } = dashcore; +import type { PrivateKey as PrivateKeyType } from '@dashevo/dashcore-lib'; +type PrivateKey = PrivateKeyType; +import wasmDpp from '@dashevo/wasm-dpp'; +const { IdentityPublicKey } = wasmDpp; +import { Platform } from '../../../Platform.js'; /** * Creates a funding transaction for the platform identity diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/waitForCoreChainLockedHeight.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/waitForCoreChainLockedHeight.ts index 21c60199540..c674ecfbf93 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/waitForCoreChainLockedHeight.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/internal/waitForCoreChainLockedHeight.ts @@ -1,4 +1,4 @@ -import { Platform } from '../../../Platform'; +import { Platform } from '../../../Platform.js'; export async function waitForCoreChainLockedHeight( this : Platform, diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/register.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/register.ts index 432f70773e3..7be1ddbc85a 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/register.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/register.ts @@ -1,5 +1,5 @@ -import { Platform } from '../../Platform'; -import broadcastStateTransition from '../../broadcastStateTransition'; +import { Platform } from '../../Platform.js'; +import broadcastStateTransition from '../../broadcastStateTransition.js'; /** * Register identities to the platform diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/topUp.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/topUp.ts index 44b576fc0a7..d043e6f912c 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/topUp.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/topUp.ts @@ -1,7 +1,10 @@ -import { Identifier } from '@dashevo/wasm-dpp'; -import { Platform } from '../../Platform'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; +import type { Identifier as IdentifierType } from '@dashevo/wasm-dpp'; +type Identifier = IdentifierType; +import { Platform } from '../../Platform.js'; -import broadcastStateTransition from '../../broadcastStateTransition'; +import broadcastStateTransition from '../../broadcastStateTransition.js'; /** * Register identities to the platform diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/update.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/update.ts index 941e75d303b..7d898560120 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/update.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/identities/update.ts @@ -1,8 +1,15 @@ -import { Identity, IdentityPublicKey } from '@dashevo/wasm-dpp'; -import { Platform } from '../../Platform'; -import { signStateTransition } from '../../signStateTransition'; - -import broadcastStateTransition from '../../broadcastStateTransition'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identity, IdentityPublicKey } = wasmDpp; +import type { + Identity as IdentityType, + IdentityPublicKey as IdentityPublicKeyType, +} from '@dashevo/wasm-dpp'; +type Identity = IdentityType; +type IdentityPublicKey = IdentityPublicKeyType; +import { Platform } from '../../Platform.js'; +import { signStateTransition } from '../../signStateTransition.js'; + +import broadcastStateTransition from '../../broadcastStateTransition.js'; /** * Update platform identities diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/register.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/register.spec.ts index 17404c0fb07..1e98c7d96a8 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/register.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/register.spec.ts @@ -1,21 +1,11 @@ import { expect } from 'chai'; -import { ImportMock } from 'ts-mock-imports'; -import generateRandomIdentifier from '@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync'; +import generateRandomIdentifier from '@dashevo/wasm-dpp/lib/test/utils/generateRandomIdentifierAsync.js'; -import cryptoModule from 'crypto'; - -import register from './register'; -import { ClientApps } from '../../../ClientApps'; +import register from './register.js'; +import { ClientApps } from '../../../ClientApps.js'; describe('Platform', () => { - let randomBytesMock; - - before(() => { - randomBytesMock = ImportMock.mockFunction(cryptoModule, 'randomBytes', Buffer.alloc(32)); - }); - after(() => { - randomBytesMock.restore(); - }); + const randomBytesStub = (size: number) => Buffer.alloc(size); describe('Names', () => { describe('#register', () => { @@ -54,7 +44,7 @@ describe('Platform', () => { await register.call(platformMock, 'Dash', { identity: identityId, - }, identityMock); + }, identityMock, randomBytesStub); expect(platformMock.documents.create.getCall(0).args[0]).to.deep.equal('dpns.preorder'); expect(platformMock.documents.create.getCall(0).args[1]).to.deep.equal(identityMock); @@ -87,7 +77,7 @@ describe('Platform', () => { await register.call(platformMock, 'User.dash', { identity: identityId, - }, identityMock); + }, identityMock, randomBytesStub); expect(platformMock.documents.create.getCall(0).args[0]).to.deep.equal('dpns.preorder'); expect(platformMock.documents.create.getCall(0).args[1]).to.deep.equal(identityMock); @@ -120,7 +110,7 @@ describe('Platform', () => { try { await register.call(platformMock, 'user.dash', { identity: await generateRandomIdentifier(), - }, identityMock); + }, identityMock, randomBytesStub); } catch (e: any) { expect(e.message).to.equal('DPNS is required to register a new name.'); } diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/register.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/register.ts index 07f6576e782..1033db39f0f 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/register.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/register.ts @@ -1,9 +1,13 @@ -import { Identifier } from '@dashevo/wasm-dpp'; -import { Platform } from '../../Platform'; -import convertToHomographSafeChars from '../../../../../utils/convertToHomographSafeChars'; +import crypto from 'crypto'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; +import type { Identifier as IdentifierType } from '@dashevo/wasm-dpp'; +type Identifier = IdentifierType; +import { hash } from '@dashevo/wasm-dpp/lib/utils/hash.js'; +import { Platform } from '../../Platform.js'; +import convertToHomographSafeChars from '../../../../../utils/convertToHomographSafeChars.js'; -const crypto = require('crypto'); -const { hash } = require('@dashevo/wasm-dpp/lib/utils/hash'); +type RandomBytesFn = (size: number) => Buffer; /** * Register names to the platform @@ -13,6 +17,7 @@ const { hash } = require('@dashevo/wasm-dpp/lib/utils/hash'); * @param {Object} records - records object having only one of the following items * @param {string} [records.identity] * @param identity - identity + * @param randomBytes - injectable source of preorder-salt randomness (defaults to crypto.randomBytes); tests use this seam * * @returns registered domain document */ @@ -26,6 +31,7 @@ export async function register( getId(): Identifier; getPublicKeyById(number: number):any; }, + randomBytes: RandomBytesFn = crypto.randomBytes, ): Promise { await this.initialize(); @@ -44,7 +50,7 @@ export async function register( const [label] = nameLabels; const normalizedLabel = convertToHomographSafeChars(label); - const preorderSalt = crypto.randomBytes(32); + const preorderSalt = randomBytes(32); const isSecondLevelDomain = normalizedParentDomainName.length > 0; diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolve.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolve.spec.ts index 73605ba30f4..ebfe82362eb 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolve.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolve.spec.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; -import resolve from './resolve'; +import resolve from './resolve.js'; describe('Platform', () => { describe('Names', () => { diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolve.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolve.ts index 7e210bf060e..14baaac1719 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolve.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolve.ts @@ -1,5 +1,5 @@ -import convertToHomographSafeChars from '../../../../../utils/convertToHomographSafeChars'; -import { Platform } from '../../Platform'; +import convertToHomographSafeChars from '../../../../../utils/convertToHomographSafeChars.js'; +import { Platform } from '../../Platform.js'; /** * This method will allow you to resolve a DPNS record from its humanized name. diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolveByRecord.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolveByRecord.spec.ts index 82e4ccec596..1bde7ac23c0 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolveByRecord.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolveByRecord.spec.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; -import resolveByRecord from './resolveByRecord'; +import resolveByRecord from './resolveByRecord.js'; describe('Platform', () => { describe('Names', () => { diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolveByRecord.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolveByRecord.ts index 0bcd4b2a75c..ecbfbcc4158 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolveByRecord.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/resolveByRecord.ts @@ -1,5 +1,6 @@ -import { Identifier } from '@dashevo/wasm-dpp'; -import { Platform } from '../../Platform'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; +import { Platform } from '../../Platform.js'; /** * @param record - the exact name of the record to resolve diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/search.spec.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/search.spec.ts index 86310f9da36..a38137367a2 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/search.spec.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/search.spec.ts @@ -1,6 +1,6 @@ import { expect } from 'chai'; -import search from './search'; +import search from './search.js'; describe('Platform', () => { describe('Names', () => { diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/search.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/search.ts index e162bc1ba19..4ca8ad45d53 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/search.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/methods/names/search.ts @@ -1,6 +1,6 @@ -import { Platform } from '../../Platform'; +import { Platform } from '../../Platform.js'; -import convertToHomographSafeChars from '../../../../../utils/convertToHomographSafeChars'; +import convertToHomographSafeChars from '../../../../../utils/convertToHomographSafeChars.js'; /** * diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/signStateTransition.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/signStateTransition.ts index f8cee3bef06..22d49a31a8f 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/signStateTransition.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/signStateTransition.ts @@ -1,4 +1,4 @@ -import { Platform } from './Platform'; +import { Platform } from './Platform.js'; /** * diff --git a/packages/js-dash-sdk/src/SDK/Client/Platform/types.ts b/packages/js-dash-sdk/src/SDK/Client/Platform/types.ts index 2490655e63e..48c8bcaa148 100644 --- a/packages/js-dash-sdk/src/SDK/Client/Platform/types.ts +++ b/packages/js-dash-sdk/src/SDK/Client/Platform/types.ts @@ -1,4 +1,11 @@ -import { Identifier, ExtendedDocument } from '@dashevo/wasm-dpp'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier, ExtendedDocument } = wasmDpp; +import type { + Identifier as IdentifierType, + ExtendedDocument as ExtendedDocumentType, +} from '@dashevo/wasm-dpp'; +type Identifier = IdentifierType; +type ExtendedDocument = ExtendedDocumentType; /** * @param {WhereCondition[]} [where] - where diff --git a/packages/js-dash-sdk/src/SDK/Client/index.ts b/packages/js-dash-sdk/src/SDK/Client/index.ts index 82e03984991..2f09732ebe7 100644 --- a/packages/js-dash-sdk/src/SDK/Client/index.ts +++ b/packages/js-dash-sdk/src/SDK/Client/index.ts @@ -1 +1 @@ -export { Client } from './Client'; +export { Client } from './Client.js'; diff --git a/packages/js-dash-sdk/src/SDK/Core/Core.d.ts b/packages/js-dash-sdk/src/SDK/Core/Core.d.ts index 6f73a27d18c..223ccd12967 100644 --- a/packages/js-dash-sdk/src/SDK/Core/Core.d.ts +++ b/packages/js-dash-sdk/src/SDK/Core/Core.d.ts @@ -1,18 +1,4 @@ -import { - Transaction as _Transaction, - Address as _Address, - Block as _Block, - UnspentOutput as _UnspentOutput, - HDPublicKey as _HDPublicKey, - HDPrivateKey as _HDPrivateKey, - Mnemonic as _Mnemonic, - Network as _Network, - Input as _Input, - Output as _Output, - Script as _Script, - PublicKey as _PublicKey, - PrivateKey as _PrivateKey -} from '@dashevo/dashcore-lib'; +import { Transaction as _Transaction, Address as _Address, Block as _Block, UnspentOutput as _UnspentOutput, HDPublicKey as _HDPublicKey, HDPrivateKey as _HDPrivateKey, Mnemonic as _Mnemonic, Network as _Network, Input as _Input, Output as _Output, Script as _Script, PublicKey as _PublicKey, PrivateKey as _PrivateKey } from '@dashevo/dashcore-lib'; export declare namespace Core { export type Transaction = _Transaction; diff --git a/packages/js-dash-sdk/src/SDK/Core/index.ts b/packages/js-dash-sdk/src/SDK/Core/index.ts index 2a354a9ef87..dc69827f1d6 100644 --- a/packages/js-dash-sdk/src/SDK/Core/index.ts +++ b/packages/js-dash-sdk/src/SDK/Core/index.ts @@ -1 +1 @@ -export { Core } from './Core'; +export { Core } from './Core.js'; diff --git a/packages/js-dash-sdk/src/SDK/Platform/Platform.ts b/packages/js-dash-sdk/src/SDK/Platform/Platform.ts index 538c89b9b10..cf141282f87 100644 --- a/packages/js-dash-sdk/src/SDK/Platform/Platform.ts +++ b/packages/js-dash-sdk/src/SDK/Platform/Platform.ts @@ -1,7 +1,7 @@ // TODO remove default exports // eslint-disable-next-line no-restricted-exports import * as _DashPlatformProtocol from '@dashevo/wasm-dpp'; -import { Platform as PlatformClient } from '../Client/Platform/Platform'; +import { Platform as PlatformClient } from '../Client/Platform/Platform.js'; export namespace Platform { export const DashPlatformProtocol = _DashPlatformProtocol; diff --git a/packages/js-dash-sdk/src/SDK/Platform/index.ts b/packages/js-dash-sdk/src/SDK/Platform/index.ts index 7ebf91b1944..8a195d41e17 100644 --- a/packages/js-dash-sdk/src/SDK/Platform/index.ts +++ b/packages/js-dash-sdk/src/SDK/Platform/index.ts @@ -1 +1 @@ -export { Platform } from './Platform'; +export { Platform } from './Platform.js'; diff --git a/packages/js-dash-sdk/src/SDK/SDK.spec.ts b/packages/js-dash-sdk/src/SDK/SDK.spec.ts index 7ef2680b8bd..248cbfcc6c8 100644 --- a/packages/js-dash-sdk/src/SDK/SDK.spec.ts +++ b/packages/js-dash-sdk/src/SDK/SDK.spec.ts @@ -1,5 +1,5 @@ import { expect } from 'chai'; -import SDK from './index'; +import SDK from './index.js'; import 'mocha'; describe('Dash', () => { diff --git a/packages/js-dash-sdk/src/SDK/SDK.ts b/packages/js-dash-sdk/src/SDK/SDK.ts index b368f112a41..15b4b28c8a6 100644 --- a/packages/js-dash-sdk/src/SDK/SDK.ts +++ b/packages/js-dash-sdk/src/SDK/SDK.ts @@ -10,11 +10,11 @@ import { utils as _WalletLibUtils, plugins as _WalletLibPlugins, } from '@dashevo/wallet-lib'; -import { Client as _Client } from './Client'; -import { Core as _Core } from './Core'; -import { Platform as _Platform } from './Platform'; +import { Client as _Client } from './Client/index.js'; +import { Core as _Core } from './Core/index.js'; +import { Platform as _Platform } from './Platform/index.js'; -import { StateTransitionBroadcastError } from '../errors/StateTransitionBroadcastError'; +import { StateTransitionBroadcastError } from '../errors/StateTransitionBroadcastError.js'; export namespace SDK { export const DAPIClient = _DAPIClient; diff --git a/packages/js-dash-sdk/src/SDK/index.ts b/packages/js-dash-sdk/src/SDK/index.ts index 5831254b57f..ae02f9d74d9 100644 --- a/packages/js-dash-sdk/src/SDK/index.ts +++ b/packages/js-dash-sdk/src/SDK/index.ts @@ -1,3 +1,3 @@ // TODO remove default export // eslint-disable-next-line no-restricted-exports -export { SDK as default } from './SDK'; +export { SDK as default } from './SDK.js'; diff --git a/packages/js-dash-sdk/src/bls/getBlsAdapter.ts b/packages/js-dash-sdk/src/bls/getBlsAdapter.ts index e306ff78e21..87a1ece188a 100644 --- a/packages/js-dash-sdk/src/bls/getBlsAdapter.ts +++ b/packages/js-dash-sdk/src/bls/getBlsAdapter.ts @@ -1,7 +1,9 @@ -import loadBLS from '@dashevo/bls'; -import { Buffer } from 'buffer'; +import * as blsModule from '@dashevo/bls'; export default async (): Promise => { + // @dashevo/bls exposes a callable factory; types declare it as a namespace. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const loadBLS = ((blsModule as any).default ?? blsModule) as () => Promise; const bls = await loadBLS(); return { diff --git a/packages/js-dash-sdk/src/index.ts b/packages/js-dash-sdk/src/index.ts index a2f96f0e7f3..074a30961fa 100644 --- a/packages/js-dash-sdk/src/index.ts +++ b/packages/js-dash-sdk/src/index.ts @@ -1,3 +1,19 @@ -import SDK from './SDK'; +// eslint-disable-next-line no-restricted-exports +import SDK from './SDK/index.js'; -export = SDK; +export const { + DAPIClient, + Client, + Core, + Platform, + Wallet, + Account, + KeyChain, + WalletLib, + PlatformProtocol, + Essentials, + Errors, +} = SDK; + +// eslint-disable-next-line no-restricted-exports +export default SDK; diff --git a/packages/js-dash-sdk/src/logger/index.ts b/packages/js-dash-sdk/src/logger/index.ts index d0b0bd763d9..e452171631d 100644 --- a/packages/js-dash-sdk/src/logger/index.ts +++ b/packages/js-dash-sdk/src/logger/index.ts @@ -1,64 +1,47 @@ -import { Logger, Logform } from 'winston'; +/* eslint-disable @typescript-eslint/no-explicit-any */ +const LOG_LEVEL = (typeof process !== 'undefined' && process.env && process.env.LOG_LEVEL) || 'info'; -export type ConfigurableLogger = Logger & { - getForId: (id: string) => ConfigurableLogger +const LEVELS: Record = { + silent: -1, error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5, }; -const util = require('util'); -const winston = require('winston'); - -const LOG_LEVEL = process.env.LOG_LEVEL || 'info'; - -// Log levels: -// error 0 -// warn 1 -// info 2 (default) -// verbose 3 -// debug 4 -// silly 5 - -const createLogger = (formats: Logform.Format[] = []): ConfigurableLogger => winston.createLogger({ - level: LOG_LEVEL, - transports: [ - new winston.transports.Console({ - format: winston.format.combine( - { - transform: (info) => { - const args = info[Symbol.for('splat')]; - const result = { ...info }; - if (args) { - result.message = util.format(info.message, ...args); - } - return result; - }, - }, - ...formats, - winston.format.colorize(), - winston.format.printf(({ - level, message, - }) => `${level}: ${message}`), - ), - }), - ], -}); - -const logger = createLogger(); - -const loggers = {}; -logger.getForId = (id: string): ConfigurableLogger => { - if (!loggers[id]) { - const format = { - transform: (info) => { - const message = `[SDK: ${id}] ${info.message}`; - return { ...info, message }; - }, - }; - - loggers[id] = createLogger([format]); - } - - return loggers[id]; -}; +export interface ConfigurableLogger { + error: (...args: any[]) => void; + warn: (...args: any[]) => void; + info: (...args: any[]) => void; + verbose: (...args: any[]) => void; + debug: (...args: any[]) => void; + silly: (...args: any[]) => void; + getForId: (id: string) => ConfigurableLogger; +} + +const cache: Record = {}; + +function build(level: string = LOG_LEVEL, prefix: string = ''): ConfigurableLogger { + const threshold = LEVELS[level] != null ? LEVELS[level] : LEVELS.silent; + const noop = () => { /* no-op */ }; + const fmt = prefix + ? (...a: any[]) => [prefix, ...a] + : (...a: any[]) => a; + + const logger: ConfigurableLogger = { + error: threshold >= 0 ? (...a: any[]) => console.error(...fmt(...a)) : noop, + warn: threshold >= 1 ? (...a: any[]) => console.warn(...fmt(...a)) : noop, + info: threshold >= 2 ? (...a: any[]) => console.info(...fmt(...a)) : noop, + verbose: threshold >= 3 ? (...a: any[]) => console.debug(...fmt(...a)) : noop, + debug: threshold >= 4 ? (...a: any[]) => console.debug(...fmt(...a)) : noop, + silly: threshold >= 5 ? (...a: any[]) => console.debug(...fmt(...a)) : noop, + getForId(id: string): ConfigurableLogger { + if (!cache[id]) { + cache[id] = build(level, `[SDK: ${id}]`); + } + return cache[id]; + }, + }; + return logger; +} + +const logger = build(); logger.verbose(`[SDK] Logger uses "${LOG_LEVEL}" level`, { level: LOG_LEVEL }); diff --git a/packages/js-dash-sdk/src/test/bootstrap.js b/packages/js-dash-sdk/src/test/bootstrap.js index 92594921ab8..17fd6403c33 100644 --- a/packages/js-dash-sdk/src/test/bootstrap.js +++ b/packages/js-dash-sdk/src/test/bootstrap.js @@ -1,10 +1,14 @@ -const path = require('path'); -const dotenvSafe = require('dotenv-safe'); -const sinon = require('sinon'); -const sinonChai = require('sinon-chai'); -const { use } = require('chai'); -const dirtyChai = require('dirty-chai'); -const chaiAsPromised = require('chai-as-promised'); +import path from 'path'; +import { fileURLToPath } from 'url'; +import dotenvSafe from 'dotenv-safe'; +import sinon from 'sinon'; +import sinonChai from 'sinon-chai'; +import { use } from 'chai'; +import dirtyChai from 'dirty-chai'; +import chaiAsPromised from 'chai-as-promised'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); if (process.env.LOAD_ENV === 'true') { dotenvSafe.config({ @@ -16,7 +20,7 @@ use(dirtyChai); use(sinonChai); use(chaiAsPromised); -exports.mochaHooks = { +export const mochaHooks = { beforeEach() { if (!this.sinon) { this.sinon = sinon.createSandbox(); diff --git a/packages/js-dash-sdk/src/test/fixtures/createIdentityFixtureInAccount.ts b/packages/js-dash-sdk/src/test/fixtures/createIdentityFixtureInAccount.ts index 986e6e10d7e..5abca904b7d 100644 --- a/packages/js-dash-sdk/src/test/fixtures/createIdentityFixtureInAccount.ts +++ b/packages/js-dash-sdk/src/test/fixtures/createIdentityFixtureInAccount.ts @@ -1,9 +1,11 @@ -import loadWasmDpp, { IdentityPublicKey } from '@dashevo/wasm-dpp'; - -const getIdentityFixture = require('@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture'); +import loadWasmDpp from '@dashevo/wasm-dpp'; +const { IdentityPublicKey } = loadWasmDpp; +import getIdentityFixture from '@dashevo/wasm-dpp/lib/test/fixtures/getIdentityFixture.js'; export async function createIdentityFixtureInAccount(account) { - await loadWasmDpp(); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const load = (loadWasmDpp as any).default ?? loadWasmDpp; + await load(); const identityFixture = await getIdentityFixture(); const identityFixtureIndex = 0; diff --git a/packages/js-dash-sdk/src/test/fixtures/createTransactionFixtureInAccount.ts b/packages/js-dash-sdk/src/test/fixtures/createTransactionFixtureInAccount.ts index 6536fd5638b..2fff01f37bf 100644 --- a/packages/js-dash-sdk/src/test/fixtures/createTransactionFixtureInAccount.ts +++ b/packages/js-dash-sdk/src/test/fixtures/createTransactionFixtureInAccount.ts @@ -1,4 +1,5 @@ -import { Transaction } from '@dashevo/dashcore-lib'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; export async function createTransactionInAccount(account) { // add fake tx to the wallet so it will be able to create transactions diff --git a/packages/js-dash-sdk/src/test/fixtures/getResponseMetadataFixture.ts b/packages/js-dash-sdk/src/test/fixtures/getResponseMetadataFixture.ts index fe3cdc6ed63..7b182a85581 100644 --- a/packages/js-dash-sdk/src/test/fixtures/getResponseMetadataFixture.ts +++ b/packages/js-dash-sdk/src/test/fixtures/getResponseMetadataFixture.ts @@ -1,4 +1,4 @@ -const Metadata = require('@dashevo/dapi-client/lib/methods/platform/response/Metadata'); +import Metadata from '@dashevo/dapi-client/lib/methods/platform/response/Metadata.js'; function getResponseMetadataFixture() { const metadata = { diff --git a/packages/js-dash-sdk/src/test/karma/bootstrap.ts b/packages/js-dash-sdk/src/test/karma/bootstrap.ts deleted file mode 100644 index 8394d5402c1..00000000000 --- a/packages/js-dash-sdk/src/test/karma/bootstrap.ts +++ /dev/null @@ -1,22 +0,0 @@ -import sinon from 'sinon'; -import { use } from 'chai'; - -import dirtyChai from 'dirty-chai'; -import sinonChai from 'sinon-chai'; -import chaiAsPromised from 'chai-as-promised'; - -use(dirtyChai); -use(sinonChai); -use(chaiAsPromised); - -beforeEach(function beforeEach() { - if (!this.sinon) { - this.sinon = sinon.createSandbox(); - } else { - this.sinon.restore(); - } -}); - -afterEach(function afterEach() { - this.sinon.restore(); -}); diff --git a/packages/js-dash-sdk/src/test/mocks/createAndAttachTransportMocksToClient.ts b/packages/js-dash-sdk/src/test/mocks/createAndAttachTransportMocksToClient.ts index 85d46ada220..a5012a58dbf 100644 --- a/packages/js-dash-sdk/src/test/mocks/createAndAttachTransportMocksToClient.ts +++ b/packages/js-dash-sdk/src/test/mocks/createAndAttachTransportMocksToClient.ts @@ -1,19 +1,21 @@ -import { Transaction } from '@dashevo/dashcore-lib'; +import dashcore from '@dashevo/dashcore-lib'; +const { Transaction } = dashcore; import DAPIClient from '@dashevo/dapi-client'; -import { StateTransitionTypes } from '@dashevo/wasm-dpp'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { StateTransitionTypes } = wasmDpp; -import { createFakeInstantLock } from '../../utils/createFakeIntantLock'; -import getResponseMetadataFixture from '../fixtures/getResponseMetadataFixture'; -import { createDapiClientMock } from './createDapiClientMock'; +import { createFakeInstantLock } from '../../utils/createFakeIntantLock.js'; +import getResponseMetadataFixture from '../fixtures/getResponseMetadataFixture.js'; +import { createDapiClientMock } from './createDapiClientMock.js'; -import { wait } from '../../utils/wait'; +import { wait } from '../../utils/wait.js'; -const GetIdentityResponse = require('@dashevo/dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse'); -const NotFoundError = require('@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError'); +import GetIdentityResponse from '@dashevo/dapi-client/lib/methods/platform/getIdentity/GetIdentityResponse.js'; +import NotFoundError from '@dashevo/dapi-client/lib/transport/GrpcTransport/errors/NotFoundError.js'; -const TxStreamMock = require('@dashevo/wallet-lib/src/test/mocks/TxStreamMock'); -const TxStreamDataResponseMock = require('@dashevo/wallet-lib/src/test/mocks/TxStreamDataResponseMock'); -const TransportMock = require('@dashevo/wallet-lib/src/test/mocks/TransportMock'); +import TxStreamMock from '@dashevo/wallet-lib/src/test/mocks/TxStreamMock.js'; +import TxStreamDataResponseMock from '@dashevo/wallet-lib/src/test/mocks/TxStreamDataResponseMock.js'; +import TransportMock from '@dashevo/wallet-lib/src/test/mocks/TransportMock.js'; function makeTxStreamEmitISLocksForTransactions(transportMock, txStreamMock) { transportMock.sendTransaction.callsFake((txString) => { diff --git a/packages/js-dash-sdk/src/utils/createFakeIntantLock.ts b/packages/js-dash-sdk/src/utils/createFakeIntantLock.ts index ade82da25c6..bb2fb8fdd43 100644 --- a/packages/js-dash-sdk/src/utils/createFakeIntantLock.ts +++ b/packages/js-dash-sdk/src/utils/createFakeIntantLock.ts @@ -1,4 +1,7 @@ -import { InstantLock } from '@dashevo/dashcore-lib'; +import dashcore from '@dashevo/dashcore-lib'; +const { InstantLock } = dashcore; +import type { InstantLock as InstantLockType } from '@dashevo/dashcore-lib'; +type InstantLock = InstantLockType; export function createFakeInstantLock(transactionHash: string): InstantLock { return new InstantLock({ diff --git a/packages/js-dash-sdk/tests/functional/sdk.js b/packages/js-dash-sdk/tests/functional/sdk.js index c8e303223a5..1a6c30c3373 100644 --- a/packages/js-dash-sdk/tests/functional/sdk.js +++ b/packages/js-dash-sdk/tests/functional/sdk.js @@ -1,15 +1,10 @@ -const { expect } = require('chai'); - -const { Identifier } = require('@dashevo/wasm-dpp'); - -const { contractId: dpnsContractIdString } = require('@dashevo/dpns-contract/lib/systemIds'); - -const { - Networks, -} = require('@dashevo/dashcore-lib'); - -// eslint-disable-next-line -const Dash = require(typeof process === 'undefined' ? '../../src/index.ts' : '../../'); +import { expect } from 'chai'; +import wasmDpp from '@dashevo/wasm-dpp'; +const { Identifier } = wasmDpp; +import { contractId as dpnsContractIdString } from '@dashevo/dpns-contract/lib/systemIds.js'; +import dashcore from '@dashevo/dashcore-lib'; +const { Networks } = dashcore; +import Dash from '../../build/index.js'; describe('SDK', function suite() { this.timeout(700000); diff --git a/packages/js-dash-sdk/tsconfig.json b/packages/js-dash-sdk/tsconfig.json index 6166a1cae01..f3bd677fe0e 100644 --- a/packages/js-dash-sdk/tsconfig.json +++ b/packages/js-dash-sdk/tsconfig.json @@ -1,15 +1,16 @@ { "compilerOptions": { "target": "es2020", - "module": "commonjs", - "lib": ["es6", "dom"], + "module": "nodenext", + "moduleResolution": "nodenext", + "lib": ["es2020", "dom"], "skipLibCheck": true, "strict": true, "allowUmdGlobalAccess": true, "noImplicitAny": false, "esModuleInterop": true, "resolveJsonModule": true, - "allowJs": true, + "allowJs": true }, "include": [ "src/**/*" diff --git a/packages/js-dash-sdk/tsconfig.mocha.json b/packages/js-dash-sdk/tsconfig.mocha.json index 9f9e701cdf5..0884e155893 100644 --- a/packages/js-dash-sdk/tsconfig.mocha.json +++ b/packages/js-dash-sdk/tsconfig.mocha.json @@ -1,10 +1,12 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "target": "es6", + "target": "es2020", + "module": "nodenext", + "moduleResolution": "nodenext", "skipLibCheck": true, "esModuleInterop": true, - "outDir": "./build", + "outDir": "./build" }, - "include": ["src/**/*.spec.ts", "src/test/**/*.ts"], + "include": ["src/**/*.spec.ts", "src/test/**/*.ts"] } diff --git a/packages/js-dash-sdk/tsconfig.tsd.json b/packages/js-dash-sdk/tsconfig.tsd.json index 6d2501261de..e9217be86d0 100644 --- a/packages/js-dash-sdk/tsconfig.tsd.json +++ b/packages/js-dash-sdk/tsconfig.tsd.json @@ -1,7 +1,9 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "target": "es6", + "target": "es2020", + "module": "nodenext", + "moduleResolution": "nodenext" }, "include": ["test-d/**/*.ts"] } diff --git a/packages/js-dash-sdk/webpack.base.config.js b/packages/js-dash-sdk/webpack.base.config.js deleted file mode 100644 index bacc3e3c0cf..00000000000 --- a/packages/js-dash-sdk/webpack.base.config.js +++ /dev/null @@ -1,59 +0,0 @@ -const path = require('path'); -const webpack = require('webpack'); -const TerserPlugin = require('terser-webpack-plugin'); - -const baseConfig = { - entry: './src/index.ts', - devtool: 'eval', - module: { - rules: [ - { - test: /\.ts$/, - use: 'ts-loader', - exclude: /node_modules/, - }, - ], - }, - optimization: { - minimize: true, - minimizer: [new TerserPlugin({ - terserOptions: { - keep_classnames: true, // fixes empty string in `object.constructor.name` - }, - })], - }, - resolve: { - extensions: ['.ts', '.js', '.json'], - fallback: { - fs: false, - util: require.resolve('util/'), - crypto: require.resolve('crypto-browserify'), - http: require.resolve('stream-http'), - https: require.resolve('https-browserify'), - buffer: require.resolve('buffer/'), - url: require.resolve('url/'), - assert: require.resolve('assert/'), - stream: require.resolve('stream-browserify'), - path: require.resolve('path-browserify'), - os: require.resolve('os-browserify/browser'), - zlib: require.resolve('browserify-zlib'), - events: require.resolve('events/'), - string_decoder: require.resolve('string_decoder/'), - tls: require.resolve('tls/'), - net: require.resolve('net/'), - process: require.resolve('process/browser'), - // Browser build have to use native WebSocket - ws: require.resolve('./build-utils/ws'), - }, - }, - plugins: [ - new webpack.ProvidePlugin({ - Buffer: [require.resolve('buffer/'), 'Buffer'], - process: require.resolve('process/browser'), - }), - ], - output: { - path: path.resolve(__dirname, 'dist'), - }, -}; -module.exports = baseConfig; diff --git a/packages/js-dash-sdk/webpack.config.js b/packages/js-dash-sdk/webpack.config.js deleted file mode 100644 index 057b1bf6473..00000000000 --- a/packages/js-dash-sdk/webpack.config.js +++ /dev/null @@ -1,22 +0,0 @@ -const path = require('path'); -const webpackBaseConfig = require('./webpack.base.config'); - -const webConfig = { - ...webpackBaseConfig, - entry: './build/index.js', - devtool: 'source-map', - mode: 'production', - target: 'web', - output: { - path: path.resolve(__dirname, 'dist'), - library: { - name: 'Dash', - type: 'umd', - }, - filename: 'dash.min.js', - // fixes ReferenceError: window is not defined - globalObject: "(typeof self !== 'undefined' ? self : this)", - }, -}; - -module.exports = [webConfig]; diff --git a/packages/platform-test-suite/.mocharc.yml b/packages/platform-test-suite/.mocharc.yml index 47667ea3d26..47e98389958 100644 --- a/packages/platform-test-suite/.mocharc.yml +++ b/packages/platform-test-suite/.mocharc.yml @@ -1,6 +1,6 @@ exit: true timeout: 650000 -require: +import: - ./lib/test/bootstrap.js parallel: true jobs: 2 diff --git a/packages/platform-test-suite/karma.conf.js b/packages/platform-test-suite/karma.conf.js deleted file mode 100644 index 05128836f99..00000000000 --- a/packages/platform-test-suite/karma.conf.js +++ /dev/null @@ -1,131 +0,0 @@ -const webpack = require('webpack'); -const dotenvResult = require('dotenv-safe').config(); -const glob = require('glob'); - -const karmaMocha = require('karma-mocha'); -const karmaMochaReporter = require('karma-mocha-reporter'); -const karmaChai = require('karma-chai'); -const karmaChromeLauncher = require('karma-chrome-launcher'); -const karmaFirefoxLauncher = require('karma-firefox-launcher'); -const karmaSourcemapLoader = require('karma-sourcemap-loader'); -const karmaWebpack = require('karma-webpack'); - -if (dotenvResult.error) { - throw dotenvResult.error; -} - -// TODO: Fix test to be running in Browser -const testFilesPattern = './test/**/!(proofs|waitForStateTransitionResult).spec.js'; -const processors = ['webpack', 'sourcemap']; -let testFiles = [ - testFilesPattern, -]; -let testPreprocessors = { - [testFilesPattern]: processors, -}; - -const batchTotal = parseInt(process.env.BROWSER_TEST_BATCH_TOTAL, 10); -const batchIndex = parseInt(process.env.BROWSER_TEST_BATCH_INDEX, 10); - -if (batchTotal !== 0) { - const files = glob.sync(testFilesPattern); - const batchSize = Math.ceil(files.length / batchTotal); - - const batches = []; - for (let i = 0; i < files.length; i += batchSize) { - batches.push(files.slice(i, i + batchSize)); - } - - testFiles = batches[batchIndex] || []; - - testPreprocessors = testFiles.reduce((acc, path) => { - acc[path] = processors; - - return acc; - }, {}); -} - -process.env.FAUCET_ADDRESS = process.env[`FAUCET_${batchIndex + 1}_ADDRESS`]; -process.env.FAUCET_PRIVATE_KEY = process.env[`FAUCET_${batchIndex + 1}_PRIVATE_KEY`]; - -module.exports = (config) => { - config.set({ - client: { - mocha: { - timeout: 650000, - bail: true, - }, - }, - browserNoActivityTimeout: 900000, - browserDisconnectTimeout: 900000, - frameworks: ['mocha', 'chai', 'webpack'], - files: [ - 'lib/test/karma/bootstrap.js', - ...testFiles, - ], - preprocessors: { - 'lib/test/karma/bootstrap.js': ['webpack', 'sourcemap'], - ...testPreprocessors, - }, - webpack: { - mode: 'development', - devtool: 'inline-source-map', - plugins: [ - new webpack.ProvidePlugin({ - Buffer: [require.resolve('buffer/'), 'Buffer'], - process: require.resolve('process/browser'), - }), - new webpack.EnvironmentPlugin( - { - ...dotenvResult.parsed, - FAUCET_ADDRESS: process.env.FAUCET_ADDRESS, - FAUCET_PRIVATE_KEY: process.env.FAUCET_PRIVATE_KEY, - }, - ), - ], - resolve: { - fallback: { - fs: false, - path: false, - net: false, - os: false, - http: false, - https: false, - assert: require.resolve('assert/'), - url: require.resolve('url/'), - string_decoder: require.resolve('string_decoder/'), - stream: require.resolve('stream-browserify'), - buffer: require.resolve('buffer/'), - crypto: require.resolve('crypto-browserify'), - events: require.resolve('events/'), - util: require.resolve('util/'), - process: require.resolve('process/browser'), - }, - extensions: ['.ts', '.js', '.json'], - }, - }, - reporters: ['mocha'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - browsers: ['ChromeHeadlessInsecure'], - singleRun: true, - concurrency: Infinity, - plugins: [ - karmaMocha, - karmaMochaReporter, - karmaChai, - karmaChromeLauncher, - karmaFirefoxLauncher, - karmaSourcemapLoader, - karmaWebpack, - ], - customLaunchers: { - ChromeHeadlessInsecure: { - base: 'ChromeHeadless', - flags: ['--allow-insecure-localhost'], - displayName: 'Chrome w/o security', - }, - }, - }); -}; diff --git a/packages/platform-test-suite/lib/parseRootTreeProof.js b/packages/platform-test-suite/lib/parseRootTreeProof.js index 2863b4734a3..4699b611d87 100644 --- a/packages/platform-test-suite/lib/parseRootTreeProof.js +++ b/packages/platform-test-suite/lib/parseRootTreeProof.js @@ -1,6 +1,6 @@ -const BufferReader = require('@dashevo/dashcore-lib/lib/encoding/bufferreader'); +import BufferReader from '@dashevo/dashcore-lib/lib/encoding/bufferreader.js'; -module.exports = function parseRootTreeBuffer(rootTreeProofBuffer) { +export default function parseRootTreeBuffer(rootTreeProofBuffer) { /* amount of subtrees to proof It is equal to 1 because at the moment our proof won't be a simultaneous proof for more @@ -19,4 +19,4 @@ module.exports = function parseRootTreeBuffer(rootTreeProofBuffer) { } return hashes; -}; +} diff --git a/packages/platform-test-suite/lib/parseStoreTreeProof.js b/packages/platform-test-suite/lib/parseStoreTreeProof.js index f6b8a48048c..46a75b20fef 100644 --- a/packages/platform-test-suite/lib/parseStoreTreeProof.js +++ b/packages/platform-test-suite/lib/parseStoreTreeProof.js @@ -1,6 +1,6 @@ const hashLength = 32; -module.exports = function getStoreProofData(storeProof) { +export default function getStoreProofData(storeProof) { const buf = storeProof; const hashes = []; const keyValueHashes = []; @@ -58,4 +58,4 @@ module.exports = function getStoreProofData(storeProof) { return { hashes, keyValueHashes, values, keyValues, }; -}; +} diff --git a/packages/platform-test-suite/lib/test/bootstrap.js b/packages/platform-test-suite/lib/test/bootstrap.js index f4e9d46724b..ab73fb39cf7 100644 --- a/packages/platform-test-suite/lib/test/bootstrap.js +++ b/packages/platform-test-suite/lib/test/bootstrap.js @@ -1,10 +1,13 @@ -const path = require('path'); -const dotenvSafe = require('dotenv-safe'); -const { expect, use } = require('chai'); -const dirtyChai = require('dirty-chai'); -const chaiAsPromised = require('chai-as-promised'); -const sinon = require('sinon'); -const sinonChai = require('sinon-chai'); +import path from 'path'; +import { fileURLToPath } from 'url'; +import dotenvSafe from 'dotenv-safe'; +import { expect, use } from 'chai'; +import dirtyChai from 'dirty-chai'; +import chaiAsPromised from 'chai-as-promised'; +import sinon from 'sinon'; +import sinonChai from 'sinon-chai'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); use(chaiAsPromised); use(dirtyChai); @@ -25,7 +28,7 @@ if (process.env.MOCHA_WORKER_ID) { process.env.FAUCET_ADDRESS = process.env[`FAUCET_${faucetIndex}_ADDRESS`]; process.env.FAUCET_PRIVATE_KEY = process.env[`FAUCET_${faucetIndex}_PRIVATE_KEY`]; -exports.mochaHooks = { +export const mochaHooks = { beforeEach() { if (!this.sinon) { this.sinon = sinon.createSandbox(); diff --git a/packages/platform-test-suite/lib/test/createClientWithFundedWallet.js b/packages/platform-test-suite/lib/test/createClientWithFundedWallet.js index 42e4686b5b8..e1b8ff8a4ff 100644 --- a/packages/platform-test-suite/lib/test/createClientWithFundedWallet.js +++ b/packages/platform-test-suite/lib/test/createClientWithFundedWallet.js @@ -1,14 +1,13 @@ -const Dash = require('dash'); +import Dash from 'dash'; -const fundWallet = require('@dashevo/wallet-lib/src/utils/fundWallet'); +import fundWallet from '@dashevo/wallet-lib/src/utils/fundWallet.js'; -const { - contractId: dpnsContractId, -} = require('@dashevo/dpns-contract/lib/systemIds'); +import dpnsSystemIds from '@dashevo/dpns-contract/lib/systemIds.js'; +const { contractId: dpnsContractId } = dpnsSystemIds; -const getDAPISeeds = require('./getDAPISeeds'); +import getDAPISeeds from './getDAPISeeds.js'; -const createFaucetClient = require('./createFaucetClient'); +import createFaucetClient from './createFaucetClient.js'; let faucetClient; @@ -76,4 +75,4 @@ async function createClientWithFundedWallet(amount, HDPrivateKey = undefined) { return client; } -module.exports = createClientWithFundedWallet; +export default createClientWithFundedWallet; diff --git a/packages/platform-test-suite/lib/test/createClientWithoutWallet.js b/packages/platform-test-suite/lib/test/createClientWithoutWallet.js index 4df556792c0..8412c43b54e 100644 --- a/packages/platform-test-suite/lib/test/createClientWithoutWallet.js +++ b/packages/platform-test-suite/lib/test/createClientWithoutWallet.js @@ -1,8 +1,8 @@ -const Dash = require('dash'); +import Dash from 'dash'; +import dpnsSystemIds from '@dashevo/dpns-contract/lib/systemIds.js'; +const { contractId } = dpnsSystemIds; -const { contractId } = require('@dashevo/dpns-contract/lib/systemIds'); - -const getDAPISeeds = require('./getDAPISeeds'); +import getDAPISeeds from './getDAPISeeds.js'; function createClientWithoutWallet() { const dapiAddresses = (process.env.DAPI_ADDRESSES || '') @@ -24,4 +24,4 @@ function createClientWithoutWallet() { }); } -module.exports = createClientWithoutWallet; +export default createClientWithoutWallet; diff --git a/packages/platform-test-suite/lib/test/createFaucetClient.js b/packages/platform-test-suite/lib/test/createFaucetClient.js index 575b7551e2e..09c128d203a 100644 --- a/packages/platform-test-suite/lib/test/createFaucetClient.js +++ b/packages/platform-test-suite/lib/test/createFaucetClient.js @@ -1,23 +1,21 @@ -const Dash = require('dash'); +import Dash from 'dash'; +import dpnsSystemIds from '@dashevo/dpns-contract/lib/systemIds.js'; +const { contractId } = dpnsSystemIds; + +import getDAPISeeds from './getDAPISeeds.js'; let storageAdapter; if (typeof window === 'undefined') { - // eslint-disable-next-line global-require - const { NodeForage } = require('nodeforage'); + const { NodeForage } = await import('nodeforage'); storageAdapter = new NodeForage({ dir: process.env.FAUCET_WALLET_STORAGE_DIR || process.cwd(), name: `faucet-wallet-${process.env.FAUCET_ADDRESS}`, }); } else { - // eslint-disable-next-line global-require - storageAdapter = require('localforage'); + storageAdapter = (await import('localforage')).default; } -const { contractId } = require('@dashevo/dpns-contract/lib/systemIds'); - -const getDAPISeeds = require('./getDAPISeeds'); - let faucetClient; function createFaucetClient() { @@ -60,4 +58,4 @@ function createFaucetClient() { return faucetClient; } -module.exports = createFaucetClient; +export default createFaucetClient; diff --git a/packages/platform-test-suite/lib/test/fixtures/getDataContractFixture.js b/packages/platform-test-suite/lib/test/fixtures/getDataContractFixture.js index 8fdb9d0a8bd..a46bb1809d4 100644 --- a/packages/platform-test-suite/lib/test/fixtures/getDataContractFixture.js +++ b/packages/platform-test-suite/lib/test/fixtures/getDataContractFixture.js @@ -1,7 +1,7 @@ -const Dash = require('dash'); +import Dash from 'dash'; -const crypto = require('crypto'); -const generateRandomIdentifier = require('../utils/generateRandomIdentifier'); +import crypto from 'crypto'; +import generateRandomIdentifier from '../utils/generateRandomIdentifier.js'; const { Platform, @@ -14,7 +14,7 @@ let randomOwnerId = null; * @param {Identifier} [ownerId] * @return {Promise} */ -module.exports = async function getDataContractFixture( +export default async function getDataContractFixture( identityNonce, ownerId = randomOwnerId, ) { @@ -152,4 +152,4 @@ module.exports = async function getDataContractFixture( }; return factory.create(ownerId, BigInt(identityNonce), documents, config); -}; +} diff --git a/packages/platform-test-suite/lib/test/fixtures/getIdentityFixture.js b/packages/platform-test-suite/lib/test/fixtures/getIdentityFixture.js index 736507220ce..7a935610437 100644 --- a/packages/platform-test-suite/lib/test/fixtures/getIdentityFixture.js +++ b/packages/platform-test-suite/lib/test/fixtures/getIdentityFixture.js @@ -1,6 +1,6 @@ -const Dash = require('dash'); +import Dash from 'dash'; -const generateRandomIdentifier = require('../utils/generateRandomIdentifier'); +import generateRandomIdentifier from '../utils/generateRandomIdentifier.js'; const { Platform, @@ -9,7 +9,7 @@ const { /** * @return {Identity} */ -module.exports = async function getIdentityFixture() { +export default async function getIdentityFixture() { const { Identity, IdentityPublicKey } = await Platform .initializeDppModule(); @@ -30,4 +30,4 @@ module.exports = async function getIdentityFixture() { identity.setBalance(BigInt(10000)); return identity; -}; +} diff --git a/packages/platform-test-suite/lib/test/getDAPISeeds.js b/packages/platform-test-suite/lib/test/getDAPISeeds.js index 1112fd10496..d18c9803774 100644 --- a/packages/platform-test-suite/lib/test/getDAPISeeds.js +++ b/packages/platform-test-suite/lib/test/getDAPISeeds.js @@ -1,4 +1,4 @@ -const DAPIAddress = require('@dashevo/dapi-client/lib/dapiAddressProvider/DAPIAddress'); +import DAPIAddress from '@dashevo/dapi-client/lib/dapiAddressProvider/DAPIAddress.js'; function getDAPISeeds() { return process.env.DAPI_SEED @@ -10,4 +10,4 @@ function getDAPISeeds() { }); } -module.exports = getDAPISeeds; +export default getDAPISeeds; diff --git a/packages/platform-test-suite/lib/test/karma/bootstrap.js b/packages/platform-test-suite/lib/test/karma/bootstrap.js deleted file mode 100644 index d76c466bdbc..00000000000 --- a/packages/platform-test-suite/lib/test/karma/bootstrap.js +++ /dev/null @@ -1,26 +0,0 @@ -const { expect, use } = require('chai'); -const dirtyChai = require('dirty-chai'); -const chaiAsPromised = require('chai-as-promised'); -const sinon = require('sinon'); -const sinonChai = require('sinon-chai'); -require('setimmediate'); - -use(chaiAsPromised); -use(dirtyChai); -use(sinonChai); - -exports.mochaHooks = { - beforeEach() { - if (!this.sinon) { - this.sinon = sinon.createSandbox(); - } else { - this.sinon.restore(); - } - }, - - afterEach() { - this.sinon.restore(); - }, -}; - -global.expect = expect; diff --git a/packages/platform-test-suite/lib/test/testProofStructure.js b/packages/platform-test-suite/lib/test/testProofStructure.js index f80ad001b1f..906aa6c05a2 100644 --- a/packages/platform-test-suite/lib/test/testProofStructure.js +++ b/packages/platform-test-suite/lib/test/testProofStructure.js @@ -19,4 +19,4 @@ function testProofStructure(expect, proof, proofExist = true) { expect(proof.round).to.be.greaterThanOrEqual(0); } -module.exports = testProofStructure; +export default testProofStructure; diff --git a/packages/platform-test-suite/lib/test/throwGrpcErrorWithMetadata.js b/packages/platform-test-suite/lib/test/throwGrpcErrorWithMetadata.js index a04af511902..2bdede447c5 100644 --- a/packages/platform-test-suite/lib/test/throwGrpcErrorWithMetadata.js +++ b/packages/platform-test-suite/lib/test/throwGrpcErrorWithMetadata.js @@ -1,4 +1,4 @@ -const { inspect } = require('util'); +import { inspect } from 'util'; /** * @param {Error} e @@ -11,4 +11,4 @@ function throwGrpcErrorWithMetadata(e) { throw e; } -module.exports = throwGrpcErrorWithMetadata; +export default throwGrpcErrorWithMetadata; diff --git a/packages/platform-test-suite/lib/test/utils/generateRandomIdentifier.js b/packages/platform-test-suite/lib/test/utils/generateRandomIdentifier.js index 6979c0e139b..0f4c4385000 100644 --- a/packages/platform-test-suite/lib/test/utils/generateRandomIdentifier.js +++ b/packages/platform-test-suite/lib/test/utils/generateRandomIdentifier.js @@ -1,5 +1,5 @@ -const crypto = require('crypto'); -const Dash = require('dash'); +import crypto from 'crypto'; +import Dash from 'dash'; const { Platform } = Dash; @@ -13,4 +13,4 @@ async function generateRandomIdentifier() { return new Identifier(crypto.randomBytes(32)); } -module.exports = generateRandomIdentifier; +export default generateRandomIdentifier; diff --git a/packages/platform-test-suite/lib/test/waitForBalanceToChange.js b/packages/platform-test-suite/lib/test/waitForBalanceToChange.js index db8a733e8a1..335cac27323 100644 --- a/packages/platform-test-suite/lib/test/waitForBalanceToChange.js +++ b/packages/platform-test-suite/lib/test/waitForBalanceToChange.js @@ -1,4 +1,4 @@ -const wait = require('../wait'); +import wait from '../wait.js'; const MAX_TIME_TO_WAIT_MS = 20000; const ITERATION_TIME_MS = 500; @@ -20,4 +20,4 @@ async function waitForBalanceToChange(walletAccount) { } } -module.exports = waitForBalanceToChange; +export default waitForBalanceToChange; diff --git a/packages/platform-test-suite/lib/wait.js b/packages/platform-test-suite/lib/wait.js index 13247577b15..e5c4b4b2d6e 100644 --- a/packages/platform-test-suite/lib/wait.js +++ b/packages/platform-test-suite/lib/wait.js @@ -1,3 +1,3 @@ -module.exports = function wait(ms) { +export default function wait(ms) { return new Promise((res) => { setTimeout(res, ms); }); -}; +} diff --git a/packages/platform-test-suite/lib/waitForBlocks.js b/packages/platform-test-suite/lib/waitForBlocks.js index e1f826418ba..4a38b3022cb 100644 --- a/packages/platform-test-suite/lib/waitForBlocks.js +++ b/packages/platform-test-suite/lib/waitForBlocks.js @@ -1,4 +1,4 @@ -const wait = require('./wait'); +import wait from './wait.js'; /** * @@ -6,7 +6,7 @@ const wait = require('./wait'); * @param {number} numberOfBlocks * @return {Promise} */ -module.exports = async function waitForBlocks(dapiClient, numberOfBlocks) { +export default async function waitForBlocks(dapiClient, numberOfBlocks) { let currentBlockHeight = await dapiClient.core.getBestBlockHeight(); const desiredBlockHeight = currentBlockHeight + numberOfBlocks; @@ -17,4 +17,4 @@ module.exports = async function waitForBlocks(dapiClient, numberOfBlocks) { await wait(5000); } } while (currentBlockHeight < desiredBlockHeight); -}; +} diff --git a/packages/platform-test-suite/lib/waitForSTPropagated.js b/packages/platform-test-suite/lib/waitForSTPropagated.js index 1c691550b7b..89d24625faa 100644 --- a/packages/platform-test-suite/lib/waitForSTPropagated.js +++ b/packages/platform-test-suite/lib/waitForSTPropagated.js @@ -1,4 +1,4 @@ -const wait = require('./wait'); +import wait from './wait.js'; /** * @returns {Promise} @@ -13,4 +13,4 @@ async function waitForSTPropagated() { await wait(interval); } -module.exports = waitForSTPropagated; +export default waitForSTPropagated; diff --git a/packages/platform-test-suite/package.json b/packages/platform-test-suite/package.json index 87d25d66ba7..f067d679eb3 100644 --- a/packages/platform-test-suite/package.json +++ b/packages/platform-test-suite/package.json @@ -3,12 +3,15 @@ "private": true, "version": "3.1.0-dev.5", "description": "Dash Network end-to-end tests", + "type": "module", + "engines": { + "node": ">=18.18" + }, "scripts": { "test": "yarn exec bin/test.sh", "lint": "eslint .", "test:e2e": "NODE_ENV=test mocha 'test/e2e/**/*.spec.js'", - "test:functional": "NODE_ENV=test mocha 'test/functional/**/*.spec.js'", - "test:browsers": "karma start ./karma.conf.js" + "test:functional": "NODE_ENV=test mocha 'test/functional/**/*.spec.js'" }, "bin": { "test": "bin/test.sh" @@ -31,48 +34,22 @@ "@dashevo/wallet-lib": "workspace:*", "@dashevo/wasm-dpp": "workspace:*", "@dashevo/withdrawals-contract": "workspace:*", - "assert": "^2.0.0", - "assert-browserify": "^2.0.0", - "browserify-zlib": "^0.2.0", - "buffer": "^6.0.3", "bufferutil": "^4.0.6", "chai": "^4.3.10", "chai-as-promised": "^7.1.1", - "crypto-browserify": "^3.12.1", "dash": "workspace:*", "dirty-chai": "^2.0.1", "dotenv-safe": "^8.2.0", - "events": "^3.3.0", "glob": "^10.3.4", - "https-browserify": "^1.0.0", "js-merkle": "^0.1.5", - "karma": "^6.4.3", - "karma-chai": "^0.1.0", - "karma-chrome-launcher": "^3.1.0", - "karma-firefox-launcher": "^2.1.2", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^5.0.0", "localforage": "^1.10.0", "mocha": "^11.1.0", - "net": "^1.0.2", "nodeforage": "^1.1.2", - "os-browserify": "^0.3.0", - "path-browserify": "^1.0.1", - "process": "^0.11.10", "semver": "^7.5.3", "setimmediate": "^1.0.5", "sinon": "^18.0.1", "sinon-chai": "^3.7.0", - "stream-browserify": "^3.0.0", - "stream-http": "^3.2.0", - "string_decoder": "^1.3.0", - "tls": "^0.0.1", - "url": "^0.11.3", "utf-8-validate": "^5.0.9", - "util": "^0.12.4", - "webpack": "^5.104.0", "ws": "^8.17.1" }, "devDependencies": { diff --git a/packages/platform-test-suite/test/e2e/contacts.spec.js b/packages/platform-test-suite/test/e2e/contacts.spec.js index 664b927495d..23b8572b40f 100644 --- a/packages/platform-test-suite/test/e2e/contacts.spec.js +++ b/packages/platform-test-suite/test/e2e/contacts.spec.js @@ -1,4 +1,7 @@ -const Dash = require('dash'); +import Dash from 'dash'; + +import createClientWithFundedWallet from '../../lib/test/createClientWithFundedWallet.js'; +import waitForSTPropagated from '../../lib/waitForSTPropagated.js'; const { PlatformProtocol: { @@ -8,9 +11,6 @@ const { }, } = Dash; -const createClientWithFundedWallet = require('../../lib/test/createClientWithFundedWallet'); -const waitForSTPropagated = require('../../lib/waitForSTPropagated'); - describe('e2e', () => { describe('Contacts', function contacts() { this.timeout(950000); diff --git a/packages/platform-test-suite/test/e2e/dpns.spec.js b/packages/platform-test-suite/test/e2e/dpns.spec.js index 786f583f873..60647f8aee4 100644 --- a/packages/platform-test-suite/test/e2e/dpns.spec.js +++ b/packages/platform-test-suite/test/e2e/dpns.spec.js @@ -1,11 +1,10 @@ -const crypto = require('crypto'); +import crypto from 'crypto'; -const { - contractId: dpnsContractId, -} = require('@dashevo/dpns-contract/lib/systemIds'); +import dpnsSystemIds from '@dashevo/dpns-contract/lib/systemIds.js'; +const { contractId: dpnsContractId } = dpnsSystemIds; -const createClientWithFundedWallet = require('../../lib/test/createClientWithFundedWallet'); -const waitForSTPropagated = require('../../lib/waitForSTPropagated'); +import createClientWithFundedWallet from '../../lib/test/createClientWithFundedWallet.js'; +import waitForSTPropagated from '../../lib/waitForSTPropagated.js'; const getRandomDomain = () => crypto.randomBytes(10).toString('hex'); diff --git a/packages/platform-test-suite/test/e2e/wallet.spec.js b/packages/platform-test-suite/test/e2e/wallet.spec.js index 241ba81204b..0c2ac440be4 100644 --- a/packages/platform-test-suite/test/e2e/wallet.spec.js +++ b/packages/platform-test-suite/test/e2e/wallet.spec.js @@ -1,9 +1,9 @@ -const Dash = require('dash'); +import Dash from 'dash'; -const getDAPISeeds = require('../../lib/test/getDAPISeeds'); +import getDAPISeeds from '../../lib/test/getDAPISeeds.js'; -const createClientWithFundedWallet = require('../../lib/test/createClientWithFundedWallet'); -const waitForBalanceToChange = require('../../lib/test/waitForBalanceToChange'); +import createClientWithFundedWallet from '../../lib/test/createClientWithFundedWallet.js'; +import waitForBalanceToChange from '../../lib/test/waitForBalanceToChange.js'; const { EVENTS } = Dash.WalletLib; diff --git a/packages/platform-test-suite/test/e2e/withdrawals.spec.js b/packages/platform-test-suite/test/e2e/withdrawals.spec.js index b7afc0fb2c7..fdb59ac0d65 100644 --- a/packages/platform-test-suite/test/e2e/withdrawals.spec.js +++ b/packages/platform-test-suite/test/e2e/withdrawals.spec.js @@ -1,10 +1,10 @@ -const { expect } = require('chai'); +import { expect } from 'chai'; -const wait = require('@dashevo/dapi-client/lib/utils/wait'); -const { STATUSES: WITHDRAWAL_STATUSES } = require('dash/build/SDK/Client/Platform/methods/identities/creditWithdrawal'); +import wait from '@dashevo/dapi-client/lib/utils/wait.js'; +import { STATUSES as WITHDRAWAL_STATUSES } from 'dash/build/SDK/Client/Platform/methods/identities/creditWithdrawal.js'; -const createClientWithFundedWallet = require('../../lib/test/createClientWithFundedWallet'); -const waitForSTPropagated = require('../../lib/waitForSTPropagated'); +import createClientWithFundedWallet from '../../lib/test/createClientWithFundedWallet.js'; +import waitForSTPropagated from '../../lib/waitForSTPropagated.js'; // TODO: temporary disabled due to flakiness. These tests aren't important for now, since we are // going to release v1.0.0 with withdrawals disabled. diff --git a/packages/platform-test-suite/test/functional/core/broadcastTransaction.spec.js b/packages/platform-test-suite/test/functional/core/broadcastTransaction.spec.js index 8f991426804..19529cfa684 100644 --- a/packages/platform-test-suite/test/functional/core/broadcastTransaction.spec.js +++ b/packages/platform-test-suite/test/functional/core/broadcastTransaction.spec.js @@ -1,6 +1,6 @@ -const Dash = require('dash'); +import Dash from 'dash'; -const createClientWithFundedWallet = require('../../../lib/test/createClientWithFundedWallet'); +import createClientWithFundedWallet from '../../../lib/test/createClientWithFundedWallet.js'; const { Core: { PrivateKey } } = Dash; diff --git a/packages/platform-test-suite/test/functional/core/getBlock.spec.js b/packages/platform-test-suite/test/functional/core/getBlock.spec.js index 8a1de774d7d..91435dc9070 100644 --- a/packages/platform-test-suite/test/functional/core/getBlock.spec.js +++ b/packages/platform-test-suite/test/functional/core/getBlock.spec.js @@ -1,6 +1,6 @@ -const Dash = require('dash'); +import Dash from 'dash'; -const createClientWithoutWallet = require('../../../lib/test/createClientWithoutWallet'); +import createClientWithoutWallet from '../../../lib/test/createClientWithoutWallet.js'; const { Core: { Block }, Essentials: { Buffer } } = Dash; diff --git a/packages/platform-test-suite/test/functional/core/getBlockHash.spec.js b/packages/platform-test-suite/test/functional/core/getBlockHash.spec.js index b7df1e3b884..23952d9f52b 100644 --- a/packages/platform-test-suite/test/functional/core/getBlockHash.spec.js +++ b/packages/platform-test-suite/test/functional/core/getBlockHash.spec.js @@ -1,4 +1,4 @@ -const createClientWithoutWallet = require('../../../lib/test/createClientWithoutWallet'); +import createClientWithoutWallet from '../../../lib/test/createClientWithoutWallet.js'; describe('Core', () => { describe('getBlockHash', () => { diff --git a/packages/platform-test-suite/test/functional/core/getBlockchainStatus.spec.js b/packages/platform-test-suite/test/functional/core/getBlockchainStatus.spec.js index 780e2da5887..0809b07a44b 100644 --- a/packages/platform-test-suite/test/functional/core/getBlockchainStatus.spec.js +++ b/packages/platform-test-suite/test/functional/core/getBlockchainStatus.spec.js @@ -1,6 +1,8 @@ -const { Essentials: { Buffer } } = require('dash'); +import Dash from 'dash'; -const createClientWithoutWallet = require('../../../lib/test/createClientWithoutWallet'); +import createClientWithoutWallet from '../../../lib/test/createClientWithoutWallet.js'; + +const { Essentials: { Buffer } } = Dash; describe('Core', () => { describe('getBlockchainStatus', function main() { diff --git a/packages/platform-test-suite/test/functional/core/getMasternodeStatus.spec.js b/packages/platform-test-suite/test/functional/core/getMasternodeStatus.spec.js index eb473c739ca..c6c81bcc60d 100644 --- a/packages/platform-test-suite/test/functional/core/getMasternodeStatus.spec.js +++ b/packages/platform-test-suite/test/functional/core/getMasternodeStatus.spec.js @@ -1,6 +1,8 @@ -const { Essentials: { Buffer } } = require('dash'); +import Dash from 'dash'; -const createClientWithoutWallet = require('../../../lib/test/createClientWithoutWallet'); +import createClientWithoutWallet from '../../../lib/test/createClientWithoutWallet.js'; + +const { Essentials: { Buffer } } = Dash; describe.skip('Core', () => { describe('getMasternodeStatus', function main() { diff --git a/packages/platform-test-suite/test/functional/core/getTransaction.spec.js b/packages/platform-test-suite/test/functional/core/getTransaction.spec.js index 0c9088d00a3..afdf8a76cbe 100644 --- a/packages/platform-test-suite/test/functional/core/getTransaction.spec.js +++ b/packages/platform-test-suite/test/functional/core/getTransaction.spec.js @@ -1,7 +1,7 @@ -const Dash = require('dash'); +import Dash from 'dash'; -const wait = require('../../../lib/wait'); -const createClientWithFundedWallet = require('../../../lib/test/createClientWithFundedWallet'); +import wait from '../../../lib/wait.js'; +import createClientWithFundedWallet from '../../../lib/test/createClientWithFundedWallet.js'; const { Core: { Transaction, PrivateKey }, DAPIClient: { diff --git a/packages/platform-test-suite/test/functional/dapi/subscribeToBlockHeadersWithChainLocksHandlerFactory.spec.js b/packages/platform-test-suite/test/functional/dapi/subscribeToBlockHeadersWithChainLocksHandlerFactory.spec.js index 1ee274c38e1..78b6078fd2e 100644 --- a/packages/platform-test-suite/test/functional/dapi/subscribeToBlockHeadersWithChainLocksHandlerFactory.spec.js +++ b/packages/platform-test-suite/test/functional/dapi/subscribeToBlockHeadersWithChainLocksHandlerFactory.spec.js @@ -1,9 +1,9 @@ -const EventEmitter = require('events'); -const Dash = require('dash'); +import EventEmitter from 'events'; +import Dash from 'dash'; -const GrpcErrorCodes = require('@dashevo/grpc-common/lib/server/error/GrpcErrorCodes'); -const getDAPISeeds = require('../../../lib/test/getDAPISeeds'); -const createClientWithFundedWallet = require('../../../lib/test/createClientWithFundedWallet'); +import GrpcErrorCodes from '@dashevo/grpc-common/lib/server/error/GrpcErrorCodes.js'; +import getDAPISeeds from '../../../lib/test/getDAPISeeds.js'; +import createClientWithFundedWallet from '../../../lib/test/createClientWithFundedWallet.js'; const { Core: { @@ -137,19 +137,6 @@ describe('subscribeToBlockHeadersWithChainLocksHandlerFactory', () => { expect(streamError).to.not.exist(); expect(streamEnded).to.be.true(); - // TODO: Implement getBlockHeaders in dapi-client so we can compare block hashes - // const fetchedBlocks = []; - // - // for (let i = 1; i <= headersAmount; i++) { - // const rawBlock = await dapiClient.core.getBlockByHeight(i); - // const block = new Block(rawBlock); - // - // fetchedBlocks.push(block); - // } - // - // expect(historicalBlockHeaders.map((header) => header.hash)) - // .to.deep.equal(fetchedBlocks.map((block) => block.header.hash)); - expect(historicalBlockHeaders.length).to.equal(headersAmount); expect(bestChainLock.height).to.exist(); }); @@ -225,21 +212,6 @@ describe('subscribeToBlockHeadersWithChainLocksHandlerFactory', () => { expect(streamError).to.not.exist(); - // TODO: Implement getBlockHeaders in dapi-client to compare block hashes - // const fetchedHistoricalBlocks = []; - // - // for (let i = bestBlockHeight - historicalBlocksToGet + 1; i <= bestBlockHeight; i++) { - // const rawBlock = await dapiClient.core.getBlockByHeight(i); - // const block = new Block(rawBlock); - // - // fetchedHistoricalBlocks.push(block); - // } - // - // for (let i = 0; i < historicalBlocksToGet; i++) { - // expect(fetchedHistoricalBlocks[i].header.hash).to.equal( - // [...blockHeadersHashesFromStream][i]); - // } - expect(obtainedFreshBlock).to.be.true(); expect(latestChainLock).to.exist(); }); diff --git a/packages/platform-test-suite/test/functional/platform/DataContract.spec.js b/packages/platform-test-suite/test/functional/platform/DataContract.spec.js index 18cf12f1132..7e1e00c9b76 100644 --- a/packages/platform-test-suite/test/functional/platform/DataContract.spec.js +++ b/packages/platform-test-suite/test/functional/platform/DataContract.spec.js @@ -1,9 +1,9 @@ -const Dash = require('dash'); +import Dash from 'dash'; -const getDataContractFixture = require('../../../lib/test/fixtures/getDataContractFixture'); +import getDataContractFixture from '../../../lib/test/fixtures/getDataContractFixture.js'; -const createClientWithFundedWallet = require('../../../lib/test/createClientWithFundedWallet'); -const waitForSTPropagated = require('../../../lib/waitForSTPropagated'); +import createClientWithFundedWallet from '../../../lib/test/createClientWithFundedWallet.js'; +import waitForSTPropagated from '../../../lib/waitForSTPropagated.js'; const { Errors: { diff --git a/packages/platform-test-suite/test/functional/platform/Document.spec.js b/packages/platform-test-suite/test/functional/platform/Document.spec.js index f30c7b4feb4..c7370fbdcc6 100644 --- a/packages/platform-test-suite/test/functional/platform/Document.spec.js +++ b/packages/platform-test-suite/test/functional/platform/Document.spec.js @@ -1,13 +1,13 @@ -const Dash = require('dash'); -const { expect } = require('chai'); +import Dash from 'dash'; +import { expect } from 'chai'; -const { signStateTransition } = require('dash/build/SDK/Client/Platform/signStateTransition'); +import { signStateTransition } from 'dash/build/SDK/Client/Platform/signStateTransition.js'; -const getIdentityFixture = require('../../../lib/test/fixtures/getIdentityFixture'); -const getDataContractFixture = require('../../../lib/test/fixtures/getDataContractFixture'); +import getIdentityFixture from '../../../lib/test/fixtures/getIdentityFixture.js'; +import getDataContractFixture from '../../../lib/test/fixtures/getDataContractFixture.js'; -const createClientWithFundedWallet = require('../../../lib/test/createClientWithFundedWallet'); -const waitForSTPropagated = require('../../../lib/waitForSTPropagated'); +import createClientWithFundedWallet from '../../../lib/test/createClientWithFundedWallet.js'; +import waitForSTPropagated from '../../../lib/waitForSTPropagated.js'; const { Errors: { diff --git a/packages/platform-test-suite/test/functional/platform/Epoch.spec.js b/packages/platform-test-suite/test/functional/platform/Epoch.spec.js index 3d712b446d8..7281bf279c6 100644 --- a/packages/platform-test-suite/test/functional/platform/Epoch.spec.js +++ b/packages/platform-test-suite/test/functional/platform/Epoch.spec.js @@ -1,4 +1,4 @@ -const createClientWithoutWallet = require('../../../lib/test/createClientWithoutWallet'); +import createClientWithoutWallet from '../../../lib/test/createClientWithoutWallet.js'; describe('Platform', () => { describe('Epoch', () => { diff --git a/packages/platform-test-suite/test/functional/platform/Identity.spec.js b/packages/platform-test-suite/test/functional/platform/Identity.spec.js index c719b46fdee..ebbd3a775f4 100644 --- a/packages/platform-test-suite/test/functional/platform/Identity.spec.js +++ b/packages/platform-test-suite/test/functional/platform/Identity.spec.js @@ -1,11 +1,11 @@ -const Dash = require('dash'); +import Dash from 'dash'; -const { createFakeInstantLock } = require('dash/build/utils/createFakeIntantLock'); +import { createFakeInstantLock } from 'dash/build/utils/createFakeIntantLock.js'; -const { hash, sha256 } = require('@dashevo/wasm-dpp/lib/utils/hash'); -const getDataContractFixture = require('../../../lib/test/fixtures/getDataContractFixture'); -const createClientWithFundedWallet = require('../../../lib/test/createClientWithFundedWallet'); -const waitForSTPropagated = require('../../../lib/waitForSTPropagated'); +import { hash, sha256 } from '@dashevo/wasm-dpp/lib/utils/hash.js'; +import getDataContractFixture from '../../../lib/test/fixtures/getDataContractFixture.js'; +import createClientWithFundedWallet from '../../../lib/test/createClientWithFundedWallet.js'; +import waitForSTPropagated from '../../../lib/waitForSTPropagated.js'; const { Essentials: { diff --git a/packages/platform-test-suite/test/functional/platform/ProtocolVersion.spec.js b/packages/platform-test-suite/test/functional/platform/ProtocolVersion.spec.js index 5a550ab288c..7c90009b471 100644 --- a/packages/platform-test-suite/test/functional/platform/ProtocolVersion.spec.js +++ b/packages/platform-test-suite/test/functional/platform/ProtocolVersion.spec.js @@ -1,4 +1,4 @@ -const createClientWithoutWallet = require('../../../lib/test/createClientWithoutWallet'); +import createClientWithoutWallet from '../../../lib/test/createClientWithoutWallet.js'; describe('Platform', () => { describe('ProtocolVersion', () => { diff --git a/packages/platform-test-suite/test/functional/platform/getStatus.spec.js b/packages/platform-test-suite/test/functional/platform/getStatus.spec.js index e3c2dbd3d9d..f3cfc3a5f79 100644 --- a/packages/platform-test-suite/test/functional/platform/getStatus.spec.js +++ b/packages/platform-test-suite/test/functional/platform/getStatus.spec.js @@ -1,4 +1,4 @@ -const createClientWithoutWallet = require('../../../lib/test/createClientWithoutWallet'); +import createClientWithoutWallet from '../../../lib/test/createClientWithoutWallet.js'; describe('Platform', () => { describe('getStatus', () => { diff --git a/packages/platform-test-suite/test/functional/platform/proofs.spec.js b/packages/platform-test-suite/test/functional/platform/proofs.spec.js index 5b56d181779..3350d022049 100644 --- a/packages/platform-test-suite/test/functional/platform/proofs.spec.js +++ b/packages/platform-test-suite/test/functional/platform/proofs.spec.js @@ -1,14 +1,14 @@ -const Dash = require('dash'); -const { MerkleProof, MerkleTree } = require('js-merkle'); -const { - contractId: dpnsContractId, - ownerId: dpnsOwnerId, -} = require('@dashevo/dpns-contract/lib/systemIds'); - -const generateRandomIdentifier = require('../../../lib/test/utils/generateRandomIdentifier'); -const testProofStructure = require('../../../lib/test/testProofStructure'); -// const parseStoreTreeProof = require('../../../lib/parseStoreTreeProof'); -const createClientWithFundedWallet = require('../../../lib/test/createClientWithFundedWallet'); +import Dash from 'dash'; +import { MerkleProof, MerkleTree } from 'js-merkle'; +import { + contractId as dpnsContractId, + ownerId as dpnsOwnerId, +} from '@dashevo/dpns-contract/lib/systemIds.js'; + +import generateRandomIdentifier from '../../../lib/test/utils/generateRandomIdentifier.js'; +import testProofStructure from '../../../lib/test/testProofStructure.js'; +// import parseStoreTreeProof from '../../../lib/parseStoreTreeProof.js'; +import createClientWithFundedWallet from '../../../lib/test/createClientWithFundedWallet.js'; const { Core: { @@ -51,46 +51,9 @@ describe('Platform', () => { const dataContractResponseWithProof = await dashClient.getDAPIClient() .platform.getDataContract(contractId, { prove: true }); - // const dataContractResponse = await dashClient.getDAPIClient().platform.getDataContract( - // contractId, - // ); - - // const dataContract = await dashClient.platform.dpp - // .dataContract.createFromBuffer(dataContractResponse.getDataContract()); - const fullProof = dataContractResponseWithProof.getProof(); testProofStructure(expect, fullProof); - - // const dataContractsProofBuffer = fullProof.storeTreeProofs.getDataContractsProof(); - // - // const parsedStoreTreeProof = parseStoreTreeProof(dataContractsProofBuffer); - // - // expect(parsedStoreTreeProof.values.length).to.be.equal(1); - // - // const restoredDataContract = await dashClient.platform.dpp - // .dataContract.createFromBuffer(parsedStoreTreeProof.values[0]); - // - // expect(restoredDataContract.toObject()).to.be.deep.equal(dataContract.toObject()); - // - // const { rootHash: dataContractsLeafRoot } = executeProof(dataContractsProofBuffer); - // - // const verificationResult = verifyProof( - // dataContractsProofBuffer, - // [contractId], - // dataContractsLeafRoot, - // ); - // - // // We pass one key - // expect(verificationResult.length).to.be.equal(1); - // - // const recoveredDataContractBuffer = verificationResult[0]; - // expect(recoveredDataContractBuffer).to.be.an.instanceof(Uint8Array); - // - // const recoveredDataContract = await dashClient.platform.dpp - // .dataContract.createFromBuffer(recoveredDataContractBuffer); - // - // expect(recoveredDataContract.toObject()).to.be.deep.equal(dataContract.toObject()); }); // TODO(rs-drive-abci): restore. @@ -105,21 +68,6 @@ describe('Platform', () => { const fullProof = dataContractWithProof.proof; testProofStructure(expect, fullProof); - - // const dataContractsProofBuffer = fullProof.storeTreeProofs.getDataContractsProof(); - // - // const { rootHash: dataContractsLeafRoot } = executeProof(dataContractsProofBuffer); - // - // const verificationResult = verifyProof( - // dataContractsProofBuffer, - // [dataContractId], - // dataContractsLeafRoot, - // ); - // - // // We pass one key - // expect(verificationResult.length).to.be.equal(1); - // // Data contract doesn't exist, so result is null - // expect(verificationResult[0]).to.be.null(); }); }); @@ -140,8 +88,6 @@ describe('Platform', () => { identityAtKey8 = await dashClient.platform.identities.register(230000); - // await waitForBalanceToChange(walletAccount); - nonIncludedIdentityPubKeyHash = new PrivateKey().toPublicKey().hash; // Public key hashes @@ -158,38 +104,6 @@ describe('Platform', () => { const fullProof = identityProof.proof; testProofStructure(expect, fullProof); - - // const identitiesProofBuffer = fullProof.storeTreeProofs.getIdentitiesProof(); - // - // const parsedStoreTreeProof = parseStoreTreeProof(identitiesProofBuffer); - // - // const parsedIdentity = dashClient.platform.dpp - // .identity.createFromBuffer(parsedStoreTreeProof.values[0]); - // expect(identity.getId()).to.be.deep.equal(parsedIdentity.getId()); - // - // const { rootHash: identityLeafRoot } = executeProof(identitiesProofBuffer); - // - // const verificationResult = verifyProof( - // identitiesProofBuffer, - // [identity.getId()], - // identityLeafRoot, - // ); - // - // // We pass one key - // expect(verificationResult.length).to.be.equal(1); - // // Identity with id at index 0 doesn't exist - // const recoveredIdentityBuffer = verificationResult[0]; - // expect(recoveredIdentityBuffer).to.be.an.instanceof(Uint8Array); - // - // const recoveredIdentity = dashClient.platform.dpp - // .identity.createFromBuffer(recoveredIdentityBuffer); - // - // // Deep equal won't work in this case, because identity returned by the register - // const actualIdentity = identity.toObject(); - // // Because the actual identity state is before the registration, and the - // // balance wasn't added to it yet - // actualIdentity.balance = recoveredIdentity.toObject().balance; - // expect(recoveredIdentity.toObject()).to.be.deep.equal(actualIdentity); }); it('should be able to verify proof that identity does not exist', async () => { @@ -202,34 +116,6 @@ describe('Platform', () => { const fullProof = identityProof.proof; testProofStructure(expect, fullProof); - - // const identitiesProofBuffer = fullProof.storeTreeProofs.getIdentitiesProof(); - // - // // const rootTreeProof = parseRootTreeProof(fullProof.rootTreeProof); - // const parsedStoreTreeProof = parseStoreTreeProof(identitiesProofBuffer); - // - // const identitiesFromProof = parsedStoreTreeProof.values; - // - // const valueIds = identitiesFromProof.map((identityValue) => dashClient.platform.dpp - // .identity.createFromBuffer(identityValue).getId().toString('hex')); - // - // // The proof will contain left and right values to the empty place - // expect(valueIds.indexOf(fakeIdentityId.toString('hex'))).to.be.equal(-1); - // - // const { rootHash: identityLeafRoot } = executeProof(identitiesProofBuffer); - // - // const identityIdsToProve = [fakeIdentityId]; - // - // const verificationResult = verifyProof( - // identitiesProofBuffer, - // identityIdsToProve, - // identityLeafRoot, - // ); - // - // // We pass one key - // expect(verificationResult.length).to.be.equal(1); - // // Identity with id at index 0 doesn't exist - // expect(verificationResult[0]).to.be.null(); }); // eslint-disable-next max-len @@ -248,116 +134,6 @@ describe('Platform', () => { const fullProof = identityProof.proof; testProofStructure(expect, fullProof); - - // const identitiesProofBuffer = fullProof.storeTreeProofs.getIdentitiesProof(); - // const publicKeyHashesProofBuffer = fullProof.storeTreeProofs - // .getPublicKeyHashesToIdentityIdsProof(); - // - // /* Parsing values from the proof */ - // - // const parsedIdentitiesStoreTreeProof = parseStoreTreeProof(identitiesProofBuffer); - // - // // Existing identities should be in the identitiesProof, as it also serves - // // as an inclusion proof - // const restoredIdentities = parsedIdentitiesStoreTreeProof.values.map( - // (identityBuffer) => dashClient.platform.dpp.identity.createFromBuffer( - // identityBuffer, - // ), - // ); - // - // /* Figuring out what was found */ - // - // const foundIdentityIds = []; - // const notFoundPublicKeyHashes = []; - // - // // Scanning through public keys to figure out what identities were found - // for (const publicKeyHash of publicKeyHashes) { - // const foundIdentity = restoredIdentities - // .find( - // (restoredIdentity) => restoredIdentity.getPublicKeyById(0) - // .hash().toString('hex') === publicKeyHash.toString('hex'), - // ); - // if (foundIdentity) { - // foundIdentityIds.push(foundIdentity.getId()); - // } else { - // notFoundPublicKeyHashes.push(publicKeyHash); - // } - // } - // - // // We expect to find 2 identities out of 3 keys - // expect(foundIdentityIds.length).to.be.equal(2); - // expect(notFoundPublicKeyHashes.length).to.be.equal(1); - // - // // Note that identities in the proof won't necessary preserve the order in which they - // // were requested. This happens due to the proof structure: sorting values in the - // // proof would result in a different root hash. - // expect(foundIdentityIds.findIndex( - // (identityId) => identityId.toString('hex') === - // identityAtKey6.getId().toString('hex'), - // )).to.be.greaterThan(-1); - // expect(foundIdentityIds.findIndex( - // (identityId) => identityId.toString('hex') === - // identityAtKey8.getId().toString('hex'), - // )).to.be.greaterThan(-1); - // - // expect(notFoundPublicKeyHashes[0]).to.be.deep.equal(nonIncludedIdentityPubKeyHash); - // - // // Non-existing public key hash should be included into the identityIdsProof, - // // as it serves as a non-inclusion proof for the public keys - // - // /* Extracting root */ - // - // // While extracting the root isn't specifically useful for this test, - // // it is needed to fit those roots into the root tree later. - // const { rootHash: identityLeafRoot } = executeProof(identitiesProofBuffer); - // const { rootHash: identityIdsLeafRoot } = executeProof(publicKeyHashesProofBuffer); - // - // /* Inclusion proof */ - // - // // Note that you first has to parse values from the - // // proof and find identity ids you were looking for - // const inclusionVerificationResult = verifyProof( - // identitiesProofBuffer, - // foundIdentityIds, - // identityLeafRoot, - // ); - // - // expect(inclusionVerificationResult.length).to.be.equal(2); - // - // const firstRecoveredIdentityBuffer = inclusionVerificationResult[0]; - // const secondRecoveredIdentityBuffer = inclusionVerificationResult[1]; - // expect(firstRecoveredIdentityBuffer).to.be.an.instanceof(Uint8Array); - // expect(secondRecoveredIdentityBuffer).to.be.an.instanceof(Uint8Array); - // - // const firstRecoveredIdentity = dashClient.platform.dpp - // .identity.createFromBuffer(firstRecoveredIdentityBuffer); - // - // const secondRecoveredIdentity = dashClient.platform.dpp - // .identity.createFromBuffer(secondRecoveredIdentityBuffer); - // - // // Deep equal won't work in this case, because identity returned by the register - // const actualIdentityAtKey6 = identityAtKey6.toObject(); - // const actualIdentityAtKey8 = identityAtKey8.toObject(); - // // Because the actual identity state is before the registration, and the - // // balance wasn't added to it yet - // actualIdentityAtKey6.balance = firstRecoveredIdentity.toObject().balance; - // actualIdentityAtKey8.balance = secondRecoveredIdentity.toObject().balance; - // - // expect(firstRecoveredIdentity.toObject()).to.be.deep.equal(actualIdentityAtKey6); - // expect(secondRecoveredIdentity.toObject()).to.be.deep.equal(actualIdentityAtKey8); - // - // /* Non-inclusion proof */ - // - // const nonInclusionVerificationResult = verifyProof( - // publicKeyHashesProofBuffer, - // notFoundPublicKeyHashes, - // identityIdsLeafRoot, - // ); - // - // expect(nonInclusionVerificationResult.length).to.be.equal(1); - // - // const nonIncludedIdentityId = nonInclusionVerificationResult[0]; - // expect(nonIncludedIdentityId).to.be.null(); }); }); }); @@ -367,20 +143,6 @@ describe('Platform', () => { it('should be correct for all endpoints', async () => { // This test requests all endpoints instead of having multiple test for each endpoint // on purpose. - // - // The reason being is that when verifying merkle proof, you usually need some value to - // compare it to, and platform doesn't provide one. There are two ways to verify that - // the root tree proof is working: either by knowing its root in advance, or by - // verifying it's signature that is also included in the response. - // Verifying signature requires verifying the header chain, which is not - // currently implemented in the JS SDK (Although it is implemented in Java and iOS SDK). - // So we left with only one option: to know the proof in advance. - // Platform doesn't give it directly, but we can reconstruct it from - // store tree leaves. This if fine in this case because this test doesn't test - // store tree proofs (every endpoint has its own separate store tree proof test). - // By making requests to all endpoints we can recover all leaves hashes, and construct - // the original root tree from it. Then we can get the root from that tree and use it - // as a reference root when verifying the root tree proof. const dapiClient = await dashClient.getDAPIClient(); const identityId = Identifier.from(dpnsOwnerId); diff --git a/packages/platform-test-suite/test/functional/platform/waitForStateTransitionResult.spec.js b/packages/platform-test-suite/test/functional/platform/waitForStateTransitionResult.spec.js index 16452cdca1b..94b0d35ddb1 100644 --- a/packages/platform-test-suite/test/functional/platform/waitForStateTransitionResult.spec.js +++ b/packages/platform-test-suite/test/functional/platform/waitForStateTransitionResult.spec.js @@ -1,10 +1,10 @@ -const crypto = require('crypto'); +import crypto from 'crypto'; -const { MerkleProof } = require('js-merkle'); +import { MerkleProof } from 'js-merkle'; -const createClientWithFundedWallet = require('../../../lib/test/createClientWithFundedWallet'); +import createClientWithFundedWallet from '../../../lib/test/createClientWithFundedWallet.js'; -const parseStoreTreeProof = require('../../../lib/parseStoreTreeProof'); +import parseStoreTreeProof from '../../../lib/parseStoreTreeProof.js'; // TODO: Fix test to be running in Browser diff --git a/yarn.lock b/yarn.lock index b0db4e14fba..62d5e465f71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1472,17 +1472,6 @@ __metadata: languageName: node linkType: hard -"@dabh/diagnostics@npm:^2.0.2": - version: 2.0.2 - resolution: "@dabh/diagnostics@npm:2.0.2" - dependencies: - colorspace: "npm:1.1.x" - enabled: "npm:2.0.x" - kuler: "npm:^2.0.0" - checksum: 10/d0c7ae32da9fc6061272ef56cf2c5af9c255e034783b68cfe3b0d47e806145d0723e6f5743e4c9fc0abae73658ca309498572688da2fbcfc56c16a8671dbe707 - languageName: node - linkType: hard - "@dashevo/bench-suite@workspace:packages/bench-suite": version: 0.0.0-use.local resolution: "@dashevo/bench-suite@workspace:packages/bench-suite" @@ -1828,49 +1817,23 @@ __metadata: "@dashevo/wallet-lib": "workspace:*" "@dashevo/wasm-dpp": "workspace:*" "@dashevo/withdrawals-contract": "workspace:*" - assert: "npm:^2.0.0" - assert-browserify: "npm:^2.0.0" - browserify-zlib: "npm:^0.2.0" - buffer: "npm:^6.0.3" bufferutil: "npm:^4.0.6" chai: "npm:^4.3.10" chai-as-promised: "npm:^7.1.1" - crypto-browserify: "npm:^3.12.1" dash: "workspace:*" dirty-chai: "npm:^2.0.1" dotenv-safe: "npm:^8.2.0" eslint: "npm:^9.18.0" - events: "npm:^3.3.0" glob: "npm:^10.3.4" - https-browserify: "npm:^1.0.0" js-merkle: "npm:^0.1.5" - karma: "npm:^6.4.3" - karma-chai: "npm:^0.1.0" - karma-chrome-launcher: "npm:^3.1.0" - karma-firefox-launcher: "npm:^2.1.2" - karma-mocha: "npm:^2.0.1" - karma-mocha-reporter: "npm:^2.2.5" - karma-sourcemap-loader: "npm:^0.3.7" - karma-webpack: "npm:^5.0.0" localforage: "npm:^1.10.0" mocha: "npm:^11.1.0" - net: "npm:^1.0.2" nodeforage: "npm:^1.1.2" - os-browserify: "npm:^0.3.0" - path-browserify: "npm:^1.0.1" - process: "npm:^0.11.10" semver: "npm:^7.5.3" setimmediate: "npm:^1.0.5" sinon: "npm:^18.0.1" sinon-chai: "npm:^3.7.0" - stream-browserify: "npm:^3.0.0" - stream-http: "npm:^3.2.0" - string_decoder: "npm:^1.3.0" - tls: "npm:^0.0.1" - url: "npm:^0.11.3" utf-8-validate: "npm:^5.0.9" - util: "npm:^0.12.4" - webpack: "npm:^5.104.0" ws: "npm:^8.17.1" bin: test: bin/test.sh @@ -5192,18 +5155,6 @@ __metadata: languageName: node linkType: hard -"assert-browserify@npm:^2.0.0": - version: 2.0.0 - resolution: "assert-browserify@npm:2.0.0" - dependencies: - es6-object-assign: "npm:^1.1.0" - is-nan: "npm:^1.2.1" - object-is: "npm:^1.0.1" - util: "npm:^0.12.0" - checksum: 10/161984368c673dc574af032e3057ae31f0bb74ac1e34922b53a45ef431112cce5ade4a5bde8a53eebdbb0615395e3dc924762e6a86c0c60c25d4c3794e811a4b - languageName: node - linkType: hard - "assert@npm:^2.0.0": version: 2.0.0 resolution: "assert@npm:2.0.0" @@ -5260,7 +5211,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.1.0, async@npm:^3.2.0, async@npm:^3.2.3, async@npm:^3.2.4": +"async@npm:^3.2.0, async@npm:^3.2.3, async@npm:^3.2.4": version: 3.2.4 resolution: "async@npm:3.2.4" checksum: 10/bebb5dc2258c45b83fa1d3be179ae0eb468e1646a62d443c8d60a45e84041b28fccebe1e2d1f234bfc3dcad44e73dcdbf4ba63d98327c9f6556e3dbd47c2ae8b @@ -5723,15 +5674,6 @@ __metadata: languageName: node linkType: hard -"browserify-zlib@npm:^0.2.0": - version: 0.2.0 - resolution: "browserify-zlib@npm:0.2.0" - dependencies: - pako: "npm:~1.0.5" - checksum: 10/852e72effdc00bf8acc6d167d835179eda9e5bd13721ae5d0a2d132dc542f33e73bead2959eb43a2f181a9c495bc2ae2bdb4ec37c4e37ff61a0277741cbaaa7a - languageName: node - linkType: hard - "browserslist@npm:^4.21.9": version: 4.22.1 resolution: "browserslist@npm:4.22.1" @@ -6502,7 +6444,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": +"color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -6534,16 +6476,6 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.6.0": - version: 1.6.0 - resolution: "color-string@npm:1.6.0" - dependencies: - color-name: "npm:^1.0.0" - simple-swizzle: "npm:^0.2.2" - checksum: 10/27c2365153d3dad41a6c28901c3079f1a0b2f0777309eba83a5533bcafdd2f8bfcd6aaf695f34506627757aebb7598ff18ad5b4361e586d346ce7ba74bb94969 - languageName: node - linkType: hard - "color-string@npm:^1.9.0": version: 1.9.1 resolution: "color-string@npm:1.9.1" @@ -6563,16 +6495,6 @@ __metadata: languageName: node linkType: hard -"color@npm:^3.1.3": - version: 3.2.1 - resolution: "color@npm:3.2.1" - dependencies: - color-convert: "npm:^1.9.3" - color-string: "npm:^1.6.0" - checksum: 10/bf70438e0192f4f62f4bfbb303e7231289e8cc0d15ff6b6cbdb722d51f680049f38d4fdfc057a99cb641895cf5e350478c61d98586400b060043afc44285e7ae - languageName: node - linkType: hard - "color@npm:^4.2.3": version: 4.2.3 resolution: "color@npm:4.2.3" @@ -6597,23 +6519,6 @@ __metadata: languageName: node linkType: hard -"colors@npm:^1.2.1": - version: 1.4.0 - resolution: "colors@npm:1.4.0" - checksum: 10/90b2d5465159813a3983ea72ca8cff75f784824ad70f2cc2b32c233e95bcfbcda101ebc6d6766bc50f57263792629bfb4f1f8a4dfbd1d240f229fc7f69b785fc - languageName: node - linkType: hard - -"colorspace@npm:1.1.x": - version: 1.1.4 - resolution: "colorspace@npm:1.1.4" - dependencies: - color: "npm:^3.1.3" - text-hex: "npm:1.0.x" - checksum: 10/bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 - languageName: node - linkType: hard - "commander@npm:4.0.1": version: 4.0.1 resolution: "commander@npm:4.0.1" @@ -7164,51 +7069,20 @@ __metadata: "@types/sinon": "npm:^9.0.4" "@types/sinon-chai": "npm:^3.2.4" "@yarnpkg/pnpify": "npm:^4.0.0-rc.42" - assert: "npm:^2.0.0" - browserify-zlib: "npm:^0.2.0" - bs58: "npm:^4.0.1" - buffer: "npm:^6.0.3" chai: "npm:^4.3.10" chai-as-promised: "npm:^7.1.1" chance: "npm:^1.1.6" - crypto-browserify: "npm:^3.12.1" dirty-chai: "npm:^2.0.1" dotenv-safe: "npm:^8.2.0" eslint: "npm:^9.18.0" - events: "npm:^3.3.0" - https-browserify: "npm:^1.0.0" - karma: "npm:^6.4.3" - karma-chai: "npm:^0.1.0" - karma-chrome-launcher: "npm:^3.1.0" - karma-firefox-launcher: "npm:^2.1.2" - karma-mocha: "npm:^2.0.1" - karma-mocha-reporter: "npm:^2.2.5" - karma-webpack: "npm:^5.0.0" mocha: "npm:^11.1.0" - net: "npm:^1.0.2" - node-inspect-extracted: "npm:^1.0.8" nodemon: "npm:^2.0.20" - os-browserify: "npm:^0.3.0" - path-browserify: "npm:^1.0.1" - process: "npm:^0.11.10" rimraf: "npm:^3.0.2" sinon: "npm:^18.0.1" sinon-chai: "npm:^3.7.0" - stream-browserify: "npm:^3.0.0" - stream-http: "npm:^3.2.0" - string_decoder: "npm:^1.3.0" - terser-webpack-plugin: "npm:^5.3.11" - tls: "npm:^0.0.1" - ts-loader: "npm:^9.5.0" - ts-mock-imports: "npm:^1.3.0" ts-node: "npm:^10.9.2" tsd: "npm:^0.28.1" typescript: "npm:^5.7.3" - url: "npm:^0.11.3" - util: "npm:^0.12.4" - webpack: "npm:^5.104.0" - webpack-cli: "npm:^4.9.1" - winston: "npm:^3.2.1" languageName: unknown linkType: soft @@ -7904,13 +7778,6 @@ __metadata: languageName: node linkType: hard -"enabled@npm:2.0.x": - version: 2.0.0 - resolution: "enabled@npm:2.0.0" - checksum: 10/9d256d89f4e8a46ff988c6a79b22fa814b4ffd82826c4fdacd9b42e9b9465709d3b748866d0ab4d442dfc6002d81de7f7b384146ccd1681f6a7f868d2acca063 - languageName: node - linkType: hard - "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -9087,13 +8954,6 @@ __metadata: languageName: node linkType: hard -"fecha@npm:^4.2.0": - version: 4.2.1 - resolution: "fecha@npm:4.2.1" - checksum: 10/6cf959d41a4c68d5b3296d9621e0d5b7c8ee6a5ea51f11b468742a5533b74d635dd12d2edafae0b29c9df060d4d650d1c30d415a14bdaae8fc1b5c836451fbb8 - languageName: node - linkType: hard - "figures@npm:^3.0.0": version: 3.2.0 resolution: "figures@npm:3.2.0" @@ -9255,13 +9115,6 @@ __metadata: languageName: node linkType: hard -"fn.name@npm:1.x.x": - version: 1.1.0 - resolution: "fn.name@npm:1.1.0" - checksum: 10/000198af190ae02f0138ac5fa4310da733224c628e0230c81e3fff7c4e094af7e0e8bb9f4357cabd21db601759d89f3445da744afbae20623cfa41edf3888397 - languageName: node - linkType: hard - "follow-redirects@npm:^1.15.5": version: 1.15.6 resolution: "follow-redirects@npm:1.15.6" @@ -11736,15 +11589,6 @@ __metadata: languageName: node linkType: hard -"karma-sourcemap-loader@npm:^0.3.7": - version: 0.3.8 - resolution: "karma-sourcemap-loader@npm:0.3.8" - dependencies: - graceful-fs: "npm:^4.1.2" - checksum: 10/f641355ec1f9788ffd6308681f72920930627b924b8cf9c911062cba76361322443a8424b03458c09d34dcd3f73f741a395f61a4eec28ca3349a98dac8265d61 - languageName: node - linkType: hard - "karma-webpack@npm:^5.0.0": version: 5.0.0 resolution: "karma-webpack@npm:5.0.0" @@ -11808,13 +11652,6 @@ __metadata: languageName: node linkType: hard -"kuler@npm:^2.0.0": - version: 2.0.0 - resolution: "kuler@npm:2.0.0" - checksum: 10/9e10b5a1659f9ed8761d38df3c35effabffbd19fc6107324095238e4ef0ff044392cae9ac64a1c2dda26e532426485342226b93806bd97504b174b0dcf04ed81 - languageName: node - linkType: hard - "language-subtag-registry@npm:^0.3.20": version: 0.3.23 resolution: "language-subtag-registry@npm:0.3.23" @@ -12154,19 +11991,6 @@ __metadata: languageName: node linkType: hard -"logform@npm:^2.2.0": - version: 2.3.0 - resolution: "logform@npm:2.3.0" - dependencies: - colors: "npm:^1.2.1" - fecha: "npm:^4.2.0" - ms: "npm:^2.1.1" - safe-stable-stringify: "npm:^1.1.0" - triple-beam: "npm:^1.3.0" - checksum: 10/1fbe98725e5ecddc610ddacde1bfac1da52fe4a58f12eef11893068581dd2d0e833396f3791f3c82cfe35ce0bc8f1e23982b6f78aa16f0c3f827a06264f63424 - languageName: node - linkType: hard - "long@npm:^4.0.0": version: 4.0.0 resolution: "long@npm:4.0.0" @@ -13094,13 +12918,6 @@ __metadata: languageName: node linkType: hard -"net@npm:^1.0.2": - version: 1.0.2 - resolution: "net@npm:1.0.2" - checksum: 10/d97e215d922e87e9aa86e87daae73ce7f4e291f2d71365a115f2f51831b1add86e73584e944285daafcad4058c09bb85e33250da84834a26a83020740d45b4a1 - languageName: node - linkType: hard - "nise@npm:^6.0.0": version: 6.1.3 resolution: "nise@npm:6.1.3" @@ -13191,13 +13008,6 @@ __metadata: languageName: node linkType: hard -"node-inspect-extracted@npm:^1.0.8": - version: 1.0.8 - resolution: "node-inspect-extracted@npm:1.0.8" - checksum: 10/4647a29afd1574ea513ceed1a421d64381799f116a0c50280c16bca51459a2958177d4c18528bd57368c64c777e6afe23446edb4d62fa960cbc637c658b26d9f - languageName: node - linkType: hard - "node-preload@npm:^0.2.1": version: 0.2.1 resolution: "node-preload@npm:0.2.1" @@ -13734,15 +13544,6 @@ __metadata: languageName: node linkType: hard -"one-time@npm:^1.0.0": - version: 1.0.0 - resolution: "one-time@npm:1.0.0" - dependencies: - fn.name: "npm:1.x.x" - checksum: 10/64d0160480eeae4e3b2a6fc0a02f452e05bb0cc8373a4ed56a4fc08c3939dcb91bc20075003ed499655bd16919feb63ca56f86eee7932c5251f7d629b55dfc90 - languageName: node - linkType: hard - "onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" @@ -13827,13 +13628,6 @@ __metadata: languageName: node linkType: hard -"os-browserify@npm:^0.3.0": - version: 0.3.0 - resolution: "os-browserify@npm:0.3.0" - checksum: 10/16e37ba3c0e6a4c63443c7b55799ce4066d59104143cb637ecb9fce586d5da319cdca786ba1c867abbe3890d2cbf37953f2d51eea85e20dd6c4570d6c54bfebf - languageName: node - linkType: hard - "own-keys@npm:^1.0.1": version: 1.0.1 resolution: "own-keys@npm:1.0.1" @@ -14064,13 +13858,6 @@ __metadata: languageName: node linkType: hard -"pako@npm:~1.0.5": - version: 1.0.11 - resolution: "pako@npm:1.0.11" - checksum: 10/1ad07210e894472685564c4d39a08717e84c2a68a70d3c1d9e657d32394ef1670e22972a433cbfe48976cb98b154ba06855dcd3fcfba77f60f1777634bec48c0 - languageName: node - linkType: hard - "param-case@npm:^3.0.4": version: 3.0.4 resolution: "param-case@npm:3.0.4" @@ -14926,7 +14713,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.2, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.7, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.2, readable-stream@npm:^2.3.5, readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" dependencies: @@ -15527,13 +15314,6 @@ __metadata: languageName: node linkType: hard -"safe-stable-stringify@npm:^1.1.0": - version: 1.1.1 - resolution: "safe-stable-stringify@npm:1.1.1" - checksum: 10/bddfc2334dfa68a7f976c2b57c0ce83c087b032abdd150a24f3ca9fe19b43accfa9634d04587a7fb3d7636bc6c3d728dda1311ad43eb85bb95793a707fb127ac - languageName: node - linkType: hard - "safe-stable-stringify@npm:^2.3.1": version: 2.4.3 resolution: "safe-stable-stringify@npm:2.4.3" @@ -16361,13 +16141,6 @@ __metadata: languageName: node linkType: hard -"stack-trace@npm:0.0.x": - version: 0.0.10 - resolution: "stack-trace@npm:0.0.10" - checksum: 10/7bd633f0e9ac46e81a0b0fe6538482c1d77031959cf94478228731709db4672fbbed59176f5b9a9fd89fec656b5dae03d084ef2d1b0c4c2f5683e05f2dbb1405 - languageName: node - linkType: hard - "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -16962,13 +16735,6 @@ __metadata: languageName: node linkType: hard -"text-hex@npm:1.0.x": - version: 1.0.0 - resolution: "text-hex@npm:1.0.0" - checksum: 10/1138f68adc97bf4381a302a24e2352f04992b7b1316c5003767e9b0d3367ffd0dc73d65001ea02b07cd0ecc2a9d186de0cf02f3c2d880b8a522d4ccb9342244a - languageName: node - linkType: hard - "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" @@ -17042,13 +16808,6 @@ __metadata: languageName: node linkType: hard -"tls@npm:^0.0.1": - version: 0.0.1 - resolution: "tls@npm:0.0.1" - checksum: 10/83aee8b284ac85630ea521b68774c9020d7701dc74788f69b92c84c8513132a21ef8f008e5513e24aaf6096ebc0dd50f2a819e1b7ea96e1ebb0202364c4e2a17 - languageName: node - linkType: hard - "tmp@npm:^0.2.4": version: 0.2.5 resolution: "tmp@npm:0.2.5" @@ -17129,13 +16888,6 @@ __metadata: languageName: node linkType: hard -"triple-beam@npm:^1.2.0, triple-beam@npm:^1.3.0": - version: 1.3.0 - resolution: "triple-beam@npm:1.3.0" - checksum: 10/7d7b77d8625fb252c126c24984a68de462b538a8fcd1de2abd0a26421629cf3527d48e23b3c2264f08f4a6c3bc40a478a722176f4d7b6a1acc154cb70c359f2b - languageName: node - linkType: hard - "ts-api-utils@npm:^1.0.1": version: 1.0.3 resolution: "ts-api-utils@npm:1.0.3" @@ -17181,16 +16933,6 @@ __metadata: languageName: node linkType: hard -"ts-mock-imports@npm:^1.3.0": - version: 1.3.8 - resolution: "ts-mock-imports@npm:1.3.8" - peerDependencies: - sinon: ">= 4.1.2" - typescript: ">=2.6.1" - checksum: 10/82ee2a725641626399e20f3707fd0e56f52a95077a87db1f7cf6e0e451b3a8da82b5426c1b5059b8da6a28c5efaf48867f0957d8f80ece553bb269f53a956673 - languageName: node - linkType: hard - "ts-node@npm:^10.9.1": version: 10.9.1 resolution: "ts-node@npm:10.9.1" @@ -18463,33 +18205,6 @@ __metadata: languageName: node linkType: hard -"winston-transport@npm:^4.4.0": - version: 4.4.0 - resolution: "winston-transport@npm:4.4.0" - dependencies: - readable-stream: "npm:^2.3.7" - triple-beam: "npm:^1.2.0" - checksum: 10/f1651e8a871038a8b71d6f8242f81a24764348e23dc0cca2da6085712a58c5669cfbcbd396638dbfefa76d73e6f627d69740e4e136e89396c28d014987d4ef9b - languageName: node - linkType: hard - -"winston@npm:^3.2.1": - version: 3.3.3 - resolution: "winston@npm:3.3.3" - dependencies: - "@dabh/diagnostics": "npm:^2.0.2" - async: "npm:^3.1.0" - is-stream: "npm:^2.0.0" - logform: "npm:^2.2.0" - one-time: "npm:^1.0.0" - readable-stream: "npm:^3.4.0" - stack-trace: "npm:0.0.x" - triple-beam: "npm:^1.3.0" - winston-transport: "npm:^4.4.0" - checksum: 10/60b74f2ea70e702c962f8834a6954fa9d1776f475121440a546106862b8b5b88cabc4827d71fd3c9b8bd0337c0954f7f109bbc0718a3c47948815b03ce2fb3d8 - languageName: node - linkType: hard - "word-wrap@npm:^1.2.4": version: 1.2.4 resolution: "word-wrap@npm:1.2.4"

V`dw0(pIoTJ{XzR5L|nqmymeP#;3Wrnf3fM{ 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