Code Monkey home page Code Monkey logo

binance-api-node's Issues

Error: Invalid symbol.

Today I tried to sell XLM using binance-api-node. I tried to execute it this way:

const Binance = require('binance-api-node').default;

const client = Binance({
  apiKey: process.env.BINANCE_API_KEY,
  apiSecret: process.env.BINANCE_API_SECRET
});

const order = { 
  symbol: 'XLM',
  side: 'SELL',
  type: 'LIMIT',
  quantity: 48,
  price: 0.00031337
};

client.order(order).then(response => console.log('Success'));

Unfortunately I am always receiving the following error:

Error: Invalid symbol.
at D:\dev\projects\bennyn\trading-bot-framework\node_modules\binance-api-node\dist\http.js:47:13
at
at process._tickCallback (internal/process/next_tick.js:188:7)

What am I doing wrong?

I logged error.code (https://github.com/binance-exchange/binance-official-api-docs/blob/master/errors.md) but it's undefined. 😢

Strategy to avoid "INVALID_TIMESTAMP"

Binance is pretty strict about the timestamp which is sent to the server on every request.

To avoid the "Request used an outdated timestamp" error, we could sync our own time with an online atomic clock service to determine our clock drift (which can then be used to adjust the timestamps).

Websocket PartialDepth Symbols

When examining multiple markets we should have a secondary "symbol" return parameter so we can see which update this is for, at the moment we can only get depth.

Websockets state

Is there anyway to determine the state of the websocket (closed, connecting, connected, ..)?

Catch error in buy/sell

If an order is placed which is immediately rejected (for example, insufficient balance) - there doesn't appear to be a way to catch it?

The returned promise results in a permanent pending state - even though internally something has been rejected.

I've tried to catch it every which way i could think of, but the code never makes it out that far.

For example, here's all the ways i've tried to catch the error at my level (mind the craziness, i was starting to just try everything possible)

// Wrap whole thing in TRY/CATCH
try {
  var p = new Promise(async resolve => {
    let result = await authedClient.order(params);
    // WRAP result of .order call in TRY/CATCH
    try {
      result = await authedClient.order(params);
    } catch(e) {
      // THIS IS NEVER REACHED
      console.log("Error:", e);
    }
    resolve(result);
  })
  .catch(function(reason) {
    // THIS IS ALSO NEVER REACHED
    console.log("Error:", e);
  })
  .finally(()=>{
    // This is also never reached
    console.log("Finally")
  })
  // wrap the whole promise within a Promise.all call
  Promise.all([p]).then( () => console.log("NEVER REACHED"))

} catch(e) {
  // THIS IS NEVER REACHED
  debugger;
}

// Returned promise P is stuck in permanent `pending` state - even though internally it has failed

More typings

I wrote some method typings which were missing.

declare module 'binance-api-node' {
    interface MyTrade {
        id: number;
        orderId: number;
        price: string;
        qty: string;
        commission: string;
        commissionAsset: string;
        time: number;
        isBuyer: boolean;
        isMaker: boolean;
        isBestMatch: boolean;
    }

    interface QueryOrderResult {
        symbol: string;
        orderId: number;
        clientOrderId: string;
        price: string;
        origQty: string;
        executedQty: string;
        status: string;
        timeInForce: string;
        type: string;
        side: string;
        stopPrice: string;
        icebergQty: string;
        time: number;
        isWorking: boolean;
    }

    interface CancelOrderResult {
        symbol: string;
        origClientOrderId: string;
        orderId: number;
        clientOrderId: string;
    }

    interface Binance {
        myTrades(params: { symbol: string, limit?: number, fromId?: number }): Promise<MyTrade[]>;

        getOrder(params: { symbol: string; orderId: number }): Promise<QueryOrderResult>;

        cancelOrder(params: { symbol: string; orderId: number }): Promise<CancelOrderResult>;

        openOrders(params: { symbol: string }): Promise<QueryOrderResult[]>;
    }
}

I can make a PR if needed.

withdraw error

{ msg: 'The operation failed, please try again later.',
success: false,
id: 'bb1f91a7bd1b448ca7f8143b7dcac8e2' }

Unknown Processing Error

Getting this error but not sure where from:

error: Unhandled Rejection at: Promise  Promise {
  <rejected> Error: An unknown error occured while processing the request.
    at /home/jafri/binance-api/node_modules/binance-api-node/dist/http.js:47:13
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7) } Error: An unknown error occured while processing the request.
    at /home/jafri/binance-api/node_modules/binance-api-node/dist/http.js:47:13
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7)

