제공되는 각 레퍼런스 API를 확인하여 웹 요청시 사용할 Class파일 생성.
const request = require('request');
const {v4:uuidv4} = require("uuid");
const crypto = require('crypto');
const sign = require('jsonwebtoken').sign;
const queryEncode = require("querystring").encode;
const jwt = require("jsonwebtoken");
const fetch = require("node-fetch");
const decodeKey = require('./decodeKey');
class upbitClass {
constructor(ac, se) {
this.access_key = ac ? decodeKey(ac) : '';
this.secret_key = se ? decodeKey(se) : '';
this.server_url = 'https://api.upbit.com';
}
//ACCOUNT
accounts() {
const payload = {
access_key : this.access_key,
nonce : uuidv4(),
};
const jwtToken = jwt.sign(payload, this.secret_key);
const options= {
method: "GET",
url: `${this.server_url}/v1/accounts`,
headers: {Authorization: `Bearer ${jwtToken}`},
};
return new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if (error) reject(error);
resolve(body);
});
});
}
//MARKET CODE
market_code() {
const options = {method: 'GET', headers: {Accept: 'application/json'}};
return fetch(`${this.server_url}/v1/market/all?isDetails=false`, options)
.then(response => response.json());
}
//MARKET PRICE
market_price() {
const options = {method: 'GET', headers: {Accept: 'application/json'}};
return fetch(`${this.server_url}/v1/orderbook?markets=KRW-BTC`, options);
}
//ORDERABLE
orderable(obj) {
const body = obj;
const query = queryEncode(body);
const hash = crypto.createHash('sha512');
const queryHash = hash.update(query, 'utf-8').digest('hex');
const payload = {
access_key: this.access_key,
nonce: uuidv4(),
query_hash: queryHash,
query_hash_alg: 'SHA512',
};
const token = sign(payload, this.secret_key);
const options = {
method: "GET",
url: `${this.server_url}/v1/orders/chance?${query}`,
headers: {Authorization: `Bearer ${token}`},
json: body
};
return new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if (error) reject(error);
resolve(body);
});
});
}
//EACH ORDER
each_order(od_id) {
const body = {
uuid: od_id
};
const query = queryEncode(body);
const hash = crypto.createHash('sha512');
const queryHash = hash.update(query, 'utf-8').digest('hex');
const payload = {
access_key: this.access_key,
nonce: uuidv4(),
query_hash: queryHash,
query_hash_alg: 'SHA512',
};
const token = sign(payload, this.secret_key);
const options = {
method: "GET",
url: `${this.server_url}/v1/order?` + query,
headers: {Authorization: `Bearer ${token}`},
json: body
};
return new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if (error) reject(error);
resolve(body);
});
});
}
//ORDER LIST
order_list(od_arr, od_state = 'done') {
const state = od_state;
const uuids = od_arr;
const non_array_body = {
state: state,
}
const array_body = {
uuids: uuids,
}
const body = {
...non_array_body,
...array_body
}
const uuid_query = uuids.map(uuid => `uuids[]=${uuid}`).join('&')
const query = queryEncode(non_array_body) + '&' + uuid_query
const hash = crypto.createHash('sha512')
const queryHash = hash.update(query, 'utf-8').digest('hex')
const payload = {
access_key: access_key,
nonce: uuidv4(),
query_hash: queryHash,
query_hash_alg: 'SHA512',
}
const token = sign(payload, secret_key)
const options = {
method: "GET",
url: server_url + "/v1/orders?" + query,
headers: {Authorization: `Bearer ${token}`},
json: body
}
request(options, (error, response, body) => {
if (error) throw new Error(error)
console.log(body)
})
}
//ORDER EXECUTE
order_execute(bd) {
const body = bd;
const query = queryEncode(body);
const hash = crypto.createHash('sha512');
const queryHash = hash.update(query, 'utf-8').digest('hex');
const payload = {
access_key: this.access_key,
nonce: uuidv4(),
query_hash: queryHash,
query_hash_alg: 'SHA512',
}
const token = sign(payload, this.secret_key);
const options = {
method: "POST",
url: `${this.server_url}/v1/orders`,
headers: {Authorization: `Bearer ${token}`},
json: body
};
return new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if (error) reject(error);
resolve(body);
});
});
}
//ORDER CANCEL
order_cancel(od_no) {
const body = {
uuid: od_no
};
const query = queryEncode(body);
const hash = crypto.createHash('sha512');
const queryHash = hash.update(query, 'utf-8').digest('hex');
const payload = {
access_key: access_key,
nonce: uuidv4(),
query_hash: queryHash,
query_hash_alg: 'SHA512',
};
const token = sign(payload, secret_key);
const options = {
method: "DELETE",
url: `${this.server_url}/v1/order?${query}`,
headers: {Authorization: `Bearer ${token}`},
json: body
};
return new Promise((resolve, reject) => {
request(options, (error, response, body) => {
if (error) reject(error);
resolve(body);
});
});
}
//PRICE_TICKER
price_ticker(obj){
const options = {method: 'GET', headers: {Accept: 'application/json'}};
return fetch(`${this.server_url}/v1/ticker?markets=${obj.text}`, options)
.then(response => response.json());
}
//check candle
min_check_candle(obj){
const options = {method: 'GET', headers: {Accept: 'application/json'}};
return fetch(`https://api.upbit.com/v1/candles/minutes/${obj.unit}?market=${obj.market}&count=${obj.count}`, options)
.then(response => response.json());
}
day_check_candle(obj){
const options = {method: 'GET', headers: {Accept: 'application/json'}};
return fetch(`https://api.upbit.com/v1/candles/days?market=${obj.market}&count=${obj.count}`, options)
.then(response => response.json());
}
}
module.exports = upbitClass;