REST API কমান্ড লাইন ক্লায়েন্ট (NodeJS)

সর্বশেষ আপডেট: ৩১ ডিসে, ২০২৫

NodeJS-এ REST API কমান্ড লাইন ক্লায়েন্ট কমান্ড লাইনের মাধ্যমে (যেমন macOS-এ টার্মিনাল) Kraken REST API-তে সম্পূর্ণ অ্যাক্সেস দেয়, তাই কোনো প্রোগ্রামিং জ্ঞান বা API অভিজ্ঞতার প্রয়োজন নেই।

সমস্ত REST API বৈশিষ্ট্যগুলি অ্যাক্সেসযোগ্য, যার মধ্যে রয়েছে:

  • পাবলিক মার্কেট ডেটা এন্ডপয়েন্ট

  • প্রাইভেট অ্যাকাউন্ট ম্যানেজমেন্ট এন্ডপয়েন্ট

  • ট্রেডিং এন্ডপয়েন্ট

  • প্রাইভেট ফান্ডিং এন্ডপয়েন্ট

  • প্রাইভেট স্টেকিং এন্ডপয়েন্ট*

কমান্ড লাইন ক্লায়েন্ট একটি স্বতন্ত্র API ক্লায়েন্ট হিসাবে ব্যবহার করা যেতে পারে, অথবা অন্যান্য প্রোগ্রাম (যেমন ব্যাশ স্ক্রিপ্টের মতো অন্যান্য ইন্টারপ্রেটেড ভাষা, বা C/C++ এর মতো কম্পাইল করা ভাষা) থেকে কল করা যেতে পারে।

ইনস্টলেশন

. NodeJS ইনস্টল করুন (যদি প্রয়োজন হয়)।

  • macOS এবং Linux-এ সম্ভবত NodeJS ইতিমধ্যেই ইনস্টল করা আছে।

  • Windows-এ সম্ভবত NodeJS ইনস্টল করা নেই, তবে এটি https://www.nodejs.org/ থেকে ইনস্টল করা যেতে পারে।

. আপনার পছন্দের ফোল্ডারে (ডিরেক্টরি) আপনার কম্পিউটারে krakenapi.js ফাইলটি ডাউনলোড এবং সেভ করুন। উদাহরণস্বরূপ:

Macintosh HD > Users > Satoshi > KrakenAPI