Exchange Info Endpoint

Hi,

Can we get support for /api/v1/exchangeInfo endpoint that provides information about the LOT_SIZE and other exchange info on every pair.

Thanks

.orderTest() returning empty object

Is this intended? The documentation states that the output of this test call will return the same output as .order() which is not the case. Is the documentation wrong or is this an oversight? Awesome library thank you!

Error: Account has insufficient balance for requested action

I am getting error "Error: Account has insufficient balance for requested action" when executing the order function, below is the implemented code example.

import Binance from 'binance-api-node'

const SIDE_OPTIONS = {
  BUY: 'BUY',
  SELL: 'SELL',
};

function runBinance(apiKey, apiSecret) {
  return Binance({
    apiKey,
    apiSecret,
  });
}

export async function buyOrder(
  binanceApiKey,
  binanceApiSecret,
  symbol,
  quantity,
  price,
  type,
) {
  try {
    await runBinance(binanceApiKey, binanceApiSecret)
      .order({
        symbol,
        side: SIDE_OPTIONS.BUY,
        quantity,
        type,
        price,
      });

    return;
  } catch (error) {
    return {
      error: {
        status: 400,
        message: error,
      }
    }
  }
}

Can anyone tell me if the test flag is working anyway? I do not want to use resources from my wallet for now.

Determine what price a market order was executed at

Hugely appreciate the work on this module, it's a fantastic way to interface with the binance API.

Is there a way to determine at what price a market order was executed without invoking the myTrades endpoint? It seems that getOrder always returns 0.000 for the price attribute in the case of a market order (which makes data-structure-wise given that it is a market order, it's just inconvenient for analytical purposes)

I gather that this question is probably more closely related to the actual workings of the API itself, rather than this specific client; but for future reference and documentation purposes it surely couldn't hurt to get a clear picture of how this would work.

Websocket handshake Error

I'm trying to use the websockets:

const client = Binance()
const disconnect = client.ws.ticker('ETHBTC', ticker => {
  console.log(ticker)
})

and I'm running into some unexpected errors:

WebSocket connection to 'wss://stream.binance.com:9443/ws/ethbtc@ticker' failed: Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received

Not sure how to go about fixing this, though I tried uninstalling binance-api-node and installing again. Using npm version 5.6.0 and node version v9.4.0.

ERROR: TIMESTAMP FOR THIS REQUEST WAS 1000MS AHEAD OF THE SERVER'S TIME.

I'm getting the following error when placing a purchase order

ERROR: TIMESTAMP FOR THIS REQUEST WAS 1000MS AHEAD OF THE SERVER'S TIME.
  return new Binance({
    apiKey,
    apiSecret,
    useServerTime: true, // It should solve the above problem.
  });

Has anyone had this problem while using it in production? In tests everything is OK, but when I change orderTest to order the above error occurs.

Sending data to my server running:

{
	"symbol": "LTCETH",
	"quantity": 0.00190000,
	"userId": "5ac9c2ad41a43a3770beb263"
}

Unhandled promise rejection when trying to clean user data stream websocket

Reproduce the issue with this code :

import Binance from 'binance-api-node';

const client = Binance({
  apiKey: 'Igj71woxxxxxxxxxxxxxxxxx',
  apiSecret: 'gkFWlxxxxxxxxxxxxxxxxx'
});

let clean;

setInterval(async () => {
  clean && clean();
  clean = await client.ws.user(() => {});
}, 5e3);

Once in a while (about 1 out of 5 times) the server responds with a 500 status code and this happens :
(node:22103) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: An unknown error occured while processing the request.

It comes from the closeDataStream call
https://github.com/HyperCubeProject/binance-api-node/blob/47c65c1e5cb8659b6e0f16ad49e6c882413aaa75/src/websocket.js#L245
and the exact unhandled promise rejection comes from here :
https://github.com/HyperCubeProject/binance-api-node/blob/47c65c1e5cb8659b6e0f16ad49e6c882413aaa75/src/http.js#L21-L28

As a temporary workaround I just completely removed the closeDataStream() call since it seems it isn't really necessary. It turns out the server will return the same listenKey on getDataStream() call if it is still alive and you haven't deleted it.

What are "quantity" units?

On aggrTrades, is quantity quoted in the base currency or the quote currency?

For instance, in a trade of ETHBTC, price == 0.091077 and quantity == 0.316 - is it BTC or ETH?

Error: Filter failure: PRICE_FILTER

any idea why do I get this error?

{ Error: Filter failure: PRICE_FILTER
    at C:\Users\herve\OneDrive\Documents\GitHub\xxx\node_modules\binance-api-node\dist\http.js:47:19
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:188:7) code: -1013 }

