You're Invited: Meet the Socket team at BSidesSF and RSAC - April 27 - May 1.RSVP →

web-ledger-client

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

web-ledger-client - npm Package Compare versions

Comparing version

to
2.1.0

# web-ledger-client ChangeLog
## 2.1.0 - 2019-04-09
### Added
- Add `getServiceEndpoint` API.
- Add `getTargetNode` API.
## 2.0.0 - 2019-02-20

@@ -10,4 +16,4 @@

- Initial release
- Extracted code from did-client-veres-one, did-io
- Changed from r2 to axios
- Initial release.
- Extracted code from did-client-veres-one, did-io.
- Changed from r2 to axios.

@@ -6,2 +6,3 @@ /*!

const _get = require('lodash.get');
const constants = require('./constants');

@@ -131,2 +132,15 @@ const {create} = require('apisauce');

async getServiceEndpoint({serviceId}) {
if(!this.ledgerAgent) {
await this.getAgent();
}
const serviceURL = _get(this.ledgerAgent.service, serviceId);
if(!serviceURL) {
throw new WebLedgerClientError(
'Service ID not found.', 'NotFoundError',
{ledgerAgent: this.ledgerAgent, serviceId});
}
return serviceURL;
}
async getStatus({headers = {}} = {}) {

@@ -136,2 +150,15 @@ return this.getDocument({headers, service: 'ledgerAgentStatusService'});

async getTargetNode() {
if(!this.ledgerAgent) {
await this.getAgent();
}
const {ledgerAgentStatus: {targetNode}} = this;
if(!targetNode) {
throw new WebLedgerClientError(
'The ledger agent does not define `targetNode`.', 'NotFoundError',
{ledgerAgentStatus: this.ledgerAgentStatus});
}
return targetNode;
}
async sendConfig({ledgerConfiguration}) {

@@ -138,0 +165,0 @@ return this.sendDocument(

{
"name": "web-ledger-client",
"version": "2.0.0",
"version": "2.1.0",
"description": "A WebLedger client.",

@@ -40,3 +40,4 @@ "homepage": "http://github.com/digitalbazaar/web-ledger-client",

"dependencies": {
"apisauce": "^1.0.2"
"apisauce": "^1.0.2",
"lodash.get": "^4.4.2"
},

@@ -43,0 +44,0 @@ "devDependencies": {

@@ -8,7 +8,7 @@ /*!

const chai = require('chai');
chai.should();
const should = chai.should();
const {expect} = chai;
const {constants, WebLedgerClient} = require('..');
const {constants, WebLedgerClient, WebLedgerClientError} = require('..');

@@ -79,2 +79,64 @@ const TEST_HOSTNAME = 'genesis.testnet.veres.one';

describe('getServiceEndpoint', () => {
beforeEach(() => {
nock('https://genesis.testnet.veres.one')
.get(`/ledger-agents`)
.reply(200, LEDGER_AGENTS_DOC);
_nockLedgerAgentStatus();
});
it('returns a service endpoint', async () => {
const result = await client.getServiceEndpoint(
{serviceId: 'ledgerOperationService'});
should.exist(result);
result.should.be.a('string');
result.should.equal(LEDGER_AGENT_STATUS.service.ledgerOperationService);
});
it('throws NotFoundError for an unknown service ID', async () => {
let error;
let result;
try {
result = await client.getServiceEndpoint(
{serviceId: 'unknownService'});
} catch(e) {
error = e;
}
should.exist(error);
should.not.exist(result);
error.should.be.instanceof(WebLedgerClientError);
error.name.should.equal('NotFoundError');
should.exist(error.details.serviceId);
should.exist(error.details.ledgerAgent);
});
}); // end getServiceEndpoint
describe('getTargetNode', () => {
beforeEach(() => {
nock('https://genesis.testnet.veres.one')
.get(`/ledger-agents`)
.reply(200, LEDGER_AGENTS_DOC);
});
it('returns the `targetNode` for a ledger agent', async () => {
_nockLedgerAgentStatus();
const result = await client.getTargetNode();
should.exist(result);
result.should.be.a('string');
result.should.equal(LEDGER_AGENT_STATUS.targetNode);
});
it('throws NotFoundError if `targetNode` is not defined', async () => {
_nockLedgerAgentStatus({removeTargetNode: true});
let error;
let result;
try {
result = await client.getTargetNode();
} catch(e) {
error = e;
}
should.exist(error);
should.not.exist(result);
error.should.be.instanceof(WebLedgerClientError);
error.name.should.equal('NotFoundError');
should.exist(error.details.ledgerAgentStatus);
});
}); // end getTargetNode
describe('getRecord', () => {

@@ -282,8 +344,12 @@ it('should fetch a did doc from ledger via https', async () => {

function _nockLedgerAgentStatus() {
function _nockLedgerAgentStatus({removeTargetNode = false} = {}) {
const {ledgerAgent: [{service: {ledgerAgentStatusService}}]} =
LEDGER_AGENTS_DOC;
const ledgerAgentStatus = JSON.parse(JSON.stringify(LEDGER_AGENT_STATUS));
if(removeTargetNode) {
delete ledgerAgentStatus.targetNode;
}
nock(ledgerAgentStatusService)
.get('/')
.reply(200, LEDGER_AGENT_STATUS);
.reply(200, ledgerAgentStatus);
}