├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── run-connector.js ├── send.js └── util.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BTC -> LTC Lightning Demo 2 | > Send payments between Lightning Networks using Interledger 3 | 4 | This demo sends payments between instances of the [Lightning Network](https://lightning.network) on Bitcoin and Litecoin using an [Interledger Connector](https://github.com/interledgerjs/ilp-connector) and the [Lightning Ledger Plugin](https://github.com/interledgerjs/ilp-plugin-lightning). 5 | 6 | ## Prerequisites 7 | 8 | - Node.js >= v7.10.0 9 | - Docker (only to run local Lightning nodes) 10 | 11 | ## Running the Demo 12 | 13 | ### 0. Set Up Lightning Networks 14 | 15 | _You can skip this step if you already have 2 lightning nodes setup on the Bitcoin Lightning Network and 2 on the Litecoin Lightning Network._ 16 | 17 | The following uses BitFury's [`simple-simnet`](https://github.com/BitfuryLightning/simple-simnet) to run local testnets and Lightning daemons for both Bitcoin and Litecoin. 18 | 19 | In one terminal run: 20 | ```sh 21 | git clone https://github.com/BitfuryLightning/simple-simnet 22 | cd simple-simnet 23 | ./bitcoin/build.sh 24 | ./bitcoin/start.sh 25 | ``` 26 | 27 | In another terminal run: 28 | ```sh 29 | cd simple-simnet 30 | ./litecoin/build.sh 31 | ./litecoin/start.sh 32 | ``` 33 | 34 | ### 1. Run an Interledger Connector 35 | 36 | This will run a connector and automatically configure it to connect to the `lnd` nodes started in the previous step. 37 | 38 | In a new terminal run: 39 | ```sh 40 | git clone https://github.com/interledgerjs/ilp-lightning-demo 41 | cd ilp-lightning-demo 42 | npm install 43 | node run-connector.js 44 | ``` 45 | 46 | To configure the connector to use different `lnd` nodes, set the environment variables `BITCOIN_LND_1`, `BITCOIN_LND_2`, `LITECOIN_LND_1`, `LITECOIN_LND_2` to those `lnd` nodes' RPC endpoints. 47 | 48 | ### 2. Send a Payment 49 | 50 | From another terminal run the following to send a payment from one of the Bitcoin `lnd` nodes to a Litecoin `lnd` node. 51 | 52 | ```sh 53 | node send.js 54 | ``` 55 | 56 | (Run with the environment variable `DEBUG=ilp*` to see additional details of what is happening.) 57 | 58 | ## How it Works 59 | 60 | Interledger is a protocol for connecting payment networks or _ledgers_. 61 | 62 | _Connectors_ use [ledger plugins](https://interledger.org/rfcs/0004-ledger-plugin-interface/) to connect to different types of ledgers. This demo uses [`ilp-plugin-lightning`](https://github.com/interledgerjs/ilp-plugin-lightning) to send payments through instances of the Lightning Network. 63 | 64 | The [Interledger packet](https://interledger.org/rfcs/0003-interledger-protocol/) is attached to transfers across individual ledgers and instructs connectors where to forward payments. [Hashed-Timelock _Agreements_ (HTLAs)](https://github.com/interledger/rfcs/blob/master/0022-hashed-timelock-agreements/0022-hashed-timelock-agreements.md), a generalization of HTLCs, are used to secure Interledger payments. 65 | 66 | For more information on Interledger, see [interledger.org](https://interledger.org) or the [Interledger RFCs](https://github.com/interledger/rfcs) for the protocol specs. 67 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ilp-lightning-demo", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/geojson": { 8 | "version": "1.0.2", 9 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.2.tgz", 10 | "integrity": "sha1-sC0QqwKOKSisWSoFGqpJgaGUHQM=" 11 | }, 12 | "@types/node": { 13 | "version": "6.0.85", 14 | "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.85.tgz", 15 | "integrity": "sha512-6qLZpfQFO/g5Ns2e7RsW6brk0Q6Xzwiw7kVVU/XiQNOiJXSojhX76GP457PBYIsNMH2WfcGgcnZB4awFDHrwpA==" 16 | }, 17 | "accepts": { 18 | "version": "1.3.3", 19 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", 20 | "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", 21 | "requires": { 22 | "mime-types": "2.1.16", 23 | "negotiator": "0.6.1" 24 | } 25 | }, 26 | "ajv": { 27 | "version": "4.11.8", 28 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", 29 | "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", 30 | "requires": { 31 | "co": "4.6.0", 32 | "json-stable-stringify": "1.0.1" 33 | } 34 | }, 35 | "ansi-regex": { 36 | "version": "2.1.1", 37 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 38 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 39 | }, 40 | "ansi-styles": { 41 | "version": "2.2.1", 42 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 43 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" 44 | }, 45 | "any-promise": { 46 | "version": "1.3.0", 47 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 48 | "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" 49 | }, 50 | "arguejs": { 51 | "version": "0.2.3", 52 | "resolved": "https://registry.npmjs.org/arguejs/-/arguejs-0.2.3.tgz", 53 | "integrity": "sha1-tvk59f4OPNHz+T4qqSYkJL8xKvc=" 54 | }, 55 | "ascli": { 56 | "version": "1.0.1", 57 | "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz", 58 | "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=", 59 | "requires": { 60 | "colour": "0.7.1", 61 | "optjs": "3.2.2" 62 | } 63 | }, 64 | "asn1": { 65 | "version": "0.2.3", 66 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", 67 | "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" 68 | }, 69 | "assert-plus": { 70 | "version": "0.2.0", 71 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", 72 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=" 73 | }, 74 | "asynckit": { 75 | "version": "0.4.0", 76 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 77 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 78 | }, 79 | "aws-sign2": { 80 | "version": "0.6.0", 81 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", 82 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=" 83 | }, 84 | "aws4": { 85 | "version": "1.6.0", 86 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", 87 | "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" 88 | }, 89 | "backoff": { 90 | "version": "2.5.0", 91 | "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", 92 | "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", 93 | "requires": { 94 | "precond": "0.2.3" 95 | } 96 | }, 97 | "balanced-match": { 98 | "version": "1.0.0", 99 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 100 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 101 | }, 102 | "base64url": { 103 | "version": "2.0.0", 104 | "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", 105 | "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=" 106 | }, 107 | "base64url-adhoc": { 108 | "version": "2.0.1", 109 | "resolved": "https://registry.npmjs.org/base64url-adhoc/-/base64url-adhoc-2.0.1.tgz", 110 | "integrity": "sha1-j5bFIlgHi6yEWziVCF20vUuth+I=", 111 | "requires": { 112 | "@types/node": "6.0.85" 113 | } 114 | }, 115 | "bcrypt-pbkdf": { 116 | "version": "1.0.1", 117 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", 118 | "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", 119 | "optional": true, 120 | "requires": { 121 | "tweetnacl": "0.14.5" 122 | } 123 | }, 124 | "bignumber.js": { 125 | "version": "3.1.2", 126 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-3.1.2.tgz", 127 | "integrity": "sha1-8725mtUmihX8HwvtL7AY4mk/4jY=" 128 | }, 129 | "bindings": { 130 | "version": "1.2.1", 131 | "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz", 132 | "integrity": "sha1-FK1hE4EtLTfXLme0ystLtyZQXxE=", 133 | "optional": true 134 | }, 135 | "bluebird": { 136 | "version": "3.5.0", 137 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", 138 | "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" 139 | }, 140 | "boom": { 141 | "version": "2.10.1", 142 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", 143 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", 144 | "requires": { 145 | "hoek": "2.16.3" 146 | } 147 | }, 148 | "brace-expansion": { 149 | "version": "1.1.8", 150 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 151 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 152 | "requires": { 153 | "balanced-match": "1.0.0", 154 | "concat-map": "0.0.1" 155 | } 156 | }, 157 | "bytebuffer": { 158 | "version": "5.0.1", 159 | "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", 160 | "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", 161 | "requires": { 162 | "long": "3.2.0" 163 | } 164 | }, 165 | "bytes": { 166 | "version": "2.4.0", 167 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", 168 | "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" 169 | }, 170 | "camelcase": { 171 | "version": "2.1.1", 172 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", 173 | "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" 174 | }, 175 | "canonical-json": { 176 | "version": "0.0.4", 177 | "resolved": "https://registry.npmjs.org/canonical-json/-/canonical-json-0.0.4.tgz", 178 | "integrity": "sha1-ZXnAcsPbXEd+xB3JePvyuPQQdKM=" 179 | }, 180 | "caseless": { 181 | "version": "0.12.0", 182 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 183 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 184 | }, 185 | "chai-as-promised": { 186 | "version": "6.0.0", 187 | "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-6.0.0.tgz", 188 | "integrity": "sha1-GgKkM6byTa+sY7nJb6FoTbGqjaY=", 189 | "requires": { 190 | "check-error": "1.0.2" 191 | } 192 | }, 193 | "chalk": { 194 | "version": "1.1.3", 195 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 196 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 197 | "requires": { 198 | "ansi-styles": "2.2.1", 199 | "escape-string-regexp": "1.0.5", 200 | "has-ansi": "2.0.0", 201 | "strip-ansi": "3.0.1", 202 | "supports-color": "2.0.0" 203 | } 204 | }, 205 | "check-error": { 206 | "version": "1.0.2", 207 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", 208 | "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" 209 | }, 210 | "cliui": { 211 | "version": "3.2.0", 212 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", 213 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", 214 | "requires": { 215 | "string-width": "1.0.2", 216 | "strip-ansi": "3.0.1", 217 | "wrap-ansi": "2.1.0" 218 | } 219 | }, 220 | "co": { 221 | "version": "4.6.0", 222 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 223 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" 224 | }, 225 | "co-body": { 226 | "version": "5.1.1", 227 | "resolved": "https://registry.npmjs.org/co-body/-/co-body-5.1.1.tgz", 228 | "integrity": "sha1-2XeB0eM0S6SoIP0YBr3fg0FQUjY=", 229 | "requires": { 230 | "inflation": "2.0.0", 231 | "qs": "6.4.0", 232 | "raw-body": "2.2.0", 233 | "type-is": "1.6.15" 234 | } 235 | }, 236 | "co-defer": { 237 | "version": "1.0.0", 238 | "resolved": "https://registry.npmjs.org/co-defer/-/co-defer-1.0.0.tgz", 239 | "integrity": "sha1-Pkp4eo7tawoh7ih8CU9+jeDTyBg=" 240 | }, 241 | "co-request": { 242 | "version": "1.0.0", 243 | "resolved": "https://registry.npmjs.org/co-request/-/co-request-1.0.0.tgz", 244 | "integrity": "sha1-jrX7ZWwu4eguNsTM/pN2hGQGsmA=", 245 | "requires": { 246 | "request": "2.81.0" 247 | } 248 | }, 249 | "code-point-at": { 250 | "version": "1.1.0", 251 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 252 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 253 | }, 254 | "colour": { 255 | "version": "0.7.1", 256 | "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz", 257 | "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g=" 258 | }, 259 | "combined-stream": { 260 | "version": "1.0.5", 261 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", 262 | "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", 263 | "requires": { 264 | "delayed-stream": "1.0.0" 265 | } 266 | }, 267 | "component-emitter": { 268 | "version": "1.2.1", 269 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 270 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" 271 | }, 272 | "concat-map": { 273 | "version": "0.0.1", 274 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 275 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 276 | }, 277 | "connector-rpc": { 278 | "version": "git+https://github.com/interledgerjs/connector-rpc.git#e82bb90a63e31c368a995aaa0900bba1f7c20184", 279 | "requires": { 280 | "ilp-connector": "21.1.7", 281 | "koa": "2.3.0", 282 | "koa-bodyparser": "4.2.0", 283 | "koa-router": "7.2.1" 284 | } 285 | }, 286 | "content-disposition": { 287 | "version": "0.5.2", 288 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 289 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 290 | }, 291 | "content-type": { 292 | "version": "1.0.2", 293 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", 294 | "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" 295 | }, 296 | "cookiejar": { 297 | "version": "2.1.1", 298 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", 299 | "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=" 300 | }, 301 | "cookies": { 302 | "version": "0.7.0", 303 | "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.0.tgz", 304 | "integrity": "sha1-C8lh2RDDUlSYD8fJ7/XaEgEbvwA=", 305 | "requires": { 306 | "depd": "1.1.1", 307 | "keygrip": "1.0.1" 308 | } 309 | }, 310 | "copy-to": { 311 | "version": "2.0.1", 312 | "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", 313 | "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" 314 | }, 315 | "core-util-is": { 316 | "version": "1.0.2", 317 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 318 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 319 | }, 320 | "cryptiles": { 321 | "version": "2.0.5", 322 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", 323 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", 324 | "requires": { 325 | "boom": "2.10.1" 326 | } 327 | }, 328 | "dashdash": { 329 | "version": "1.14.1", 330 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 331 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 332 | "requires": { 333 | "assert-plus": "1.0.0" 334 | }, 335 | "dependencies": { 336 | "assert-plus": { 337 | "version": "1.0.0", 338 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 339 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 340 | } 341 | } 342 | }, 343 | "debug": { 344 | "version": "2.6.8", 345 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 346 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 347 | "requires": { 348 | "ms": "2.0.0" 349 | } 350 | }, 351 | "decamelize": { 352 | "version": "1.2.0", 353 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 354 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 355 | }, 356 | "deep-equal": { 357 | "version": "1.0.1", 358 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", 359 | "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" 360 | }, 361 | "delayed-stream": { 362 | "version": "1.0.0", 363 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 364 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 365 | }, 366 | "delegates": { 367 | "version": "1.0.0", 368 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 369 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 370 | }, 371 | "depd": { 372 | "version": "1.1.1", 373 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 374 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 375 | }, 376 | "destroy": { 377 | "version": "1.0.4", 378 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 379 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 380 | }, 381 | "dottie": { 382 | "version": "1.1.1", 383 | "resolved": "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz", 384 | "integrity": "sha1-RcKj9IvWUo7u0memmoSOqspvqmo=" 385 | }, 386 | "ecc-jsbn": { 387 | "version": "0.1.1", 388 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", 389 | "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", 390 | "optional": true, 391 | "requires": { 392 | "jsbn": "0.1.1" 393 | } 394 | }, 395 | "ee-first": { 396 | "version": "1.1.1", 397 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 398 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 399 | }, 400 | "err-code": { 401 | "version": "1.1.2", 402 | "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", 403 | "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" 404 | }, 405 | "error-inject": { 406 | "version": "1.0.0", 407 | "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", 408 | "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" 409 | }, 410 | "escape-html": { 411 | "version": "1.0.3", 412 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 413 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 414 | }, 415 | "escape-string-regexp": { 416 | "version": "1.0.5", 417 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 418 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" 419 | }, 420 | "eventemitter2": { 421 | "version": "2.2.2", 422 | "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-2.2.2.tgz", 423 | "integrity": "sha1-QH6nHCAgzVdTggOrfnpr3Pt2ktU=" 424 | }, 425 | "extend": { 426 | "version": "3.0.1", 427 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 428 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" 429 | }, 430 | "extsprintf": { 431 | "version": "1.0.2", 432 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", 433 | "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" 434 | }, 435 | "fast-crc32c": { 436 | "version": "1.0.4", 437 | "resolved": "https://registry.npmjs.org/fast-crc32c/-/fast-crc32c-1.0.4.tgz", 438 | "integrity": "sha1-qLVm6aouI7a0EWzz2NB/X1ItVOM=", 439 | "requires": { 440 | "sse4_crc32": "5.1.1" 441 | } 442 | }, 443 | "five-bells-shared": { 444 | "version": "25.1.1", 445 | "resolved": "https://registry.npmjs.org/five-bells-shared/-/five-bells-shared-25.1.1.tgz", 446 | "integrity": "sha1-OjHm/fm2fgAMzZpuTF0RJh5SK6s=", 447 | "requires": { 448 | "ajv": "4.11.8", 449 | "canonical-json": "0.0.4", 450 | "co": "4.6.0", 451 | "co-body": "5.1.1", 452 | "co-defer": "1.0.0", 453 | "lodash": "4.17.4", 454 | "mag-colored-output": "1.0.1", 455 | "mag-format-message": "0.1.1", 456 | "path-to-regexp": "1.7.0", 457 | "retry-as-promised": "2.3.0", 458 | "through2": "2.0.3", 459 | "tweetnacl": "0.14.5" 460 | } 461 | }, 462 | "for-each": { 463 | "version": "0.3.2", 464 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz", 465 | "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=", 466 | "requires": { 467 | "is-function": "1.0.1" 468 | } 469 | }, 470 | "forever-agent": { 471 | "version": "0.6.1", 472 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 473 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 474 | }, 475 | "form-data": { 476 | "version": "2.1.4", 477 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", 478 | "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", 479 | "requires": { 480 | "asynckit": "0.4.0", 481 | "combined-stream": "1.0.5", 482 | "mime-types": "2.1.16" 483 | } 484 | }, 485 | "formidable": { 486 | "version": "1.1.1", 487 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.1.1.tgz", 488 | "integrity": "sha1-lriIb3w8NQi5Mta9cMTTqI818ak=" 489 | }, 490 | "fresh": { 491 | "version": "0.5.0", 492 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", 493 | "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" 494 | }, 495 | "fs.realpath": { 496 | "version": "1.0.0", 497 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 498 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 499 | }, 500 | "generic-pool": { 501 | "version": "2.4.2", 502 | "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", 503 | "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=" 504 | }, 505 | "getpass": { 506 | "version": "0.1.7", 507 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 508 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 509 | "requires": { 510 | "assert-plus": "1.0.0" 511 | }, 512 | "dependencies": { 513 | "assert-plus": { 514 | "version": "1.0.0", 515 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 516 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 517 | } 518 | } 519 | }, 520 | "glob": { 521 | "version": "7.1.2", 522 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 523 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 524 | "requires": { 525 | "fs.realpath": "1.0.0", 526 | "inflight": "1.0.6", 527 | "inherits": "2.0.3", 528 | "minimatch": "3.0.4", 529 | "once": "1.4.0", 530 | "path-is-absolute": "1.0.1" 531 | } 532 | }, 533 | "grpc": { 534 | "version": "1.4.1", 535 | "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.4.1.tgz", 536 | "integrity": "sha1-PuSoNGphPygjkoyfj5kIG2No7Hw=", 537 | "requires": { 538 | "arguejs": "0.2.3", 539 | "lodash": "4.17.4", 540 | "nan": "2.6.2", 541 | "node-pre-gyp": "0.6.36", 542 | "protobufjs": "5.0.2" 543 | }, 544 | "dependencies": { 545 | "node-pre-gyp": { 546 | "version": "0.6.36", 547 | "bundled": true, 548 | "requires": { 549 | "mkdirp": "0.5.1", 550 | "nopt": "4.0.1", 551 | "npmlog": "4.1.2", 552 | "rc": "1.2.1", 553 | "request": "2.81.0", 554 | "rimraf": "2.6.1", 555 | "semver": "5.3.0", 556 | "tar": "2.2.1", 557 | "tar-pack": "3.4.0" 558 | }, 559 | "dependencies": { 560 | "mkdirp": { 561 | "version": "0.5.1", 562 | "bundled": true, 563 | "requires": { 564 | "minimist": "0.0.8" 565 | }, 566 | "dependencies": { 567 | "minimist": { 568 | "version": "0.0.8", 569 | "bundled": true 570 | } 571 | } 572 | }, 573 | "nopt": { 574 | "version": "4.0.1", 575 | "bundled": true, 576 | "requires": { 577 | "abbrev": "1.1.0", 578 | "osenv": "0.1.4" 579 | }, 580 | "dependencies": { 581 | "abbrev": { 582 | "version": "1.1.0", 583 | "bundled": true 584 | }, 585 | "osenv": { 586 | "version": "0.1.4", 587 | "bundled": true, 588 | "requires": { 589 | "os-homedir": "1.0.2", 590 | "os-tmpdir": "1.0.2" 591 | }, 592 | "dependencies": { 593 | "os-homedir": { 594 | "version": "1.0.2", 595 | "bundled": true 596 | }, 597 | "os-tmpdir": { 598 | "version": "1.0.2", 599 | "bundled": true 600 | } 601 | } 602 | } 603 | } 604 | }, 605 | "npmlog": { 606 | "version": "4.1.2", 607 | "bundled": true, 608 | "requires": { 609 | "are-we-there-yet": "1.1.4", 610 | "console-control-strings": "1.1.0", 611 | "gauge": "2.7.4", 612 | "set-blocking": "2.0.0" 613 | }, 614 | "dependencies": { 615 | "are-we-there-yet": { 616 | "version": "1.1.4", 617 | "bundled": true, 618 | "requires": { 619 | "delegates": "1.0.0", 620 | "readable-stream": "2.3.2" 621 | }, 622 | "dependencies": { 623 | "delegates": { 624 | "version": "1.0.0", 625 | "bundled": true 626 | }, 627 | "readable-stream": { 628 | "version": "2.3.2", 629 | "bundled": true, 630 | "requires": { 631 | "core-util-is": "1.0.2", 632 | "inherits": "2.0.3", 633 | "isarray": "1.0.0", 634 | "process-nextick-args": "1.0.7", 635 | "safe-buffer": "5.1.1", 636 | "string_decoder": "1.0.3", 637 | "util-deprecate": "1.0.2" 638 | }, 639 | "dependencies": { 640 | "core-util-is": { 641 | "version": "1.0.2", 642 | "bundled": true 643 | }, 644 | "inherits": { 645 | "version": "2.0.3", 646 | "bundled": true 647 | }, 648 | "isarray": { 649 | "version": "1.0.0", 650 | "bundled": true 651 | }, 652 | "process-nextick-args": { 653 | "version": "1.0.7", 654 | "bundled": true 655 | }, 656 | "safe-buffer": { 657 | "version": "5.1.1", 658 | "bundled": true 659 | }, 660 | "string_decoder": { 661 | "version": "1.0.3", 662 | "bundled": true, 663 | "requires": { 664 | "safe-buffer": "5.1.1" 665 | } 666 | }, 667 | "util-deprecate": { 668 | "version": "1.0.2", 669 | "bundled": true 670 | } 671 | } 672 | } 673 | } 674 | }, 675 | "console-control-strings": { 676 | "version": "1.1.0", 677 | "bundled": true 678 | }, 679 | "gauge": { 680 | "version": "2.7.4", 681 | "bundled": true, 682 | "requires": { 683 | "aproba": "1.1.2", 684 | "console-control-strings": "1.1.0", 685 | "has-unicode": "2.0.1", 686 | "object-assign": "4.1.1", 687 | "signal-exit": "3.0.2", 688 | "string-width": "1.0.2", 689 | "strip-ansi": "3.0.1", 690 | "wide-align": "1.1.2" 691 | }, 692 | "dependencies": { 693 | "aproba": { 694 | "version": "1.1.2", 695 | "bundled": true 696 | }, 697 | "has-unicode": { 698 | "version": "2.0.1", 699 | "bundled": true 700 | }, 701 | "object-assign": { 702 | "version": "4.1.1", 703 | "bundled": true 704 | }, 705 | "signal-exit": { 706 | "version": "3.0.2", 707 | "bundled": true 708 | }, 709 | "string-width": { 710 | "version": "1.0.2", 711 | "bundled": true, 712 | "requires": { 713 | "code-point-at": "1.1.0", 714 | "is-fullwidth-code-point": "1.0.0", 715 | "strip-ansi": "3.0.1" 716 | }, 717 | "dependencies": { 718 | "code-point-at": { 719 | "version": "1.1.0", 720 | "bundled": true 721 | }, 722 | "is-fullwidth-code-point": { 723 | "version": "1.0.0", 724 | "bundled": true, 725 | "requires": { 726 | "number-is-nan": "1.0.1" 727 | }, 728 | "dependencies": { 729 | "number-is-nan": { 730 | "version": "1.0.1", 731 | "bundled": true 732 | } 733 | } 734 | } 735 | } 736 | }, 737 | "strip-ansi": { 738 | "version": "3.0.1", 739 | "bundled": true, 740 | "requires": { 741 | "ansi-regex": "2.1.1" 742 | }, 743 | "dependencies": { 744 | "ansi-regex": { 745 | "version": "2.1.1", 746 | "bundled": true 747 | } 748 | } 749 | }, 750 | "wide-align": { 751 | "version": "1.1.2", 752 | "bundled": true, 753 | "requires": { 754 | "string-width": "1.0.2" 755 | } 756 | } 757 | } 758 | }, 759 | "set-blocking": { 760 | "version": "2.0.0", 761 | "bundled": true 762 | } 763 | } 764 | }, 765 | "rc": { 766 | "version": "1.2.1", 767 | "bundled": true, 768 | "requires": { 769 | "deep-extend": "0.4.2", 770 | "ini": "1.3.4", 771 | "minimist": "1.2.0", 772 | "strip-json-comments": "2.0.1" 773 | }, 774 | "dependencies": { 775 | "deep-extend": { 776 | "version": "0.4.2", 777 | "bundled": true 778 | }, 779 | "ini": { 780 | "version": "1.3.4", 781 | "bundled": true 782 | }, 783 | "minimist": { 784 | "version": "1.2.0", 785 | "bundled": true 786 | }, 787 | "strip-json-comments": { 788 | "version": "2.0.1", 789 | "bundled": true 790 | } 791 | } 792 | }, 793 | "request": { 794 | "version": "2.81.0", 795 | "bundled": true, 796 | "requires": { 797 | "aws-sign2": "0.6.0", 798 | "aws4": "1.6.0", 799 | "caseless": "0.12.0", 800 | "combined-stream": "1.0.5", 801 | "extend": "3.0.1", 802 | "forever-agent": "0.6.1", 803 | "form-data": "2.1.4", 804 | "har-validator": "4.2.1", 805 | "hawk": "3.1.3", 806 | "http-signature": "1.1.1", 807 | "is-typedarray": "1.0.0", 808 | "isstream": "0.1.2", 809 | "json-stringify-safe": "5.0.1", 810 | "mime-types": "2.1.15", 811 | "oauth-sign": "0.8.2", 812 | "performance-now": "0.2.0", 813 | "qs": "6.4.0", 814 | "safe-buffer": "5.1.1", 815 | "stringstream": "0.0.5", 816 | "tough-cookie": "2.3.2", 817 | "tunnel-agent": "0.6.0", 818 | "uuid": "3.1.0" 819 | }, 820 | "dependencies": { 821 | "aws-sign2": { 822 | "version": "0.6.0", 823 | "bundled": true 824 | }, 825 | "aws4": { 826 | "version": "1.6.0", 827 | "bundled": true 828 | }, 829 | "caseless": { 830 | "version": "0.12.0", 831 | "bundled": true 832 | }, 833 | "combined-stream": { 834 | "version": "1.0.5", 835 | "bundled": true, 836 | "requires": { 837 | "delayed-stream": "1.0.0" 838 | }, 839 | "dependencies": { 840 | "delayed-stream": { 841 | "version": "1.0.0", 842 | "bundled": true 843 | } 844 | } 845 | }, 846 | "extend": { 847 | "version": "3.0.1", 848 | "bundled": true 849 | }, 850 | "forever-agent": { 851 | "version": "0.6.1", 852 | "bundled": true 853 | }, 854 | "form-data": { 855 | "version": "2.1.4", 856 | "bundled": true, 857 | "requires": { 858 | "asynckit": "0.4.0", 859 | "combined-stream": "1.0.5", 860 | "mime-types": "2.1.15" 861 | }, 862 | "dependencies": { 863 | "asynckit": { 864 | "version": "0.4.0", 865 | "bundled": true 866 | } 867 | } 868 | }, 869 | "har-validator": { 870 | "version": "4.2.1", 871 | "bundled": true, 872 | "requires": { 873 | "ajv": "4.11.8", 874 | "har-schema": "1.0.5" 875 | }, 876 | "dependencies": { 877 | "ajv": { 878 | "version": "4.11.8", 879 | "bundled": true, 880 | "requires": { 881 | "co": "4.6.0", 882 | "json-stable-stringify": "1.0.1" 883 | }, 884 | "dependencies": { 885 | "co": { 886 | "version": "4.6.0", 887 | "bundled": true 888 | }, 889 | "json-stable-stringify": { 890 | "version": "1.0.1", 891 | "bundled": true, 892 | "requires": { 893 | "jsonify": "0.0.0" 894 | }, 895 | "dependencies": { 896 | "jsonify": { 897 | "version": "0.0.0", 898 | "bundled": true 899 | } 900 | } 901 | } 902 | } 903 | }, 904 | "har-schema": { 905 | "version": "1.0.5", 906 | "bundled": true 907 | } 908 | } 909 | }, 910 | "hawk": { 911 | "version": "3.1.3", 912 | "bundled": true, 913 | "requires": { 914 | "boom": "2.10.1", 915 | "cryptiles": "2.0.5", 916 | "hoek": "2.16.3", 917 | "sntp": "1.0.9" 918 | }, 919 | "dependencies": { 920 | "boom": { 921 | "version": "2.10.1", 922 | "bundled": true, 923 | "requires": { 924 | "hoek": "2.16.3" 925 | } 926 | }, 927 | "cryptiles": { 928 | "version": "2.0.5", 929 | "bundled": true, 930 | "requires": { 931 | "boom": "2.10.1" 932 | } 933 | }, 934 | "hoek": { 935 | "version": "2.16.3", 936 | "bundled": true 937 | }, 938 | "sntp": { 939 | "version": "1.0.9", 940 | "bundled": true, 941 | "requires": { 942 | "hoek": "2.16.3" 943 | } 944 | } 945 | } 946 | }, 947 | "http-signature": { 948 | "version": "1.1.1", 949 | "bundled": true, 950 | "requires": { 951 | "assert-plus": "0.2.0", 952 | "jsprim": "1.4.0", 953 | "sshpk": "1.13.1" 954 | }, 955 | "dependencies": { 956 | "assert-plus": { 957 | "version": "0.2.0", 958 | "bundled": true 959 | }, 960 | "jsprim": { 961 | "version": "1.4.0", 962 | "bundled": true, 963 | "requires": { 964 | "assert-plus": "1.0.0", 965 | "extsprintf": "1.0.2", 966 | "json-schema": "0.2.3", 967 | "verror": "1.3.6" 968 | }, 969 | "dependencies": { 970 | "assert-plus": { 971 | "version": "1.0.0", 972 | "bundled": true 973 | }, 974 | "extsprintf": { 975 | "version": "1.0.2", 976 | "bundled": true 977 | }, 978 | "json-schema": { 979 | "version": "0.2.3", 980 | "bundled": true 981 | }, 982 | "verror": { 983 | "version": "1.3.6", 984 | "bundled": true, 985 | "requires": { 986 | "extsprintf": "1.0.2" 987 | } 988 | } 989 | } 990 | }, 991 | "sshpk": { 992 | "version": "1.13.1", 993 | "bundled": true, 994 | "requires": { 995 | "asn1": "0.2.3", 996 | "assert-plus": "1.0.0", 997 | "bcrypt-pbkdf": "1.0.1", 998 | "dashdash": "1.14.1", 999 | "ecc-jsbn": "0.1.1", 1000 | "getpass": "0.1.7", 1001 | "jsbn": "0.1.1", 1002 | "tweetnacl": "0.14.5" 1003 | }, 1004 | "dependencies": { 1005 | "asn1": { 1006 | "version": "0.2.3", 1007 | "bundled": true 1008 | }, 1009 | "assert-plus": { 1010 | "version": "1.0.0", 1011 | "bundled": true 1012 | }, 1013 | "bcrypt-pbkdf": { 1014 | "version": "1.0.1", 1015 | "bundled": true, 1016 | "optional": true, 1017 | "requires": { 1018 | "tweetnacl": "0.14.5" 1019 | } 1020 | }, 1021 | "dashdash": { 1022 | "version": "1.14.1", 1023 | "bundled": true, 1024 | "requires": { 1025 | "assert-plus": "1.0.0" 1026 | } 1027 | }, 1028 | "ecc-jsbn": { 1029 | "version": "0.1.1", 1030 | "bundled": true, 1031 | "optional": true, 1032 | "requires": { 1033 | "jsbn": "0.1.1" 1034 | } 1035 | }, 1036 | "getpass": { 1037 | "version": "0.1.7", 1038 | "bundled": true, 1039 | "requires": { 1040 | "assert-plus": "1.0.0" 1041 | } 1042 | }, 1043 | "jsbn": { 1044 | "version": "0.1.1", 1045 | "bundled": true, 1046 | "optional": true 1047 | }, 1048 | "tweetnacl": { 1049 | "version": "0.14.5", 1050 | "bundled": true, 1051 | "optional": true 1052 | } 1053 | } 1054 | } 1055 | } 1056 | }, 1057 | "is-typedarray": { 1058 | "version": "1.0.0", 1059 | "bundled": true 1060 | }, 1061 | "isstream": { 1062 | "version": "0.1.2", 1063 | "bundled": true 1064 | }, 1065 | "json-stringify-safe": { 1066 | "version": "5.0.1", 1067 | "bundled": true 1068 | }, 1069 | "mime-types": { 1070 | "version": "2.1.15", 1071 | "bundled": true, 1072 | "requires": { 1073 | "mime-db": "1.27.0" 1074 | }, 1075 | "dependencies": { 1076 | "mime-db": { 1077 | "version": "1.27.0", 1078 | "bundled": true 1079 | } 1080 | } 1081 | }, 1082 | "oauth-sign": { 1083 | "version": "0.8.2", 1084 | "bundled": true 1085 | }, 1086 | "performance-now": { 1087 | "version": "0.2.0", 1088 | "bundled": true 1089 | }, 1090 | "qs": { 1091 | "version": "6.4.0", 1092 | "bundled": true 1093 | }, 1094 | "safe-buffer": { 1095 | "version": "5.1.1", 1096 | "bundled": true 1097 | }, 1098 | "stringstream": { 1099 | "version": "0.0.5", 1100 | "bundled": true 1101 | }, 1102 | "tough-cookie": { 1103 | "version": "2.3.2", 1104 | "bundled": true, 1105 | "requires": { 1106 | "punycode": "1.4.1" 1107 | }, 1108 | "dependencies": { 1109 | "punycode": { 1110 | "version": "1.4.1", 1111 | "bundled": true 1112 | } 1113 | } 1114 | }, 1115 | "tunnel-agent": { 1116 | "version": "0.6.0", 1117 | "bundled": true, 1118 | "requires": { 1119 | "safe-buffer": "5.1.1" 1120 | } 1121 | }, 1122 | "uuid": { 1123 | "version": "3.1.0", 1124 | "bundled": true 1125 | } 1126 | } 1127 | }, 1128 | "rimraf": { 1129 | "version": "2.6.1", 1130 | "bundled": true, 1131 | "requires": { 1132 | "glob": "7.1.2" 1133 | }, 1134 | "dependencies": { 1135 | "glob": { 1136 | "version": "7.1.2", 1137 | "bundled": true, 1138 | "requires": { 1139 | "fs.realpath": "1.0.0", 1140 | "inflight": "1.0.6", 1141 | "inherits": "2.0.3", 1142 | "minimatch": "3.0.4", 1143 | "once": "1.4.0", 1144 | "path-is-absolute": "1.0.1" 1145 | }, 1146 | "dependencies": { 1147 | "fs.realpath": { 1148 | "version": "1.0.0", 1149 | "bundled": true 1150 | }, 1151 | "inflight": { 1152 | "version": "1.0.6", 1153 | "bundled": true, 1154 | "requires": { 1155 | "once": "1.4.0", 1156 | "wrappy": "1.0.2" 1157 | }, 1158 | "dependencies": { 1159 | "wrappy": { 1160 | "version": "1.0.2", 1161 | "bundled": true 1162 | } 1163 | } 1164 | }, 1165 | "inherits": { 1166 | "version": "2.0.3", 1167 | "bundled": true 1168 | }, 1169 | "minimatch": { 1170 | "version": "3.0.4", 1171 | "bundled": true, 1172 | "requires": { 1173 | "brace-expansion": "1.1.8" 1174 | }, 1175 | "dependencies": { 1176 | "brace-expansion": { 1177 | "version": "1.1.8", 1178 | "bundled": true, 1179 | "requires": { 1180 | "balanced-match": "1.0.0", 1181 | "concat-map": "0.0.1" 1182 | }, 1183 | "dependencies": { 1184 | "balanced-match": { 1185 | "version": "1.0.0", 1186 | "bundled": true 1187 | }, 1188 | "concat-map": { 1189 | "version": "0.0.1", 1190 | "bundled": true 1191 | } 1192 | } 1193 | } 1194 | } 1195 | }, 1196 | "once": { 1197 | "version": "1.4.0", 1198 | "bundled": true, 1199 | "requires": { 1200 | "wrappy": "1.0.2" 1201 | }, 1202 | "dependencies": { 1203 | "wrappy": { 1204 | "version": "1.0.2", 1205 | "bundled": true 1206 | } 1207 | } 1208 | }, 1209 | "path-is-absolute": { 1210 | "version": "1.0.1", 1211 | "bundled": true 1212 | } 1213 | } 1214 | } 1215 | } 1216 | }, 1217 | "semver": { 1218 | "version": "5.3.0", 1219 | "bundled": true 1220 | }, 1221 | "tar": { 1222 | "version": "2.2.1", 1223 | "bundled": true, 1224 | "requires": { 1225 | "block-stream": "0.0.9", 1226 | "fstream": "1.0.11", 1227 | "inherits": "2.0.3" 1228 | }, 1229 | "dependencies": { 1230 | "block-stream": { 1231 | "version": "0.0.9", 1232 | "bundled": true, 1233 | "requires": { 1234 | "inherits": "2.0.3" 1235 | } 1236 | }, 1237 | "fstream": { 1238 | "version": "1.0.11", 1239 | "bundled": true, 1240 | "requires": { 1241 | "graceful-fs": "4.1.11", 1242 | "inherits": "2.0.3", 1243 | "mkdirp": "0.5.1", 1244 | "rimraf": "2.6.1" 1245 | }, 1246 | "dependencies": { 1247 | "graceful-fs": { 1248 | "version": "4.1.11", 1249 | "bundled": true 1250 | } 1251 | } 1252 | }, 1253 | "inherits": { 1254 | "version": "2.0.3", 1255 | "bundled": true 1256 | } 1257 | } 1258 | }, 1259 | "tar-pack": { 1260 | "version": "3.4.0", 1261 | "bundled": true, 1262 | "requires": { 1263 | "debug": "2.6.8", 1264 | "fstream": "1.0.11", 1265 | "fstream-ignore": "1.0.5", 1266 | "once": "1.4.0", 1267 | "readable-stream": "2.3.2", 1268 | "rimraf": "2.6.1", 1269 | "tar": "2.2.1", 1270 | "uid-number": "0.0.6" 1271 | }, 1272 | "dependencies": { 1273 | "debug": { 1274 | "version": "2.6.8", 1275 | "bundled": true, 1276 | "requires": { 1277 | "ms": "2.0.0" 1278 | }, 1279 | "dependencies": { 1280 | "ms": { 1281 | "version": "2.0.0", 1282 | "bundled": true 1283 | } 1284 | } 1285 | }, 1286 | "fstream": { 1287 | "version": "1.0.11", 1288 | "bundled": true, 1289 | "requires": { 1290 | "graceful-fs": "4.1.11", 1291 | "inherits": "2.0.3", 1292 | "mkdirp": "0.5.1", 1293 | "rimraf": "2.6.1" 1294 | }, 1295 | "dependencies": { 1296 | "graceful-fs": { 1297 | "version": "4.1.11", 1298 | "bundled": true 1299 | }, 1300 | "inherits": { 1301 | "version": "2.0.3", 1302 | "bundled": true 1303 | } 1304 | } 1305 | }, 1306 | "fstream-ignore": { 1307 | "version": "1.0.5", 1308 | "bundled": true, 1309 | "requires": { 1310 | "fstream": "1.0.11", 1311 | "inherits": "2.0.3", 1312 | "minimatch": "3.0.4" 1313 | }, 1314 | "dependencies": { 1315 | "inherits": { 1316 | "version": "2.0.3", 1317 | "bundled": true 1318 | }, 1319 | "minimatch": { 1320 | "version": "3.0.4", 1321 | "bundled": true, 1322 | "requires": { 1323 | "brace-expansion": "1.1.8" 1324 | }, 1325 | "dependencies": { 1326 | "brace-expansion": { 1327 | "version": "1.1.8", 1328 | "bundled": true, 1329 | "requires": { 1330 | "balanced-match": "1.0.0", 1331 | "concat-map": "0.0.1" 1332 | }, 1333 | "dependencies": { 1334 | "balanced-match": { 1335 | "version": "1.0.0", 1336 | "bundled": true 1337 | }, 1338 | "concat-map": { 1339 | "version": "0.0.1", 1340 | "bundled": true 1341 | } 1342 | } 1343 | } 1344 | } 1345 | } 1346 | } 1347 | }, 1348 | "once": { 1349 | "version": "1.4.0", 1350 | "bundled": true, 1351 | "requires": { 1352 | "wrappy": "1.0.2" 1353 | }, 1354 | "dependencies": { 1355 | "wrappy": { 1356 | "version": "1.0.2", 1357 | "bundled": true 1358 | } 1359 | } 1360 | }, 1361 | "readable-stream": { 1362 | "version": "2.3.2", 1363 | "bundled": true, 1364 | "requires": { 1365 | "core-util-is": "1.0.2", 1366 | "inherits": "2.0.3", 1367 | "isarray": "1.0.0", 1368 | "process-nextick-args": "1.0.7", 1369 | "safe-buffer": "5.1.1", 1370 | "string_decoder": "1.0.3", 1371 | "util-deprecate": "1.0.2" 1372 | }, 1373 | "dependencies": { 1374 | "core-util-is": { 1375 | "version": "1.0.2", 1376 | "bundled": true 1377 | }, 1378 | "inherits": { 1379 | "version": "2.0.3", 1380 | "bundled": true 1381 | }, 1382 | "isarray": { 1383 | "version": "1.0.0", 1384 | "bundled": true 1385 | }, 1386 | "process-nextick-args": { 1387 | "version": "1.0.7", 1388 | "bundled": true 1389 | }, 1390 | "safe-buffer": { 1391 | "version": "5.1.1", 1392 | "bundled": true 1393 | }, 1394 | "string_decoder": { 1395 | "version": "1.0.3", 1396 | "bundled": true, 1397 | "requires": { 1398 | "safe-buffer": "5.1.1" 1399 | } 1400 | }, 1401 | "util-deprecate": { 1402 | "version": "1.0.2", 1403 | "bundled": true 1404 | } 1405 | } 1406 | }, 1407 | "uid-number": { 1408 | "version": "0.0.6", 1409 | "bundled": true 1410 | } 1411 | } 1412 | } 1413 | } 1414 | } 1415 | } 1416 | }, 1417 | "har-schema": { 1418 | "version": "1.0.5", 1419 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", 1420 | "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" 1421 | }, 1422 | "har-validator": { 1423 | "version": "4.2.1", 1424 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", 1425 | "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", 1426 | "requires": { 1427 | "ajv": "4.11.8", 1428 | "har-schema": "1.0.5" 1429 | } 1430 | }, 1431 | "has-ansi": { 1432 | "version": "2.0.0", 1433 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1434 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1435 | "requires": { 1436 | "ansi-regex": "2.1.1" 1437 | } 1438 | }, 1439 | "hawk": { 1440 | "version": "3.1.3", 1441 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", 1442 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", 1443 | "requires": { 1444 | "boom": "2.10.1", 1445 | "cryptiles": "2.0.5", 1446 | "hoek": "2.16.3", 1447 | "sntp": "1.0.9" 1448 | } 1449 | }, 1450 | "hoek": { 1451 | "version": "2.16.3", 1452 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", 1453 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" 1454 | }, 1455 | "http-assert": { 1456 | "version": "1.3.0", 1457 | "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.3.0.tgz", 1458 | "integrity": "sha1-oxpc+IyHPsu1eWkH1NbxMujAHko=", 1459 | "requires": { 1460 | "deep-equal": "1.0.1", 1461 | "http-errors": "1.6.1" 1462 | } 1463 | }, 1464 | "http-errors": { 1465 | "version": "1.6.1", 1466 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", 1467 | "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", 1468 | "requires": { 1469 | "depd": "1.1.0", 1470 | "inherits": "2.0.3", 1471 | "setprototypeof": "1.0.3", 1472 | "statuses": "1.3.1" 1473 | }, 1474 | "dependencies": { 1475 | "depd": { 1476 | "version": "1.1.0", 1477 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", 1478 | "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" 1479 | } 1480 | } 1481 | }, 1482 | "http-signature": { 1483 | "version": "1.1.1", 1484 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", 1485 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", 1486 | "requires": { 1487 | "assert-plus": "0.2.0", 1488 | "jsprim": "1.4.0", 1489 | "sshpk": "1.13.1" 1490 | } 1491 | }, 1492 | "iconv-lite": { 1493 | "version": "0.4.15", 1494 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", 1495 | "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" 1496 | }, 1497 | "ilp": { 1498 | "version": "11.2.1", 1499 | "resolved": "https://registry.npmjs.org/ilp/-/ilp-11.2.1.tgz", 1500 | "integrity": "sha1-J4lkv6WRtG3oS447O5ktFMpro2A=", 1501 | "requires": { 1502 | "bignumber.js": "2.4.0", 1503 | "co": "4.6.0", 1504 | "debug": "2.6.8", 1505 | "ilp-packet": "1.3.0", 1506 | "moment": "2.18.1", 1507 | "oer-utils": "1.3.3", 1508 | "parse-headers": "2.0.1", 1509 | "superagent": "3.5.2", 1510 | "uuid": "3.1.0" 1511 | }, 1512 | "dependencies": { 1513 | "bignumber.js": { 1514 | "version": "2.4.0", 1515 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", 1516 | "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=" 1517 | } 1518 | } 1519 | }, 1520 | "ilp-connector": { 1521 | "version": "21.1.7", 1522 | "resolved": "https://registry.npmjs.org/ilp-connector/-/ilp-connector-21.1.7.tgz", 1523 | "integrity": "sha1-ZRU7kJSFG2KEk3SUfuhMP9Qn5IU=", 1524 | "requires": { 1525 | "bignumber.js": "3.1.2", 1526 | "co": "4.6.0", 1527 | "co-defer": "1.0.0", 1528 | "co-request": "1.0.0", 1529 | "eventemitter2": "2.2.2", 1530 | "five-bells-shared": "25.1.1", 1531 | "ilp": "11.2.1", 1532 | "ilp-packet": "1.3.0", 1533 | "ilp-plugin-bells": "15.0.1", 1534 | "ilp-routing": "10.1.0", 1535 | "lodash": "4.17.4", 1536 | "moment": "2.18.1", 1537 | "promise-retry": "1.1.1", 1538 | "riverpig": "1.1.2", 1539 | "sequelize": "3.30.4", 1540 | "through2": "2.0.3" 1541 | } 1542 | }, 1543 | "ilp-packet": { 1544 | "version": "1.3.0", 1545 | "resolved": "https://registry.npmjs.org/ilp-packet/-/ilp-packet-1.3.0.tgz", 1546 | "integrity": "sha1-Mmo6u2Cgm4Hyk/GCiRV/2A6o9Uc=", 1547 | "requires": { 1548 | "base64url": "2.0.0", 1549 | "base64url-adhoc": "2.0.1", 1550 | "bignumber.js": "4.0.2", 1551 | "lodash": "4.17.4", 1552 | "long": "3.2.0", 1553 | "oer-utils": "1.3.3" 1554 | }, 1555 | "dependencies": { 1556 | "bignumber.js": { 1557 | "version": "4.0.2", 1558 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.0.2.tgz", 1559 | "integrity": "sha1-LR3DfuWWiGfs6pC22k0W5oYI0h0=" 1560 | } 1561 | } 1562 | }, 1563 | "ilp-plugin-bells": { 1564 | "version": "15.0.1", 1565 | "resolved": "https://registry.npmjs.org/ilp-plugin-bells/-/ilp-plugin-bells-15.0.1.tgz", 1566 | "integrity": "sha1-sS5ojeR53LUWOGCoLcivehT7Y9o=", 1567 | "requires": { 1568 | "base64url": "2.0.0", 1569 | "bignumber.js": "4.0.2", 1570 | "co": "4.6.0", 1571 | "co-request": "1.0.0", 1572 | "debug": "2.6.8", 1573 | "eventemitter2": "2.2.2", 1574 | "five-bells-shared": "25.1.1", 1575 | "ilp-packet": "1.3.0", 1576 | "lodash": "4.17.4", 1577 | "reconnect-core": "1.3.0", 1578 | "uuid": "3.1.0", 1579 | "ws": "1.1.4" 1580 | }, 1581 | "dependencies": { 1582 | "bignumber.js": { 1583 | "version": "4.0.2", 1584 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.0.2.tgz", 1585 | "integrity": "sha1-LR3DfuWWiGfs6pC22k0W5oYI0h0=" 1586 | } 1587 | } 1588 | }, 1589 | "ilp-plugin-lightning": { 1590 | "version": "0.3.0", 1591 | "resolved": "https://registry.npmjs.org/ilp-plugin-lightning/-/ilp-plugin-lightning-0.3.0.tgz", 1592 | "integrity": "sha512-ptdJkg2kmOAshi2WADbbovYJHN+5lILZJgb6eLya1parqXIU1B77pORGop3AJKNHjnU6PNYOioBTed3ratSH8w==", 1593 | "requires": { 1594 | "bignumber.js": "4.0.2", 1595 | "debug": "2.6.8", 1596 | "fast-crc32c": "1.0.4", 1597 | "grpc": "1.4.1", 1598 | "ilp-plugin-payment-channel-framework": "1.0.1", 1599 | "ilp-plugin-shared": "git+https://github.com/interledgerjs/ilp-plugin-shared.git#4576bcd63283006b3892e19f0fc9616e739adf26", 1600 | "int64-buffer": "0.1.9", 1601 | "text-encoding": "0.6.4" 1602 | }, 1603 | "dependencies": { 1604 | "bignumber.js": { 1605 | "version": "4.0.2", 1606 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.0.2.tgz", 1607 | "integrity": "sha1-LR3DfuWWiGfs6pC22k0W5oYI0h0=" 1608 | }, 1609 | "eventemitter2": { 1610 | "version": "4.1.2", 1611 | "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-4.1.2.tgz", 1612 | "integrity": "sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU=" 1613 | }, 1614 | "ilp-plugin-shared": { 1615 | "version": "git+https://github.com/interledgerjs/ilp-plugin-shared.git#4576bcd63283006b3892e19f0fc9616e739adf26", 1616 | "requires": { 1617 | "bignumber.js": "4.0.2", 1618 | "co-request": "1.0.0", 1619 | "debug": "2.6.8", 1620 | "eventemitter2": "4.1.2" 1621 | } 1622 | } 1623 | } 1624 | }, 1625 | "ilp-plugin-payment-channel-framework": { 1626 | "version": "1.0.1", 1627 | "resolved": "https://registry.npmjs.org/ilp-plugin-payment-channel-framework/-/ilp-plugin-payment-channel-framework-1.0.1.tgz", 1628 | "integrity": "sha1-sGchuqYy9atNj/gN9XRwhu3BMN4=", 1629 | "requires": { 1630 | "base64url": "2.0.0", 1631 | "bignumber.js": "2.4.0", 1632 | "chai-as-promised": "6.0.0", 1633 | "debug": "2.6.8", 1634 | "deep-equal": "1.0.1", 1635 | "eventemitter2": "2.2.2", 1636 | "ilp-packet": "1.3.0", 1637 | "superagent": "3.5.2", 1638 | "uuid4": "1.0.0" 1639 | }, 1640 | "dependencies": { 1641 | "bignumber.js": { 1642 | "version": "2.4.0", 1643 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-2.4.0.tgz", 1644 | "integrity": "sha1-g4qZLan51zfg9LLbC+YrsJ3Qxeg=" 1645 | } 1646 | } 1647 | }, 1648 | "ilp-plugin-shared": { 1649 | "version": "git+https://github.com/interledgerjs/ilp-plugin-shared.git#4576bcd63283006b3892e19f0fc9616e739adf26", 1650 | "requires": { 1651 | "bignumber.js": "4.0.2", 1652 | "co-request": "1.0.0", 1653 | "debug": "2.6.8", 1654 | "eventemitter2": "4.1.2" 1655 | }, 1656 | "dependencies": { 1657 | "bignumber.js": { 1658 | "version": "4.0.2", 1659 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.0.2.tgz", 1660 | "integrity": "sha1-LR3DfuWWiGfs6pC22k0W5oYI0h0=" 1661 | }, 1662 | "eventemitter2": { 1663 | "version": "4.1.2", 1664 | "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-4.1.2.tgz", 1665 | "integrity": "sha1-DhqEd6+CGm7zmVsxG/dMI6UkfxU=" 1666 | } 1667 | } 1668 | }, 1669 | "ilp-routing": { 1670 | "version": "10.1.0", 1671 | "resolved": "https://registry.npmjs.org/ilp-routing/-/ilp-routing-10.1.0.tgz", 1672 | "integrity": "sha1-6Z+LB7CxqU3pCKJ3T5YkkqAvNdA=", 1673 | "requires": { 1674 | "bignumber.js": "4.0.2", 1675 | "debug": "2.6.8", 1676 | "lodash": "4.17.4", 1677 | "long": "3.2.0", 1678 | "vis-why": "1.2.2" 1679 | }, 1680 | "dependencies": { 1681 | "bignumber.js": { 1682 | "version": "4.0.2", 1683 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.0.2.tgz", 1684 | "integrity": "sha1-LR3DfuWWiGfs6pC22k0W5oYI0h0=" 1685 | } 1686 | } 1687 | }, 1688 | "inflation": { 1689 | "version": "2.0.0", 1690 | "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz", 1691 | "integrity": "sha1-i0F+R8KPklpFEz2RTKH9OJEH8w8=" 1692 | }, 1693 | "inflection": { 1694 | "version": "1.12.0", 1695 | "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", 1696 | "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" 1697 | }, 1698 | "inflight": { 1699 | "version": "1.0.6", 1700 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1701 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1702 | "requires": { 1703 | "once": "1.4.0", 1704 | "wrappy": "1.0.2" 1705 | } 1706 | }, 1707 | "inherits": { 1708 | "version": "2.0.3", 1709 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1710 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1711 | }, 1712 | "int64-buffer": { 1713 | "version": "0.1.9", 1714 | "resolved": "https://registry.npmjs.org/int64-buffer/-/int64-buffer-0.1.9.tgz", 1715 | "integrity": "sha1-ngOdoEOyT3ixlrKD4EZT716ZD2E=" 1716 | }, 1717 | "invert-kv": { 1718 | "version": "1.0.0", 1719 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", 1720 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" 1721 | }, 1722 | "is-fullwidth-code-point": { 1723 | "version": "1.0.0", 1724 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 1725 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 1726 | "requires": { 1727 | "number-is-nan": "1.0.1" 1728 | } 1729 | }, 1730 | "is-function": { 1731 | "version": "1.0.1", 1732 | "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", 1733 | "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" 1734 | }, 1735 | "is-generator-function": { 1736 | "version": "1.0.6", 1737 | "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.6.tgz", 1738 | "integrity": "sha1-nnFlPNFf/zQcecQVFGChMdMen8Q=" 1739 | }, 1740 | "is-typedarray": { 1741 | "version": "1.0.0", 1742 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1743 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 1744 | }, 1745 | "isarray": { 1746 | "version": "1.0.0", 1747 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1748 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 1749 | }, 1750 | "isstream": { 1751 | "version": "0.1.2", 1752 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1753 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 1754 | }, 1755 | "jsbn": { 1756 | "version": "0.1.1", 1757 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1758 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1759 | "optional": true 1760 | }, 1761 | "json-schema": { 1762 | "version": "0.2.3", 1763 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1764 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 1765 | }, 1766 | "json-stable-stringify": { 1767 | "version": "1.0.1", 1768 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", 1769 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", 1770 | "requires": { 1771 | "jsonify": "0.0.0" 1772 | } 1773 | }, 1774 | "json-stringify-safe": { 1775 | "version": "5.0.1", 1776 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1777 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 1778 | }, 1779 | "jsonify": { 1780 | "version": "0.0.0", 1781 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", 1782 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" 1783 | }, 1784 | "jsprim": { 1785 | "version": "1.4.0", 1786 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", 1787 | "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", 1788 | "requires": { 1789 | "assert-plus": "1.0.0", 1790 | "extsprintf": "1.0.2", 1791 | "json-schema": "0.2.3", 1792 | "verror": "1.3.6" 1793 | }, 1794 | "dependencies": { 1795 | "assert-plus": { 1796 | "version": "1.0.0", 1797 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 1798 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 1799 | } 1800 | } 1801 | }, 1802 | "keygrip": { 1803 | "version": "1.0.1", 1804 | "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.1.tgz", 1805 | "integrity": "sha1-sC+kgW7vIajEs1yp5Skh/8iaMOk=" 1806 | }, 1807 | "koa": { 1808 | "version": "2.3.0", 1809 | "resolved": "https://registry.npmjs.org/koa/-/koa-2.3.0.tgz", 1810 | "integrity": "sha1-nh6OTaQBg5xXuFJ+rcV/dhJ1Vac=", 1811 | "requires": { 1812 | "accepts": "1.3.3", 1813 | "content-disposition": "0.5.2", 1814 | "content-type": "1.0.2", 1815 | "cookies": "0.7.0", 1816 | "debug": "2.6.8", 1817 | "delegates": "1.0.0", 1818 | "depd": "1.1.1", 1819 | "destroy": "1.0.4", 1820 | "error-inject": "1.0.0", 1821 | "escape-html": "1.0.3", 1822 | "fresh": "0.5.0", 1823 | "http-assert": "1.3.0", 1824 | "http-errors": "1.6.1", 1825 | "is-generator-function": "1.0.6", 1826 | "koa-compose": "4.0.0", 1827 | "koa-convert": "1.2.0", 1828 | "koa-is-json": "1.0.0", 1829 | "mime-types": "2.1.16", 1830 | "on-finished": "2.3.0", 1831 | "only": "0.0.2", 1832 | "parseurl": "1.3.1", 1833 | "statuses": "1.3.1", 1834 | "type-is": "1.6.15", 1835 | "vary": "1.1.1" 1836 | } 1837 | }, 1838 | "koa-bodyparser": { 1839 | "version": "4.2.0", 1840 | "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.2.0.tgz", 1841 | "integrity": "sha1-vObgi8Zfhwm20fqpQRx/DYk4qlQ=", 1842 | "requires": { 1843 | "co-body": "5.1.1", 1844 | "copy-to": "2.0.1" 1845 | } 1846 | }, 1847 | "koa-compose": { 1848 | "version": "4.0.0", 1849 | "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.0.0.tgz", 1850 | "integrity": "sha1-KAClE9nDYe8NY4UrA45Pby1adzw=" 1851 | }, 1852 | "koa-convert": { 1853 | "version": "1.2.0", 1854 | "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", 1855 | "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", 1856 | "requires": { 1857 | "co": "4.6.0", 1858 | "koa-compose": "3.2.1" 1859 | }, 1860 | "dependencies": { 1861 | "koa-compose": { 1862 | "version": "3.2.1", 1863 | "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", 1864 | "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", 1865 | "requires": { 1866 | "any-promise": "1.3.0" 1867 | } 1868 | } 1869 | } 1870 | }, 1871 | "koa-is-json": { 1872 | "version": "1.0.0", 1873 | "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", 1874 | "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" 1875 | }, 1876 | "koa-router": { 1877 | "version": "7.2.1", 1878 | "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-7.2.1.tgz", 1879 | "integrity": "sha1-tApKs8attLQIld69AKnGQDBOMDk=", 1880 | "requires": { 1881 | "debug": "2.6.8", 1882 | "http-errors": "1.6.1", 1883 | "koa-compose": "3.2.1", 1884 | "methods": "1.1.2", 1885 | "path-to-regexp": "1.7.0" 1886 | }, 1887 | "dependencies": { 1888 | "koa-compose": { 1889 | "version": "3.2.1", 1890 | "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", 1891 | "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", 1892 | "requires": { 1893 | "any-promise": "1.3.0" 1894 | } 1895 | } 1896 | } 1897 | }, 1898 | "lcid": { 1899 | "version": "1.0.0", 1900 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", 1901 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", 1902 | "requires": { 1903 | "invert-kv": "1.0.0" 1904 | } 1905 | }, 1906 | "lodash": { 1907 | "version": "4.17.4", 1908 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", 1909 | "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" 1910 | }, 1911 | "long": { 1912 | "version": "3.2.0", 1913 | "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", 1914 | "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" 1915 | }, 1916 | "mag-colored-output": { 1917 | "version": "1.0.1", 1918 | "resolved": "https://registry.npmjs.org/mag-colored-output/-/mag-colored-output-1.0.1.tgz", 1919 | "integrity": "sha1-YSv2iwZ8icZ3jaFYcG80s+o4WL4=", 1920 | "requires": { 1921 | "chalk": "1.1.3", 1922 | "readable-stream": "2.3.3" 1923 | } 1924 | }, 1925 | "mag-format-message": { 1926 | "version": "0.1.1", 1927 | "resolved": "https://registry.npmjs.org/mag-format-message/-/mag-format-message-0.1.1.tgz", 1928 | "integrity": "sha1-H8rfsrlUc5f4d9++7yWSq28b3I0=", 1929 | "requires": { 1930 | "readable-stream": "1.1.14" 1931 | }, 1932 | "dependencies": { 1933 | "isarray": { 1934 | "version": "0.0.1", 1935 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1936 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 1937 | }, 1938 | "readable-stream": { 1939 | "version": "1.1.14", 1940 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 1941 | "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", 1942 | "requires": { 1943 | "core-util-is": "1.0.2", 1944 | "inherits": "2.0.3", 1945 | "isarray": "0.0.1", 1946 | "string_decoder": "0.10.31" 1947 | } 1948 | }, 1949 | "string_decoder": { 1950 | "version": "0.10.31", 1951 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1952 | "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" 1953 | } 1954 | } 1955 | }, 1956 | "media-typer": { 1957 | "version": "0.3.0", 1958 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1959 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1960 | }, 1961 | "methods": { 1962 | "version": "1.1.2", 1963 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1964 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1965 | }, 1966 | "mime": { 1967 | "version": "1.3.6", 1968 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", 1969 | "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=" 1970 | }, 1971 | "mime-db": { 1972 | "version": "1.29.0", 1973 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", 1974 | "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" 1975 | }, 1976 | "mime-types": { 1977 | "version": "2.1.16", 1978 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", 1979 | "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", 1980 | "requires": { 1981 | "mime-db": "1.29.0" 1982 | } 1983 | }, 1984 | "minimatch": { 1985 | "version": "3.0.4", 1986 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1987 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1988 | "requires": { 1989 | "brace-expansion": "1.1.8" 1990 | } 1991 | }, 1992 | "moment": { 1993 | "version": "2.18.1", 1994 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", 1995 | "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" 1996 | }, 1997 | "moment-timezone": { 1998 | "version": "0.5.13", 1999 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.13.tgz", 2000 | "integrity": "sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=", 2001 | "requires": { 2002 | "moment": "2.18.1" 2003 | } 2004 | }, 2005 | "ms": { 2006 | "version": "2.0.0", 2007 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 2008 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 2009 | }, 2010 | "nan": { 2011 | "version": "2.6.2", 2012 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.6.2.tgz", 2013 | "integrity": "sha1-5P805slf37WuzAjeZZb0NgWn20U=" 2014 | }, 2015 | "negotiator": { 2016 | "version": "0.6.1", 2017 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 2018 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 2019 | }, 2020 | "number-is-nan": { 2021 | "version": "1.0.1", 2022 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 2023 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 2024 | }, 2025 | "oauth-sign": { 2026 | "version": "0.8.2", 2027 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", 2028 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" 2029 | }, 2030 | "oer-utils": { 2031 | "version": "1.3.3", 2032 | "resolved": "https://registry.npmjs.org/oer-utils/-/oer-utils-1.3.3.tgz", 2033 | "integrity": "sha1-Uf9svvAm9i6wGoUhF8zgdQS6E5s=" 2034 | }, 2035 | "on-finished": { 2036 | "version": "2.3.0", 2037 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 2038 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 2039 | "requires": { 2040 | "ee-first": "1.1.1" 2041 | } 2042 | }, 2043 | "once": { 2044 | "version": "1.4.0", 2045 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2046 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2047 | "requires": { 2048 | "wrappy": "1.0.2" 2049 | } 2050 | }, 2051 | "only": { 2052 | "version": "0.0.2", 2053 | "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", 2054 | "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" 2055 | }, 2056 | "options": { 2057 | "version": "0.0.6", 2058 | "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", 2059 | "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" 2060 | }, 2061 | "optjs": { 2062 | "version": "3.2.2", 2063 | "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz", 2064 | "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4=" 2065 | }, 2066 | "os-locale": { 2067 | "version": "1.4.0", 2068 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", 2069 | "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", 2070 | "requires": { 2071 | "lcid": "1.0.0" 2072 | } 2073 | }, 2074 | "parse-headers": { 2075 | "version": "2.0.1", 2076 | "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", 2077 | "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", 2078 | "requires": { 2079 | "for-each": "0.3.2", 2080 | "trim": "0.0.1" 2081 | } 2082 | }, 2083 | "parseurl": { 2084 | "version": "1.3.1", 2085 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", 2086 | "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" 2087 | }, 2088 | "path-is-absolute": { 2089 | "version": "1.0.1", 2090 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2091 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 2092 | }, 2093 | "path-to-regexp": { 2094 | "version": "1.7.0", 2095 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", 2096 | "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", 2097 | "requires": { 2098 | "isarray": "0.0.1" 2099 | }, 2100 | "dependencies": { 2101 | "isarray": { 2102 | "version": "0.0.1", 2103 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 2104 | "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" 2105 | } 2106 | } 2107 | }, 2108 | "performance-now": { 2109 | "version": "0.2.0", 2110 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", 2111 | "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" 2112 | }, 2113 | "precond": { 2114 | "version": "0.2.3", 2115 | "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", 2116 | "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=" 2117 | }, 2118 | "process-nextick-args": { 2119 | "version": "1.0.7", 2120 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 2121 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" 2122 | }, 2123 | "promise-retry": { 2124 | "version": "1.1.1", 2125 | "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", 2126 | "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", 2127 | "requires": { 2128 | "err-code": "1.1.2", 2129 | "retry": "0.10.1" 2130 | } 2131 | }, 2132 | "protobufjs": { 2133 | "version": "5.0.2", 2134 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.2.tgz", 2135 | "integrity": "sha1-WXSNfc8D0tsiwT2p/rAk4Wq4DJE=", 2136 | "requires": { 2137 | "ascli": "1.0.1", 2138 | "bytebuffer": "5.0.1", 2139 | "glob": "7.1.2", 2140 | "yargs": "3.32.0" 2141 | } 2142 | }, 2143 | "punycode": { 2144 | "version": "1.4.1", 2145 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2146 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" 2147 | }, 2148 | "qs": { 2149 | "version": "6.4.0", 2150 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", 2151 | "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" 2152 | }, 2153 | "raw-body": { 2154 | "version": "2.2.0", 2155 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", 2156 | "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", 2157 | "requires": { 2158 | "bytes": "2.4.0", 2159 | "iconv-lite": "0.4.15", 2160 | "unpipe": "1.0.0" 2161 | } 2162 | }, 2163 | "readable-stream": { 2164 | "version": "2.3.3", 2165 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 2166 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 2167 | "requires": { 2168 | "core-util-is": "1.0.2", 2169 | "inherits": "2.0.3", 2170 | "isarray": "1.0.0", 2171 | "process-nextick-args": "1.0.7", 2172 | "safe-buffer": "5.1.1", 2173 | "string_decoder": "1.0.3", 2174 | "util-deprecate": "1.0.2" 2175 | } 2176 | }, 2177 | "reconnect-core": { 2178 | "version": "1.3.0", 2179 | "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-1.3.0.tgz", 2180 | "integrity": "sha1-+65SkZp4d9hE4yRtAaLyZwHIM8g=", 2181 | "requires": { 2182 | "backoff": "2.5.0" 2183 | } 2184 | }, 2185 | "request": { 2186 | "version": "2.81.0", 2187 | "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", 2188 | "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", 2189 | "requires": { 2190 | "aws-sign2": "0.6.0", 2191 | "aws4": "1.6.0", 2192 | "caseless": "0.12.0", 2193 | "combined-stream": "1.0.5", 2194 | "extend": "3.0.1", 2195 | "forever-agent": "0.6.1", 2196 | "form-data": "2.1.4", 2197 | "har-validator": "4.2.1", 2198 | "hawk": "3.1.3", 2199 | "http-signature": "1.1.1", 2200 | "is-typedarray": "1.0.0", 2201 | "isstream": "0.1.2", 2202 | "json-stringify-safe": "5.0.1", 2203 | "mime-types": "2.1.16", 2204 | "oauth-sign": "0.8.2", 2205 | "performance-now": "0.2.0", 2206 | "qs": "6.4.0", 2207 | "safe-buffer": "5.1.1", 2208 | "stringstream": "0.0.5", 2209 | "tough-cookie": "2.3.2", 2210 | "tunnel-agent": "0.6.0", 2211 | "uuid": "3.1.0" 2212 | } 2213 | }, 2214 | "retry": { 2215 | "version": "0.10.1", 2216 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", 2217 | "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=" 2218 | }, 2219 | "retry-as-promised": { 2220 | "version": "2.3.0", 2221 | "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.0.tgz", 2222 | "integrity": "sha1-J79czZmZMrMWZWloJc82MMJ8Vi0=", 2223 | "requires": { 2224 | "bluebird": "3.5.0", 2225 | "debug": "2.6.8" 2226 | } 2227 | }, 2228 | "riverpig": { 2229 | "version": "1.1.2", 2230 | "resolved": "https://registry.npmjs.org/riverpig/-/riverpig-1.1.2.tgz", 2231 | "integrity": "sha1-hju+UE8dFzVgvKaqitOHOrX4eNA=", 2232 | "requires": { 2233 | "chalk": "1.1.3", 2234 | "debug": "2.6.8" 2235 | } 2236 | }, 2237 | "safe-buffer": { 2238 | "version": "5.1.1", 2239 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 2240 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 2241 | }, 2242 | "semver": { 2243 | "version": "5.4.1", 2244 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 2245 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" 2246 | }, 2247 | "sequelize": { 2248 | "version": "3.30.4", 2249 | "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-3.30.4.tgz", 2250 | "integrity": "sha1-vaLfHjGFSwmeQUmhEen8Clyh0aQ=", 2251 | "requires": { 2252 | "bluebird": "3.5.0", 2253 | "depd": "1.1.1", 2254 | "dottie": "1.1.1", 2255 | "generic-pool": "2.4.2", 2256 | "inflection": "1.12.0", 2257 | "lodash": "4.12.0", 2258 | "moment": "2.18.1", 2259 | "moment-timezone": "0.5.13", 2260 | "retry-as-promised": "2.3.0", 2261 | "semver": "5.4.1", 2262 | "shimmer": "1.1.0", 2263 | "terraformer-wkt-parser": "1.1.2", 2264 | "toposort-class": "1.0.1", 2265 | "uuid": "3.1.0", 2266 | "validator": "5.7.0", 2267 | "wkx": "0.2.0" 2268 | }, 2269 | "dependencies": { 2270 | "lodash": { 2271 | "version": "4.12.0", 2272 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.12.0.tgz", 2273 | "integrity": "sha1-K9bcRqBA9Z5obJcu0h2T3FkFMlg=" 2274 | } 2275 | } 2276 | }, 2277 | "setprototypeof": { 2278 | "version": "1.0.3", 2279 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 2280 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 2281 | }, 2282 | "shimmer": { 2283 | "version": "1.1.0", 2284 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", 2285 | "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=" 2286 | }, 2287 | "sntp": { 2288 | "version": "1.0.9", 2289 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", 2290 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", 2291 | "requires": { 2292 | "hoek": "2.16.3" 2293 | } 2294 | }, 2295 | "sqlite3": { 2296 | "version": "3.1.8", 2297 | "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.8.tgz", 2298 | "integrity": "sha1-TLz5Zdi5AdGxAVy8f8QVquFX36o=", 2299 | "requires": { 2300 | "nan": "2.4.0", 2301 | "node-pre-gyp": "0.6.31" 2302 | }, 2303 | "dependencies": { 2304 | "nan": { 2305 | "version": "2.4.0", 2306 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.4.0.tgz", 2307 | "integrity": "sha1-+zxZ1F/k7/4hXwuJD4rfbrMtIjI=" 2308 | }, 2309 | "node-pre-gyp": { 2310 | "version": "0.6.31", 2311 | "bundled": true, 2312 | "requires": { 2313 | "mkdirp": "0.5.1", 2314 | "nopt": "3.0.6", 2315 | "npmlog": "4.0.0", 2316 | "rc": "1.1.6", 2317 | "request": "2.76.0", 2318 | "rimraf": "2.5.4", 2319 | "semver": "5.3.0", 2320 | "tar": "2.2.1", 2321 | "tar-pack": "3.3.0" 2322 | }, 2323 | "dependencies": { 2324 | "mkdirp": { 2325 | "version": "0.5.1", 2326 | "bundled": true, 2327 | "requires": { 2328 | "minimist": "0.0.8" 2329 | }, 2330 | "dependencies": { 2331 | "minimist": { 2332 | "version": "0.0.8", 2333 | "bundled": true 2334 | } 2335 | } 2336 | }, 2337 | "nopt": { 2338 | "version": "3.0.6", 2339 | "bundled": true, 2340 | "requires": { 2341 | "abbrev": "1.0.9" 2342 | }, 2343 | "dependencies": { 2344 | "abbrev": { 2345 | "version": "1.0.9", 2346 | "bundled": true 2347 | } 2348 | } 2349 | }, 2350 | "npmlog": { 2351 | "version": "4.0.0", 2352 | "bundled": true, 2353 | "requires": { 2354 | "are-we-there-yet": "1.1.2", 2355 | "console-control-strings": "1.1.0", 2356 | "gauge": "2.6.0", 2357 | "set-blocking": "2.0.0" 2358 | }, 2359 | "dependencies": { 2360 | "are-we-there-yet": { 2361 | "version": "1.1.2", 2362 | "bundled": true, 2363 | "requires": { 2364 | "delegates": "1.0.0", 2365 | "readable-stream": "2.1.5" 2366 | }, 2367 | "dependencies": { 2368 | "delegates": { 2369 | "version": "1.0.0", 2370 | "bundled": true 2371 | }, 2372 | "readable-stream": { 2373 | "version": "2.1.5", 2374 | "bundled": true, 2375 | "requires": { 2376 | "buffer-shims": "1.0.0", 2377 | "core-util-is": "1.0.2", 2378 | "inherits": "2.0.3", 2379 | "isarray": "1.0.0", 2380 | "process-nextick-args": "1.0.7", 2381 | "string_decoder": "0.10.31", 2382 | "util-deprecate": "1.0.2" 2383 | }, 2384 | "dependencies": { 2385 | "buffer-shims": { 2386 | "version": "1.0.0", 2387 | "bundled": true 2388 | }, 2389 | "core-util-is": { 2390 | "version": "1.0.2", 2391 | "bundled": true 2392 | }, 2393 | "inherits": { 2394 | "version": "2.0.3", 2395 | "bundled": true 2396 | }, 2397 | "isarray": { 2398 | "version": "1.0.0", 2399 | "bundled": true 2400 | }, 2401 | "process-nextick-args": { 2402 | "version": "1.0.7", 2403 | "bundled": true 2404 | }, 2405 | "string_decoder": { 2406 | "version": "0.10.31", 2407 | "bundled": true 2408 | }, 2409 | "util-deprecate": { 2410 | "version": "1.0.2", 2411 | "bundled": true 2412 | } 2413 | } 2414 | } 2415 | } 2416 | }, 2417 | "console-control-strings": { 2418 | "version": "1.1.0", 2419 | "bundled": true 2420 | }, 2421 | "gauge": { 2422 | "version": "2.6.0", 2423 | "bundled": true, 2424 | "requires": { 2425 | "aproba": "1.0.4", 2426 | "console-control-strings": "1.1.0", 2427 | "has-color": "0.1.7", 2428 | "has-unicode": "2.0.1", 2429 | "object-assign": "4.1.0", 2430 | "signal-exit": "3.0.1", 2431 | "string-width": "1.0.2", 2432 | "strip-ansi": "3.0.1", 2433 | "wide-align": "1.1.0" 2434 | }, 2435 | "dependencies": { 2436 | "aproba": { 2437 | "version": "1.0.4", 2438 | "bundled": true 2439 | }, 2440 | "has-color": { 2441 | "version": "0.1.7", 2442 | "bundled": true 2443 | }, 2444 | "has-unicode": { 2445 | "version": "2.0.1", 2446 | "bundled": true 2447 | }, 2448 | "object-assign": { 2449 | "version": "4.1.0", 2450 | "bundled": true 2451 | }, 2452 | "signal-exit": { 2453 | "version": "3.0.1", 2454 | "bundled": true 2455 | }, 2456 | "string-width": { 2457 | "version": "1.0.2", 2458 | "bundled": true, 2459 | "requires": { 2460 | "code-point-at": "1.0.1", 2461 | "is-fullwidth-code-point": "1.0.0", 2462 | "strip-ansi": "3.0.1" 2463 | }, 2464 | "dependencies": { 2465 | "code-point-at": { 2466 | "version": "1.0.1", 2467 | "bundled": true, 2468 | "requires": { 2469 | "number-is-nan": "1.0.1" 2470 | }, 2471 | "dependencies": { 2472 | "number-is-nan": { 2473 | "version": "1.0.1", 2474 | "bundled": true 2475 | } 2476 | } 2477 | }, 2478 | "is-fullwidth-code-point": { 2479 | "version": "1.0.0", 2480 | "bundled": true, 2481 | "requires": { 2482 | "number-is-nan": "1.0.1" 2483 | }, 2484 | "dependencies": { 2485 | "number-is-nan": { 2486 | "version": "1.0.1", 2487 | "bundled": true 2488 | } 2489 | } 2490 | } 2491 | } 2492 | }, 2493 | "strip-ansi": { 2494 | "version": "3.0.1", 2495 | "bundled": true, 2496 | "requires": { 2497 | "ansi-regex": "2.0.0" 2498 | }, 2499 | "dependencies": { 2500 | "ansi-regex": { 2501 | "version": "2.0.0", 2502 | "bundled": true 2503 | } 2504 | } 2505 | }, 2506 | "wide-align": { 2507 | "version": "1.1.0", 2508 | "bundled": true, 2509 | "requires": { 2510 | "string-width": "1.0.2" 2511 | } 2512 | } 2513 | } 2514 | }, 2515 | "set-blocking": { 2516 | "version": "2.0.0", 2517 | "bundled": true 2518 | } 2519 | } 2520 | }, 2521 | "rc": { 2522 | "version": "1.1.6", 2523 | "bundled": true, 2524 | "requires": { 2525 | "deep-extend": "0.4.1", 2526 | "ini": "1.3.4", 2527 | "minimist": "1.2.0", 2528 | "strip-json-comments": "1.0.4" 2529 | }, 2530 | "dependencies": { 2531 | "deep-extend": { 2532 | "version": "0.4.1", 2533 | "bundled": true 2534 | }, 2535 | "ini": { 2536 | "version": "1.3.4", 2537 | "bundled": true 2538 | }, 2539 | "minimist": { 2540 | "version": "1.2.0", 2541 | "bundled": true 2542 | }, 2543 | "strip-json-comments": { 2544 | "version": "1.0.4", 2545 | "bundled": true 2546 | } 2547 | } 2548 | }, 2549 | "request": { 2550 | "version": "2.76.0", 2551 | "bundled": true, 2552 | "requires": { 2553 | "aws-sign2": "0.6.0", 2554 | "aws4": "1.5.0", 2555 | "caseless": "0.11.0", 2556 | "combined-stream": "1.0.5", 2557 | "extend": "3.0.0", 2558 | "forever-agent": "0.6.1", 2559 | "form-data": "2.1.1", 2560 | "har-validator": "2.0.6", 2561 | "hawk": "3.1.3", 2562 | "http-signature": "1.1.1", 2563 | "is-typedarray": "1.0.0", 2564 | "isstream": "0.1.2", 2565 | "json-stringify-safe": "5.0.1", 2566 | "mime-types": "2.1.12", 2567 | "node-uuid": "1.4.7", 2568 | "oauth-sign": "0.8.2", 2569 | "qs": "6.3.0", 2570 | "stringstream": "0.0.5", 2571 | "tough-cookie": "2.3.2", 2572 | "tunnel-agent": "0.4.3" 2573 | }, 2574 | "dependencies": { 2575 | "aws-sign2": { 2576 | "version": "0.6.0", 2577 | "bundled": true 2578 | }, 2579 | "aws4": { 2580 | "version": "1.5.0", 2581 | "bundled": true 2582 | }, 2583 | "caseless": { 2584 | "version": "0.11.0", 2585 | "bundled": true 2586 | }, 2587 | "combined-stream": { 2588 | "version": "1.0.5", 2589 | "bundled": true, 2590 | "requires": { 2591 | "delayed-stream": "1.0.0" 2592 | }, 2593 | "dependencies": { 2594 | "delayed-stream": { 2595 | "version": "1.0.0", 2596 | "bundled": true 2597 | } 2598 | } 2599 | }, 2600 | "extend": { 2601 | "version": "3.0.0", 2602 | "bundled": true 2603 | }, 2604 | "forever-agent": { 2605 | "version": "0.6.1", 2606 | "bundled": true 2607 | }, 2608 | "form-data": { 2609 | "version": "2.1.1", 2610 | "bundled": true, 2611 | "requires": { 2612 | "asynckit": "0.4.0", 2613 | "combined-stream": "1.0.5", 2614 | "mime-types": "2.1.12" 2615 | }, 2616 | "dependencies": { 2617 | "asynckit": { 2618 | "version": "0.4.0", 2619 | "bundled": true 2620 | } 2621 | } 2622 | }, 2623 | "har-validator": { 2624 | "version": "2.0.6", 2625 | "bundled": true, 2626 | "requires": { 2627 | "chalk": "1.1.3", 2628 | "commander": "2.9.0", 2629 | "is-my-json-valid": "2.15.0", 2630 | "pinkie-promise": "2.0.1" 2631 | }, 2632 | "dependencies": { 2633 | "chalk": { 2634 | "version": "1.1.3", 2635 | "bundled": true, 2636 | "requires": { 2637 | "ansi-styles": "2.2.1", 2638 | "escape-string-regexp": "1.0.5", 2639 | "has-ansi": "2.0.0", 2640 | "strip-ansi": "3.0.1", 2641 | "supports-color": "2.0.0" 2642 | }, 2643 | "dependencies": { 2644 | "ansi-styles": { 2645 | "version": "2.2.1", 2646 | "bundled": true 2647 | }, 2648 | "escape-string-regexp": { 2649 | "version": "1.0.5", 2650 | "bundled": true 2651 | }, 2652 | "has-ansi": { 2653 | "version": "2.0.0", 2654 | "bundled": true, 2655 | "requires": { 2656 | "ansi-regex": "2.0.0" 2657 | }, 2658 | "dependencies": { 2659 | "ansi-regex": { 2660 | "version": "2.0.0", 2661 | "bundled": true 2662 | } 2663 | } 2664 | }, 2665 | "strip-ansi": { 2666 | "version": "3.0.1", 2667 | "bundled": true, 2668 | "requires": { 2669 | "ansi-regex": "2.0.0" 2670 | }, 2671 | "dependencies": { 2672 | "ansi-regex": { 2673 | "version": "2.0.0", 2674 | "bundled": true 2675 | } 2676 | } 2677 | }, 2678 | "supports-color": { 2679 | "version": "2.0.0", 2680 | "bundled": true 2681 | } 2682 | } 2683 | }, 2684 | "commander": { 2685 | "version": "2.9.0", 2686 | "bundled": true, 2687 | "requires": { 2688 | "graceful-readlink": "1.0.1" 2689 | }, 2690 | "dependencies": { 2691 | "graceful-readlink": { 2692 | "version": "1.0.1", 2693 | "bundled": true 2694 | } 2695 | } 2696 | }, 2697 | "is-my-json-valid": { 2698 | "version": "2.15.0", 2699 | "bundled": true, 2700 | "requires": { 2701 | "generate-function": "2.0.0", 2702 | "generate-object-property": "1.2.0", 2703 | "jsonpointer": "4.0.0", 2704 | "xtend": "4.0.1" 2705 | }, 2706 | "dependencies": { 2707 | "generate-function": { 2708 | "version": "2.0.0", 2709 | "bundled": true 2710 | }, 2711 | "generate-object-property": { 2712 | "version": "1.2.0", 2713 | "bundled": true, 2714 | "requires": { 2715 | "is-property": "1.0.2" 2716 | }, 2717 | "dependencies": { 2718 | "is-property": { 2719 | "version": "1.0.2", 2720 | "bundled": true 2721 | } 2722 | } 2723 | }, 2724 | "jsonpointer": { 2725 | "version": "4.0.0", 2726 | "bundled": true 2727 | }, 2728 | "xtend": { 2729 | "version": "4.0.1", 2730 | "bundled": true 2731 | } 2732 | } 2733 | }, 2734 | "pinkie-promise": { 2735 | "version": "2.0.1", 2736 | "bundled": true, 2737 | "requires": { 2738 | "pinkie": "2.0.4" 2739 | }, 2740 | "dependencies": { 2741 | "pinkie": { 2742 | "version": "2.0.4", 2743 | "bundled": true 2744 | } 2745 | } 2746 | } 2747 | } 2748 | }, 2749 | "hawk": { 2750 | "version": "3.1.3", 2751 | "bundled": true, 2752 | "requires": { 2753 | "boom": "2.10.1", 2754 | "cryptiles": "2.0.5", 2755 | "hoek": "2.16.3", 2756 | "sntp": "1.0.9" 2757 | }, 2758 | "dependencies": { 2759 | "boom": { 2760 | "version": "2.10.1", 2761 | "bundled": true, 2762 | "requires": { 2763 | "hoek": "2.16.3" 2764 | } 2765 | }, 2766 | "cryptiles": { 2767 | "version": "2.0.5", 2768 | "bundled": true, 2769 | "requires": { 2770 | "boom": "2.10.1" 2771 | } 2772 | }, 2773 | "hoek": { 2774 | "version": "2.16.3", 2775 | "bundled": true 2776 | }, 2777 | "sntp": { 2778 | "version": "1.0.9", 2779 | "bundled": true, 2780 | "requires": { 2781 | "hoek": "2.16.3" 2782 | } 2783 | } 2784 | } 2785 | }, 2786 | "http-signature": { 2787 | "version": "1.1.1", 2788 | "bundled": true, 2789 | "requires": { 2790 | "assert-plus": "0.2.0", 2791 | "jsprim": "1.3.1", 2792 | "sshpk": "1.10.1" 2793 | }, 2794 | "dependencies": { 2795 | "assert-plus": { 2796 | "version": "0.2.0", 2797 | "bundled": true 2798 | }, 2799 | "jsprim": { 2800 | "version": "1.3.1", 2801 | "bundled": true, 2802 | "requires": { 2803 | "extsprintf": "1.0.2", 2804 | "json-schema": "0.2.3", 2805 | "verror": "1.3.6" 2806 | }, 2807 | "dependencies": { 2808 | "extsprintf": { 2809 | "version": "1.0.2", 2810 | "bundled": true 2811 | }, 2812 | "json-schema": { 2813 | "version": "0.2.3", 2814 | "bundled": true 2815 | }, 2816 | "verror": { 2817 | "version": "1.3.6", 2818 | "bundled": true, 2819 | "requires": { 2820 | "extsprintf": "1.0.2" 2821 | } 2822 | } 2823 | } 2824 | }, 2825 | "sshpk": { 2826 | "version": "1.10.1", 2827 | "bundled": true, 2828 | "requires": { 2829 | "asn1": "0.2.3", 2830 | "assert-plus": "1.0.0", 2831 | "bcrypt-pbkdf": "1.0.0", 2832 | "dashdash": "1.14.0", 2833 | "ecc-jsbn": "0.1.1", 2834 | "getpass": "0.1.6", 2835 | "jodid25519": "1.0.2", 2836 | "jsbn": "0.1.0", 2837 | "tweetnacl": "0.14.3" 2838 | }, 2839 | "dependencies": { 2840 | "asn1": { 2841 | "version": "0.2.3", 2842 | "bundled": true 2843 | }, 2844 | "assert-plus": { 2845 | "version": "1.0.0", 2846 | "bundled": true 2847 | }, 2848 | "bcrypt-pbkdf": { 2849 | "version": "1.0.0", 2850 | "bundled": true, 2851 | "optional": true, 2852 | "requires": { 2853 | "tweetnacl": "0.14.3" 2854 | } 2855 | }, 2856 | "dashdash": { 2857 | "version": "1.14.0", 2858 | "bundled": true, 2859 | "requires": { 2860 | "assert-plus": "1.0.0" 2861 | } 2862 | }, 2863 | "ecc-jsbn": { 2864 | "version": "0.1.1", 2865 | "bundled": true, 2866 | "optional": true, 2867 | "requires": { 2868 | "jsbn": "0.1.0" 2869 | } 2870 | }, 2871 | "getpass": { 2872 | "version": "0.1.6", 2873 | "bundled": true, 2874 | "requires": { 2875 | "assert-plus": "1.0.0" 2876 | } 2877 | }, 2878 | "jodid25519": { 2879 | "version": "1.0.2", 2880 | "bundled": true, 2881 | "optional": true, 2882 | "requires": { 2883 | "jsbn": "0.1.0" 2884 | } 2885 | }, 2886 | "jsbn": { 2887 | "version": "0.1.0", 2888 | "bundled": true, 2889 | "optional": true 2890 | }, 2891 | "tweetnacl": { 2892 | "version": "0.14.3", 2893 | "bundled": true, 2894 | "optional": true 2895 | } 2896 | } 2897 | } 2898 | } 2899 | }, 2900 | "is-typedarray": { 2901 | "version": "1.0.0", 2902 | "bundled": true 2903 | }, 2904 | "isstream": { 2905 | "version": "0.1.2", 2906 | "bundled": true 2907 | }, 2908 | "json-stringify-safe": { 2909 | "version": "5.0.1", 2910 | "bundled": true 2911 | }, 2912 | "mime-types": { 2913 | "version": "2.1.12", 2914 | "bundled": true, 2915 | "requires": { 2916 | "mime-db": "1.24.0" 2917 | }, 2918 | "dependencies": { 2919 | "mime-db": { 2920 | "version": "1.24.0", 2921 | "bundled": true 2922 | } 2923 | } 2924 | }, 2925 | "node-uuid": { 2926 | "version": "1.4.7", 2927 | "bundled": true 2928 | }, 2929 | "oauth-sign": { 2930 | "version": "0.8.2", 2931 | "bundled": true 2932 | }, 2933 | "qs": { 2934 | "version": "6.3.0", 2935 | "bundled": true 2936 | }, 2937 | "stringstream": { 2938 | "version": "0.0.5", 2939 | "bundled": true 2940 | }, 2941 | "tough-cookie": { 2942 | "version": "2.3.2", 2943 | "bundled": true, 2944 | "requires": { 2945 | "punycode": "1.4.1" 2946 | }, 2947 | "dependencies": { 2948 | "punycode": { 2949 | "version": "1.4.1", 2950 | "bundled": true 2951 | } 2952 | } 2953 | }, 2954 | "tunnel-agent": { 2955 | "version": "0.4.3", 2956 | "bundled": true 2957 | } 2958 | } 2959 | }, 2960 | "rimraf": { 2961 | "version": "2.5.4", 2962 | "bundled": true, 2963 | "requires": { 2964 | "glob": "7.1.1" 2965 | }, 2966 | "dependencies": { 2967 | "glob": { 2968 | "version": "7.1.1", 2969 | "bundled": true, 2970 | "requires": { 2971 | "fs.realpath": "1.0.0", 2972 | "inflight": "1.0.6", 2973 | "inherits": "2.0.3", 2974 | "minimatch": "3.0.3", 2975 | "once": "1.4.0", 2976 | "path-is-absolute": "1.0.1" 2977 | }, 2978 | "dependencies": { 2979 | "fs.realpath": { 2980 | "version": "1.0.0", 2981 | "bundled": true 2982 | }, 2983 | "inflight": { 2984 | "version": "1.0.6", 2985 | "bundled": true, 2986 | "requires": { 2987 | "once": "1.4.0", 2988 | "wrappy": "1.0.2" 2989 | }, 2990 | "dependencies": { 2991 | "wrappy": { 2992 | "version": "1.0.2", 2993 | "bundled": true 2994 | } 2995 | } 2996 | }, 2997 | "inherits": { 2998 | "version": "2.0.3", 2999 | "bundled": true 3000 | }, 3001 | "minimatch": { 3002 | "version": "3.0.3", 3003 | "bundled": true, 3004 | "requires": { 3005 | "brace-expansion": "1.1.6" 3006 | }, 3007 | "dependencies": { 3008 | "brace-expansion": { 3009 | "version": "1.1.6", 3010 | "bundled": true, 3011 | "requires": { 3012 | "balanced-match": "0.4.2", 3013 | "concat-map": "0.0.1" 3014 | }, 3015 | "dependencies": { 3016 | "balanced-match": { 3017 | "version": "0.4.2", 3018 | "bundled": true 3019 | }, 3020 | "concat-map": { 3021 | "version": "0.0.1", 3022 | "bundled": true 3023 | } 3024 | } 3025 | } 3026 | } 3027 | }, 3028 | "once": { 3029 | "version": "1.4.0", 3030 | "bundled": true, 3031 | "requires": { 3032 | "wrappy": "1.0.2" 3033 | }, 3034 | "dependencies": { 3035 | "wrappy": { 3036 | "version": "1.0.2", 3037 | "bundled": true 3038 | } 3039 | } 3040 | }, 3041 | "path-is-absolute": { 3042 | "version": "1.0.1", 3043 | "bundled": true 3044 | } 3045 | } 3046 | } 3047 | } 3048 | }, 3049 | "semver": { 3050 | "version": "5.3.0", 3051 | "bundled": true 3052 | }, 3053 | "tar": { 3054 | "version": "2.2.1", 3055 | "bundled": true, 3056 | "requires": { 3057 | "block-stream": "0.0.9", 3058 | "fstream": "1.0.10", 3059 | "inherits": "2.0.3" 3060 | }, 3061 | "dependencies": { 3062 | "block-stream": { 3063 | "version": "0.0.9", 3064 | "bundled": true, 3065 | "requires": { 3066 | "inherits": "2.0.3" 3067 | } 3068 | }, 3069 | "fstream": { 3070 | "version": "1.0.10", 3071 | "bundled": true, 3072 | "requires": { 3073 | "graceful-fs": "4.1.9", 3074 | "inherits": "2.0.3", 3075 | "mkdirp": "0.5.1", 3076 | "rimraf": "2.5.4" 3077 | }, 3078 | "dependencies": { 3079 | "graceful-fs": { 3080 | "version": "4.1.9", 3081 | "bundled": true 3082 | } 3083 | } 3084 | }, 3085 | "inherits": { 3086 | "version": "2.0.3", 3087 | "bundled": true 3088 | } 3089 | } 3090 | }, 3091 | "tar-pack": { 3092 | "version": "3.3.0", 3093 | "bundled": true, 3094 | "requires": { 3095 | "debug": "2.2.0", 3096 | "fstream": "1.0.10", 3097 | "fstream-ignore": "1.0.5", 3098 | "once": "1.3.3", 3099 | "readable-stream": "2.1.5", 3100 | "rimraf": "2.5.4", 3101 | "tar": "2.2.1", 3102 | "uid-number": "0.0.6" 3103 | }, 3104 | "dependencies": { 3105 | "debug": { 3106 | "version": "2.2.0", 3107 | "bundled": true, 3108 | "requires": { 3109 | "ms": "0.7.1" 3110 | }, 3111 | "dependencies": { 3112 | "ms": { 3113 | "version": "0.7.1", 3114 | "bundled": true 3115 | } 3116 | } 3117 | }, 3118 | "fstream": { 3119 | "version": "1.0.10", 3120 | "bundled": true, 3121 | "requires": { 3122 | "graceful-fs": "4.1.9", 3123 | "inherits": "2.0.3", 3124 | "mkdirp": "0.5.1", 3125 | "rimraf": "2.5.4" 3126 | }, 3127 | "dependencies": { 3128 | "graceful-fs": { 3129 | "version": "4.1.9", 3130 | "bundled": true 3131 | }, 3132 | "inherits": { 3133 | "version": "2.0.3", 3134 | "bundled": true 3135 | } 3136 | } 3137 | }, 3138 | "fstream-ignore": { 3139 | "version": "1.0.5", 3140 | "bundled": true, 3141 | "requires": { 3142 | "fstream": "1.0.10", 3143 | "inherits": "2.0.3", 3144 | "minimatch": "3.0.3" 3145 | }, 3146 | "dependencies": { 3147 | "inherits": { 3148 | "version": "2.0.3", 3149 | "bundled": true 3150 | }, 3151 | "minimatch": { 3152 | "version": "3.0.3", 3153 | "bundled": true, 3154 | "requires": { 3155 | "brace-expansion": "1.1.6" 3156 | }, 3157 | "dependencies": { 3158 | "brace-expansion": { 3159 | "version": "1.1.6", 3160 | "bundled": true, 3161 | "requires": { 3162 | "balanced-match": "0.4.2", 3163 | "concat-map": "0.0.1" 3164 | }, 3165 | "dependencies": { 3166 | "balanced-match": { 3167 | "version": "0.4.2", 3168 | "bundled": true 3169 | }, 3170 | "concat-map": { 3171 | "version": "0.0.1", 3172 | "bundled": true 3173 | } 3174 | } 3175 | } 3176 | } 3177 | } 3178 | } 3179 | }, 3180 | "once": { 3181 | "version": "1.3.3", 3182 | "bundled": true, 3183 | "requires": { 3184 | "wrappy": "1.0.2" 3185 | }, 3186 | "dependencies": { 3187 | "wrappy": { 3188 | "version": "1.0.2", 3189 | "bundled": true 3190 | } 3191 | } 3192 | }, 3193 | "readable-stream": { 3194 | "version": "2.1.5", 3195 | "bundled": true, 3196 | "requires": { 3197 | "buffer-shims": "1.0.0", 3198 | "core-util-is": "1.0.2", 3199 | "inherits": "2.0.3", 3200 | "isarray": "1.0.0", 3201 | "process-nextick-args": "1.0.7", 3202 | "string_decoder": "0.10.31", 3203 | "util-deprecate": "1.0.2" 3204 | }, 3205 | "dependencies": { 3206 | "buffer-shims": { 3207 | "version": "1.0.0", 3208 | "bundled": true 3209 | }, 3210 | "core-util-is": { 3211 | "version": "1.0.2", 3212 | "bundled": true 3213 | }, 3214 | "inherits": { 3215 | "version": "2.0.3", 3216 | "bundled": true 3217 | }, 3218 | "isarray": { 3219 | "version": "1.0.0", 3220 | "bundled": true 3221 | }, 3222 | "process-nextick-args": { 3223 | "version": "1.0.7", 3224 | "bundled": true 3225 | }, 3226 | "string_decoder": { 3227 | "version": "0.10.31", 3228 | "bundled": true 3229 | }, 3230 | "util-deprecate": { 3231 | "version": "1.0.2", 3232 | "bundled": true 3233 | } 3234 | } 3235 | }, 3236 | "uid-number": { 3237 | "version": "0.0.6", 3238 | "bundled": true 3239 | } 3240 | } 3241 | } 3242 | } 3243 | } 3244 | } 3245 | }, 3246 | "sse4_crc32": { 3247 | "version": "5.1.1", 3248 | "resolved": "https://registry.npmjs.org/sse4_crc32/-/sse4_crc32-5.1.1.tgz", 3249 | "integrity": "sha1-Gi5zoKgQ4tabYF/t54nVZ4KaBLc=", 3250 | "optional": true, 3251 | "requires": { 3252 | "bindings": "1.2.1", 3253 | "nan": "2.6.2" 3254 | } 3255 | }, 3256 | "sshpk": { 3257 | "version": "1.13.1", 3258 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", 3259 | "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", 3260 | "requires": { 3261 | "asn1": "0.2.3", 3262 | "assert-plus": "1.0.0", 3263 | "bcrypt-pbkdf": "1.0.1", 3264 | "dashdash": "1.14.1", 3265 | "ecc-jsbn": "0.1.1", 3266 | "getpass": "0.1.7", 3267 | "jsbn": "0.1.1", 3268 | "tweetnacl": "0.14.5" 3269 | }, 3270 | "dependencies": { 3271 | "assert-plus": { 3272 | "version": "1.0.0", 3273 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 3274 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 3275 | } 3276 | } 3277 | }, 3278 | "statuses": { 3279 | "version": "1.3.1", 3280 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 3281 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" 3282 | }, 3283 | "sterta": { 3284 | "version": "2.2.1", 3285 | "resolved": "https://registry.npmjs.org/sterta/-/sterta-2.2.1.tgz", 3286 | "integrity": "sha1-CyUwWD6gl5nB1d3TTlZeo4vqv2M=" 3287 | }, 3288 | "string_decoder": { 3289 | "version": "1.0.3", 3290 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 3291 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 3292 | "requires": { 3293 | "safe-buffer": "5.1.1" 3294 | } 3295 | }, 3296 | "string-width": { 3297 | "version": "1.0.2", 3298 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 3299 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 3300 | "requires": { 3301 | "code-point-at": "1.1.0", 3302 | "is-fullwidth-code-point": "1.0.0", 3303 | "strip-ansi": "3.0.1" 3304 | } 3305 | }, 3306 | "stringstream": { 3307 | "version": "0.0.5", 3308 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", 3309 | "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" 3310 | }, 3311 | "strip-ansi": { 3312 | "version": "3.0.1", 3313 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 3314 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 3315 | "requires": { 3316 | "ansi-regex": "2.1.1" 3317 | } 3318 | }, 3319 | "superagent": { 3320 | "version": "3.5.2", 3321 | "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.5.2.tgz", 3322 | "integrity": "sha1-M2GjlxVnUEw1EGOr6q4PqiPb8/g=", 3323 | "requires": { 3324 | "component-emitter": "1.2.1", 3325 | "cookiejar": "2.1.1", 3326 | "debug": "2.6.8", 3327 | "extend": "3.0.1", 3328 | "form-data": "2.1.4", 3329 | "formidable": "1.1.1", 3330 | "methods": "1.1.2", 3331 | "mime": "1.3.6", 3332 | "qs": "6.4.0", 3333 | "readable-stream": "2.3.3" 3334 | } 3335 | }, 3336 | "supports-color": { 3337 | "version": "2.0.0", 3338 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 3339 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" 3340 | }, 3341 | "terraformer": { 3342 | "version": "1.0.8", 3343 | "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", 3344 | "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", 3345 | "requires": { 3346 | "@types/geojson": "1.0.2" 3347 | } 3348 | }, 3349 | "terraformer-wkt-parser": { 3350 | "version": "1.1.2", 3351 | "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", 3352 | "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", 3353 | "requires": { 3354 | "terraformer": "1.0.8" 3355 | } 3356 | }, 3357 | "text-encoding": { 3358 | "version": "0.6.4", 3359 | "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", 3360 | "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=" 3361 | }, 3362 | "through2": { 3363 | "version": "2.0.3", 3364 | "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", 3365 | "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", 3366 | "requires": { 3367 | "readable-stream": "2.3.3", 3368 | "xtend": "4.0.1" 3369 | } 3370 | }, 3371 | "toposort-class": { 3372 | "version": "1.0.1", 3373 | "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", 3374 | "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" 3375 | }, 3376 | "tough-cookie": { 3377 | "version": "2.3.2", 3378 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", 3379 | "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", 3380 | "requires": { 3381 | "punycode": "1.4.1" 3382 | } 3383 | }, 3384 | "trim": { 3385 | "version": "0.0.1", 3386 | "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", 3387 | "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" 3388 | }, 3389 | "tunnel-agent": { 3390 | "version": "0.6.0", 3391 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 3392 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 3393 | "requires": { 3394 | "safe-buffer": "5.1.1" 3395 | } 3396 | }, 3397 | "tweetnacl": { 3398 | "version": "0.14.5", 3399 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 3400 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 3401 | }, 3402 | "type-is": { 3403 | "version": "1.6.15", 3404 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 3405 | "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", 3406 | "requires": { 3407 | "media-typer": "0.3.0", 3408 | "mime-types": "2.1.16" 3409 | } 3410 | }, 3411 | "ultron": { 3412 | "version": "1.0.2", 3413 | "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", 3414 | "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" 3415 | }, 3416 | "unpipe": { 3417 | "version": "1.0.0", 3418 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 3419 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 3420 | }, 3421 | "util-deprecate": { 3422 | "version": "1.0.2", 3423 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3424 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 3425 | }, 3426 | "uuid": { 3427 | "version": "3.1.0", 3428 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", 3429 | "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" 3430 | }, 3431 | "uuid4": { 3432 | "version": "1.0.0", 3433 | "resolved": "https://registry.npmjs.org/uuid4/-/uuid4-1.0.0.tgz", 3434 | "integrity": "sha1-gTqurxHqL2iQnFrVfYlPgyAtZyA=" 3435 | }, 3436 | "validator": { 3437 | "version": "5.7.0", 3438 | "resolved": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz", 3439 | "integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw=" 3440 | }, 3441 | "vary": { 3442 | "version": "1.1.1", 3443 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", 3444 | "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" 3445 | }, 3446 | "verror": { 3447 | "version": "1.3.6", 3448 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", 3449 | "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", 3450 | "requires": { 3451 | "extsprintf": "1.0.2" 3452 | } 3453 | }, 3454 | "vis-why": { 3455 | "version": "1.2.2", 3456 | "resolved": "https://registry.npmjs.org/vis-why/-/vis-why-1.2.2.tgz", 3457 | "integrity": "sha1-l6Y4R2ooYcM04yv39Aom0Bd29tA=", 3458 | "requires": { 3459 | "sterta": "2.2.1" 3460 | } 3461 | }, 3462 | "window-size": { 3463 | "version": "0.1.4", 3464 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", 3465 | "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" 3466 | }, 3467 | "wkx": { 3468 | "version": "0.2.0", 3469 | "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz", 3470 | "integrity": "sha1-dsJPFqzQzY+TzTSqMx4PeWElboQ=" 3471 | }, 3472 | "wrap-ansi": { 3473 | "version": "2.1.0", 3474 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 3475 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 3476 | "requires": { 3477 | "string-width": "1.0.2", 3478 | "strip-ansi": "3.0.1" 3479 | } 3480 | }, 3481 | "wrappy": { 3482 | "version": "1.0.2", 3483 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3484 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 3485 | }, 3486 | "ws": { 3487 | "version": "1.1.4", 3488 | "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.4.tgz", 3489 | "integrity": "sha1-V/QNA2gy5fUFVmKjl8Tedu1mv2E=", 3490 | "requires": { 3491 | "options": "0.0.6", 3492 | "ultron": "1.0.2" 3493 | } 3494 | }, 3495 | "xtend": { 3496 | "version": "4.0.1", 3497 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 3498 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 3499 | }, 3500 | "y18n": { 3501 | "version": "3.2.1", 3502 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", 3503 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" 3504 | }, 3505 | "yargs": { 3506 | "version": "3.32.0", 3507 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", 3508 | "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", 3509 | "requires": { 3510 | "camelcase": "2.1.1", 3511 | "cliui": "3.2.0", 3512 | "decamelize": "1.2.0", 3513 | "os-locale": "1.4.0", 3514 | "string-width": "1.0.2", 3515 | "window-size": "0.1.4", 3516 | "y18n": "3.2.1" 3517 | } 3518 | } 3519 | } 3520 | } 3521 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ilp-lightning-demo", 3 | "version": "1.0.0", 4 | "description": "Demo to send payments between the Bitcoin and Litecoin Lightning Networks using Interledger", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/interledgerjs/ilp-lightning-demo.git" 12 | }, 13 | "keywords": [ 14 | "lightning", 15 | "lightning", 16 | "network", 17 | "lnd", 18 | "bitcoin", 19 | "litecoin", 20 | "interledger", 21 | "ilp" 22 | ], 23 | "author": "Evan Schwartz ", 24 | "license": "Apache-2.0", 25 | "bugs": { 26 | "url": "https://github.com/interledgerjs/ilp-lightning-demo/issues" 27 | }, 28 | "homepage": "https://github.com/interledgerjs/ilp-lightning-demo#readme", 29 | "dependencies": { 30 | "connector-rpc": "git+https://github.com/interledgerjs/connector-rpc.git#e82bb90a63e31c368a995aaa0900bba1f7c20184", 31 | "grpc": "^1.4.1", 32 | "ilp": "^11.2.1", 33 | "ilp-plugin-lightning": "~0.3.0", 34 | "ilp-plugin-shared": "git+https://github.com/interledgerjs/ilp-plugin-shared.git#4576bcd63283006b3892e19f0fc9616e739adf26", 35 | "koa": "^2.3.0", 36 | "koa-bodyparser": "^4.2.0", 37 | "koa-router": "^7.2.1", 38 | "sqlite3": "^3.1.8", 39 | "uuid": "^3.1.0" 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /run-connector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const util = require('./util') 4 | 5 | const bitcoin1 = process.env.BITCOIN_LND_1 || 'localhost:11009' 6 | const bitcoin2 = process.env.BITCOIN_LND_2 || 'localhost:12009' 7 | const litecoin1 = process.env.LITECOIN_LND_1 || 'localhost:11010' 8 | const litecoin2 = process.env.LITECOIN_LND_2 || 'localhost:12010' 9 | 10 | async function main () { 11 | console.log('Getting configuration details from lnds') 12 | const pubkeys = await util.getPubkeys([bitcoin1, litecoin1]) 13 | 14 | // Plugin configuration 15 | process.env.CONNECTOR_LEDGERS=` 16 | { 17 | "g.bitcoin.lightning.": { 18 | "currency": "BTC", 19 | "plugin": "ilp-plugin-lightning", 20 | "store": true, 21 | "options": { 22 | "peerPublicKey": "${pubkeys[0]}", 23 | "lndUri": "${bitcoin2}", 24 | "rpcUri": "http://localhost:9001/rpc", 25 | "maxUnsecured": "1000", 26 | "maxBalance": "10000000", 27 | "authToken": "token" 28 | } 29 | }, 30 | "test.litecoin.lightning.": { 31 | "currency": "LTC", 32 | "plugin": "ilp-plugin-lightning", 33 | "store": true, 34 | "options": { 35 | "peerPublicKey": "${pubkeys[1]}", 36 | "lndUri": "${litecoin2}", 37 | "rpcUri": "http://localhost:9002/rpc", 38 | "maxUnsecured": "1000", 39 | "maxBalance": "10000000", 40 | "authToken": "token" 41 | } 42 | } 43 | }` 44 | 45 | // Set up environment variables 46 | process.env.CONNECTOR_PORT='9000' 47 | process.env.CONNECTOR_MAX_HOLD_TIME='1000' 48 | process.env.CONNECTOR_BACKEND='fixerio-plus-coinmarketcap' 49 | process.env.CONNECTOR_FX_SPREAD='0' 50 | process.env.DB_URI='sqlite://:memory:' 51 | 52 | // Runs the connector using the lightning plugins 53 | console.log('Running connector using lightning plugins...') 54 | require('connector-rpc') 55 | } 56 | 57 | main().catch(err => console.log(err)) 58 | -------------------------------------------------------------------------------- /send.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const ILP = require('ilp') 4 | const LightningPlugin = require('ilp-plugin-lightning') 5 | const shared = require('ilp-plugin-shared') 6 | const uuid = require('uuid') 7 | const util = require('./util') 8 | 9 | const bitcoin1 = process.env.BITCOIN_LND_1 || 'localhost:11009' 10 | const bitcoin2 = process.env.BITCOIN_LND_2 || 'localhost:12009' 11 | const litecoin1 = process.env.LITECOIN_LND_1 || 'localhost:11010' 12 | const litecoin2 = process.env.LITECOIN_LND_2 || 'localhost:12010' 13 | 14 | async function main () { 15 | console.log('Getting info from lnd nodes') 16 | const connectorPubkeys = await util.getPubkeys([bitcoin2, litecoin2]) 17 | console.log('Configuring plugins') 18 | 19 | // Configure the plugins 20 | const sender = new LightningPlugin({ 21 | peerPublicKey: connectorPubkeys[0], 22 | lndUri: bitcoin1, 23 | rpcUri: 'http://localhost:9000/rpc', 24 | maxUnsecured: '1000', 25 | maxBalance: '10000000', 26 | _store: new shared.ObjStore(), 27 | authToken: 'token' 28 | }) 29 | const receiver = new LightningPlugin({ 30 | peerPublicKey: connectorPubkeys[1], 31 | lndUri: litecoin1, 32 | rpcUri: 'http://localhost:9000/rpc', 33 | maxUnsecured: '1000', 34 | maxBalance: '10000000', 35 | _store: new shared.ObjStore(), 36 | authToken: 'token' 37 | }) 38 | 39 | util.rpcify(sender, 9001) 40 | util.rpcify(receiver, 9002) 41 | 42 | // This test script uses the Interledger Payment Request 43 | // transport layer protocol. For details about this protocol see: 44 | // https://github.com/interledger/rfcs/blob/master/0011-interledger-payment-request/0011-interledger-payment-request.md 45 | 46 | // Set up the receiver to automatically fulfill incoming payments 47 | // corresponding to IPRs it generated 48 | const stopListening = await ILP.IPR.listen(receiver, { 49 | receiverSecret: Buffer.from('secret', 'utf8') 50 | }, async function ({ transfer, fulfill }) { 51 | console.log('Receiver got notification of prepared transfer:', transfer) 52 | await fulfill() 53 | console.log('Receiver executed incoming transfer') 54 | }) 55 | 56 | // `ipr` is a buffer with the encoded IPR 57 | const ipr = ILP.IPR.createIPR({ 58 | receiverSecret: Buffer.from('secret', 'utf8'), 59 | destinationAccount: receiver.getAccount(), 60 | // denominated in the ledger's base unit 61 | destinationAmount: '10', 62 | }) 63 | console.log('Receiver created Interledger Payment Request') 64 | 65 | // Normally the developer using IPR would be responsible for 66 | // communicating the ipr from the receiver to the sender. 67 | // In this case we're just sending it in process 68 | const { packet, condition } = ILP.IPR.decodeIPR(ipr) 69 | 70 | // The sender gets a quote to determine the amount they need to pay 71 | const quote = await ILP.ILQP.quoteByPacket(sender, packet) 72 | console.log('Sender got quote for payment request:', quote) 73 | 74 | // (Should be obvious what this step does) 75 | await sender.sendTransfer({ 76 | id: uuid(), 77 | to: quote.connectorAccount, 78 | amount: quote.sourceAmount, 79 | expiresAt: quote.expiresAt, 80 | executionCondition: condition, 81 | ilp: packet 82 | }) 83 | console.log('Sender sent transfer') 84 | 85 | // This event tells the sender the transfer was executed 86 | // and gives them the fulfillment, or cryptographic proof 87 | sender.on('outgoing_fulfill', (transfer, fulfillment) => { 88 | console.log('Sender got notification that the transfer was exected') 89 | }) 90 | } 91 | 92 | main().catch(err => console.log(err)) 93 | 94 | -------------------------------------------------------------------------------- /util.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | 3 | const grpc = require('grpc') 4 | const path = require('path') 5 | const App = require('koa') 6 | const Router = require('koa-router') 7 | const BodyParser = require('koa-bodyparser') 8 | 9 | const protoPath = path.join(__dirname, 'node_modules', 'ilp-plugin-lightning', 'src', 'rpc.proto') 10 | const lnrpcDescriptor = grpc.load(protoPath) 11 | const lnrpc = lnrpcDescriptor.lnrpc 12 | 13 | exports.getPubkeys = function getPubkeys (lndUris) { 14 | const pubkeyPromises = lndUris.map((lndUri) => 15 | new Promise((resolve, reject) => { 16 | const lnd = new lnrpc.Lightning(lndUri, grpc.credentials.createInsecure()) 17 | lnd.getInfo({}, (err, info) => { 18 | if (err) { 19 | return reject(err) 20 | } 21 | resolve(info.identity_pubkey) 22 | }) 23 | })) 24 | return Promise.all(pubkeyPromises) 25 | } 26 | 27 | exports.rpcify = function rpcify (plugin, port) { 28 | const rpc = Router() 29 | rpc.post('/rpc', async function (ctx) { 30 | ctx.body = await plugin.receive( 31 | ctx.query.method, 32 | ctx.request.body) 33 | }) 34 | 35 | return new App() 36 | .use(BodyParser()) 37 | .use(rpc.routes()) 38 | .use(rpc.allowedMethods()) 39 | .listen(port) 40 | } 41 | --------------------------------------------------------------------------------