Requires babel-polyfill since 0.5.1

Updated from 0.5.0 to 0.5.2, trader won't start.
Error:

C:\Trader\Logic\node_modules\binance-api-node\dist\http.js:105
    var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(path) {
                                                ^

ReferenceError: regeneratorRuntime is not defined
    at C:\Trader\Logic\node_modules\binance-api-node\dist\http.js:105:49
    at privateCall (C:\Trader\Logic\node_modules\binance-api-node\dist\http.js:168:4)
    at exports.default (C:\Trader\Logic\node_modules\binance-api-node\dist\http.js:235:15)
    at new exports.default (C:\Trader\Logic\node_modules\binance-api-node\dist\index.js:21:42)
    at C:\Trader\Logic\Trader_Crypto.js:74:53
    at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:511:3)

Downgraded back to 0.5.0, working again.

clean() - Cannot read property 'forEach' of undefined

In next example clean() function fired error

(node:45) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'forEach' of undefined

const clean = client.ws.depth('ETHBTC', depth => {
  console.log(depth)
})

// After you're done
clean()

ws.depth does not return "First update ID"

According to official binanace documentation WebSocket depth stream recieves in payload "First update ID in event" as "U" key, but in api wrapper we have only "u" key "Final update ID in event".
So there are not any possibility to update local order book by using data from this stream.

Also I can't verify that sequence data from depth stream are consistent and there aren't any packet wich would be miss

Also I can't verify that sequence of data from depth stream are continuous and there aren't any packet which was missed. If I recieve first packet with updateId=100 and next with updateId=108 I will not rely on this sequence? because I don't know there were between these packets others that were missed.
But If I got these packets with additional field firstUpdateId and finalUpdateId (instead of updateId) I can verify this.

For example, two packets

{firstUpdateId: 95, finalUpdateId: 100} 
{fistUpdateId: 101, finalUpdateId: 108}

In this case I see that sequence of changes is continuous: 95-100_101-108

I propose to modify depth method something like this:

File: binance-api-node/src/websocket.js

const depth = (payload, cb) => {
  const cache = (Array.isArray(payload) ? payload : [payload]).map(symbol => {
    const w = new WebSocket(`${BASE}/${symbol.toLowerCase()}@depth`)
    w.on('message', msg => {
      const {
        e: eventType,
        E: eventTime,
        s: symbol,
 //       u: updateId,          // - remove 
        U: firstUpdateId,     // + add 
        u: finalUpdateId,     // + add 
        b: bidDepth,
        a: askDepth,
      } = JSON.parse(msg)

      cb({
        eventType,
        eventTime,
        symbol,
//        updateId,           // - remove 
        firstUpdateId,       // + add 
        finalUpdateId,       // + add 
        bidDepth: bidDepth.map(b => zip(['price', 'quantity'], b)),
        askDepth: askDepth.map(a => zip(['price', 'quantity'], a)),
      })
    })

    return w
  })

  return () => cache.forEach(w => w.close())
}

can't get the example running

Hey,

i really like that you ported the project to async.
But i cant get it running.
What is it, i have to do to compile the project correctly?

After i installed binance-api.node and running a server.js file with the following code