. একটি কমান্ড প্রম্পট খুলুন (যেমন macOS's টার্মিনাল), এবং পূর্ববর্তী ধাপে নির্বাচিত ফোল্ডারে (ডিরেক্টরি) নেভিগেট করুন

নেভিগেট করতে আপনি "cd" কমান্ড (ডিরেক্টরি পরিবর্তন) ব্যবহার করতে পারেন। উদাহরণস্বরূপ:

cd /Users/Satoshi/KrakenAPI


. আপনার API কীগুলি একই ফোল্ডারে যোগ করুন যেখানে আপনি krakenapi.js ফাইলটি রাখছেন।

অ্যাকাউন্ট ম্যানেজমেন্ট থেকে আপনার API পাবলিক কী একটি প্লেইন টেক্সট ফাইলে কপি/পেস্ট করুন যার নাম "API_PUBLIC_KEY"।

আপনার API প্রাইভেট (গোপন) কী একটি প্লেইন টেক্সট ফাইলে কপি/পেস্ট করুন যার নাম "API_PRIVATE_KEY"।

একটি API কী শুধুমাত্র তখনই প্রয়োজন যদি আপনি আপনার Kraken অ্যাকাউন্ট অ্যাক্সেস করতে প্রাইভেট API এন্ডপয়েন্ট ব্যবহার করার পরিকল্পনা করেন (যেমন ব্যালেন্স অনুসন্ধান, অর্ডার দেওয়া/বাতিল করা, অ্যাকাউন্ট হিস্টরি এক্সপোর্ট ইত্যাদি)।

অতিরিক্ত নির্দেশাবলীর জন্য কীভাবে একটি API কী পেয়ার তৈরি করবেন? দেখুন।

উদাহরণ কমান্ড

REST API কমান্ড লাইন ক্লায়েন্টের ব্যবহার নিম্নরূপ:

bash

Bash

nodejs krakenapi.js endpoint [parameters]

The command line client supports all of the REST API endpoints. Here are a few example commands:

nodejs krakenapi.js Time
nodejs krakenapi.js Ticker pair=xbtusd
nodejs krakenapi.js Trades pair=etheur since=1574067140000000000
nodejs krakenapi.js Balance
nodejs krakenapi.js TradeBalance asset=xbt
nodejs krakenapi.js QueryOrders txid=O7MN22-ZCX7J-TGLQHD
nodejs krakenapi.js AddOrder pair=xbtusd type=buy ordertype=limit price=6500 volume=0.002 leverage=5
nodejs krakenapi.js CancelOrder txid=O7MN22-ZCX7J-TGLQHD

NodeJS কোড

bash

Bash

const axios = require("axios");
const { clear } = require("console");
const crypto = require("crypto");
const fs = require("fs");

const main = async () => {
  let response = "";
  let apiMethod = "";
  let inputParameters = "";

  const api_private = [
    "Balance",
    "BalanceEx",
    "TradeBalance",
    "OpenOrders",
    "ClosedOrders",
    "QueryOrders",
    "TradesHistory",
    "QueryTrades",
    "OpenPositions",
    "Ledgers",
    "QueryLedgers",
    "TradeVolume",
    "AddExport",
    "ExportStatus",
    "RetrieveExport",
    "RemoveExport",
    "GetWebSocketsToken",
    "AddOrder",
    "AddOrderBatch",
    "EditOrder",
    "CancelOrder",
    "CancelAll",
    "CancelAllOrdersAfter",
    "DepositMethods",
    "DepositAddresses",
    "DepositStatus",
    "WithdrawInfo",
    "Withdraw",
    "WithdrawStatus",
    "WithdrawCancel",
    "WalletTransfer",
    "Staking/Assets",
    "Stake",
    "Unstake",
    "Staking/Pending",
    "Staking/Transactions",
  ];

  const api_public = [
    "Time",
    "Assets",
    "AssetPairs",
    "Ticker",
    "OHLC",
    "Depth",
    "Trades",
    "Spread",
    "SystemStatus",
  ];

  // Destructuring the input command
  if (process.argv.length < 3) {
    apiMethod = "Time";
  } else if (process.argv.length == 3) {
    apiMethod = process.argv[2];
  } else {
    apiMethod = process.argv[2];
    for (count = 3; count < process.argv.length; count++) {
      if (count == 3) {
        inputParameters = process.argv[count];
      } else {
        inputParameters = inputParameters + "&" + process.argv[count];
      }
    }
  }

  // Condition to check the private or public endpoints
  if (api_private.includes(apiMethod)) {
    response = await QueryPrivateEndpoint(apiMethod, inputParameters);

    if (apiMethod == "RetrieveExport") {
      try {
        fs.writeFileSync("Report.zip", response); // write the zip file response
        console.log("Report.zip file successfully received");
      } catch (err) {
        console.log(err);
      }
    } else {
      console.log(response.toString());
    }
  } else if (api_public.includes(apiMethod)) {
    response = await QueryPublicEndpoint(apiMethod, inputParameters);
    console.log(JSON.stringify(response));
  } else {
    console.log("Usage: app method [parameters]");
    console.log("Example: app OHLC pair=xbtusd interval=1440");
  }
};

// Public API Endpoint
async function QueryPublicEndpoint(endPointName, inputParameters) {
  let jsonData;
  const baseDomain = "https://api.kraken.com";
  const publicPath = "/0/public/";
  const apiEndpointFullURL = baseDomain + publicPath + endPointName + "?" + inputParameters;

  await axios
    .get(apiEndpointFullURL)
    .then((res) => {
      jsonData = res;
    })
    .catch((err) => {
      jsonData = err;
    });
  return jsonData.data;
}

// Private API Endpoint
async function QueryPrivateEndpoint(endPointName, inputParameters) {
  const baseDomain = "https://api.kraken.com";
  const privatePath = "/0/private/";

  const apiPublicKey = fs.readFileSync("API_PUBLIC_KEY").toString().trim(); // get data from API_PUBLIC_KEY text file
  const apiPrivateKey = fs.readFileSync("API_PRIVATE_KEY").toString().trim(); // get data from API_PRIVATE_KEY text file

  const apiEndpointFullURL = baseDomain + privatePath + endPointName;
  const nonce = Date.now().toString();
  const apiPostBodyData = "nonce=" + nonce + "&" + inputParameters;

  const signature = CreateAuthenticationSignature(
    apiPrivateKey,
    privatePath,
    endPointName,
    nonce,
    apiPostBodyData
  );
  const httpOptions = {
    headers: { "API-Key": apiPublicKey, "API-Sign": signature },
    responseType: "arraybuffer",
  };

  let jsonData;
  await axios
    .post(apiEndpointFullURL, apiPostBodyData, httpOptions)
    .then((res) => {
      jsonData = res;
    })
    .catch((err) => {
      jsonData = err;
    });

  return jsonData.data;
}

// Authentication algorithm
function CreateAuthenticationSignature(
  apiPrivateKey,
  apiPath,
  endPointName,
  nonce,
  apiPostBodyData
) {
  const apiPost = nonce + apiPostBodyData;
  const secret = Buffer.from(apiPrivateKey, "base64");
  const sha256 = crypto.createHash("sha256");
  const hash256 = sha256.update(apiPost).digest("binary");
  const hmac512 = crypto.createHmac("sha512", secret);
  const signatureString = hmac512
    .update(apiPath + endPointName + hash256, "binary")
    .digest("base64");
  return signatureString;
}

main();

*স্ট্যাকিংয়ের জন্য যোগ্যতার মানদণ্ড (ভৌগোলিক সীমাবদ্ধতা সহ) সম্পর্কে একটি ওভারভিউ এখানে পাওয়া যাবে।

আরও সাহায্যের প্রয়োজন?