Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1,256 changes: 49 additions & 1,207 deletions .pnp.cjs

Large diffs are not rendered by default.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2 changes: 1 addition & 1 deletion packages/js-dapi-client/.mocharc.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
require: lib/test/bootstrap.js
require: ./lib/test/bootstrap.js
recursive: true
timeout: 3000
29 changes: 29 additions & 0 deletions packages/js-dapi-client/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,35 @@ 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
[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

### Basic
Expand Down
45 changes: 0 additions & 45 deletions packages/js-dapi-client/karma.conf.js

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -253,4 +255,4 @@ BlockHeadersProvider.EVENTS = EVENTS;
BlockHeadersProvider.STATES = STATES;
BlockHeadersProvider.defaultOptions = { ...defaultOptions };

module.exports = BlockHeadersProvider;
export default BlockHeadersProvider;
Original file line number Diff line number Diff line change
@@ -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',
Expand Down Expand Up @@ -302,4 +304,4 @@ class BlockHeadersReader extends EventEmitter {

BlockHeadersReader.EVENTS = EVENTS;

module.exports = BlockHeadersReader;
export default BlockHeadersReader;
Original file line number Diff line number Diff line change
@@ -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') {
Expand Down Expand Up @@ -91,4 +91,4 @@ function createBlockHeadersProviderFromOptions(options, coreMethods, logger) {
return blockHeadersProvider;
}

module.exports = createBlockHeadersProviderFromOptions;
export default createBlockHeadersProviderFromOptions;
26 changes: 13 additions & 13 deletions packages/js-dapi-client/lib/DAPIClient.js
Original file line number Diff line number Diff line change
@@ -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',
Expand Down Expand Up @@ -120,4 +120,4 @@ DAPIClient.EVENTS = EVENTS;
* @property {BlockHeadersProviderOptions} [blockHeadersProviderOptions]
*/

module.exports = DAPIClient;
export default DAPIClient;
Original file line number Diff line number Diff line change
@@ -1,8 +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');
import logger from '../logger/index.js';
import { bytesToHex } from '../utils/bytes.js';

class SimplifiedMasternodeListProvider {
/**
Expand Down Expand Up @@ -100,25 +101,31 @@ 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,
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}`,
{
diffCount,
network: this.options.network,
error: e,
simplifiedMNListDiffObject,
simplifiedMNListDiffBytes: simplifiedMNListDiffBuffer.toString('hex'),
simplifiedMNListDiffBytes: diffBytesHex,
},
);

Expand Down Expand Up @@ -218,4 +225,4 @@ class SimplifiedMasternodeListProvider {

SimplifiedMasternodeListProvider.NULL_HASH = '0000000000000000000000000000000000000000000000000000000000000000';

module.exports = SimplifiedMasternodeListProvider;
export default SimplifiedMasternodeListProvider;
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -46,4 +48,4 @@ function createMasternodeListStreamFactory(
);
}

module.exports = createMasternodeListStreamFactory;
export default createMasternodeListStreamFactory;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const DAPIAddressHostMissingError = require('./errors/DAPIAddressHostMissingError');
import DAPIAddressHostMissingError from './errors/DAPIAddressHostMissingError.js';

class DAPIAddress {
/**
Expand Down Expand Up @@ -171,4 +171,4 @@ DAPIAddress.DEFAULT_PROTOCOL = 'https';
* @property {bool} [selfSigned]
*/

module.exports = DAPIAddress;
export default DAPIAddress;
Original file line number Diff line number Diff line change
@@ -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 {
/**
Expand Down Expand Up @@ -94,4 +95,4 @@ class ListDAPIAddressProvider {
}
}

module.exports = ListDAPIAddressProvider;
export default ListDAPIAddressProvider;
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
const DAPIAddress = require('./DAPIAddress');
import DAPIAddress from './DAPIAddress.js';

class SimplifiedMasternodeListDAPIAddressProvider {
/**
Expand Down Expand Up @@ -72,4 +72,4 @@ class SimplifiedMasternodeListDAPIAddressProvider {
}
}

module.exports = SimplifiedMasternodeListDAPIAddressProvider;
export default SimplifiedMasternodeListDAPIAddressProvider;
Original file line number Diff line number Diff line change
@@ -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}
Expand Down Expand Up @@ -110,4 +110,4 @@ function createDAPIAddressProviderFromOptions(options) {
return null;
}

module.exports = createDAPIAddressProviderFromOptions;
export default createDAPIAddressProviderFromOptions;
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
const DAPIClientError = require('../../errors/DAPIClientError');
import DAPIClientError from '../../errors/DAPIClientError.js';

class DAPIAddressHostMissingError extends DAPIClientError {
constructor() {
super('Host is required for DAPI address');
}
}

module.exports = DAPIAddressHostMissingError;
export default DAPIAddressHostMissingError;
2 changes: 1 addition & 1 deletion packages/js-dapi-client/lib/errors/DAPIClientError.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ class DAPIClientError extends Error {
}
}

module.exports = DAPIClientError;
export default DAPIClientError;
12 changes: 7 additions & 5 deletions packages/js-dapi-client/lib/index.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
const DAPIClient = require('./DAPIClient');

const NotFoundError = require('./transport/GrpcTransport/errors/NotFoundError');
const BlockHeadersProvider = require('./BlockHeadersProvider/BlockHeadersProvider');
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,
};

DAPIClient.BlockHeadersProvider = BlockHeadersProvider;
DAPIClient.bytes = bytes;

module.exports = DAPIClient;
export default DAPIClient;
export { NotFoundError, BlockHeadersProvider, bytes };
2 changes: 1 addition & 1 deletion packages/js-dapi-client/lib/logger/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,4 @@ function build(level = LOG_LEVEL, prefix = '') {
return logger;
}

module.exports = build();
export default build();
Loading
Loading