import Binance from 'binance-api-node'

i get the error message

>node server.js                                                                                               [±master ●●]
/home/mod/code/projects/traders-friend/api/app/server.js:1
(function (exports, require, module, __filename, __dirname) { import Binance from 'binance-api-node'
                                                                     ^^^^^^^

SyntaxError: Unexpected identifier
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:152:10)
    at Module._compile (module.js:605:28)
    at Object.Module._extensions..js (module.js:652:10)
    at Module.load (module.js:560:32)
    at tryModuleLoad (module.js:503:12)
    at Function.Module._load (module.js:495:3)
    at Function.Module.runMain (module.js:682:10)
    at startup (bootstrap_node.js:191:16)
    at bootstrap_node.js:613:3

i am running node version 9.0.0.
thx in advance!

Compiled with 2 warnings [win 7 platform]

i'm use vue-cli boilerplate (https://github.com/vuejs/vue-cli)
after vue init webpack client
a'm install the library:

  • yarn add binance-api-node

  • yarn run dev

WARNING Compiled with 2 warnings 17:

These dependencies were not found:

  • bufferutil in ./node_modules/ws/lib/BufferUtil.js
  • utf-8-validate in ./node_modules/ws/lib/Validation.js

To install them, you can run: npm install --save bufferutil utf-8-validate

  • yarn add bufferutil utf-8-validate

  • yarn run dev

WARNING Compiled with 2 warnings 17:49

warning in ./node_modules/bindings/bindings.js

81:22-40 Critical dependency: the request of a dependency is an expression

warning in ./node_modules/bindings/bindings.js

81:43-53 Critical dependency: the request of a dependency is an expression

how fix that error?

FetchError: Unhandled promise rejection (ENOTFOUND)

I tested the Binance API in a real-world scenario where internet connections can get interrupted. In these cases, the "binance-api-node" library fails with a Unhandled promise rejection which can cause Node.js application crashes.

Here is a little code demo which shows the issue:

const Binance = require('binance-api-node').default
const dotenv = require('dotenv')

if (!process.env.BINANCE_API_KEY) dotenv.load()

process.on('unhandledRejection', error => {
  console.error('Catched Binance error', error)
  process.exit(1)
})

const client = Binance({
  apiKey: process.env.BINANCE_API_KEY,
  apiSecret: process.env.BINANCE_API_SECRET,
})

async function getOrder() {
  const order = await client.getOrder({symbol: 'TRXETH', orderId: 20123533})
  console.log(`order (${Date.now()})`, order)
  setTimeout(getOrder, 2000)
}

getOrder()

Just run the code and turn off your internet connection (airplane mode) while the code is running.

We need to come up with a concept, where this scenario is detected and where Promises will be continued once internet is back again.

Unhandled Promise Rejection when trying to establish a websocket connection (when cannot reach the Binance server)

When the Node.js server (for some reason) cannot reach the Binance server, and you try opening a websocket (say for example ws.depth), the function call throws an Unhandled Promise Rejection leading to the Node.js server to crash.

Looking at the Websocket documentation this happens when the event error is emitted by the underlying socket. Ideally, the function that tries to open a websocket should try and handle the error event by subscribing to the websocket_instance.on("error", message => {...}) callback, which is missing in every function in the websocket.js module.

There is no way other than process.on('uncaughtException', error => {...}) to catch such errors. In an ideal case, the functions in websocket.js should return a promise, that should be resolved only when the websocket connection is successfully established, or else should send a rejection. Something like below

const depth = (payload, cb) => {
  return new Promise((fulfill, reject) => {
    const cache = [];
    let count = 0;
    let payload = Array.isArray(payload) ? payload : [payload];
    (payload).forEach(symbol => {
      const w = new WebSocket(`${BASE}/${symbol.toLowerCase()}@depth`)
      cache.push(w);
      
      w.on('open', msg => {
        count++;
        if (count === payload.length) fulfill(() => cache.forEach(w => w.close()));
      });

      w.on('message', msg => {
        const {
          e: eventType,
          E: eventTime,
          s: symbol,
          u: finalUpdateId,
          U: firstUpdateId,
          b: bidDepth,
          a: askDepth,
        } = JSON.parse(msg)

        cb({
          eventType,
          eventTime,
          symbol,
          firstUpdateId,
          finalUpdateId,
          bidDepth: bidDepth.map(b => zip(['price', 'quantity'], b)),
          askDepth: askDepth.map(a => zip(['price', 'quantity'], a)),
        })
      });

      w.on('error', msg => {
        reject(msg);
      });
    })
  });
}

Error codes

I have seen that the Binance API provides error codes. However, I cannot access them using error.code. Is binance-api-node eating up these codes from the backend response?

Currently I am checking errors like this error.message === 'Filter failure: LOT_SIZE' & error.message === 'Account has insufficient balance for requested action.', but I would like to check against error codes because messages are more likely to change.

syntaxerror import

When trying this sample in node js:

import Binance from 'binance-api-node'
const client = Binance()

client.time().then(time => console.log(time))

I get this error:

import Binance from 'binance-api-node'
^^^^^^

SyntaxError: Unexpected token import
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:599:28)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3

