web-ledger-client
Advanced tools
Comparing version
# 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); | ||
} |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
32850
11.15%759
13.28%2
-50%2
100%+ Added
+ Added