├── .github
└── workflows
│ └── nodejs.yml
├── .gitignore
├── LICENSE.md
├── README.md
├── lib
└── bcypher.js
├── package-lock.json
├── package.json
└── tests
└── unit
├── _del.js
├── _get.js
├── _post.js
├── addAddrWallet.js
├── createHDWallet.js
├── createHook.js
├── createPayFwd.js
├── createWallet.js
├── decodeTX.js
├── delAddrsWallet.js
├── delHDWallet.js
├── delHook.js
├── delPayFwd.js
├── delWallet.js
├── deriveAddrHDWallet.js
├── embedData.js
├── faucet.js
├── genAddr.js
├── genAddrWallet.js
├── getAddr.js
├── getAddrBal.js
├── getAddrFull.js
├── getAddrsHDWallet.js
├── getAddrsWallet.js
├── getBlock.js
├── getChain.js
├── getHDWallet.js
├── getHook.js
├── getTX.js
├── getTXConf.js
├── getUnTXs.js
├── getWallet.js
├── listHDWallets.js
├── listHooks.js
├── listPayFwds.js
├── listWallets.js
├── microTX.js
├── newTX.js
├── pushTX.js
└── sendTX.js
/.github/workflows/nodejs.yml:
--------------------------------------------------------------------------------
1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3 |
4 | name: Node.js CI
5 |
6 | on:
7 | push:
8 | branches: [ master ]
9 | pull_request:
10 | branches: [ master ]
11 |
12 | jobs:
13 | build:
14 |
15 | runs-on: ubuntu-latest
16 |
17 | strategy:
18 | matrix:
19 | node-version: [10.x, 12.x, 14.x]
20 |
21 | steps:
22 | - uses: actions/checkout@v2
23 | - name: Use Node.js ${{ matrix.node-version }}
24 | uses: actions/setup-node@v1
25 | with:
26 | node-version: ${{ matrix.node-version }}
27 | - run: npm ci
28 | - run: npm run build --if-present
29 | - run: npm test
30 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.swp
2 | node_modules
3 | coverage
4 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) [2020] [BlockCypher, Inc.]
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | node-client
4 | ===========
5 |
6 | Node.js SDK for the BlockCypher Web services. See [https://www.blockcypher.com/dev/bitcoin/](https://www.blockcypher.com/dev/bitcoin/) for detailed documentation.
7 |
8 | To install, just use npm:
9 |
10 | ```bash
11 | npm install blockcypher
12 | ```
13 |
14 | Examples
15 | --------
16 |
17 | ```javascript
18 | bcypher = require('blockcypher');
19 |
20 | var bcapi = new bcypher('btc','main',process.env.TOKEN);
21 |
22 | function printResponse(err, data) {
23 | if (err !== null) {
24 | console.log(err);
25 | } else {
26 | console.log(data);
27 | }
28 | }
29 |
30 | //get chain info
31 | bcapi.getChain(printResponse);
32 | //get block height without any optional URL params
33 | bcapi.getBlock(300000, printResponse);
34 | //get block height with an optional "txstart" param, as outlined in docs here: http://dev.blockcypher.com/
35 | bcapi.getBlock(300000, {txstart:2}, printResponse);
36 |
37 | //let's try a post request, like making a new webhook
38 | var webhook = {
39 | event: "unconfirmed-tx",
40 | address: "15qx9ug952GWGTNn7Uiv6vode4RcGrRemh",
41 | url: "https://my.domain.com/callbacks/new-tx"
42 | };
43 | bcapi.createHook(webhook, printResponse);
44 |
45 | //Now let's list all of our webhooks
46 | bcapi.listHooks(printResponse);
47 | ```
48 |
--------------------------------------------------------------------------------
/lib/bcypher.js:
--------------------------------------------------------------------------------
1 | var request = require('superagent');
2 |
3 | const URL_ROOT = 'https://api.blockcypher.com/v1/';
4 |
5 | /**
6 | * BlockCypher API Client.
7 | * @constructor
8 | * @param {string} coin The coin for which you're using the BlockCypher API. Can be 'btc', 'ltc', 'doge', or 'bcy'.
9 | * @param {string} chain The chain for which you're using the BlockCypher API. Can be 'main', 'test', or 'test3'.
10 | * @param {string} token Your BlockCypher API Token.
11 | */
12 | var Blockcy = function (coin, chain, token) {
13 | this.coin = coin;
14 | this.chain = chain;
15 | this.token = token;
16 | };
17 |
18 | module.exports = Blockcy;
19 |
20 | /**
21 | * Helper for GET calls
22 | *
23 | * @private
24 | * @param {string} url Endpoint after URL_ROOT.
25 | * @param {Object} params Additional URL parameters.
26 | * @callback cb
27 | * @memberof Blockcy
28 | * @method get
29 | */
30 | Blockcy.prototype._get = function (url, params, cb) {
31 | var urlr = URL_ROOT + this.coin + '/' + this.chain + url;
32 | params = Object.assign({}, params, { token: this.token });
33 | request
34 | .get(urlr)
35 | .set('Accept', 'application/json')
36 | .query(params)
37 | .end(function (error, response) {
38 | if (error || response.statusCode !== 200) {
39 | cb(error || {});
40 | } else {
41 | cb(null, response.body);
42 | }
43 | });
44 | };
45 |
46 | /**
47 | * Helper for POST calls
48 | *
49 | * @private
50 | * @param {string} url Endpoint after URL_ROOT.
51 | * @param {Object} params Optional additional URL parameters.
52 | * @param {Object} data Optional data to post.
53 | * @callback cb
54 | * @memberof Blockcy
55 | * @method post
56 | */
57 | Blockcy.prototype._post = function (url, params, data, cb) {
58 | var urlr = URL_ROOT + this.coin + '/' + this.chain + url;
59 | params = Object.assign({}, params, { token: this.token });
60 | request
61 | .post(urlr)
62 | .set('Content-Type', 'application/json')
63 | .query(params)
64 | .send(data)
65 | .end(function (error, response) {
66 | if (error || (response.statusCode !== 200 && response.statusCode !== 201)) {
67 | cb(error || {});
68 | } else {
69 | cb(null, response.body);
70 | }
71 | });
72 | };
73 |
74 | /**
75 | * Helper for DELETE calls
76 | *
77 | * @private
78 | * @param {string} url Endpoint after URL_ROOT.
79 | * @param {Object} params Additional URL parameters.
80 | * @callback cb
81 | * @memberof Blockcy
82 | * @method get
83 | */
84 | Blockcy.prototype._del = function (url, params, cb) {
85 | var urlr = URL_ROOT + this.coin + '/' + this.chain + url;
86 | params = Object.assign({}, params, { token: this.token });
87 | request.del({
88 | url: urlr,
89 | strictSSL: true,
90 | json: true,
91 | qs: params
92 | }, function (error, response, body) {
93 | if (error || response.statusCode !== 204) {
94 | cb(error, body || {});
95 | } else {
96 | cb(null, body);
97 | }
98 | });
99 | };
100 |
101 | /**
102 | * Get Chain
103 | * Get info about the blockchain you're querying.
104 | * @callback cb
105 | * @memberof Blockcy
106 | * @method getChain
107 | */
108 | Blockcy.prototype.getChain = function (cb) {
109 | this._get('/', {}, function (error, body) {
110 | cb(error, body);
111 | });
112 | };
113 |
114 | /**
115 | * Get Block
116 | * Get info about a block you're querying under your object's coin/chain, with additional parameters. Can use either block height or hash.
117 | * @param {(string|number)} hh Hash or height of the block you're querying.
118 | * @param {Object} [params] Optional URL parameters.
119 | * @callback cb
120 | * @memberof Blockcy
121 | * @method getBlock
122 | */
123 | Blockcy.prototype.getBlock = function (hh, params, cb) {
124 | if (typeof params === 'function') {
125 | cb = params;
126 | params = {};
127 | }
128 | this._get('/blocks/' + hh, params, function (error, body) {
129 | cb(error, body);
130 | });
131 | };
132 |
133 | /**
134 | * Get Addr Bal
135 | * Get balance information about an address.
136 | * @param {(string|number)} addr Address you're querying.
137 | * @param {Object} [params] Optional URL parameters.
138 | * @callback cb
139 | * @memberof Blockcy
140 | * @method getAddrBal
141 | */
142 | Blockcy.prototype.getAddrBal = function (addr, params, cb) {
143 | if (typeof params === 'function') {
144 | cb = params;
145 | params = {};
146 | }
147 | this._get('/addrs/' + addr + '/balance', params, function (error, body) {
148 | cb(error, body);
149 | });
150 | };
151 |
152 | /**
153 | * Get Addr
154 | * Get information about an address, including concise transaction references.
155 | * @param {(string|number)} addr Address you're querying.
156 | * @param {Object} [params] Optional URL parameters.
157 | * @callback cb
158 | * @memberof Blockcy
159 | * @method getAddr
160 | */
161 | Blockcy.prototype.getAddr = function (addr, params, cb) {
162 | if (typeof params === 'function') {
163 | cb = params;
164 | params = {};
165 | }
166 | this._get('/addrs/' + addr, params, function (error, body) {
167 | cb(error, body);
168 | });
169 | };
170 |
171 | /**
172 | * Get Addr Full
173 | * Get information about an address, including full transactions.
174 | * @param {(string|number)} addr Address you're querying.
175 | * @param {Object} [params] Optional URL parameters.
176 | * @callback cb
177 | * @memberof Blockcy
178 | * @method getAddrFull
179 | */
180 | Blockcy.prototype.getAddrFull = function (addr, params, cb) {
181 | if (typeof params === 'function') {
182 | cb = params;
183 | params = {};
184 | }
185 | this._get('/addrs/' + addr + '/full', params, function (error, body) {
186 | cb(error, body);
187 | });
188 | };
189 |
190 | /**
191 | * Gen Addr
192 | * Generates a new address and associate private/public keys.
193 | * @param {Object} data Optional JSON data, which could be used for generating multisig addresses, for exampl.JSON data, which could be used for generating multisig addresses, for example.
194 | * @param {Array[Strings]} data.pubKeys Optional pubKeys for multi sig address
195 | * @param {String} data.script_type Optional script type for multi sig address
196 | * @callback cb
197 | * @memberof Blockcy
198 | * @method genAddr
199 | */
200 | Blockcy.prototype.genAddr = function (data, cb) { //TODO Allow function signature genAddr(cb) as well
201 | this._post('/addrs', {}, data, function (error, body) {
202 | cb(error, body);
203 | });
204 | };
205 |
206 | /**
207 | * Faucet
208 | * Funds an address. Must be used within a test blockchain (bcy-test or btc-test3).
209 | * @param {string} addr Address to be funded.
210 | * @param {number} value Amount to fund.
211 | * @callback cb
212 | * @memberof Blockcy
213 | * @method faucet
214 | */
215 | Blockcy.prototype.faucet = function (addr, value, cb) { //TODO set default value if value is undefined/null. Maybe allow faucet(addr, cb).
216 | this._post('/faucet', {}, { address: addr, amount: value }, function (error, body) {
217 | cb(error, body);
218 | });
219 | };
220 |
221 | /**
222 | * Create Wallet
223 | * Creates a new wallet.
224 | * @param {Object} data JSON Data used to create wallet.
225 | * @param {String} data.name Name of wallet
226 | * @param {Array[String]} data.addresses Array of addresses
227 | * @callback cb
228 | * @memberof Blockcy
229 | * @method createWallet
230 | */
231 | Blockcy.prototype.createWallet = function (data, cb) { //TODO check if they have name and address before making request
232 | this._post('/wallets', {}, data, function (error, body) {
233 | cb(error, body);
234 | });
235 | };
236 |
237 | /**
238 | * Create HD Wallet
239 | * Creates a new HD wallet.
240 | * @param {Object} data JSON Data used to create HD wallet.
241 | * @param {String} data.name Name of wallet
242 | * @param {String} data.extended_public_key extended public key
243 | * @param {Array[int]} data.subchain_indexes subchain indexes
244 | * @callback cb
245 | * @memberof Blockcy
246 | * @method createHDWallet
247 | */
248 | Blockcy.prototype.createHDWallet = function (data, cb) { //TODO error validation on name and extended_public_key
249 | this._post('/wallets/hd', {}, data, function (error, body) {
250 | cb(error, body);
251 | });
252 | };
253 |
254 | /**
255 | * List Wallets
256 | * List wallets under token.
257 | * @callback cb
258 | * @memberof Blockcy
259 | * @method listWallets
260 | */
261 | Blockcy.prototype.listWallets = function (cb) {
262 | this._get('/wallets', {}, function (error, body) {
263 | cb(error, body);
264 | });
265 | };
266 |
267 | /**
268 | * List HD Wallets
269 | * List HD wallets under token.
270 | * @callback cb
271 | * @memberof Blockcy
272 | * @method listHDWallets
273 | */
274 | Blockcy.prototype.listHDWallets = function (cb) {
275 | this._get('/wallets/hd', {}, function (error, body) {
276 | cb(error, body);
277 | });
278 | };
279 |
280 | /**
281 | * Get Wallet
282 | * Get named wallet.
283 | * @callback cb
284 | * @param {string} name Name of the wallet you're querying.
285 | * @memberof Blockcy
286 | * @method getWallet
287 | */
288 | Blockcy.prototype.getWallet = function (name, cb) {
289 | this._get('/wallets/' + name, {}, function (error, body) {
290 | cb(error, body);
291 | });
292 | };
293 |
294 | /**
295 | * Get HD Wallet
296 | * Get named HD wallet.
297 | * @callback cb
298 | * @param {string} name Name of the HD wallet you're querying.
299 | * @memberof Blockcy
300 | * @method getHDWallet
301 | */
302 | Blockcy.prototype.getHDWallet = function (name, cb) {
303 | this._get('/wallets/hd/' + name, {}, function (error, body) {
304 | cb(error, body);
305 | });
306 | };
307 |
308 | /**
309 | * Add Addresses to Wallet
310 | * Add array of addresses to named wallet.
311 | * @callback cb
312 | * @param {string} name Name of the wallet you're querying.
313 | * @param {string[]} addrs Array of addresses you're adding.
314 | * @memberof Blockcy
315 | * @method addAddrWallet
316 | */
317 | Blockcy.prototype.addAddrWallet = function (name, addrs, cb) {
318 | this._post('/wallets/' + name + '/addresses', {}, { addresses: addrs }, function (error, body) {
319 | cb(error, body);
320 | });
321 | };
322 |
323 | /**
324 | * Get Addresses from Wallet
325 | * Get array of addresses from named wallet.
326 | * @callback cb
327 | * @param {string} name Name of the wallet you're querying.
328 | * @memberof Blockcy
329 | * @method getAddrsWallet
330 | */
331 | Blockcy.prototype.getAddrsWallet = function (name, cb) {
332 | this._get('/wallets/' + name + '/addresses', {}, function (error, body) {
333 | cb(error, body);
334 | });
335 | };
336 |
337 | /**
338 | * Get Addresses from HD Wallet
339 | * Get array of addresses from named HD wallet.
340 | * @callback cb
341 | * @param {string} name Name of the HD wallet you're querying.
342 | * @param {Object} [params] Optional URL parameters.
343 | * @memberof Blockcy
344 | * @method getAddrsHDWallet
345 | */
346 | Blockcy.prototype.getAddrsHDWallet = function (name, params, cb) {
347 | if (typeof params === 'function') {
348 | cb = params;
349 | params = {};
350 | }
351 | this._get('/wallets/hd/' + name + '/addresses', params, function (error, body) {
352 | cb(error, body);
353 | });
354 | };
355 |
356 | /**
357 | * Delete Addresses from Wallet
358 | * Delete addresses from named wallet.
359 | * @callback cb
360 | * @param {string} name Name of the wallet you're querying.
361 | * @param {string[]} addrs Array of addresses you're deleting.
362 | * @memberof Blockcy
363 | * @method delAddrsWallet
364 | */
365 | Blockcy.prototype.delAddrsWallet = function (name, addrs, cb) {
366 | this._del('/wallets/' + name + '/addresses', { address: addrs.join([';']) }, function (error, body) {
367 | cb(error, body);
368 | });
369 | };
370 |
371 | /**
372 | * Generate Address in Wallet
373 | * Add a generated address to named wallet.
374 | * @callback cb
375 | * @param {string} name Name of the wallet you're querying.
376 | * @memberof Blockcy
377 | * @method genAddrWallet
378 | */
379 | Blockcy.prototype.genAddrWallet = function (name, cb) {
380 | this._post('/wallets/' + name + '/addresses/generate', {}, {}, function (error, body) {
381 | cb(error, body);
382 | });
383 | };
384 |
385 | /**
386 | * Derive Address in Wallet
387 | * Derive an address in named HD wallet.
388 | * @callback cb
389 | * @param {string} name Name of the wallet you're querying.
390 | * @param {Object} [params] Optional URL parameters.
391 | * @memberof Blockcy
392 | * @method deriveAddrHDWallet
393 | */
394 | Blockcy.prototype.deriveAddrHDWallet = function (name, params, cb) {
395 | if (typeof params === 'function') {
396 | cb = params;
397 | params = {};
398 | }
399 | this._post('/wallets/hd/' + name + '/addresses/derive', params, {}, function (error, body) {
400 | cb(error, body);
401 | });
402 | };
403 |
404 | /**
405 | * Delete Wallet
406 | * Deletes named wallet.
407 | * @callback cb
408 | * @param {string} name Name of the wallet you're querying.
409 | * @memberof Blockcy
410 | * @method delWallet
411 | */
412 | Blockcy.prototype.delWallet = function (name, cb) {
413 | this._del('/wallets/' + name, {}, function (error, body) {
414 | cb(error, body);
415 | });
416 | };
417 |
418 | /**
419 | * Delete HD Wallet
420 | * Deletes named HD wallet.
421 | * @callback cb
422 | * @param {string} name Name of the HD wallet you're querying.
423 | * @memberof Blockcy
424 | * @method delHDWallet
425 | */
426 | Blockcy.prototype.delHDWallet = function (name, cb) {
427 | this._del('/wallets/hd/' + name, {}, function (error, body) {
428 | cb(error, body);
429 | });
430 | };
431 |
432 | /**
433 | * Get Transaction
434 | * Get transaction by hash.
435 | * @callback cb
436 | * @param {string} hash Hash of the transaction.
437 | * @param {Object} params Optional URL parameters.
438 | * @memberof Blockcy
439 | * @method getTX
440 | */
441 | Blockcy.prototype.getTX = function (hash, params, cb) { //TODO allow params to be optional getTX(hash, cb) should work
442 | this._get('/txs/' + hash, params, function (error, body) {
443 | cb(error, body);
444 | });
445 | };
446 |
447 | /**
448 | * Get Unconfirmed Transactions
449 | * Get currently unconfirmed transactions.
450 | * @callback cb
451 | * @memberof Blockcy
452 | * @method getUnTXs
453 | */
454 | Blockcy.prototype.getUnTXs = function (cb) {
455 | this._get('/txs', {}, function (error, body) {
456 | cb(error, body);
457 | });
458 | };
459 |
460 | /**
461 | * New Transaction
462 | * Creates a new transaction skeleton, which returns the transaction along with data that needs to be signed. You can see more information on how this process works here: http://dev.blockcypher.com/?javascript#creating-transactions
463 | * @callback cb
464 | * @param {Object} tx Transaction base you're using to build a TX. https://www.blockcypher.com/dev/bitcoin/#tx
465 | * @memberof Blockcy
466 | * @method newTX
467 | */
468 | Blockcy.prototype.newTX = function (tx, cb) {
469 | this._post('/txs/new', {}, tx, function (error, body) {
470 | cb(error, body);
471 | });
472 | };
473 |
474 | /**
475 | * Send Transaction
476 | * Sends a signed transaction skeleton, which returns the completed transaction. You can read more information on how this process works here: http://dev.blockcypher.com/?javascript#creating-transactions
477 | * @callback cb
478 | * @param {Object} txskel Signed transaction skeleton you're sending. https://www.blockcypher.com/dev/bitcoin/#txskeleton
479 | * @memberof Blockcy
480 | * @method sendTX
481 | */
482 | Blockcy.prototype.sendTX = function (txskel, cb) {
483 | this._post('/txs/send', {}, txskel, function (error, body) {
484 | cb(error, body);
485 | });
486 | };
487 |
488 | /**
489 | * Push Transaction
490 | * Pushes a raw, hex-serialized transaction.
491 | * @callback cb
492 | * @param {string} hex Hex-encoded transaction.
493 | * @memberof Blockcy
494 | * @method pushTX
495 | */
496 | Blockcy.prototype.pushTX = function (hex, cb) {
497 | this._post('/txs/push', {}, { tx: hex }, function (error, body) {
498 | cb(error, body);
499 | });
500 | };
501 |
502 | /**
503 | * Decode Transaction
504 | * Decodes (but doesn't send!) a hex-serialized raw transaction. Useful for debugging issues with pushTX.
505 | * @callback cb
506 | * @param {string} hex Hex-encoded transaction.
507 | * @memberof Blockcy
508 | * @method pushTX
509 | */
510 | Blockcy.prototype.decodeTX = function (hex, cb) {
511 | this._post('/txs/decode', {}, { tx: hex }, function (error, body) {
512 | cb(error, body);
513 | });
514 | };
515 |
516 | /**
517 | * Embed Transaction
518 | * Embeds data within a given blockchain.
519 | * @callback cb
520 | * @param {string} hex Hex-encoded data to embed.
521 | * @memberof Blockcy
522 | * @method pushTX
523 | */
524 | Blockcy.prototype.embedData = function (hex, cb) {
525 | this._post('/txs/data', {}, { data: hex }, function (error, body) {
526 | cb(error, body);
527 | });
528 | };
529 |
530 | /**
531 | * Send Micro Transaction
532 | * Sends a transaction using private (or public) keys via the microtransaction API, as described here: http://dev.blockcypher.com/?javascript#microtransaction-endpoint
533 | * @callback cb
534 | * @param {Object} micro Microtransaction object.
535 | * @memberof Blockcy
536 | * @method microTX
537 | */
538 | Blockcy.prototype.microTX = function (micro, cb) {
539 | this._post('/txs/micro', {}, micro, function (error, body) {
540 | cb(error, body);
541 | });
542 | };
543 |
544 | /**
545 | * Get Transaction Confidence
546 | * Get transaction confidence by hash.
547 | * @callback cb
548 | * @param {string} hash Hash of the transaction.
549 | * @memberof Blockcy
550 | * @method getTXConf
551 | */
552 | Blockcy.prototype.getTXConf = function (hash, cb) {
553 | this._get('/txs/' + hash + '/confidence', {}, function (error, body) {
554 | cb(error, body);
555 | });
556 | };
557 |
558 | /**
559 | * Create Payment Forward
560 | * Creates a new payment forward.
561 | * @param {Object} data JSON Data used to create payment forward.
562 | * @param {String} data.destination Destination address
563 | * @param {String} data.callback_url callback url
564 | * @callback cb
565 | * @memberof Blockcy
566 | * @method createPayFwd
567 | */
568 | Blockcy.prototype.createPayFwd = function (data, cb) {
569 | this._post('/payments', {}, data, function (error, body) {
570 | cb(error, body);
571 | });
572 | };
573 |
574 | /**
575 | * List Payment Forwards
576 | * Lists current payments associated with this blockchain and token.
577 | * @callback cb
578 | * @memberof Blockcy
579 | * @method listPayFwds
580 | */
581 | Blockcy.prototype.listPayFwds = function (cb) {
582 | this._get('/payments', {}, function (error, body) {
583 | cb(error, body);
584 | });
585 | };
586 |
587 | /**
588 | * Delete Payment Forward
589 | * Deletes payment forward by id.
590 | * @callback cb
591 | * @param {string} id ID of the payment forward you're deleting.
592 | * @memberof Blockcy
593 | * @method delPayFwd
594 | */
595 | Blockcy.prototype.delPayFwd = function (id, cb) {
596 | this._del('/payments/' + id, {}, function (error, body) {
597 | cb(error, body);
598 | });
599 | };
600 |
601 | /**
602 | * Create WebHook
603 | * Creates a new webhook.
604 | * @param {Object} data JSON Data used to create webhook.
605 | * @param {String} data.event Event name
606 | * @param {String} data.address address
607 | * @param {String} data.url url
608 | * @callback cb
609 | * @memberof Blockcy
610 | * @method createHook
611 | */
612 | Blockcy.prototype.createHook = function (data, cb) {
613 | this._post('/hooks', {}, data, function (error, body) {
614 | cb(error, body);
615 | });
616 | };
617 |
618 | /**
619 | * List WebHooks
620 | * Lists current webhooks associated with this blockchain and token.
621 | * @callback cb
622 | * @memberof Blockcy
623 | * @method listHooks
624 | */
625 | Blockcy.prototype.listHooks = function (cb) {
626 | this._get('/hooks', {}, function (error, body) {
627 | cb(error, body);
628 | });
629 | };
630 |
631 | /**
632 | * Get WebHook
633 | * Get information about a WebHook based on its ID.
634 | * @param {string} id ID of the WebHook you're querying.
635 | * @callback cb
636 | * @memberof Blockcy
637 | * @method getHook
638 | */
639 | Blockcy.prototype.getHook = function (id, cb) {
640 | this._get('/hooks/' + id, {}, function (error, body) {
641 | cb(error, body);
642 | });
643 | };
644 |
645 | /**
646 | * Delete WebHook
647 | * Deletes WebHook by its id.
648 | * @callback cb
649 | * @param {string} id ID of the WebHook you're deleting.
650 | * @memberof Blockcy
651 | * @method delPayFwd
652 | */
653 | Blockcy.prototype.delHook = function (id, cb) {
654 | this._del('/hooks/' + id, {}, function (error, body) {
655 | cb(error, body);
656 | });
657 | };
658 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "blockcypher",
3 | "version": "0.3.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@sinonjs/commons": {
8 | "version": "1.7.2",
9 | "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.2.tgz",
10 | "integrity": "sha512-+DUO6pnp3udV/v2VfUWgaY5BIE1IfT7lLfeDzPVeMT1XKkaAp9LgSI9x5RtrFQoZ9Oi0PgXQQHPaoKu7dCjVxw==",
11 | "dev": true,
12 | "requires": {
13 | "type-detect": "4.0.8"
14 | }
15 | },
16 | "@sinonjs/fake-timers": {
17 | "version": "6.0.1",
18 | "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
19 | "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
20 | "dev": true,
21 | "requires": {
22 | "@sinonjs/commons": "^1.7.0"
23 | }
24 | },
25 | "@sinonjs/formatio": {
26 | "version": "5.0.1",
27 | "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-5.0.1.tgz",
28 | "integrity": "sha512-KaiQ5pBf1MpS09MuA0kp6KBQt2JUOQycqVG1NZXvzeaXe5LGFqAKueIS0bw4w0P9r7KuBSVdUk5QjXsUdu2CxQ==",
29 | "dev": true,
30 | "requires": {
31 | "@sinonjs/commons": "^1",
32 | "@sinonjs/samsam": "^5.0.2"
33 | }
34 | },
35 | "@sinonjs/samsam": {
36 | "version": "5.0.3",
37 | "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.0.3.tgz",
38 | "integrity": "sha512-QucHkc2uMJ0pFGjJUDP3F9dq5dx8QIaqISl9QgwLOh6P9yv877uONPGXh/OH/0zmM3tW1JjuJltAZV2l7zU+uQ==",
39 | "dev": true,
40 | "requires": {
41 | "@sinonjs/commons": "^1.6.0",
42 | "lodash.get": "^4.4.2",
43 | "type-detect": "^4.0.8"
44 | }
45 | },
46 | "@sinonjs/text-encoding": {
47 | "version": "0.7.1",
48 | "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
49 | "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
50 | "dev": true
51 | },
52 | "abbrev": {
53 | "version": "1.0.9",
54 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
55 | "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
56 | "dev": true
57 | },
58 | "amdefine": {
59 | "version": "1.0.1",
60 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
61 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
62 | "dev": true,
63 | "optional": true
64 | },
65 | "ansi-colors": {
66 | "version": "3.2.3",
67 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
68 | "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
69 | "dev": true
70 | },
71 | "ansi-regex": {
72 | "version": "3.0.0",
73 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
74 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
75 | "dev": true
76 | },
77 | "ansi-styles": {
78 | "version": "3.2.1",
79 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
80 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
81 | "dev": true,
82 | "requires": {
83 | "color-convert": "^1.9.0"
84 | }
85 | },
86 | "anymatch": {
87 | "version": "3.1.1",
88 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
89 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
90 | "dev": true,
91 | "requires": {
92 | "normalize-path": "^3.0.0",
93 | "picomatch": "^2.0.4"
94 | }
95 | },
96 | "argparse": {
97 | "version": "1.0.10",
98 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
99 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
100 | "dev": true,
101 | "requires": {
102 | "sprintf-js": "~1.0.2"
103 | }
104 | },
105 | "assertion-error": {
106 | "version": "1.1.0",
107 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
108 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
109 | "dev": true
110 | },
111 | "async": {
112 | "version": "1.5.2",
113 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
114 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
115 | "dev": true
116 | },
117 | "asynckit": {
118 | "version": "0.4.0",
119 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
120 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
121 | },
122 | "balanced-match": {
123 | "version": "1.0.0",
124 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
125 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
126 | "dev": true
127 | },
128 | "binary-extensions": {
129 | "version": "2.0.0",
130 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
131 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
132 | "dev": true
133 | },
134 | "brace-expansion": {
135 | "version": "1.1.11",
136 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
137 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
138 | "dev": true,
139 | "requires": {
140 | "balanced-match": "^1.0.0",
141 | "concat-map": "0.0.1"
142 | }
143 | },
144 | "braces": {
145 | "version": "3.0.2",
146 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
147 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
148 | "dev": true,
149 | "requires": {
150 | "fill-range": "^7.0.1"
151 | }
152 | },
153 | "browser-stdout": {
154 | "version": "1.3.1",
155 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
156 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
157 | "dev": true
158 | },
159 | "camelcase": {
160 | "version": "5.3.1",
161 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
162 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
163 | "dev": true
164 | },
165 | "chai": {
166 | "version": "4.2.0",
167 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
168 | "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
169 | "dev": true,
170 | "requires": {
171 | "assertion-error": "^1.1.0",
172 | "check-error": "^1.0.2",
173 | "deep-eql": "^3.0.1",
174 | "get-func-name": "^2.0.0",
175 | "pathval": "^1.1.0",
176 | "type-detect": "^4.0.5"
177 | }
178 | },
179 | "chalk": {
180 | "version": "2.4.2",
181 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
182 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
183 | "dev": true,
184 | "requires": {
185 | "ansi-styles": "^3.2.1",
186 | "escape-string-regexp": "^1.0.5",
187 | "supports-color": "^5.3.0"
188 | },
189 | "dependencies": {
190 | "has-flag": {
191 | "version": "3.0.0",
192 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
193 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
194 | "dev": true
195 | },
196 | "supports-color": {
197 | "version": "5.5.0",
198 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
199 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
200 | "dev": true,
201 | "requires": {
202 | "has-flag": "^3.0.0"
203 | }
204 | }
205 | }
206 | },
207 | "check-error": {
208 | "version": "1.0.2",
209 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
210 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
211 | "dev": true
212 | },
213 | "chokidar": {
214 | "version": "3.3.0",
215 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz",
216 | "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==",
217 | "dev": true,
218 | "requires": {
219 | "anymatch": "~3.1.1",
220 | "braces": "~3.0.2",
221 | "fsevents": "~2.1.1",
222 | "glob-parent": "~5.1.0",
223 | "is-binary-path": "~2.1.0",
224 | "is-glob": "~4.0.1",
225 | "normalize-path": "~3.0.0",
226 | "readdirp": "~3.2.0"
227 | }
228 | },
229 | "cliui": {
230 | "version": "5.0.0",
231 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
232 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
233 | "dev": true,
234 | "requires": {
235 | "string-width": "^3.1.0",
236 | "strip-ansi": "^5.2.0",
237 | "wrap-ansi": "^5.1.0"
238 | },
239 | "dependencies": {
240 | "ansi-regex": {
241 | "version": "4.1.0",
242 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
243 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
244 | "dev": true
245 | },
246 | "string-width": {
247 | "version": "3.1.0",
248 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
249 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
250 | "dev": true,
251 | "requires": {
252 | "emoji-regex": "^7.0.1",
253 | "is-fullwidth-code-point": "^2.0.0",
254 | "strip-ansi": "^5.1.0"
255 | }
256 | },
257 | "strip-ansi": {
258 | "version": "5.2.0",
259 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
260 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
261 | "dev": true,
262 | "requires": {
263 | "ansi-regex": "^4.1.0"
264 | }
265 | }
266 | }
267 | },
268 | "color-convert": {
269 | "version": "1.9.3",
270 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
271 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
272 | "dev": true,
273 | "requires": {
274 | "color-name": "1.1.3"
275 | }
276 | },
277 | "color-name": {
278 | "version": "1.1.3",
279 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
280 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
281 | "dev": true
282 | },
283 | "combined-stream": {
284 | "version": "1.0.8",
285 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
286 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
287 | "requires": {
288 | "delayed-stream": "~1.0.0"
289 | }
290 | },
291 | "commander": {
292 | "version": "2.20.3",
293 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
294 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
295 | "dev": true,
296 | "optional": true
297 | },
298 | "component-emitter": {
299 | "version": "1.3.0",
300 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
301 | "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
302 | },
303 | "concat-map": {
304 | "version": "0.0.1",
305 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
306 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
307 | "dev": true
308 | },
309 | "cookiejar": {
310 | "version": "2.1.2",
311 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz",
312 | "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA=="
313 | },
314 | "debug": {
315 | "version": "3.2.6",
316 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
317 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
318 | "dev": true,
319 | "requires": {
320 | "ms": "^2.1.1"
321 | }
322 | },
323 | "decamelize": {
324 | "version": "1.2.0",
325 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
326 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
327 | "dev": true
328 | },
329 | "deep-eql": {
330 | "version": "3.0.1",
331 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
332 | "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
333 | "dev": true,
334 | "requires": {
335 | "type-detect": "^4.0.0"
336 | }
337 | },
338 | "deep-is": {
339 | "version": "0.1.3",
340 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
341 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
342 | "dev": true
343 | },
344 | "define-properties": {
345 | "version": "1.1.3",
346 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
347 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
348 | "dev": true,
349 | "requires": {
350 | "object-keys": "^1.0.12"
351 | }
352 | },
353 | "delayed-stream": {
354 | "version": "1.0.0",
355 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
356 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
357 | },
358 | "diff": {
359 | "version": "3.5.0",
360 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
361 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
362 | "dev": true
363 | },
364 | "emoji-regex": {
365 | "version": "7.0.3",
366 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
367 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
368 | "dev": true
369 | },
370 | "es-abstract": {
371 | "version": "1.17.5",
372 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz",
373 | "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==",
374 | "dev": true,
375 | "requires": {
376 | "es-to-primitive": "^1.2.1",
377 | "function-bind": "^1.1.1",
378 | "has": "^1.0.3",
379 | "has-symbols": "^1.0.1",
380 | "is-callable": "^1.1.5",
381 | "is-regex": "^1.0.5",
382 | "object-inspect": "^1.7.0",
383 | "object-keys": "^1.1.1",
384 | "object.assign": "^4.1.0",
385 | "string.prototype.trimleft": "^2.1.1",
386 | "string.prototype.trimright": "^2.1.1"
387 | }
388 | },
389 | "es-to-primitive": {
390 | "version": "1.2.1",
391 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
392 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
393 | "dev": true,
394 | "requires": {
395 | "is-callable": "^1.1.4",
396 | "is-date-object": "^1.0.1",
397 | "is-symbol": "^1.0.2"
398 | }
399 | },
400 | "escape-string-regexp": {
401 | "version": "1.0.5",
402 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
403 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
404 | "dev": true
405 | },
406 | "escodegen": {
407 | "version": "1.8.1",
408 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
409 | "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
410 | "dev": true,
411 | "requires": {
412 | "esprima": "^2.7.1",
413 | "estraverse": "^1.9.1",
414 | "esutils": "^2.0.2",
415 | "optionator": "^0.8.1",
416 | "source-map": "~0.2.0"
417 | }
418 | },
419 | "esprima": {
420 | "version": "2.7.3",
421 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
422 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
423 | "dev": true
424 | },
425 | "estraverse": {
426 | "version": "1.9.3",
427 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
428 | "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
429 | "dev": true
430 | },
431 | "esutils": {
432 | "version": "2.0.3",
433 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
434 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
435 | "dev": true
436 | },
437 | "fast-levenshtein": {
438 | "version": "2.0.6",
439 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
440 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
441 | "dev": true
442 | },
443 | "fast-safe-stringify": {
444 | "version": "2.0.7",
445 | "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
446 | "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
447 | },
448 | "fill-range": {
449 | "version": "7.0.1",
450 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
451 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
452 | "dev": true,
453 | "requires": {
454 | "to-regex-range": "^5.0.1"
455 | }
456 | },
457 | "find-up": {
458 | "version": "3.0.0",
459 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
460 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
461 | "dev": true,
462 | "requires": {
463 | "locate-path": "^3.0.0"
464 | }
465 | },
466 | "flat": {
467 | "version": "4.1.0",
468 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
469 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
470 | "dev": true,
471 | "requires": {
472 | "is-buffer": "~2.0.3"
473 | }
474 | },
475 | "formidable": {
476 | "version": "1.2.2",
477 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz",
478 | "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q=="
479 | },
480 | "fs.realpath": {
481 | "version": "1.0.0",
482 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
483 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
484 | "dev": true
485 | },
486 | "fsevents": {
487 | "version": "2.1.3",
488 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
489 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
490 | "dev": true,
491 | "optional": true
492 | },
493 | "function-bind": {
494 | "version": "1.1.1",
495 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
496 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
497 | "dev": true
498 | },
499 | "get-caller-file": {
500 | "version": "2.0.5",
501 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
502 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
503 | "dev": true
504 | },
505 | "get-func-name": {
506 | "version": "2.0.0",
507 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
508 | "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
509 | "dev": true
510 | },
511 | "glob": {
512 | "version": "5.0.15",
513 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
514 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
515 | "dev": true,
516 | "requires": {
517 | "inflight": "^1.0.4",
518 | "inherits": "2",
519 | "minimatch": "2 || 3",
520 | "once": "^1.3.0",
521 | "path-is-absolute": "^1.0.0"
522 | }
523 | },
524 | "glob-parent": {
525 | "version": "5.1.1",
526 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
527 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
528 | "dev": true,
529 | "requires": {
530 | "is-glob": "^4.0.1"
531 | }
532 | },
533 | "growl": {
534 | "version": "1.10.5",
535 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
536 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
537 | "dev": true
538 | },
539 | "handlebars": {
540 | "version": "4.7.6",
541 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz",
542 | "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==",
543 | "dev": true,
544 | "requires": {
545 | "minimist": "^1.2.5",
546 | "neo-async": "^2.6.0",
547 | "source-map": "^0.6.1",
548 | "uglify-js": "^3.1.4",
549 | "wordwrap": "^1.0.0"
550 | },
551 | "dependencies": {
552 | "source-map": {
553 | "version": "0.6.1",
554 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
555 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
556 | "dev": true
557 | }
558 | }
559 | },
560 | "has": {
561 | "version": "1.0.3",
562 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
563 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
564 | "dev": true,
565 | "requires": {
566 | "function-bind": "^1.1.1"
567 | }
568 | },
569 | "has-flag": {
570 | "version": "1.0.0",
571 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
572 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
573 | "dev": true
574 | },
575 | "has-symbols": {
576 | "version": "1.0.1",
577 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
578 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
579 | "dev": true
580 | },
581 | "he": {
582 | "version": "1.2.0",
583 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
584 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
585 | "dev": true
586 | },
587 | "inflight": {
588 | "version": "1.0.6",
589 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
590 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
591 | "dev": true,
592 | "requires": {
593 | "once": "^1.3.0",
594 | "wrappy": "1"
595 | }
596 | },
597 | "inherits": {
598 | "version": "2.0.4",
599 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
600 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
601 | },
602 | "is-binary-path": {
603 | "version": "2.1.0",
604 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
605 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
606 | "dev": true,
607 | "requires": {
608 | "binary-extensions": "^2.0.0"
609 | }
610 | },
611 | "is-buffer": {
612 | "version": "2.0.4",
613 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
614 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==",
615 | "dev": true
616 | },
617 | "is-callable": {
618 | "version": "1.1.5",
619 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
620 | "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
621 | "dev": true
622 | },
623 | "is-date-object": {
624 | "version": "1.0.2",
625 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
626 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
627 | "dev": true
628 | },
629 | "is-extglob": {
630 | "version": "2.1.1",
631 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
632 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
633 | "dev": true
634 | },
635 | "is-fullwidth-code-point": {
636 | "version": "2.0.0",
637 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
638 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
639 | "dev": true
640 | },
641 | "is-glob": {
642 | "version": "4.0.1",
643 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
644 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
645 | "dev": true,
646 | "requires": {
647 | "is-extglob": "^2.1.1"
648 | }
649 | },
650 | "is-number": {
651 | "version": "7.0.0",
652 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
653 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
654 | "dev": true
655 | },
656 | "is-regex": {
657 | "version": "1.0.5",
658 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
659 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
660 | "dev": true,
661 | "requires": {
662 | "has": "^1.0.3"
663 | }
664 | },
665 | "is-symbol": {
666 | "version": "1.0.3",
667 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
668 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
669 | "dev": true,
670 | "requires": {
671 | "has-symbols": "^1.0.1"
672 | }
673 | },
674 | "isarray": {
675 | "version": "0.0.1",
676 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
677 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
678 | "dev": true
679 | },
680 | "isexe": {
681 | "version": "2.0.0",
682 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
683 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
684 | "dev": true
685 | },
686 | "istanbul": {
687 | "version": "0.4.5",
688 | "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
689 | "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
690 | "dev": true,
691 | "requires": {
692 | "abbrev": "1.0.x",
693 | "async": "1.x",
694 | "escodegen": "1.8.x",
695 | "esprima": "2.7.x",
696 | "glob": "^5.0.15",
697 | "handlebars": "^4.0.1",
698 | "js-yaml": "3.x",
699 | "mkdirp": "0.5.x",
700 | "nopt": "3.x",
701 | "once": "1.x",
702 | "resolve": "1.1.x",
703 | "supports-color": "^3.1.0",
704 | "which": "^1.1.1",
705 | "wordwrap": "^1.0.0"
706 | }
707 | },
708 | "js-yaml": {
709 | "version": "3.13.1",
710 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
711 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
712 | "dev": true,
713 | "requires": {
714 | "argparse": "^1.0.7",
715 | "esprima": "^4.0.0"
716 | },
717 | "dependencies": {
718 | "esprima": {
719 | "version": "4.0.1",
720 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
721 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
722 | "dev": true
723 | }
724 | }
725 | },
726 | "just-extend": {
727 | "version": "4.1.0",
728 | "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.1.0.tgz",
729 | "integrity": "sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA==",
730 | "dev": true
731 | },
732 | "levn": {
733 | "version": "0.3.0",
734 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
735 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
736 | "dev": true,
737 | "requires": {
738 | "prelude-ls": "~1.1.2",
739 | "type-check": "~0.3.2"
740 | }
741 | },
742 | "locate-path": {
743 | "version": "3.0.0",
744 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
745 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
746 | "dev": true,
747 | "requires": {
748 | "p-locate": "^3.0.0",
749 | "path-exists": "^3.0.0"
750 | }
751 | },
752 | "lodash": {
753 | "version": "4.17.19",
754 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
755 | "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
756 | "dev": true
757 | },
758 | "lodash.get": {
759 | "version": "4.4.2",
760 | "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
761 | "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
762 | "dev": true
763 | },
764 | "log-symbols": {
765 | "version": "3.0.0",
766 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
767 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
768 | "dev": true,
769 | "requires": {
770 | "chalk": "^2.4.2"
771 | }
772 | },
773 | "methods": {
774 | "version": "1.1.2",
775 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
776 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
777 | },
778 | "mime": {
779 | "version": "2.4.5",
780 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz",
781 | "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w=="
782 | },
783 | "mime-db": {
784 | "version": "1.44.0",
785 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
786 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
787 | },
788 | "mime-types": {
789 | "version": "2.1.27",
790 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
791 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
792 | "requires": {
793 | "mime-db": "1.44.0"
794 | }
795 | },
796 | "minimatch": {
797 | "version": "3.0.4",
798 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
799 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
800 | "dev": true,
801 | "requires": {
802 | "brace-expansion": "^1.1.7"
803 | }
804 | },
805 | "minimist": {
806 | "version": "1.2.5",
807 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
808 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
809 | "dev": true
810 | },
811 | "mkdirp": {
812 | "version": "0.5.5",
813 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
814 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
815 | "dev": true,
816 | "requires": {
817 | "minimist": "^1.2.5"
818 | }
819 | },
820 | "mocha": {
821 | "version": "7.1.2",
822 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.2.tgz",
823 | "integrity": "sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA==",
824 | "dev": true,
825 | "requires": {
826 | "ansi-colors": "3.2.3",
827 | "browser-stdout": "1.3.1",
828 | "chokidar": "3.3.0",
829 | "debug": "3.2.6",
830 | "diff": "3.5.0",
831 | "escape-string-regexp": "1.0.5",
832 | "find-up": "3.0.0",
833 | "glob": "7.1.3",
834 | "growl": "1.10.5",
835 | "he": "1.2.0",
836 | "js-yaml": "3.13.1",
837 | "log-symbols": "3.0.0",
838 | "minimatch": "3.0.4",
839 | "mkdirp": "0.5.5",
840 | "ms": "2.1.1",
841 | "node-environment-flags": "1.0.6",
842 | "object.assign": "4.1.0",
843 | "strip-json-comments": "2.0.1",
844 | "supports-color": "6.0.0",
845 | "which": "1.3.1",
846 | "wide-align": "1.1.3",
847 | "yargs": "13.3.2",
848 | "yargs-parser": "13.1.2",
849 | "yargs-unparser": "1.6.0"
850 | },
851 | "dependencies": {
852 | "glob": {
853 | "version": "7.1.3",
854 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
855 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
856 | "dev": true,
857 | "requires": {
858 | "fs.realpath": "^1.0.0",
859 | "inflight": "^1.0.4",
860 | "inherits": "2",
861 | "minimatch": "^3.0.4",
862 | "once": "^1.3.0",
863 | "path-is-absolute": "^1.0.0"
864 | }
865 | },
866 | "has-flag": {
867 | "version": "3.0.0",
868 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
869 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
870 | "dev": true
871 | },
872 | "supports-color": {
873 | "version": "6.0.0",
874 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
875 | "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
876 | "dev": true,
877 | "requires": {
878 | "has-flag": "^3.0.0"
879 | }
880 | }
881 | }
882 | },
883 | "ms": {
884 | "version": "2.1.1",
885 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
886 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
887 | },
888 | "neo-async": {
889 | "version": "2.6.1",
890 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
891 | "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
892 | "dev": true
893 | },
894 | "nise": {
895 | "version": "4.0.3",
896 | "resolved": "https://registry.npmjs.org/nise/-/nise-4.0.3.tgz",
897 | "integrity": "sha512-EGlhjm7/4KvmmE6B/UFsKh7eHykRl9VH+au8dduHLCyWUO/hr7+N+WtTvDUwc9zHuM1IaIJs/0lQ6Ag1jDkQSg==",
898 | "dev": true,
899 | "requires": {
900 | "@sinonjs/commons": "^1.7.0",
901 | "@sinonjs/fake-timers": "^6.0.0",
902 | "@sinonjs/text-encoding": "^0.7.1",
903 | "just-extend": "^4.0.2",
904 | "path-to-regexp": "^1.7.0"
905 | }
906 | },
907 | "node-environment-flags": {
908 | "version": "1.0.6",
909 | "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz",
910 | "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==",
911 | "dev": true,
912 | "requires": {
913 | "object.getownpropertydescriptors": "^2.0.3",
914 | "semver": "^5.7.0"
915 | }
916 | },
917 | "nopt": {
918 | "version": "3.0.6",
919 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
920 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
921 | "dev": true,
922 | "requires": {
923 | "abbrev": "1"
924 | }
925 | },
926 | "normalize-path": {
927 | "version": "3.0.0",
928 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
929 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
930 | "dev": true
931 | },
932 | "object-inspect": {
933 | "version": "1.7.0",
934 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
935 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
936 | "dev": true
937 | },
938 | "object-keys": {
939 | "version": "1.1.1",
940 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
941 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
942 | "dev": true
943 | },
944 | "object.assign": {
945 | "version": "4.1.0",
946 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
947 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
948 | "dev": true,
949 | "requires": {
950 | "define-properties": "^1.1.2",
951 | "function-bind": "^1.1.1",
952 | "has-symbols": "^1.0.0",
953 | "object-keys": "^1.0.11"
954 | }
955 | },
956 | "object.getownpropertydescriptors": {
957 | "version": "2.1.0",
958 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
959 | "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
960 | "dev": true,
961 | "requires": {
962 | "define-properties": "^1.1.3",
963 | "es-abstract": "^1.17.0-next.1"
964 | }
965 | },
966 | "once": {
967 | "version": "1.4.0",
968 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
969 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
970 | "dev": true,
971 | "requires": {
972 | "wrappy": "1"
973 | }
974 | },
975 | "optionator": {
976 | "version": "0.8.3",
977 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
978 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
979 | "dev": true,
980 | "requires": {
981 | "deep-is": "~0.1.3",
982 | "fast-levenshtein": "~2.0.6",
983 | "levn": "~0.3.0",
984 | "prelude-ls": "~1.1.2",
985 | "type-check": "~0.3.2",
986 | "word-wrap": "~1.2.3"
987 | }
988 | },
989 | "p-limit": {
990 | "version": "2.3.0",
991 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
992 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
993 | "dev": true,
994 | "requires": {
995 | "p-try": "^2.0.0"
996 | }
997 | },
998 | "p-locate": {
999 | "version": "3.0.0",
1000 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
1001 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
1002 | "dev": true,
1003 | "requires": {
1004 | "p-limit": "^2.0.0"
1005 | }
1006 | },
1007 | "p-try": {
1008 | "version": "2.2.0",
1009 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
1010 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
1011 | "dev": true
1012 | },
1013 | "path-exists": {
1014 | "version": "3.0.0",
1015 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
1016 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
1017 | "dev": true
1018 | },
1019 | "path-is-absolute": {
1020 | "version": "1.0.1",
1021 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1022 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1023 | "dev": true
1024 | },
1025 | "path-to-regexp": {
1026 | "version": "1.8.0",
1027 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
1028 | "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
1029 | "dev": true,
1030 | "requires": {
1031 | "isarray": "0.0.1"
1032 | }
1033 | },
1034 | "pathval": {
1035 | "version": "1.1.0",
1036 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
1037 | "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
1038 | "dev": true
1039 | },
1040 | "picomatch": {
1041 | "version": "2.2.2",
1042 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
1043 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
1044 | "dev": true
1045 | },
1046 | "prelude-ls": {
1047 | "version": "1.1.2",
1048 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
1049 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
1050 | "dev": true
1051 | },
1052 | "readable-stream": {
1053 | "version": "3.6.0",
1054 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1055 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1056 | "requires": {
1057 | "inherits": "^2.0.3",
1058 | "string_decoder": "^1.1.1",
1059 | "util-deprecate": "^1.0.1"
1060 | }
1061 | },
1062 | "readdirp": {
1063 | "version": "3.2.0",
1064 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz",
1065 | "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==",
1066 | "dev": true,
1067 | "requires": {
1068 | "picomatch": "^2.0.4"
1069 | }
1070 | },
1071 | "require-directory": {
1072 | "version": "2.1.1",
1073 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1074 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
1075 | "dev": true
1076 | },
1077 | "require-main-filename": {
1078 | "version": "2.0.0",
1079 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
1080 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
1081 | "dev": true
1082 | },
1083 | "resolve": {
1084 | "version": "1.1.7",
1085 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
1086 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
1087 | "dev": true
1088 | },
1089 | "safe-buffer": {
1090 | "version": "5.2.0",
1091 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
1092 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
1093 | },
1094 | "semver": {
1095 | "version": "5.7.1",
1096 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1097 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1098 | "dev": true
1099 | },
1100 | "set-blocking": {
1101 | "version": "2.0.0",
1102 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1103 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
1104 | "dev": true
1105 | },
1106 | "sinon": {
1107 | "version": "9.0.2",
1108 | "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.0.2.tgz",
1109 | "integrity": "sha512-0uF8Q/QHkizNUmbK3LRFqx5cpTttEVXudywY9Uwzy8bTfZUhljZ7ARzSxnRHWYWtVTeh4Cw+tTb3iU21FQVO9A==",
1110 | "dev": true,
1111 | "requires": {
1112 | "@sinonjs/commons": "^1.7.2",
1113 | "@sinonjs/fake-timers": "^6.0.1",
1114 | "@sinonjs/formatio": "^5.0.1",
1115 | "@sinonjs/samsam": "^5.0.3",
1116 | "diff": "^4.0.2",
1117 | "nise": "^4.0.1",
1118 | "supports-color": "^7.1.0"
1119 | },
1120 | "dependencies": {
1121 | "diff": {
1122 | "version": "4.0.2",
1123 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
1124 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
1125 | "dev": true
1126 | },
1127 | "has-flag": {
1128 | "version": "4.0.0",
1129 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1130 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1131 | "dev": true
1132 | },
1133 | "supports-color": {
1134 | "version": "7.1.0",
1135 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
1136 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
1137 | "dev": true,
1138 | "requires": {
1139 | "has-flag": "^4.0.0"
1140 | }
1141 | }
1142 | }
1143 | },
1144 | "sinon-test": {
1145 | "version": "3.0.0",
1146 | "resolved": "https://registry.npmjs.org/sinon-test/-/sinon-test-3.0.0.tgz",
1147 | "integrity": "sha512-k2V042JwIS6SC3M8Ih3Uo6+6mlL5FKqvvobxoWQobFkACr61WpyAMKsfqXecLL+DrDD3s9T+eYSZdVQzMH1pkA==",
1148 | "dev": true
1149 | },
1150 | "source-map": {
1151 | "version": "0.2.0",
1152 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
1153 | "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
1154 | "dev": true,
1155 | "optional": true,
1156 | "requires": {
1157 | "amdefine": ">=0.0.4"
1158 | }
1159 | },
1160 | "sprintf-js": {
1161 | "version": "1.0.3",
1162 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1163 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1164 | "dev": true
1165 | },
1166 | "string-width": {
1167 | "version": "2.1.1",
1168 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
1169 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
1170 | "dev": true,
1171 | "requires": {
1172 | "is-fullwidth-code-point": "^2.0.0",
1173 | "strip-ansi": "^4.0.0"
1174 | }
1175 | },
1176 | "string.prototype.trimend": {
1177 | "version": "1.0.1",
1178 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
1179 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
1180 | "dev": true,
1181 | "requires": {
1182 | "define-properties": "^1.1.3",
1183 | "es-abstract": "^1.17.5"
1184 | }
1185 | },
1186 | "string.prototype.trimleft": {
1187 | "version": "2.1.2",
1188 | "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz",
1189 | "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==",
1190 | "dev": true,
1191 | "requires": {
1192 | "define-properties": "^1.1.3",
1193 | "es-abstract": "^1.17.5",
1194 | "string.prototype.trimstart": "^1.0.0"
1195 | }
1196 | },
1197 | "string.prototype.trimright": {
1198 | "version": "2.1.2",
1199 | "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz",
1200 | "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==",
1201 | "dev": true,
1202 | "requires": {
1203 | "define-properties": "^1.1.3",
1204 | "es-abstract": "^1.17.5",
1205 | "string.prototype.trimend": "^1.0.0"
1206 | }
1207 | },
1208 | "string.prototype.trimstart": {
1209 | "version": "1.0.1",
1210 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
1211 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
1212 | "dev": true,
1213 | "requires": {
1214 | "define-properties": "^1.1.3",
1215 | "es-abstract": "^1.17.5"
1216 | }
1217 | },
1218 | "string_decoder": {
1219 | "version": "1.3.0",
1220 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1221 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1222 | "requires": {
1223 | "safe-buffer": "~5.2.0"
1224 | }
1225 | },
1226 | "strip-ansi": {
1227 | "version": "4.0.0",
1228 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1229 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1230 | "dev": true,
1231 | "requires": {
1232 | "ansi-regex": "^3.0.0"
1233 | }
1234 | },
1235 | "strip-json-comments": {
1236 | "version": "2.0.1",
1237 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1238 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1239 | "dev": true
1240 | },
1241 | "superagent": {
1242 | "version": "5.2.2",
1243 | "resolved": "https://registry.npmjs.org/superagent/-/superagent-5.2.2.tgz",
1244 | "integrity": "sha512-pMWBUnIllK4ZTw7p/UaobiQPwAO5w/1NRRTDpV0FTVNmECztsxKspj3ZWEordVEaqpZtmOQJJna4yTLyC/q7PQ==",
1245 | "requires": {
1246 | "component-emitter": "^1.3.0",
1247 | "cookiejar": "^2.1.2",
1248 | "debug": "^4.1.1",
1249 | "fast-safe-stringify": "^2.0.7",
1250 | "form-data": "^3.0.0",
1251 | "formidable": "^1.2.1",
1252 | "methods": "^1.1.2",
1253 | "mime": "^2.4.4",
1254 | "qs": "^6.9.1",
1255 | "readable-stream": "^3.4.0",
1256 | "semver": "^6.3.0"
1257 | },
1258 | "dependencies": {
1259 | "debug": {
1260 | "version": "4.1.1",
1261 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
1262 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
1263 | "requires": {
1264 | "ms": "^2.1.1"
1265 | }
1266 | },
1267 | "form-data": {
1268 | "version": "3.0.0",
1269 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
1270 | "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
1271 | "requires": {
1272 | "asynckit": "^0.4.0",
1273 | "combined-stream": "^1.0.8",
1274 | "mime-types": "^2.1.12"
1275 | }
1276 | },
1277 | "qs": {
1278 | "version": "6.9.4",
1279 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
1280 | "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ=="
1281 | },
1282 | "semver": {
1283 | "version": "6.3.0",
1284 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
1285 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
1286 | }
1287 | }
1288 | },
1289 | "supports-color": {
1290 | "version": "3.2.3",
1291 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
1292 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
1293 | "dev": true,
1294 | "requires": {
1295 | "has-flag": "^1.0.0"
1296 | }
1297 | },
1298 | "to-regex-range": {
1299 | "version": "5.0.1",
1300 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1301 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1302 | "dev": true,
1303 | "requires": {
1304 | "is-number": "^7.0.0"
1305 | }
1306 | },
1307 | "type-check": {
1308 | "version": "0.3.2",
1309 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
1310 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
1311 | "dev": true,
1312 | "requires": {
1313 | "prelude-ls": "~1.1.2"
1314 | }
1315 | },
1316 | "type-detect": {
1317 | "version": "4.0.8",
1318 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
1319 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
1320 | "dev": true
1321 | },
1322 | "uglify-js": {
1323 | "version": "3.9.2",
1324 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.9.2.tgz",
1325 | "integrity": "sha512-zGVwKslUAD/EeqOrD1nQaBmXIHl1Vw371we8cvS8I6mYK9rmgX5tv8AAeJdfsQ3Kk5mGax2SVV/AizxdNGhl7Q==",
1326 | "dev": true,
1327 | "optional": true,
1328 | "requires": {
1329 | "commander": "~2.20.3"
1330 | }
1331 | },
1332 | "util-deprecate": {
1333 | "version": "1.0.2",
1334 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1335 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1336 | },
1337 | "which": {
1338 | "version": "1.3.1",
1339 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1340 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1341 | "dev": true,
1342 | "requires": {
1343 | "isexe": "^2.0.0"
1344 | }
1345 | },
1346 | "which-module": {
1347 | "version": "2.0.0",
1348 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
1349 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
1350 | "dev": true
1351 | },
1352 | "wide-align": {
1353 | "version": "1.1.3",
1354 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
1355 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
1356 | "dev": true,
1357 | "requires": {
1358 | "string-width": "^1.0.2 || 2"
1359 | }
1360 | },
1361 | "word-wrap": {
1362 | "version": "1.2.3",
1363 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
1364 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
1365 | "dev": true
1366 | },
1367 | "wordwrap": {
1368 | "version": "1.0.0",
1369 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
1370 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
1371 | "dev": true
1372 | },
1373 | "wrap-ansi": {
1374 | "version": "5.1.0",
1375 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
1376 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
1377 | "dev": true,
1378 | "requires": {
1379 | "ansi-styles": "^3.2.0",
1380 | "string-width": "^3.0.0",
1381 | "strip-ansi": "^5.0.0"
1382 | },
1383 | "dependencies": {
1384 | "ansi-regex": {
1385 | "version": "4.1.0",
1386 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1387 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
1388 | "dev": true
1389 | },
1390 | "string-width": {
1391 | "version": "3.1.0",
1392 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1393 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1394 | "dev": true,
1395 | "requires": {
1396 | "emoji-regex": "^7.0.1",
1397 | "is-fullwidth-code-point": "^2.0.0",
1398 | "strip-ansi": "^5.1.0"
1399 | }
1400 | },
1401 | "strip-ansi": {
1402 | "version": "5.2.0",
1403 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1404 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1405 | "dev": true,
1406 | "requires": {
1407 | "ansi-regex": "^4.1.0"
1408 | }
1409 | }
1410 | }
1411 | },
1412 | "wrappy": {
1413 | "version": "1.0.2",
1414 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1415 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1416 | "dev": true
1417 | },
1418 | "xtend": {
1419 | "version": "4.0.2",
1420 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
1421 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
1422 | },
1423 | "y18n": {
1424 | "version": "4.0.0",
1425 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
1426 | "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
1427 | "dev": true
1428 | },
1429 | "yargs": {
1430 | "version": "13.3.2",
1431 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
1432 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
1433 | "dev": true,
1434 | "requires": {
1435 | "cliui": "^5.0.0",
1436 | "find-up": "^3.0.0",
1437 | "get-caller-file": "^2.0.1",
1438 | "require-directory": "^2.1.1",
1439 | "require-main-filename": "^2.0.0",
1440 | "set-blocking": "^2.0.0",
1441 | "string-width": "^3.0.0",
1442 | "which-module": "^2.0.0",
1443 | "y18n": "^4.0.0",
1444 | "yargs-parser": "^13.1.2"
1445 | },
1446 | "dependencies": {
1447 | "ansi-regex": {
1448 | "version": "4.1.0",
1449 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
1450 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
1451 | "dev": true
1452 | },
1453 | "string-width": {
1454 | "version": "3.1.0",
1455 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1456 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1457 | "dev": true,
1458 | "requires": {
1459 | "emoji-regex": "^7.0.1",
1460 | "is-fullwidth-code-point": "^2.0.0",
1461 | "strip-ansi": "^5.1.0"
1462 | }
1463 | },
1464 | "strip-ansi": {
1465 | "version": "5.2.0",
1466 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1467 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1468 | "dev": true,
1469 | "requires": {
1470 | "ansi-regex": "^4.1.0"
1471 | }
1472 | }
1473 | }
1474 | },
1475 | "yargs-parser": {
1476 | "version": "13.1.2",
1477 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
1478 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
1479 | "dev": true,
1480 | "requires": {
1481 | "camelcase": "^5.0.0",
1482 | "decamelize": "^1.2.0"
1483 | }
1484 | },
1485 | "yargs-unparser": {
1486 | "version": "1.6.0",
1487 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
1488 | "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
1489 | "dev": true,
1490 | "requires": {
1491 | "flat": "^4.1.0",
1492 | "lodash": "^4.17.15",
1493 | "yargs": "^13.3.0"
1494 | }
1495 | }
1496 | }
1497 | }
1498 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "blockcypher",
3 | "main": "./lib/bcypher.js",
4 | "version": "0.3.0",
5 | "description": "A REST API client for BlockCypher",
6 | "repository": "https://github.com/blockcypher/node-client",
7 | "license": "MIT",
8 | "engines": {
9 | "node": ">=4.0.0"
10 | },
11 | "dependencies": {
12 | "superagent": "^5.2.2",
13 | "xtend": "^4.0.1"
14 | },
15 | "scripts": {
16 | "test": "istanbul cover _mocha -- --reporter list --recursive ./tests/unit/"
17 | },
18 | "devDependencies": {
19 | "chai": "^4.2.0",
20 | "istanbul": "^0.4.5",
21 | "mocha": "^7.1.2",
22 | "sinon": "^9.0.2",
23 | "sinon-test": "^3.0.0"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/tests/unit/_del.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 |
11 | let BlockCypher = require('../../lib/bcypher');
12 | let chain = 'btc';
13 | let network = 'main';
14 | let token = process.env.TOKEN;
15 | let bcapi = new BlockCypher(chain, network, token);
16 |
17 |
18 | describe('Blockcypher _del Method: ', function () {
19 |
20 | it('should return success statusCode 204 and return data', test(function (done) {
21 | let del = this.spy(bcapi._del).bind(bcapi);
22 | let validReturn = { data: { key1: 'value', key2: 2 } };
23 |
24 | this.stub(request, 'del').yields(null, { statusCode: 204 }, validReturn);
25 | bcapi._del('/', {}, function (e, r) {
26 |
27 | var callArgs = request.del.getCall(0).args[0];
28 | expect(callArgs.qs).to.deep.equal({ token: token });
29 | expect(callArgs.strictSSL).to.equal(true);
30 | expect(callArgs.json).to.equal(true);
31 |
32 | expect(Object.keys(callArgs).length).to.equal(4);
33 |
34 | expect(e).to.equal(null);
35 | expect(r).to.deep.equal(validReturn);
36 | done();
37 | });
38 | }));
39 |
40 | it('should return success statusCode 200 and return data', test(function (done) {
41 | let del = this.spy(bcapi._del).bind(bcapi);
42 | let validReturn = { data: { key1: 'value', key2: 2 } };
43 |
44 | this.stub(request, 'del').yields(null, { statusCode: 200 }, validReturn);
45 | bcapi._del('/', {}, function (e, r) {
46 |
47 | var callArgs = request.del.getCall(0).args[0];
48 | expect(callArgs.qs).to.deep.equal({ token: token });
49 | expect(callArgs.strictSSL).to.equal(true);
50 | expect(callArgs.json).to.equal(true);
51 |
52 | expect(Object.keys(callArgs).length).to.equal(4);
53 |
54 | expect(e).to.equal(null);
55 | expect(r).to.deep.equal(validReturn);
56 | done();
57 | });
58 | }));
59 |
60 |
61 | it('should return error and empty data when response body is null', test(function (done) {
62 | let del = this.spy(bcapi._del).bind(bcapi);
63 | let badRequestError = "Bad Request";
64 |
65 | this.stub(request, 'del').yields(badRequestError, { statusCode: 400 });
66 | bcapi._del('/', {}, function (e, r) {
67 |
68 | var callArgs = request.del.getCall(0).args[0];
69 | expect(callArgs.qs).to.deep.equal({ token: token });
70 | expect(callArgs.strictSSL).to.equal(true);
71 | expect(callArgs.json).to.equal(true);
72 | expect(Object.keys(callArgs).length).to.equal(4);
73 |
74 | expect(e).to.equal(badRequestError);
75 | expect(r).to.deep.equal({});
76 | done();
77 | });
78 | }));
79 |
80 | it('should return error and data when response body exists', test(function (done) {
81 | let del = this.spy(bcapi._del).bind(bcapi);
82 | let badRequestError = "Bad Request";
83 | let badRequestData = { message: 'badRequeset' };
84 |
85 | this.stub(request, 'del').yields(badRequestError, { statusCode: 400 }, badRequestData);
86 | bcapi._del('/', {}, function (e, r) {
87 |
88 | var callArgs = request.del.getCall(0).args[0];
89 | expect(callArgs.qs).to.deep.equal({ token: token });
90 | expect(callArgs.strictSSL).to.equal(true);
91 | expect(callArgs.json).to.equal(true);
92 | expect(Object.keys(callArgs).length).to.equal(4);
93 |
94 | expect(e).to.equal(badRequestError);
95 | expect(r).to.deep.equal(badRequestData);
96 | done();
97 | });
98 | }));
99 |
100 | });//end of _del
101 |
--------------------------------------------------------------------------------
/tests/unit/_get.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 |
11 | let BlockCypher = require('../../lib/bcypher');
12 | let chain = 'btc';
13 | let network = 'main';
14 | let token = process.env.TOKEN;
15 | let bcapi = new BlockCypher(chain, network, token);
16 |
17 | /*
18 | describe('Blockcypher _get Method: ', function () {
19 |
20 | it('should return success and return data', test(function (done) {
21 | let get = this.spy(bcapi._get).bind(bcapi);
22 | let validReturn = { data: { key1: 'value', key2: 2 } };
23 | this.stub(request, 'get').yields(null, { statusCode: 200 }, validReturn);
24 | bcapi._get('/', {}, function (e, r) {
25 |
26 | var callArgs = request.get.getCall(0).args[0];
27 | expect(callArgs.qs).to.deep.equal({ token: token });
28 | expect(callArgs.strictSSL).to.equal(true);
29 | expect(callArgs.json).to.equal(true);
30 | expect(Object.keys(callArgs).length).to.equal(4);
31 |
32 | expect(e).to.equal(null);
33 | expect(r).to.deep.equal(validReturn);
34 | done();
35 | });
36 | }));
37 |
38 |
39 | it('should return error and empty data when response body is null', test(function (done) {
40 | let get = this.spy(bcapi._get).bind(bcapi);
41 | let badRequestError = "Bad Request";
42 | this.stub(request, 'get').yields(badRequestError, { statusCode: 400 });
43 | bcapi._get('/', {}, function (e, r) {
44 |
45 | var callArgs = request.get.getCall(0).args[0];
46 | expect(callArgs.qs).to.deep.equal({ token: token });
47 | expect(callArgs.strictSSL).to.equal(true);
48 | expect(callArgs.json).to.equal(true);
49 | expect(Object.keys(callArgs).length).to.equal(4);
50 |
51 | expect(e).to.equal(badRequestError);
52 | expect(r).to.deep.equal({});
53 | done();
54 | });
55 | }));
56 |
57 | it('should return error and data when response body exists', test(function (done) {
58 | let get = this.spy(bcapi._get).bind(bcapi);
59 | let badRequestError = "Bad Request";
60 | let badRequestData = { message: 'badRequeset' };
61 | this.stub(request, 'get').yields(badRequestError, { statusCode: 400 }, badRequestData);
62 | bcapi._get('/', {}, function (e, r) {
63 |
64 | var callArgs = request.get.getCall(0).args[0];
65 | expect(callArgs.qs).to.deep.equal({ token: token });
66 | expect(callArgs.strictSSL).to.equal(true);
67 | expect(callArgs.json).to.equal(true);
68 | expect(Object.keys(callArgs).length).to.equal(4);
69 |
70 | expect(e).to.equal(badRequestError);
71 | expect(r).to.deep.equal(badRequestData);
72 | done();
73 | });
74 | }));
75 |
76 | });//end of _get
77 | */
--------------------------------------------------------------------------------
/tests/unit/_post.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 |
11 | let BlockCypher = require('../../lib/bcypher');
12 | let chain = 'btc';
13 | let network = 'main';
14 | let token = process.env.TOKEN;
15 | let bcapi = new BlockCypher(chain, network, token);
16 |
17 | /*
18 | describe('Blockcypher _post Method: ', function () {
19 |
20 | it('should return success statusCode 200 and return data', test(function (done) {
21 | let post = this.spy(bcapi._post).bind(bcapi);
22 | let validReturn = { data: { key1: 'value', key2: 2 } };
23 | let inputBody = { data: {} };
24 |
25 | this.stub(request, 'post').yields(null, { statusCode: 200 }, validReturn);
26 | bcapi._post('/', {}, inputBody, function (e, r) {
27 |
28 | var callArgs = request.post.getCall(0).args[0];
29 | expect(callArgs.qs).to.deep.equal({ token: token });
30 | expect(callArgs.strictSSL).to.equal(true);
31 | expect(callArgs.json).to.equal(true);
32 | expect(callArgs.body).to.deep.equal(inputBody);
33 | expect(Object.keys(callArgs).length).to.equal(5);
34 |
35 | expect(e).to.equal(null);
36 | expect(r).to.deep.equal(validReturn);
37 | done();
38 | });
39 | }));
40 |
41 | it('should return success statusCode 201 and return data', test(function (done) {
42 | let post = this.spy(bcapi._post).bind(bcapi);
43 | let validReturn = { data: { key1: 'value', key2: 2 } };
44 | let inputBody = { data: {} };
45 |
46 | this.stub(request, 'post').yields(null, { statusCode: 201 }, validReturn);
47 | bcapi._post('/', {}, inputBody, function (e, r) {
48 |
49 | var callArgs = request.post.getCall(0).args[0];
50 | expect(callArgs.qs).to.deep.equal({ token: token });
51 | expect(callArgs.strictSSL).to.equal(true);
52 | expect(callArgs.json).to.equal(true);
53 | expect(callArgs.body).to.deep.equal(inputBody);
54 | expect(Object.keys(callArgs).length).to.equal(5);
55 |
56 | expect(e).to.equal(null);
57 | expect(r).to.deep.equal(validReturn);
58 | done();
59 | });
60 | }));
61 |
62 |
63 | it('should return error and empty data when response body is null', test(function (done) {
64 | let post = this.spy(bcapi._post).bind(bcapi);
65 | let badRequestError = "Bad Request";
66 | let inputBody = { data: {} };
67 |
68 | this.stub(request, 'post').yields(badRequestError, { statusCode: 400 });
69 | bcapi._post('/', {}, inputBody, function (e, r) {
70 |
71 | var callArgs = request.post.getCall(0).args[0];
72 | expect(callArgs.qs).to.deep.equal({ token: token });
73 | expect(callArgs.strictSSL).to.equal(true);
74 | expect(callArgs.json).to.equal(true);
75 | expect(callArgs.body).to.deep.equal(inputBody);
76 | expect(Object.keys(callArgs).length).to.equal(5);
77 |
78 | expect(e).to.equal(badRequestError);
79 | expect(r).to.deep.equal({});
80 | done();
81 | });
82 | }));
83 |
84 | it('should return error and data when response body exists', test(function (done) {
85 | let post = this.spy(bcapi._post).bind(bcapi);
86 | let badRequestError = "Bad Request";
87 | let badRequestData = { message: 'badRequeset' };
88 | let inputBody = { data: {} };
89 |
90 | this.stub(request, 'post').yields(badRequestError, { statusCode: 400 }, badRequestData);
91 | bcapi._post('/', {}, inputBody, function (e, r) {
92 |
93 | var callArgs = request.post.getCall(0).args[0];
94 | expect(callArgs.qs).to.deep.equal({ token: token });
95 | expect(callArgs.strictSSL).to.equal(true);
96 | expect(callArgs.json).to.equal(true);
97 | expect(callArgs.body).to.deep.equal(inputBody);
98 | expect(Object.keys(callArgs).length).to.equal(5);
99 |
100 | expect(e).to.equal(badRequestError);
101 | expect(r).to.deep.equal(badRequestData);
102 | done();
103 | });
104 | }));
105 |
106 | });//end of _post
107 | */
--------------------------------------------------------------------------------
/tests/unit/addAddrWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher addAddrWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When addrs and name exist', test(function (done) {
23 |
24 | let addrs = ['12345'];
25 | let name = 'human';
26 |
27 | let validData = { addresses: addrs }
28 | let params = {};
29 | let validEndpoint = '/wallets/' + name + '/addresses';
30 |
31 | let validReturn = { data: { key1: 'value', key2: 2 } };
32 | this.stub(bcapi, '_post').yields(null, validReturn);
33 | bcapi.addAddrWallet(name, addrs, function (e, r) {
34 |
35 | var callArgs = bcapi._post.getCall(0).args;
36 | expect(callArgs[0]).to.equal(validEndpoint);
37 | expect(callArgs[1]).to.deep.equal(params);
38 | expect(callArgs[2]).to.deep.equal(validData);
39 | expect(typeof callArgs[3]).to.equal('function');
40 | expect(Object.keys(callArgs).length).to.equal(4);
41 |
42 | expect(e).to.equal(null);
43 | expect(r).to.deep.equal(validReturn);
44 | done();
45 | });
46 | }));
47 |
48 |
49 | });//end of success cases;
50 |
51 | describe('Errors: ', function () {
52 |
53 | it('bubbles up error when _post returns error', test(function (done) {
54 |
55 | let addrs = ['12345'];
56 | let name = 10;
57 | let validData = { addresses: addrs }
58 | let params = {};
59 | let badRequestError = "Bad Request";
60 | let validEndpoint = '/wallets/' + name + '/addresses';
61 |
62 |
63 | let validReturn = { data: { key1: 'value', key2: 2 } };
64 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
65 | bcapi.addAddrWallet(name, addrs, function (e, r) {
66 |
67 | var callArgs = bcapi._post.getCall(0).args;
68 | expect(callArgs[0]).to.equal(validEndpoint);
69 | expect(callArgs[1]).to.deep.equal(params);
70 | expect(callArgs[2]).to.deep.equal(validData);
71 | expect(typeof callArgs[3]).to.equal('function');
72 | expect(Object.keys(callArgs).length).to.equal(4);
73 |
74 | expect(e).to.equal(badRequestError);
75 | expect(r).to.deep.equal(validReturn);
76 | done();
77 | });
78 | }));
79 |
80 | it.skip('When addrs is null/undefined', function (done) { done(); }); //TODO Error out when addrs does not exist
81 | it.skip('When name is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
82 |
83 | });//end of error cases;
84 |
85 |
86 |
87 | });//end of addAddrWallet
88 |
--------------------------------------------------------------------------------
/tests/unit/createHDWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher createHDWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When data.name and data.extended_public_key exist', test(function (done) {
23 |
24 | let data = { name: 'name', extended_public_key: 'aRealKey' };
25 | let params = {};
26 | let validEndpoint = '/wallets/hd';
27 |
28 |
29 | let validReturn = { data: { key1: 'value', key2: 2 } };
30 | this.stub(bcapi, '_post').yields(null, validReturn);
31 | bcapi.createHDWallet(data, function (e, r) {
32 |
33 | var callArgs = bcapi._post.getCall(0).args;
34 | expect(callArgs[0]).to.equal(validEndpoint);
35 | expect(callArgs[1]).to.deep.equal(params);
36 | expect(callArgs[2]).to.deep.equal(data);
37 | expect(typeof callArgs[3]).to.equal('function');
38 | expect(Object.keys(callArgs).length).to.equal(4);
39 |
40 | expect(e).to.equal(null);
41 | expect(r).to.deep.equal(validReturn);
42 | done();
43 | });
44 | }));
45 |
46 |
47 | });//end of success cases;
48 |
49 | describe('Errors: ', function () {
50 |
51 | it('bubbles up error when _post returns error', test(function (done) {
52 |
53 | let data = { name: 'name', extended_public_key: 'aRealKey' };
54 | let params = {};
55 | let badRequestError = "Bad Request";
56 | let validEndpoint = '/wallets/hd';
57 |
58 | let validReturn = { data: { key1: 'value', key2: 2 } };
59 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
60 | bcapi.createHDWallet(data, function (e, r) {
61 |
62 | var callArgs = bcapi._post.getCall(0).args;
63 | expect(callArgs[0]).to.equal(validEndpoint);
64 | expect(callArgs[1]).to.deep.equal(params);
65 | expect(callArgs[2]).to.deep.equal(data);
66 | expect(typeof callArgs[3]).to.equal('function');
67 | expect(Object.keys(callArgs).length).to.equal(4);
68 |
69 | expect(e).to.equal(badRequestError);
70 | expect(r).to.deep.equal(validReturn);
71 | done();
72 | });
73 | }));
74 |
75 | it.skip('When name is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
76 | it.skip('When extended_public_key is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
77 |
78 | });//end of error cases;
79 |
80 |
81 |
82 | });//end of createHDWallet
83 |
--------------------------------------------------------------------------------
/tests/unit/createHook.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher createHook Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When data.event && data.address && data.url exist', test(function (done) {
23 |
24 | let event = 'hook';
25 | let address = 'hexString';
26 | let url = 'http://a.url.com';
27 | let data = { event: event, address: address, url: url };
28 | let validData = data;
29 | let params = {};
30 | let validEndpoint = '/hooks';
31 |
32 | let validReturn = { data: { key1: 'value', key2: 2 } };
33 | this.stub(bcapi, '_post').yields(null, validReturn);
34 | bcapi.createHook(data, function (e, r) {
35 |
36 | var callArgs = bcapi._post.getCall(0).args;
37 | expect(callArgs[0]).to.equal(validEndpoint);
38 | expect(callArgs[1]).to.deep.equal(params);
39 | expect(callArgs[2]).to.deep.equal(validData);
40 | expect(typeof callArgs[3]).to.equal('function');
41 | expect(Object.keys(callArgs).length).to.equal(4);
42 |
43 | expect(e).to.equal(null);
44 | expect(r).to.deep.equal(validReturn);
45 | done();
46 | });
47 | }));
48 |
49 | });//end of success cases;
50 |
51 | describe('Errors: ', function () {
52 |
53 | it('bubbles up error when _post returns error', test(function (done) {
54 |
55 | let event = 'hook';
56 | let address = 'hexString';
57 | let url = 'http://a.url.com';
58 | let data = { event: event, address: address, url: url };
59 | let validData = data;
60 | let params = {};
61 | let badRequestError = "Bad Request";
62 | let validEndpoint = '/hooks';
63 |
64 |
65 | let validReturn = { data: { key1: 'value', key2: 2 } };
66 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
67 | bcapi.createHook(data, function (e, r) {
68 |
69 | var callArgs = bcapi._post.getCall(0).args;
70 | expect(callArgs[0]).to.equal(validEndpoint);
71 | expect(callArgs[1]).to.deep.equal(params);
72 | expect(callArgs[2]).to.deep.equal(validData);
73 | expect(typeof callArgs[3]).to.equal('function');
74 | expect(Object.keys(callArgs).length).to.equal(4);
75 |
76 | expect(e).to.equal(badRequestError);
77 | expect(r).to.deep.equal(validReturn);
78 | done();
79 | });
80 | }));
81 |
82 | it.skip('When data.event is null/undefined', function (done) { done(); }); //TODO Error out when event does not exist
83 | it.skip('When data.address is null/undefined', function (done) { done(); }); //TODO Error out when address does not exist
84 | it.skip('When data.url is null/undefined', function (done) { done(); }); //TODO Error out when url does not exist
85 |
86 | });//end of error cases;
87 |
88 |
89 |
90 | });//end of createHook
91 |
--------------------------------------------------------------------------------
/tests/unit/createPayFwd.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher createPayFwd Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When data.destination && data.callback_url exist', test(function (done) {
23 |
24 | let data = { destination: 'hexString', callback_url: 'https://a.url.com' };
25 | let validData = data;
26 | let params = {};
27 | let validEndpoint = '/payments';
28 |
29 | let validReturn = { data: { key1: 'value', key2: 2 } };
30 | this.stub(bcapi, '_post').yields(null, validReturn);
31 | bcapi.createPayFwd(data, function (e, r) {
32 |
33 | var callArgs = bcapi._post.getCall(0).args;
34 | expect(callArgs[0]).to.equal(validEndpoint);
35 | expect(callArgs[1]).to.deep.equal(params);
36 | expect(callArgs[2]).to.deep.equal(validData);
37 | expect(typeof callArgs[3]).to.equal('function');
38 | expect(Object.keys(callArgs).length).to.equal(4);
39 |
40 | expect(e).to.equal(null);
41 | expect(r).to.deep.equal(validReturn);
42 | done();
43 | });
44 | }));
45 |
46 | });//end of success cases;
47 |
48 | describe('Errors: ', function () {
49 |
50 | it('bubbles up error when _post returns error', test(function (done) {
51 |
52 | let data = { destination: 'hexString', callback_url: 'https://a.url.com' };
53 | let validData = data;
54 | let params = {};
55 | let badRequestError = "Bad Request";
56 | let validEndpoint = '/payments';
57 |
58 |
59 | let validReturn = { data: { key1: 'value', key2: 2 } };
60 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
61 | bcapi.createPayFwd(data, function (e, r) {
62 |
63 | var callArgs = bcapi._post.getCall(0).args;
64 | expect(callArgs[0]).to.equal(validEndpoint);
65 | expect(callArgs[1]).to.deep.equal(params);
66 | expect(callArgs[2]).to.deep.equal(validData);
67 | expect(typeof callArgs[3]).to.equal('function');
68 | expect(Object.keys(callArgs).length).to.equal(4);
69 |
70 | expect(e).to.equal(badRequestError);
71 | expect(r).to.deep.equal(validReturn);
72 | done();
73 | });
74 | }));
75 |
76 | it.skip('When data.destination is null/undefined', function (done) { done(); }); //TODO Error out when destination does not exist
77 | it.skip('When data.callback_url is null/undefined', function (done) { done(); }); //TODO Error out when callback_url does not exist
78 |
79 | });//end of error cases;
80 |
81 |
82 |
83 | });//end of createPayFwd
84 |
--------------------------------------------------------------------------------
/tests/unit/createWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher createWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When addr and value exist', test(function (done) {
23 |
24 | let data = { name: 'name', addresses: ['arealaddress'] };
25 | let params = {};
26 | let validEndpoint = '/wallets';
27 |
28 |
29 | let validReturn = { data: { key1: 'value', key2: 2 } };
30 | this.stub(bcapi, '_post').yields(null, validReturn);
31 | bcapi.createWallet(data, function (e, r) {
32 |
33 | var callArgs = bcapi._post.getCall(0).args;
34 | expect(callArgs[0]).to.equal(validEndpoint);
35 | expect(callArgs[1]).to.deep.equal(params);
36 | expect(callArgs[2]).to.deep.equal(data);
37 | expect(typeof callArgs[3]).to.equal('function');
38 | expect(Object.keys(callArgs).length).to.equal(4);
39 |
40 | expect(e).to.equal(null);
41 | expect(r).to.deep.equal(validReturn);
42 | done();
43 | });
44 | }));
45 |
46 |
47 | });//end of success cases;
48 |
49 | describe('Errors: ', function () {
50 |
51 | it('bubbles up error when _post returns error', test(function (done) {
52 |
53 | let data = { name: 'name', addresses: ['arealaddress'] };
54 | let params = {};
55 | let badRequestError = "Bad Request";
56 | let validEndpoint = '/wallets';
57 |
58 | let validReturn = { data: { key1: 'value', key2: 2 } };
59 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
60 | bcapi.createWallet(data, function (e, r) {
61 |
62 | var callArgs = bcapi._post.getCall(0).args;
63 | expect(callArgs[0]).to.equal(validEndpoint);
64 | expect(callArgs[1]).to.deep.equal(params);
65 | expect(callArgs[2]).to.deep.equal(data);
66 | expect(typeof callArgs[3]).to.equal('function');
67 | expect(Object.keys(callArgs).length).to.equal(4);
68 |
69 | expect(e).to.equal(badRequestError);
70 | expect(r).to.deep.equal(validReturn);
71 | done();
72 | });
73 | }));
74 |
75 | it.skip('When name is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
76 | it.skip('When addresses is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
77 |
78 | });//end of error cases;
79 |
80 |
81 |
82 | });//end of createWallet
83 |
--------------------------------------------------------------------------------
/tests/unit/decodeTX.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher decodeTX Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When hex exist', test(function (done) {
23 |
24 | let hex = 'fancyHex';
25 |
26 | let validData = { tx: hex };
27 | let params = {};
28 | let validEndpoint = '/txs/decode';
29 |
30 | let validReturn = { data: { key1: 'value', key2: 2 } };
31 | this.stub(bcapi, '_post').yields(null, validReturn);
32 | bcapi.decodeTX(hex, function (e, r) {
33 |
34 | var callArgs = bcapi._post.getCall(0).args;
35 | expect(callArgs[0]).to.equal(validEndpoint);
36 | expect(callArgs[1]).to.deep.equal(params);
37 | expect(callArgs[2]).to.deep.equal(validData);
38 | expect(typeof callArgs[3]).to.equal('function');
39 | expect(Object.keys(callArgs).length).to.equal(4);
40 |
41 | expect(e).to.equal(null);
42 | expect(r).to.deep.equal(validReturn);
43 | done();
44 | });
45 | }));
46 |
47 | });//end of success cases;
48 |
49 | describe('Errors: ', function () {
50 |
51 | it('bubbles up error when _post returns error', test(function (done) {
52 |
53 | let hex = 'fancyHex';
54 | let validData = { tx: hex };
55 | let params = {};
56 | let badRequestError = "Bad Request";
57 | let validEndpoint = '/txs/decode';
58 |
59 |
60 | let validReturn = { data: { key1: 'value', key2: 2 } };
61 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
62 | bcapi.decodeTX(hex, function (e, r) {
63 |
64 | var callArgs = bcapi._post.getCall(0).args;
65 | expect(callArgs[0]).to.equal(validEndpoint);
66 | expect(callArgs[1]).to.deep.equal(params);
67 | expect(callArgs[2]).to.deep.equal(validData);
68 | expect(typeof callArgs[3]).to.equal('function');
69 | expect(Object.keys(callArgs).length).to.equal(4);
70 |
71 | expect(e).to.equal(badRequestError);
72 | expect(r).to.deep.equal(validReturn);
73 | done();
74 | });
75 | }));
76 |
77 | it.skip('When hex is null/undefined', function (done) { done(); }); //TODO Error out when hex does not exist
78 |
79 | });//end of error cases;
80 |
81 |
82 |
83 | });//end of decodeTX
84 |
--------------------------------------------------------------------------------
/tests/unit/delAddrsWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher delAddrsWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When name && addr exist', test(function (done) {
23 |
24 | let name = 'myName';
25 | let addrs = ['addr1', 'addr2'];
26 | let validParams = { address: addrs.join([';']) };
27 | let validEndpoint = '/wallets/' + name + '/addresses';
28 |
29 | let validReturn = { data: { key1: 'value', key2: 2 } };
30 | this.stub(bcapi, '_del').yields(null, validReturn);
31 | bcapi.delAddrsWallet(name, addrs, function (e, r) {
32 |
33 | var callArgs = bcapi._del.getCall(0).args;
34 | expect(callArgs[0]).to.equal(validEndpoint);
35 | expect(callArgs[1]).to.deep.equal(validParams);
36 | expect(typeof callArgs[2]).to.equal('function');
37 | expect(Object.keys(callArgs).length).to.equal(3);
38 |
39 | expect(e).to.equal(null);
40 | expect(r).to.deep.equal(validReturn);
41 | done();
42 | });
43 | }));
44 |
45 | });//end of success cases;
46 |
47 | describe('Errors: ', function () {
48 |
49 | it('bubbles up error when _del returns error', test(function (done) {
50 |
51 | let name = 'myName';
52 | let addrs = ['addr1', 'addr2'];
53 | let validParams = { address: addrs.join([';']) };
54 | let badRequestError = "Bad Request";
55 | let validEndpoint = '/wallets/' + name + '/addresses';
56 |
57 |
58 | let validReturn = { data: { key1: 'value', key2: 2 } };
59 | this.stub(bcapi, '_del').yields(badRequestError, validReturn);
60 | bcapi.delAddrsWallet(name, addrs, function (e, r) {
61 |
62 | var callArgs = bcapi._del.getCall(0).args;
63 | expect(callArgs[0]).to.equal(validEndpoint);
64 | expect(callArgs[1]).to.deep.equal(validParams);
65 | expect(typeof callArgs[2]).to.equal('function');
66 | expect(Object.keys(callArgs).length).to.equal(3);
67 |
68 | expect(e).to.equal(badRequestError);
69 | expect(r).to.deep.equal(validReturn);
70 | done();
71 | });
72 | }));
73 |
74 | it.skip('When name is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
75 | it.skip('When addrs is null/undefined', function (done) { done(); }); //TODO Error out when addrs does not exist
76 |
77 | });//end of error cases;
78 |
79 |
80 |
81 | });//end of delAddrsWallet
82 |
--------------------------------------------------------------------------------
/tests/unit/delHDWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher delHDWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When name exists', test(function (done) {
23 |
24 | let name = 'myName';
25 | let validParams = {};
26 | let validEndpoint = '/wallets/hd/' + name;
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_del').yields(null, validReturn);
30 | bcapi.delHDWallet(name, function (e, r) {
31 |
32 | var callArgs = bcapi._del.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(validParams);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | });//end of success cases;
45 |
46 | describe('Errors: ', function () {
47 |
48 | it('bubbles up error when _del returns error', test(function (done) {
49 |
50 | let name = 'myName';
51 | let validParams = {};
52 | let badRequestError = "Bad Request";
53 | let validEndpoint = '/wallets/hd/' + name;
54 |
55 |
56 | let validReturn = { data: { key1: 'value', key2: 2 } };
57 | this.stub(bcapi, '_del').yields(badRequestError, validReturn);
58 | bcapi.delHDWallet(name, function (e, r) {
59 |
60 | var callArgs = bcapi._del.getCall(0).args;
61 | expect(callArgs[0]).to.equal(validEndpoint);
62 | expect(callArgs[1]).to.deep.equal(validParams);
63 | expect(typeof callArgs[2]).to.equal('function');
64 | expect(Object.keys(callArgs).length).to.equal(3);
65 |
66 | expect(e).to.equal(badRequestError);
67 | expect(r).to.deep.equal(validReturn);
68 | done();
69 | });
70 | }));
71 |
72 | it.skip('When name is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
73 |
74 | });//end of error cases;
75 |
76 |
77 |
78 | });//end of delHDWallet
79 |
--------------------------------------------------------------------------------
/tests/unit/delHook.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher delHook Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When id exists', test(function (done) {
23 |
24 | let id = 'myName';
25 | let validParams = {};
26 | let validEndpoint = '/hooks/' + id;
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_del').yields(null, validReturn);
30 | bcapi.delHook(id, function (e, r) {
31 |
32 | var callArgs = bcapi._del.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(validParams);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | });//end of success cases;
45 |
46 | describe('Errors: ', function () {
47 |
48 | it('bubbles up error when _del returns error', test(function (done) {
49 |
50 | let id = 'myName';
51 | let validParams = {};
52 | let badRequestError = "Bad Request";
53 | let validEndpoint = '/hooks/' + id;
54 |
55 |
56 | let validReturn = { data: { key1: 'value', key2: 2 } };
57 | this.stub(bcapi, '_del').yields(badRequestError, validReturn);
58 | bcapi.delHook(id, function (e, r) {
59 |
60 | var callArgs = bcapi._del.getCall(0).args;
61 | expect(callArgs[0]).to.equal(validEndpoint);
62 | expect(callArgs[1]).to.deep.equal(validParams);
63 | expect(typeof callArgs[2]).to.equal('function');
64 | expect(Object.keys(callArgs).length).to.equal(3);
65 |
66 | expect(e).to.equal(badRequestError);
67 | expect(r).to.deep.equal(validReturn);
68 | done();
69 | });
70 | }));
71 |
72 | it.skip('When id is null/undefined', function (done) { done(); }); //TODO Error out when id does not exist
73 |
74 | });//end of error cases;
75 |
76 |
77 |
78 | });//end of delPayFwd
79 |
--------------------------------------------------------------------------------
/tests/unit/delPayFwd.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher delPayFwd Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When id exists', test(function (done) {
23 |
24 | let id = 'myName';
25 | let validParams = {};
26 | let validEndpoint = '/payments/' + id;
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_del').yields(null, validReturn);
30 | bcapi.delPayFwd(id, function (e, r) {
31 |
32 | var callArgs = bcapi._del.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(validParams);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | });//end of success cases;
45 |
46 | describe('Errors: ', function () {
47 |
48 | it('bubbles up error when _del returns error', test(function (done) {
49 |
50 | let id = 'myName';
51 | let validParams = {};
52 | let badRequestError = "Bad Request";
53 | let validEndpoint = '/payments/' + id;
54 |
55 |
56 | let validReturn = { data: { key1: 'value', key2: 2 } };
57 | this.stub(bcapi, '_del').yields(badRequestError, validReturn);
58 | bcapi.delPayFwd(id, function (e, r) {
59 |
60 | var callArgs = bcapi._del.getCall(0).args;
61 | expect(callArgs[0]).to.equal(validEndpoint);
62 | expect(callArgs[1]).to.deep.equal(validParams);
63 | expect(typeof callArgs[2]).to.equal('function');
64 | expect(Object.keys(callArgs).length).to.equal(3);
65 |
66 | expect(e).to.equal(badRequestError);
67 | expect(r).to.deep.equal(validReturn);
68 | done();
69 | });
70 | }));
71 |
72 | it.skip('When id is null/undefined', function (done) { done(); }); //TODO Error out when id does not exist
73 |
74 | });//end of error cases;
75 |
76 |
77 |
78 | });//end of delPayFwd
79 |
--------------------------------------------------------------------------------
/tests/unit/delWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher delWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When name exists', test(function (done) {
23 |
24 | let name = 'myName';
25 | let validParams = {};
26 | let validEndpoint = '/wallets/' + name;
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_del').yields(null, validReturn);
30 | bcapi.delWallet(name, function (e, r) {
31 |
32 | var callArgs = bcapi._del.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(validParams);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | });//end of success cases;
45 |
46 | describe('Errors: ', function () {
47 |
48 | it('bubbles up error when _del returns error', test(function (done) {
49 |
50 | let name = 'myName';
51 | let validParams = {};
52 | let badRequestError = "Bad Request";
53 | let validEndpoint = '/wallets/' + name;
54 |
55 |
56 | let validReturn = { data: { key1: 'value', key2: 2 } };
57 | this.stub(bcapi, '_del').yields(badRequestError, validReturn);
58 | bcapi.delWallet(name, function (e, r) {
59 |
60 | var callArgs = bcapi._del.getCall(0).args;
61 | expect(callArgs[0]).to.equal(validEndpoint);
62 | expect(callArgs[1]).to.deep.equal(validParams);
63 | expect(typeof callArgs[2]).to.equal('function');
64 | expect(Object.keys(callArgs).length).to.equal(3);
65 |
66 | expect(e).to.equal(badRequestError);
67 | expect(r).to.deep.equal(validReturn);
68 | done();
69 | });
70 | }));
71 |
72 | it.skip('When name is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
73 |
74 | });//end of error cases;
75 |
76 |
77 |
78 | });//end of delWallet
79 |
--------------------------------------------------------------------------------
/tests/unit/deriveAddrHDWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher deriveAddrHDWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When name and params exist', test(function (done) {
23 |
24 | let name = 'human';
25 |
26 | let validData = {}
27 | let params = {};
28 | let validEndpoint = '/wallets/hd/' + name + '/addresses/derive';
29 |
30 | let validReturn = { data: { key1: 'value', key2: 2 } };
31 | this.stub(bcapi, '_post').yields(null, validReturn);
32 | bcapi.deriveAddrHDWallet(name, params, function (e, r) {
33 |
34 | var callArgs = bcapi._post.getCall(0).args;
35 | expect(callArgs[0]).to.equal(validEndpoint);
36 | expect(callArgs[1]).to.deep.equal(params);
37 | expect(callArgs[2]).to.deep.equal(validData);
38 | expect(typeof callArgs[3]).to.equal('function');
39 | expect(Object.keys(callArgs).length).to.equal(4);
40 |
41 | expect(e).to.equal(null);
42 | expect(r).to.deep.equal(validReturn);
43 | done();
44 | });
45 | }));
46 |
47 |
48 | it('When name and params does NOT exist', test(function (done) {
49 |
50 | let name = 'human';
51 |
52 | let validData = {}
53 | let params = {};
54 | let validEndpoint = '/wallets/hd/' + name + '/addresses/derive';
55 |
56 | let validReturn = { data: { key1: 'value', key2: 2 } };
57 | this.stub(bcapi, '_post').yields(null, validReturn);
58 | bcapi.deriveAddrHDWallet(name, function (e, r) {
59 |
60 | var callArgs = bcapi._post.getCall(0).args;
61 | expect(callArgs[0]).to.equal(validEndpoint);
62 | expect(callArgs[1]).to.deep.equal(params);
63 | expect(callArgs[2]).to.deep.equal(validData);
64 | expect(typeof callArgs[3]).to.equal('function');
65 | expect(Object.keys(callArgs).length).to.equal(4);
66 |
67 | expect(e).to.equal(null);
68 | expect(r).to.deep.equal(validReturn);
69 | done();
70 | });
71 | }));
72 |
73 | });//end of success cases;
74 |
75 | describe('Errors: ', function () {
76 |
77 | it('bubbles up error when _post returns error', test(function (done) {
78 |
79 | let name = 10;
80 | let validData = {}
81 | let params = {};
82 | let badRequestError = "Bad Request";
83 | let validEndpoint = '/wallets/hd/' + name + '/addresses/derive';
84 |
85 |
86 | let validReturn = { data: { key1: 'value', key2: 2 } };
87 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
88 | bcapi.deriveAddrHDWallet(name, function (e, r) {
89 |
90 | var callArgs = bcapi._post.getCall(0).args;
91 | expect(callArgs[0]).to.equal(validEndpoint);
92 | expect(callArgs[1]).to.deep.equal(params);
93 | expect(callArgs[2]).to.deep.equal(validData);
94 | expect(typeof callArgs[3]).to.equal('function');
95 | expect(Object.keys(callArgs).length).to.equal(4);
96 |
97 | expect(e).to.equal(badRequestError);
98 | expect(r).to.deep.equal(validReturn);
99 | done();
100 | });
101 | }));
102 |
103 | it.skip('When name is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
104 |
105 | });//end of error cases;
106 |
107 |
108 |
109 | });//end of deriveAddrHDWallet
110 |
--------------------------------------------------------------------------------
/tests/unit/embedData.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher embedData Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When hex exist', test(function (done) {
23 |
24 | let hex = 'fancyHex';
25 |
26 | let validData = { data: hex };
27 | let params = {};
28 | let validEndpoint = '/txs/data';
29 |
30 | let validReturn = { data: { key1: 'value', key2: 2 } };
31 | this.stub(bcapi, '_post').yields(null, validReturn);
32 | bcapi.embedData(hex, function (e, r) {
33 |
34 | var callArgs = bcapi._post.getCall(0).args;
35 | expect(callArgs[0]).to.equal(validEndpoint);
36 | expect(callArgs[1]).to.deep.equal(params);
37 | expect(callArgs[2]).to.deep.equal(validData);
38 | expect(typeof callArgs[3]).to.equal('function');
39 | expect(Object.keys(callArgs).length).to.equal(4);
40 |
41 | expect(e).to.equal(null);
42 | expect(r).to.deep.equal(validReturn);
43 | done();
44 | });
45 | }));
46 |
47 | });//end of success cases;
48 |
49 | describe('Errors: ', function () {
50 |
51 | it('bubbles up error when _post returns error', test(function (done) {
52 |
53 | let hex = 'fancyHex';
54 | let validData = { data: hex };
55 | let params = {};
56 | let badRequestError = "Bad Request";
57 | let validEndpoint = '/txs/data';
58 |
59 |
60 | let validReturn = { data: { key1: 'value', key2: 2 } };
61 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
62 | bcapi.embedData(hex, function (e, r) {
63 |
64 | var callArgs = bcapi._post.getCall(0).args;
65 | expect(callArgs[0]).to.equal(validEndpoint);
66 | expect(callArgs[1]).to.deep.equal(params);
67 | expect(callArgs[2]).to.deep.equal(validData);
68 | expect(typeof callArgs[3]).to.equal('function');
69 | expect(Object.keys(callArgs).length).to.equal(4);
70 |
71 | expect(e).to.equal(badRequestError);
72 | expect(r).to.deep.equal(validReturn);
73 | done();
74 | });
75 | }));
76 |
77 | it.skip('When hex is null/undefined', function (done) { done(); }); //TODO Error out when hex does not exist
78 |
79 | });//end of error cases;
80 |
81 |
82 |
83 | });//end of embedData
84 |
--------------------------------------------------------------------------------
/tests/unit/faucet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher faucet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When addr and value exist', test(function (done) {
23 |
24 | let addr = '12345';
25 | let value = 10;
26 | let params = {};
27 | let validEndpoint = '/faucet';
28 | let validData = { address: addr, amount: value };
29 |
30 | let validReturn = { data: { key1: 'value', key2: 2 } };
31 | this.stub(bcapi, '_post').yields(null, validReturn);
32 | bcapi.faucet(addr, value, function (e, r) {
33 |
34 | var callArgs = bcapi._post.getCall(0).args;
35 | expect(callArgs[0]).to.equal(validEndpoint);
36 | expect(callArgs[1]).to.deep.equal(params);
37 | expect(callArgs[2]).to.deep.equal(validData);
38 | expect(typeof callArgs[3]).to.equal('function');
39 | expect(Object.keys(callArgs).length).to.equal(4);
40 |
41 | expect(e).to.equal(null);
42 | expect(r).to.deep.equal(validReturn);
43 | done();
44 | });
45 | }));
46 |
47 | it.skip('When value is null', function (done) { done(); }); //TODO Set default value if null/undefined?
48 |
49 | });//end of success cases;
50 |
51 | describe('Errors: ', function () {
52 |
53 | it('bubbles up error when _post returns error', test(function (done) {
54 |
55 | let addr = '12345';
56 | let value = 10;
57 | let params = {};
58 | let badRequestError = "Bad Request";
59 | let validEndpoint = '/faucet';
60 | let validData = { address: addr, amount: value };
61 |
62 | let validReturn = { data: { key1: 'value', key2: 2 } };
63 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
64 | bcapi.faucet(addr, value, function (e, r) {
65 |
66 | var callArgs = bcapi._post.getCall(0).args;
67 | expect(callArgs[0]).to.equal(validEndpoint);
68 | expect(callArgs[1]).to.deep.equal(params);
69 | expect(callArgs[2]).to.deep.equal(validData);
70 | expect(typeof callArgs[3]).to.equal('function');
71 | expect(Object.keys(callArgs).length).to.equal(4);
72 |
73 | expect(e).to.equal(badRequestError);
74 | expect(r).to.deep.equal(validReturn);
75 | done();
76 | });
77 | }));
78 |
79 | it.skip('When addr is null', function (done) { done(); }); //TODO Error out when addr is null. dont need to make an api call to know this is bad
80 |
81 | });//end of error cases;
82 |
83 |
84 |
85 | });//end of faucet
86 |
--------------------------------------------------------------------------------
/tests/unit/genAddr.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher genAddr Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When data is an empty object', test(function (done) {
23 |
24 | let data = {};
25 | let params = {};
26 | let validEndpoint = '/addrs';
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_post').yields(null, validReturn);
30 | bcapi.genAddr(data, function (e, r) {
31 |
32 | var callArgs = bcapi._post.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(callArgs[2]).to.deep.equal(data);
36 | expect(typeof callArgs[3]).to.equal('function');
37 | expect(Object.keys(callArgs).length).to.equal(4);
38 |
39 | expect(e).to.equal(null);
40 | expect(r).to.deep.equal(validReturn);
41 | done();
42 | });
43 | }));
44 |
45 |
46 |
47 | });//end of success cases;
48 |
49 | describe('Errors: ', function () {
50 |
51 | it('bubbles up error when _post returns error', test(function (done) {
52 |
53 | let data = {};
54 | let params = {};
55 | let badRequestError = "Bad Request";
56 | let validEndpoint = '/addrs';
57 |
58 | let validReturn = { data: { key1: 'value', key2: 2 } };
59 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
60 | bcapi.genAddr(data, function (e, r) {
61 |
62 | var callArgs = bcapi._post.getCall(0).args;
63 | expect(callArgs[0]).to.equal(validEndpoint);
64 | expect(callArgs[1]).to.deep.equal(params);
65 | expect(callArgs[2]).to.deep.equal(data);
66 | expect(typeof callArgs[3]).to.equal('function');
67 | expect(Object.keys(callArgs).length).to.equal(4);
68 |
69 | expect(e).to.equal(badRequestError);
70 | expect(r).to.deep.equal(validReturn);
71 | done();
72 | });
73 | }));
74 |
75 | });//end of error cases;
76 |
77 |
78 |
79 | });//end of genAddr
80 |
--------------------------------------------------------------------------------
/tests/unit/genAddrWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher genAddrWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When name exist', test(function (done) {
23 |
24 | let name = 'human';
25 |
26 | let validData = {}
27 | let params = {};
28 | let validEndpoint = '/wallets/' + name + '/addresses/generate';
29 |
30 | let validReturn = { data: { key1: 'value', key2: 2 } };
31 | this.stub(bcapi, '_post').yields(null, validReturn);
32 | bcapi.genAddrWallet(name, function (e, r) {
33 |
34 | var callArgs = bcapi._post.getCall(0).args;
35 | expect(callArgs[0]).to.equal(validEndpoint);
36 | expect(callArgs[1]).to.deep.equal(params);
37 | expect(callArgs[2]).to.deep.equal(validData);
38 | expect(typeof callArgs[3]).to.equal('function');
39 | expect(Object.keys(callArgs).length).to.equal(4);
40 |
41 | expect(e).to.equal(null);
42 | expect(r).to.deep.equal(validReturn);
43 | done();
44 | });
45 | }));
46 |
47 |
48 | });//end of success cases;
49 |
50 | describe('Errors: ', function () {
51 |
52 | it('bubbles up error when _post returns error', test(function (done) {
53 |
54 | let name = 10;
55 | let validData = {}
56 | let params = {};
57 | let badRequestError = "Bad Request";
58 | let validEndpoint = '/wallets/' + name + '/addresses/generate';
59 |
60 |
61 | let validReturn = { data: { key1: 'value', key2: 2 } };
62 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
63 | bcapi.genAddrWallet(name, function (e, r) {
64 |
65 | var callArgs = bcapi._post.getCall(0).args;
66 | expect(callArgs[0]).to.equal(validEndpoint);
67 | expect(callArgs[1]).to.deep.equal(params);
68 | expect(callArgs[2]).to.deep.equal(validData);
69 | expect(typeof callArgs[3]).to.equal('function');
70 | expect(Object.keys(callArgs).length).to.equal(4);
71 |
72 | expect(e).to.equal(badRequestError);
73 | expect(r).to.deep.equal(validReturn);
74 | done();
75 | });
76 | }));
77 |
78 | it.skip('When name is null/undefined', function (done) { done(); }); //TODO Error out when name does not exist
79 |
80 | });//end of error cases;
81 |
82 |
83 |
84 | });//end of genAddrWallet
85 |
--------------------------------------------------------------------------------
/tests/unit/getAddr.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getAddr Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When addr a string and params exists', test(function (done) {
23 |
24 | let addr = '12345';
25 | let params = {};
26 | let validEndpoint = '/addrs/' + addr;
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_get').yields(null, validReturn);
30 | bcapi.getAddr(addr, params, function (e, r) {
31 |
32 | var callArgs = bcapi._get.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | it('When addr is an int and params exists', test(function (done) {
45 |
46 | let addr = 12345;
47 | let params = {};
48 | let validEndpoint = '/addrs/' + addr;
49 |
50 | let validReturn = { data: { key1: 'value', key2: 2 } };
51 | this.stub(bcapi, '_get').yields(null, validReturn);
52 | bcapi.getAddr(addr, params, function (e, r) {
53 |
54 | var callArgs = bcapi._get.getCall(0).args;
55 | expect(callArgs[0]).to.equal(validEndpoint);
56 | expect(callArgs[1]).to.deep.equal(params);
57 | expect(typeof callArgs[2]).to.equal('function');
58 | expect(Object.keys(callArgs).length).to.equal(3);
59 |
60 | expect(e).to.equal(null);
61 | expect(r).to.deep.equal(validReturn);
62 | done();
63 | });
64 | }));
65 |
66 | it('When addr is a string and params does NOT exist', test(function (done) {
67 |
68 | let addr = '12345';
69 | let params = {};
70 | let validEndpoint = '/addrs/' + addr;
71 |
72 | let validReturn = { data: { key1: 'value', key2: 2 } };
73 | this.stub(bcapi, '_get').yields(null, validReturn);
74 | bcapi.getAddr(addr, function (e, r) {
75 |
76 | var callArgs = bcapi._get.getCall(0).args;
77 | expect(callArgs[0]).to.equal(validEndpoint);
78 | expect(callArgs[1]).to.deep.equal(params);
79 | expect(typeof callArgs[2]).to.equal('function');
80 | expect(Object.keys(callArgs).length).to.equal(3);
81 |
82 | expect(e).to.equal(null);
83 | expect(r).to.deep.equal(validReturn);
84 | done();
85 | });
86 | }));
87 |
88 | it('When addr is an int and params does NOT exist', test(function (done) {
89 |
90 | let addr = 12345;
91 | let params = {};
92 | let validEndpoint = '/addrs/' + addr;
93 |
94 | let validReturn = { data: { key1: 'value', key2: 2 } };
95 | this.stub(bcapi, '_get').yields(null, validReturn);
96 | bcapi.getAddr(addr, function (e, r) {
97 |
98 | var callArgs = bcapi._get.getCall(0).args;
99 | expect(callArgs[0]).to.equal(validEndpoint);
100 | expect(callArgs[1]).to.deep.equal(params);
101 | expect(typeof callArgs[2]).to.equal('function');
102 | expect(Object.keys(callArgs).length).to.equal(3);
103 |
104 | expect(e).to.equal(null);
105 | expect(r).to.deep.equal(validReturn);
106 | done();
107 | });
108 | }));
109 |
110 | });//end of success cases;
111 |
112 | describe('Errors: ', function () {
113 |
114 | it('bubbles up error when _get returns error', test(function (done) {
115 |
116 | let addr = '12345';
117 | let params = {};
118 | let badRequestError = "Bad Request";
119 | let validEndpoint = '/addrs/' + addr;
120 |
121 | let validReturn = { data: { key1: 'value', key2: 2 } };
122 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
123 | bcapi.getAddr(addr, params, function (e, r) {
124 |
125 | var callArgs = bcapi._get.getCall(0).args;
126 | expect(callArgs[0]).to.equal(validEndpoint);
127 | expect(callArgs[1]).to.deep.equal(params);
128 | expect(typeof callArgs[2]).to.equal('function');
129 | expect(Object.keys(callArgs).length).to.equal(3);
130 |
131 | expect(e).to.equal(badRequestError);
132 | expect(r).to.deep.equal(validReturn);
133 | done();
134 | });
135 | }));
136 |
137 | it.skip('should return error when addr is missing', function (done) { done() });
138 |
139 |
140 | });//end of error cases;
141 |
142 |
143 |
144 | });//end of getAddr
145 |
--------------------------------------------------------------------------------
/tests/unit/getAddrBal.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getAddrBal Method: ', function () {
18 |
19 | describe('Success: ', function () {
20 |
21 | it('When addr a string and params exists', test(function (done) {
22 |
23 | let addr = '12345';
24 | let params = {};
25 | let validEndpoint = '/addrs/' + addr + '/balance';
26 |
27 | let validReturn = { data: { key1: 'value', key2: 2 } };
28 | this.stub(bcapi, '_get').yields(null, validReturn);
29 | bcapi.getAddrBal(addr, params, function (e, r) {
30 |
31 | var callArgs = bcapi._get.getCall(0).args;
32 | expect(callArgs[0]).to.equal(validEndpoint);
33 | expect(callArgs[1]).to.deep.equal(params);
34 | expect(typeof callArgs[2]).to.equal('function');
35 | expect(Object.keys(callArgs).length).to.equal(3);
36 |
37 | expect(e).to.equal(null);
38 | expect(r).to.deep.equal(validReturn);
39 | done();
40 | });
41 | }));
42 |
43 | it('When addr is an int and params exists', test(function (done) {
44 |
45 | let addr = 12345;
46 | let params = {};
47 | let validEndpoint = '/addrs/' + addr + '/balance';
48 |
49 | let validReturn = { data: { key1: 'value', key2: 2 } };
50 | this.stub(bcapi, '_get').yields(null, validReturn);
51 | bcapi.getAddrBal(addr, params, function (e, r) {
52 |
53 | var callArgs = bcapi._get.getCall(0).args;
54 | expect(callArgs[0]).to.equal(validEndpoint);
55 | expect(callArgs[1]).to.deep.equal(params);
56 | expect(typeof callArgs[2]).to.equal('function');
57 | expect(Object.keys(callArgs).length).to.equal(3);
58 |
59 | expect(e).to.equal(null);
60 | expect(r).to.deep.equal(validReturn);
61 | done();
62 | });
63 | }));
64 |
65 | it('When addr is a string and params does NOT exist', test(function (done) {
66 |
67 | let addr = '12345';
68 | let params = {};
69 | let validEndpoint = '/addrs/' + addr + '/balance';
70 |
71 | let validReturn = { data: { key1: 'value', key2: 2 } };
72 | this.stub(bcapi, '_get').yields(null, validReturn);
73 | bcapi.getAddrBal(addr, function (e, r) {
74 |
75 | var callArgs = bcapi._get.getCall(0).args;
76 | expect(callArgs[0]).to.equal(validEndpoint);
77 | expect(callArgs[1]).to.deep.equal(params);
78 | expect(typeof callArgs[2]).to.equal('function');
79 | expect(Object.keys(callArgs).length).to.equal(3);
80 |
81 | expect(e).to.equal(null);
82 | expect(r).to.deep.equal(validReturn);
83 | done();
84 | });
85 | }));
86 |
87 | it('When addr is an int and params does NOT exist', test(function (done) {
88 |
89 | let addr = 12345;
90 | let params = {};
91 | let validEndpoint = '/addrs/' + addr + '/balance';
92 |
93 | let validReturn = { data: { key1: 'value', key2: 2 } };
94 | this.stub(bcapi, '_get').yields(null, validReturn);
95 | bcapi.getAddrBal(addr, function (e, r) {
96 |
97 | var callArgs = bcapi._get.getCall(0).args;
98 | expect(callArgs[0]).to.equal(validEndpoint);
99 | expect(callArgs[1]).to.deep.equal(params);
100 | expect(typeof callArgs[2]).to.equal('function');
101 | expect(Object.keys(callArgs).length).to.equal(3);
102 |
103 | expect(e).to.equal(null);
104 | expect(r).to.deep.equal(validReturn);
105 | done();
106 | });
107 | }));
108 |
109 | });//end of success cases;
110 |
111 | describe('Errors: ', function () {
112 |
113 | it('bubbles up error when _get returns error', test(function (done) {
114 |
115 | let addr = '12345';
116 | let params = {};
117 | let badRequestError = "Bad Request";
118 | let validEndpoint = '/addrs/' + addr + '/balance';
119 |
120 | let validReturn = { data: { key1: 'value', key2: 2 } };
121 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
122 | bcapi.getAddrBal(addr, params, function (e, r) {
123 |
124 | var callArgs = bcapi._get.getCall(0).args;
125 | expect(callArgs[0]).to.equal(validEndpoint);
126 | expect(callArgs[1]).to.deep.equal(params);
127 | expect(typeof callArgs[2]).to.equal('function');
128 | expect(Object.keys(callArgs).length).to.equal(3);
129 |
130 | expect(e).to.equal(badRequestError);
131 | expect(r).to.deep.equal(validReturn);
132 | done();
133 | });
134 | }));
135 |
136 | it.skip('should return error when addr is missing', function (done) { done() });
137 |
138 |
139 | });//end of error cases;
140 |
141 |
142 |
143 | });//end of getAddrBal
144 |
--------------------------------------------------------------------------------
/tests/unit/getAddrFull.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getAddrFull Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When addr a string and params exists', test(function (done) {
23 |
24 | let addr = '12345';
25 | let params = {};
26 | let validEndpoint = '/addrs/' + addr + '/full';
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_get').yields(null, validReturn);
30 | bcapi.getAddrFull(addr, params, function (e, r) {
31 |
32 | var callArgs = bcapi._get.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | it('When addr is an int and params exists', test(function (done) {
45 |
46 | let addr = 12345;
47 | let params = {};
48 | let validEndpoint = '/addrs/' + addr + '/full';
49 |
50 | let validReturn = { data: { key1: 'value', key2: 2 } };
51 | this.stub(bcapi, '_get').yields(null, validReturn);
52 | bcapi.getAddrFull(addr, params, function (e, r) {
53 |
54 | var callArgs = bcapi._get.getCall(0).args;
55 | expect(callArgs[0]).to.equal(validEndpoint);
56 | expect(callArgs[1]).to.deep.equal(params);
57 | expect(typeof callArgs[2]).to.equal('function');
58 | expect(Object.keys(callArgs).length).to.equal(3);
59 |
60 | expect(e).to.equal(null);
61 | expect(r).to.deep.equal(validReturn);
62 | done();
63 | });
64 | }));
65 |
66 | it('When addr is a string and params does NOT exist', test(function (done) {
67 |
68 | let addr = '12345';
69 | let params = {};
70 | let validEndpoint = '/addrs/' + addr + '/full';
71 |
72 | let validReturn = { data: { key1: 'value', key2: 2 } };
73 | this.stub(bcapi, '_get').yields(null, validReturn);
74 | bcapi.getAddrFull(addr, function (e, r) {
75 |
76 | var callArgs = bcapi._get.getCall(0).args;
77 | expect(callArgs[0]).to.equal(validEndpoint);
78 | expect(callArgs[1]).to.deep.equal(params);
79 | expect(typeof callArgs[2]).to.equal('function');
80 | expect(Object.keys(callArgs).length).to.equal(3);
81 |
82 | expect(e).to.equal(null);
83 | expect(r).to.deep.equal(validReturn);
84 | done();
85 | });
86 | }));
87 |
88 | it('When addr is an int and params does NOT exist', test(function (done) {
89 |
90 | let addr = 12345;
91 | let params = {};
92 | let validEndpoint = '/addrs/' + addr + '/full';
93 |
94 | let validReturn = { data: { key1: 'value', key2: 2 } };
95 | this.stub(bcapi, '_get').yields(null, validReturn);
96 | bcapi.getAddrFull(addr, function (e, r) {
97 |
98 | var callArgs = bcapi._get.getCall(0).args;
99 | expect(callArgs[0]).to.equal(validEndpoint);
100 | expect(callArgs[1]).to.deep.equal(params);
101 | expect(typeof callArgs[2]).to.equal('function');
102 | expect(Object.keys(callArgs).length).to.equal(3);
103 |
104 | expect(e).to.equal(null);
105 | expect(r).to.deep.equal(validReturn);
106 | done();
107 | });
108 | }));
109 |
110 | });//end of success cases;
111 |
112 | describe('Errors: ', function () {
113 |
114 | it('bubbles up error when _get returns error', test(function (done) {
115 |
116 | let addr = '12345';
117 | let params = {};
118 | let badRequestError = "Bad Request";
119 | let validEndpoint = '/addrs/' + addr + '/full';
120 |
121 | let validReturn = { data: { key1: 'value', key2: 2 } };
122 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
123 | bcapi.getAddrFull(addr, params, function (e, r) {
124 |
125 | var callArgs = bcapi._get.getCall(0).args;
126 | expect(callArgs[0]).to.equal(validEndpoint);
127 | expect(callArgs[1]).to.deep.equal(params);
128 | expect(typeof callArgs[2]).to.equal('function');
129 | expect(Object.keys(callArgs).length).to.equal(3);
130 |
131 | expect(e).to.equal(badRequestError);
132 | expect(r).to.deep.equal(validReturn);
133 | done();
134 | });
135 | }));
136 |
137 | it.skip('should return error when addr is missing', function (done) { done() });
138 |
139 |
140 | });//end of error cases;
141 |
142 |
143 |
144 | });//end of getAddrFull
145 |
--------------------------------------------------------------------------------
/tests/unit/getAddrsHDWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getAddrsHDWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When name a string and params exists', test(function (done) {
23 |
24 | let name = 'human';
25 | let params = {};
26 | let validEndpoint = '/wallets/hd/' + name + '/addresses';
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_get').yields(null, validReturn);
30 | bcapi.getAddrsHDWallet(name, function (e, r) {
31 |
32 | var callArgs = bcapi._get.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | });//end of success cases;
45 |
46 | describe('Errors: ', function () {
47 |
48 | it('bubbles up error when _get returns error', test(function (done) {
49 |
50 | let name = 'human';
51 | let params = {};
52 | let badRequestError = "Bad Request";
53 | let validEndpoint = '/wallets/hd/' + name + '/addresses';
54 |
55 | let validReturn = { data: { key1: 'value', key2: 2 } };
56 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
57 | bcapi.getAddrsHDWallet(name, function (e, r) {
58 |
59 | var callArgs = bcapi._get.getCall(0).args;
60 | expect(callArgs[0]).to.equal(validEndpoint);
61 | expect(callArgs[1]).to.deep.equal(params);
62 | expect(typeof callArgs[2]).to.equal('function');
63 | expect(Object.keys(callArgs).length).to.equal(3);
64 |
65 | expect(e).to.equal(badRequestError);
66 | expect(r).to.deep.equal(validReturn);
67 | done();
68 | });
69 | }));
70 |
71 | it.skip('should return error when name is missing', function (done) { done() });
72 |
73 |
74 | });//end of error cases;
75 |
76 |
77 |
78 | });//end of getAddrsHDWallet
79 |
--------------------------------------------------------------------------------
/tests/unit/getAddrsWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getAddrsWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When name a string and params exists', test(function (done) {
23 |
24 | let name = 'human';
25 | let params = {};
26 | let validEndpoint = '/wallets/' + name + '/addresses';
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_get').yields(null, validReturn);
30 | bcapi.getAddrsWallet(name, function (e, r) {
31 |
32 | var callArgs = bcapi._get.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | });//end of success cases;
45 |
46 | describe('Errors: ', function () {
47 |
48 | it('bubbles up error when _get returns error', test(function (done) {
49 |
50 | let name = 'human';
51 | let params = {};
52 | let badRequestError = "Bad Request";
53 | let validEndpoint = '/wallets/' + name + '/addresses';
54 |
55 | let validReturn = { data: { key1: 'value', key2: 2 } };
56 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
57 | bcapi.getAddrsWallet(name, function (e, r) {
58 |
59 | var callArgs = bcapi._get.getCall(0).args;
60 | expect(callArgs[0]).to.equal(validEndpoint);
61 | expect(callArgs[1]).to.deep.equal(params);
62 | expect(typeof callArgs[2]).to.equal('function');
63 | expect(Object.keys(callArgs).length).to.equal(3);
64 |
65 | expect(e).to.equal(badRequestError);
66 | expect(r).to.deep.equal(validReturn);
67 | done();
68 | });
69 | }));
70 |
71 | it.skip('should return error when name is missing', function (done) { done() });
72 |
73 |
74 | });//end of error cases;
75 |
76 |
77 |
78 | });//end of getAddrsWallet
79 |
--------------------------------------------------------------------------------
/tests/unit/getBlock.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getBlock Method: ', function () {
18 |
19 | describe('Success: ', function () {
20 |
21 | it('When block hash/heightis a string and params exists', test(function (done) {
22 |
23 | let hh = '12345';
24 | let params = {};
25 |
26 | let validReturn = { data: { key1: 'value', key2: 2 } };
27 | this.stub(bcapi, '_get').yields(null, validReturn);
28 | bcapi.getBlock(hh, params, function (e, r) {
29 |
30 | var callArgs = bcapi._get.getCall(0).args;
31 | expect(callArgs[0]).to.equal('/blocks/' + hh);
32 | expect(callArgs[1]).to.deep.equal(params);
33 | expect(typeof callArgs[2]).to.equal('function');
34 | expect(Object.keys(callArgs).length).to.equal(3);
35 |
36 | expect(e).to.equal(null);
37 | expect(r).to.deep.equal(validReturn);
38 | done();
39 | });
40 | }));
41 |
42 | it('When block hash/height is an int and params exists', test(function (done) {
43 |
44 | let hh = 12345;
45 | let params = {};
46 |
47 | let validReturn = { data: { key1: 'value', key2: 2 } };
48 | this.stub(bcapi, '_get').yields(null, validReturn);
49 | bcapi.getBlock(hh, params, function (e, r) {
50 |
51 | var callArgs = bcapi._get.getCall(0).args;
52 | expect(callArgs[0]).to.equal('/blocks/' + hh);
53 | expect(callArgs[1]).to.deep.equal(params);
54 | expect(typeof callArgs[2]).to.equal('function');
55 | expect(Object.keys(callArgs).length).to.equal(3);
56 |
57 | expect(e).to.equal(null);
58 | expect(r).to.deep.equal(validReturn);
59 | done();
60 | });
61 | }));
62 |
63 | it('When block hash/heightis is a string and params does NOT exist', test(function (done) {
64 |
65 | let hh = '12345';
66 | let params = {};
67 |
68 | let validReturn = { data: { key1: 'value', key2: 2 } };
69 | this.stub(bcapi, '_get').yields(null, validReturn);
70 | bcapi.getBlock(hh, function (e, r) {
71 |
72 | var callArgs = bcapi._get.getCall(0).args;
73 | expect(callArgs[0]).to.equal('/blocks/' + hh);
74 | expect(callArgs[1]).to.deep.equal(params);
75 | expect(typeof callArgs[2]).to.equal('function');
76 | expect(Object.keys(callArgs).length).to.equal(3);
77 |
78 | expect(e).to.equal(null);
79 | expect(r).to.deep.equal(validReturn);
80 | done();
81 | });
82 | }));
83 |
84 | it('When block hash/height is an int and params does NOT exist', test(function (done) {
85 |
86 | let hh = 12345;
87 | let params = {};
88 |
89 | let validReturn = { data: { key1: 'value', key2: 2 } };
90 | this.stub(bcapi, '_get').yields(null, validReturn);
91 | bcapi.getBlock(hh, function (e, r) {
92 |
93 | var callArgs = bcapi._get.getCall(0).args;
94 | expect(callArgs[0]).to.equal('/blocks/' + hh);
95 | expect(callArgs[1]).to.deep.equal(params);
96 | expect(typeof callArgs[2]).to.equal('function');
97 | expect(Object.keys(callArgs).length).to.equal(3);
98 |
99 | expect(e).to.equal(null);
100 | expect(r).to.deep.equal(validReturn);
101 | done();
102 | });
103 | }));
104 |
105 | });//end of success cases;
106 |
107 | describe('Errors: ', function () {
108 |
109 | it('bubbles up error when _get returns error', test(function (done) {
110 |
111 | let hh = '12345';
112 | let params = {};
113 | let badRequestError = "Bad Request";
114 |
115 | let validReturn = { data: { key1: 'value', key2: 2 } };
116 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
117 | bcapi.getBlock(hh, params, function (e, r) {
118 |
119 | var callArgs = bcapi._get.getCall(0).args;
120 | expect(callArgs[0]).to.equal('/blocks/' + hh);
121 | expect(callArgs[1]).to.deep.equal(params);
122 | expect(typeof callArgs[2]).to.equal('function');
123 | expect(Object.keys(callArgs).length).to.equal(3);
124 |
125 | expect(e).to.equal(badRequestError);
126 | expect(r).to.deep.equal(validReturn);
127 | done();
128 | });
129 | }));
130 |
131 | it.skip('should return error when block hash/height is missing', function (done) { done() });
132 |
133 |
134 | });//end of error cases;
135 |
136 |
137 |
138 | });//end of getBlock
139 |
--------------------------------------------------------------------------------
/tests/unit/getChain.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getChain Method: ', function () {
18 |
19 | it('should return success', test(function (done) {
20 |
21 | let validEndpoint = '/';
22 | let params = {};
23 |
24 | let validReturn = { data: { key1: 'value', key2: 2 } };
25 | this.stub(bcapi, '_get').yields(null, validReturn);
26 | bcapi.getChain(function (e, r) {
27 |
28 | var callArgs = bcapi._get.getCall(0).args;
29 | expect(callArgs[0]).to.equal(validEndpoint);
30 | expect(callArgs[1]).to.deep.equal(params);
31 | expect(typeof callArgs[2]).to.equal('function');
32 | expect(Object.keys(callArgs).length).to.equal(3);
33 |
34 | expect(e).to.equal(null);
35 | expect(r).to.deep.equal(validReturn);
36 | done();
37 | });
38 | }));
39 |
40 |
41 | it('should return error', test(function (done) {
42 |
43 | let validEndpoint = '/';
44 | let params = {};
45 |
46 | let validReturn = {};
47 | let badRequestError = "Bad Request";
48 | this.stub(bcapi, '_get').yields(badRequestError, null);
49 | bcapi.getChain(function (e, r) {
50 |
51 | var callArgs = bcapi._get.getCall(0).args;
52 | expect(callArgs[0]).to.equal(validEndpoint);
53 | expect(callArgs[1]).to.deep.equal(params);
54 | expect(typeof callArgs[2]).to.equal('function');
55 | expect(Object.keys(callArgs).length).to.equal(3);
56 |
57 | expect(e).to.equal(badRequestError);
58 | expect(r).to.deep.equal(null);
59 | done();
60 | });
61 | }));
62 |
63 | });//end of getChain
64 |
--------------------------------------------------------------------------------
/tests/unit/getHDWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getHDWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When name a string and params exists', test(function (done) {
23 |
24 | let name = 'human';
25 | let params = {};
26 | let validEndpoint = '/wallets/hd/' + name;
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_get').yields(null, validReturn);
30 | bcapi.getHDWallet(name, function (e, r) {
31 |
32 | var callArgs = bcapi._get.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | });//end of success cases;
45 |
46 | describe('Errors: ', function () {
47 |
48 | it('bubbles up error when _get returns error', test(function (done) {
49 |
50 | let name = '12345';
51 | let params = {};
52 | let badRequestError = "Bad Request";
53 | let validEndpoint = '/wallets/hd/' + name;
54 |
55 | let validReturn = { data: { key1: 'value', key2: 2 } };
56 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
57 | bcapi.getHDWallet(name, function (e, r) {
58 |
59 | var callArgs = bcapi._get.getCall(0).args;
60 | expect(callArgs[0]).to.equal(validEndpoint);
61 | expect(callArgs[1]).to.deep.equal(params);
62 | expect(typeof callArgs[2]).to.equal('function');
63 | expect(Object.keys(callArgs).length).to.equal(3);
64 |
65 | expect(e).to.equal(badRequestError);
66 | expect(r).to.deep.equal(validReturn);
67 | done();
68 | });
69 | }));
70 |
71 | it.skip('should return error when name is missing', function (done) { done() });
72 |
73 |
74 | });//end of error cases;
75 |
76 |
77 |
78 | });//end of getHDWallet
79 |
--------------------------------------------------------------------------------
/tests/unit/getHook.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getHook Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When id exists', test(function (done) {
23 |
24 | let id = '12345';
25 | let params = {};
26 | let validEndpoint = '/hooks/' + id;
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_get').yields(null, validReturn);
30 | bcapi.getHook(id, function (e, r) {
31 |
32 | var callArgs = bcapi._get.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 |
45 | });//end of success cases;
46 |
47 | describe('Errors: ', function () {
48 |
49 | it('bubbles up error when _get returns error', test(function (done) {
50 |
51 | let id = '12345';
52 | let params = {};
53 | let badRequestError = "Bad Request";
54 | let validEndpoint = '/hooks/' + id;
55 |
56 | let validReturn = { data: { key1: 'value', key2: 2 } };
57 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
58 | bcapi.getHook(id, function (e, r) {
59 |
60 | var callArgs = bcapi._get.getCall(0).args;
61 | expect(callArgs[0]).to.equal(validEndpoint);
62 | expect(callArgs[1]).to.deep.equal(params);
63 | expect(typeof callArgs[2]).to.equal('function');
64 | expect(Object.keys(callArgs).length).to.equal(3);
65 |
66 | expect(e).to.equal(badRequestError);
67 | expect(r).to.deep.equal(validReturn);
68 | done();
69 | });
70 | }));
71 |
72 | it.skip('should return error when id is missing', function (done) { done() });
73 |
74 |
75 | });//end of error cases;
76 |
77 |
78 |
79 | });//end of getHook
80 |
--------------------------------------------------------------------------------
/tests/unit/getTX.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getTX Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When hash is a string and params exists', test(function (done) {
23 |
24 | let hash = '12345';
25 | let params = {};
26 | let validEndpoint = '/txs/' + hash;
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_get').yields(null, validReturn);
30 | bcapi.getTX(hash, params, function (e, r) {
31 |
32 | var callArgs = bcapi._get.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | it.skip('When hash is a string and params does NOT exist', test(function (done) {
45 |
46 | let hash = '12345';
47 | let params = {};
48 | let validEndpoint = '/txs/' + hash;
49 |
50 | let validReturn = { data: { key1: 'value', key2: 2 } };
51 | this.stub(bcapi, '_get').yields(null, validReturn);
52 | bcapi.getTX(hash, function (e, r) {
53 |
54 | var callArgs = bcapi._get.getCall(0).args;
55 | expect(callArgs[0]).to.equal(validEndpoint);
56 | expect(callArgs[1]).to.deep.equal(params);
57 | expect(typeof callArgs[2]).to.equal('function');
58 | expect(Object.keys(callArgs).length).to.equal(3);
59 |
60 | expect(e).to.equal(null);
61 | expect(r).to.deep.equal(validReturn);
62 | done();
63 | });
64 | }));
65 |
66 |
67 | });//end of success cases;
68 |
69 | describe('Errors: ', function () {
70 |
71 | it('bubbles up error when _get returns error', test(function (done) {
72 |
73 | let hash = '12345';
74 | let params = {};
75 | let badRequestError = "Bad Request";
76 | let validEndpoint = '/txs/' + hash;
77 |
78 | let validReturn = { data: { key1: 'value', key2: 2 } };
79 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
80 | bcapi.getTX(hash, params, function (e, r) {
81 |
82 | var callArgs = bcapi._get.getCall(0).args;
83 | expect(callArgs[0]).to.equal(validEndpoint);
84 | expect(callArgs[1]).to.deep.equal(params);
85 | expect(typeof callArgs[2]).to.equal('function');
86 | expect(Object.keys(callArgs).length).to.equal(3);
87 |
88 | expect(e).to.equal(badRequestError);
89 | expect(r).to.deep.equal(validReturn);
90 | done();
91 | });
92 | }));
93 |
94 | it.skip('should return error when hash is missing', function (done) { done() });
95 |
96 |
97 | });//end of error cases;
98 |
99 |
100 |
101 | });//end of getTX
102 |
--------------------------------------------------------------------------------
/tests/unit/getTXConf.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getTXConf Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When hash is a string and params exists', test(function (done) {
23 |
24 | let hash = '12345';
25 | let params = {};
26 | let validEndpoint = '/txs/' + hash + '/confidence';
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_get').yields(null, validReturn);
30 | bcapi.getTXConf(hash, function (e, r) {
31 |
32 | var callArgs = bcapi._get.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | });//end of success cases;
45 |
46 | describe('Errors: ', function () {
47 |
48 | it('bubbles up error when _get returns error', test(function (done) {
49 |
50 | let hash = '12345';
51 | let params = {};
52 | let badRequestError = "Bad Request";
53 | let validEndpoint = '/txs/' + hash + '/confidence';
54 |
55 | let validReturn = { data: { key1: 'value', key2: 2 } };
56 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
57 | bcapi.getTXConf(hash, function (e, r) {
58 |
59 | var callArgs = bcapi._get.getCall(0).args;
60 | expect(callArgs[0]).to.equal(validEndpoint);
61 | expect(callArgs[1]).to.deep.equal(params);
62 | expect(typeof callArgs[2]).to.equal('function');
63 | expect(Object.keys(callArgs).length).to.equal(3);
64 |
65 | expect(e).to.equal(badRequestError);
66 | expect(r).to.deep.equal(validReturn);
67 | done();
68 | });
69 | }));
70 |
71 | it.skip('should return error when hash is missing', function (done) { done() });
72 |
73 |
74 | });//end of error cases;
75 |
76 |
77 |
78 | });//end of getTXConf
79 |
--------------------------------------------------------------------------------
/tests/unit/getUnTXs.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getUnTXs Method: ', function () {
18 |
19 | it('should return success', test(function (done) {
20 |
21 | let validEndpoint = '/txs';
22 | let params = {};
23 |
24 | let validReturn = { data: { key1: 'value', key2: 2 } };
25 | this.stub(bcapi, '_get').yields(null, validReturn);
26 | bcapi.getUnTXs(function (e, r) {
27 |
28 | var callArgs = bcapi._get.getCall(0).args;
29 | expect(callArgs[0]).to.equal(validEndpoint);
30 | expect(callArgs[1]).to.deep.equal(params);
31 | expect(typeof callArgs[2]).to.equal('function');
32 | expect(Object.keys(callArgs).length).to.equal(3);
33 |
34 | expect(e).to.equal(null);
35 | expect(r).to.deep.equal(validReturn);
36 | done();
37 | });
38 | }));
39 |
40 |
41 | it('should return error', test(function (done) {
42 | let validReturn = {};
43 | let validEndpoint = '/txs';
44 |
45 | let badRequestError = "Bad Request";
46 | this.stub(bcapi, '_get').yields(badRequestError, null);
47 | bcapi.getUnTXs(function (e, r) {
48 |
49 | var callArgs = bcapi._get.getCall(0).args;
50 | expect(callArgs[0]).to.equal(validEndpoint);
51 | expect(callArgs[1]).to.deep.equal({});
52 | expect(typeof callArgs[2]).to.equal('function');
53 | expect(Object.keys(callArgs).length).to.equal(3);
54 |
55 | expect(e).to.equal(badRequestError);
56 | expect(r).to.deep.equal(null);
57 | done();
58 | });
59 | }));
60 |
61 | });//end of getUnTXs
62 |
--------------------------------------------------------------------------------
/tests/unit/getWallet.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher getWallet Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When name is a string and params exists', test(function (done) {
23 |
24 | let name = 'human';
25 | let params = {};
26 | let validEndpoint = '/wallets/' + name;
27 |
28 | let validReturn = { data: { key1: 'value', key2: 2 } };
29 | this.stub(bcapi, '_get').yields(null, validReturn);
30 | bcapi.getWallet(name, function (e, r) {
31 |
32 | var callArgs = bcapi._get.getCall(0).args;
33 | expect(callArgs[0]).to.equal(validEndpoint);
34 | expect(callArgs[1]).to.deep.equal(params);
35 | expect(typeof callArgs[2]).to.equal('function');
36 | expect(Object.keys(callArgs).length).to.equal(3);
37 |
38 | expect(e).to.equal(null);
39 | expect(r).to.deep.equal(validReturn);
40 | done();
41 | });
42 | }));
43 |
44 | });//end of success cases;
45 |
46 | describe('Errors: ', function () {
47 |
48 | it('bubbles up error when _get returns error', test(function (done) {
49 |
50 | let name = '12345';
51 | let params = {};
52 | let badRequestError = "Bad Request";
53 | let validEndpoint = '/wallets/' + name;
54 |
55 | let validReturn = { data: { key1: 'value', key2: 2 } };
56 | this.stub(bcapi, '_get').yields(badRequestError, validReturn);
57 | bcapi.getWallet(name, function (e, r) {
58 |
59 | var callArgs = bcapi._get.getCall(0).args;
60 | expect(callArgs[0]).to.equal(validEndpoint);
61 | expect(callArgs[1]).to.deep.equal(params);
62 | expect(typeof callArgs[2]).to.equal('function');
63 | expect(Object.keys(callArgs).length).to.equal(3);
64 |
65 | expect(e).to.equal(badRequestError);
66 | expect(r).to.deep.equal(validReturn);
67 | done();
68 | });
69 | }));
70 |
71 | it.skip('should return error when name is missing', function (done) { done() });
72 |
73 |
74 | });//end of error cases;
75 |
76 |
77 |
78 | });//end of getWallet
79 |
--------------------------------------------------------------------------------
/tests/unit/listHDWallets.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher listHDWallets Method: ', function () {
18 |
19 | it('should return success', test(function (done) {
20 |
21 | let validEndpoint = '/wallets/hd';
22 | let params = {};
23 |
24 | let validReturn = { data: { key1: 'value', key2: 2 } };
25 | this.stub(bcapi, '_get').yields(null, validReturn);
26 | bcapi.listHDWallets(function (e, r) {
27 |
28 | var callArgs = bcapi._get.getCall(0).args;
29 | expect(callArgs[0]).to.equal(validEndpoint);
30 | expect(callArgs[1]).to.deep.equal(params);
31 | expect(typeof callArgs[2]).to.equal('function');
32 | expect(Object.keys(callArgs).length).to.equal(3);
33 |
34 | expect(e).to.equal(null);
35 | expect(r).to.deep.equal(validReturn);
36 | done();
37 | });
38 | }));
39 |
40 |
41 | it('should return error', test(function (done) {
42 | let validReturn = {};
43 | let validEndpoint = '/wallets/hd';
44 |
45 | let badRequestError = "Bad Request";
46 | this.stub(bcapi, '_get').yields(badRequestError, null);
47 | bcapi.listHDWallets(function (e, r) {
48 |
49 | var callArgs = bcapi._get.getCall(0).args;
50 | expect(callArgs[0]).to.equal(validEndpoint);
51 | expect(callArgs[1]).to.deep.equal({});
52 | expect(typeof callArgs[2]).to.equal('function');
53 | expect(Object.keys(callArgs).length).to.equal(3);
54 |
55 | expect(e).to.equal(badRequestError);
56 | expect(r).to.deep.equal(null);
57 | done();
58 | });
59 | }));
60 |
61 | });//end of listHDWallets
62 |
--------------------------------------------------------------------------------
/tests/unit/listHooks.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher listHooks Method: ', function () {
18 |
19 | it('should return success', test(function (done) {
20 |
21 | let validEndpoint = '/hooks';
22 | let params = {};
23 |
24 | let validReturn = { data: { key1: 'value', key2: 2 } };
25 | this.stub(bcapi, '_get').yields(null, validReturn);
26 | bcapi.listHooks(function (e, r) {
27 |
28 | var callArgs = bcapi._get.getCall(0).args;
29 | expect(callArgs[0]).to.equal(validEndpoint);
30 | expect(callArgs[1]).to.deep.equal(params);
31 | expect(typeof callArgs[2]).to.equal('function');
32 | expect(Object.keys(callArgs).length).to.equal(3);
33 |
34 | expect(e).to.equal(null);
35 | expect(r).to.deep.equal(validReturn);
36 | done();
37 | });
38 | }));
39 |
40 |
41 | it('should return error', test(function (done) {
42 | let validReturn = {};
43 | let validEndpoint = '/hooks';
44 |
45 | let badRequestError = "Bad Request";
46 | this.stub(bcapi, '_get').yields(badRequestError, null);
47 | bcapi.listHooks(function (e, r) {
48 |
49 | var callArgs = bcapi._get.getCall(0).args;
50 | expect(callArgs[0]).to.equal(validEndpoint);
51 | expect(callArgs[1]).to.deep.equal({});
52 | expect(typeof callArgs[2]).to.equal('function');
53 | expect(Object.keys(callArgs).length).to.equal(3);
54 |
55 | expect(e).to.equal(badRequestError);
56 | expect(r).to.deep.equal(null);
57 | done();
58 | });
59 | }));
60 |
61 | });//end of listHooks
62 |
--------------------------------------------------------------------------------
/tests/unit/listPayFwds.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher listPayFwds Method: ', function () {
18 |
19 | it('should return success', test(function (done) {
20 |
21 | let validEndpoint = '/payments';
22 | let params = {};
23 |
24 | let validReturn = { data: { key1: 'value', key2: 2 } };
25 | this.stub(bcapi, '_get').yields(null, validReturn);
26 | bcapi.listPayFwds(function (e, r) {
27 |
28 | var callArgs = bcapi._get.getCall(0).args;
29 | expect(callArgs[0]).to.equal(validEndpoint);
30 | expect(callArgs[1]).to.deep.equal(params);
31 | expect(typeof callArgs[2]).to.equal('function');
32 | expect(Object.keys(callArgs).length).to.equal(3);
33 |
34 | expect(e).to.equal(null);
35 | expect(r).to.deep.equal(validReturn);
36 | done();
37 | });
38 | }));
39 |
40 |
41 | it('should return error', test(function (done) {
42 | let validReturn = {};
43 | let validEndpoint = '/payments';
44 |
45 | let badRequestError = "Bad Request";
46 | this.stub(bcapi, '_get').yields(badRequestError, null);
47 | bcapi.listPayFwds(function (e, r) {
48 |
49 | var callArgs = bcapi._get.getCall(0).args;
50 | expect(callArgs[0]).to.equal(validEndpoint);
51 | expect(callArgs[1]).to.deep.equal({});
52 | expect(typeof callArgs[2]).to.equal('function');
53 | expect(Object.keys(callArgs).length).to.equal(3);
54 |
55 | expect(e).to.equal(badRequestError);
56 | expect(r).to.deep.equal(null);
57 | done();
58 | });
59 | }));
60 |
61 | });//end of listPayFwds
62 |
--------------------------------------------------------------------------------
/tests/unit/listWallets.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher listWallets Method: ', function () {
18 |
19 | it('should return success', test(function (done) {
20 |
21 | let validEndpoint = '/wallets';
22 | let params = {};
23 |
24 | let validReturn = { data: { key1: 'value', key2: 2 } };
25 | this.stub(bcapi, '_get').yields(null, validReturn);
26 | bcapi.listWallets(function (e, r) {
27 |
28 | var callArgs = bcapi._get.getCall(0).args;
29 | expect(callArgs[0]).to.equal(validEndpoint);
30 | expect(callArgs[1]).to.deep.equal(params);
31 | expect(typeof callArgs[2]).to.equal('function');
32 | expect(Object.keys(callArgs).length).to.equal(3);
33 |
34 | expect(e).to.equal(null);
35 | expect(r).to.deep.equal(validReturn);
36 | done();
37 | });
38 | }));
39 |
40 |
41 | it('should return error', test(function (done) {
42 | let validReturn = {};
43 | let validEndpoint = '/wallets';
44 |
45 | let badRequestError = "Bad Request";
46 | this.stub(bcapi, '_get').yields(badRequestError, null);
47 | bcapi.listWallets(function (e, r) {
48 |
49 | var callArgs = bcapi._get.getCall(0).args;
50 | expect(callArgs[0]).to.equal(validEndpoint);
51 | expect(callArgs[1]).to.deep.equal({});
52 | expect(typeof callArgs[2]).to.equal('function');
53 | expect(Object.keys(callArgs).length).to.equal(3);
54 |
55 | expect(e).to.equal(badRequestError);
56 | expect(r).to.deep.equal(null);
57 | done();
58 | });
59 | }));
60 |
61 | });//end of listWallets
62 |
--------------------------------------------------------------------------------
/tests/unit/microTX.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher microTX Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When data.destination && data.callback_url exist', test(function (done) {
23 |
24 | let data = {}; //micro tx obj
25 | let validData = data;
26 | let params = {};
27 | let validEndpoint = '/txs/micro';
28 |
29 | let validReturn = { data: { key1: 'value', key2: 2 } };
30 | this.stub(bcapi, '_post').yields(null, validReturn);
31 | bcapi.microTX(data, function (e, r) {
32 |
33 | var callArgs = bcapi._post.getCall(0).args;
34 | expect(callArgs[0]).to.equal(validEndpoint);
35 | expect(callArgs[1]).to.deep.equal(params);
36 | expect(callArgs[2]).to.deep.equal(validData);
37 | expect(typeof callArgs[3]).to.equal('function');
38 | expect(Object.keys(callArgs).length).to.equal(4);
39 |
40 | expect(e).to.equal(null);
41 | expect(r).to.deep.equal(validReturn);
42 | done();
43 | });
44 | }));
45 |
46 | });//end of success cases;
47 |
48 | describe('Errors: ', function () {
49 |
50 | it('bubbles up error when _post returns error', test(function (done) {
51 |
52 | let data = {}; //micro tx obj
53 | let validData = data;
54 | let params = {};
55 | let badRequestError = "Bad Request";
56 | let validEndpoint = '/txs/micro';
57 |
58 |
59 | let validReturn = { data: { key1: 'value', key2: 2 } };
60 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
61 | bcapi.microTX(data, function (e, r) {
62 |
63 | var callArgs = bcapi._post.getCall(0).args;
64 | expect(callArgs[0]).to.equal(validEndpoint);
65 | expect(callArgs[1]).to.deep.equal(params);
66 | expect(callArgs[2]).to.deep.equal(validData);
67 | expect(typeof callArgs[3]).to.equal('function');
68 | expect(Object.keys(callArgs).length).to.equal(4);
69 |
70 | expect(e).to.equal(badRequestError);
71 | expect(r).to.deep.equal(validReturn);
72 | done();
73 | });
74 | }));
75 |
76 | it.skip('When micro is null/undefined', function (done) { done(); }); //TODO Error out when micro does not exist
77 |
78 | });//end of error cases;
79 |
80 |
81 |
82 | });//end of microTX
83 |
--------------------------------------------------------------------------------
/tests/unit/newTX.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher newTX Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When tx exist', test(function (done) {
23 |
24 | let tx = {}; //TODO make actual tx
25 |
26 | let validData = tx;
27 | let params = {};
28 | let validEndpoint = '/txs/new';
29 |
30 | let validReturn = { data: { key1: 'value', key2: 2 } };
31 | this.stub(bcapi, '_post').yields(null, validReturn);
32 | bcapi.newTX(tx, function (e, r) {
33 |
34 | var callArgs = bcapi._post.getCall(0).args;
35 | expect(callArgs[0]).to.equal(validEndpoint);
36 | expect(callArgs[1]).to.deep.equal(params);
37 | expect(callArgs[2]).to.deep.equal(validData);
38 | expect(typeof callArgs[3]).to.equal('function');
39 | expect(Object.keys(callArgs).length).to.equal(4);
40 |
41 | expect(e).to.equal(null);
42 | expect(r).to.deep.equal(validReturn);
43 | done();
44 | });
45 | }));
46 |
47 | });//end of success cases;
48 |
49 | describe('Errors: ', function () {
50 |
51 | it('bubbles up error when _post returns error', test(function (done) {
52 |
53 | let tx = {}; //TODO make actual tx
54 | let validData = tx;
55 | let params = {};
56 | let badRequestError = "Bad Request";
57 | let validEndpoint = '/txs/new';
58 |
59 |
60 | let validReturn = { data: { key1: 'value', key2: 2 } };
61 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
62 | bcapi.newTX(tx, function (e, r) {
63 |
64 | var callArgs = bcapi._post.getCall(0).args;
65 | expect(callArgs[0]).to.equal(validEndpoint);
66 | expect(callArgs[1]).to.deep.equal(params);
67 | expect(callArgs[2]).to.deep.equal(validData);
68 | expect(typeof callArgs[3]).to.equal('function');
69 | expect(Object.keys(callArgs).length).to.equal(4);
70 |
71 | expect(e).to.equal(badRequestError);
72 | expect(r).to.deep.equal(validReturn);
73 | done();
74 | });
75 | }));
76 |
77 | it.skip('When tx is null/undefined', function (done) { done(); }); //TODO Error out when tx does not exist
78 |
79 | });//end of error cases;
80 |
81 |
82 |
83 | });//end of newTX
84 |
--------------------------------------------------------------------------------
/tests/unit/pushTX.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher pushTX Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When hex exist', test(function (done) {
23 |
24 | let hex = 'fancyHex';
25 |
26 | let validData = { tx: hex };
27 | let params = {};
28 | let validEndpoint = '/txs/push';
29 |
30 | let validReturn = { data: { key1: 'value', key2: 2 } };
31 | this.stub(bcapi, '_post').yields(null, validReturn);
32 | bcapi.pushTX(hex, function (e, r) {
33 |
34 | var callArgs = bcapi._post.getCall(0).args;
35 | expect(callArgs[0]).to.equal(validEndpoint);
36 | expect(callArgs[1]).to.deep.equal(params);
37 | expect(callArgs[2]).to.deep.equal(validData);
38 | expect(typeof callArgs[3]).to.equal('function');
39 | expect(Object.keys(callArgs).length).to.equal(4);
40 |
41 | expect(e).to.equal(null);
42 | expect(r).to.deep.equal(validReturn);
43 | done();
44 | });
45 | }));
46 |
47 | });//end of success cases;
48 |
49 | describe('Errors: ', function () {
50 |
51 | it('bubbles up error when _post returns error', test(function (done) {
52 |
53 | let hex = 'fancyHex';
54 | let validData = { tx: hex };
55 | let params = {};
56 | let badRequestError = "Bad Request";
57 | let validEndpoint = '/txs/push';
58 |
59 |
60 | let validReturn = { data: { key1: 'value', key2: 2 } };
61 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
62 | bcapi.pushTX(hex, function (e, r) {
63 |
64 | var callArgs = bcapi._post.getCall(0).args;
65 | expect(callArgs[0]).to.equal(validEndpoint);
66 | expect(callArgs[1]).to.deep.equal(params);
67 | expect(callArgs[2]).to.deep.equal(validData);
68 | expect(typeof callArgs[3]).to.equal('function');
69 | expect(Object.keys(callArgs).length).to.equal(4);
70 |
71 | expect(e).to.equal(badRequestError);
72 | expect(r).to.deep.equal(validReturn);
73 | done();
74 | });
75 | }));
76 |
77 | it.skip('When hex is null/undefined', function (done) { done(); }); //TODO Error out when hex does not exist
78 |
79 | });//end of error cases;
80 |
81 |
82 |
83 | });//end of pushTX
84 |
--------------------------------------------------------------------------------
/tests/unit/sendTX.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 | const chai = require('chai');
3 | const sinon = require('sinon');
4 | const sinonTest = require('sinon-test');
5 | var test = sinonTest(sinon);
6 | const expect = require('chai').expect;
7 | let request = require('superagent');
8 |
9 |
10 | let BlockCypher = require('../../lib/bcypher');
11 | let chain = 'btc';
12 | let network = 'main';
13 | let token = process.env.TOKEN;
14 | let bcapi = new BlockCypher(chain, network, token);
15 |
16 |
17 | describe('Blockcypher sendTX Method: ', function () {
18 |
19 |
20 | describe('Success: ', function () {
21 |
22 | it('When txskel exist', test(function (done) {
23 |
24 | let txskel = {}; //TODO make actual txskel
25 |
26 | let validData = txskel;
27 | let params = {};
28 | let validEndpoint = '/txs/send';
29 |
30 | let validReturn = { data: { key1: 'value', key2: 2 } };
31 | this.stub(bcapi, '_post').yields(null, validReturn);
32 | bcapi.sendTX(txskel, function (e, r) {
33 |
34 | var callArgs = bcapi._post.getCall(0).args;
35 | expect(callArgs[0]).to.equal(validEndpoint);
36 | expect(callArgs[1]).to.deep.equal(params);
37 | expect(callArgs[2]).to.deep.equal(validData);
38 | expect(typeof callArgs[3]).to.equal('function');
39 | expect(Object.keys(callArgs).length).to.equal(4);
40 |
41 | expect(e).to.equal(null);
42 | expect(r).to.deep.equal(validReturn);
43 | done();
44 | });
45 | }));
46 |
47 | });//end of success cases;
48 |
49 | describe('Errors: ', function () {
50 |
51 | it('bubbles up error when _post returns error', test(function (done) {
52 |
53 | let txskel = {}; //TODO make actual txskel
54 | let validData = txskel;
55 | let params = {};
56 | let badRequestError = "Bad Request";
57 | let validEndpoint = '/txs/send';
58 |
59 |
60 | let validReturn = { data: { key1: 'value', key2: 2 } };
61 | this.stub(bcapi, '_post').yields(badRequestError, validReturn);
62 | bcapi.sendTX(txskel, function (e, r) {
63 |
64 | var callArgs = bcapi._post.getCall(0).args;
65 | expect(callArgs[0]).to.equal(validEndpoint);
66 | expect(callArgs[1]).to.deep.equal(params);
67 | expect(callArgs[2]).to.deep.equal(validData);
68 | expect(typeof callArgs[3]).to.equal('function');
69 | expect(Object.keys(callArgs).length).to.equal(4);
70 |
71 | expect(e).to.equal(badRequestError);
72 | expect(r).to.deep.equal(validReturn);
73 | done();
74 | });
75 | }));
76 |
77 | it.skip('When tx is null/undefined', function (done) { done(); }); //TODO Error out when tx does not exist
78 |
79 | });//end of error cases;
80 |
81 |
82 |
83 | });//end of sendTX
84 |
--------------------------------------------------------------------------------