Upon investigating on the net, I found that node js doesn't natively support ES6.
One workaround is to use require instead:

const Binance = require('binance-api-node')
const client = Binance()

client.time().then(time => console.log(time))

But this then gets me this error:

const client = Binance()
               ^

TypeError: Binance is not a function
    at Object.<anonymous> (C:\Trader\Logic\Random\test.js:9:16)
    at Module._compile (module.js:635:30)
    at Object.Module._extensions..js (module.js:646:10)
    at Module.load (module.js:554:32)
    at tryModuleLoad (module.js:497:12)
    at Function.Module._load (module.js:489:3)
    at Function.Module.runMain (module.js:676:10)
    at startup (bootstrap_node.js:187:16)
    at bootstrap_node.js:608:3

Another workaround would be to use babel, but I don't have any knowledge regarding that.
Is there an easy fix?

Thanks,
Wannes

Closing a connection

Currently if a connection is created, there is no way to disconnect it.
For a long running application, which may need to reconnect this will slowly eat up a large amount of memory.

// FROM websocket.js line ~103
var trades = function trades(payload, cb) {
  return (Array.isArray(payload) ? payload : [payload]).forEach(function (symbol) {
    var w = new _ws2.default(BASE + '/' + symbol.toLowerCase() + '@aggTrade');
    w.on('message', function (msg) {
      var _JSON$parse3 = JSON.parse(msg),
          eventType = _JSON$parse3.e,
          eventTime = _JSON$parse3.E,
          symbol = _JSON$parse3.s,
          price = _JSON$parse3.p,
          quantity = _JSON$parse3.q,
          maker = _JSON$parse3.m,
          tradeId = _JSON$parse3.a;

      cb({
        eventType: eventType,
        eventTime: eventTime,
        symbol: symbol,
        price: price,
        quantity: quantity,
        maker: maker,
        tradeId: tradeId
      });
    });
  });
};

The returned value is undefined since forEach does not return anything.

Is there a recommended way of closing out the connection?

Type definitions

Hi @balthazar, I am a big fan of your Binance API. It's really easy to handle and I like that it uses Promises.

The only thing which I am missing so far are type definitions for TypeScript. I would therefore like to create TypeScript definitions for this library and contribute them in various Pull Request (one for each section). But before I start with it I would like to know if you think that it is a good thing to do?

Best,
Benny

Websocket request returns 400

I'm getting a 400 when trying to open a websocket. I'm using
client.ws.depth('ETHBTC', depth => { console.log(depth) }) to test, but getting a 400 response. I tested the url it is creating with Simple Websocket Client. The wss:// protocol seems to be getting changed into https:// protocol somehow. In the Chrome Dev Tools I found the network request and it is "https://stream.binance.com:9443/ws/ethbtc@depth". So, in Simple Websocket Client extension I changed "https://" to "wss://" and it works. Just don't know how to fix it in this lib since it calls other dependencies that seem to be transforming the protocol and causing 400. Maybe I am doing something wrong.

Return individual WebSocket connections

When opening a WebSocket connection, I get a clean handle which then can be used to close all open WebSocket connections at once:

