Git Product home page Git Product logo

deribit-v2-ws's Introduction

deribit-v2-ws

Deribit V2 API WS RPC wrapper.

Docs are here.

This module is designed to be used with nodejs, it doesn't support browser usage.

Features

  • Connect to WS api
  • Authenticate
  • Reconnect on disconnect
  • Resubscribe subscriptions on disconnect

Example usage

See more examples in example.js.

const Deribit = require('deribit-v2-ws');

const key = 'x';
const secret = 'y';

const db = new Deribit({key, secret})
await db.connect();
const position = await db.request(
  'private/get_position',
  {instrument_name: 'BTC-PERPETUAL'}
);

console.log(position);

result:

{
  requestedAt: 1552992953360, // added by this lib
  usIn: 1552992953479560,
  usOut: 1552992953482218,
  receivedAt: 1552992953601, // added by this lib
  jsonrpc: '2.0',
  id: 404,
  result:
   { total_profit_loss: 0,
     size_currency: 0,
     size: 0,
     settlement_price: 3959.67,
     realized_profit_loss: 0,
     open_orders_margin: 0,
     mark_price: 3971.85,
     maintenance_margin: 0,
     kind: 'future',
     instrument_name: 'BTC-PERPETUAL',
     initial_margin: 0,
     index_price: 3972.04,
     floating_profit_loss: 0,
     estimated_liquidation_price: 0,
     direction: 'zero',
     delta: 0,
     average_price: 0 },
  usDiff: 2658,
  testnet: false
}

deribit-v2-ws's People

Contributors

anton000 avatar askmike avatar cinglein avatar dependabot[bot] avatar lacksfish avatar mike0xff avatar patrickdugan avatar xavier59 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

deribit-v2-ws's Issues

Node version

Hello,

What node version as this lib built on? :)

unhandeled exceptions

Hi all. i keep getting the following crash when using this repo (it happened now and then.. 2-3 times a day). i need it to be running 24/7.. not sure what to do

