From 0de242f1ea8fd7494cf786f858923bb393932098 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Sun, 26 Jan 2025 21:51:36 +0700 Subject: [PATCH 1/3] fix(js-dapi-client): add ability to request all keys --- .../getIdentityKeys/getIdentityKeysFactory.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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 68b20db334e..3734b7e54d4 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js @@ -4,8 +4,10 @@ const { GetIdentityKeysRequest, KeyRequestType, SpecificKeys, + AllKeys, }, } = require('@dashevo/dapi-grpc'); + const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb'); const GetIdentityKeysResponse = require('./GetIdentityKeysResponse'); @@ -28,17 +30,23 @@ function getIdentityKeysFactory(grpcTransport) { async function getIdentityKeys(identityId, keyIds, limit = 100, options = {}) { const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest; const getIdentityKeysRequest = new GetIdentityKeysRequest(); + const requestType = new KeyRequestType(); if (Buffer.isBuffer(identityId)) { // eslint-disable-next-line no-param-reassign identityId = Buffer.from(identityId); } + if (keyIds) { + requestType.setSpecificKeys(new SpecificKeys().setKeyIdsList(keyIds)); + } else { + requestType.setAllKeys(new AllKeys()); + } + getIdentityKeysRequest.setV0( new GetIdentityKeysRequestV0() .setIdentityId(identityId) - .setRequestType(new KeyRequestType() - .setSpecificKeys(new SpecificKeys().setKeyIdsList(keyIds))) + .setRequestType(requestType) .setLimit(new UInt32Value([limit])) .setProve(!!options.prove), ); From e313e6b4833a68a417ffffd1cf64701133f5ea27 Mon Sep 17 00:00:00 2001 From: pshenmic Date: Thu, 6 Feb 2025 19:45:06 +0700 Subject: [PATCH 2/3] feat(js-dapi-client): add unit test case --- .../getIdentityKeys/getIdentityKeysFactory.js | 2 +- .../getIdentityKeysFactory.spec.js | 46 +++++++++++++++++-- 2 files changed, 43 insertions(+), 5 deletions(-) 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 3734b7e54d4..16db0f37026 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js @@ -22,7 +22,7 @@ function getIdentityKeysFactory(grpcTransport) { * Fetch the version upgrade votes status * @typedef {getIdentityKeys} * @param {Buffer} identityId - * @param {number[]} keyIds + * @param {number[]=} keyIds * @param {number} limit * @param {DAPIClientOptions & {prove: boolean}} [options] * @returns {Promise} 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 b1368ee41b9..6a99dc0e471 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 @@ -7,6 +7,7 @@ const { Proof: ProofResponse, KeyRequestType, SpecificKeys, + AllKeys, }, } = require('@dashevo/dapi-grpc'); const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb'); @@ -24,6 +25,7 @@ describe('getIdentityKeysFactory', () => { let getIdentityKeys; let options; let response; + let metadata; let keys; let identityId; let keyIds; @@ -42,7 +44,7 @@ describe('getIdentityKeysFactory', () => { metadataFixture = getMetadataFixture(); proofFixture = getProofFixture(); - const metadata = new ResponseMetadata(); + metadata = new ResponseMetadata(); metadata.setHeight(metadataFixture.height); metadata.setCoreChainLockedHeight(metadataFixture.coreChainLockedHeight); metadata.setTimeMs(metadataFixture.timeMs); @@ -74,8 +76,14 @@ describe('getIdentityKeysFactory', () => { }; }); - it('should return identity keys', async () => { - const result = await getIdentityKeys(identityId, keyIds, limit, options); + it('should return specific identity keys', async () => { + response.setV0( + new GetIdentityKeysResponseV0() + .setKeys(new Keys().setKeysBytesList([keys[0]])) + .setMetadata(metadata), + ); + + const result = await getIdentityKeys(identityId, [keyIds[0]], limit, options); const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest; const request = new GetIdentityKeysRequest(); @@ -83,7 +91,37 @@ describe('getIdentityKeysFactory', () => { new GetIdentityKeysRequestV0() .setIdentityId(identityId) .setRequestType(new KeyRequestType().setSpecificKeys(new SpecificKeys() - .setKeyIdsList(keyIds))) + .setKeyIdsList([keyIds[0]]))) + .setLimit(new UInt32Value([limit])) + .setProve(false), + ); + + expect(grpcTransportMock.request).to.be.calledOnceWithExactly( + PlatformPromiseClient, + 'getIdentityKeys', + request, + options, + ); + expect(result.getIdentityKeys()).to.deep.equal([keys[0]]); + expect(result.getMetadata()).to.deep.equal(metadataFixture); + expect(result.getProof()).to.equal(undefined); + }); + + it('should return all identity keys', async () => { + response.setV0( + new GetIdentityKeysResponseV0() + .setKeys(new Keys().setKeysBytesList(keys)) + .setMetadata(metadata), + ); + + const result = await getIdentityKeys(identityId, null, limit, options); + + const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest; + const request = new GetIdentityKeysRequest(); + request.setV0( + new GetIdentityKeysRequestV0() + .setIdentityId(identityId) + .setRequestType(new KeyRequestType().setAllKeys(new AllKeys())) .setLimit(new UInt32Value([limit])) .setProve(false), ); From 09add34874d725332f651ad1bb29a0967d826afb Mon Sep 17 00:00:00 2001 From: pshenmic Date: Thu, 6 Feb 2025 19:50:44 +0700 Subject: [PATCH 3/3] feat(js-dapi-client): optimize imports --- .../platform/getIdentityKeys/getIdentityKeysFactory.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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 16db0f37026..4bc32a03a65 100644 --- a/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js +++ b/packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js @@ -10,6 +10,8 @@ const { const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb'); +const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest; + const GetIdentityKeysResponse = require('./GetIdentityKeysResponse'); const InvalidResponseError = require('../response/errors/InvalidResponseError'); @@ -28,15 +30,14 @@ function getIdentityKeysFactory(grpcTransport) { * @returns {Promise} */ async function getIdentityKeys(identityId, keyIds, limit = 100, options = {}) { - const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest; - const getIdentityKeysRequest = new GetIdentityKeysRequest(); - const requestType = new KeyRequestType(); - if (Buffer.isBuffer(identityId)) { // eslint-disable-next-line no-param-reassign identityId = Buffer.from(identityId); } + const getIdentityKeysRequest = new GetIdentityKeysRequest(); + const requestType = new KeyRequestType(); + if (keyIds) { requestType.setSpecificKeys(new SpecificKeys().setKeyIdsList(keyIds)); } else {