Skip to content

Commit c286ec0

Browse files
authored
feat(sdk): add option to request all keys (#2445)
1 parent 26aff36 commit c286ec0

File tree

2 files changed

+57
-10
lines changed

2 files changed

+57
-10
lines changed

packages/js-dapi-client/lib/methods/platform/getIdentityKeys/getIdentityKeysFactory.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,14 @@ const {
44
GetIdentityKeysRequest,
55
KeyRequestType,
66
SpecificKeys,
7+
AllKeys,
78
},
89
} = require('@dashevo/dapi-grpc');
10+
911
const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb');
1012

13+
const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest;
14+
1115
const GetIdentityKeysResponse = require('./GetIdentityKeysResponse');
1216
const InvalidResponseError = require('../response/errors/InvalidResponseError');
1317

@@ -20,25 +24,30 @@ function getIdentityKeysFactory(grpcTransport) {
2024
* Fetch the version upgrade votes status
2125
* @typedef {getIdentityKeys}
2226
* @param {Buffer} identityId
23-
* @param {number[]} keyIds
27+
* @param {number[]=} keyIds
2428
* @param {number} limit
2529
* @param {DAPIClientOptions & {prove: boolean}} [options]
2630
* @returns {Promise<GetIdentityKeysResponse>}
2731
*/
2832
async function getIdentityKeys(identityId, keyIds, limit = 100, options = {}) {
29-
const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest;
30-
const getIdentityKeysRequest = new GetIdentityKeysRequest();
31-
3233
if (Buffer.isBuffer(identityId)) {
3334
// eslint-disable-next-line no-param-reassign
3435
identityId = Buffer.from(identityId);
3536
}
3637

38+
const getIdentityKeysRequest = new GetIdentityKeysRequest();
39+
const requestType = new KeyRequestType();
40+
41+
if (keyIds) {
42+
requestType.setSpecificKeys(new SpecificKeys().setKeyIdsList(keyIds));
43+
} else {
44+
requestType.setAllKeys(new AllKeys());
45+
}
46+
3747
getIdentityKeysRequest.setV0(
3848
new GetIdentityKeysRequestV0()
3949
.setIdentityId(identityId)
40-
.setRequestType(new KeyRequestType()
41-
.setSpecificKeys(new SpecificKeys().setKeyIdsList(keyIds)))
50+
.setRequestType(requestType)
4251
.setLimit(new UInt32Value([limit]))
4352
.setProve(!!options.prove),
4453
);

packages/js-dapi-client/test/unit/methods/platform/getIdentityKeys/getIdentityKeysFactory.spec.js

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const {
77
Proof: ProofResponse,
88
KeyRequestType,
99
SpecificKeys,
10+
AllKeys,
1011
},
1112
} = require('@dashevo/dapi-grpc');
1213
const { UInt32Value } = require('google-protobuf/google/protobuf/wrappers_pb');
@@ -24,6 +25,7 @@ describe('getIdentityKeysFactory', () => {
2425
let getIdentityKeys;
2526
let options;
2627
let response;
28+
let metadata;
2729
let keys;
2830
let identityId;
2931
let keyIds;
@@ -42,7 +44,7 @@ describe('getIdentityKeysFactory', () => {
4244
metadataFixture = getMetadataFixture();
4345
proofFixture = getProofFixture();
4446

45-
const metadata = new ResponseMetadata();
47+
metadata = new ResponseMetadata();
4648
metadata.setHeight(metadataFixture.height);
4749
metadata.setCoreChainLockedHeight(metadataFixture.coreChainLockedHeight);
4850
metadata.setTimeMs(metadataFixture.timeMs);
@@ -74,16 +76,52 @@ describe('getIdentityKeysFactory', () => {
7476
};
7577
});
7678

77-
it('should return identity keys', async () => {
78-
const result = await getIdentityKeys(identityId, keyIds, limit, options);
79+
it('should return specific identity keys', async () => {
80+
response.setV0(
81+
new GetIdentityKeysResponseV0()
82+
.setKeys(new Keys().setKeysBytesList([keys[0]]))
83+
.setMetadata(metadata),
84+
);
85+
86+
const result = await getIdentityKeys(identityId, [keyIds[0]], limit, options);
7987

8088
const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest;
8189
const request = new GetIdentityKeysRequest();
8290
request.setV0(
8391
new GetIdentityKeysRequestV0()
8492
.setIdentityId(identityId)
8593
.setRequestType(new KeyRequestType().setSpecificKeys(new SpecificKeys()
86-
.setKeyIdsList(keyIds)))
94+
.setKeyIdsList([keyIds[0]])))
95+
.setLimit(new UInt32Value([limit]))
96+
.setProve(false),
97+
);
98+
99+
expect(grpcTransportMock.request).to.be.calledOnceWithExactly(
100+
PlatformPromiseClient,
101+
'getIdentityKeys',
102+
request,
103+
options,
104+
);
105+
expect(result.getIdentityKeys()).to.deep.equal([keys[0]]);
106+
expect(result.getMetadata()).to.deep.equal(metadataFixture);
107+
expect(result.getProof()).to.equal(undefined);
108+
});
109+
110+
it('should return all identity keys', async () => {
111+
response.setV0(
112+
new GetIdentityKeysResponseV0()
113+
.setKeys(new Keys().setKeysBytesList(keys))
114+
.setMetadata(metadata),
115+
);
116+
117+
const result = await getIdentityKeys(identityId, null, limit, options);
118+
119+
const { GetIdentityKeysRequestV0 } = GetIdentityKeysRequest;
120+
const request = new GetIdentityKeysRequest();
121+
request.setV0(
122+
new GetIdentityKeysRequestV0()
123+
.setIdentityId(identityId)
124+
.setRequestType(new KeyRequestType().setAllKeys(new AllKeys()))
87125
.setLimit(new UInt32Value([limit]))
88126
.setProve(false),
89127
);

0 commit comments

Comments
 (0)