2020-04-29T11:02:17.507Z [DERIBIT] NO PING RESPONSE
2020-04-29T11:02:17.507Z [DERIBIT] TERMINATED WS CON
2020-04-29T11:02:17.510Z [DERIBIT] CLOSED CON
when FAILED: Error: Deribit connection closed.
CANCEL ORDERS - deribit
{
"which": "tagged",
"tag": "SL"
}
(node:5408) UnhandledPromiseRejectionWarning: Error: Deribit connection closed.
at /home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/connection.js:62:42
at Array.forEach ()
at WebSocket.ws.onclose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/connection.js:61:28)
at WebSocket.onClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/event-target.js:124:16)
at WebSocket.emit (events.js:321:20)
at WebSocket.emitClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/websocket.js:191:10)
at TLSSocket.socketOnClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/websocket.js:850:15)
at TLSSocket.emit (events.js:333:22)
at net.js:668:12
at TCP.done (_tls_wrap.js:558:7)
(node:5408) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not hand
led with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection i
d: 1)
(node:5408) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
2020-04-29T11:02:18.011Z [DERIBIT] RECONNECTING...
Calculated order size as Zero.
tsl FAILED: Error: No funds available or order size is 0
de-referencing exchange deribit
Deribit exchange closing down
2020-04-29T11:39:14.697Z [DERIBIT] NO PING RESPONSE
2020-04-29T11:39:14.697Z [DERIBIT] TERMINATED WS CON
2020-04-29T11:39:14.698Z [DERIBIT] CLOSED CON
(node:5408) UnhandledPromiseRejectionWarning: Error: Deribit connection closed.
at /home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/connection.js:62:42
at Array.forEach ()
at WebSocket.ws.onclose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/connection.js:61:28)
at WebSocket.onClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/event-target.js:124:16)
at WebSocket.emit (events.js:321:20)
at WebSocket.emitClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/websocket.js:191:10)
at TLSSocket.socketOnClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/websocket.js:850:15)
at TLSSocket.emit (events.js:333:22)
at net.js:668:12
at TCP.done (_tls_wrap.js:558:7)
(node:5408) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not hand
led with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection i
d: 2)
2020-04-29T11:39:15.199Z [DERIBIT] RECONNECTING...
2020-04-29T12:40:38.950Z [DERIBIT] CLOSED CON
2020-04-29T12:40:39.451Z [DERIBIT] RECONNECTING...
2020-04-29T12:53:08.134Z [DERIBIT] CLOSED CON
2020-04-29T12:53:08.635Z [DERIBIT] RECONNECTING...
2020-04-29T12:53:52.910Z [DERIBIT] CLOSED CON
2020-04-29T12:53:53.411Z [DERIBIT] RECONNECTING...
2020-04-29T12:56:24.311Z [DERIBIT] NO PING RESPONSE
2020-04-29T12:56:24.312Z [DERIBIT] TERMINATED WS CON
2020-04-29T12:56:24.312Z [DERIBIT] CLOSED CON
(node:5408) UnhandledPromiseRejectionWarning: Error: Deribit connection closed.
at /home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/connection.js:62:42
at Array.forEach ()
at WebSocket.ws.onclose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/connection.js:61:28)
at WebSocket.onClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/event-target.js:124:16)
at WebSocket.emit (events.js:321:20)
at WebSocket.emitClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/websocket.js:191:10)
at TLSSocket.socketOnClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/websocket.js:850:15)
at TLSSocket.emit (events.js:333:22)
at net.js:668:12
at TCP.done (_tls_wrap.js:558:7)
(node:5408) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 3)
2020-04-29T12:56:24.813Z [DERIBIT] RECONNECTING...
2020-04-29T12:57:55.702Z [DERIBIT] NO PING RESPONSE
2020-04-29T12:57:55.702Z [DERIBIT] TERMINATED WS CON
2020-04-29T12:57:55.703Z [DERIBIT] CLOSED CON
(node:5408) UnhandledPromiseRejectionWarning: Error: Deribit connection closed.
at /home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/connection.js:62:42
at Array.forEach ()
at WebSocket.ws.onclose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/connection.js:61:28)
at WebSocket.onClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/event-target.js:124:16)
at WebSocket.emit (events.js:321:20)
at WebSocket.emitClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/websocket.js:191:10)
at TLSSocket.socketOnClose (/home/btc_magnet_dl/BTC_Magnet/node_modules/deribit-v2-ws/node_modules/ws/lib/websocket.js:850:15)
at TLSSocket.emit (events.js:333:22)
at net.js:668:12
at TCP.done (_tls_wrap.js:558:7)
(node:5408) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 4)
2020-04-29T12:57:56.204Z [DERIBIT] RECONNECTING...
2020-04-29T13:02:22.871Z [DERIBIT] CLOSED CON
2020-04-29T13:02:23.372Z [DERIBIT] RECONNECTING...

Not working in Browser

I'm getting the following error in the console.

Uncaught (in promise) Error: ws does not work in the browser. Browser clients must use the native WebSocket object

SyntaxError

Hi Mike,

First off, I'm somewhat of a JS noob.

I'm encountering a syntax error when I run your example code:

handleError = (e) => {

SyntaxError: Unexpected token =
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:616:28)
    at Module._compile (/home/ryan/code/logos/node_modules/pirates/lib/index.js:99:24)
    at Module._extensions..js (module.js:663:10)
    at Object.newLoader [as .js] (/home/ryan/code/logos/node_modules/pirates/lib/index.js:104:7)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)

I use this syntax throughout my codebase, so I'm quite perplexed at the moment.

I tried rewriting the declaration like:

