title: Authenticated Commands With MtGox's Streaming API
body: <p>I am using nodejs with socket.io-client to connect to the MtGox Streaming API described here: <a href="https://en.bitcoin.it/wiki/MtGox/API/Streaming#Authenticated_commands" rel="nofollow">https://en.bitcoin.it/wiki/MtGox/API/Streaming#Authenticated_commands</a></p>
  
  <p>The examples are written in php and I tried my best to convert them to JS but I keep getting a response from the server "Invalid call"</p>
  
  <pre><code>var sec_key_buffer = Buffer(secret_key, 'base64');
  var hmac = crypto.createHmac('sha512', sec_key_buffer);
  var nonce = Date.now() + "";
  var id = crypto.createHash('md5').update(nonce).digest('hex');
  var query = {
      "call": 'private/info',
      "id": id,
      "nonce": nonce
  };
  var body = JSON.stringify(query);
  var sign = hmac.update(body).digest('binary');
  
  // The 'api_key' field has already stripped of the '-' character
  var callBody = new Buffer(api_key + sign + body).toString('base64');
  
  // 'connection' is the socket.io connection to 'https://socketio.mtgox.com/mtgox'    
  connection.json.send({
      "op": "call",
      "id": id,
      "call": callBody,
      "context": 'mtgox.com'
  });
  </code></pre>
  
  <p>Any help would be appreciated.</p>