From ed36c284d4f7b278bfd9e73596b70fc847db97c3 Mon Sep 17 00:00:00 2001 From: Atsushin Date: Fri, 11 Dec 2020 23:02:08 +1100 Subject: [PATCH] BE-834 Fix memory leak issue of sync process (#206) * BE-834 Fix memory leak issue in the setup of DS Changed to keep a discovery service instance after initializing it at the boot phase. Signed-off-by: Atsushi Neki * BE-834 Add unit test for the fix of memory leak issue Signed-off-by: Atsushi Neki * Add code coverage for unit test Signed-off-by: Atsushi Neki --- .gitignore | 2 +- .mocharc.json | 8 + .nycrc.json | 18 + app/platform/fabric/gateway/FabricGateway.ts | 116 +- app/test/FabricGateway.test.ts | 213 ++ app/test/artifacts/hellochannel.tx | Bin 314 -> 0 bytes .../help/Test-ubuntu-install-cello.md | 84 - .../help/Test-ubuntu-install-composer.md | 208 -- app/test/artifacts/network-config.yaml | 247 -- app/test/artifacts/org1.yaml | 54 - app/test/block.js | 55 - app/test/blockactivity.js | 55 - app/test/blockandtx.js | 59 - app/test/blocksbyhour.js | 45 - app/test/blocksbyminute.js | 45 - app/test/blocktransaction.js | 45 - app/test/chaincode.js | 51 - app/test/changechannel.js | 38 - app/test/channels.js | 38 - app/test/channelsinfo.js | 49 - app/test/currentchannel.js | 43 - app/test/dateutil.js | 22 - app/test/enroll.js | 48 - app/test/expect.ts | 12 + app/test/fixtures/block.json | 1057 ------ app/test/fixtures/blockactivity.json | 35 - app/test/fixtures/blockandtx.json | 235 -- app/test/fixtures/blocksbyhour.json | 249 -- app/test/fixtures/blocksbyminute.json | 249 -- app/test/fixtures/blocktransaction.json | 5 - app/test/fixtures/chaincode.json | 12 - app/test/fixtures/changechannel.json | 3 - app/test/fixtures/channels.json | 4 - app/test/fixtures/channelsinfo.json | 23 - app/test/fixtures/currentchannel.json | 3 - app/test/fixtures/enroll.json | 3 - app/test/fixtures/login.json | 10 - app/test/fixtures/networklist.json | 4 - app/test/fixtures/peers.json | 21 - app/test/fixtures/register.json | 3 - app/test/fixtures/reqMultiOrgs.json | 5 - app/test/fixtures/reqNoOrgs.json | 4 - app/test/fixtures/reqOneOrg.json | 5 - app/test/fixtures/status.json | 1 - app/test/fixtures/transaction.json | 71 - app/test/fixtures/txbyhour.json | 249 -- app/test/fixtures/txbyminute.json | 249 -- app/test/fixtures/txbyorg.json | 17 - app/test/login.js | 56 - app/test/networklist.js | 41 - app/test/package-lock.json | 2936 ----------------- app/test/package.json | 55 - app/test/peer.js | 50 - app/test/postgrespgtest.js | 124 - app/test/register.js | 50 - app/test/requestutils.js | 38 - app/test/status.js | 50 - app/test/test.js | 23 - app/test/transaction.js | 78 - app/test/txbyhour.js | 45 - app/test/txbyminute.js | 45 - app/test/txbyorg.js | 45 - ci/azure-pipelines.yml | 14 +- main.sh | 4 +- package-lock.json | 2243 ++++++++++++- package.json | 21 +- scripts/verify-license.sh | 2 +- syncstart.sh | 18 +- 68 files changed, 2526 insertions(+), 7484 deletions(-) create mode 100644 .mocharc.json create mode 100644 .nycrc.json create mode 100644 app/test/FabricGateway.test.ts delete mode 100644 app/test/artifacts/hellochannel.tx delete mode 100644 app/test/artifacts/help/Test-ubuntu-install-cello.md delete mode 100644 app/test/artifacts/help/Test-ubuntu-install-composer.md delete mode 100644 app/test/artifacts/network-config.yaml delete mode 100644 app/test/artifacts/org1.yaml delete mode 100644 app/test/block.js delete mode 100644 app/test/blockactivity.js delete mode 100644 app/test/blockandtx.js delete mode 100644 app/test/blocksbyhour.js delete mode 100644 app/test/blocksbyminute.js delete mode 100644 app/test/blocktransaction.js delete mode 100644 app/test/chaincode.js delete mode 100644 app/test/changechannel.js delete mode 100644 app/test/channels.js delete mode 100644 app/test/channelsinfo.js delete mode 100644 app/test/currentchannel.js delete mode 100644 app/test/dateutil.js delete mode 100644 app/test/enroll.js create mode 100644 app/test/expect.ts delete mode 100644 app/test/fixtures/block.json delete mode 100644 app/test/fixtures/blockactivity.json delete mode 100644 app/test/fixtures/blockandtx.json delete mode 100644 app/test/fixtures/blocksbyhour.json delete mode 100644 app/test/fixtures/blocksbyminute.json delete mode 100644 app/test/fixtures/blocktransaction.json delete mode 100644 app/test/fixtures/chaincode.json delete mode 100644 app/test/fixtures/changechannel.json delete mode 100644 app/test/fixtures/channels.json delete mode 100644 app/test/fixtures/channelsinfo.json delete mode 100644 app/test/fixtures/currentchannel.json delete mode 100644 app/test/fixtures/enroll.json delete mode 100644 app/test/fixtures/login.json delete mode 100644 app/test/fixtures/networklist.json delete mode 100644 app/test/fixtures/peers.json delete mode 100644 app/test/fixtures/register.json delete mode 100644 app/test/fixtures/reqMultiOrgs.json delete mode 100644 app/test/fixtures/reqNoOrgs.json delete mode 100644 app/test/fixtures/reqOneOrg.json delete mode 100644 app/test/fixtures/status.json delete mode 100644 app/test/fixtures/transaction.json delete mode 100644 app/test/fixtures/txbyhour.json delete mode 100644 app/test/fixtures/txbyminute.json delete mode 100644 app/test/fixtures/txbyorg.json delete mode 100644 app/test/login.js delete mode 100644 app/test/networklist.js delete mode 100644 app/test/package-lock.json delete mode 100644 app/test/package.json delete mode 100644 app/test/peer.js delete mode 100644 app/test/postgrespgtest.js delete mode 100644 app/test/register.js delete mode 100644 app/test/requestutils.js delete mode 100644 app/test/status.js delete mode 100644 app/test/test.js delete mode 100644 app/test/transaction.js delete mode 100644 app/test/txbyhour.js delete mode 100644 app/test/txbyminute.js delete mode 100644 app/test/txbyorg.js diff --git a/.gitignore b/.gitignore index 4d63ecd73..10afcdc16 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,7 @@ first-network/channel-artifacts/* tmp/wallet/* wallet/* *.swp -package-lock.json +# package-lock.json ssl-certs/*.pem ssl-certs/*.csr 0 diff --git a/.mocharc.json b/.mocharc.json new file mode 100644 index 000000000..9d7d1e68b --- /dev/null +++ b/.mocharc.json @@ -0,0 +1,8 @@ +{ + "require": "./node_modules/ts-node/register", + "watch-extensions": "ts", + "recursive": true, + "spec": ["./app/test/**/*.test.ts"], + "timeout": 10000, + "extension": ["ts"] +} diff --git a/.nycrc.json b/.nycrc.json new file mode 100644 index 000000000..cc2f2ee9b --- /dev/null +++ b/.nycrc.json @@ -0,0 +1,18 @@ +{ + "extends": "@istanbuljs/nyc-config-typescript", + "require": ["ts-node/register"], + "extension": [".ts"], + "reporter": ["lcov", "text-summary"], + "sourceMap": true, + "instrument": true, + "temp-dir": "app/test/.nyc_output", + "report-dir": "app/test/coverage", + "all": true, + "include": ["app"], + "exclude": ["**/e2e-test", "app/test"], + "check-coverage": false, + "branches": 80, + "lines": 80, + "functions": 80, + "statements": 80 +} diff --git a/app/platform/fabric/gateway/FabricGateway.ts b/app/platform/fabric/gateway/FabricGateway.ts index 79d2eb594..256e24133 100644 --- a/app/platform/fabric/gateway/FabricGateway.ts +++ b/app/platform/fabric/gateway/FabricGateway.ts @@ -7,7 +7,6 @@ import * as fabprotos from 'fabric-protos'; import { Discoverer, DiscoveryService } from 'fabric-common'; import concat from 'lodash/concat'; import * as path from 'path'; -import * as fs from 'fs'; import { helper } from '../../../common/helper'; import { explorerError } from '../../../common/ExplorerMessage'; import { ExplorerError } from '../../../common/ExplorerError'; @@ -32,6 +31,8 @@ export class FabricGateway { FSWALLET: string; enableAuthentication: boolean; asLocalhost: boolean; + ds: DiscoveryService; + dsTargets: Discoverer[]; /** * Creates an instance of FabricGateway. @@ -52,6 +53,8 @@ export class FabricGateway { this.FSWALLET = null; this.enableAuthentication = false; this.asLocalhost = false; + this.ds = null; + this.dsTargets = []; } async initialize() { @@ -373,61 +376,90 @@ export class FabricGateway { } } - async getDiscoveryResult(channelName) { + async setupDiscoveryRequest(channelName) { try { const network = await this.gateway.getNetwork(channelName); const channel = network.getChannel(); - const ds = new DiscoveryService('be discovery service', channel); + this.ds = new DiscoveryService('be discovery service', channel); - const client = new Client('discovery client'); - if (this.clientTlsIdentity) { - logger.info('client TLS enabled'); - client.setTlsClientCertAndKey( - this.clientTlsIdentity.credentials.certificate, - this.clientTlsIdentity.credentials.privateKey - ); - } else { - client.setTlsClientCertAndKey(); - } + const idx = this.gateway.identityContext; + // do the three steps + this.ds.build(idx); + this.ds.sign(idx); + } catch (error) { + logger.error('Failed to set up discovery service for channel', error); + this.ds = null; + } + } - const mspID = this.config.client.organization; - const targets = []; - for (const peer of this.config.organizations[mspID].peers) { - const discoverer = new Discoverer(`be discoverer ${peer}`, client, mspID); - const url = this.config.peers[peer].url; - const pem = this.fabricConfig.getPeerTlsCACertsPem(peer); - let grpcOpt = {}; - if ('grpcOptions' in this.config.peers[peer]) { - grpcOpt = this.config.peers[peer].grpcOptions; - } - const peer_endpoint = client.newEndpoint( - Object.assign(grpcOpt, { - url: url, - pem: pem - }) - ); - await discoverer.connect(peer_endpoint); - targets.push(discoverer); + async getDiscoveryServiceTarget() { + const client = new Client('discovery client'); + if (this.clientTlsIdentity) { + logger.info('client TLS enabled'); + client.setTlsClientCertAndKey( + this.clientTlsIdentity.credentials.certificate, + this.clientTlsIdentity.credentials.privateKey + ); + } else { + client.setTlsClientCertAndKey(); + } + + const targets: Discoverer[] = []; + const mspID = this.config.client.organization; + for (const peer of this.config.organizations[mspID].peers) { + const discoverer = new Discoverer(`be discoverer ${peer}`, client, mspID); + const url = this.config.peers[peer].url; + const pem = this.fabricConfig.getPeerTlsCACertsPem(peer); + let grpcOpt = {}; + if ('grpcOptions' in this.config.peers[peer]) { + grpcOpt = this.config.peers[peer].grpcOptions; } + const peer_endpoint = client.newEndpoint( + Object.assign(grpcOpt, { + url: url, + pem: pem + }) + ); + await discoverer.connect(peer_endpoint); + targets.push(discoverer); + } + return targets; + } - const idx = this.gateway.identityContext; - // do the three steps - ds.build(idx); - ds.sign(idx); - await ds.send({ + async sendDiscoveryRequest() { + try { + await this.ds.send({ asLocalhost: this.asLocalhost, + requestTimeout: 5000, refreshAge: 15000, - targets: targets + targets: this.dsTargets }); + logger.info('Succeeded to send discovery request'); - const result = await ds.getDiscoveryResults(true); + const result = await this.ds.getDiscoveryResults(true); return result; } catch (error) { - logger.error( - `Failed to get discovery result from channel ${channelName} : `, - error - ); + logger.error('Failed to send discovery request for channel', error); + this.ds.close(); + this.ds = null; } return null; } + + async getDiscoveryResult(channelName) { + if (!this.ds) { + await this.setupDiscoveryRequest(channelName); + } + + if (!this.dsTargets.length) { + this.dsTargets = await this.getDiscoveryServiceTarget(); + } + + if (this.ds && this.dsTargets.length) { + const result = await this.sendDiscoveryRequest(); + return result; + } + + return null; + } } diff --git a/app/test/FabricGateway.test.ts b/app/test/FabricGateway.test.ts new file mode 100644 index 000000000..37315fbc2 --- /dev/null +++ b/app/test/FabricGateway.test.ts @@ -0,0 +1,213 @@ +/* + *SPDX-License-Identifier: Apache-2.0 + */ + +import { expect } from './expect'; +import { FabricConfig } from '../platform/fabric/FabricConfig'; + +import proxyquire from 'proxyquire'; +import sinon from 'sinon'; +import { FabricGateway } from '../platform/fabric/gateway/FabricGateway'; + +// DiscoveryService (this.ds) +const stubSign = sinon.stub(); +const stubGetDiscoveryResults = sinon.stub(); +const stubClose = sinon.stub(); + +// Discoverer +const stubConnect = sinon.stub(); + +// logger +const stubError = sinon.stub(); +const stubInfo = sinon.stub(); + +// Client +const stubSetTlsClientCertAndKey = sinon.stub(); +const stubNewEndpoint = sinon.stub(); + +function getFabricGatewayInstance() { + const { FabricGateway } = proxyquire + .noCallThru() + .load('../platform/fabric/gateway/FabricGateway', { + 'fabric-common': { + DiscoveryService: function() { + return { + build: sinon.stub(), + sign: stubSign, + send: sinon.stub(), + getDiscoveryResults: stubGetDiscoveryResults, + close: stubClose + }; + }, + Client: function() { + return { + setTlsClientCertAndKey: stubSetTlsClientCertAndKey, + newEndpoint: stubNewEndpoint + }; + }, + Discoverer: function() { + return { + connect: stubConnect + }; + } + }, + '../../../common/helper': { + helper: { + getLogger: function() { + return { + error: stubError, + info: stubInfo + }; + } + } + } + }); + const config = new FabricConfig(); + config.initialize('first-network', { + name: 'My first network', + profile: './connection-profile/first-network.json' + }); + sinon.stub(config, 'getPeerTlsCACertsPem'); + + const gw = new FabricGateway(config); + gw.clientTlsIdentity = { + credentials: { + certificate: 'abc', + privateKey: 'def' + }, + mspId: 'org1', + type: 'X.509' + }; + + const stubGetNetwork = sinon.stub(gw.gateway, 'getNetwork'); + const stubGetChannel = sinon.stub(); + stubGetChannel.returns({}); + stubGetNetwork.returns(Promise.resolve({ getChannel: stubGetChannel })); + + return gw; +} + +function resetAllStubs() { + // DiscoveryService (this.ds) + stubSign.reset(); + stubGetDiscoveryResults.reset(); + stubClose.reset(); + + // Discoverer + stubConnect.reset(); + + // logger + stubError.reset(); + stubInfo.reset(); + + // Client + stubSetTlsClientCertAndKey.reset(); + stubNewEndpoint.reset(); +} + +describe('setupDiscoveryRequest', () => { + let gw: FabricGateway; + + before(() => { + gw = getFabricGatewayInstance(); + }); + + beforeEach(() => { + resetAllStubs(); + }); + + it('should return without error', async () => { + await gw.setupDiscoveryRequest('testChannel'); + expect(stubSign.calledOnce).to.be.equal(true); + }); + + it('should throw error if fail to sign', async () => { + stubSign.throws(); + await gw.setupDiscoveryRequest('testChannel'); + expect(stubError.calledOnce).to.be.equal(true); + }); +}); + +describe('getDiscoveryServiceTarget', () => { + let gw: FabricGateway; + + before(() => { + gw = getFabricGatewayInstance(); + }); + + beforeEach(() => { + resetAllStubs(); + }); + + it('should return without error', async () => { + const targetArray = await gw.getDiscoveryServiceTarget(); + expect(stubSetTlsClientCertAndKey.calledOnceWith('abc', 'def')).to.be.equal( + true + ); + expect(stubNewEndpoint.calledOnce).to.be.equal(true); + expect(stubConnect.calledOnce).to.be.equal(true); + expect(targetArray.length).to.be.equal(1); + }); + + it('should return without error when not assigned client TLS config', async () => { + gw.clientTlsIdentity = undefined; + const targetArray = await gw.getDiscoveryServiceTarget(); + expect(stubSetTlsClientCertAndKey.calledOnceWith()).to.be.equal(true); + expect(stubNewEndpoint.calledOnce).to.be.equal(true); + expect(stubConnect.calledOnce).to.be.equal(true); + expect(targetArray.length).to.be.equal(1); + }); +}); + +describe('sendDiscoveryRequest', () => { + let gw: FabricGateway; + + before(async () => { + gw = getFabricGatewayInstance(); + await gw.setupDiscoveryRequest('testChannel'); + }); + + beforeEach(() => { + resetAllStubs(); + }); + + it('should return without error', async () => { + stubGetDiscoveryResults.returns(Promise.resolve()); + await gw.sendDiscoveryRequest(); + expect(stubError.called).be.equal(false); + }); + + it('should throw error when failed to call getDiscoveryResults()', async () => { + stubGetDiscoveryResults.throws(); + await gw.sendDiscoveryRequest(); + expect(stubError.called).be.equal(true); + expect(stubClose.calledOnce).be.equal(true); + }); +}); + +describe('getDiscoveryResult', () => { + let gw: FabricGateway; + let stubSetupDiscoveryRequest: sinon.SinonStub; + + before(async () => { + gw = getFabricGatewayInstance(); + await gw.setupDiscoveryRequest('testChannel'); + stubSetupDiscoveryRequest = sinon.stub(gw, 'setupDiscoveryRequest'); + }); + + beforeEach(() => { + resetAllStubs(); + stubSetupDiscoveryRequest.reset(); + }); + + it('should return without error', async () => { + await gw.getDiscoveryResult('testChannel'); + expect(stubSetupDiscoveryRequest.calledOnce).be.equal(false); + }); + + it('should return without error if discover service has not been allocated yet', async () => { + gw.ds = null; + await gw.getDiscoveryResult('testChannel'); + expect(stubSetupDiscoveryRequest.calledOnce).be.equal(true); + }); +}); diff --git a/app/test/artifacts/hellochannel.tx b/app/test/artifacts/hellochannel.tx deleted file mode 100644 index 50d71a38e664fc7543a5c8232c292146e3d8e2ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmdO!aF97sB#2hUsEv1CwY7rqJE`i|0+=84`gkJz&kWz>M diff --git a/app/test/artifacts/help/Test-ubuntu-install-cello.md b/app/test/artifacts/help/Test-ubuntu-install-cello.md deleted file mode 100644 index 635bf7ef3..000000000 --- a/app/test/artifacts/help/Test-ubuntu-install-cello.md +++ /dev/null @@ -1,84 +0,0 @@ - - - -# Fabric Cluster started using Hyperledger Cello and configure to Explorer - -## Master Node ( 172.24.200.218) - -1. git clone https://github.com/hyperledger/cello.git && cd cello - -2. make setup-master - -3. sudo make start - - -## Worker Node ( 172.24.200.103) - -1. sudo systemctl stop docker.service - -2. sudo dockerd -H tcp://172.24.200.103:2375 -H unix:///var/run/docker.sock --api-cors-header='*' --default-ulimit=nofile=8192:16384 --default-ulimit=nproc=8192:16384 -D & - -3. git clone https://github.com/hyperledger/cello.git && cd cello - -4. make setup-worker - -## Verify docker is running from Master Node - -1. docker -H 172.24.200.103:2375 info - -## Verify Peer is running and get Ip to configure in explorer from Worker Node - -1. docker ps -``` -9e807ff75243 hyperledger/fabric-peer:1.1.0 "peer node start" About an hour ago Up About an hour 0.0.0.0:7750->7051/tcp, 0.0.0.0:7650->7053/tcp 5688ceeb13b24e1492b2b2ed676df6e0_peer1_org2 - -ff768afdbe14 hyperledger/fabric-peer:1.1.0 "peer node start" About an hour ago Up About an hour 0.0.0.0:7350->7051/tcp, 0.0.0.0:7250->7053/tcp 5688ceeb13b24e1492b2b2ed676df6e0_peer1_org1 - -bc86570c2b37 hyperledger/fabric-peer:1.1.0 "peer node start" About an hour ago Up About an hour 0.0.0.0:7550->7051/tcp, 0.0.0.0:7450->7053/tcp 5688ceeb13b24e1492b2b2ed676df6e0_peer0_org2 - -c51e6636bb45 hyperledger/fabric-peer:1.1.0 "peer node start" About an hour ago Up About an hour 0.0.0.0:7150->7051/tcp, 0.0.0.0:7050->7053/tcp 5688ceeb13b24e1492b2b2ed676df6e0_peer0_org1 - -ed09a52dba0e hyperledger/fabric-orderer:1.1.0 "orderer" About an hour ago Up About an hour 0.0.0.0:8050->7050/tcp 5688ceeb13b24e1492b2b2ed676df6e0_orderer -``` - -2. docker log c51e6636bb45 ( to verify all peer is up without any error) - -## Hyperledger Explorer configuration - -/app/platform/fabric/config.json (change the configuration , request,event,server-hostname,tls_cacerts,admin(key,value), channelname,mspid,server-hostname,requests,tls_cacerts) -``` -{ - "network-config": { - "org1": { - "name": "peerOrg1", - "mspid": "Org1MSP", - "peer1": { - "requests": "grpcs://127.0.0.1:7150", - "events": "grpcs://127.0.0.1:7050", - "server-hostname": "peer0.org1.example.com", - "tls_cacerts": "/opt/cello/fabric-1.1/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" - }, - "admin": { - "key": "/opt/cello/fabric-1.1/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore", - "cert": "/opt/cello/fabric-1.1/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts" - } - } - }, - "channel": "businessChannel", - "orderers":[ - { - "mspid": "OrdererMSP", - "server-hostname":"orderer.example.com", - "requests":"grpcs://127.0.0.1:8050", - "tls_cacerts":"/opt/cello/fabric-1.1/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt" - } - ], - "keyValueStore": "/tmp/fabric-client-kvs", - "configtxgenToolPath": "fabric/fabric-samples/bin", - "SYNC_START_DATE_FORMAT":"YYYY/MM/DD", - "syncStartDate":"2018/01/01", - "eventWaitTime": "30000", - "license": "Apache-2.0", - "version": "1.1" -} -``` diff --git a/app/test/artifacts/help/Test-ubuntu-install-composer.md b/app/test/artifacts/help/Test-ubuntu-install-composer.md deleted file mode 100644 index 4b6f64280..000000000 --- a/app/test/artifacts/help/Test-ubuntu-install-composer.md +++ /dev/null @@ -1,208 +0,0 @@ - - - -**How to install Composer on a Ubuntu 16.04** - -**Create Another User** - -**Step 1: Open new Terminal Run below command** - - Code : sudo adduser playground - -You will now be asked to create a password for this new user. After entering a password. You will be asked some general questions (Full Name, Room Number, etc.). These can be left blank if you'd like. Once, you've gone through that, you will be asked to confirm if the information is correct, type: - - Code : Y - -**Step 2: Grant "playground" User Sudo Rights** -Now we need to grant this new user with sudo rights. To do this run: - - Code : sudo usermod -aG sudo playground - -Don't worry if your terminal didn't send a response and just went to the next line. That's normal. - -**Step 3: Switch To "playground" User** -Now let's run: - - Code : su - playground - -**Step 4: Downloading Fabric Composer Tools** -Now it's time to start getting our tools installed. Thankfully, the Hyperledger Fabric team has put all of our required tools into an easy-to-run script. Let's download that script now by running: - - Code : curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh - -Now to change permissions run: - - Code : chmod u+x prereqs-ubuntu.sh - -Now to install the tooling run: (Note: this will take a few minutes) - - Code : ./prereqs-ubuntu.sh - -**Step 5: Logout Then Login** -You will now notice a message "Please logout then login before continuing." This isn't just a pre-cautionary suggestion, if you fail to follow this step you will run into some serious issues further on. Believe me, I've already tried skipping this step. - -If you're using Putty, just exit the program and re-open it. . You will need to log back into the "playground" user: - - code : su – playground - -**Step 6: Installing Final NPM Packages** -Alright! We're almost done. Now we need to install some final NPM packages. - -Essential CLI tools: - - code : npm install -g composer-cli - -Utility for running a REST Server on your machine to expose your business networks as RESTful APIs: - - code : npm install -g composer-rest-server - -Useful utility for generating application assets: - - Code : npm install -g generator-hyperledger-composer - -Yeoman is a tool for generating applications, which utilises generator-hyperledger-composer: - - Code : npm install -g yo - -Browser app for simple editing and testing Business Networks: - - Code : npm install -g composer-playground - -**Step 7: Install Hyperledger Fabric** -Now we've got all of our tools setup, it's time to install what we've all come here for.. Hyperledger Fabric. -Run: - - Code : mkdir ~/fabric-tools && cd ~/fabric-tools - - Code : curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz - - Code : tar -xvf fabric-dev-servers.tar.gz - -Use the scripts you just downloaded and extracted to download a local Hyperledger Fabric runtime: - - Code : cd ~/fabric-tools - - Code : ./downloadFabric.sh - -## **Step 8 : Starting and stopping Hyperledger Fabric** - -You control your runtime using a set of scripts which you'll find in ~/fabric-tools if you followed the suggested defaults. - -The first time you start up a new runtime, you'll need to run the start script, then generate a PeerAdmin card: - - Code : cd ~/fabric-tools - - Code : ./startFabric.sh - - Code : ./createPeerAdminCard.sh - -You can start and stop your runtime using ~/fabric-tools/stopFabric.sh, and start it again with ~/fabric-tools/startFabric.sh. - -At the end of your development session, you run~/fabric-tools/stopFabric.sh and then~/fabric-tools/teardownFabric.sh. Note that if you've run the teardown script, the next time you start the runtime, you'll need to create a new PeerAdmin card just like you did on first time startup - -You're done! -To start your playground server, run: - - Code : composer-playground - -It will typically open your browser automatically, at the following address: [http://localhost:8080/login](http://localhost:8080/login) - -You should see thePeerAdmin@hlfv1Card you created with thecreatePeerAdminCardscript on your "My Business Networks" screen in the web app: if you don't see this, you may not have correctly started up your runtime! - -**Appendix : Destory a previous setup** - -If you've previously used an older version of **Hyperledger Composer** and are now setting up a new install, you may want to kill and remove all previous Docker containers, which you can do with these commands: - - Code : docker kill $(docker ps -q) - - Code : docker rm $(docker ps -aq) - - Code : docker rmi $(docker images dev-* -q) - -l**Step 9 : Configure to Hyperledger Explorer** - -Before Configure the Explorer config.json - -Execute the below command and check peer/orderer is running and verify ip too. - - Code : docker ps - -you can open the ~/fabric-tools/DevServer\_connectio.json and check , channels , organizations,orderers and peers - -**based on that above file configuration we need to configure in Hyperledger Explorer config json ( network-config – name,mspid,peer(requests,events,server-hostname,tls\_cacerts),admin(key,cert),channel and orderers(mspid,server\_hostname,requests,tls\_cacerts).** - -{ - - "network-config": { - - "org1": { - - "name": "Org1", - - "mspid": "Org1MSP", - - "peer1": { - - "requests": "grpc://127.0.0.1:7051", - - "events": "grpc://127.0.0.1:7053", - - "server-hostname": "peer0.org1.example.com", - - "tls\_cacerts": "/home/playground/fabric-tools/fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" - - }, - - "admin": { - - "key": "/home/playground/fabric-tools/fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore", - - "cert": "/home/playground/fabric-tools/fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts" - - } - - } - - }, - - "channel": "composerchannel", - - "orderers":[ - - { - - "mspid": "OrdererMSP", - - "server-hostname":"orderer.example.com", - - "requests":"grpc://127.0.0.1:7050", - - "tls\_cacerts":"/home/playground/fabric-tools/fabric-scripts/hlfv11/composer/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt" - - } - - ], - - "keyValueStore": "/tmp/fabric-client-kvs", - - "configtxgenToolPath": "/home/playground/fabric-samples/bin", - - "SYNC\_START\_DATE\_FORMAT":"YYYY/MM/DD", - - "syncStartDate":"2018/01/01", - - "eventWaitTime": "30000", - - "license": "Apache-2.0", - - "version": "1.1" - - } - -**Step 10 : Run Hyperledger Explorer** : - - Code : cd blockchain-explorer/ - - code : ./start.sh (It will have the backend up) - -Launch the Hyperledger explorer URL diff --git a/app/test/artifacts/network-config.yaml b/app/test/artifacts/network-config.yaml deleted file mode 100644 index 22856ba0f..000000000 --- a/app/test/artifacts/network-config.yaml +++ /dev/null @@ -1,247 +0,0 @@ ---- -# SPDX-License-Identifier: Apache-2.0 -# -# The network connection profile provides client applications the information about the target -# blockchain network that are necessary for the applications to interact with it. These are all -# knowledge that must be acquired from out-of-band sources. This file provides such a source. -# -name: "first-network" - -# -# Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming -# in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave -# them for the applications to process. This is a mechanism for different components of an application -# to exchange information that are not part of the standard schema described below. In particular, -# the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to -# determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. -# -x-type: "hlfv1" - -# -# Describe what the target network is/does. -# -description: "First Network" - -# -# Schema version of the content. Used by the SDK to apply the corresponding parsing rules. -# -version: "1.0" - -# -# The client section will be added on a per org basis see org1.yaml and org2.yaml -# -#client: - -# -# [Optional]. But most apps would have this section so that channel objects can be constructed -# based on the content below. If an app is creating channels, then it likely will not need this -# section. -# -channels: - # name of the channel - hellochannel: - # Required. list of orderers designated by the application to use for transactions on this - # channel. This list can be a result of access control ("org1" can only access "ordererA"), or - # operational decisions to share loads from applications among the orderers. The values must - # be "names" of orgs defined under "organizations/peers" - orderers: - - orderer.example.com - # Required. list of peers from participating orgs - peers: - # name of the channel - mychannel: - # Required. list of orderers designated by the application to use for transactions on this - # channel. This list can be a result of access control ("org1" can only access "ordererA"), or - # operational decisions to share loads from applications among the orderers. The values must - # be "names" of orgs defined under "organizations/peers" - orderers: - - orderer.example.com - - # Required. list of peers from participating orgs - peers: - peer0.org1.example.com: - # [Optional]. will this peer be sent transaction proposals for endorsement? The peer must - # have the chaincode installed. The app can also use this property to decide which peers - # to send the chaincode install request. Default: true - endorsingPeer: true - - # [Optional]. will this peer be sent query proposals? The peer must have the chaincode - # installed. The app can also use this property to decide which peers to send the - # chaincode install request. Default: true - chaincodeQuery: true - - # [Optional]. will this peer be sent query proposals that do not require chaincodes, like - # queryBlock(), queryTransaction(), etc. Default: true - ledgerQuery: true - - # [Optional]. will this peer be the target of the SDK's listener registration? All peers can - # produce events but the app typically only needs to connect to one to listen to events. - # Default: true - eventSource: true - - peer1.org1.example.com: - endorsingPeer: false - chaincodeQuery: true - ledgerQuery: true - eventSource: false - - peer0.org2.example.com: - endorsingPeer: true - chaincodeQuery: true - ledgerQuery: true - eventSource: true - - peer1.org2.example.com: - endorsingPeer: false - chaincodeQuery: true - ledgerQuery: true - eventSource: false - - # [Optional]. what chaincodes are expected to exist on this channel? The application can use - # this information to validate that the target peers are in the expected state by comparing - # this list with the query results of getInstalledChaincodes() and getInstantiatedChaincodes() - chaincodes: - # the format follows the "cannonical name" of chaincodes by fabric code - - mycc:v0 - -# -# list of participating organizations in this network -# -organizations: - Org1: - mspid: Org1MSP - - peers: - - peer0.org1.example.com - - peer1.org1.example.com - - # [Optional]. Certificate Authorities issue certificates for identification purposes in a Fabric based - # network. Typically certificates provisioning is done in a separate process outside of the - # runtime network. Fabric-CA is a special certificate authority that provides a REST APIs for - # dynamic certificate management (enroll, revoke, re-enroll). The following section is only for - # Fabric-CA servers. - certificateAuthorities: - - ca-org1 - - # [Optional]. If the application is going to make requests that are reserved to organization - # administrators, including creating/updating channels, installing/instantiating chaincodes, it - # must have access to the admin identity represented by the private key and signing certificate. - # Both properties can be the PEM string or local path to the PEM file. Note that this is mainly for - # convenience in development mode, production systems should not expose sensitive information - # this way. The SDK should allow applications to set the org admin identity via APIs, and only use - # this route as an alternative when it exists. - adminPrivateKey: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/23bbb981586e7ba1c0895e906f63d01d4103f57ea36dabcf81b6a33f1f0382b6_sk - signedCert: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem - - # the profile will contain public information about organizations other than the one it belongs to. - # These are necessary information to make transaction lifecycles work, including MSP IDs and - # peers with a public URL to send transaction proposals. The file will not contain private - # information reserved for members of the organization, such as admin key and certificate, - # fabric-ca registrar enroll ID and secret, etc. - Org2: - mspid: Org2MSP - peers: - - peer0.org2.example.com - - peer1.org2.example.com - certificateAuthorities: - - ca-org2 - adminPrivateKey: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/262abde201b7529d73af4b311fcc3103018cceb0684c8dbda2c7a215994a932e_sk - signedCert: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem - -# -# List of orderers to send transaction and channel create/update requests to. For the time -# being only one orderer is needed. If more than one is defined, which one get used by the -# SDK is implementation specific. Consult each SDK's documentation for its handling of orderers. -# -orderers: - orderer.example.com: - url: grpcs://localhost:7050 - - # these are standard properties defined by the gRPC library - # they will be passed in as-is to gRPC client constructor - grpcOptions: - ssl-target-name-override: orderer.example.com - grpc-max-send-message-length: 15 - - tlsCACerts: - path: ../fabric-samples/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt - -# -# List of peers to send various requests to, including endorsement, query -# and event listener registration. -# -peers: - peer0.org1.example.com: - # this URL is used to send endorsement and query requests - url: grpcs://localhost:7051 - - # this URL is used to connect the EventHub and registering event listeners - eventUrl: grpcs://localhost:7053 - - grpcOptions: - ssl-target-name-override: peer0.org1.example.com - tlsCACerts: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - - peer1.org1.example.com: - url: grpcs://localhost:7056 - eventUrl: grpcs://localhost:7058 - grpcOptions: - ssl-target-name-override: peer1.org1.example.com - tlsCACerts: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt - - peer0.org2.example.com: - url: grpcs://localhost:8051 - eventUrl: grpcs://localhost:8053 - grpcOptions: - ssl-target-name-override: peer0.org2.example.com - tlsCACerts: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt - - peer1.org2.example.com: - url: grpcs://localhost:8056 - eventUrl: grpcs://localhost:8058 - grpcOptions: - ssl-target-name-override: peer1.org2.example.com - tlsCACerts: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt - -# -# Fabric-CA is a special kind of Certificate Authority provided by Hyperledger Fabric which allows -# certificate management to be done via REST APIs. Application may choose to use a standard -# Certificate Authority instead of Fabric-CA, in which case this section would not be specified. -# -certificateAuthorities: - ca-org1: - url: https://localhost:7054 - # the properties specified under this object are passed to the 'http' client verbatim when - # making the request to the Fabric-CA server - httpOptions: - verify: false - tlsCACerts: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem - - # Fabric-CA supports dynamic user enrollment via REST APIs. A "root" user, a.k.a registrar, is - # needed to enroll and invoke new users. - registrar: - - enrollId: admin - enrollSecret: adminpw - # [Optional] The optional name of the CA. - caName: ca-org1 - - ca-org2: - url: https://localhost:8054 - httpOptions: - verify: false - tlsCACerts: - path: ../fabric-samples/first-network/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem - registrar: - - enrollId: admin - enrollSecret: adminpw - # [Optional] The optional name of the CA. - caName: ca-org2 diff --git a/app/test/artifacts/org1.yaml b/app/test/artifacts/org1.yaml deleted file mode 100644 index 7c19f2875..000000000 --- a/app/test/artifacts/org1.yaml +++ /dev/null @@ -1,54 +0,0 @@ ---- -# SPDX-License-Identifier: Apache-2.0 -# -# The network connection profile provides client applications the information about the target -# blockchain network that are necessary for the applications to interact with it. These are all -# knowledge that must be acquired from out-of-band sources. This file provides such a source. -# -name: "first-network-org1" - -# -# Any properties with an "x-" prefix will be treated as application-specific, exactly like how naming -# in HTTP headers or swagger properties work. The SDK will simply ignore these fields and leave -# them for the applications to process. This is a mechanism for different components of an application -# to exchange information that are not part of the standard schema described below. In particular, -# the "x-type" property with the "hlfv1" value example below is used by Hyperledger Composer to -# determine the type of Fabric networks (v0.6 vs. v1.0) it needs to work with. -# -x-type: "hlfv1" - -# -# Describe what the target network is/does. -# -description: "First Network - client definition for Org1" - -# -# Schema version of the content. Used by the SDK to apply the corresponding parsing rules. -# -version: "1.0" - -# -# The client section is SDK-specific. The sample below is for the node.js SDK -# -client: - # Which organization does this application instance belong to? The value must be the name of an org - # defined under "organizations" - organization: Org1 - - # Some SDKs support pluggable KV stores, the properties under "credentialStore" - # are implementation specific - credentialStore: - # [Optional]. Specific to FileKeyValueStore.js or similar implementations in other SDKs. Can be others - # if using an alternative impl. For instance, CouchDBKeyValueStore.js would require an object - # here for properties like url, db name, etc. - path: "./fabric-client-kv-org1" - - # [Optional]. Specific to the CryptoSuite implementation. Software-based implementations like - # CryptoSuite_ECDSA_AES.js in node SDK requires a key store. PKCS#11 based implementations does - # not. - cryptoStore: - # Specific to the underlying KeyValueStore that backs the crypto key store. - path: "/tmp/fabric-client-kv-org1" - - # [Optional]. Specific to Composer environment - wallet: wallet-name diff --git a/app/test/block.js b/app/test/block.js deleted file mode 100644 index b24b0a734..000000000 --- a/app/test/block.js +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 - -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const block = require('./fixtures/block.json'); - -describe('GET /api/block/:channel_genesis_hash/:number', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - - it('should return block ', done => { - const obj = block; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/block/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d/1', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys( - 'status', - 'number', - 'previous_hash', - 'data_hash', - 'transactions' - ); - body.status.should.eql(200); - body.number.should.eql('0'); - body.previous_hash.should.eql(''); - body.data_hash.should.eql( - '2aca6a13e625a3a409461c1a849a42956adefb79f72f555cff3df4586afe7760' - ); - done(); - } - ); - }); -}); diff --git a/app/test/blockactivity.js b/app/test/blockactivity.js deleted file mode 100644 index 0db6bc5d9..000000000 --- a/app/test/blockactivity.js +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const blockactivity = require('./fixtures/blockactivity.json'); - -describe('GET /api/blockactivity/:channel_genesis_hash', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - - it('should return blockactivity ', done => { - const obj = blockactivity; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/blockactivity/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'row'); - body.status.should.eql(200); - for (let i = 0; i < body.row.length; i++) { - body.row[i].should.include.keys( - 'blocknum', - 'txcount', - 'datahash', - 'blockhash', - 'prehash', - 'createdt', - 'channelname', - 'txhash' - ); - } - done(); - } - ); - }); -}); diff --git a/app/test/blockandtx.js b/app/test/blockandtx.js deleted file mode 100644 index f4dffb694..000000000 --- a/app/test/blockandtx.js +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 - -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const blockandtx = require('./fixtures/blockandtx.json'); - -describe('GET /api/blockAndTxList/:channel/:blocknum', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - - it('should return blockandtx ', done => { - const obj = blockandtx; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/blockAndTxList/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d/0', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'rows'); - body.status.should.eql(200); - for (let i = 0; i < body.rows.length; i++) { - body.rows[i].should.include.keys( - 'id', - 'blocknum', - 'datahash', - 'txcount', - 'channelname', - 'prehash', - 'createdt', - 'blockhash', - 'prev_blockhash', - 'txhash', - 'blksize' - ); - } - done(); - } - ); - }); -}); diff --git a/app/test/blocksbyhour.js b/app/test/blocksbyhour.js deleted file mode 100644 index ef3cd1bf6..000000000 --- a/app/test/blocksbyhour.js +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const blocksbyhour = require('./fixtures/blocksbyhour.json'); - -describe('GET /api/blocksByHour/:channel_genesis_hash/:day', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return blockbyhour ', done => { - const obj = blocksbyhour; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/blocksByHour/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d/1', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'rows'); - body.status.should.eql(200); - for (let i = 0; i < body.rows.length; i++) { - body.rows[i].should.include.keys('datetime', 'count'); - } - done(); - } - ); - }); -}); diff --git a/app/test/blocksbyminute.js b/app/test/blocksbyminute.js deleted file mode 100644 index c1747d392..000000000 --- a/app/test/blocksbyminute.js +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const blocksbyminute = require('./fixtures/blocksbyminute.json'); - -describe('GET /api/blocksByMinute/:channel_genesis_hash/:hour', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return blockbyminute ', done => { - const obj = blocksbyminute; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/blocksByMinute/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d/1', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'rows'); - body.status.should.eql(200); - for (let i = 0; i < body.rows.length; i++) { - body.rows[i].should.include.keys('datetime', 'count'); - } - done(); - } - ); - }); -}); diff --git a/app/test/blocktransaction.js b/app/test/blocktransaction.js deleted file mode 100644 index 9da7af090..000000000 --- a/app/test/blocktransaction.js +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const blocktrans = require('./fixtures/blocktransaction.json'); - -describe('GET /api/block/transactions/:channel_genesis_hash/:number', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return blocktransaction ', done => { - const obj = blocktrans; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/block/transactions/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d/0', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'number', 'txCount'); - body.status.should.eql(200); - body.number.should.eql(0); - body.txCount.should.eql(1); - - done(); - } - ); - }); -}); diff --git a/app/test/chaincode.js b/app/test/chaincode.js deleted file mode 100644 index d4d512212..000000000 --- a/app/test/chaincode.js +++ /dev/null @@ -1,51 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const chaincode = require('./fixtures/chaincode.json'); - -describe('GET /api/chaincode/:channel', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return chaincode ', done => { - const obj = chaincode; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/chaincode/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'chaincode'); - body.status.should.eql(200); - for (let i = 0; i < body.chaincode.length; i++) { - body.chaincode[i].should.include.keys( - 'channelName', - 'version', - 'path', - 'chaincodename', - 'txCount' - ); - } - done(); - } - ); - }); -}); diff --git a/app/test/changechannel.js b/app/test/changechannel.js deleted file mode 100644 index e8fb498ea..000000000 --- a/app/test/changechannel.js +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const changechannel = require('./fixtures/changechannel.json'); - -describe('GET /api/changeChannel/:channelName', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return changedchannel ', done => { - const obj = changechannel; - this.get.yields(null, JSON.stringify(obj)); - request.get(`${base}` + '/api/changechannel/mychannel', (err, body) => { - body = JSON.parse(body); - body.should.include.keys('currentChannel'); - body.currentChannel.should.eql('mychannel'); - done(); - }); - }); -}); diff --git a/app/test/channels.js b/app/test/channels.js deleted file mode 100644 index 70c28093c..000000000 --- a/app/test/channels.js +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const channels = require('./fixtures/channels.json'); - -describe('GET /api/channels/', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return channels ', done => { - const obj = channels; - this.get.yields(null, JSON.stringify(obj)); - request.get(`${base}` + '/api/channels', (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'channels'); - body.status.should.eql(200); - done(); - }); - }); -}); diff --git a/app/test/channelsinfo.js b/app/test/channelsinfo.js deleted file mode 100644 index 0aa39ef85..000000000 --- a/app/test/channelsinfo.js +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const channelsinfo = require('./fixtures/channelsinfo.json'); - -describe('GET /api/channels/info', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return channelsinfo ', done => { - const obj = channelsinfo; - this.get.yields(null, JSON.stringify(obj)); - request.get(`${base}` + '/api/channels/info', (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'channels'); - body.status.should.eql(200); - for (let i = 0; i < body.channels.length; i++) { - body.channels[i].should.include.keys( - 'id', - 'channelname', - 'blocks', - 'channel_genesis_hash', - 'transactions', - 'channel_hash', - 'createdat' - ); - } - done(); - }); - }); -}); diff --git a/app/test/currentchannel.js b/app/test/currentchannel.js deleted file mode 100644 index 6437e68ad..000000000 --- a/app/test/currentchannel.js +++ /dev/null @@ -1,43 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const config = require('../platform/fabric/config'); -const appconfig = require('../appconfig.json'); - -const host = process.env.HOST || appconfig.host; -const port = process.env.PORT || appconfig.port; -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const currentchannel = require('./fixtures/currentchannel.json'); - -describe('GET /api/curChannel', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return currentchannel ', done => { - const obj = currentchannel; - this.get.yields(null, JSON.stringify(obj)); - request.get(`${base}` + '/api/curChannel/', (err, body) => { - body = JSON.parse(body); - body.should.include.keys('currentChannel'); - body.currentChannel.should.eql('mychannel'); - done(); - }); - }); -}); diff --git a/app/test/dateutil.js b/app/test/dateutil.js deleted file mode 100644 index fd2925943..000000000 --- a/app/test/dateutil.js +++ /dev/null @@ -1,22 +0,0 @@ -/* - SPDX-License-Identifier: Apache-2.0 -*/ - -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); -const chaiHttp = require('chai-http'); -import { helper } from '../common/helper'; - -const should = chai.should(); -chai.use(chaiHttp); -const dateUtils = require('../common/commonUtils'); - -describe('dateUtils().toUTCmilliseconds', () => { - const DATE = '2018/06/18'; - const dateMilliseconds = dateUtils.toUTCmilliseconds(DATE); - - it('dateUtils.toUTCmilliseconds should be not null', () => { - assert.notEqual(null, dateMilliseconds); - }); -}); diff --git a/app/test/enroll.js b/app/test/enroll.js deleted file mode 100644 index d5d62e83a..000000000 --- a/app/test/enroll.js +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const enroll = require('./fixtures/enroll.json'); - -describe('POST /auth/enroll/', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return enroll ', done => { - const obj = enroll; - this.post.yields(null, JSON.stringify(obj)); - request.post( - `${base}` + '/auth/enroll', - { - body: { - user: 'admin', - password: 'adminpw', - affiliation: 'testing', - roles: 'admin' - } - }, - (err, body) => { - body = JSON.parse(body); - body.should.include.key('status'); - body.status.should.eql(200); - } - ); - done(); - }); -}); diff --git a/app/test/expect.ts b/app/test/expect.ts new file mode 100644 index 000000000..61d709704 --- /dev/null +++ b/app/test/expect.ts @@ -0,0 +1,12 @@ +/* + *SPDX-License-Identifier: Apache-2.0 + */ + +import chai from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import sinonChai from 'sinon-chai'; + +chai.use(chaiAsPromised); +chai.use(sinonChai); + +export const expect = chai.expect; diff --git a/app/test/fixtures/block.json b/app/test/fixtures/block.json deleted file mode 100644 index d075cd214..000000000 --- a/app/test/fixtures/block.json +++ /dev/null @@ -1,1057 +0,0 @@ -{ - "status": 200, - "number": "0", - "previous_hash": "", - "data_hash": "2aca6a13e625a3a409461c1a849a42956adefb79f72f555cff3df4586afe7760", - "transactions": [ - { - "signature": { - "type": "Buffer", - "data": [ - 48, - 68, - 2, - 32, - 94, - 255, - 136, - 114, - 190, - 46, - 10, - 59, - 88, - 47, - 227, - 49, - 44, - 6, - 88, - 241, - 196, - 55, - 85, - 172, - 115, - 252, - 194, - 61, - 194, - 116, - 160, - 142, - 116, - 14, - 159, - 48, - 2, - 32, - 53, - 3, - 152, - 113, - 80, - 38, - 28, - 198, - 214, - 54, - 118, - 51, - 98, - 57, - 49, - 92, - 240, - 27, - 162, - 217, - 182, - 126, - 253, - 218, - 77, - 167, - 130, - 45, - 61, - 225, - 206, - 171 - ] - }, - "payload": { - "header": { - "channel_header": { - "type": 1, - "version": 0, - "timestamp": "2019-03-29T09:31:58.000Z", - "channel_id": "mychannel", - "tx_id": "", - "epoch": "0", - "extension": { - "type": "Buffer", - "data": [] - }, - "typeString": "CONFIG" - }, - "signature_header": { - "creator": { - "Mspid": "OrdererMSP", - "IdBytes": "-----BEGIN CERTIFICATE-----\nMIICDTCCAbOgAwIBAgIRALFafJiTFN/47AvAGfvj1ZEwCgYIKoZIzj0EAwIwaTEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt\ncGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFgxCzAJBgNV\nBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp\nc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI\nKoZIzj0DAQcDQgAEYtguLKFBLLc0VSwyPHHHNe76HH71oOXK6wun8Y/5vtMawPZ/\nWTm/vBVUWdfNlzc9eA28aXx6zBAB8iRm16EeU6NNMEswDgYDVR0PAQH/BAQDAgeA\nMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDUbM8OlDbBvDtuK/gM2yAsSUNgT5\nXHLuD/g50+wwBxkwCgYIKoZIzj0EAwIDSAAwRQIhANJuEGHBftrtlWgie9zgc60J\n/XVytPN/D0rPlkMV17n7AiBBbStggGBfFYcQ2LhDhcKut8nScJ2OFrt+dJSdJbod\n7A==\n-----END CERTIFICATE-----\n" - }, - "nonce": { - "type": "Buffer", - "data": [ - 208, - 134, - 5, - 50, - 221, - 149, - 97, - 110, - 66, - 178, - 229, - 168, - 205, - 173, - 168, - 233, - 202, - 216, - 121, - 165, - 251, - 246, - 116, - 226 - ] - } - } - }, - "data": { - "config": { - "sequence": "1", - "channel_group": { - "version": 0, - "groups": { - "Orderer": { - "version": 0, - "groups": { - "OrdererMSP": { - "version": 0, - "groups": {}, - "values": { - "MSP": { - "version": 0, - "mod_policy": "Admins", - "value": { - "type": 0, - "config": { - "name": "OrdererMSP", - "root_certs": [ - "-----BEGIN CERTIFICATE-----\nMIICLjCCAdWgAwIBAgIQCeSxIA/5bBc/893OreC2kzAKBggqhkjOPQQDAjBpMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w\nbGUuY29tMB4XDTE3MDYyMzEyMzMxOVoXDTI3MDYyMTEyMzMxOVowaTELMAkGA1UE\nBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz\nY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv\nbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDLDgDbpvii4qPRPFsXeYzgjnW8M\ntnZyUD592tgnBlwj0X+Uuam76gR39dd1Cf8QvMSyB4KL3F1OFViZ5cn/ncqjXzBd\nMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB\nAf8wKQYDVR0OBCIEIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy7g/4OdPsMAcZMAoG\nCCqGSM49BAMCA0cAMEQCICXp7cNAHK6RQOFxE8Gpqy1B/FuLbmtYNqqBo5e1Pgly\nAiAWH23pmnXngcjLHg3nGwa3oUlCyPD64ilFoCMdN9TRVg==\n-----END CERTIFICATE-----\n" - ], - "intermediate_certs": [], - "admins": [ - "-----BEGIN CERTIFICATE-----\nMIICCjCCAbGgAwIBAgIRANPhTyHWZkTenKfX4eBv0ZUwCgYIKoZIzj0EAwIwaTEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt\ncGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMFYxCzAJBgNV\nBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp\nc2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqG\nSM49AwEHA0IABKAyu7N4S2ZPQSzsAVF/mwwCewuu++MtfcMmUdeoIPFRBj1JMCnf\nf88M0wj13gQSJQ6GfnUrT76G/L5fGxCUifWjTTBLMA4GA1UdDwEB/wQEAwIHgDAM\nBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIA1GzPDpQ2wbw7biv4DNsgLElDYE+Vxy\n7g/4OdPsMAcZMAoGCCqGSM49BAMCA0cAMEQCIEdiGFLzeGMvVNubuZ3iuvRp/Pp6\nim3FmABwIbnMarabAiBIHWzz8Yxh9K5ZNkVNZX3fLZ4LlzsKBinbWH9J2wblDg==\n-----END CERTIFICATE-----\n" - ], - "revocation_list": [], - "signing_identity": {}, - "organizational_unit_identifiers": [], - "tls_root_certs": [ - "-----BEGIN CERTIFICATE-----\nMIICNTCCAdygAwIBAgIRAN1F77OjzDmyWCzGuLyXHI8wCgYIKoZIzj0EAwIwbDEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l\neGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTlaMGwxCzAJ\nBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh\nbmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh\nbXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQkmbjr/9EK0m/4CpR6\nDiM+Eyke3vxPX+IhL+utTRt/qYz2q0UT9wem0xgRVqyWp4vN35ur7aSI+dALKBFT\nRWPwo18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB\nAf8EBTADAQH/MCkGA1UdDgQiBCBqIR7RiIC02zhngxyXeAmQJxO44yGlq1XswQTa\n/C7sSTAKBggqhkjOPQQDAgNHADBEAiBSxokO+9hHG+FpYikoNpcma4AK6N1KI2B6\nWqI5xNyF4gIgIQx8Q6p6ynDfUGDJ43uTHPzwlt+o8gQ3A5w07L70ml0=\n-----END CERTIFICATE-----\n" - ], - "tls_intermediate_certs": [] - } - } - } - }, - "policies": { - "Readers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "SIGNATURE", - "value": { - "version": 0, - "rule": { - "Type": "n_out_of", - "n_out_of": { - "N": 1, - "rules": [ - { - "Type": "signed_by", - "signed_by": 0 - } - ] - } - }, - "identities": [ - { - "principal_classification": 0, - "msp_identifier": "OrdererMSP", - "Role": "MEMBER" - } - ] - } - } - }, - "Writers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "SIGNATURE", - "value": { - "version": 0, - "rule": { - "Type": "n_out_of", - "n_out_of": { - "N": 1, - "rules": [ - { - "Type": "signed_by", - "signed_by": 0 - } - ] - } - }, - "identities": [ - { - "principal_classification": 0, - "msp_identifier": "OrdererMSP", - "Role": "MEMBER" - } - ] - } - } - }, - "Admins": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "SIGNATURE", - "value": { - "version": 0, - "rule": { - "Type": "n_out_of", - "n_out_of": { - "N": 1, - "rules": [ - { - "Type": "signed_by", - "signed_by": 0 - } - ] - } - }, - "identities": [ - { - "principal_classification": 0, - "msp_identifier": "OrdererMSP", - "Role": "ADMIN" - } - ] - } - } - } - }, - "mod_policy": "Admins" - } - }, - "values": { - "BatchSize": { - "version": 0, - "mod_policy": "Admins", - "value": { - "max_message_count": 10, - "absolute_max_bytes": 102760448, - "preferred_max_bytes": 524288 - } - }, - "BatchTimeout": { - "version": 0, - "mod_policy": "Admins", - "value": { - "timeout": "2s" - } - }, - "ChannelRestrictions": { - "version": 0, - "mod_policy": "Admins", - "value": { - "max_count": "0" - } - }, - "ConsensusType": { - "version": 0, - "mod_policy": "Admins", - "value": { - "type": "solo" - } - } - }, - "policies": { - "Writers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Writers", - "rule": "ANY" - } - } - }, - "Admins": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Admins", - "rule": "MAJORITY" - } - } - }, - "BlockValidation": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Writers", - "rule": "ANY" - } - } - }, - "Readers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Readers", - "rule": "ANY" - } - } - } - }, - "mod_policy": "Admins" - }, - "Application": { - "version": 1, - "groups": { - "Org1MSP": { - "version": 0, - "groups": {}, - "values": { - "MSP": { - "version": 0, - "mod_policy": "Admins", - "value": { - "type": 0, - "config": { - "name": "Org1MSP", - "root_certs": [ - "-----BEGIN CERTIFICATE-----\nMIICQjCCAemgAwIBAgIQIR2LR9fa8xs5unnJJ9PFSzAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla\nMHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD\nExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE\nKIVwhTzJrLzzfkIj/O+A18B18k2cSKEWdSbfWZIpFJSb9yw8QoEsbtk4wj9JJD/w\nOSa1eDD/pQorejCm25CmBaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG\nBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgDnKSJOiz8xeEyKk8W472\n9MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDRwAwRAIgMIO+yK3Fbwv1EXMc\ntQam42i6ROxSanaAHrbY2oVC1fICICsMpdSS2kbdntUDayi09v4/WRtC59ExCrHl\nrg/GXwkv\n-----END CERTIFICATE-----\n" - ], - "intermediate_certs": [], - "admins": [ - "-----BEGIN CERTIFICATE-----\nMIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla\nMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw\nEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT\n8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD\nVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE\nyKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/\nyfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy\nCKqf8052NVUs2CvPzA==\n-----END CERTIFICATE-----\n" - ], - "revocation_list": [], - "signing_identity": {}, - "organizational_unit_identifiers": [], - "tls_root_certs": [ - "-----BEGIN CERTIFICATE-----\nMIICSTCCAe+gAwIBAgIQZrCrf6SF3Z/w7z3PwCNaaTAKBggqhkjOPQQDAjB2MQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz\nY2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMz\nMTlaMHYxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH\nEw1TYW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMR8wHQYD\nVQQDExZ0bHNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAEq4HHYbyF3O3iX+bt7tATNgdrWW6GYXWfKKJjsriBMhtYr5y/sTjvg64s\nZ517Nx/QNj26yKLdZ9vSBUGhAUfedaNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1Ud\nJQQIMAYGBFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQglFCS2Tb1g4xa\nb2SE25dNhXkzcGc30A0Ev2X3Tjl2+fgwCgYIKoZIzj0EAwIDSAAwRQIhANDFPsDw\n14ftcZgQtMQ0yuMg8cCHj246rhsrnjwar7aAAiBwLG+4sKnTOOa+ceK6p+PpKu6F\nqwkrkz69kT1ZsL7SXw==\n-----END CERTIFICATE-----\n" - ], - "tls_intermediate_certs": [] - } - } - } - }, - "policies": { - "Writers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "SIGNATURE", - "value": { - "version": 0, - "rule": { - "Type": "n_out_of", - "n_out_of": { - "N": 1, - "rules": [ - { - "Type": "signed_by", - "signed_by": 0 - } - ] - } - }, - "identities": [ - { - "principal_classification": 0, - "msp_identifier": "Org1MSP", - "Role": "MEMBER" - } - ] - } - } - }, - "Admins": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "SIGNATURE", - "value": { - "version": 0, - "rule": { - "Type": "n_out_of", - "n_out_of": { - "N": 1, - "rules": [ - { - "Type": "signed_by", - "signed_by": 0 - } - ] - } - }, - "identities": [ - { - "principal_classification": 0, - "msp_identifier": "Org1MSP", - "Role": "ADMIN" - } - ] - } - } - }, - "Readers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "SIGNATURE", - "value": { - "version": 0, - "rule": { - "Type": "n_out_of", - "n_out_of": { - "N": 1, - "rules": [ - { - "Type": "signed_by", - "signed_by": 0 - } - ] - } - }, - "identities": [ - { - "principal_classification": 0, - "msp_identifier": "Org1MSP", - "Role": "MEMBER" - } - ] - } - } - } - }, - "mod_policy": "Admins" - }, - "Org2MSP": { - "version": 0, - "groups": {}, - "values": { - "MSP": { - "version": 0, - "mod_policy": "Admins", - "value": { - "type": 0, - "config": { - "name": "Org2MSP", - "root_certs": [ - "-----BEGIN CERTIFICATE-----\nMIICQzCCAeqgAwIBAgIRAJEAD5YytxsnFjw+liBjOQkwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5\nWjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEcMBoGA1UE\nAxMTY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA\nBFW1K2mz8XYewIsUh1qHqImFNbpW+ugND8c6QYB89mPOMHhxil9pE1fX0j/18+e4\nuohbFKOP8UTB15c1f/mFSEejXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAG\nBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIKfUfvpGproHcwyFD+0s\nE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0cAMEQCIGrkModOvz6mcUDA\nZql4YPXU/3ZUbMLw8VuSNHh47lg7AiAPLSKy/v8y8mhebGRCNTYwdkidQCQFrh+2\nBIirBFsT0g==\n-----END CERTIFICATE-----\n" - ], - "intermediate_certs": [], - "admins": [ - "-----BEGIN CERTIFICATE-----\nMIICGjCCAcCgAwIBAgIRAIUbkOONvaq2DLJr9qZbDKwwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIzMzE5\nWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMi5leGFtcGxlLmNvbTBZ\nMBMGByqGSM49AgEGCCqGSM49AwEHA0IABMLKHXm1xN7Tk4YzaWg4GYhLoyNjrjs5\n302o37m12U8LorR7IL5fdFgYILeL4XUPjC/QG4E2o6hPl3uZPUVErbajTTBLMA4G\nA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIKfUfvpGproH\ncwyFD+0sE3XfJzYNcif0jNwvgOUFZ4AFMAoGCCqGSM49BAMCA0gAMEUCIQDa1k6R\n+luypvng6JMSKIyibptkwICToEAZlDqLeD+k1gIgGFXm1+p1QqxViOa+c1dUvjl0\nm1UCqGDwNTHDm5mO+es=\n-----END CERTIFICATE-----\n" - ], - "revocation_list": [], - "signing_identity": {}, - "organizational_unit_identifiers": [], - "tls_root_certs": [ - "-----BEGIN CERTIFICATE-----\nMIICSTCCAfCgAwIBAgIRANX86HJQn/543CANoioLOegwCgYIKoZIzj0EAwIwdjEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs\nc2NhLm9yZzIuZXhhbXBsZS5jb20wHhcNMTcwNjIzMTIzMzE5WhcNMjcwNjIxMTIz\nMzE5WjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE\nBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMi5leGFtcGxlLmNvbTEfMB0G\nA1UEAxMWdGxzY2Eub3JnMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49\nAwEHA0IABBp+58H8VypXHB9Hf/1ExZTmNdcBlTUgAmHH5sb9DizHXwljo6zdyXfZ\ncLvTCpoLybJ/rnp4PKJ7NKUDmrQymLWjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV\nHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIHu4uj/xHTyM\n9ZK9QyYGLnfQasSWPHt65FkoTfvT61qsMAoGCCqGSM49BAMCA0cAMEQCIBJ9N4PD\nmB+2gAPeDWYteAZ5Q2KR/E0zMQ13pDSunHNcAiBwWRzwscXxCPOJp1sjBMVp5Z1a\nnfIdbwvBbsl1XV/j0g==\n-----END CERTIFICATE-----\n" - ], - "tls_intermediate_certs": [] - } - } - } - }, - "policies": { - "Admins": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "SIGNATURE", - "value": { - "version": 0, - "rule": { - "Type": "n_out_of", - "n_out_of": { - "N": 1, - "rules": [ - { - "Type": "signed_by", - "signed_by": 0 - } - ] - } - }, - "identities": [ - { - "principal_classification": 0, - "msp_identifier": "Org2MSP", - "Role": "ADMIN" - } - ] - } - } - }, - "Readers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "SIGNATURE", - "value": { - "version": 0, - "rule": { - "Type": "n_out_of", - "n_out_of": { - "N": 1, - "rules": [ - { - "Type": "signed_by", - "signed_by": 0 - } - ] - } - }, - "identities": [ - { - "principal_classification": 0, - "msp_identifier": "Org2MSP", - "Role": "MEMBER" - } - ] - } - } - }, - "Writers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "SIGNATURE", - "value": { - "version": 0, - "rule": { - "Type": "n_out_of", - "n_out_of": { - "N": 1, - "rules": [ - { - "Type": "signed_by", - "signed_by": 0 - } - ] - } - }, - "identities": [ - { - "principal_classification": 0, - "msp_identifier": "Org2MSP", - "Role": "MEMBER" - } - ] - } - } - } - }, - "mod_policy": "Admins" - } - }, - "values": {}, - "policies": { - "Admins": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Admins", - "rule": "MAJORITY" - } - } - }, - "Writers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Writers", - "rule": "ANY" - } - } - }, - "Readers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Readers", - "rule": "ANY" - } - } - } - }, - "mod_policy": "Admins" - } - }, - "values": { - "BlockDataHashingStructure": { - "version": 0, - "mod_policy": "Admins", - "value": { - "width": 4294967295 - } - }, - "Consortium": { - "version": 0, - "mod_policy": "Admins", - "value": { - "name": "SampleConsortium" - } - }, - "HashingAlgorithm": { - "version": 0, - "mod_policy": "Admins", - "value": { - "name": "SHA256" - } - }, - "OrdererAddresses": { - "version": 0, - "mod_policy": "/Channel/Orderer/Admins", - "value": { - "addresses": ["orderer.example.com:7050"] - } - } - }, - "policies": { - "Admins": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Admins", - "rule": "MAJORITY" - } - } - }, - "Readers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Readers", - "rule": "ANY" - } - } - }, - "Writers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Writers", - "rule": "ANY" - } - } - } - }, - "mod_policy": "" - } - }, - "last_update": { - "payload": { - "header": { - "channel_header": { - "type": 2, - "version": 1, - "timestamp": "2019-03-29T09:31:58.314Z", - "channel_id": "mychannel", - "tx_id": "bc8a8014acdd72e76f6eaef6134b3592616ba420a5debc6204015a3d4d5fa1ca", - "epoch": "0", - "extension": { - "type": "Buffer", - "data": [] - } - }, - "signature_header": { - "creator": { - "Mspid": "Org1MSP", - "IdBytes": "-----BEGIN CERTIFICATE-----\nMIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla\nMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw\nEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT\n8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD\nVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE\nyKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/\nyfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy\nCKqf8052NVUs2CvPzA==\n-----END CERTIFICATE-----\n" - }, - "nonce": { - "type": "Buffer", - "data": [ - 173, - 25, - 39, - 255, - 183, - 184, - 187, - 34, - 75, - 54, - 12, - 7, - 32, - 62, - 85, - 156, - 13, - 103, - 46, - 140, - 107, - 9, - 165, - 114 - ] - } - } - }, - "data": { - "config_update": { - "channel_id": "mychannel", - "read_set": { - "version": 0, - "groups": { - "Application": { - "version": 0, - "groups": { - "Org1MSP": { - "version": 0, - "groups": {}, - "values": {}, - "policies": {}, - "mod_policy": "" - }, - "Org2MSP": { - "version": 0, - "groups": {}, - "values": {}, - "policies": {}, - "mod_policy": "" - } - }, - "values": {}, - "policies": {}, - "mod_policy": "" - } - }, - "values": { - "Consortium": { - "version": 0, - "mod_policy": "", - "value": { - "name": "SampleConsortium" - } - } - }, - "policies": {}, - "mod_policy": "" - }, - "write_set": { - "version": 0, - "groups": { - "Application": { - "version": 1, - "groups": { - "Org1MSP": { - "version": 0, - "groups": {}, - "values": {}, - "policies": {}, - "mod_policy": "" - }, - "Org2MSP": { - "version": 0, - "groups": {}, - "values": {}, - "policies": {}, - "mod_policy": "" - } - }, - "values": {}, - "policies": { - "Readers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Readers", - "rule": "ANY" - } - } - }, - "Admins": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Admins", - "rule": "MAJORITY" - } - } - }, - "Writers": { - "version": 0, - "mod_policy": "Admins", - "policy": { - "type": "IMPLICIT_META", - "value": { - "sub_policy": "Writers", - "rule": "ANY" - } - } - } - }, - "mod_policy": "Admins" - } - }, - "values": { - "Consortium": { - "version": 0, - "mod_policy": "", - "value": { - "name": "SampleConsortium" - } - } - }, - "policies": {}, - "mod_policy": "" - } - }, - "signatures": [ - { - "signature_header": { - "creator": { - "Mspid": "Org1MSP", - "IdBytes": "-----BEGIN CERTIFICATE-----\nMIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla\nMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw\nEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT\n8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD\nVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE\nyKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/\nyfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy\nCKqf8052NVUs2CvPzA==\n-----END CERTIFICATE-----\n" - }, - "nonce": { - "type": "Buffer", - "data": [ - 29, - 192, - 7, - 239, - 147, - 132, - 102, - 86, - 108, - 106, - 163, - 93, - 132, - 242, - 124, - 198, - 196, - 179, - 68, - 28, - 2, - 188, - 184, - 28 - ] - } - }, - "sigature": { - "type": "Buffer", - "data": [ - 48, - 68, - 2, - 32, - 35, - 68, - 168, - 137, - 82, - 241, - 33, - 193, - 49, - 35, - 95, - 148, - 109, - 56, - 35, - 104, - 22, - 244, - 139, - 153, - 81, - 137, - 125, - 217, - 171, - 68, - 173, - 25, - 183, - 109, - 224, - 99, - 2, - 32, - 122, - 226, - 185, - 194, - 194, - 131, - 79, - 46, - 209, - 78, - 197, - 51, - 125, - 254, - 31, - 23, - 39, - 30, - 234, - 48, - 34, - 136, - 71, - 170, - 161, - 103, - 4, - 39, - 66, - 211, - 1, - 158 - ] - } - } - ] - } - }, - "signature": { - "type": "Buffer", - "data": [ - 48, - 69, - 2, - 33, - 0, - 187, - 127, - 233, - 164, - 91, - 191, - 154, - 24, - 7, - 241, - 219, - 12, - 81, - 12, - 22, - 18, - 46, - 167, - 68, - 68, - 243, - 228, - 169, - 139, - 70, - 125, - 209, - 231, - 182, - 4, - 60, - 139, - 2, - 32, - 115, - 21, - 41, - 36, - 177, - 233, - 171, - 82, - 117, - 168, - 19, - 1, - 230, - 241, - 21, - 246, - 182, - 56, - 166, - 27, - 31, - 40, - 42, - 126, - 68, - 64, - 203, - 50, - 114, - 194, - 229, - 41 - ] - } - } - } - } - } - ] -} diff --git a/app/test/fixtures/blockactivity.json b/app/test/fixtures/blockactivity.json deleted file mode 100644 index 3cdb945a3..000000000 --- a/app/test/fixtures/blockactivity.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "status": 200, - "row": [ - { - "blocknum": 2, - "txcount": 1, - "datahash": "14d72df054435b2d6ac157752d0d9a23bdd2c35fa266ad1ed1cfc8b5856f53cb", - "blockhash": "8f7be43bca29ee37fd530e222cf2a6987444cbbbf573c1871508a2747b45388f", - "prehash": "d0308c60d06cb9f5360b6555a2134ac663ccb4b6a33dac7d271ff3771ed551f8", - "createdt": "2019-03-27T05:38:14.000Z", - "txhash": [""], - "channelname": "mychannel" - }, - { - "blocknum": 1, - "txcount": 1, - "datahash": "5a0888b69a9248484e39e432b1300568981287731938db645573e4387530449a", - "blockhash": "d0308c60d06cb9f5360b6555a2134ac663ccb4b6a33dac7d271ff3771ed551f8", - "prehash": "f67deb84aaf095ae9d9b0a2754c87bda3515670e12dcc9a84153f250f8d01aed", - "createdt": "2019-03-27T05:38:13.000Z", - "txhash": [""], - "channelname": "mychannel" - }, - { - "blocknum": 0, - "txcount": 1, - "datahash": "df20795788e3eae0fbe151e1d79af6558ee8fb117e03d83e98680d15e8c855e7", - "blockhash": "f67deb84aaf095ae9d9b0a2754c87bda3515670e12dcc9a84153f250f8d01aed", - "prehash": "", - "createdt": "2019-03-27T05:37:48.000Z", - "txhash": [""], - "channelname": "mychannel" - } - ] -} diff --git a/app/test/fixtures/blockandtx.json b/app/test/fixtures/blockandtx.json deleted file mode 100644 index d8c5ea16f..000000000 --- a/app/test/fixtures/blockandtx.json +++ /dev/null @@ -1,235 +0,0 @@ -{ - "status": 200, - "rows": [ - { - "id": 18, - "blocknum": 4, - "datahash": "8f8ab6a4d8c524f7c1eb6ad63baefda7fc6600ef257c4452ebf166e1db735a91", - "prehash": "39f36405901f8a3f05787f4e31665767c94078d198f657b43ad7f3d3857563e6", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-06-07T02:30:58.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [ - "1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840", - "3216e30109aff548cabbff21f2ff786f50b80ca13fd112dc2c8804cd73c3aebf", - "63abc90c2e071c126398a5d0657d2ff4fb066a31cbb33960d1f7b82aed49cc5e", - "5388a544555e62884fe83efe4a5b6303093c4190abd528baaf0fcd712bce4ea8", - "7149cd80783ab0a60fe54648f53044efe2fd851a51cbeba6be4cdc0becb5ea2c", - "b48754707f3db10422e927a0887672f274bee3547484e1843f4cd48fb1c1e5b4", - "eba4d3e856eb2c50d40c5180b2162faaa02c06420e969047e75ed594f03b24d1", - "d0742c955cc78c3cf4f489fe2569ef66fa1f2e391d0e4094ed393d3b5c9a7076" - ] - }, - { - "id": 13, - "blocknum": 4, - "datahash": "61b47b9ced2d8077f60406f9dda7fe5a9fa4e68c29b909d7aa4b4fa3507cfbb2", - "prehash": "a966f1872e118b1c655a6dd615d6b7118ba5fef978acd411393bf6537086da4d", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-24T00:55:25.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [ - "1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840", - "3216e30109aff548cabbff21f2ff786f50b80ca13fd112dc2c8804cd73c3aebf", - "63abc90c2e071c126398a5d0657d2ff4fb066a31cbb33960d1f7b82aed49cc5e", - "5388a544555e62884fe83efe4a5b6303093c4190abd528baaf0fcd712bce4ea8", - "7149cd80783ab0a60fe54648f53044efe2fd851a51cbeba6be4cdc0becb5ea2c", - "b48754707f3db10422e927a0887672f274bee3547484e1843f4cd48fb1c1e5b4", - "eba4d3e856eb2c50d40c5180b2162faaa02c06420e969047e75ed594f03b24d1", - "d0742c955cc78c3cf4f489fe2569ef66fa1f2e391d0e4094ed393d3b5c9a7076" - ] - }, - { - "id": 14, - "blocknum": 4, - "datahash": "aeea392666e989b745c6d46f07b6ffcb31e136e06fdf23be684c0aa30bc7a849", - "prehash": "0c21f0815186c76c235daf5abe0f48fdefd5c59271b6059da809ac8fd0d806bc", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-24T03:12:39.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [ - "1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840", - "3216e30109aff548cabbff21f2ff786f50b80ca13fd112dc2c8804cd73c3aebf", - "63abc90c2e071c126398a5d0657d2ff4fb066a31cbb33960d1f7b82aed49cc5e", - "5388a544555e62884fe83efe4a5b6303093c4190abd528baaf0fcd712bce4ea8", - "7149cd80783ab0a60fe54648f53044efe2fd851a51cbeba6be4cdc0becb5ea2c", - "b48754707f3db10422e927a0887672f274bee3547484e1843f4cd48fb1c1e5b4", - "eba4d3e856eb2c50d40c5180b2162faaa02c06420e969047e75ed594f03b24d1", - "d0742c955cc78c3cf4f489fe2569ef66fa1f2e391d0e4094ed393d3b5c9a7076" - ] - }, - { - "id": 15, - "blocknum": 4, - "datahash": "d5f4d34d42f651df92f65f7c7d7f0f4a3a6bcb53129f781f2cac17ad705f6809", - "prehash": "dbf319ec57ff8711f9fd374f529dc66efa8907549101537be970e2f3dc2d3a86", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-24T01:28:08.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [ - "1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840", - "3216e30109aff548cabbff21f2ff786f50b80ca13fd112dc2c8804cd73c3aebf", - "63abc90c2e071c126398a5d0657d2ff4fb066a31cbb33960d1f7b82aed49cc5e", - "5388a544555e62884fe83efe4a5b6303093c4190abd528baaf0fcd712bce4ea8", - "7149cd80783ab0a60fe54648f53044efe2fd851a51cbeba6be4cdc0becb5ea2c", - "b48754707f3db10422e927a0887672f274bee3547484e1843f4cd48fb1c1e5b4", - "eba4d3e856eb2c50d40c5180b2162faaa02c06420e969047e75ed594f03b24d1", - "d0742c955cc78c3cf4f489fe2569ef66fa1f2e391d0e4094ed393d3b5c9a7076" - ] - }, - { - "id": 17, - "blocknum": 4, - "datahash": "93db69bdc2d47a3c0888b2afcaa15901c75e68cd0578a4d4c59f1e5bcbca5d98", - "prehash": "86baa595a25c4e2c0527267ed71bd41a4d57947ecf667f9b3ab60ff8b7800cb5", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-29T14:58:19.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [ - "1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840", - "3216e30109aff548cabbff21f2ff786f50b80ca13fd112dc2c8804cd73c3aebf", - "63abc90c2e071c126398a5d0657d2ff4fb066a31cbb33960d1f7b82aed49cc5e", - "5388a544555e62884fe83efe4a5b6303093c4190abd528baaf0fcd712bce4ea8", - "7149cd80783ab0a60fe54648f53044efe2fd851a51cbeba6be4cdc0becb5ea2c", - "b48754707f3db10422e927a0887672f274bee3547484e1843f4cd48fb1c1e5b4", - "eba4d3e856eb2c50d40c5180b2162faaa02c06420e969047e75ed594f03b24d1", - "d0742c955cc78c3cf4f489fe2569ef66fa1f2e391d0e4094ed393d3b5c9a7076" - ] - }, - { - "id": 5, - "blocknum": 4, - "datahash": "da8d949558cb431a281b235861756962588cfd83f9634fe3ff004b0bfd4a7400", - "prehash": "20272dbeca968a5575bca3002c1b498c8f3b8b1fe1f7f394bbdee61d53f34798", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-15T02:04:25.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [ - "1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840", - "3216e30109aff548cabbff21f2ff786f50b80ca13fd112dc2c8804cd73c3aebf", - "63abc90c2e071c126398a5d0657d2ff4fb066a31cbb33960d1f7b82aed49cc5e", - "5388a544555e62884fe83efe4a5b6303093c4190abd528baaf0fcd712bce4ea8", - "7149cd80783ab0a60fe54648f53044efe2fd851a51cbeba6be4cdc0becb5ea2c", - "b48754707f3db10422e927a0887672f274bee3547484e1843f4cd48fb1c1e5b4", - "eba4d3e856eb2c50d40c5180b2162faaa02c06420e969047e75ed594f03b24d1", - "d0742c955cc78c3cf4f489fe2569ef66fa1f2e391d0e4094ed393d3b5c9a7076" - ] - }, - { - "id": 11, - "blocknum": 4, - "datahash": "c9fe4d1a2ec771b51de25a4be6dc64cfb48f7ac2c3202be72cb323d8e0030c5a", - "prehash": "6726dbdf0ecd761a05e06840fc59ad4e30ad24eb6791cfb62dee056d6315bced", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-23T01:11:10.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [ - "1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840", - "3216e30109aff548cabbff21f2ff786f50b80ca13fd112dc2c8804cd73c3aebf", - "63abc90c2e071c126398a5d0657d2ff4fb066a31cbb33960d1f7b82aed49cc5e", - "5388a544555e62884fe83efe4a5b6303093c4190abd528baaf0fcd712bce4ea8", - "7149cd80783ab0a60fe54648f53044efe2fd851a51cbeba6be4cdc0becb5ea2c", - "b48754707f3db10422e927a0887672f274bee3547484e1843f4cd48fb1c1e5b4", - "eba4d3e856eb2c50d40c5180b2162faaa02c06420e969047e75ed594f03b24d1", - "d0742c955cc78c3cf4f489fe2569ef66fa1f2e391d0e4094ed393d3b5c9a7076" - ] - }, - { - "id": 12, - "blocknum": 4, - "datahash": "fe6648b6977e3c2dcca193c499028b118a1e23830048eda2d742407532c0e37a", - "prehash": "6a06be91413e5ca72c04b17f5351cfe3b7a49494feff1d1ec8c5de9620ef52cf", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-23T15:47:38.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [ - "1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840", - "3216e30109aff548cabbff21f2ff786f50b80ca13fd112dc2c8804cd73c3aebf", - "63abc90c2e071c126398a5d0657d2ff4fb066a31cbb33960d1f7b82aed49cc5e", - "5388a544555e62884fe83efe4a5b6303093c4190abd528baaf0fcd712bce4ea8", - "7149cd80783ab0a60fe54648f53044efe2fd851a51cbeba6be4cdc0becb5ea2c", - "b48754707f3db10422e927a0887672f274bee3547484e1843f4cd48fb1c1e5b4", - "eba4d3e856eb2c50d40c5180b2162faaa02c06420e969047e75ed594f03b24d1", - "d0742c955cc78c3cf4f489fe2569ef66fa1f2e391d0e4094ed393d3b5c9a7076" - ] - }, - { - "id": 4, - "blocknum": 3, - "datahash": "ebc3829870cccc087de9d8aceda77d085464a825f55c68e827aac9ab2028a441", - "prehash": "fce876f12ebf011ad7889d68b0fbcb84346e3de083ada89a064c9abd19a0f1df", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-15T02:03:32.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [ - "36f8ed2687460d081aa3fd7f5c2e4bd912bb0fb1a1fd7f843ff6c59603db4d15" - ] - }, - { - "id": 3, - "blocknum": 2, - "datahash": "28024f0d3bc810be284f5149d9beefee1878fde7f87703ed21a73af197444a24", - "prehash": "1cb3bb171ad9e63647b50e7153c9950dc4de7bd543207a41bd238b7640af309f", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-15T02:03:27.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [""] - }, - { - "id": 2, - "blocknum": 1, - "datahash": "fd2eaf086bd6f1457236c084847151fb6ae74311cf7244decc9e12c6e222145f", - "prehash": "09826404c6206b44881cb06070291a993b8f8bea910716b335d10605e80cbc46", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-15T02:03:24.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [""] - }, - { - "id": 1, - "blocknum": 0, - "datahash": "d9b8efc5544e0dd80e579bfabbd012dfad995f012cfc9a35cb637a4ecf08f394", - "prehash": "", - "channelname": "mychannel", - "txcount": 1, - "blksize": 5, - "createdt": "2018-05-15T02:03:09.000Z", - "prev_blockhash": null, - "blockhash": null, - "txhash": [""] - } - ] -} diff --git a/app/test/fixtures/blocksbyhour.json b/app/test/fixtures/blocksbyhour.json deleted file mode 100644 index dfd156b4a..000000000 --- a/app/test/fixtures/blocksbyhour.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "status": 200, - "rows": [ - { - "datetime": "2018-06-08T02:08:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:09:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:10:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:11:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:12:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:13:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:14:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:15:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:16:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:17:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:18:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:19:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:20:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:21:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:22:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:23:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:24:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:25:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:26:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:27:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:28:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:29:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:30:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:31:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:32:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:33:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:34:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:35:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:36:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:37:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:38:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:39:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:40:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:41:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:42:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:43:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:44:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:45:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:46:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:47:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:48:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:49:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:50:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:51:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:52:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:53:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:54:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:55:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:56:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:57:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:58:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:59:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:00:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:01:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:02:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:03:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:04:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:05:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:06:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:07:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:08:00.000Z", - "count": "0" - } - ] -} diff --git a/app/test/fixtures/blocksbyminute.json b/app/test/fixtures/blocksbyminute.json deleted file mode 100644 index dfd156b4a..000000000 --- a/app/test/fixtures/blocksbyminute.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "status": 200, - "rows": [ - { - "datetime": "2018-06-08T02:08:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:09:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:10:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:11:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:12:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:13:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:14:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:15:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:16:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:17:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:18:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:19:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:20:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:21:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:22:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:23:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:24:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:25:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:26:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:27:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:28:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:29:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:30:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:31:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:32:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:33:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:34:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:35:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:36:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:37:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:38:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:39:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:40:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:41:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:42:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:43:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:44:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:45:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:46:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:47:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:48:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:49:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:50:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:51:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:52:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:53:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:54:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:55:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:56:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:57:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:58:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:59:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:00:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:01:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:02:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:03:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:04:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:05:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:06:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:07:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:08:00.000Z", - "count": "0" - } - ] -} diff --git a/app/test/fixtures/blocktransaction.json b/app/test/fixtures/blocktransaction.json deleted file mode 100644 index 1b925c610..000000000 --- a/app/test/fixtures/blocktransaction.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "status": 200, - "number": 0, - "txCount": 1 -} diff --git a/app/test/fixtures/chaincode.json b/app/test/fixtures/chaincode.json deleted file mode 100644 index f6b529a51..000000000 --- a/app/test/fixtures/chaincode.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "status": 200, - "chaincode": [ - { - "channelName": "mychannel", - "chaincodename": "mycc", - "path": "github.com/chaincode/chaincode_example02/go/", - "version": "1.0", - "txCount": 17 - } - ] -} diff --git a/app/test/fixtures/changechannel.json b/app/test/fixtures/changechannel.json deleted file mode 100644 index 3b41cd903..000000000 --- a/app/test/fixtures/changechannel.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "currentChannel": "mychannel" -} diff --git a/app/test/fixtures/channels.json b/app/test/fixtures/channels.json deleted file mode 100644 index 4875440ff..000000000 --- a/app/test/fixtures/channels.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "status": 200, - "channels": ["mychannel"] -} diff --git a/app/test/fixtures/channelsinfo.json b/app/test/fixtures/channelsinfo.json deleted file mode 100644 index 743997c2b..000000000 --- a/app/test/fixtures/channelsinfo.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "status": 200, - "channels": [ - { - "id": 4, - "channelname": "test", - "blocks": 5, - "transactions": 5, - "channel_genesis_hash": "573f3ff5686831e322cb1c02769ebd5519ec7b3618cabcc1dca1705a6a7e1808", - "createdat": "2018-05-29T01:09:21.000Z", - "channel_hash": "7c003fa4bd600688a14465eeb176150fa3bc1ef2f6fcbd0d88140ed9fbb231c5" - }, - { - "id": 3, - "channelname": "mychannel", - "blocks": 5, - "transactions": 5, - "channel_genesis_hash": "573f3ff5686831e322cb1c02769ebd5519ec7b3618cabcc1dca1705a6a7e1808", - "createdat": "2018-05-18T03:13:05.999Z", - "channel_hash": "9006c6bc6a0c99b52847d71b350885cb68d8dadad6e421fdb082aeae637279ff" - } - ] -} diff --git a/app/test/fixtures/currentchannel.json b/app/test/fixtures/currentchannel.json deleted file mode 100644 index 3b41cd903..000000000 --- a/app/test/fixtures/currentchannel.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "currentChannel": "mychannel" -} diff --git a/app/test/fixtures/enroll.json b/app/test/fixtures/enroll.json deleted file mode 100644 index 1048a8829..000000000 --- a/app/test/fixtures/enroll.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "status": 200 -} diff --git a/app/test/fixtures/login.json b/app/test/fixtures/login.json deleted file mode 100644 index ed89d5f7e..000000000 --- a/app/test/fixtures/login.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "status": 200, - "success": "true", - "message": "You have successfully logged in!", - "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTU1MzI1MjQzNn0.MBIm7hFDAQ_jJaMNqX94V0I2uCsQxKqOZ5b0PoWMOnk", - "user": { - "message": "logged in", - "name": "admin" - } -} diff --git a/app/test/fixtures/networklist.json b/app/test/fixtures/networklist.json deleted file mode 100644 index 2d3a18c18..000000000 --- a/app/test/fixtures/networklist.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "status": 200, - "networkList": [["balance-transfer", {}]] -} diff --git a/app/test/fixtures/peers.json b/app/test/fixtures/peers.json deleted file mode 100644 index 45946fd96..000000000 --- a/app/test/fixtures/peers.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "status": 200, - "peers": [ - { - "requests": "grpcs://127.0.0.1:7051", - "server_hostname": "peer0.org1.example.com" - }, - { - "requests": "grpcs://127.0.0.1:8051", - "server_hostname": "peer1.org1.example.com" - }, - { - "requests": "grpcs://127.0.0.1:9051", - "server_hostname": "peer0.org2.example.com" - }, - { - "requests": "grpcs://127.0.0.1:10051", - "server_hostname": "peer1.org2.example.com" - } - ] -} diff --git a/app/test/fixtures/register.json b/app/test/fixtures/register.json deleted file mode 100644 index 1048a8829..000000000 --- a/app/test/fixtures/register.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "status": 200 -} diff --git a/app/test/fixtures/reqMultiOrgs.json b/app/test/fixtures/reqMultiOrgs.json deleted file mode 100644 index 0b18471b0..000000000 --- a/app/test/fixtures/reqMultiOrgs.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "from": "Sun Dec 08 2019 22:22:00 GMT-0500 (Eastern Standard Time)", - "to": "Mon Dec 09 2019 22:22:00 GMT-0500 (Eastern Standard Time)", - "orgs": ["OrdererMSP", "Org2MSP"] -} diff --git a/app/test/fixtures/reqNoOrgs.json b/app/test/fixtures/reqNoOrgs.json deleted file mode 100644 index ee46bb4a3..000000000 --- a/app/test/fixtures/reqNoOrgs.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "from": "Sun Dec 08 2019 22:22:00 GMT-0500 (Eastern Standard Time)", - "to": "Mon Dec 09 2019 22:22:00 GMT-0500 (Eastern Standard Time)" -} diff --git a/app/test/fixtures/reqOneOrg.json b/app/test/fixtures/reqOneOrg.json deleted file mode 100644 index e0fe66c68..000000000 --- a/app/test/fixtures/reqOneOrg.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "from": "Sun Dec 08 2019 22:22:00 GMT-0500 (Eastern Standard Time)", - "to": "Mon Dec 09 2019 22:22:00 GMT-0500 (Eastern Standard Time)", - "orgs": "OrgOne" -} diff --git a/app/test/fixtures/status.json b/app/test/fixtures/status.json deleted file mode 100644 index 3dc5eb532..000000000 --- a/app/test/fixtures/status.json +++ /dev/null @@ -1 +0,0 @@ -{ "chaincodeCount": 0, "txCount": 3, "latestBlock": 3, "peerCount": 4 } diff --git a/app/test/fixtures/transaction.json b/app/test/fixtures/transaction.json deleted file mode 100644 index 27bd3a207..000000000 --- a/app/test/fixtures/transaction.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "status": 200, - "row": { - "id": 10, - "channelname": "mychannel", - "blockid": 4, - "txhash": - "1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840", - "createdt": "2018-05-15T02:04:25.000Z", - "chaincodename": "mycc", - "status": 200, - "creator_msp_id": "Org1MSP", - "endorser_msp_id": "{\"Org1MSP\"}", - "chaincode_id": "", - "type": "ENDORSER_TRANSACTION", - "read_set": [ - { - "chaincode": "lscc", - "set": [ - { - "key": "mycc", - "version": { - "block_num": "3", - "tx_num": "0" - } - } - ] - }, - { - "chaincode": "mycc", - "set": [ - { - "key": "a", - "version": { - "block_num": "3", - "tx_num": "0" - } - }, - { - "key": "b", - "version": { - "block_num": "3", - "tx_num": "0" - } - } - ] - } - ], - "write_set": [ - { - "chaincode": "lscc", - "set": [] - }, - { - "chaincode": "mycc", - "set": [ - { - "key": "a", - "is_delete": false, - "value": "90" - }, - { - "key": "b", - "is_delete": false, - "value": "210" - } - ] - } - ] - } -} diff --git a/app/test/fixtures/txbyhour.json b/app/test/fixtures/txbyhour.json deleted file mode 100644 index dfd156b4a..000000000 --- a/app/test/fixtures/txbyhour.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "status": 200, - "rows": [ - { - "datetime": "2018-06-08T02:08:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:09:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:10:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:11:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:12:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:13:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:14:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:15:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:16:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:17:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:18:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:19:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:20:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:21:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:22:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:23:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:24:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:25:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:26:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:27:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:28:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:29:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:30:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:31:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:32:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:33:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:34:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:35:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:36:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:37:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:38:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:39:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:40:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:41:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:42:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:43:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:44:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:45:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:46:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:47:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:48:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:49:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:50:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:51:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:52:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:53:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:54:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:55:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:56:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:57:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:58:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:59:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:00:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:01:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:02:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:03:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:04:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:05:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:06:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:07:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:08:00.000Z", - "count": "0" - } - ] -} diff --git a/app/test/fixtures/txbyminute.json b/app/test/fixtures/txbyminute.json deleted file mode 100644 index dfd156b4a..000000000 --- a/app/test/fixtures/txbyminute.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "status": 200, - "rows": [ - { - "datetime": "2018-06-08T02:08:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:09:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:10:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:11:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:12:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:13:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:14:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:15:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:16:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:17:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:18:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:19:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:20:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:21:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:22:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:23:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:24:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:25:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:26:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:27:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:28:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:29:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:30:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:31:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:32:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:33:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:34:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:35:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:36:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:37:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:38:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:39:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:40:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:41:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:42:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:43:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:44:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:45:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:46:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:47:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:48:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:49:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:50:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:51:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:52:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:53:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:54:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:55:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:56:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:57:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:58:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T02:59:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:00:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:01:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:02:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:03:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:04:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:05:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:06:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:07:00.000Z", - "count": "0" - }, - { - "datetime": "2018-06-08T03:08:00.000Z", - "count": "0" - } - ] -} diff --git a/app/test/fixtures/txbyorg.json b/app/test/fixtures/txbyorg.json deleted file mode 100644 index 8022b2953..000000000 --- a/app/test/fixtures/txbyorg.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "status": 200, - "rows": [ - { - "count": "3", - "creator_msp_id": "OrdererMSP" - }, - { - "count": "8", - "creator_msp_id": "Org1MSP" - }, - { - "count": "1", - "creator_msp_id": "Org2MSP" - } - ] -} diff --git a/app/test/login.js b/app/test/login.js deleted file mode 100644 index b2cd4c9ca..000000000 --- a/app/test/login.js +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const login = require('./fixtures/login.json'); - -describe('POST /auth/login', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - - it('should return login ', done => { - const obj = login; - this.post.yields(null, JSON.stringify(obj)); - request.post( - `${base}` + '/auth/login/', - { - body: { - user: 'admin', - password: 'adminpw', - network: 'first-network' - } - }, - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'success', 'message', 'token', 'user'); - body.status.should.eql(200); - body.success.should.eql('true'); - body.message.should.eql('You have successfully logged in!'); - body.token.should.eql( - 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImlhdCI6MTU1MzI1MjQzNn0.MBIm7hFDAQ_jJaMNqX94V0I2uCsQxKqOZ5b0PoWMOnk' - ); - body.user.message.should.eql('logged in'); - body.user.name.should.eql('admin'); - } - ); - done(); - }); -}); diff --git a/app/test/networklist.js b/app/test/networklist.js deleted file mode 100644 index beadcc54b..000000000 --- a/app/test/networklist.js +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const networklist = require('./fixtures/networklist.json'); - -describe('GET /auth/networklist', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return networklist ', done => { - const obj = networklist; - request.put('Accept', 'application/json'); - request.put('Content-Type', 'application/json'); - this.get.yields(null, JSON.stringify(obj)); - request.get(`${base}` + '/auth/networklist/', (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'networkList'); - body.status.should.eql(200); - body.networkList.should.eql([['balance-transfer', {}]]); - done(); - }); - }); -}); diff --git a/app/test/package-lock.json b/app/test/package-lock.json deleted file mode 100644 index 4932b159a..000000000 --- a/app/test/package-lock.json +++ /dev/null @@ -1,2936 +0,0 @@ -{ - "name": "hyperledger-explorer-test", - "version": "0.3.9", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", - "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.3" - } - }, - "@babel/generator": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz", - "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==", - "dev": true, - "requires": { - "@babel/types": "^7.10.3", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz", - "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.10.3", - "@babel/template": "^7.10.3", - "@babel/types": "^7.10.3" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz", - "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==", - "dev": true, - "requires": { - "@babel/types": "^7.10.3" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", - "dev": true, - "requires": { - "@babel/types": "^7.10.1" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz", - "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", - "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.3", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz", - "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==", - "dev": true - }, - "@babel/template": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz", - "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.3", - "@babel/parser": "^7.10.3", - "@babel/types": "^7.10.3" - } - }, - "@babel/traverse": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz", - "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.3", - "@babel/generator": "^7.10.3", - "@babel/helper-function-name": "^7.10.3", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.3", - "@babel/types": "^7.10.3", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@babel/types": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz", - "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.3", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "@sinonjs/commons": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.0.tgz", - "integrity": "sha512-wEj54PfsZ5jGSwMX68G8ZXFawcSglQSXqCftWX3ec8MDUzQdHgcKvw97awHbY0efQEL5iKUOAmmVtoYgmrSG4Q==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/formatio": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", - "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^3.1.0" - } - }, - "@sinonjs/samsam": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", - "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.3.0", - "array-from": "^2.1.1", - "lodash": "^4.17.15" - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true - }, - "@types/chai": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.11.tgz", - "integrity": "sha512-t7uW6eFafjO+qJ3BIV2gGUyZs27egcNRkUdalkud+Qa3+kg//f129iuOFivHDXQ+vnU3fDXuwgv0cqMCbcE8sw==", - "dev": true - }, - "@types/cookiejar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.1.tgz", - "integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw==", - "dev": true - }, - "@types/node": { - "version": "14.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", - "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", - "dev": true - }, - "@types/superagent": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz", - "integrity": "sha512-9KhCkyXv268A2nZ1Wvu7rQWM+BmdYUVkycFeNnYrUL5Zwu7o8wPQ3wBfW59dDP+wuoxw0ww8YKgTNv8j/cgscA==", - "dev": true, - "requires": { - "@types/cookiejar": "*", - "@types/node": "*" - } - }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", - "dev": true - }, - "arraylist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/arraylist/-/arraylist-0.1.0.tgz", - "integrity": "sha1-dNAWg8MfLb4y2TSqhrpbK23GfaY=", - "dev": true, - "requires": { - "underscore": "^1.6.0" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "aws4": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "buffer-writer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", - "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", - "dev": true - }, - "caching-transform": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz", - "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==", - "dev": true, - "requires": { - "hasha": "^3.0.0", - "make-dir": "^2.0.0", - "package-hash": "^3.0.0", - "write-file-atomic": "^2.4.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } - }, - "chai-http": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.3.0.tgz", - "integrity": "sha512-zFTxlN7HLMv+7+SPXZdkd5wUlK+KxH6Q7bIEMiEx0FK3zuuMqL7cwICAQ0V1+yYRozBburYuxN1qZstgHpFZQg==", - "dev": true, - "requires": { - "@types/chai": "4", - "@types/superagent": "^3.8.3", - "cookiejar": "^2.1.1", - "is-ip": "^2.0.0", - "methods": "^1.1.2", - "qs": "^6.5.1", - "superagent": "^3.7.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" - } - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "dotignore": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", - "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "foreground-child": { - "version": "1.5.6", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", - "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", - "dev": true, - "requires": { - "cross-spawn": "^4", - "signal-exit": "^3.0.0" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "generic-pool": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.3.tgz", - "integrity": "sha1-eAw29p360FpaBF3Te+etyhGk9v8=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "hasha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz", - "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=", - "dev": true, - "requires": { - "is-stream": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true - }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true - }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz", - "integrity": "sha1-aO6gfooKCpTC0IDdZ0xzGrKkYas=", - "dev": true, - "requires": { - "ip-regex": "^2.0.0" - } - }, - "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", - "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", - "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", - "dev": true, - "requires": { - "@babel/generator": "^7.4.0", - "@babel/parser": "^7.4.3", - "@babel/template": "^7.4.0", - "@babel/traverse": "^7.4.3", - "@babel/types": "^7.4.0", - "istanbul-lib-coverage": "^2.0.5", - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", - "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "supports-color": "^6.1.0" - }, - "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", - "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0" - } - }, - "js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "just-extend": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.0.tgz", - "integrity": "sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==", - "dev": true - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, - "lolex": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", - "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", - "dev": true, - "requires": { - "mime-db": "1.44.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", - "dev": true - }, - "nise": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", - "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", - "dev": true, - "requires": { - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - } - } - }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", - "dev": true, - "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "nyc": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz", - "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==", - "dev": true, - "requires": { - "archy": "^1.0.0", - "caching-transform": "^3.0.2", - "convert-source-map": "^1.6.0", - "cp-file": "^6.2.0", - "find-cache-dir": "^2.1.0", - "find-up": "^3.0.0", - "foreground-child": "^1.5.6", - "glob": "^7.1.3", - "istanbul-lib-coverage": "^2.0.5", - "istanbul-lib-hook": "^2.0.7", - "istanbul-lib-instrument": "^3.3.0", - "istanbul-lib-report": "^2.0.8", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", - "js-yaml": "^3.13.1", - "make-dir": "^2.1.0", - "merge-source-map": "^1.1.0", - "resolve-from": "^4.0.0", - "rimraf": "^2.6.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^1.4.2", - "test-exclude": "^5.2.3", - "uuid": "^3.3.2", - "yargs": "^13.2.2", - "yargs-parser": "^13.0.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz", - "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^3.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "packet-reader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", - "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, - "pg": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/pg/-/pg-7.18.2.tgz", - "integrity": "sha512-Mvt0dGYMwvEADNKy5PMQGlzPudKcKKzJds/VbOeZJpb6f/pI3mmoXX0JksPgI3l3JPP/2Apq7F36O63J7mgveA==", - "dev": true, - "requires": { - "buffer-writer": "2.0.0", - "packet-reader": "1.0.0", - "pg-connection-string": "0.1.3", - "pg-packet-stream": "^1.1.0", - "pg-pool": "^2.0.10", - "pg-types": "^2.1.0", - "pgpass": "1.x", - "semver": "4.3.2" - }, - "dependencies": { - "semver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", - "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=", - "dev": true - } - } - }, - "pg-connection-string": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", - "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=", - "dev": true - }, - "pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "dev": true - }, - "pg-packet-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pg-packet-stream/-/pg-packet-stream-1.1.0.tgz", - "integrity": "sha512-kRBH0tDIW/8lfnnOyTwKD23ygJ/kexQVXZs7gEyBljw4FYqimZFxnMMx50ndZ8In77QgfGuItS5LLclC2TtjYg==", - "dev": true - }, - "pg-pool": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.10.tgz", - "integrity": "sha512-qdwzY92bHf3nwzIUcj+zJ0Qo5lpG/YxchahxIN8+ZVmXqkahKXsnl2aiJPHLYN9o5mB/leG+Xh6XKxtP7e0sjg==", - "dev": true - }, - "pg-testdb": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/pg-testdb/-/pg-testdb-1.0.4.tgz", - "integrity": "sha1-Z8JDbxbDFQtaYRHbBCIaNrQWwHU=", - "dev": true, - "requires": { - "pg": "^7.3.0", - "pgtools": "^0.3.0" - } - }, - "pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dev": true, - "requires": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - } - }, - "pgpass": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", - "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", - "dev": true, - "requires": { - "split": "^1.0.0" - } - }, - "pgtools": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/pgtools/-/pgtools-0.3.0.tgz", - "integrity": "sha512-8NxDCJ8xJ6hOp9hVNZqxi+TZl7hM1Jc8pQyj8DlAbyaWnk5OsGwf3gB/UyDODdOguiim9QzbzPsslp//apO+Uw==", - "dev": true, - "requires": { - "bluebird": "^3.3.5", - "pg": "^6.1.0", - "pg-connection-string": "^0.1.3", - "yargs": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "buffer-writer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", - "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "packet-reader": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", - "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pg": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/pg/-/pg-6.4.2.tgz", - "integrity": "sha1-w2QBEGDqx6UHoq4GPrhX7OkQ4n8=", - "dev": true, - "requires": { - "buffer-writer": "1.0.1", - "js-string-escape": "1.0.1", - "packet-reader": "0.3.1", - "pg-connection-string": "0.1.3", - "pg-pool": "1.*", - "pg-types": "1.*", - "pgpass": "1.*", - "semver": "4.3.2" - } - }, - "pg-pool": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-1.8.0.tgz", - "integrity": "sha1-9+xzgkw3oD8Hb1G/33DjQBR8Tzc=", - "dev": true, - "requires": { - "generic-pool": "2.4.3", - "object-assign": "4.1.0" - } - }, - "pg-types": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.13.0.tgz", - "integrity": "sha512-lfKli0Gkl/+za/+b6lzENajczwZHc7D5kiUCZfgm914jipD2kIOIvEkAhZ8GrW3/TUoP9w8FHjwpPObBye5KQQ==", - "dev": true, - "requires": { - "pg-int8": "1.0.1", - "postgres-array": "~1.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.0", - "postgres-interval": "^1.1.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "postgres-array": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.3.tgz", - "integrity": "sha512-5wClXrAP0+78mcsNX3/ithQ5exKvCyK5lr5NEEEeGwwM6NJdQgzIJBVxLvRW+huFpX92F2QnZ5CcokH0VhK2qQ==", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "semver": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", - "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-5.0.0.tgz", - "integrity": "sha1-M1UUSXfQV1fbuG1uOOwFYSOzpm4=", - "dev": true, - "requires": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.2.0", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^3.2.0" - } - }, - "yargs-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-3.2.0.tgz", - "integrity": "sha1-UIE1XRnZ0MjF2BrakIy05tGGZk8=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.1.0" - } - } - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "dev": true - }, - "postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=", - "dev": true - }, - "postgres-date": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.5.tgz", - "integrity": "sha512-pdau6GRPERdAYUQwkBnGKxEfPyhVZXG/JiS44iZWiNdSOWE09N2lUgN6yshuq6fVSon4Pm0VMXd1srUUkLe9iA==", - "dev": true - }, - "postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dev": true, - "requires": { - "xtend": "^4.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "qs": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz", - "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", - "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", - "dev": true, - "requires": { - "find-up": "^3.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" - } - }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "dev": true, - "requires": { - "through": "~2.3.4" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "sinon": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", - "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.4.0", - "@sinonjs/formatio": "^3.2.1", - "@sinonjs/samsam": "^3.3.3", - "diff": "^3.5.0", - "lolex": "^4.2.0", - "nise": "^1.5.2", - "supports-color": "^5.5.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "spawn-wrap": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz", - "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==", - "dev": true, - "requires": { - "foreground-child": "^1.5.6", - "mkdirp": "^0.5.0", - "os-homedir": "^1.0.1", - "rimraf": "^2.6.2", - "signal-exit": "^3.0.2", - "which": "^1.3.0" - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "string-builder": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/string-builder/-/string-builder-0.1.6.tgz", - "integrity": "sha512-lpfA1Tddd4dwk2Hxf/fhQAG2JK91St/ISqdvBYjOOnW8oNC1172CwW5X2YsU+JqtJBPCBDPZrlrPCK8iQq0QyQ==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "string.prototype.trim": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz", - "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "dev": true, - "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "tape": { - "version": "4.13.3", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.3.tgz", - "integrity": "sha512-0/Y20PwRIUkQcTCSi4AASs+OANZZwqPKaipGCEwp10dQMipVvSZwUUCi01Y/OklIGyHKFhIcjock+DKnBfLAFw==", - "dev": true, - "requires": { - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "function-bind": "~1.1.1", - "glob": "~7.1.6", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.0.5", - "minimist": "~1.2.5", - "object-inspect": "~1.7.0", - "resolve": "~1.17.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.1", - "through": "~2.3.8" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - } - } - }, - "test-exclude": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz", - "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==", - "dev": true, - "requires": { - "glob": "^7.1.3", - "minimatch": "^3.0.4", - "read-pkg-up": "^4.0.0", - "require-main-filename": "^2.0.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "underscore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - } - } - } -} diff --git a/app/test/package.json b/app/test/package.json deleted file mode 100644 index a8e4f4544..000000000 --- a/app/test/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "hyperledger-explorer-test", - "version": "0.3.9", - "description": "hyperledger-explorer-test", - "main": "test.js", - "scripts": { - "test": "nyc mocha *.js --exit", - "coverage": "nyc report" - }, - "author": "", - "license": "Apache-2.0", - "devDependencies": { - "arraylist": "^0.1.0", - "chai": "^4.2.0", - "chai-http": "^4.3.0", - "mocha": "^6.1.4", - "nyc": "^14.1.1", - "pg-testdb": "^1.0.4", - "request": "^2.88.0", - "sinon": "^7.3.2", - "string-builder": "^0.1.6", - "tape": "^4.10.2" - }, - "nyc": { - "check-coverage": true, - "per-file": true, - "extension": [ - ".js" - ], - "reporter": "cobertura", - "lines": 80, - "functions": 80, - "statements": 80, - "branches": 80, - "watermarks": { - "lines": [ - 80, - 80 - ], - "functions": [ - 80, - 80 - ], - "branches": [ - 80, - 80 - ], - "statements": [ - 80, - 80 - ] - } - }, - "dependencies": {} -} diff --git a/app/test/peer.js b/app/test/peer.js deleted file mode 100644 index 860c7bf66..000000000 --- a/app/test/peer.js +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const config = require('../../app/platform/fabric/config'); -const appconfig = require('../../appconfig.json'); - -const host = process.env.HOST || appconfig.host; -const port = process.env.PORT || appconfig.port; -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const peers = require('./fixtures/peers.json'); - -describe('GET /api/peer/channel', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return peers ', done => { - const obj = peers; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/peers/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'peers'); - body.status.should.eql(200); - for (let i = 0; i < body.peers.length; i++) { - body.peers[i].should.include.keys('requests', 'server_hostname'); - } - done(); - } - ); - }); -}); diff --git a/app/test/postgrespgtest.js b/app/test/postgrespgtest.js deleted file mode 100644 index 6a92151ed..000000000 --- a/app/test/postgrespgtest.js +++ /dev/null @@ -1,124 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); - -const test = require('tape'); -const readline = require('readline'); -const ArrayList = require('arraylist'); -const StringBuilder = require('string-builder'); -const fs = require('fs'); -const pgtestdb = require('pg-testdb'); - -const config = require('../explorerconfig.json'); - -const pgconfig = config.postgreSQL; - -const options = { - testdb: 'pgtestdb', - messages: false, - connection: { - host: pgconfig.host, - port: pgconfig.port, - user: 'postgres', - password: 'postgres' - } -}; -const list = new ArrayList(); -list.add('DROP USER IF EXISTS testuser;'); -describe('Test explorerpg.sql for DDL statements syntax verification', () => { - it('should read the file explorerpg.sql for ddl statements ', function(readdone) { - this.timeout(5000); - let sb = new StringBuilder(''); - let isMergeline = false; - const fs = require('fs'); - - const readline = require('readline'); - - const instream = fs.createReadStream( - '../persistence/fabric/postgreSQL/db/explorerpg.sql' - ); - - const outstream = new (require('stream'))(); - - const rl = readline.createInterface(instream, outstream); - rl.on('line', line => { - if ( - (line.toUpperCase().startsWith('CREATE') || - line.toUpperCase().startsWith('DROP') || - line.toUpperCase().startsWith('ALTER') || - line.toUpperCase().startsWith('GRANT')) && - line.endsWith(';') - ) { - if ( - !( - line.toUpperCase().startsWith('CREATE DATABASE') || - line.toUpperCase().startsWith('DROP DATABASE') - ) - ) { - line = line.replace(/:user/i, 'testuser'); - line = line.replace(/:passwd/, "'password'"); - line = line.replace(/:dbname/, 'pgtestdb'); - list.add(line); - } - } else if ( - (line.toUpperCase().startsWith('CREATE') || - line.toUpperCase().startsWith('DROP') || - line.toUpperCase().startsWith('ALTER') || - line.toUpperCase().startsWith('GRANT')) && - !line.endsWith(';') - ) { - sb.append(line); - isMergeline = true; - } else if (isMergeline && line.endsWith(';')) { - sb.append(' ').append(line); - let appendLine = sb.toString(); - appendLine = appendLine.replace(/:user/i, 'testuser'); - appendLine = appendLine.replace(/:passwd/, "'password'"); - appendLine = appendLine.replace(/:dbname/, 'pgtestdb'); - list.add(appendLine); - sb = new StringBuilder(''); - isMergeline = false; - } else if (isMergeline) { - sb.append(line); - } - }); - rl.on('close', line => {}); - readdone(); - }); - it('should execute statements successfully in explorerpg.sql file ', function(testdone) { - this.timeout(7000); - options.tests = []; - const newList = new ArrayList(); - for (let i = 0; i < list.size(); i++) { - if (!list.get(i).startsWith(');') && list.get(i).length > 6) { - newList.add(list.get(i)); - } - } - test('Test Results', t => { - for (let i = 0; i < newList.size(); i++) { - options.tests[i] = client => { - if (i == 0) { - client.connect(); - } - return client - .query(newList.get(i)) - .then(() => { - t.pass(newList.get(i)); - }) - .catch(err => { - t.fail(newList.get(i)); - }); - }; - } - pgtestdb(options, (err, res) => { - t.comment('Test completed and Temporary database deleted'); - t.end(); - testdone(); - }); - }); - }); -}); diff --git a/app/test/register.js b/app/test/register.js deleted file mode 100644 index aa1e2b2ef..000000000 --- a/app/test/register.js +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const register = require('./fixtures/register.json'); - -describe('POST /auth/register/', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - - it('should return register ', done => { - const obj = register; - this.post.yields(null, JSON.stringify(obj)); - request.post( - `${base}` + '/auth/register', - { - body: { - user: 'admin', - password: 'adminpw', - affiliation: 'testing', - roles: 'admin' - } - }, - (err, body) => { - body = JSON.parse(body); - body.should.include.key('status'); - body.status.should.eql(200); - done(); - } - ); - }); -}); diff --git a/app/test/requestutils.js b/app/test/requestutils.js deleted file mode 100644 index 0e8b2487b..000000000 --- a/app/test/requestutils.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - SPDX-License-Identifier: Apache-2.0 -*/ - -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); -const chaiHttp = require('chai-http'); -import { helper } from '../common/helper'; -const reqMultiOrgs = require('./fixtures/reqMultiOrgs.json'); -const reqOneOrg = require('./fixtures/reqOneOrg.json'); -const reqNoOrgs = require('./fixtures/reqNoOrgs.json'); - -const should = chai.should(); -chai.use(chaiHttp); -const requestutils = require('../rest/requestutils.js'); - -describe('requestutils().orgsArrayToString should return empty string', () => { - const emptyString = requestutils.orgsArrayToString(reqNoOrgs); - it('requestutils().orgsArrayToString should return empty string', () => { - assert.equal('', emptyString); - }); -}); - -describe('requestutils().orgsArrayToString should return single quotes value', () => { - const oneOrgString = requestutils.orgsArrayToString(reqOneOrg); - it('requestutils().orgsArrayToString should return single quotes value', () => { - assert.equal("'OrgOne'", oneOrgString); - }); -}); - -describe('requestutils().orgsArrayToString should return comma separated single quotes values ', () => { - const multiOrgsString = requestutils.orgsArrayToString(reqMultiOrgs); - const multiOrgs = "'OrdererMSP','Org2MSP'"; - it('requestutils().orgsArrayToString should return comma separated single quotes values ', () => { - assert.equal(multiOrgs, multiOrgsString); - }); -}); diff --git a/app/test/status.js b/app/test/status.js deleted file mode 100644 index 46a2366b3..000000000 --- a/app/test/status.js +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const status = require('./fixtures/status.json'); - -describe('GET api/status/:channel_genesis_hash', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return channel status', done => { - const obj = status; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/status/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys( - 'chaincodeCount', - 'txCount', - 'latestBlock', - 'peerCount' - ); - body.chaincodeCount.should.eql(0); - body.txCount.should.eql(3); - body.latestBlock.should.eql(3); - body.peerCount.should.eql(4); - done(); - } - ); - }); -}); diff --git a/app/test/test.js b/app/test/test.js deleted file mode 100644 index 5b7477308..000000000 --- a/app/test/test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - SPDX-License-Identifier: Apache-2.0 -*/ - -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); -const chaiHttp = require('chai-http'); -import { helper } from '../common/helper'; - -const should = chai.should(); -chai.use(chaiHttp); - -describe('getLogger()', () => { - it('should getLogger()', () => { - // 1. arrange - const dir = '.'; - // 2. act - const logger = helper.getLogger(); - // 3 assert - assert.notEqual(null, logger); - }); -}); diff --git a/app/test/transaction.js b/app/test/transaction.js deleted file mode 100644 index fb38b07b2..000000000 --- a/app/test/transaction.js +++ /dev/null @@ -1,78 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const transaction = require('./fixtures/transaction.json'); - -describe('GET /api/transaction/:channel_genesis_hash/:txid', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return transaction ', done => { - const obj = transaction; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/transaction/mychannel/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'row'); - body.status.should.eql(200); - body.row.should.include.keys( - 'id', - 'channelname', - 'txhash', - 'blockid', - 'chaincodename', - 'status', - 'createdt', - 'creator_msp_id', - 'endorser_msp_id', - 'type', - 'chaincode_id', - 'write_set', - 'read_set' - ); - body.row.id.should.eql(10); - body.row.status.should.eql(200); - body.row.channelname.should.eql('mychannel'); - body.row.txhash.should.eql( - '1752ce850935e0547e78b5396f64162a09c595f9ecc514f25afe48b52fa4d840' - ); - body.row.blockid.should.eql(4); - body.row.chaincodename.should.eql('mycc'); - body.row.status.should.eql(200); - body.row.createdt.should.eql('2018-05-15T02:04:25.000Z'); - body.row.chaincode_id.should.eql(''); - body.row.creator_msp_id.should.eql('Org1MSP'); - body.row.endorser_msp_id.should.eql('{"Org1MSP"}'); - body.row.type.should.eql('ENDORSER_TRANSACTION'); - for (let i = 0; i < body.row.write_set.length; i++) { - body.row.write_set[i].should.include.keys('chaincode', 'set'); - } - for (let i = 0; i < body.row.read_set.length; i++) { - body.row.read_set[i].should.include.keys('chaincode', 'set'); - } - - done(); - } - ); - }); -}); diff --git a/app/test/txbyhour.js b/app/test/txbyhour.js deleted file mode 100644 index 8f55fcaf0..000000000 --- a/app/test/txbyhour.js +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const txbyhour = require('./fixtures/txbyhour.json'); - -describe('GET /api/txByHour/:channel_genesis_hash/:day', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return txbyhour ', done => { - const obj = txbyhour; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/txByHour/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d/1', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'rows'); - body.status.should.eql(200); - for (let i = 0; i < body.rows.length; i++) { - body.rows[i].should.include.keys('datetime', 'count'); - } - done(); - } - ); - }); -}); diff --git a/app/test/txbyminute.js b/app/test/txbyminute.js deleted file mode 100644 index 02f59ad23..000000000 --- a/app/test/txbyminute.js +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const txbyminute = require('./fixtures/txbyminute.json'); - -describe('GET /api/txByMinute/:channel_genesis/:hour', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return txbyminute ', done => { - const obj = txbyminute; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/txByMinute/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d/1', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'rows'); - body.status.should.eql(200); - for (let i = 0; i < body.rows.length; i++) { - body.rows[i].should.include.keys('datetime', 'count'); - } - done(); - } - ); - }); -}); diff --git a/app/test/txbyorg.js b/app/test/txbyorg.js deleted file mode 100644 index 9295dfff1..000000000 --- a/app/test/txbyorg.js +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -const expect = require('chai').expect; -const assert = require('assert'); -const chai = require('chai'); - -const should = chai.should(); -const { spy, stub } = require('sinon'); -const sinon = require('sinon'); -const request = require('request'); - -const base = 'http://localhost:1337'; -const txbyorg = require('./fixtures/txbyorg.json'); - -describe('GET /api/txByOrg/:channel', () => { - before(() => { - this.get = sinon.stub(request, 'get'); - this.post = sinon.stub(request, 'post'); - this.put = sinon.stub(request, 'put'); - this.delete = sinon.stub(request, 'delete'); - }); - - after(() => { - request.get.restore(); - request.post.restore(); - request.put.restore(); - request.delete.restore(); - }); - it('should return txbyorg ', done => { - const obj = txbyorg; - this.get.yields(null, JSON.stringify(obj)); - request.get( - `${base}` + - '/api/txByOrg/6571ce3234a8808327849841eb9ed43a717f7f5bf430e1fb42f922f70185404d', - (err, body) => { - body = JSON.parse(body); - body.should.include.keys('status', 'rows'); - body.status.should.eql(200); - for (let i = 0; i < body.rows.length; i++) { - body.rows[i].should.include.keys('creator_msp_id', 'count'); - } - done(); - } - ); - }); -}); diff --git a/ci/azure-pipelines.yml b/ci/azure-pipelines.yml index 29836b2da..2f343383f 100644 --- a/ci/azure-pipelines.yml +++ b/ci/azure-pipelines.yml @@ -21,13 +21,10 @@ jobs: - template: install_deps.yml - checkout: self - script: | - npm config set prefix ~/npm && npm install -g mocha - npm install chai && npm install - ./build_docker_image.sh -d - docker-compose -f docker-compose-testdb.yaml up -d - cd app/test && npm install + npm config set prefix ~/npm + npm install npm run test - cd ../../client && npm install + cd ./client && npm install echo "--------> npm tests with code coverage" npm run test:ci -- -u --coverage && npm run build displayName: Run Tests With Coverage Report @@ -35,14 +32,11 @@ jobs: cd client wget https://raw.github.com/eriwen/lcov-to-cobertura-xml/master/lcov_cobertura/lcov_cobertura.py python lcov_cobertura.py ./coverage/lcov.info - mv $(System.DefaultWorkingDirectory)/app/test/*.js $(System.DefaultWorkingDirectory)/client displayName: Create Cobertura Report - - script: npx cobertura-merge -o output.xml package1=$(System.DefaultWorkingDirectory)/app/test/coverage/cobertura-coverage.xml package2=$(System.DefaultWorkingDirectory)/client/coverage.xml - displayName: Merge Cobertura Reports - task: PublishCodeCoverageResults@1 inputs: codeCoverageTool: 'Cobertura' - summaryFileLocation: $(System.DefaultWorkingDirectory)/output.xml + summaryFileLocation: $(System.DefaultWorkingDirectory)/client/coverage.xml pathToSources: $(System.DefaultWorkingDirectory)/client - job: SanityChecks_v1_4 diff --git a/main.sh b/main.sh index 37d9f1ecb..1cdc0ee3c 100755 --- a/main.sh +++ b/main.sh @@ -19,19 +19,17 @@ function print_help() { function do_install() { VERBOSE=${VERBOSE:+-ddd} npm install $VERBOSE - (cd app/test && npm install $VERBOSE) (cd client && npm install $VERBOSE && npm run build) } function do_test() { - (cd app/test && npm run test) + (npm run test) (cd client && npm run test:ci -- -u --coverage) } function do_clean() { rm -rf node_modules rm -rf client/node_modules client/build client/coverage - rm -rf app/test/node_modules } # Get subcommand diff --git a/package-lock.json b/package-lock.json index 868602b69..ca4b7ec55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,198 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, + "@babel/generator": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", + "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", + "lodash": "^4.17.19" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.7.tgz", + "integrity": "sha512-I5xc9oSJ2h59OwyUqjv95HRyzxj53DAubUERgQMrpcCEYQyToeHA+NEcUEsVWB4j53RDeskeBJ0SgRAYHDBckw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.7" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz", + "integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.12.1", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "dev": true, + "requires": { + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", + "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==", + "dev": true + }, "@babel/runtime": { "version": "7.11.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", @@ -23,6 +215,56 @@ "regenerator-runtime": "^0.13.4" } }, + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "@babel/traverse": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", + "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, + "@babel/types": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", + "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, "@grpc/grpc-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.0.3.tgz", @@ -47,6 +289,97 @@ "protobufjs": "^6.8.6" } }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "@istanbuljs/nyc-config-typescript": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.1.tgz", + "integrity": "sha512-/gz6LgVpky205LuoOfwEZmnUtaSmdk0QIMcNFj9OvxhiMhPpKftMgZmGN7jNj7jR+lr8IB1Yks3QSSSNSxfoaQ==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2" + } + }, + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", + "dev": true + }, "@nodelib/fs.scandir": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", @@ -136,6 +469,51 @@ "any-observable": "^0.3.0" } }, + "@sinonjs/commons": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.1.tgz", + "integrity": "sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/formatio": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-5.0.1.tgz", + "integrity": "sha512-KaiQ5pBf1MpS09MuA0kp6KBQt2JUOQycqVG1NZXvzeaXe5LGFqAKueIS0bw4w0P9r7KuBSVdUk5QjXsUdu2CxQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^5.0.2" + } + }, + "@sinonjs/samsam": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.0.tgz", + "integrity": "sha512-hXpcfx3aq+ETVBwPlRFICld5EnrkexXuXDwqUNhDdr5L8VjvMeSRwyOa0qL7XFmR+jVWR4rUZtnxlG7RX72sBg==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, "@types/bluebird": { "version": "3.5.32", "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.32.tgz", @@ -166,6 +544,21 @@ "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==" }, + "@types/chai": { + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.14.tgz", + "integrity": "sha512-G+ITQPXkwTrslfG5L/BksmbLUA0M1iybEsmCWPqzSxsRRhJZimBKJkoMi8fr/CPygPTj4zO5pJH7I2/cm9M7SQ==", + "dev": true + }, + "@types/chai-as-promised": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.3.tgz", + "integrity": "sha512-FQnh1ohPXJELpKhzjuDkPLR2BZCAqed+a6xV4MI/T3XzHfd2FlarfUGUdZYgqYe8oxkYn0fchHEeHfHqdZ96sg==", + "dev": true, + "requires": { + "@types/chai": "*" + } + }, "@types/connect": { "version": "3.4.33", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", @@ -263,6 +656,12 @@ "integrity": "sha512-Jus9s4CDbqwocc5pOAnh8ShfrnMcPHuJYzVcSUU7lrh8Ni5HuIqX3oilL86p3dlTrk0LzHRCgA/GQ7uNCw6l2Q==", "dev": true }, + "@types/mocha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-8.0.4.tgz", + "integrity": "sha512-M4BwiTJjHmLq6kjON7ZoI2JMlBvpY3BYSdiP6s/qCT3jb1s9/DeJF0JELpAxiVSIxXDzfNKe+r7yedMIoLbknQ==", + "dev": true + }, "@types/node": { "version": "14.10.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.10.0.tgz", @@ -314,6 +713,12 @@ "integrity": "sha512-L8ogeT6vDzT1vxlW3KITTCt+BVXXVkLXfZ/XNm6UqbcJgxf+KPO7yjWx7dQQE8RW07KopL10x2gNMs41+IkMGQ==", "dev": true }, + "@types/proxyquire": { + "version": "1.3.28", + "resolved": "https://registry.npmjs.org/@types/proxyquire/-/proxyquire-1.3.28.tgz", + "integrity": "sha512-SQaNzWQ2YZSr7FqAyPPiA3FYpux2Lqh3HWMZQk47x3xbMCqgC/w0dY3dw9rGqlweDDkrySQBcaScXWeR+Yb11Q==", + "dev": true + }, "@types/qs": { "version": "6.9.4", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.4.tgz", @@ -359,6 +764,31 @@ "@types/mime": "*" } }, + "@types/sinon": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.9.tgz", + "integrity": "sha512-z/y8maYOQyYLyqaOB+dYQ6i0pxKLOsfwCmHmn4T7jS/SDHicIslr37oE3Dg8SCqKrKeBy6Lemu7do2yy+unLrw==", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinon-chai": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.5.tgz", + "integrity": "sha512-bKQqIpew7mmIGNRlxW6Zli/QVyc3zikpGzCa797B/tRnD9OtHvZ/ts8sYXV+Ilj9u3QRaUEM8xrjgd1gwm1BpQ==", + "dev": true, + "requires": { + "@types/chai": "*", + "@types/sinon": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.2.tgz", + "integrity": "sha512-dIPoZ3g5gcx9zZEszaxLSVTvMReD3xxyyDnQUjA6IYDG9Ba2AV0otMPs+77sG9ojB4Qr2N2Vk5RnKeuA0X/0bg==", + "dev": true + }, "@types/tough-cookie": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz", @@ -507,6 +937,12 @@ "eslint-visitor-keys": "^2.0.0" } }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -521,6 +957,24 @@ "negotiator": "0.6.2" } }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "dependencies": { + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + } + } + }, "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", @@ -532,6 +986,12 @@ "json-schema-traverse": "^0.3.0" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, "ansi-escapes": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", @@ -562,6 +1022,24 @@ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + } + } + }, "app-root-path": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", @@ -572,11 +1050,26 @@ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" }, + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", @@ -586,6 +1079,12 @@ "readable-stream": "^2.0.6" } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -705,6 +1204,12 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -744,9 +1249,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", - "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" }, "axe-core": { "version": "3.5.5", @@ -837,6 +1342,12 @@ "tweetnacl": "^0.14.3" } }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "dev": true + }, "bn.js": { "version": "4.11.9", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", @@ -927,6 +1438,12 @@ "resolved": "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz", "integrity": "sha1-ns5bWsqJopkyJC4Yv5M975h2zBc=" }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -1020,6 +1537,18 @@ "unset-value": "^1.0.0" } }, + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "requires": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + } + }, "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", @@ -1064,6 +1593,29 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "dev": true, + "requires": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" + } + }, + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "requires": { + "check-error": "^1.0.2" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1074,38 +1626,101 @@ "supports-color": "^5.3.0" } }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, "child_process": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz", "integrity": "sha1-sffn/HPSXn/R1FWtyU4UODAYK1o=" }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { "is-descriptor": "^0.1.0" @@ -1118,6 +1733,12 @@ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, "cli-cursor": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", @@ -1158,11 +1779,11 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } } } @@ -1224,6 +1845,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -1328,6 +1955,15 @@ "resolved": "https://registry.npmjs.org/convert-hex/-/convert-hex-0.1.0.tgz", "integrity": "sha1-CMBFaJIsJ3drii6BqV05M2LqC2U=" }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, "cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", @@ -1367,6 +2003,12 @@ "parse-json": "^4.0.0" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-env": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", @@ -1456,11 +2098,37 @@ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "requires": { + "type-detect": "^4.0.0" + } + }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "requires": { + "strip-bom": "^4.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + } + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1567,6 +2235,12 @@ } } }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -1726,6 +2400,12 @@ "next-tick": "~1.0.0" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", @@ -2310,14 +2990,50 @@ } }, "fabric-network": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/fabric-network/-/fabric-network-2.2.2.tgz", - "integrity": "sha512-zPZ+yrSyHSVzDVS7f9EEMxN9nKOQ7aDg0RX76efevH7PQ7atDogijMnw2EdYnHBcw/t/ATMlMqaIxkKJNBoPjg==", + "version": "2.2.4-snapshot.11", + "resolved": "https://registry.npmjs.org/fabric-network/-/fabric-network-2.2.4-snapshot.11.tgz", + "integrity": "sha512-i/W4Xm77C4ZKKqK5ug+hO8HMWP49rlsywHJ1WOjp0R6oJjwR9YBq+blzN2qE4XoRgaGHUFgttrHYjBOHdWYcVg==", "requires": { - "fabric-common": "2.2.2", - "fabric-protos": "2.2.2", + "fabric-common": "2.2.4-snapshot.11", + "fabric-protos": "2.2.4-snapshot.11", "long": "^4.0.0", "nano": "^8.2.2" + }, + "dependencies": { + "fabric-common": { + "version": "2.2.4-snapshot.11", + "resolved": "https://registry.npmjs.org/fabric-common/-/fabric-common-2.2.4-snapshot.11.tgz", + "integrity": "sha512-4IGXCn0oiHllZgGJ1bebCwdEzbG17AbcRHyb1pqu/xBjl3difMHBPUNzeyJ7gE2S8wtGMi9ANsxzMsWVGqbhtA==", + "requires": { + "callsite": "^1.0.0", + "elliptic": "^6.5.3", + "fabric-protos": "2.2.4-snapshot.11", + "js-sha3": "^0.7.0", + "jsrsasign": "^8.0.20", + "long": "^4.0.0", + "nconf": "^0.10.0", + "pkcs11js": "^1.0.6", + "promise-settle": "^0.3.0", + "sjcl": "1.0.7", + "winston": "^2.4.0", + "yn": "^3.1.0" + } + }, + "fabric-protos": { + "version": "2.2.4-snapshot.11", + "resolved": "https://registry.npmjs.org/fabric-protos/-/fabric-protos-2.2.4-snapshot.11.tgz", + "integrity": "sha512-QMVK7BCtn1esWB6Wr8lAiDlwg4JEo/e29OXl20zxhVjKLEYh9Vts9AAJHp/fybADzrcEpDIWS+8PklWYsU8Jvg==", + "requires": { + "@grpc/grpc-js": "1.0.3", + "@grpc/proto-loader": "0.5.4", + "protobufjs": "^6.9.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + } } }, "fabric-protos": { @@ -2428,6 +3144,16 @@ "object-assign": "^4.1.0" } }, + "fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha1-mo+jb06K1jTjv2tPPIiCVRRS6yA=", + "dev": true, + "requires": { + "is-object": "~1.0.1", + "merge-descriptors": "~1.0.0" + } + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -2480,6 +3206,77 @@ } } }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, "find-parent-dir": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz", @@ -2495,6 +3292,12 @@ "locate-path": "^2.0.0" } }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, "flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", @@ -2506,6 +3309,59 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, + "foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2545,6 +3401,12 @@ "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" }, + "fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true + }, "fs-extra": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", @@ -2568,6 +3430,13 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -2594,12 +3463,36 @@ "wide-align": "^1.1.0" } }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, "get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", @@ -2667,6 +3560,12 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, "grpc": { "version": "1.24.3", "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.24.3.tgz", @@ -2708,9 +3607,9 @@ }, "dependencies": { "ajv": { - "version": "6.12.4", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", - "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2803,6 +3702,30 @@ "minimalistic-assert": "^1.0.1" } }, + "hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "requires": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + } + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, "helmet": { "version": "3.23.3", "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.23.3.tgz", @@ -2884,6 +3807,12 @@ } } }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -2967,6 +3896,12 @@ "resolve-from": "^3.0.0" } }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "indent-string": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", @@ -3043,6 +3978,15 @@ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", @@ -3173,6 +4117,12 @@ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, "is-observable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz", @@ -3182,6 +4132,12 @@ "symbol-observable": "^1.1.0" } }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -3263,26 +4219,203 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, - "jest-get-type": { - "version": "22.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", - "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", "dev": true }, - "jest-validate": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", - "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "requires": { - "chalk": "^2.0.1", - "jest-get-type": "^22.1.0", - "leven": "^2.1.0", - "pretty-format": "^23.6.0" + "append-transform": "^2.0.0" } }, - "js-sha256": { - "version": "0.9.0", + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-processinfo": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", + "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.0", + "istanbul-lib-coverage": "^3.0.0-alpha.1", + "make-dir": "^3.0.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^3.3.3" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest-get-type": { + "version": "22.4.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-22.4.3.tgz", + "integrity": "sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w==", + "dev": true + }, + "jest-validate": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-23.6.0.tgz", + "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.6.0" + } + }, + "js-sha256": { + "version": "0.9.0", "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" }, @@ -3311,6 +4444,12 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -3391,6 +4530,12 @@ "object.assign": "^4.1.0" } }, + "just-extend": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.1.tgz", + "integrity": "sha512-aWgeGFW67BP3e5181Ep1Fv2v8z//iBJfrvyTnq8wG86vEESwmonn1zPBJ0VfmT9CJq2FIT0VsETtrNFm2a+SHA==", + "dev": true + }, "jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -3622,6 +4767,18 @@ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz", "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=" }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -3773,6 +4930,29 @@ } } }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -3938,6 +5118,339 @@ "minimist": "^1.2.5" } }, + "mocha": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", + "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.4.3", + "debug": "4.2.0", + "diff": "4.0.2", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.14.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "nanoid": "3.1.12", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "7.2.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.2", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + } + } + }, + "module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha1-z4tP9PKWQGdNbN0CsOO8UjwrvcA=", + "dev": true + }, "moment": { "version": "2.27.0", "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", @@ -3977,9 +5490,9 @@ "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" }, "nano": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/nano/-/nano-8.2.2.tgz", - "integrity": "sha512-1/rAvpd1J0Os0SazgutWQBx2buAq3KwJpmdIylPDqOwy73iQeAhTSCq3uzbGzvcNNW16Vv/BLXkk+DYcdcH+aw==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/nano/-/nano-8.2.3.tgz", + "integrity": "sha512-nubyTQeZ/p+xf3ZFFMd7WrZwpcy9tUDrbaXw9HFBsM6zBY5gXspvOjvG2Zz3emT6nfJtP/h7F2/ESfsVVXnuMw==", "requires": { "@types/request": "^2.48.4", "cloudant-follow": "^0.18.2", @@ -3989,15 +5502,21 @@ }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" } } } }, + "nanoid": { + "version": "3.1.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", + "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -4038,21 +5557,51 @@ "sax": "^1.2.4" } }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" - }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "nise": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/nise/-/nise-4.0.4.tgz", + "integrity": "sha512-bTTRUNlemx6deJa+ZyoCUTRvH3liK5+N6VQZ4NIw90AgDXY6iPnsqplNFf6STcj+ePk0H/xqxnP75Lr0J0Fq3A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0", + "@sinonjs/fake-timers": "^6.0.0", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } + } + }, "nocache": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", @@ -4086,6 +5635,15 @@ "tar": "^4.4.2" } }, + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "requires": { + "process-on-spawn": "^1.0.0" + } + }, "nopt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", @@ -4196,6 +5754,241 @@ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "requires": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -4414,6 +6207,18 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, "packet-reader": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", @@ -4501,6 +6306,12 @@ "pify": "^3.0.0" } }, + "pathval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true + }, "pause": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", @@ -4698,6 +6509,15 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "requires": { + "fromentries": "^1.2.0" + } + }, "promise-settle": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/promise-settle/-/promise-settle-0.3.0.tgz", @@ -4749,6 +6569,17 @@ "ipaddr.js": "1.9.1" } }, + "proxyquire": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", + "dev": true, + "requires": { + "fill-keys": "^1.0.2", + "module-not-found-error": "^1.0.1", + "resolve": "^1.11.1" + } + }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -4785,6 +6616,15 @@ "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -4900,6 +6740,15 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "referrer-policy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", @@ -4937,6 +6786,15 @@ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", @@ -4993,6 +6851,18 @@ } } }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "resolve": { "version": "1.17.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", @@ -5219,6 +7089,15 @@ "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-6.1.0.tgz", "integrity": "sha512-4YwEw3ZgK/tY/so+GfnSgXkdwIJJ1I32uZJztIEgZeAO6HMgj64OzySbWLgxj+tXhZCJnzRfkY9gINw8Ft8ZMg==" }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "serve-static": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", @@ -5318,6 +7197,44 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, + "sinon": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.1.tgz", + "integrity": "sha512-naPfsamB5KEE1aiioaoqJ6MEhdUs/2vtI5w1hPAXX/UwvoPjXcwh1m5HiKx0HGgKR8lQSoFIgY5jM6KK8VrS9w==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.8.1", + "@sinonjs/fake-timers": "^6.0.1", + "@sinonjs/formatio": "^5.0.1", + "@sinonjs/samsam": "^5.2.0", + "diff": "^4.0.2", + "nise": "^4.0.4", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "sinon-chai": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-3.5.0.tgz", + "integrity": "sha512-IifbusYiQBpUxxFJkR3wTU68xzBN0+bxCScEaKMjBvAQERg6FnTTc1F17rseLb1tjmkJ23730AXpFI0c47FgAg==", + "dev": true + }, "sjcl": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/sjcl/-/sjcl-1.0.7.tgz", @@ -5476,12 +7393,64 @@ "urix": "^0.1.0" } }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", @@ -5819,11 +7788,28 @@ "yallist": "^3.0.3" } }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -5892,6 +7878,28 @@ } } }, + "ts-node": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.0.tgz", + "integrity": "sha512-0yqcL4sgruCvM+w64LiAfNJo6+lHfCYc5Ajj4yiLNkJ9oZ2HWaa+Kso7htYOOxVQ7+csAjdUjffOe9PIqC4pMg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "dependencies": { + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } + }, "tsconfig-paths": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", @@ -5937,6 +7945,18 @@ "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -5955,7 +7975,6 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "optional": true, "requires": { "is-typedarray": "^1.0.0" } @@ -6166,6 +8185,12 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -6207,6 +8232,12 @@ "@types/node": "*" } }, + "workerpool": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", + "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", + "dev": true + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -6221,6 +8252,18 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "ws": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", @@ -6269,10 +8312,60 @@ "y18n": "^3.2.0" } }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true + } + } + }, "yn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yn/-/yn-4.0.0.tgz", "integrity": "sha512-huWiiCS4TxKc4SfgmTwW1K7JmXPPAmuXWYy4j9qjQo4+27Kni8mGhAAi1cloRWmBe2EqcLgt3IGqQoRL/MtPgg==" + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 6737a6d0f..98eadc898 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "express": "^4.15.3", "express-rate-limit": "^5.0.0", "fabric-ca-client": "^2.2.0", - "fabric-network": "^2.2.0", + "fabric-network": "^2.2.4-snapshot.11", "fast-stats": "0.0.3", "fs-extra": "^6.0.1", "grpc": "^1.20.3", @@ -53,19 +53,28 @@ }, "license": "Apache-2.0", "devDependencies": { + "@istanbuljs/nyc-config-typescript": "^1.0.1", + "@types/chai": "^4.2.14", + "@types/chai-as-promised": "^7.1.3", "@types/express": "^4.17.8", "@types/express-serve-static-core": "^4.17.13", "@types/fs-extra": "^9.0.1", "@types/jsonwebtoken": "^8.5.0", "@types/log4js": "^2.3.5", + "@types/mocha": "^8.0.4", "@types/node": "^14.10.0", "@types/passport": "^1.0.4", "@types/passport-local": "^1.0.33", "@types/pg": "^7.14.5", + "@types/proxyquire": "^1.3.28", "@types/sequelize": "^4.28.9", + "@types/sinon": "^9.0.9", + "@types/sinon-chai": "^3.2.5", "@types/ws": "^7.2.6", "@typescript-eslint/eslint-plugin": "^4.2.0", "@typescript-eslint/parser": "^4.2.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", "cross-env": "^5.2.0", "eslint-config-airbnb": "^17.0.0", "eslint-plugin-import": "^2.13.0", @@ -75,7 +84,13 @@ "eslint-plugin-spellcheck": "0.0.11", "husky": "^0.14.3", "lint-staged": "^7.2.0", + "mocha": "^8.2.1", + "nyc": "^15.1.0", "prettier": "^1.13.7", + "proxyquire": "^2.1.3", + "sinon": "^9.2.1", + "sinon-chai": "^3.5.0", + "ts-node": "^9.1.0", "typescript": "^4.0.2" }, "lint-staged": { @@ -109,6 +124,8 @@ "e2e-gui-test-v1-run": "cd client/e2e-test; ./gui-e2e-test-start.sh -1", "e2e-gui-test-v2-run": "cd client/e2e-test; ./gui-e2e-test-start.sh -2", "e2e-gui-test-v1": "run-s e2e-test-build-src e2e-gui-test-v1-run", - "e2e-gui-test-v2": "run-s e2e-test-build-src e2e-gui-test-v2-run" + "e2e-gui-test-v2": "run-s e2e-test-build-src e2e-gui-test-v2-run", + "test": "nyc mocha", + "test:watch": "mocha -w --reporter min" } } diff --git a/scripts/verify-license.sh b/scripts/verify-license.sh index 64d484ba9..02020dd96 100755 --- a/scripts/verify-license.sh +++ b/scripts/verify-license.sh @@ -35,7 +35,7 @@ else fi # If you want to exclude some paths, add a keyword with an extended regular expression format to excluded_paths -excluded_paths="\.ico$ \.jpg$ \.json$ \.png$ \.svg$ \.tx$ \.crt$ \.ya*ml$ \.key$ \.pem$ _sk$ \/META-INF\/ LICENSE$ \.xml$ CHANGELOG\.md$ app/platform/fabric/e2e-test go\.sum$" +excluded_paths="\.ico$ \.jpg$ \.json$ \.png$ \.svg$ \.tx$ \.crt$ \.ya*ml$ \.key$ \.pem$ _sk$ \/META-INF\/ LICENSE$ \.xml$ CHANGELOG\.md$ app/platform/fabric/e2e-test go\.sum$ \.opts$" for check_file in ${check_files}; do diff --git a/syncstart.sh b/syncstart.sh index 4b345ec28..36c7720ac 100755 --- a/syncstart.sh +++ b/syncstart.sh @@ -7,22 +7,18 @@ # Please visit ./logs/sync/app to view the application logs and visit the ./logs/sync/db to view the Database logs and visit the ./logs/sync/console for the console.log # Log rotating for every 7 days. -rm -rf /tmp/fabric-client-kvs_peerOrg* - export SYNC_LOG_PATH=./logs/sync echo "************************************************************************************" echo "**************************** Hyperledger Explorer Sync**********************************" echo "************************************************************************************" -export LOG_LEVEL_APP=debug -export LOG_LEVEL_DB=debug -export LOG_LEVEL_CONSOLE=info -export LOG_CONSOLE_STDOUT=false - -export DISCOVERY_AS_LOCALHOST=true -node sync.js $1 $2 & - - +export LOG_LEVEL_APP=${LOG_LEVEL_APP:-debug} +export LOG_LEVEL_DB=${LOG_LEVEL_DB:-debug} +export LOG_LEVEL_CONSOLE=${LOG_LEVEL_CONSOLE:-info} +export LOG_CONSOLE_STDOUT=${LOG_CONSOLE_STDOUT:-false} +export DISCOVERY_AS_LOCALHOST=${DISCOVERY_AS_LOCALHOST:-true} +export EXPLORER_APP_ROOT=${EXPLORER_APP_ROOT:-dist} +node ${EXPLORER_APP_ROOT}/sync.js $1 $2 &