return () => cache.forEach(w => w.close(1000, 'Close handle was called', { keepClosed: true }))

That's a great encapsulation but it also prevents me from closing individual WebSocket connections.

In my application I am watching the candles of different trading symbols (ETHBTC, BNBBTC, BNTBTC, ...). Sometimes I want to stop watching a symbol (like BNBBTC) but I cannot stop this WebSocket connection without stopping all the others too. We should find a solution to it. WDYT, @balthazar?

Enums for error codes

I would like to discuss the idea of mapping error codes into error types.

In my TypeScript application I created an enum list for that purpose:

enum BinanceErrorCode {
  UNKNOWN = -1000,
  DISCONNECTED = -1001,
  UNAUTHORIZED = -1002,
  TOO_MANY_REQUESTS = -1003,
  UNEXPECTED_RESP = -1006,
  TIMEOUT = -1007,
  INVALID_MESSAGE = -1013,
  UNKNOWN_ORDER_COMPOSITION = -1014,
  TOO_MANY_ORDERS = -1015,
  SERVICE_SHUTTING_DOWN = -1016,
  UNSUPPORTED_OPERATION = -1020,
  INVALID_TIMESTAMP = -1021,
  INVALID_SIGNATURE = -1022,
  ILLEGAL_CHARS = -1100,
  TOO_MANY_PARAMETERS = -1101,
  MANDATORY_PARAM_EMPTY_OR_MALFORMED = -1102,
  UNKNOWN_PARAM = -1103,
  UNREAD_PARAMETERS = -1104,
  PARAM_EMPTY = -1105,
  PARAM_NOT_REQUIRED = -1106,
  NO_DEPTH = -1112,
  TIF_NOT_REQUIRED = -1114,
  INVALID_TIF = -1115,
  INVALID_ORDER_TYPE = -1116,
  INVALID_SIDE = -1117,
  EMPTY_NEW_CL_ORD_ID = -1118,
  EMPTY_ORG_CL_ORD_ID = -1119,
  BAD_INTERVAL = -1120,
  BAD_SYMBOL = -1121,
  INVALID_LISTEN_KEY = -1125,
  MORE_THAN_XX_HOURS = -1127,
  OPTIONAL_PARAMS_BAD_COMBO = -1128,
  INVALID_PARAMETER = -1130,
  BAD_API_ID = -2008,
  DUPLICATE_API_KEY_DESC = -2009,
  INSUFFICIENT_BALANCE = -2010,
  CANCEL_ALL_FAIL = -2012,
  NO_SUCH_ORDER = -2013,
  BAD_API_KEY_FMT = -2014,
  REJECTED_MBX_KEY = -2015,
}

export default BinanceErrorCode

With binance-api-node v0.7.1 it gives me the ability to do the following:

if (error.code === BinanceErrorCode.INSUFFICIENT_BALANCE) {
  this.logger.warn(`Operation "SELL" for symbol "${pair.asString()}" failed. Account has insufficient balance."`)
} 

Instead of maintaining my own enum list it would be great if we can expose something like this from "binance-api-node". We would need to find a smart way on how to export such list of codes.

Telling from the error documentation there should be also -9xxx error codes which I haven't seen in production yet. The docs state that these are being used for filter errors such as LOT_SIZE but I get error message "Filter failure: LOT_SIZE" along with error code "-1013" (INVALID_MESSAGE). 🐺

orderTest does not return anything

Not sure if this is intended, but is the orderTest function supposed to return an empty object {}?

Using the code:

        console.log(await client.orderTest({
          symbol: 'ADABTC',
          side: 'BUY',
          quantity: 100,
          price: 0.0002,
          recvWindow: 5000
        }))

Reconnect websocket

Sometimes the websocket stops receiving data, or times out.

Would it be possible to give us an easy way to disconnect, and afterwards reconnect, the existing socket?

CORS issue with Public api call

Hello, when I make a public api call (ping, time or exchangeInfo, etc..) I receive a CORS error and the logged error is 'TypeError: Failed to fetch'. Not sure what Im doing wrong. Im trying to avoid using API keys in this particular project. Thank you.

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.