├── .gitattributes ├── .gitignore ├── LICENSE ├── README.md ├── api-doc-alphapoint.pdf ├── examples └── index.js ├── package-lock.json ├── package.json └── src ├── authentication.js ├── communication.js ├── feed.js ├── index.js ├── order.js ├── userInfo.js ├── utils.js └── variables.js /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # TypeScript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # next.js build output 61 | .next 62 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 MiguelMedeiros\Miguel Medeiros 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Foxbit API (WebSocket) 2 | 3 | [![NPM](https://img.shields.io/npm/v/foxbit-api.svg?style=flat-square)](https://www.npmjs.com/package/foxbit-api) 4 | [![NPM](https://img.shields.io/david/MiguelMedeiros/foxbit-api.svg?style=flat-square)](https://david-dm.org/MiguelMedeiros/foxbit-api#info=dependencies) 5 | [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/MiguelMedeiros/foxbit-api) 6 | [![Known Vulnerabilities](https://snyk.io/test/github/MiguelMedeiros/foxbit-api/badge.svg)](https://snyk.io/test/github/MiguelMedeiros/foxbit-api) 7 | 8 | Pacote NPM de acesso via WebSocket para a API da exchange brasileira Foxbit. 9 | 10 | Autor: **Miguel Medeiros** [[Site]](https://www.miguelmedeiros.com.br) [[Youtube]](https://www.youtube.com/user/miguelmedeiros) [[Twitter]](https://twitter.com/_miguelmedeiros)
11 | Exchange: [[Foxbit]](https://foxbit.com.br/)
12 | Documentação da API: [[Site da Foxbit]](https://docs.foxbit.com.br/) [[PDF da Alphapoint]](https://github.com/MiguelMedeiros/foxbit-api/blob/master/api-doc-alphapoint.pdf) 13 | 14 | Gostou do trabalho? Então me pague um café!
15 | Carteira BTC: **1NM76h5SvdhTdmS8dksGwWpHNbnVngWczR**

16 | 17 | --- 18 | 19 | Esse pacote foi desenvolvido para uso próprio.
20 | Portanto, não é um pacote oficial da Foxbit.
21 | **USE POR SUA CONTA E RISCO!** 22 | 23 | ## Readme Index 24 | 25 | - [Instalação](#instalação) 26 | - [Configuração](#configuração) 27 | - [Funções](#funções) 28 | - [Funções Públicas](#funções-públicas) 29 | - [Connect](#connect): Conecta na API via WebSocket. 30 | - [LogOut](#logout): Finaliza conexão com o WebSocket. 31 | - [GetInstrument](#getinstrument): Retorna as informações par de moedas por ID. 32 | - [GetInstruments](#getinstruments): Retorna um array de pares de moedas cadastrados. 33 | - [GetOpenOrders](#getopenorders): Retorna as ordens abertas no livro de ordens. 34 | - [GetProduct](#getproduct): Retorna a moeda cadastrado por ID. 35 | - [GetProducts](#getproducts): Retorna as moedas cadastradas. 36 | - [GetL2Snapshot](#getl2snapshot): Retorna um spanshot do Orderbook. 37 | - [GetTickerHistory](#gettickerhistory): Retorna um histórico de Tickers. 38 | - [SubscribeTicker](#subscribeticker): Se inscreve para receber Tickers atualizados. 39 | - [SubscribeTrades](#subscribetrades): Se inscreve para receber Trades atualizadas. 40 | - [UnsubscribeTicker](#unsubscribeticker): Se desinscreve do Ticker. 41 | - [UnsubscribeTrades](#unsubscribetrades): Se desinscreve das Trades. 42 | - [Funções Privadas](#funções-privadas) 43 | - [GetUserConfig](#getuserconfig): Retorna configurações definidas pelo usuário. 44 | - [GetUserInfo](#getuserinfo): Retorna os dados das informações de Usuário. 45 | - [GetUserPermissions](#getuserpermissions): Retorna permissões do usuário solicitante. 46 | - [GetOrdersHistory](#getordershistory): Retorna um array com o histórico de ordens. 47 | - [SendOrder](#sendorder): Envia Ordem de Compra/Venda. 48 | - [CancelAllOrders](#cancelallorders): Cancela todas as ordens abertas. 49 | - [CancelOrder](#cancelorder): Cancela ordem que ainda não foi executada. 50 | - [GetAccountInfo](#getaccountinfo): Retorna informação sobre a conta do usuário logado. 51 | - [GetAccountPositions](#getaccountpositions): Retorna um array com o balanço do usuário. 52 | - [GetAccountTrades](#getaccounttrades): Retorna um array com o histórico do ordens executadas do usuário. 53 | - [GetAccountTransactions](#getaccounttransactions): Retorna um array com o histórico de transações abertas do usuário. 54 | - [Contribua com Código](#contribua-com-código) 55 | - [License](#license-mit) 56 | 57 | ## Instalação 58 | 59 | Você precisa importar o pacote para seu projeto: 60 | 61 | ```bash 62 | npm i foxbit-api --save 63 | ``` 64 | 65 | ## Configuração 66 | 67 | ```javascript 68 | // importar foxbit api package 69 | const foxbit = require("foxbit-api"); 70 | ``` 71 | 72 | ## Funções 73 | 74 | Segue a lista de funções para se conectar com o WebSocket da API da Foxbit. 75 | 76 | ### Funções Públicas 77 | 78 | Não é necessária de credenciais para acessar os métodos públicos. 79 | 80 | #### Connect 81 | 82 | Conecta na API via WebSocket.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html#webauthenticateuser) 83 | 84 | ```javascript 85 | // Variáveis das suas credenciais 86 | // Necessárias somente para métodos privados. 87 | let user = ""; 88 | let password = ""; 89 | 90 | // Dispara chamada para conectar com o WebSocket. 91 | foxbit.Connect(user, password); 92 | 93 | // Evento disparado quando o WebSocket foi conectado. 94 | foxbit.eventEmitter.on("Connected", res => { 95 | console.log(res); 96 | }); 97 | ``` 98 | 99 | #### Logout 100 | 101 | Finaliza conexão com o WebSocket.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#logout) 102 | 103 | ```javascript 104 | // Evento disparado quando o WebSocket foi conectado. 105 | foxbit.eventEmitter.on("Connected", res => { 106 | // Dispara chamada LogOut. 107 | foxbit.LogOut(); 108 | }); 109 | 110 | // Evento disparado quando o LogOut foi efetuado. 111 | foxbit.eventEmitter.on("LogOut", res => { 112 | console.log(res); 113 | }); 114 | ``` 115 | 116 | #### GetInstrument 117 | 118 | Retorna as informações par de moedas por ID.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getinstrument) 119 | 120 | ```javascript 121 | // Evento disparado quando o WebSocket foi conectado. 122 | foxbit.eventEmitter.on("Connected", res => { 123 | // Dispara chamada GetInstrument. 124 | foxbit.GetInstrument(); 125 | }); 126 | 127 | // Evento disparado quando o GetInstrument foi efetuado. 128 | foxbit.eventEmitter.on("GetInstrument", res => { 129 | console.log(res); 130 | }); 131 | ``` 132 | 133 | #### GetInstruments 134 | 135 | Retorna um array de pares de moedas cadastrados.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getinstruments) 136 | 137 | ```javascript 138 | // Evento disparado quando o WebSocket foi conectado. 139 | foxbit.eventEmitter.on("Connected", res => { 140 | // Dispara chamada GetInstruments. 141 | foxbit.GetInstruments(); 142 | }); 143 | 144 | // Evento disparado quando o GetInstruments foi efetuado. 145 | foxbit.eventEmitter.on("GetInstruments", res => { 146 | console.log(res); 147 | }); 148 | ``` 149 | 150 | #### GetOpenOrders 151 | 152 | Retorna as ordens abertas no livro de ordens.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getopenorders) 153 | 154 | ```javascript 155 | // Evento disparado quando o WebSocket foi conectado. 156 | foxbit.eventEmitter.on("Connected", res => { 157 | // Dispara chamada GetProducts. 158 | foxbit.GetProducts(); 159 | }); 160 | 161 | // Evento disparado quando o GetProducts foi efetuado. 162 | foxbit.eventEmitter.on("GetProducts", res => { 163 | console.log(res); 164 | }); 165 | ``` 166 | 167 | #### GetProduct 168 | 169 | Retorna a moeda cadastrado por ID.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getproduct) 170 | 171 | ```javascript 172 | // Evento disparado quando o WebSocket foi conectado. 173 | foxbit.eventEmitter.on("Connected", res => { 174 | // Dispara chamada GetProduct. 175 | foxbit.GetProduct(1); 176 | }); 177 | 178 | // Evento disparado quando o GetProduct foi efetuado. 179 | foxbit.eventEmitter.on("GetProduct", res => { 180 | console.log(res); 181 | }); 182 | ``` 183 | 184 | #### GetProducts 185 | 186 | Retorna as moedas cadastradas.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getproducts) 187 | 188 | ```javascript 189 | // Evento disparado quando o WebSocket foi conectado. 190 | foxbit.eventEmitter.on("Connected", res => { 191 | // Dispara chamada GetProducts. 192 | foxbit.GetProducts(); 193 | }); 194 | 195 | // Evento disparado quando o GetProducts foi efetuado. 196 | foxbit.eventEmitter.on("GetProducts", res => { 197 | console.log(res); 198 | }); 199 | ``` 200 | 201 | #### GetL2Snapshot 202 | 203 | Retorna um spanshot do Orderbook.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getl2snapshot) 204 | 205 | ```javascript 206 | // Evento disparado quando o WebSocket foi conectado. 207 | foxbit.eventEmitter.on("Connected", res => { 208 | // Dispara chamada GetL2Snapshot. 209 | foxbit.GetL2Snapshot(100); 210 | }); 211 | 212 | // Evento disparado quando o GetL2Snapshot foi efetuado. 213 | foxbit.eventEmitter.on("GetL2Snapshot", res => { 214 | console.log(res); 215 | }); 216 | ``` 217 | 218 | #### GetTickerHistory 219 | 220 | Retorna um histórico de Tickers.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html#gettickerhistory) 221 | 222 | ```javascript 223 | // Evento disparado quando o WebSocket foi conectado. 224 | foxbit.eventEmitter.on("Connected", res => { 225 | //Variável de parametrização 226 | let lastMinutes = 60; 227 | 228 | // Dispara chamada GetTickerHistory. 229 | foxbit.GetTickerHistory(lastMinutes); 230 | }); 231 | 232 | // Evento disparado quando o GetTickerHistory foi efetuado. 233 | foxbit.eventEmitter.on("GetTickerHistory", res => { 234 | console.log(res); 235 | }); 236 | ``` 237 | 238 | #### SubscribeTicker 239 | 240 | Se inscreve para receber Tickers atualizados.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#subscribeticker) 241 | 242 | ```javascript 243 | // Evento disparado quando o WebSocket foi conectado. 244 | foxbit.eventEmitter.on("Connected", res => { 245 | // Dispara chamada SubscribeTicker. 246 | foxbit.SubscribeTicker(1); 247 | }); 248 | 249 | // Evento disparado quando o SubscribeTicker foi efetuado. 250 | foxbit.eventEmitter.on("SubscribeTicker", res => { 251 | console.log(res); 252 | }); 253 | 254 | // Evento disparado quando o Ticker é atualizado. 255 | foxbit.eventEmitter.on("TickerDataUpdateEvent", res => { 256 | console.log(res); 257 | }); 258 | ``` 259 | 260 | #### SubscribeTrades 261 | 262 | Se inscreve para receber Trades atualizadas. 263 | 264 | ```javascript 265 | // Evento disparado quando o WebSocket foi conectado. 266 | foxbit.eventEmitter.on("Connected", res => { 267 | // Dispara chamada SubscribeTrades. 268 | foxbit.SubscribeTrades(); 269 | }); 270 | 271 | // Evento disparado quando o SubscribeTrades foi efetuado. 272 | foxbit.eventEmitter.on("SubscribeTrades", res => { 273 | console.log(res); 274 | }); 275 | 276 | // Evento disparado quando alguma Trade foi efetuada. 277 | foxbit.eventEmitter.on("TradeDataUpdateEvent", res => { 278 | console.log(res); 279 | }); 280 | ``` 281 | 282 | #### UnsubscribeTicker 283 | 284 | Se desinscreve do Ticker.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#unsubscribeticker) 285 | 286 | ```javascript 287 | // Evento disparado quando o WebSocket foi conectado. 288 | foxbit.eventEmitter.on("Connected", res => { 289 | // Dispara chamada UnsubscribeTicker. 290 | foxbit.UnsubscribeTicker(); 291 | }); 292 | 293 | // Evento disparado quando o UnsubscribeTicker foi efetuado. 294 | foxbit.eventEmitter.on("UnsubscribeTicker", res => { 295 | console.log(res); 296 | }); 297 | ``` 298 | 299 | #### UnsubscribeTrades 300 | 301 | Se desinscreve das Trades. 302 | 303 | ```javascript 304 | // Evento disparado quando o WebSocket foi conectado. 305 | foxbit.eventEmitter.on("Connected", res => { 306 | // Dispara chamada UnsubscribeTrades. 307 | foxbit.UnsubscribeTrades(); 308 | }); 309 | 310 | // Evento disparado quando o UnsubscribeTrades foi efetuado. 311 | foxbit.eventEmitter.on("UnsubscribeTrades", res => { 312 | console.log(res); 313 | }); 314 | ``` 315 | 316 | ### Funções Privadas 317 | 318 | Ao se conectar é necessário usar credenciais (usuário e senha) para acessar os métodos privados. 319 | 320 | #### GetUserInfo 321 | 322 | Retorna os dados das informações de Usuário.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getuserinfo) 323 | 324 | ```javascript 325 | // Evento disparado quando o WebSocket foi conectado. 326 | foxbit.eventEmitter.on("Connected", res => { 327 | // Dispara chamada GetUserInfo. 328 | foxbit.GetUserInfo(); 329 | }); 330 | 331 | // Evento disparado quando o GetUserInfo foi efetuado. 332 | foxbit.eventEmitter.on("GetUserInfo", res => { 333 | console.log(res); 334 | }); 335 | ``` 336 | 337 | #### GetUserConfig 338 | 339 | Retorna configurações definidas pelo usuário.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html#getuserconfig) 340 | 341 | ```javascript 342 | // Evento disparado quando o WebSocket foi conectado 343 | // e recebeu as informações do usuário. 344 | foxbit.eventEmitter.on("Ready", res => { 345 | // Dispara chamada GetUserConfig. 346 | foxbit.GetUserConfig(); 347 | }); 348 | 349 | // Evento disparado quando o GetUserConfig foi efetuado. 350 | foxbit.eventEmitter.on("GetUserConfig", res => { 351 | console.log(res); 352 | }); 353 | ``` 354 | 355 | #### GetUserPermissions 356 | 357 | Retorna permissões do usuário solicitante.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getuserpermissions) 358 | 359 | ```javascript 360 | // Evento disparado quando o WebSocket foi conectado 361 | // e recebeu as informações do usuário. 362 | foxbit.eventEmitter.on("Ready", res => { 363 | // Dispara chamada GetUserPermissions. 364 | foxbit.GetUserPermissions(); 365 | }); 366 | 367 | // Evento disparado quando o GetUserPermissions foi efetuado. 368 | foxbit.eventEmitter.on("GetUserPermissions", res => { 369 | console.log(res); 370 | }); 371 | ``` 372 | 373 | #### GetOrdersHistory 374 | 375 | Retorna um array com o histórico de ordens. 376 | 377 | ```javascript 378 | // Evento disparado quando o WebSocket foi conectado 379 | // e recebeu as informações do usuário. 380 | foxbit.eventEmitter.on("Ready", res => { 381 | // Dispara chamada GetOrdersHistory. 382 | foxbit.GetOrdersHistory(); 383 | }); 384 | 385 | // Evento disparado quando o GetOrdersHistory foi efetuado. 386 | foxbit.eventEmitter.on("GetOrdersHistory", res => { 387 | console.log(res); 388 | }); 389 | ``` 390 | 391 | #### SendOrder 392 | 393 | Envia Ordem de Compra/Venda.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#sendorder) 394 | 395 | ```javascript 396 | // Evento disparado quando o WebSocket foi conectado 397 | // e recebeu as informações do usuário. 398 | foxbit.eventEmitter.on("Ready", res => { 399 | // Variáveis de parametrização 400 | let Side = "Sell"; // Buy, Sell 401 | // Market, Limit, StopMarket, StopLimit, TralingStopMarket, TrailingStopLimit, BlockTrade 402 | let OrderType = "Limit"; 403 | let Quantity = 0.0001; // BTC 404 | let Price = 40000; // BRL 405 | 406 | // Dispara chamada SendOrder. 407 | foxbit.SendOrder(Side, OrderType, Quantity, Price); 408 | }); 409 | 410 | // Evento disparado quando o SendOrder foi efetuado. 411 | foxbit.eventEmitter.on("SendOrder", res => { 412 | console.log(res); 413 | }); 414 | ``` 415 | 416 | #### CancelAllOrders 417 | 418 | Cancela todas as ordens abertas.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#cancelallorders) 419 | 420 | ```javascript 421 | // Evento disparado quando o WebSocket foi conectado 422 | // e recebeu as informações do usuário. 423 | foxbit.eventEmitter.on("Ready", res => { 424 | // Dispara chamada CancelAllOrders. 425 | foxbit.CancelAllOrders(); 426 | }); 427 | 428 | // Evento disparado quando o CancelAllOrders foi efetuado. 429 | foxbit.eventEmitter.on("CancelAllOrders", res => { 430 | console.log(res); 431 | }); 432 | ``` 433 | 434 | #### CancelOrder 435 | 436 | Cancela ordem que ainda não foi executada.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#cancelorder) 437 | 438 | ```javascript 439 | // Evento disparado quando o WebSocket foi conectado 440 | // e recebeu as informações do usuário. 441 | foxbit.eventEmitter.on("Ready", res => { 442 | // Variáveis de Parametrização 443 | let ClientOrderId = 11111; 444 | let orderId = 9999; 445 | 446 | // Dispara chamada CancelOrder. 447 | foxbit.CancelOrder(ClientOrderId, orderId); 448 | }); 449 | 450 | // Evento disparado quando o CancelOrder foi efetuado. 451 | foxbit.eventEmitter.on("CancelOrder", res => { 452 | console.log(res); 453 | }); 454 | ``` 455 | 456 | #### GetAccountInfo 457 | 458 | Retorna informação sobre a conta do usuário logado.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getaccountinfo) 459 | 460 | ```javascript 461 | // Evento disparado quando o WebSocket foi conectado 462 | // e recebeu as informações do usuário. 463 | foxbit.eventEmitter.on("Ready", res => { 464 | // Dispara chamada CancelOrder. 465 | foxbit.GetAccountInfo(); 466 | }); 467 | 468 | // Evento disparado quando o GetAccountInfo foi efetuado. 469 | foxbit.eventEmitter.on("GetAccountInfo", res => { 470 | console.log(res); 471 | }); 472 | ``` 473 | 474 | #### GetAccountPositions 475 | 476 | Retorna um array com o balanço do usuário.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getaccountpositions) 477 | 478 | ```javascript 479 | // Evento disparado quando o WebSocket foi conectado 480 | // e recebeu as informações do usuário. 481 | foxbit.eventEmitter.on("Ready", res => { 482 | // Dispara chamada GetAccountPositions. 483 | foxbit.GetAccountPositions(); 484 | }); 485 | 486 | // Evento disparado quando o GetAccountPositions foi efetuado. 487 | foxbit.eventEmitter.on("GetAccountPositions", res => { 488 | console.log(res); 489 | }); 490 | ``` 491 | 492 | #### GetAccountTrades 493 | 494 | Retorna um array com o histórico do ordens executadas do usuário.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getaccounttrades) 495 | 496 | ```javascript 497 | // Evento disparado quando o WebSocket foi conectado 498 | // e recebeu as informações do usuário. 499 | foxbit.eventEmitter.on("Ready", res => { 500 | // Dispara chamada GetAccountTrades. 501 | foxbit.GetAccountTrades(); 502 | }); 503 | 504 | // Evento disparado quando o GetAccountTrades foi efetuado. 505 | foxbit.eventEmitter.on("GetAccountTrades", res => { 506 | console.log(res); 507 | }); 508 | ``` 509 | 510 | #### GetAccountTransactions 511 | 512 | Retorna um array com o histórico de transações abertas do usuário.
[Link Documentação](https://foxbit.com.br/api/docs/websocket_intro.html?highlight=getopenorders#getaccounttransactions) 513 | 514 | ```javascript 515 | // Evento disparado quando o WebSocket foi conectado 516 | // e recebeu as informações do usuário. 517 | foxbit.eventEmitter.on("Ready", res => { 518 | // Dispara chamada GetAccountTransactions. 519 | foxbit.GetAccountTransactions(); 520 | }); 521 | 522 | // Evento disparado quando o GetAccountTransactions foi efetuado. 523 | foxbit.eventEmitter.on("GetAccountTransactions", res => { 524 | console.log(res); 525 | }); 526 | ``` 527 | 528 | ## Contribua com Código 529 | 530 | Ainda faltam algumas chamadas para completar a API como um todo. Vou adorar se você quiser contribuir para deixar esse pacote mais completo! Sinta-se à vontade em fazer um 'pull request'! Afinal esse repositório é aberto! <3 531 | 532 | ## LICENSE [MIT](LICENSE) 533 | -------------------------------------------------------------------------------- /api-doc-alphapoint.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MiguelMedeiros/foxbit-api/cc5a7a64f317e2ea7e6f5aecc56aed54bac466cf/api-doc-alphapoint.pdf -------------------------------------------------------------------------------- /examples/index.js: -------------------------------------------------------------------------------- 1 | let foxbit = require("../src/index"); 2 | 3 | // Credencials 4 | let user = ""; 5 | let password = ""; 6 | 7 | foxbit.Connect(user, password); 8 | 9 | foxbit.eventEmitter.on("Connected", res => { 10 | foxbit.GetUserInfo(); 11 | foxbit.GetInstrument(); 12 | foxbit.GetInstruments(); 13 | foxbit.GetProduct(1); 14 | foxbit.GetProducts(); 15 | foxbit.SubscribeTicker(50); 16 | foxbit.GetTickerHistory(60); 17 | foxbit.GetL2Snapshot(100); 18 | foxbit.LogOut(); 19 | foxbit.SubscribeTrades(); 20 | foxbit.UnsubscribeTicker(); 21 | foxbit.UnsubscribeTrades(); 22 | }); 23 | 24 | foxbit.eventEmitter.on("Ready", res => { 25 | foxbit.GetUserConfig(); 26 | foxbit.GetUserPermissions(); 27 | foxbit.GetAvailablePermissionList(); 28 | foxbit.CancelAllOrders(); 29 | 30 | let ClientOrderId = 11111; 31 | let orderId = 9999; 32 | foxbit.CancelOrder(ClientOrderId, orderId); 33 | foxbit.GetAccountInfo(); 34 | foxbit.GetAccountPositions(); 35 | foxbit.GetAccountTrades(); 36 | foxbit.GetAccountTransactions(); 37 | foxbit.GetOpenOrders(); 38 | 39 | let Side = "Sell"; // Buy, Sell 40 | let OrderType = "Limit"; // Market, Limit, StopMarket, StopLimit, TralingStopMarket, TrailingStopLimit, BlockTrade 41 | let Quantity = 0.0001; // BTC 42 | let Price = 40000; // BRL 43 | foxbit.SendOrder(Side, OrderType, Quantity, Price); 44 | foxbit.GetOrdersHistory(); 45 | }); 46 | 47 | foxbit.eventEmitter.on("GetUserInfo", res => { 48 | console.log(res); 49 | }); 50 | 51 | foxbit.eventEmitter.on("GetUserConfig", res => { 52 | console.log(res); 53 | }); 54 | 55 | foxbit.eventEmitter.on("GetUserPermissions", res => { 56 | console.log(res); 57 | }); 58 | 59 | foxbit.eventEmitter.on("GetAvailablePermissionList", res => { 60 | console.log(res); 61 | }); 62 | 63 | foxbit.eventEmitter.on("CancelAllOrders", res => { 64 | console.log(res); 65 | }); 66 | 67 | foxbit.eventEmitter.on("CancelOrder", res => { 68 | console.log(res); 69 | }); 70 | 71 | foxbit.eventEmitter.on("GetAccountInfo", res => { 72 | console.log(res); 73 | }); 74 | 75 | foxbit.eventEmitter.on("GetAccountPositions", res => { 76 | console.log(res); 77 | }); 78 | 79 | foxbit.eventEmitter.on("GetAccountTrades", res => { 80 | console.log(res); 81 | }); 82 | 83 | foxbit.eventEmitter.on("GetAccountTransactions", res => { 84 | console.log(res); 85 | }); 86 | 87 | foxbit.eventEmitter.on("GetOpenOrders", res => { 88 | console.log(res); 89 | }); 90 | 91 | foxbit.eventEmitter.on("SendOrder", res => { 92 | console.log(res); 93 | }); 94 | 95 | foxbit.eventEmitter.on("GetOrdersHistory", res => { 96 | console.log(res); 97 | }); 98 | 99 | foxbit.eventEmitter.on("GetInstruments", res => { 100 | console.log(res); 101 | }); 102 | 103 | foxbit.eventEmitter.on("GetInstrument", res => { 104 | console.log(res); 105 | }); 106 | 107 | foxbit.eventEmitter.on("GetProducts", res => { 108 | console.log(res); 109 | }); 110 | 111 | foxbit.eventEmitter.on("GetProduct", res => { 112 | console.log(res); 113 | }); 114 | 115 | foxbit.eventEmitter.on("SubscribeTicker", res => { 116 | console.log(res); 117 | }); 118 | 119 | foxbit.eventEmitter.on("UnsubscribeTicker", res => { 120 | console.log(res); 121 | }); 122 | 123 | foxbit.eventEmitter.on("GetTickerHistory", res => { 124 | console.log(res); 125 | }); 126 | 127 | foxbit.eventEmitter.on("GetL2Snapshot", res => { 128 | console.log(res); 129 | }); 130 | 131 | foxbit.eventEmitter.on("LogOut", res => { 132 | console.log(res); 133 | }); 134 | 135 | foxbit.eventEmitter.on("SubscribeTrades", res => { 136 | console.log(res); 137 | }); 138 | 139 | foxbit.eventEmitter.on("UnsubscribeTrades", res => { 140 | console.log(res); 141 | }); 142 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "foxbit-api", 3 | "version": "1.0.16", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.1.1", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 11 | "dev": true 12 | }, 13 | "ansi-align": { 14 | "version": "2.0.0", 15 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", 16 | "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", 17 | "dev": true, 18 | "requires": { 19 | "string-width": "2.1.1" 20 | } 21 | }, 22 | "ansi-regex": { 23 | "version": "3.0.0", 24 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 25 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 26 | "dev": true 27 | }, 28 | "ansi-styles": { 29 | "version": "3.2.1", 30 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 31 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 32 | "dev": true, 33 | "requires": { 34 | "color-convert": "1.9.2" 35 | } 36 | }, 37 | "anymatch": { 38 | "version": "2.0.0", 39 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", 40 | "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", 41 | "dev": true, 42 | "requires": { 43 | "micromatch": "3.1.10", 44 | "normalize-path": "2.1.1" 45 | } 46 | }, 47 | "arr-diff": { 48 | "version": "4.0.0", 49 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", 50 | "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", 51 | "dev": true 52 | }, 53 | "arr-flatten": { 54 | "version": "1.1.0", 55 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 56 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 57 | "dev": true 58 | }, 59 | "arr-union": { 60 | "version": "3.1.0", 61 | "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", 62 | "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", 63 | "dev": true 64 | }, 65 | "array-unique": { 66 | "version": "0.3.2", 67 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", 68 | "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", 69 | "dev": true 70 | }, 71 | "assign-symbols": { 72 | "version": "1.0.0", 73 | "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 74 | "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", 75 | "dev": true 76 | }, 77 | "async-each": { 78 | "version": "1.0.1", 79 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", 80 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", 81 | "dev": true 82 | }, 83 | "async-limiter": { 84 | "version": "1.0.0", 85 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", 86 | "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" 87 | }, 88 | "atob": { 89 | "version": "2.1.2", 90 | "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", 91 | "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", 92 | "dev": true 93 | }, 94 | "balanced-match": { 95 | "version": "1.0.0", 96 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 97 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 98 | "dev": true 99 | }, 100 | "base": { 101 | "version": "0.11.2", 102 | "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", 103 | "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", 104 | "dev": true, 105 | "requires": { 106 | "cache-base": "1.0.1", 107 | "class-utils": "0.3.6", 108 | "component-emitter": "1.2.1", 109 | "define-property": "1.0.0", 110 | "isobject": "3.0.1", 111 | "mixin-deep": "1.3.1", 112 | "pascalcase": "0.1.1" 113 | }, 114 | "dependencies": { 115 | "define-property": { 116 | "version": "1.0.0", 117 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 118 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 119 | "dev": true, 120 | "requires": { 121 | "is-descriptor": "1.0.2" 122 | } 123 | }, 124 | "is-accessor-descriptor": { 125 | "version": "1.0.0", 126 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 127 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 128 | "dev": true, 129 | "requires": { 130 | "kind-of": "6.0.2" 131 | } 132 | }, 133 | "is-data-descriptor": { 134 | "version": "1.0.0", 135 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 136 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 137 | "dev": true, 138 | "requires": { 139 | "kind-of": "6.0.2" 140 | } 141 | }, 142 | "is-descriptor": { 143 | "version": "1.0.2", 144 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 145 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 146 | "dev": true, 147 | "requires": { 148 | "is-accessor-descriptor": "1.0.0", 149 | "is-data-descriptor": "1.0.0", 150 | "kind-of": "6.0.2" 151 | } 152 | } 153 | } 154 | }, 155 | "binary-extensions": { 156 | "version": "1.11.0", 157 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", 158 | "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", 159 | "dev": true 160 | }, 161 | "boxen": { 162 | "version": "1.3.0", 163 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", 164 | "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", 165 | "dev": true, 166 | "requires": { 167 | "ansi-align": "2.0.0", 168 | "camelcase": "4.1.0", 169 | "chalk": "2.4.1", 170 | "cli-boxes": "1.0.0", 171 | "string-width": "2.1.1", 172 | "term-size": "1.2.0", 173 | "widest-line": "2.0.0" 174 | } 175 | }, 176 | "brace-expansion": { 177 | "version": "1.1.11", 178 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 179 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 180 | "dev": true, 181 | "requires": { 182 | "balanced-match": "1.0.0", 183 | "concat-map": "0.0.1" 184 | } 185 | }, 186 | "braces": { 187 | "version": "2.3.2", 188 | "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", 189 | "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", 190 | "dev": true, 191 | "requires": { 192 | "arr-flatten": "1.1.0", 193 | "array-unique": "0.3.2", 194 | "extend-shallow": "2.0.1", 195 | "fill-range": "4.0.0", 196 | "isobject": "3.0.1", 197 | "repeat-element": "1.1.3", 198 | "snapdragon": "0.8.2", 199 | "snapdragon-node": "2.1.1", 200 | "split-string": "3.1.0", 201 | "to-regex": "3.0.2" 202 | }, 203 | "dependencies": { 204 | "extend-shallow": { 205 | "version": "2.0.1", 206 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 207 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 208 | "dev": true, 209 | "requires": { 210 | "is-extendable": "0.1.1" 211 | } 212 | } 213 | } 214 | }, 215 | "cache-base": { 216 | "version": "1.0.1", 217 | "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", 218 | "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", 219 | "dev": true, 220 | "requires": { 221 | "collection-visit": "1.0.0", 222 | "component-emitter": "1.2.1", 223 | "get-value": "2.0.6", 224 | "has-value": "1.0.0", 225 | "isobject": "3.0.1", 226 | "set-value": "2.0.0", 227 | "to-object-path": "0.3.0", 228 | "union-value": "1.0.0", 229 | "unset-value": "1.0.0" 230 | } 231 | }, 232 | "camelcase": { 233 | "version": "4.1.0", 234 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 235 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", 236 | "dev": true 237 | }, 238 | "capture-stack-trace": { 239 | "version": "1.0.0", 240 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", 241 | "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", 242 | "dev": true 243 | }, 244 | "chalk": { 245 | "version": "2.4.1", 246 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", 247 | "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", 248 | "dev": true, 249 | "requires": { 250 | "ansi-styles": "3.2.1", 251 | "escape-string-regexp": "1.0.5", 252 | "supports-color": "5.5.0" 253 | } 254 | }, 255 | "chokidar": { 256 | "version": "2.0.4", 257 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", 258 | "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", 259 | "dev": true, 260 | "requires": { 261 | "anymatch": "2.0.0", 262 | "async-each": "1.0.1", 263 | "braces": "2.3.2", 264 | "fsevents": "1.2.4", 265 | "glob-parent": "3.1.0", 266 | "inherits": "2.0.3", 267 | "is-binary-path": "1.0.1", 268 | "is-glob": "4.0.0", 269 | "lodash.debounce": "4.0.8", 270 | "normalize-path": "2.1.1", 271 | "path-is-absolute": "1.0.1", 272 | "readdirp": "2.1.0", 273 | "upath": "1.1.0" 274 | } 275 | }, 276 | "ci-info": { 277 | "version": "1.4.0", 278 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.4.0.tgz", 279 | "integrity": "sha512-Oqmw2pVfCl8sCL+1QgMywPfdxPJPkC51y4usw0iiE2S9qnEOAqXy8bwl1CpMpnoU39g4iKJTz6QZj+28FvOnjQ==", 280 | "dev": true 281 | }, 282 | "class-utils": { 283 | "version": "0.3.6", 284 | "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", 285 | "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", 286 | "dev": true, 287 | "requires": { 288 | "arr-union": "3.1.0", 289 | "define-property": "0.2.5", 290 | "isobject": "3.0.1", 291 | "static-extend": "0.1.2" 292 | }, 293 | "dependencies": { 294 | "define-property": { 295 | "version": "0.2.5", 296 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 297 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 298 | "dev": true, 299 | "requires": { 300 | "is-descriptor": "0.1.6" 301 | } 302 | } 303 | } 304 | }, 305 | "cli-boxes": { 306 | "version": "1.0.0", 307 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", 308 | "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", 309 | "dev": true 310 | }, 311 | "collection-visit": { 312 | "version": "1.0.0", 313 | "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", 314 | "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", 315 | "dev": true, 316 | "requires": { 317 | "map-visit": "1.0.0", 318 | "object-visit": "1.0.1" 319 | } 320 | }, 321 | "color-convert": { 322 | "version": "1.9.2", 323 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", 324 | "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", 325 | "dev": true, 326 | "requires": { 327 | "color-name": "1.1.1" 328 | } 329 | }, 330 | "color-name": { 331 | "version": "1.1.1", 332 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", 333 | "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", 334 | "dev": true 335 | }, 336 | "component-emitter": { 337 | "version": "1.2.1", 338 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 339 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 340 | "dev": true 341 | }, 342 | "concat-map": { 343 | "version": "0.0.1", 344 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 345 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 346 | "dev": true 347 | }, 348 | "configstore": { 349 | "version": "3.1.2", 350 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", 351 | "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", 352 | "dev": true, 353 | "requires": { 354 | "dot-prop": "4.2.0", 355 | "graceful-fs": "4.1.11", 356 | "make-dir": "1.3.0", 357 | "unique-string": "1.0.0", 358 | "write-file-atomic": "2.3.0", 359 | "xdg-basedir": "3.0.0" 360 | } 361 | }, 362 | "copy-descriptor": { 363 | "version": "0.1.1", 364 | "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", 365 | "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", 366 | "dev": true 367 | }, 368 | "core-util-is": { 369 | "version": "1.0.2", 370 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 371 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 372 | "dev": true 373 | }, 374 | "create-error-class": { 375 | "version": "3.0.2", 376 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 377 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 378 | "dev": true, 379 | "requires": { 380 | "capture-stack-trace": "1.0.0" 381 | } 382 | }, 383 | "cross-spawn": { 384 | "version": "5.1.0", 385 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 386 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 387 | "dev": true, 388 | "requires": { 389 | "lru-cache": "4.1.3", 390 | "shebang-command": "1.2.0", 391 | "which": "1.3.1" 392 | } 393 | }, 394 | "crypto-random-string": { 395 | "version": "1.0.0", 396 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", 397 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", 398 | "dev": true 399 | }, 400 | "debug": { 401 | "version": "3.1.0", 402 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 403 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 404 | "dev": true, 405 | "requires": { 406 | "ms": "2.0.0" 407 | } 408 | }, 409 | "decode-uri-component": { 410 | "version": "0.2.0", 411 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", 412 | "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", 413 | "dev": true 414 | }, 415 | "deep-extend": { 416 | "version": "0.6.0", 417 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 418 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 419 | "dev": true 420 | }, 421 | "define-property": { 422 | "version": "2.0.2", 423 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", 424 | "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", 425 | "dev": true, 426 | "requires": { 427 | "is-descriptor": "1.0.2", 428 | "isobject": "3.0.1" 429 | }, 430 | "dependencies": { 431 | "is-accessor-descriptor": { 432 | "version": "1.0.0", 433 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 434 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 435 | "dev": true, 436 | "requires": { 437 | "kind-of": "6.0.2" 438 | } 439 | }, 440 | "is-data-descriptor": { 441 | "version": "1.0.0", 442 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 443 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 444 | "dev": true, 445 | "requires": { 446 | "kind-of": "6.0.2" 447 | } 448 | }, 449 | "is-descriptor": { 450 | "version": "1.0.2", 451 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 452 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 453 | "dev": true, 454 | "requires": { 455 | "is-accessor-descriptor": "1.0.0", 456 | "is-data-descriptor": "1.0.0", 457 | "kind-of": "6.0.2" 458 | } 459 | } 460 | } 461 | }, 462 | "dot-prop": { 463 | "version": "4.2.0", 464 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", 465 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", 466 | "dev": true, 467 | "requires": { 468 | "is-obj": "1.0.1" 469 | } 470 | }, 471 | "duplexer": { 472 | "version": "0.1.1", 473 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 474 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 475 | "dev": true 476 | }, 477 | "duplexer3": { 478 | "version": "0.1.4", 479 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 480 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 481 | "dev": true 482 | }, 483 | "escape-string-regexp": { 484 | "version": "1.0.5", 485 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 486 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 487 | "dev": true 488 | }, 489 | "event-stream": { 490 | "version": "3.3.4", 491 | "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 492 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", 493 | "dev": true, 494 | "requires": { 495 | "duplexer": "0.1.1", 496 | "from": "0.1.7", 497 | "map-stream": "0.1.0", 498 | "pause-stream": "0.0.11", 499 | "split": "0.3.3", 500 | "stream-combiner": "0.0.4", 501 | "through": "2.3.8" 502 | } 503 | }, 504 | "eventemitter3": { 505 | "version": "3.1.0", 506 | "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", 507 | "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==" 508 | }, 509 | "execa": { 510 | "version": "0.7.0", 511 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 512 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 513 | "dev": true, 514 | "requires": { 515 | "cross-spawn": "5.1.0", 516 | "get-stream": "3.0.0", 517 | "is-stream": "1.1.0", 518 | "npm-run-path": "2.0.2", 519 | "p-finally": "1.0.0", 520 | "signal-exit": "3.0.2", 521 | "strip-eof": "1.0.0" 522 | } 523 | }, 524 | "expand-brackets": { 525 | "version": "2.1.4", 526 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", 527 | "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 528 | "dev": true, 529 | "requires": { 530 | "debug": "2.6.9", 531 | "define-property": "0.2.5", 532 | "extend-shallow": "2.0.1", 533 | "posix-character-classes": "0.1.1", 534 | "regex-not": "1.0.2", 535 | "snapdragon": "0.8.2", 536 | "to-regex": "3.0.2" 537 | }, 538 | "dependencies": { 539 | "debug": { 540 | "version": "2.6.9", 541 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 542 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 543 | "dev": true, 544 | "requires": { 545 | "ms": "2.0.0" 546 | } 547 | }, 548 | "define-property": { 549 | "version": "0.2.5", 550 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 551 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 552 | "dev": true, 553 | "requires": { 554 | "is-descriptor": "0.1.6" 555 | } 556 | }, 557 | "extend-shallow": { 558 | "version": "2.0.1", 559 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 560 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 561 | "dev": true, 562 | "requires": { 563 | "is-extendable": "0.1.1" 564 | } 565 | } 566 | } 567 | }, 568 | "extend-shallow": { 569 | "version": "3.0.2", 570 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 571 | "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", 572 | "dev": true, 573 | "requires": { 574 | "assign-symbols": "1.0.0", 575 | "is-extendable": "1.0.1" 576 | }, 577 | "dependencies": { 578 | "is-extendable": { 579 | "version": "1.0.1", 580 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 581 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 582 | "dev": true, 583 | "requires": { 584 | "is-plain-object": "2.0.4" 585 | } 586 | } 587 | } 588 | }, 589 | "extglob": { 590 | "version": "2.0.4", 591 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", 592 | "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", 593 | "dev": true, 594 | "requires": { 595 | "array-unique": "0.3.2", 596 | "define-property": "1.0.0", 597 | "expand-brackets": "2.1.4", 598 | "extend-shallow": "2.0.1", 599 | "fragment-cache": "0.2.1", 600 | "regex-not": "1.0.2", 601 | "snapdragon": "0.8.2", 602 | "to-regex": "3.0.2" 603 | }, 604 | "dependencies": { 605 | "define-property": { 606 | "version": "1.0.0", 607 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 608 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 609 | "dev": true, 610 | "requires": { 611 | "is-descriptor": "1.0.2" 612 | } 613 | }, 614 | "extend-shallow": { 615 | "version": "2.0.1", 616 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 617 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 618 | "dev": true, 619 | "requires": { 620 | "is-extendable": "0.1.1" 621 | } 622 | }, 623 | "is-accessor-descriptor": { 624 | "version": "1.0.0", 625 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 626 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 627 | "dev": true, 628 | "requires": { 629 | "kind-of": "6.0.2" 630 | } 631 | }, 632 | "is-data-descriptor": { 633 | "version": "1.0.0", 634 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 635 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 636 | "dev": true, 637 | "requires": { 638 | "kind-of": "6.0.2" 639 | } 640 | }, 641 | "is-descriptor": { 642 | "version": "1.0.2", 643 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 644 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 645 | "dev": true, 646 | "requires": { 647 | "is-accessor-descriptor": "1.0.0", 648 | "is-data-descriptor": "1.0.0", 649 | "kind-of": "6.0.2" 650 | } 651 | } 652 | } 653 | }, 654 | "fill-range": { 655 | "version": "4.0.0", 656 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", 657 | "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 658 | "dev": true, 659 | "requires": { 660 | "extend-shallow": "2.0.1", 661 | "is-number": "3.0.0", 662 | "repeat-string": "1.6.1", 663 | "to-regex-range": "2.1.1" 664 | }, 665 | "dependencies": { 666 | "extend-shallow": { 667 | "version": "2.0.1", 668 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 669 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 670 | "dev": true, 671 | "requires": { 672 | "is-extendable": "0.1.1" 673 | } 674 | } 675 | } 676 | }, 677 | "for-in": { 678 | "version": "1.0.2", 679 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 680 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 681 | "dev": true 682 | }, 683 | "fragment-cache": { 684 | "version": "0.2.1", 685 | "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", 686 | "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", 687 | "dev": true, 688 | "requires": { 689 | "map-cache": "0.2.2" 690 | } 691 | }, 692 | "from": { 693 | "version": "0.1.7", 694 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 695 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", 696 | "dev": true 697 | }, 698 | "fsevents": { 699 | "version": "1.2.4", 700 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", 701 | "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", 702 | "dev": true, 703 | "optional": true, 704 | "requires": { 705 | "nan": "2.11.0", 706 | "node-pre-gyp": "0.10.0" 707 | }, 708 | "dependencies": { 709 | "abbrev": { 710 | "version": "1.1.1", 711 | "bundled": true, 712 | "dev": true, 713 | "optional": true 714 | }, 715 | "ansi-regex": { 716 | "version": "2.1.1", 717 | "bundled": true, 718 | "dev": true 719 | }, 720 | "aproba": { 721 | "version": "1.2.0", 722 | "bundled": true, 723 | "dev": true, 724 | "optional": true 725 | }, 726 | "are-we-there-yet": { 727 | "version": "1.1.4", 728 | "bundled": true, 729 | "dev": true, 730 | "optional": true, 731 | "requires": { 732 | "delegates": "1.0.0", 733 | "readable-stream": "2.3.6" 734 | } 735 | }, 736 | "balanced-match": { 737 | "version": "1.0.0", 738 | "bundled": true, 739 | "dev": true 740 | }, 741 | "brace-expansion": { 742 | "version": "1.1.11", 743 | "bundled": true, 744 | "dev": true, 745 | "requires": { 746 | "balanced-match": "1.0.0", 747 | "concat-map": "0.0.1" 748 | } 749 | }, 750 | "chownr": { 751 | "version": "1.0.1", 752 | "bundled": true, 753 | "dev": true, 754 | "optional": true 755 | }, 756 | "code-point-at": { 757 | "version": "1.1.0", 758 | "bundled": true, 759 | "dev": true 760 | }, 761 | "concat-map": { 762 | "version": "0.0.1", 763 | "bundled": true, 764 | "dev": true 765 | }, 766 | "console-control-strings": { 767 | "version": "1.1.0", 768 | "bundled": true, 769 | "dev": true 770 | }, 771 | "core-util-is": { 772 | "version": "1.0.2", 773 | "bundled": true, 774 | "dev": true, 775 | "optional": true 776 | }, 777 | "debug": { 778 | "version": "2.6.9", 779 | "bundled": true, 780 | "dev": true, 781 | "optional": true, 782 | "requires": { 783 | "ms": "2.0.0" 784 | } 785 | }, 786 | "deep-extend": { 787 | "version": "0.5.1", 788 | "bundled": true, 789 | "dev": true, 790 | "optional": true 791 | }, 792 | "delegates": { 793 | "version": "1.0.0", 794 | "bundled": true, 795 | "dev": true, 796 | "optional": true 797 | }, 798 | "detect-libc": { 799 | "version": "1.0.3", 800 | "bundled": true, 801 | "dev": true, 802 | "optional": true 803 | }, 804 | "fs-minipass": { 805 | "version": "1.2.5", 806 | "bundled": true, 807 | "dev": true, 808 | "optional": true, 809 | "requires": { 810 | "minipass": "2.2.4" 811 | } 812 | }, 813 | "fs.realpath": { 814 | "version": "1.0.0", 815 | "bundled": true, 816 | "dev": true, 817 | "optional": true 818 | }, 819 | "gauge": { 820 | "version": "2.7.4", 821 | "bundled": true, 822 | "dev": true, 823 | "optional": true, 824 | "requires": { 825 | "aproba": "1.2.0", 826 | "console-control-strings": "1.1.0", 827 | "has-unicode": "2.0.1", 828 | "object-assign": "4.1.1", 829 | "signal-exit": "3.0.2", 830 | "string-width": "1.0.2", 831 | "strip-ansi": "3.0.1", 832 | "wide-align": "1.1.2" 833 | } 834 | }, 835 | "glob": { 836 | "version": "7.1.2", 837 | "bundled": true, 838 | "dev": true, 839 | "optional": true, 840 | "requires": { 841 | "fs.realpath": "1.0.0", 842 | "inflight": "1.0.6", 843 | "inherits": "2.0.3", 844 | "minimatch": "3.0.4", 845 | "once": "1.4.0", 846 | "path-is-absolute": "1.0.1" 847 | } 848 | }, 849 | "has-unicode": { 850 | "version": "2.0.1", 851 | "bundled": true, 852 | "dev": true, 853 | "optional": true 854 | }, 855 | "iconv-lite": { 856 | "version": "0.4.21", 857 | "bundled": true, 858 | "dev": true, 859 | "optional": true, 860 | "requires": { 861 | "safer-buffer": "2.1.2" 862 | } 863 | }, 864 | "ignore-walk": { 865 | "version": "3.0.1", 866 | "bundled": true, 867 | "dev": true, 868 | "optional": true, 869 | "requires": { 870 | "minimatch": "3.0.4" 871 | } 872 | }, 873 | "inflight": { 874 | "version": "1.0.6", 875 | "bundled": true, 876 | "dev": true, 877 | "optional": true, 878 | "requires": { 879 | "once": "1.4.0", 880 | "wrappy": "1.0.2" 881 | } 882 | }, 883 | "inherits": { 884 | "version": "2.0.3", 885 | "bundled": true, 886 | "dev": true 887 | }, 888 | "ini": { 889 | "version": "1.3.5", 890 | "bundled": true, 891 | "dev": true, 892 | "optional": true 893 | }, 894 | "is-fullwidth-code-point": { 895 | "version": "1.0.0", 896 | "bundled": true, 897 | "dev": true, 898 | "requires": { 899 | "number-is-nan": "1.0.1" 900 | } 901 | }, 902 | "isarray": { 903 | "version": "1.0.0", 904 | "bundled": true, 905 | "dev": true, 906 | "optional": true 907 | }, 908 | "minimatch": { 909 | "version": "3.0.4", 910 | "bundled": true, 911 | "dev": true, 912 | "requires": { 913 | "brace-expansion": "1.1.11" 914 | } 915 | }, 916 | "minimist": { 917 | "version": "0.0.8", 918 | "bundled": true, 919 | "dev": true 920 | }, 921 | "minipass": { 922 | "version": "2.2.4", 923 | "bundled": true, 924 | "dev": true, 925 | "requires": { 926 | "safe-buffer": "5.1.1", 927 | "yallist": "3.0.2" 928 | } 929 | }, 930 | "minizlib": { 931 | "version": "1.1.0", 932 | "bundled": true, 933 | "dev": true, 934 | "optional": true, 935 | "requires": { 936 | "minipass": "2.2.4" 937 | } 938 | }, 939 | "mkdirp": { 940 | "version": "0.5.1", 941 | "bundled": true, 942 | "dev": true, 943 | "requires": { 944 | "minimist": "0.0.8" 945 | } 946 | }, 947 | "ms": { 948 | "version": "2.0.0", 949 | "bundled": true, 950 | "dev": true, 951 | "optional": true 952 | }, 953 | "needle": { 954 | "version": "2.2.0", 955 | "bundled": true, 956 | "dev": true, 957 | "optional": true, 958 | "requires": { 959 | "debug": "2.6.9", 960 | "iconv-lite": "0.4.21", 961 | "sax": "1.2.4" 962 | } 963 | }, 964 | "node-pre-gyp": { 965 | "version": "0.10.0", 966 | "bundled": true, 967 | "dev": true, 968 | "optional": true, 969 | "requires": { 970 | "detect-libc": "1.0.3", 971 | "mkdirp": "0.5.1", 972 | "needle": "2.2.0", 973 | "nopt": "4.0.1", 974 | "npm-packlist": "1.1.10", 975 | "npmlog": "4.1.2", 976 | "rc": "1.2.7", 977 | "rimraf": "2.6.2", 978 | "semver": "5.5.0", 979 | "tar": "4.4.1" 980 | } 981 | }, 982 | "nopt": { 983 | "version": "4.0.1", 984 | "bundled": true, 985 | "dev": true, 986 | "optional": true, 987 | "requires": { 988 | "abbrev": "1.1.1", 989 | "osenv": "0.1.5" 990 | } 991 | }, 992 | "npm-bundled": { 993 | "version": "1.0.3", 994 | "bundled": true, 995 | "dev": true, 996 | "optional": true 997 | }, 998 | "npm-packlist": { 999 | "version": "1.1.10", 1000 | "bundled": true, 1001 | "dev": true, 1002 | "optional": true, 1003 | "requires": { 1004 | "ignore-walk": "3.0.1", 1005 | "npm-bundled": "1.0.3" 1006 | } 1007 | }, 1008 | "npmlog": { 1009 | "version": "4.1.2", 1010 | "bundled": true, 1011 | "dev": true, 1012 | "optional": true, 1013 | "requires": { 1014 | "are-we-there-yet": "1.1.4", 1015 | "console-control-strings": "1.1.0", 1016 | "gauge": "2.7.4", 1017 | "set-blocking": "2.0.0" 1018 | } 1019 | }, 1020 | "number-is-nan": { 1021 | "version": "1.0.1", 1022 | "bundled": true, 1023 | "dev": true 1024 | }, 1025 | "object-assign": { 1026 | "version": "4.1.1", 1027 | "bundled": true, 1028 | "dev": true, 1029 | "optional": true 1030 | }, 1031 | "once": { 1032 | "version": "1.4.0", 1033 | "bundled": true, 1034 | "dev": true, 1035 | "requires": { 1036 | "wrappy": "1.0.2" 1037 | } 1038 | }, 1039 | "os-homedir": { 1040 | "version": "1.0.2", 1041 | "bundled": true, 1042 | "dev": true, 1043 | "optional": true 1044 | }, 1045 | "os-tmpdir": { 1046 | "version": "1.0.2", 1047 | "bundled": true, 1048 | "dev": true, 1049 | "optional": true 1050 | }, 1051 | "osenv": { 1052 | "version": "0.1.5", 1053 | "bundled": true, 1054 | "dev": true, 1055 | "optional": true, 1056 | "requires": { 1057 | "os-homedir": "1.0.2", 1058 | "os-tmpdir": "1.0.2" 1059 | } 1060 | }, 1061 | "path-is-absolute": { 1062 | "version": "1.0.1", 1063 | "bundled": true, 1064 | "dev": true, 1065 | "optional": true 1066 | }, 1067 | "process-nextick-args": { 1068 | "version": "2.0.0", 1069 | "bundled": true, 1070 | "dev": true, 1071 | "optional": true 1072 | }, 1073 | "rc": { 1074 | "version": "1.2.7", 1075 | "bundled": true, 1076 | "dev": true, 1077 | "optional": true, 1078 | "requires": { 1079 | "deep-extend": "0.5.1", 1080 | "ini": "1.3.5", 1081 | "minimist": "1.2.0", 1082 | "strip-json-comments": "2.0.1" 1083 | }, 1084 | "dependencies": { 1085 | "minimist": { 1086 | "version": "1.2.0", 1087 | "bundled": true, 1088 | "dev": true, 1089 | "optional": true 1090 | } 1091 | } 1092 | }, 1093 | "readable-stream": { 1094 | "version": "2.3.6", 1095 | "bundled": true, 1096 | "dev": true, 1097 | "optional": true, 1098 | "requires": { 1099 | "core-util-is": "1.0.2", 1100 | "inherits": "2.0.3", 1101 | "isarray": "1.0.0", 1102 | "process-nextick-args": "2.0.0", 1103 | "safe-buffer": "5.1.1", 1104 | "string_decoder": "1.1.1", 1105 | "util-deprecate": "1.0.2" 1106 | } 1107 | }, 1108 | "rimraf": { 1109 | "version": "2.6.2", 1110 | "bundled": true, 1111 | "dev": true, 1112 | "optional": true, 1113 | "requires": { 1114 | "glob": "7.1.2" 1115 | } 1116 | }, 1117 | "safe-buffer": { 1118 | "version": "5.1.1", 1119 | "bundled": true, 1120 | "dev": true 1121 | }, 1122 | "safer-buffer": { 1123 | "version": "2.1.2", 1124 | "bundled": true, 1125 | "dev": true, 1126 | "optional": true 1127 | }, 1128 | "sax": { 1129 | "version": "1.2.4", 1130 | "bundled": true, 1131 | "dev": true, 1132 | "optional": true 1133 | }, 1134 | "semver": { 1135 | "version": "5.5.0", 1136 | "bundled": true, 1137 | "dev": true, 1138 | "optional": true 1139 | }, 1140 | "set-blocking": { 1141 | "version": "2.0.0", 1142 | "bundled": true, 1143 | "dev": true, 1144 | "optional": true 1145 | }, 1146 | "signal-exit": { 1147 | "version": "3.0.2", 1148 | "bundled": true, 1149 | "dev": true, 1150 | "optional": true 1151 | }, 1152 | "string-width": { 1153 | "version": "1.0.2", 1154 | "bundled": true, 1155 | "dev": true, 1156 | "requires": { 1157 | "code-point-at": "1.1.0", 1158 | "is-fullwidth-code-point": "1.0.0", 1159 | "strip-ansi": "3.0.1" 1160 | } 1161 | }, 1162 | "string_decoder": { 1163 | "version": "1.1.1", 1164 | "bundled": true, 1165 | "dev": true, 1166 | "optional": true, 1167 | "requires": { 1168 | "safe-buffer": "5.1.1" 1169 | } 1170 | }, 1171 | "strip-ansi": { 1172 | "version": "3.0.1", 1173 | "bundled": true, 1174 | "dev": true, 1175 | "requires": { 1176 | "ansi-regex": "2.1.1" 1177 | } 1178 | }, 1179 | "strip-json-comments": { 1180 | "version": "2.0.1", 1181 | "bundled": true, 1182 | "dev": true, 1183 | "optional": true 1184 | }, 1185 | "tar": { 1186 | "version": "4.4.1", 1187 | "bundled": true, 1188 | "dev": true, 1189 | "optional": true, 1190 | "requires": { 1191 | "chownr": "1.0.1", 1192 | "fs-minipass": "1.2.5", 1193 | "minipass": "2.2.4", 1194 | "minizlib": "1.1.0", 1195 | "mkdirp": "0.5.1", 1196 | "safe-buffer": "5.1.1", 1197 | "yallist": "3.0.2" 1198 | } 1199 | }, 1200 | "util-deprecate": { 1201 | "version": "1.0.2", 1202 | "bundled": true, 1203 | "dev": true, 1204 | "optional": true 1205 | }, 1206 | "wide-align": { 1207 | "version": "1.1.2", 1208 | "bundled": true, 1209 | "dev": true, 1210 | "optional": true, 1211 | "requires": { 1212 | "string-width": "1.0.2" 1213 | } 1214 | }, 1215 | "wrappy": { 1216 | "version": "1.0.2", 1217 | "bundled": true, 1218 | "dev": true 1219 | }, 1220 | "yallist": { 1221 | "version": "3.0.2", 1222 | "bundled": true, 1223 | "dev": true 1224 | } 1225 | } 1226 | }, 1227 | "get-stream": { 1228 | "version": "3.0.0", 1229 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 1230 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 1231 | "dev": true 1232 | }, 1233 | "get-value": { 1234 | "version": "2.0.6", 1235 | "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 1236 | "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", 1237 | "dev": true 1238 | }, 1239 | "glob-parent": { 1240 | "version": "3.1.0", 1241 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", 1242 | "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", 1243 | "dev": true, 1244 | "requires": { 1245 | "is-glob": "3.1.0", 1246 | "path-dirname": "1.0.2" 1247 | }, 1248 | "dependencies": { 1249 | "is-glob": { 1250 | "version": "3.1.0", 1251 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", 1252 | "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", 1253 | "dev": true, 1254 | "requires": { 1255 | "is-extglob": "2.1.1" 1256 | } 1257 | } 1258 | } 1259 | }, 1260 | "global-dirs": { 1261 | "version": "0.1.1", 1262 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", 1263 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", 1264 | "dev": true, 1265 | "requires": { 1266 | "ini": "1.3.5" 1267 | } 1268 | }, 1269 | "got": { 1270 | "version": "6.7.1", 1271 | "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", 1272 | "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", 1273 | "dev": true, 1274 | "requires": { 1275 | "create-error-class": "3.0.2", 1276 | "duplexer3": "0.1.4", 1277 | "get-stream": "3.0.0", 1278 | "is-redirect": "1.0.0", 1279 | "is-retry-allowed": "1.1.0", 1280 | "is-stream": "1.1.0", 1281 | "lowercase-keys": "1.0.1", 1282 | "safe-buffer": "5.1.2", 1283 | "timed-out": "4.0.1", 1284 | "unzip-response": "2.0.1", 1285 | "url-parse-lax": "1.0.0" 1286 | } 1287 | }, 1288 | "graceful-fs": { 1289 | "version": "4.1.11", 1290 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1291 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1292 | "dev": true 1293 | }, 1294 | "has-flag": { 1295 | "version": "3.0.0", 1296 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1297 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1298 | "dev": true 1299 | }, 1300 | "has-value": { 1301 | "version": "1.0.0", 1302 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", 1303 | "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", 1304 | "dev": true, 1305 | "requires": { 1306 | "get-value": "2.0.6", 1307 | "has-values": "1.0.0", 1308 | "isobject": "3.0.1" 1309 | } 1310 | }, 1311 | "has-values": { 1312 | "version": "1.0.0", 1313 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", 1314 | "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", 1315 | "dev": true, 1316 | "requires": { 1317 | "is-number": "3.0.0", 1318 | "kind-of": "4.0.0" 1319 | }, 1320 | "dependencies": { 1321 | "kind-of": { 1322 | "version": "4.0.0", 1323 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 1324 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 1325 | "dev": true, 1326 | "requires": { 1327 | "is-buffer": "1.1.6" 1328 | } 1329 | } 1330 | } 1331 | }, 1332 | "ignore-by-default": { 1333 | "version": "1.0.1", 1334 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 1335 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", 1336 | "dev": true 1337 | }, 1338 | "import-lazy": { 1339 | "version": "2.1.0", 1340 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 1341 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", 1342 | "dev": true 1343 | }, 1344 | "imurmurhash": { 1345 | "version": "0.1.4", 1346 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1347 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1348 | "dev": true 1349 | }, 1350 | "inherits": { 1351 | "version": "2.0.3", 1352 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1353 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1354 | "dev": true 1355 | }, 1356 | "ini": { 1357 | "version": "1.3.5", 1358 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 1359 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", 1360 | "dev": true 1361 | }, 1362 | "is-accessor-descriptor": { 1363 | "version": "0.1.6", 1364 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", 1365 | "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 1366 | "dev": true, 1367 | "requires": { 1368 | "kind-of": "3.2.2" 1369 | }, 1370 | "dependencies": { 1371 | "kind-of": { 1372 | "version": "3.2.2", 1373 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1374 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1375 | "dev": true, 1376 | "requires": { 1377 | "is-buffer": "1.1.6" 1378 | } 1379 | } 1380 | } 1381 | }, 1382 | "is-binary-path": { 1383 | "version": "1.0.1", 1384 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 1385 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 1386 | "dev": true, 1387 | "requires": { 1388 | "binary-extensions": "1.11.0" 1389 | } 1390 | }, 1391 | "is-buffer": { 1392 | "version": "1.1.6", 1393 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 1394 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", 1395 | "dev": true 1396 | }, 1397 | "is-ci": { 1398 | "version": "1.2.0", 1399 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.0.tgz", 1400 | "integrity": "sha512-plgvKjQtalH2P3Gytb7L61Lmz95g2DlpzFiQyRSFew8WoJKxtKRzrZMeyRN2supblm3Psc8OQGy7Xjb6XG11jw==", 1401 | "dev": true, 1402 | "requires": { 1403 | "ci-info": "1.4.0" 1404 | } 1405 | }, 1406 | "is-data-descriptor": { 1407 | "version": "0.1.4", 1408 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", 1409 | "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 1410 | "dev": true, 1411 | "requires": { 1412 | "kind-of": "3.2.2" 1413 | }, 1414 | "dependencies": { 1415 | "kind-of": { 1416 | "version": "3.2.2", 1417 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1418 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1419 | "dev": true, 1420 | "requires": { 1421 | "is-buffer": "1.1.6" 1422 | } 1423 | } 1424 | } 1425 | }, 1426 | "is-descriptor": { 1427 | "version": "0.1.6", 1428 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", 1429 | "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 1430 | "dev": true, 1431 | "requires": { 1432 | "is-accessor-descriptor": "0.1.6", 1433 | "is-data-descriptor": "0.1.4", 1434 | "kind-of": "5.1.0" 1435 | }, 1436 | "dependencies": { 1437 | "kind-of": { 1438 | "version": "5.1.0", 1439 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", 1440 | "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", 1441 | "dev": true 1442 | } 1443 | } 1444 | }, 1445 | "is-extendable": { 1446 | "version": "0.1.1", 1447 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1448 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 1449 | "dev": true 1450 | }, 1451 | "is-extglob": { 1452 | "version": "2.1.1", 1453 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1454 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1455 | "dev": true 1456 | }, 1457 | "is-fullwidth-code-point": { 1458 | "version": "2.0.0", 1459 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1460 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1461 | "dev": true 1462 | }, 1463 | "is-glob": { 1464 | "version": "4.0.0", 1465 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", 1466 | "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", 1467 | "dev": true, 1468 | "requires": { 1469 | "is-extglob": "2.1.1" 1470 | } 1471 | }, 1472 | "is-installed-globally": { 1473 | "version": "0.1.0", 1474 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", 1475 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", 1476 | "dev": true, 1477 | "requires": { 1478 | "global-dirs": "0.1.1", 1479 | "is-path-inside": "1.0.1" 1480 | } 1481 | }, 1482 | "is-npm": { 1483 | "version": "1.0.0", 1484 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", 1485 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", 1486 | "dev": true 1487 | }, 1488 | "is-number": { 1489 | "version": "3.0.0", 1490 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 1491 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 1492 | "dev": true, 1493 | "requires": { 1494 | "kind-of": "3.2.2" 1495 | }, 1496 | "dependencies": { 1497 | "kind-of": { 1498 | "version": "3.2.2", 1499 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1500 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1501 | "dev": true, 1502 | "requires": { 1503 | "is-buffer": "1.1.6" 1504 | } 1505 | } 1506 | } 1507 | }, 1508 | "is-obj": { 1509 | "version": "1.0.1", 1510 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 1511 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 1512 | "dev": true 1513 | }, 1514 | "is-path-inside": { 1515 | "version": "1.0.1", 1516 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", 1517 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", 1518 | "dev": true, 1519 | "requires": { 1520 | "path-is-inside": "1.0.2" 1521 | } 1522 | }, 1523 | "is-plain-object": { 1524 | "version": "2.0.4", 1525 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", 1526 | "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", 1527 | "dev": true, 1528 | "requires": { 1529 | "isobject": "3.0.1" 1530 | } 1531 | }, 1532 | "is-redirect": { 1533 | "version": "1.0.0", 1534 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 1535 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", 1536 | "dev": true 1537 | }, 1538 | "is-retry-allowed": { 1539 | "version": "1.1.0", 1540 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", 1541 | "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", 1542 | "dev": true 1543 | }, 1544 | "is-stream": { 1545 | "version": "1.1.0", 1546 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1547 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 1548 | "dev": true 1549 | }, 1550 | "is-windows": { 1551 | "version": "1.0.2", 1552 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 1553 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 1554 | "dev": true 1555 | }, 1556 | "isarray": { 1557 | "version": "1.0.0", 1558 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1559 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1560 | "dev": true 1561 | }, 1562 | "isexe": { 1563 | "version": "2.0.0", 1564 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1565 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1566 | "dev": true 1567 | }, 1568 | "isobject": { 1569 | "version": "3.0.1", 1570 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 1571 | "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", 1572 | "dev": true 1573 | }, 1574 | "kind-of": { 1575 | "version": "6.0.2", 1576 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", 1577 | "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", 1578 | "dev": true 1579 | }, 1580 | "latest-version": { 1581 | "version": "3.1.0", 1582 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", 1583 | "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", 1584 | "dev": true, 1585 | "requires": { 1586 | "package-json": "4.0.1" 1587 | } 1588 | }, 1589 | "lodash.debounce": { 1590 | "version": "4.0.8", 1591 | "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", 1592 | "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", 1593 | "dev": true 1594 | }, 1595 | "lowercase-keys": { 1596 | "version": "1.0.1", 1597 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1598 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1599 | "dev": true 1600 | }, 1601 | "lru-cache": { 1602 | "version": "4.1.3", 1603 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", 1604 | "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", 1605 | "dev": true, 1606 | "requires": { 1607 | "pseudomap": "1.0.2", 1608 | "yallist": "2.1.2" 1609 | } 1610 | }, 1611 | "make-dir": { 1612 | "version": "1.3.0", 1613 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 1614 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 1615 | "dev": true, 1616 | "requires": { 1617 | "pify": "3.0.0" 1618 | } 1619 | }, 1620 | "map-cache": { 1621 | "version": "0.2.2", 1622 | "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", 1623 | "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", 1624 | "dev": true 1625 | }, 1626 | "map-stream": { 1627 | "version": "0.1.0", 1628 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 1629 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", 1630 | "dev": true 1631 | }, 1632 | "map-visit": { 1633 | "version": "1.0.0", 1634 | "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", 1635 | "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", 1636 | "dev": true, 1637 | "requires": { 1638 | "object-visit": "1.0.1" 1639 | } 1640 | }, 1641 | "micromatch": { 1642 | "version": "3.1.10", 1643 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", 1644 | "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", 1645 | "dev": true, 1646 | "requires": { 1647 | "arr-diff": "4.0.0", 1648 | "array-unique": "0.3.2", 1649 | "braces": "2.3.2", 1650 | "define-property": "2.0.2", 1651 | "extend-shallow": "3.0.2", 1652 | "extglob": "2.0.4", 1653 | "fragment-cache": "0.2.1", 1654 | "kind-of": "6.0.2", 1655 | "nanomatch": "1.2.13", 1656 | "object.pick": "1.3.0", 1657 | "regex-not": "1.0.2", 1658 | "snapdragon": "0.8.2", 1659 | "to-regex": "3.0.2" 1660 | } 1661 | }, 1662 | "minimatch": { 1663 | "version": "3.0.4", 1664 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1665 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1666 | "dev": true, 1667 | "requires": { 1668 | "brace-expansion": "1.1.11" 1669 | } 1670 | }, 1671 | "minimist": { 1672 | "version": "1.2.0", 1673 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1674 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1675 | "dev": true 1676 | }, 1677 | "mixin-deep": { 1678 | "version": "1.3.1", 1679 | "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", 1680 | "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", 1681 | "dev": true, 1682 | "requires": { 1683 | "for-in": "1.0.2", 1684 | "is-extendable": "1.0.1" 1685 | }, 1686 | "dependencies": { 1687 | "is-extendable": { 1688 | "version": "1.0.1", 1689 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", 1690 | "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", 1691 | "dev": true, 1692 | "requires": { 1693 | "is-plain-object": "2.0.4" 1694 | } 1695 | } 1696 | } 1697 | }, 1698 | "ms": { 1699 | "version": "2.0.0", 1700 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1701 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1702 | "dev": true 1703 | }, 1704 | "nan": { 1705 | "version": "2.11.0", 1706 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", 1707 | "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==", 1708 | "dev": true, 1709 | "optional": true 1710 | }, 1711 | "nanomatch": { 1712 | "version": "1.2.13", 1713 | "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", 1714 | "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", 1715 | "dev": true, 1716 | "requires": { 1717 | "arr-diff": "4.0.0", 1718 | "array-unique": "0.3.2", 1719 | "define-property": "2.0.2", 1720 | "extend-shallow": "3.0.2", 1721 | "fragment-cache": "0.2.1", 1722 | "is-windows": "1.0.2", 1723 | "kind-of": "6.0.2", 1724 | "object.pick": "1.3.0", 1725 | "regex-not": "1.0.2", 1726 | "snapdragon": "0.8.2", 1727 | "to-regex": "3.0.2" 1728 | } 1729 | }, 1730 | "nodemon": { 1731 | "version": "1.18.3", 1732 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.3.tgz", 1733 | "integrity": "sha512-XdVfAjGlDKU2nqoGgycxTndkJ5fdwvWJ/tlMGk2vHxMZBrSPVh86OM6z7viAv8BBJWjMgeuYQBofzr6LUoi+7g==", 1734 | "dev": true, 1735 | "requires": { 1736 | "chokidar": "2.0.4", 1737 | "debug": "3.1.0", 1738 | "ignore-by-default": "1.0.1", 1739 | "minimatch": "3.0.4", 1740 | "pstree.remy": "1.1.0", 1741 | "semver": "5.5.1", 1742 | "supports-color": "5.5.0", 1743 | "touch": "3.1.0", 1744 | "undefsafe": "2.0.2", 1745 | "update-notifier": "2.5.0" 1746 | } 1747 | }, 1748 | "nopt": { 1749 | "version": "1.0.10", 1750 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 1751 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 1752 | "dev": true, 1753 | "requires": { 1754 | "abbrev": "1.1.1" 1755 | } 1756 | }, 1757 | "normalize-path": { 1758 | "version": "2.1.1", 1759 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 1760 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 1761 | "dev": true, 1762 | "requires": { 1763 | "remove-trailing-separator": "1.1.0" 1764 | } 1765 | }, 1766 | "npm-run-path": { 1767 | "version": "2.0.2", 1768 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 1769 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 1770 | "dev": true, 1771 | "requires": { 1772 | "path-key": "2.0.1" 1773 | } 1774 | }, 1775 | "object-copy": { 1776 | "version": "0.1.0", 1777 | "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", 1778 | "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", 1779 | "dev": true, 1780 | "requires": { 1781 | "copy-descriptor": "0.1.1", 1782 | "define-property": "0.2.5", 1783 | "kind-of": "3.2.2" 1784 | }, 1785 | "dependencies": { 1786 | "define-property": { 1787 | "version": "0.2.5", 1788 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 1789 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 1790 | "dev": true, 1791 | "requires": { 1792 | "is-descriptor": "0.1.6" 1793 | } 1794 | }, 1795 | "kind-of": { 1796 | "version": "3.2.2", 1797 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1798 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1799 | "dev": true, 1800 | "requires": { 1801 | "is-buffer": "1.1.6" 1802 | } 1803 | } 1804 | } 1805 | }, 1806 | "object-visit": { 1807 | "version": "1.0.1", 1808 | "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", 1809 | "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", 1810 | "dev": true, 1811 | "requires": { 1812 | "isobject": "3.0.1" 1813 | } 1814 | }, 1815 | "object.pick": { 1816 | "version": "1.3.0", 1817 | "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", 1818 | "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", 1819 | "dev": true, 1820 | "requires": { 1821 | "isobject": "3.0.1" 1822 | } 1823 | }, 1824 | "p-finally": { 1825 | "version": "1.0.0", 1826 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1827 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 1828 | "dev": true 1829 | }, 1830 | "package-json": { 1831 | "version": "4.0.1", 1832 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", 1833 | "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", 1834 | "dev": true, 1835 | "requires": { 1836 | "got": "6.7.1", 1837 | "registry-auth-token": "3.3.2", 1838 | "registry-url": "3.1.0", 1839 | "semver": "5.5.1" 1840 | } 1841 | }, 1842 | "pascalcase": { 1843 | "version": "0.1.1", 1844 | "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", 1845 | "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", 1846 | "dev": true 1847 | }, 1848 | "path-dirname": { 1849 | "version": "1.0.2", 1850 | "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", 1851 | "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", 1852 | "dev": true 1853 | }, 1854 | "path-is-absolute": { 1855 | "version": "1.0.1", 1856 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1857 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1858 | "dev": true 1859 | }, 1860 | "path-is-inside": { 1861 | "version": "1.0.2", 1862 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 1863 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", 1864 | "dev": true 1865 | }, 1866 | "path-key": { 1867 | "version": "2.0.1", 1868 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1869 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1870 | "dev": true 1871 | }, 1872 | "pause-stream": { 1873 | "version": "0.0.11", 1874 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 1875 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 1876 | "dev": true, 1877 | "requires": { 1878 | "through": "2.3.8" 1879 | } 1880 | }, 1881 | "pify": { 1882 | "version": "3.0.0", 1883 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1884 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", 1885 | "dev": true 1886 | }, 1887 | "posix-character-classes": { 1888 | "version": "0.1.1", 1889 | "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", 1890 | "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", 1891 | "dev": true 1892 | }, 1893 | "prepend-http": { 1894 | "version": "1.0.4", 1895 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 1896 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", 1897 | "dev": true 1898 | }, 1899 | "process-nextick-args": { 1900 | "version": "2.0.0", 1901 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1902 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 1903 | "dev": true 1904 | }, 1905 | "ps-tree": { 1906 | "version": "1.1.0", 1907 | "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", 1908 | "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", 1909 | "dev": true, 1910 | "requires": { 1911 | "event-stream": "3.3.4" 1912 | } 1913 | }, 1914 | "pseudomap": { 1915 | "version": "1.0.2", 1916 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1917 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 1918 | "dev": true 1919 | }, 1920 | "pstree.remy": { 1921 | "version": "1.1.0", 1922 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.0.tgz", 1923 | "integrity": "sha512-q5I5vLRMVtdWa8n/3UEzZX7Lfghzrg9eG2IKk2ENLSofKRCXVqMvMUHxCKgXNaqH/8ebhBxrqftHWnyTFweJ5Q==", 1924 | "dev": true, 1925 | "requires": { 1926 | "ps-tree": "1.1.0" 1927 | } 1928 | }, 1929 | "rc": { 1930 | "version": "1.2.8", 1931 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 1932 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 1933 | "dev": true, 1934 | "requires": { 1935 | "deep-extend": "0.6.0", 1936 | "ini": "1.3.5", 1937 | "minimist": "1.2.0", 1938 | "strip-json-comments": "2.0.1" 1939 | } 1940 | }, 1941 | "readable-stream": { 1942 | "version": "2.3.6", 1943 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1944 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1945 | "dev": true, 1946 | "requires": { 1947 | "core-util-is": "1.0.2", 1948 | "inherits": "2.0.3", 1949 | "isarray": "1.0.0", 1950 | "process-nextick-args": "2.0.0", 1951 | "safe-buffer": "5.1.2", 1952 | "string_decoder": "1.1.1", 1953 | "util-deprecate": "1.0.2" 1954 | } 1955 | }, 1956 | "readdirp": { 1957 | "version": "2.1.0", 1958 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", 1959 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", 1960 | "dev": true, 1961 | "requires": { 1962 | "graceful-fs": "4.1.11", 1963 | "minimatch": "3.0.4", 1964 | "readable-stream": "2.3.6", 1965 | "set-immediate-shim": "1.0.1" 1966 | } 1967 | }, 1968 | "regex-not": { 1969 | "version": "1.0.2", 1970 | "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", 1971 | "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", 1972 | "dev": true, 1973 | "requires": { 1974 | "extend-shallow": "3.0.2", 1975 | "safe-regex": "1.1.0" 1976 | } 1977 | }, 1978 | "registry-auth-token": { 1979 | "version": "3.3.2", 1980 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", 1981 | "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", 1982 | "dev": true, 1983 | "requires": { 1984 | "rc": "1.2.8", 1985 | "safe-buffer": "5.1.2" 1986 | } 1987 | }, 1988 | "registry-url": { 1989 | "version": "3.1.0", 1990 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 1991 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", 1992 | "dev": true, 1993 | "requires": { 1994 | "rc": "1.2.8" 1995 | } 1996 | }, 1997 | "remove-trailing-separator": { 1998 | "version": "1.1.0", 1999 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 2000 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 2001 | "dev": true 2002 | }, 2003 | "repeat-element": { 2004 | "version": "1.1.3", 2005 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", 2006 | "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", 2007 | "dev": true 2008 | }, 2009 | "repeat-string": { 2010 | "version": "1.6.1", 2011 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 2012 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 2013 | "dev": true 2014 | }, 2015 | "resolve-url": { 2016 | "version": "0.2.1", 2017 | "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", 2018 | "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", 2019 | "dev": true 2020 | }, 2021 | "ret": { 2022 | "version": "0.1.15", 2023 | "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", 2024 | "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", 2025 | "dev": true 2026 | }, 2027 | "safe-buffer": { 2028 | "version": "5.1.2", 2029 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2030 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2031 | "dev": true 2032 | }, 2033 | "safe-regex": { 2034 | "version": "1.1.0", 2035 | "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", 2036 | "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", 2037 | "dev": true, 2038 | "requires": { 2039 | "ret": "0.1.15" 2040 | } 2041 | }, 2042 | "semver": { 2043 | "version": "5.5.1", 2044 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", 2045 | "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", 2046 | "dev": true 2047 | }, 2048 | "semver-diff": { 2049 | "version": "2.1.0", 2050 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", 2051 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", 2052 | "dev": true, 2053 | "requires": { 2054 | "semver": "5.5.1" 2055 | } 2056 | }, 2057 | "set-immediate-shim": { 2058 | "version": "1.0.1", 2059 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", 2060 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", 2061 | "dev": true 2062 | }, 2063 | "set-value": { 2064 | "version": "2.0.0", 2065 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", 2066 | "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", 2067 | "dev": true, 2068 | "requires": { 2069 | "extend-shallow": "2.0.1", 2070 | "is-extendable": "0.1.1", 2071 | "is-plain-object": "2.0.4", 2072 | "split-string": "3.1.0" 2073 | }, 2074 | "dependencies": { 2075 | "extend-shallow": { 2076 | "version": "2.0.1", 2077 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 2078 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 2079 | "dev": true, 2080 | "requires": { 2081 | "is-extendable": "0.1.1" 2082 | } 2083 | } 2084 | } 2085 | }, 2086 | "shebang-command": { 2087 | "version": "1.2.0", 2088 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2089 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2090 | "dev": true, 2091 | "requires": { 2092 | "shebang-regex": "1.0.0" 2093 | } 2094 | }, 2095 | "shebang-regex": { 2096 | "version": "1.0.0", 2097 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2098 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2099 | "dev": true 2100 | }, 2101 | "signal-exit": { 2102 | "version": "3.0.2", 2103 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2104 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 2105 | "dev": true 2106 | }, 2107 | "snapdragon": { 2108 | "version": "0.8.2", 2109 | "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", 2110 | "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", 2111 | "dev": true, 2112 | "requires": { 2113 | "base": "0.11.2", 2114 | "debug": "2.6.9", 2115 | "define-property": "0.2.5", 2116 | "extend-shallow": "2.0.1", 2117 | "map-cache": "0.2.2", 2118 | "source-map": "0.5.7", 2119 | "source-map-resolve": "0.5.2", 2120 | "use": "3.1.1" 2121 | }, 2122 | "dependencies": { 2123 | "debug": { 2124 | "version": "2.6.9", 2125 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2126 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2127 | "dev": true, 2128 | "requires": { 2129 | "ms": "2.0.0" 2130 | } 2131 | }, 2132 | "define-property": { 2133 | "version": "0.2.5", 2134 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2135 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2136 | "dev": true, 2137 | "requires": { 2138 | "is-descriptor": "0.1.6" 2139 | } 2140 | }, 2141 | "extend-shallow": { 2142 | "version": "2.0.1", 2143 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 2144 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 2145 | "dev": true, 2146 | "requires": { 2147 | "is-extendable": "0.1.1" 2148 | } 2149 | } 2150 | } 2151 | }, 2152 | "snapdragon-node": { 2153 | "version": "2.1.1", 2154 | "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", 2155 | "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", 2156 | "dev": true, 2157 | "requires": { 2158 | "define-property": "1.0.0", 2159 | "isobject": "3.0.1", 2160 | "snapdragon-util": "3.0.1" 2161 | }, 2162 | "dependencies": { 2163 | "define-property": { 2164 | "version": "1.0.0", 2165 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", 2166 | "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 2167 | "dev": true, 2168 | "requires": { 2169 | "is-descriptor": "1.0.2" 2170 | } 2171 | }, 2172 | "is-accessor-descriptor": { 2173 | "version": "1.0.0", 2174 | "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", 2175 | "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 2176 | "dev": true, 2177 | "requires": { 2178 | "kind-of": "6.0.2" 2179 | } 2180 | }, 2181 | "is-data-descriptor": { 2182 | "version": "1.0.0", 2183 | "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", 2184 | "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 2185 | "dev": true, 2186 | "requires": { 2187 | "kind-of": "6.0.2" 2188 | } 2189 | }, 2190 | "is-descriptor": { 2191 | "version": "1.0.2", 2192 | "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", 2193 | "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 2194 | "dev": true, 2195 | "requires": { 2196 | "is-accessor-descriptor": "1.0.0", 2197 | "is-data-descriptor": "1.0.0", 2198 | "kind-of": "6.0.2" 2199 | } 2200 | } 2201 | } 2202 | }, 2203 | "snapdragon-util": { 2204 | "version": "3.0.1", 2205 | "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", 2206 | "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", 2207 | "dev": true, 2208 | "requires": { 2209 | "kind-of": "3.2.2" 2210 | }, 2211 | "dependencies": { 2212 | "kind-of": { 2213 | "version": "3.2.2", 2214 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2215 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2216 | "dev": true, 2217 | "requires": { 2218 | "is-buffer": "1.1.6" 2219 | } 2220 | } 2221 | } 2222 | }, 2223 | "source-map": { 2224 | "version": "0.5.7", 2225 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2226 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2227 | "dev": true 2228 | }, 2229 | "source-map-resolve": { 2230 | "version": "0.5.2", 2231 | "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", 2232 | "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", 2233 | "dev": true, 2234 | "requires": { 2235 | "atob": "2.1.2", 2236 | "decode-uri-component": "0.2.0", 2237 | "resolve-url": "0.2.1", 2238 | "source-map-url": "0.4.0", 2239 | "urix": "0.1.0" 2240 | } 2241 | }, 2242 | "source-map-url": { 2243 | "version": "0.4.0", 2244 | "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", 2245 | "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", 2246 | "dev": true 2247 | }, 2248 | "split": { 2249 | "version": "0.3.3", 2250 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 2251 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", 2252 | "dev": true, 2253 | "requires": { 2254 | "through": "2.3.8" 2255 | } 2256 | }, 2257 | "split-string": { 2258 | "version": "3.1.0", 2259 | "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", 2260 | "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", 2261 | "dev": true, 2262 | "requires": { 2263 | "extend-shallow": "3.0.2" 2264 | } 2265 | }, 2266 | "static-extend": { 2267 | "version": "0.1.2", 2268 | "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", 2269 | "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", 2270 | "dev": true, 2271 | "requires": { 2272 | "define-property": "0.2.5", 2273 | "object-copy": "0.1.0" 2274 | }, 2275 | "dependencies": { 2276 | "define-property": { 2277 | "version": "0.2.5", 2278 | "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", 2279 | "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 2280 | "dev": true, 2281 | "requires": { 2282 | "is-descriptor": "0.1.6" 2283 | } 2284 | } 2285 | } 2286 | }, 2287 | "stream-combiner": { 2288 | "version": "0.0.4", 2289 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 2290 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", 2291 | "dev": true, 2292 | "requires": { 2293 | "duplexer": "0.1.1" 2294 | } 2295 | }, 2296 | "string-width": { 2297 | "version": "2.1.1", 2298 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2299 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2300 | "dev": true, 2301 | "requires": { 2302 | "is-fullwidth-code-point": "2.0.0", 2303 | "strip-ansi": "4.0.0" 2304 | } 2305 | }, 2306 | "string_decoder": { 2307 | "version": "1.1.1", 2308 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2309 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2310 | "dev": true, 2311 | "requires": { 2312 | "safe-buffer": "5.1.2" 2313 | } 2314 | }, 2315 | "strip-ansi": { 2316 | "version": "4.0.0", 2317 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2318 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2319 | "dev": true, 2320 | "requires": { 2321 | "ansi-regex": "3.0.0" 2322 | } 2323 | }, 2324 | "strip-eof": { 2325 | "version": "1.0.0", 2326 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 2327 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 2328 | "dev": true 2329 | }, 2330 | "strip-json-comments": { 2331 | "version": "2.0.1", 2332 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2333 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2334 | "dev": true 2335 | }, 2336 | "supports-color": { 2337 | "version": "5.5.0", 2338 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2339 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2340 | "dev": true, 2341 | "requires": { 2342 | "has-flag": "3.0.0" 2343 | } 2344 | }, 2345 | "term-size": { 2346 | "version": "1.2.0", 2347 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", 2348 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", 2349 | "dev": true, 2350 | "requires": { 2351 | "execa": "0.7.0" 2352 | } 2353 | }, 2354 | "through": { 2355 | "version": "2.3.8", 2356 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2357 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2358 | "dev": true 2359 | }, 2360 | "timed-out": { 2361 | "version": "4.0.1", 2362 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 2363 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", 2364 | "dev": true 2365 | }, 2366 | "to-object-path": { 2367 | "version": "0.3.0", 2368 | "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", 2369 | "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", 2370 | "dev": true, 2371 | "requires": { 2372 | "kind-of": "3.2.2" 2373 | }, 2374 | "dependencies": { 2375 | "kind-of": { 2376 | "version": "3.2.2", 2377 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 2378 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 2379 | "dev": true, 2380 | "requires": { 2381 | "is-buffer": "1.1.6" 2382 | } 2383 | } 2384 | } 2385 | }, 2386 | "to-regex": { 2387 | "version": "3.0.2", 2388 | "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", 2389 | "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", 2390 | "dev": true, 2391 | "requires": { 2392 | "define-property": "2.0.2", 2393 | "extend-shallow": "3.0.2", 2394 | "regex-not": "1.0.2", 2395 | "safe-regex": "1.1.0" 2396 | } 2397 | }, 2398 | "to-regex-range": { 2399 | "version": "2.1.1", 2400 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", 2401 | "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", 2402 | "dev": true, 2403 | "requires": { 2404 | "is-number": "3.0.0", 2405 | "repeat-string": "1.6.1" 2406 | } 2407 | }, 2408 | "touch": { 2409 | "version": "3.1.0", 2410 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 2411 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 2412 | "dev": true, 2413 | "requires": { 2414 | "nopt": "1.0.10" 2415 | } 2416 | }, 2417 | "undefsafe": { 2418 | "version": "2.0.2", 2419 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", 2420 | "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", 2421 | "dev": true, 2422 | "requires": { 2423 | "debug": "2.6.9" 2424 | }, 2425 | "dependencies": { 2426 | "debug": { 2427 | "version": "2.6.9", 2428 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2429 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2430 | "dev": true, 2431 | "requires": { 2432 | "ms": "2.0.0" 2433 | } 2434 | } 2435 | } 2436 | }, 2437 | "union-value": { 2438 | "version": "1.0.0", 2439 | "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", 2440 | "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", 2441 | "dev": true, 2442 | "requires": { 2443 | "arr-union": "3.1.0", 2444 | "get-value": "2.0.6", 2445 | "is-extendable": "0.1.1", 2446 | "set-value": "0.4.3" 2447 | }, 2448 | "dependencies": { 2449 | "extend-shallow": { 2450 | "version": "2.0.1", 2451 | "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", 2452 | "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 2453 | "dev": true, 2454 | "requires": { 2455 | "is-extendable": "0.1.1" 2456 | } 2457 | }, 2458 | "set-value": { 2459 | "version": "0.4.3", 2460 | "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", 2461 | "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", 2462 | "dev": true, 2463 | "requires": { 2464 | "extend-shallow": "2.0.1", 2465 | "is-extendable": "0.1.1", 2466 | "is-plain-object": "2.0.4", 2467 | "to-object-path": "0.3.0" 2468 | } 2469 | } 2470 | } 2471 | }, 2472 | "unique-string": { 2473 | "version": "1.0.0", 2474 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", 2475 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", 2476 | "dev": true, 2477 | "requires": { 2478 | "crypto-random-string": "1.0.0" 2479 | } 2480 | }, 2481 | "unset-value": { 2482 | "version": "1.0.0", 2483 | "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", 2484 | "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", 2485 | "dev": true, 2486 | "requires": { 2487 | "has-value": "0.3.1", 2488 | "isobject": "3.0.1" 2489 | }, 2490 | "dependencies": { 2491 | "has-value": { 2492 | "version": "0.3.1", 2493 | "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", 2494 | "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", 2495 | "dev": true, 2496 | "requires": { 2497 | "get-value": "2.0.6", 2498 | "has-values": "0.1.4", 2499 | "isobject": "2.1.0" 2500 | }, 2501 | "dependencies": { 2502 | "isobject": { 2503 | "version": "2.1.0", 2504 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 2505 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 2506 | "dev": true, 2507 | "requires": { 2508 | "isarray": "1.0.0" 2509 | } 2510 | } 2511 | } 2512 | }, 2513 | "has-values": { 2514 | "version": "0.1.4", 2515 | "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", 2516 | "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", 2517 | "dev": true 2518 | } 2519 | } 2520 | }, 2521 | "unzip-response": { 2522 | "version": "2.0.1", 2523 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", 2524 | "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", 2525 | "dev": true 2526 | }, 2527 | "upath": { 2528 | "version": "1.1.0", 2529 | "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", 2530 | "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", 2531 | "dev": true 2532 | }, 2533 | "update-notifier": { 2534 | "version": "2.5.0", 2535 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", 2536 | "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", 2537 | "dev": true, 2538 | "requires": { 2539 | "boxen": "1.3.0", 2540 | "chalk": "2.4.1", 2541 | "configstore": "3.1.2", 2542 | "import-lazy": "2.1.0", 2543 | "is-ci": "1.2.0", 2544 | "is-installed-globally": "0.1.0", 2545 | "is-npm": "1.0.0", 2546 | "latest-version": "3.1.0", 2547 | "semver-diff": "2.1.0", 2548 | "xdg-basedir": "3.0.0" 2549 | } 2550 | }, 2551 | "urix": { 2552 | "version": "0.1.0", 2553 | "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", 2554 | "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", 2555 | "dev": true 2556 | }, 2557 | "url-parse-lax": { 2558 | "version": "1.0.0", 2559 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", 2560 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", 2561 | "dev": true, 2562 | "requires": { 2563 | "prepend-http": "1.0.4" 2564 | } 2565 | }, 2566 | "use": { 2567 | "version": "3.1.1", 2568 | "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", 2569 | "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", 2570 | "dev": true 2571 | }, 2572 | "util-deprecate": { 2573 | "version": "1.0.2", 2574 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2575 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2576 | "dev": true 2577 | }, 2578 | "which": { 2579 | "version": "1.3.1", 2580 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2581 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2582 | "dev": true, 2583 | "requires": { 2584 | "isexe": "2.0.0" 2585 | } 2586 | }, 2587 | "widest-line": { 2588 | "version": "2.0.0", 2589 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz", 2590 | "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=", 2591 | "dev": true, 2592 | "requires": { 2593 | "string-width": "2.1.1" 2594 | } 2595 | }, 2596 | "write-file-atomic": { 2597 | "version": "2.3.0", 2598 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", 2599 | "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", 2600 | "dev": true, 2601 | "requires": { 2602 | "graceful-fs": "4.1.11", 2603 | "imurmurhash": "0.1.4", 2604 | "signal-exit": "3.0.2" 2605 | } 2606 | }, 2607 | "ws": { 2608 | "version": "6.0.0", 2609 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.0.0.tgz", 2610 | "integrity": "sha512-c2UlYcAZp1VS8AORtpq6y4RJIkJ9dQz18W32SpR/qXGfLDZ2jU4y4wKvvZwqbi7U6gxFQTeE+urMbXU/tsDy4w==", 2611 | "requires": { 2612 | "async-limiter": "1.0.0" 2613 | } 2614 | }, 2615 | "xdg-basedir": { 2616 | "version": "3.0.0", 2617 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", 2618 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", 2619 | "dev": true 2620 | }, 2621 | "yallist": { 2622 | "version": "2.1.2", 2623 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 2624 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 2625 | "dev": true 2626 | } 2627 | } 2628 | } 2629 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "foxbit-api", 3 | "version": "1.0.16", 4 | "description": "Package NPM for Foxbit API.", 5 | "author": "Miguel Medeiros", 6 | "email": "miguel@miguelmedeiros.com.br", 7 | "url": "http://www.miguelmedeiros.com.br/", 8 | "repository": "github:MiguelMedeiros/foxbit-api", 9 | "private": false, 10 | "license": "MIT", 11 | "main": "./src/index.js", 12 | "scripts": { 13 | "start": "node src/index.js", 14 | "dev": "nodemon src/index.js", 15 | "examples": "nodemon examples/index.js" 16 | }, 17 | "keywords": [ 18 | "alphapoint", 19 | "api", 20 | "bitcoin", 21 | "BTC", 22 | "Brazil", 23 | "cryptocurrency", 24 | "exchange", 25 | "foxbit", 26 | "Miguel Medeiros", 27 | "npm", 28 | "nodejs", 29 | "javascript", 30 | "package" 31 | ], 32 | "files": [ 33 | "src" 34 | ], 35 | "dependencies": { 36 | "eventemitter3": "^3.1.0", 37 | "ws": "^6.0.0" 38 | }, 39 | "devDependencies": { 40 | "nodemon": "^1.18.3" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/authentication.js: -------------------------------------------------------------------------------- 1 | const utils = require("./utils"); 2 | const variables = require("./variables"); 3 | 4 | let Connect = (user = "", password = "") => { 5 | variables.userLogin = user; 6 | variables.userPass = password; 7 | //Event Open Connection 8 | variables.ws.on("open", function open() { 9 | if (variables.userLogin && variables.userPass) { 10 | WebAuthenticateUser(); 11 | } 12 | }); 13 | }; 14 | 15 | //Function WebAuthenticateUser 16 | let WebAuthenticateUser = () => { 17 | let requestPayload = { 18 | UserName: variables.userLogin, 19 | Password: variables.userPass 20 | }; 21 | let frame = { 22 | m: 0, 23 | i: 1, 24 | n: "WebAuthenticateUser", 25 | o: JSON.stringify(requestPayload) 26 | }; 27 | 28 | variables.ws.send(JSON.stringify(frame), function ack(error) { 29 | if (error != undefined) { 30 | utils.consoleMessage("WebAuthenticateUser", JSON.stringify(error)); 31 | } 32 | }); 33 | }; 34 | 35 | //Function Authenticate2FA 36 | let Authenticate2FA = () => { 37 | let requestPayload = {}; 38 | let frame = { 39 | m: 0, 40 | i: 1, 41 | n: "Authenticate2FA", 42 | o: JSON.stringify(requestPayload) 43 | }; 44 | 45 | let twoFA = "0000"; 46 | 47 | if (variables.sessionToken === "") { 48 | utils.consoleMessage(frame.n, "Enter with 2FA Code:"); 49 | 50 | //Wait PromptInformation 51 | let stdin2FA = process.openStdin(); 52 | 53 | stdin2FA.addListener("data", function(d) { 54 | twoFA = d.toString().trim(); 55 | 56 | if (twoFA != "0000") { 57 | requestPayload = { Code: twoFA }; 58 | frame.o = JSON.stringify(requestPayload); 59 | variables.ws.send(JSON.stringify(frame), function ack(error) { 60 | if (error != undefined) { 61 | console.log("Authenticate2FA.error: (" + error + ")"); 62 | } 63 | }); 64 | } 65 | }); 66 | } else { 67 | requestPayload = { 68 | UserId: parseInt(variables.userId), 69 | SessionToken: JSON.parse(variables.sessionToken) 70 | }; 71 | let frame = { 72 | m: 0, 73 | i: 1, 74 | n: "WebAuthenticateUser", 75 | o: JSON.stringify(requestPayload) 76 | }; 77 | 78 | frame.o = JSON.stringify(requestPayload); 79 | variables.ws.send(JSON.stringify(frame), function ack(error) { 80 | if (error != undefined) { 81 | console.log("Authenticate2FA.error: (" + error + ")"); 82 | } 83 | }); 84 | } 85 | }; 86 | 87 | let LogOut = () => { 88 | //Message Frame 89 | let requestPayload = {}; 90 | let frame = { m: 0, i: 1, n: "LogOut", o: JSON.stringify(requestPayload) }; 91 | 92 | variables.ws.send(JSON.stringify(frame), function ack(error) { 93 | if (error) { 94 | console.log("LogOut.error: (" + error + ")"); 95 | } 96 | }); 97 | }; 98 | 99 | module.exports = { 100 | Authenticate2FA, 101 | Connect, 102 | LogOut, 103 | WebAuthenticateUser 104 | //RegisterNewUser 105 | //ResetPassword 106 | }; 107 | -------------------------------------------------------------------------------- /src/communication.js: -------------------------------------------------------------------------------- 1 | const utils = require("./utils"); 2 | const variables = require("./variables"); 3 | const authentication = require("./authentication"); 4 | const userInfo = require("./userInfo"); 5 | 6 | //Event Receiving Message 7 | variables.ws.on("message", function incoming(data) { 8 | dealMessage(data); 9 | }); 10 | 11 | //Event Error Message 12 | variables.ws.on("error", function() { 13 | utils.consoleMessage("WebService", "error! "); 14 | }); 15 | 16 | //Event Close Message 17 | variables.ws.on("close", function() { 18 | utils.consoleMessage("WebService", "close! "); 19 | }); 20 | 21 | //Event End Message 22 | variables.ws.on("end", function(data) { 23 | utils.consoleMessage("WebService", "end! " + data); 24 | }); 25 | 26 | //Function DealMessage 27 | let dealMessage = message => { 28 | let ret = JSON.parse(message); 29 | let res = JSON.parse(ret.o); 30 | //console.log(message); 31 | console.log("Endpoint: " + ret.n); 32 | switch (ret.n) { 33 | case "Authenticate2FA": 34 | let paramO; 35 | if (ret.o != undefined) { 36 | paramO = JSON.parse(ret.o); 37 | variables.sessionToken = JSON.stringify(paramO.SessionToken); 38 | variables.userId = parseInt(paramO.UserId); 39 | userInfo.GetUserInfo(); 40 | variables.eventEmitter.emit("Connected", res); 41 | } 42 | break; 43 | case "WebAuthenticateUser": 44 | if (res.Authenticated) { 45 | if (res.Requires2FA) { 46 | authentication.Authenticate2FA(); 47 | } else { 48 | variables.eventEmitter.emit("Connected", res); 49 | variables.userId = parseInt(res.UserId); 50 | userInfo.GetUserInfo(); 51 | } 52 | } else { 53 | variables.eventEmitter.emit("Connected", res); 54 | } 55 | break; 56 | case "GetUserInfo": 57 | variables.OMSId = res.OMSId; 58 | if (variables.accountId === 0) { 59 | variables.accountId = res.AccountId; 60 | variables.eventEmitter.emit("Ready", true); 61 | } else { 62 | variables.eventEmitter.emit("GetUserInfo", res); 63 | } 64 | break; 65 | default: 66 | if (res) { 67 | variables.eventEmitter.emit(ret.n, JSON.parse(ret.o)); 68 | } else { 69 | variables.eventEmitter.emit(ret.n, res); 70 | } 71 | } 72 | }; 73 | 74 | module.exports = { 75 | dealMessage, 76 | eventEmitter: variables.eventEmitter 77 | }; 78 | -------------------------------------------------------------------------------- /src/feed.js: -------------------------------------------------------------------------------- 1 | const variables = require("./variables"); 2 | 3 | let SubscribeTicker = ( 4 | countParam = 20, 5 | intervalParam = 60, 6 | InstrumentId = 1 7 | ) => { 8 | //Message Frame 9 | let requestPayload = { 10 | OMSId: variables.OMSId, 11 | InstrumentId: InstrumentId, 12 | Interval: intervalParam, 13 | IncludeLastCount: countParam 14 | }; 15 | let frame = { 16 | m: 0, 17 | i: 1, 18 | n: "SubscribeTicker", 19 | o: JSON.stringify(requestPayload) 20 | }; 21 | 22 | variables.ws.send(JSON.stringify(frame), function ack(error) { 23 | if (error) { 24 | console.log("SubscribeTicker.error: (" + error + ")"); 25 | } 26 | }); 27 | }; 28 | 29 | let UnsubscribeTicker = (InstrumentId = 1) => { 30 | //Message Frame 31 | let requestPayload = { OMSId: variables.OMSId, InstrumentId: InstrumentId }; 32 | let frame = { 33 | m: 0, 34 | i: 1, 35 | n: "UnsubscribeTicker", 36 | o: JSON.stringify(requestPayload) 37 | }; 38 | 39 | variables.ws.send(JSON.stringify(frame), function ack(error) { 40 | if (error) { 41 | console.log("UnsubscribeTicker.error: (" + error + ")"); 42 | } 43 | }); 44 | }; 45 | 46 | let GetL2Snapshot = (depth = 100, instrumentId = 1) => { 47 | //Message Frame 48 | let requestPayload = { 49 | OMSId: variables.OMSId, 50 | InstrumentId: instrumentId, 51 | Depth: depth 52 | }; 53 | let frame = { 54 | m: 0, 55 | i: 1, 56 | n: "GetL2Snapshot", 57 | o: JSON.stringify(requestPayload) 58 | }; 59 | 60 | variables.ws.send(JSON.stringify(frame), function ack(error) { 61 | if (error) { 62 | console.log("GetL2Snapshot.error: (" + error + ")"); 63 | } 64 | }); 65 | }; 66 | 67 | let GetTickerHistory = (minutes, instrumentId = 1) => { 68 | //Message Frame 69 | var fromDate = new Date(); 70 | fromDate.setMinutes(fromDate.getMinutes() - minutes); 71 | fromDate = fromDate.getTime().toFixed(0); 72 | let requestPayload = { 73 | InstrumenId: instrumentId, 74 | FromDate: parseInt(fromDate) 75 | }; 76 | let frame = { 77 | m: 2, 78 | i: 1, 79 | n: "GetTickerHistory", 80 | o: JSON.stringify(requestPayload) 81 | }; 82 | 83 | variables.ws.send(JSON.stringify(frame), function ack(error) { 84 | if (error) { 85 | console.log("GetTickerHistory.error: (" + error + ")"); 86 | } 87 | }); 88 | }; 89 | 90 | let SubscribeTrades = (countParam = 20, InstrumentId = 1) => { 91 | //Message Frame 92 | let requestPayload = { 93 | OMSId: variables.OMSId, 94 | InstrumentId: InstrumentId, 95 | IncludeLastCount: countParam 96 | }; 97 | let frame = { 98 | m: 0, 99 | i: 1, 100 | n: "SubscribeTrades", 101 | o: JSON.stringify(requestPayload) 102 | }; 103 | 104 | variables.ws.send(JSON.stringify(frame), function ack(error) { 105 | if (error) { 106 | console.log("SubscribeTrades.error: (" + error + ")"); 107 | } 108 | }); 109 | }; 110 | 111 | let UnsubscribeTrades = (InstrumentId = 1) => { 112 | //Message Frame 113 | let requestPayload = { OMSId: variables.OMSId, InstrumentId: InstrumentId }; 114 | let frame = { 115 | m: 0, 116 | i: 1, 117 | n: "UnsubscribeTrades", 118 | o: JSON.stringify(requestPayload) 119 | }; 120 | 121 | variables.ws.send(JSON.stringify(frame), function ack(error) { 122 | if (error) { 123 | console.log("UnsubscribeTrades.error: (" + error + ")"); 124 | } 125 | }); 126 | }; 127 | 128 | module.exports = { 129 | GetL2Snapshot, 130 | GetTickerHistory, 131 | //GetTradesHistory, 132 | //SubscribeAccountEvents, 133 | //SubscribeLevel1, 134 | //SubscribeLevel2, 135 | SubscribeTicker, 136 | SubscribeTrades, 137 | //UnsubscribeLevel1, 138 | //UnsubscribeLevel2, 139 | UnsubscribeTicker, 140 | UnsubscribeTrades 141 | }; 142 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const communication = require("./communication"); 2 | const authentication = require("./authentication"); 3 | const userInfo = require("./userInfo"); 4 | const order = require("./order"); 5 | const feed = require("./feed"); 6 | 7 | module.exports = { 8 | // Authentication Calls 9 | Authenticate2FA: authentication.Authenticate2FA, 10 | Connect: authentication.Connect, 11 | LogOut: authentication.LogOut, 12 | WebAuthenticateUser: authentication.WebAuthenticateUser, 13 | //ResetPassword: authentication.ResetPassword 14 | 15 | // Users Information Calls 16 | GetAvailablePermissionList: userInfo.GetAvailablePermissionList, 17 | GetUserConfig: userInfo.GetUserConfig, 18 | GetUserInfo: userInfo.GetUserInfo, 19 | GetUserPermissions: userInfo.GetUserPermissions, 20 | //RemoveUserConfig: userInfo.RemoveUserConfig, 21 | //SetUserConfig: userInfo.SetUserConfig, 22 | //SetUserInfo: userInfo.SetUserInfo, 23 | 24 | // Order-handling Calls 25 | CancelAllOrders: order.CancelAllOrders, 26 | CancelOrder: order.CancelOrder, 27 | //CancelQuote, 28 | //CancelReplaceOrder, 29 | //CreateQuote, 30 | GetAccountInfo: order.GetAccountInfo, 31 | GetAccountPositions: order.GetAccountPositions, 32 | GetAccountTrades: order.GetAccountTrades, 33 | GetAccountTransactions: order.GetAccountTransactions, 34 | GetInstrument: order.GetInstrument, 35 | GetInstruments: order.GetInstruments, 36 | GetOpenOrders: order.GetOpenOrders, 37 | //GetOpenQuotes: order.GetOpenQuotes, 38 | //GetOrderFee: order.GetOrderFee, 39 | //GetOrderHistory: order.GetOrderHistory, 40 | //GetOrderHistoryByOrderId: order.GetOrderHistoryByOrderId, 41 | GetOrdersHistory: order.GetOrdersHistory, 42 | //GetOrderStatus: order.GetOrderStatus, 43 | GetProduct: order.GetProduct, 44 | GetProducts: order.GetProducts, 45 | //GetUserAccounts: order.GetUserAccounts, 46 | //GetUserAccountInfos: order.GetUserAccountInfos, 47 | //ModifyOrder: order.ModifyOrder, 48 | SendOrder: order.SendOrder, 49 | //UpdateQuote: order.UpdateQuote, 50 | 51 | // Feed Calls 52 | GetL2Snapshot: feed.GetL2Snapshot, 53 | GetTickerHistory: feed.GetTickerHistory, 54 | //GetTradesHistory: feed.GetTradesHistory, 55 | //SubscribeAccountEvents: feed.SubscribeAccountEvents, 56 | //SubscribeLevel1: feed.SubscribeLevel1, 57 | //SubscribeLevel2: feed.SubscribeLevel2, 58 | SubscribeTicker: feed.SubscribeTicker, 59 | SubscribeTrades: feed.SubscribeTrades, 60 | //UnsubscribeLevel1: feed.UnsubscribeLevel1, 61 | //UnsubscribeLevel2: feed.UnsubscribeLevel2, 62 | UnsubscribeTicker: feed.UnsubscribeTicker, 63 | UnsubscribeTrades: feed.UnsubscribeTrades, 64 | 65 | // Comunication Calls 66 | eventEmitter: communication.eventEmitter 67 | }; 68 | -------------------------------------------------------------------------------- /src/order.js: -------------------------------------------------------------------------------- 1 | const variables = require("./variables"); 2 | 3 | let SendOrder = ( 4 | Side = "Buy", 5 | OrderType = "Limit", 6 | Quantity, 7 | LimitPrice, 8 | StopPrice = 0, 9 | PegPriceType = "Last", 10 | TimeInForce = 1, 11 | InstrumentId = 1 12 | ) => { 13 | switch (Side) { 14 | case "Buy": 15 | Side = 0; 16 | break; 17 | case "Sell": 18 | Side = 1; 19 | break; 20 | default: 21 | Side = 0; 22 | } 23 | switch (OrderType) { 24 | case "Market": 25 | OrderType = 1; 26 | break; 27 | case "Limit": 28 | OrderType = 2; 29 | break; 30 | case "StopMarket": 31 | OrderType = 3; 32 | break; 33 | case "StopLimit": 34 | OrderType = 4; 35 | break; 36 | case "TrailingStopMarket": 37 | OrderType = 5; 38 | break; 39 | case "TrailingStopLimit": 40 | OrderType = 6; 41 | break; 42 | case "BlockTrade": 43 | OrderType = 7; 44 | default: 45 | OrderType = 2; 46 | } 47 | 48 | switch (PegPriceType) { 49 | case "Last": 50 | PegPriceType = 1; 51 | break; 52 | case "Bid": 53 | PegPriceType = 2; 54 | break; 55 | case "Ask": 56 | PegPriceType = 3; 57 | break; 58 | case "Midpoint": 59 | PegPriceType = 4; 60 | break; 61 | default: 62 | PegPriceType = 1; 63 | } 64 | 65 | var requestPayload = { 66 | AccountId: variables.accountId, 67 | ClientOrderId: parseInt(variables.userId), 68 | Quantity: Quantity, 69 | DisplayQuantity: 0, 70 | UseDisplayQuantity: true, 71 | LimitPrice: LimitPrice, 72 | OrderIdOCO: 0, 73 | OrderType: OrderType, 74 | PegPriceType: PegPriceType, 75 | InstrumentId: InstrumentId, 76 | TrailingAmount: 1.0, 77 | LimitOffset: 2.0, 78 | Side: Side, 79 | StopPrice: StopPrice, 80 | TimeInForce: TimeInForce, 81 | OMSId: variables.OMSId 82 | }; 83 | let frame = { m: 0, i: 1, n: "SendOrder", o: JSON.stringify(requestPayload) }; 84 | 85 | variables.ws.send(JSON.stringify(frame), function ack(error) { 86 | if (error) { 87 | console.log("SendOrder.error: (" + error + ")"); 88 | } 89 | }); 90 | }; 91 | 92 | let CancelOrder = (ClientOrderId, OrderId) => { 93 | let requestPayload = { 94 | OMSId: variables.OMSId, 95 | AccountId: variables.accountId, 96 | ClientOrderId: ClientOrderId, 97 | OrderId: OrderId 98 | }; 99 | let frame = { 100 | m: 0, 101 | i: 1, 102 | n: "CancelOrder", 103 | o: JSON.stringify(requestPayload) 104 | }; 105 | 106 | variables.ws.send(JSON.stringify(frame), function ack(error) { 107 | if (error) { 108 | console.log("CancelOrder.error: (" + error + ")"); 109 | } 110 | }); 111 | }; 112 | 113 | let GetAccountInfo = () => { 114 | let requestPayload = { 115 | OMSId: variables.OMSId, 116 | AccountId: variables.accountId, 117 | AccountHandle: "" 118 | }; 119 | let frame = { 120 | m: 0, 121 | i: 1, 122 | n: "GetAccountInfo", 123 | o: JSON.stringify(requestPayload) 124 | }; 125 | 126 | variables.ws.send(JSON.stringify(frame), function ack(error) { 127 | if (error) { 128 | console.log("GetAccountInfo.error: (" + error + ")"); 129 | } 130 | }); 131 | }; 132 | 133 | let GetOrdersHistory = () => { 134 | let requestPayload = { 135 | AccountId: variables.accountId, 136 | OMSId: variables.OMSId 137 | }; 138 | let frame = { 139 | m: 0, 140 | i: 1, 141 | n: "GetOrdersHistory", 142 | o: JSON.stringify(requestPayload) 143 | }; 144 | 145 | variables.ws.send(JSON.stringify(frame), function ack(error) { 146 | if (error) { 147 | console.log("GetOrdersHistory.error: (" + error + ")"); 148 | } 149 | }); 150 | }; 151 | 152 | let GetInstrument = (instrumentId = 1) => { 153 | let requestPayload = { InstrumentId: instrumentId, OMSId: variables.OMSId }; 154 | let frame = { 155 | m: 0, 156 | i: 1, 157 | n: "GetInstrument", 158 | o: JSON.stringify(requestPayload) 159 | }; 160 | 161 | variables.ws.send(JSON.stringify(frame), function ack(error) { 162 | if (error) { 163 | console.log("GetInstrument.error: (" + error + ")"); 164 | } 165 | }); 166 | }; 167 | 168 | let GetInstruments = () => { 169 | let requestPayload = { OMSId: variables.OMSId }; 170 | let frame = { 171 | m: 0, 172 | i: 1, 173 | n: "GetInstruments", 174 | o: JSON.stringify(requestPayload) 175 | }; 176 | 177 | variables.ws.send(JSON.stringify(frame), function ack(error) { 178 | if (error) { 179 | console.log("GetInstrument.error: (" + error + ")"); 180 | } 181 | }); 182 | }; 183 | 184 | let GetProduct = (productId = 1) => { 185 | let requestPayload = { OMSId: variables.OMSId, ProductId: productId }; 186 | let frame = { 187 | m: 0, 188 | i: 1, 189 | n: "GetProduct", 190 | o: JSON.stringify(requestPayload) 191 | }; 192 | 193 | variables.ws.send(JSON.stringify(frame), function ack(error) { 194 | if (error) { 195 | console.log("GetProduct.error: (" + error + ")"); 196 | } 197 | }); 198 | }; 199 | 200 | let GetProducts = () => { 201 | let requestPayload = { OMSId: variables.OMSId }; 202 | let frame = { 203 | m: 0, 204 | i: 1, 205 | n: "GetProducts", 206 | o: JSON.stringify(requestPayload) 207 | }; 208 | 209 | variables.ws.send(JSON.stringify(frame), function ack(error) { 210 | if (error) { 211 | console.log("GetProducts.error: (" + error + ")"); 212 | } 213 | }); 214 | }; 215 | 216 | let GetOpenOrders = () => { 217 | let requestPayload = { 218 | AccountId: variables.accountId, 219 | OMSId: variables.OMSId 220 | }; 221 | let frame = { 222 | m: 0, 223 | i: 1, 224 | n: "GetOpenOrders", 225 | o: JSON.stringify(requestPayload) 226 | }; 227 | 228 | variables.ws.send(JSON.stringify(frame), function ack(error) { 229 | if (error) { 230 | console.log("GetOpenOrders.error: (" + error + ")"); 231 | } 232 | }); 233 | }; 234 | 235 | let CancelAllOrders = (instrumentId = 1) => { 236 | let requestPayload = { 237 | AccountId: variables.accountId, 238 | UserId: parseInt(variables.userId), 239 | OMSId: variables.OMSId, 240 | InstrumentId: instrumentId 241 | }; 242 | let frame = { 243 | m: 0, 244 | i: 1, 245 | n: "CancelAllOrders", 246 | o: JSON.stringify(requestPayload) 247 | }; 248 | 249 | variables.ws.send(JSON.stringify(frame), function ack(error) { 250 | if (error) { 251 | console.log("CancelAllOrders.error: (" + error + ")"); 252 | } 253 | }); 254 | }; 255 | 256 | let GetAccountPositions = () => { 257 | let requestPayload = { 258 | AccountId: variables.accountId, 259 | OMSId: variables.OMSId 260 | }; 261 | let frame = { 262 | m: 0, 263 | i: 1, 264 | n: "GetAccountPositions", 265 | o: JSON.stringify(requestPayload) 266 | }; 267 | 268 | variables.ws.send(JSON.stringify(frame), function ack(error) { 269 | if (error) { 270 | console.log("GetAccountPositions.error: (" + error + ")"); 271 | } 272 | }); 273 | }; 274 | 275 | let GetAccountTrades = (count = 10, StartIndex = 0) => { 276 | let requestPayload = { 277 | AccountId: variables.accountId, 278 | OMSId: variables.OMSId, 279 | StartIndex: StartIndex, 280 | Count: count 281 | }; 282 | let frame = { 283 | m: 0, 284 | i: 1, 285 | n: "GetAccountTrades", 286 | o: JSON.stringify(requestPayload) 287 | }; 288 | 289 | variables.ws.send(JSON.stringify(frame), function ack(error) { 290 | if (error) { 291 | console.log("GetAccountTrades.error: (" + error + ")"); 292 | } 293 | }); 294 | }; 295 | 296 | let GetAccountTransactions = (depth = 10) => { 297 | let requestPayload = { 298 | AccountId: variables.accountId, 299 | OMSId: variables.OMSId, 300 | Depth: depth 301 | }; 302 | let frame = { 303 | m: 0, 304 | i: 1, 305 | n: "GetAccountTransactions", 306 | o: JSON.stringify(requestPayload) 307 | }; 308 | 309 | variables.ws.send(JSON.stringify(frame), function ack(error) { 310 | if (error) { 311 | console.log("GetAccountTransactions.error: (" + error + ")"); 312 | } 313 | }); 314 | }; 315 | 316 | module.exports = { 317 | CancelAllOrders, 318 | CancelOrder, 319 | //CancelQuote, 320 | //CancelReplaceOrder, 321 | //CreateQuote, 322 | GetAccountInfo, 323 | GetAccountPositions, 324 | GetAccountTrades, 325 | GetAccountTransactions, 326 | GetInstrument, 327 | GetInstruments, 328 | GetOpenOrders, 329 | //GetOpenQuotes, 330 | //GetOrderFee, 331 | //GetOrderHistory, 332 | //GetOrderHistoryByOrderId, 333 | GetOrdersHistory, 334 | //GetOrderStatus, 335 | GetProduct, 336 | GetProducts, 337 | //GetUserAccounts, 338 | //GetUserAccountInfos, 339 | //ModifyOrder, 340 | SendOrder 341 | //UpdateQuote 342 | }; 343 | -------------------------------------------------------------------------------- /src/userInfo.js: -------------------------------------------------------------------------------- 1 | const variables = require("./variables"); 2 | 3 | let GetUserInfo = () => { 4 | //Message Frame 5 | let requestPayload = { 6 | UserName: variables.userLogin, 7 | Password: variables.userPass 8 | }; 9 | let frame = { 10 | m: 0, 11 | i: 1, 12 | n: "GetUserInfo", 13 | o: JSON.stringify(requestPayload) 14 | }; 15 | 16 | variables.ws.send(JSON.stringify(frame), function ack(error) { 17 | if (error) { 18 | console.log("GetUserInfo.error: (" + error + ")"); 19 | } 20 | }); 21 | }; 22 | 23 | let GetUserConfig = () => { 24 | //Message Frame 25 | let requestPayload = { 26 | UserName: variables.userLogin, 27 | UserId: parseInt(variables.userId) 28 | }; 29 | let frame = { 30 | m: 0, 31 | i: 1, 32 | n: "GetUserConfig", 33 | o: JSON.stringify(requestPayload) 34 | }; 35 | console.log(frame); 36 | variables.ws.send(JSON.stringify(frame), function ack(error) { 37 | if (error) { 38 | console.log("GetUserInfo.error: (" + error + ")"); 39 | } 40 | }); 41 | }; 42 | 43 | let GetUserPermissions = () => { 44 | //Message Frame 45 | let requestPayload = { UserId: parseInt(variables.userId) }; 46 | let frame = { 47 | m: 0, 48 | i: 1, 49 | n: "GetUserPermissions", 50 | o: JSON.stringify(requestPayload) 51 | }; 52 | 53 | variables.ws.send(JSON.stringify(frame), function ack(error) { 54 | if (error) { 55 | console.log("GetUserPermissions.error: (" + error + ")"); 56 | } 57 | }); 58 | }; 59 | 60 | let GetAvailablePermissionList = () => { 61 | //Message Frame 62 | let requestPayload = {}; 63 | let frame = { 64 | m: 0, 65 | i: 1, 66 | n: "GetAvailablePermissionList", 67 | o: JSON.stringify(requestPayload) 68 | }; 69 | 70 | variables.ws.send(JSON.stringify(frame), function ack(error) { 71 | if (error) { 72 | console.log("GetAvailablePermissionList.error: (" + error + ")"); 73 | } 74 | }); 75 | }; 76 | 77 | module.exports = { 78 | GetAvailablePermissionList, 79 | GetUserConfig, 80 | GetUserInfo, 81 | GetUserPermissions 82 | //RemoveUserConfig, 83 | //SetUserConfig, 84 | //SetUserInfo 85 | }; 86 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | //Function Console 2 | let consoleMessage = (prefix, sulfix) => { 3 | console.log("\r\n" + prefix + ": (" + sulfix + ")\r\n"); 4 | }; 5 | 6 | module.exports = { 7 | consoleMessage 8 | }; 9 | -------------------------------------------------------------------------------- /src/variables.js: -------------------------------------------------------------------------------- 1 | const WebSocket = require("ws"); 2 | const events = require("events"); 3 | const eventEmitter = new events.EventEmitter(); 4 | 5 | let force2FA = false; 6 | let userLogin = ""; 7 | let userPass = ""; 8 | let userId = "0"; 9 | let accountId = 0; 10 | let sessionToken = ""; 11 | let OMSId = 1; 12 | let wsAddress = "wss://apifoxbitprodlb.alphapoint.com/WSGateway/"; 13 | let ws = new WebSocket(wsAddress); 14 | 15 | module.exports = { 16 | force2FA, 17 | userLogin, 18 | userPass, 19 | userId, 20 | accountId, 21 | sessionToken, 22 | OMSId, 23 | ws, 24 | wsAddress, 25 | eventEmitter 26 | }; 27 | --------------------------------------------------------------------------------