handleError(e) {

Which enabled the code to run, but it would then throw:

const request = this.findRequest(payload.id);
                     ^

TypeError: this.findRequest is not a function

I'm sure I'm operating with some basic misunderstanding of JS syntax here.

In the first error block, I see reference made to a module named 'pirates', which I see makes reference to Babel. Is Babel needed to compile this package?

read ECONNRESET

I've been encountering this in my system from time to time. Not 100% sure it's from this lib but seems likely.

2019-08-08T14:27:08.921Z Error: read ECONNRESET
    at TLSWrap.onStreamRead (internal/stream_base_commons.js:183:27) {
  errno: 'ECONNRESET',
  code: 'ECONNRESET',
  syscall: 'read'
}

Lib doesn't reconnect

The connection might close undetected, throwing this error when trying to send requests: Error: WebSocket is not open: readyState 3 (CLOSED).

stuck on "[DERIBIT] RECONNECTING..."

I don't know if it's the test environment problem, throw error with getaddrinfo EAI_AGAIN test.deribit.com, after a few tries, it finilly stuck on "[DERIBIT] RECONNECTING..."
BTW: I start 2 deribit ws client

2021-10-25T00:57:37.138Z [DERIBIT] NO PING RESPONSE
2021-10-25T00:57:37.143Z [DERIBIT] TERMINATED WS CON
2021-10-25T00:57:37.146Z [DERIBIT] NO PING RESPONSE
2021-10-25T00:57:37.147Z [DERIBIT] TERMINATED WS CON
2021-10-25T00:57:37.151Z [DERIBIT] CLOSED CON
2021-10-25T00:57:37.168Z [DERIBIT] CLOSED CON
2021-10-25T00:57:37.652Z [DERIBIT] RECONNECTING...
2021-10-25T00:57:37.674Z [DERIBIT] RECONNECTING...
2021-10-25T00:57:57.687Z [DERIBIT] DERI ERROR ErrorEvent {
  target: WebSocket {
    _events: [Object: null prototype] {
      message: [Function],
      open: [Function],
      error: [Array],
      close: [Function]
    },
    _eventsCount: 4,
    _maxListeners: undefined,
    _binaryType: 'nodebuffer',
    _closeCode: 1006,
    _closeFrameReceived: false,
    _closeFrameSent: false,
    _closeMessage: '',
    _closeTimer: null,
    _extensions: {},
    _protocol: '',
    _readyState: 2,
    _receiver: null,
    _sender: null,
    _socket: null,
    _bufferedAmount: 0,
    _isServer: false,
    _redirects: 0,
    _url: 'wss://test.deribit.com/ws/api/v2',
    _req: null,
    [Symbol(kCapture)]: false
  },
  type: 'error',
  message: 'getaddrinfo EAI_AGAIN test.deribit.com',
  error: Error: getaddrinfo EAI_AGAIN test.deribit.com
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
    errno: -3001,
    code: 'EAI_AGAIN',
    syscall: 'getaddrinfo',
    hostname: 'test.deribit.com'
  }
}
2021-10-25T00:57:57.691Z [DERIBIT] DERI ERROR Error: getaddrinfo EAI_AGAIN test.deribit.com
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
  errno: -3001,
  code: 'EAI_AGAIN',
  syscall: 'getaddrinfo',
  hostname: 'test.deribit.com'
}
2021-10-25T00:57:57.692Z [DERIBIT] CLOSED CON
2021-10-25T00:57:57.694Z [DERIBIT] DERI ERROR ErrorEvent {
  target: WebSocket {
    _events: [Object: null prototype] {
      message: [Function],
      open: [Function],
      error: [Array],
      close: [Function]
    },
    _eventsCount: 4,
    _maxListeners: undefined,
    _binaryType: 'nodebuffer',
    _closeCode: 1006,
    _closeFrameReceived: false,
    _closeFrameSent: false,
    _closeMessage: '',
    _closeTimer: null,
    _extensions: {},
    _protocol: '',
    _readyState: 2,
    _receiver: null,
    _sender: null,
    _socket: null,
    _bufferedAmount: 0,
    _isServer: false,
    _redirects: 0,
    _url: 'wss://test.deribit.com/ws/api/v2',
    _req: null,
    [Symbol(kCapture)]: false
  },
  type: 'error',
  message: 'getaddrinfo EAI_AGAIN test.deribit.com',
  error: Error: getaddrinfo EAI_AGAIN test.deribit.com
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
    errno: -3001,
    code: 'EAI_AGAIN',
    syscall: 'getaddrinfo',
    hostname: 'test.deribit.com'
  }
}
2021-10-25T00:57:57.695Z [DERIBIT] DERI ERROR Error: getaddrinfo EAI_AGAIN test.deribit.com
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
  errno: -3001,
  code: 'EAI_AGAIN',
  syscall: 'getaddrinfo',
  hostname: 'test.deribit.com'
}
2021-10-25T00:57:57.696Z [DERIBIT] CLOSED CON
2021-10-25T00:57:58.194Z [DERIBIT] RECONNECTING...
2021-10-25T00:57:58.197Z [DERIBIT] RECONNECTING...
2021-10-25T00:58:18.212Z [DERIBIT] DERI ERROR ErrorEvent {
  target: WebSocket {
    _events: [Object: null prototype] {
      message: [Function],
      open: [Function],
      error: [Array],
      close: [Function]
    },
    _eventsCount: 4,
    _maxListeners: undefined,
    _binaryType: 'nodebuffer',
    _closeCode: 1006,
    _closeFrameReceived: false,
    _closeFrameSent: false,
    _closeMessage: '',
    _closeTimer: null,
    _extensions: {},
    _protocol: '',
    _readyState: 2,
    _receiver: null,
    _sender: null,
    _socket: null,
    _bufferedAmount: 0,
    _isServer: false,
    _redirects: 0,
    _url: 'wss://test.deribit.com/ws/api/v2',
    _req: null,
    [Symbol(kCapture)]: false
  },
  type: 'error',
  message: 'getaddrinfo EAI_AGAIN test.deribit.com',
  error: Error: getaddrinfo EAI_AGAIN test.deribit.com
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
    errno: -3001,
    code: 'EAI_AGAIN',
    syscall: 'getaddrinfo',
    hostname: 'test.deribit.com'
  }
}
2021-10-25T00:58:18.214Z [DERIBIT] DERI ERROR Error: getaddrinfo EAI_AGAIN test.deribit.com
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
  errno: -3001,
  code: 'EAI_AGAIN',
  syscall: 'getaddrinfo',
  hostname: 'test.deribit.com'
}
2021-10-25T00:58:18.215Z [DERIBIT] CLOSED CON
2021-10-25T00:58:18.216Z [DERIBIT] DERI ERROR ErrorEvent {
  target: WebSocket {
    _events: [Object: null prototype] {
      message: [Function],
      open: [Function],
      error: [Array],
      close: [Function]
    },
    _eventsCount: 4,
    _maxListeners: undefined,
    _binaryType: 'nodebuffer',
    _closeCode: 1006,
    _closeFrameReceived: false,
    _closeFrameSent: false,
    _closeMessage: '',
    _closeTimer: null,
    _extensions: {},
    _protocol: '',
    _readyState: 2,
    _receiver: null,
    _sender: null,
    _socket: null,
    _bufferedAmount: 0,
    _isServer: false,
    _redirects: 0,
    _url: 'wss://test.deribit.com/ws/api/v2',
    _req: null,
    [Symbol(kCapture)]: false
  },
  type: 'error',
  message: 'getaddrinfo EAI_AGAIN test.deribit.com',
  error: Error: getaddrinfo EAI_AGAIN test.deribit.com
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
    errno: -3001,
    code: 'EAI_AGAIN',
    syscall: 'getaddrinfo',
    hostname: 'test.deribit.com'
  }
}
2021-10-25T00:58:18.217Z [DERIBIT] DERI ERROR Error: getaddrinfo EAI_AGAIN test.deribit.com
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
  errno: -3001,
  code: 'EAI_AGAIN',
  syscall: 'getaddrinfo',
  hostname: 'test.deribit.com'
}
2021-10-25T00:58:18.218Z [DERIBIT] CLOSED CON
2021-10-25T00:58:18.716Z [DERIBIT] RECONNECTING...
2021-10-25T00:58:18.719Z [DERIBIT] RECONNECTING...
2021-10-25T00:58:38.737Z [DERIBIT] DERI ERROR ErrorEvent {
  target: WebSocket {
    _events: [Object: null prototype] {
      message: [Function],
      open: [Function],
      error: [Array],
      close: [Function]
    },
    _eventsCount: 4,
    _maxListeners: undefined,
    _binaryType: 'nodebuffer',
    _closeCode: 1006,
    _closeFrameReceived: false,
    _closeFrameSent: false,
    _closeMessage: '',
    _closeTimer: null,
    _extensions: {},
    _protocol: '',
    _readyState: 2,
    _receiver: null,
    _sender: null,
    _socket: null,
    _bufferedAmount: 0,
    _isServer: false,
    _redirects: 0,
    _url: 'wss://test.deribit.com/ws/api/v2',
    _req: null,
    [Symbol(kCapture)]: false
  },
  type: 'error',
  message: 'getaddrinfo EAI_AGAIN test.deribit.com',
  error: Error: getaddrinfo EAI_AGAIN test.deribit.com
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
    errno: -3001,
    code: 'EAI_AGAIN',
    syscall: 'getaddrinfo',
    hostname: 'test.deribit.com'
  }
}
2021-10-25T00:58:38.739Z [DERIBIT] DERI ERROR Error: getaddrinfo EAI_AGAIN test.deribit.com
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
  errno: -3001,
  code: 'EAI_AGAIN',
  syscall: 'getaddrinfo',
  hostname: 'test.deribit.com'
}
2021-10-25T00:58:38.740Z [DERIBIT] CLOSED CON
2021-10-25T00:58:38.741Z [DERIBIT] DERI ERROR ErrorEvent {
  target: WebSocket {
    _events: [Object: null prototype] {
      message: [Function],
      open: [Function],
      error: [Array],
      close: [Function]
    },
    _eventsCount: 4,
    _maxListeners: undefined,
    _binaryType: 'nodebuffer',
    _closeCode: 1006,
    _closeFrameReceived: false,
    _closeFrameSent: false,
    _closeMessage: '',
    _closeTimer: null,
    _extensions: {},
    _protocol: '',
    _readyState: 2,
    _receiver: null,
    _sender: null,
    _socket: null,
    _bufferedAmount: 0,
    _isServer: false,
    _redirects: 0,
    _url: 'wss://test.deribit.com/ws/api/v2',
    _req: null,
    [Symbol(kCapture)]: false
  },
  type: 'error',
  message: 'getaddrinfo EAI_AGAIN test.deribit.com',
  error: Error: getaddrinfo EAI_AGAIN test.deribit.com
      at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
    errno: -3001,
    code: 'EAI_AGAIN',
    syscall: 'getaddrinfo',
    hostname: 'test.deribit.com'
  }
}
2021-10-25T00:58:38.742Z [DERIBIT] DERI ERROR Error: getaddrinfo EAI_AGAIN test.deribit.com
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:71:26) {
  errno: -3001,
  code: 'EAI_AGAIN',
  syscall: 'getaddrinfo',
  hostname: 'test.deribit.com'
}
2021-10-25T00:58:38.742Z [DERIBIT] CLOSED CON
2021-10-25T00:58:39.240Z [DERIBIT] RECONNECTING...
2021-10-25T00:58:39.243Z [DERIBIT] RECONNECTING...

Ability to subscribe more than one channel

We should add the ability to add more channels. Let's say subscribing

"channels": ["ticker.BTC-PERPETUAL.raw", "ticker.ETH-PERPETUAL.raw"]}

The code creates an array of channel passed for the event may be we should join the string inside to make that as key for multiple channels.

Not working for me

hi there, im running into an error when trying to run this.

/Desktop/deribit-v2-ws/connection.js:35
handleError = (e) => {
^

SyntaxError: Unexpected token =
at new Script (vm.js:80:7)
at createScript (vm.js:274:10)
at Object.runInThisContext (vm.js:326:10)
at Module._compile (internal/modules/cjs/loader.js:664:28)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)

thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.