@firefly-exchange/firefly-client
Version:
The Firefly Client Library allows traders to sign, create, retrieve and listen to orders on Firefly Exchange.
151 lines • 7.52 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
/* eslint-disable prettier/prettier */
/* eslint-disable no-undef */
const chai_1 = __importStar(require("chai"));
const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
const library_1 = require("@firefly-exchange/library");
const index_1 = require("../index");
const ethers_aws_kms_signer_1 = require("ethers-aws-kms-signer");
chai_1.default.use(chai_as_promised_1.default);
let client;
describe("FireflyClient", () => {
//* set environment from here
const network = index_1.Networks.TESTNET_ARBITRUM;
const symbol = "ETH-PERP";
let defaultLeverage = 3;
let buyPrice = 18000;
//@ts-ignore
let sellPrice = 20000;
let marketPrice = 0;
let indexPrice = 1600;
let testAcctPubAddr = '0x6967C92D93809CdC5158AB0E84A9919c9D0e4096'.toLowerCase();
before(() => __awaiter(void 0, void 0, void 0, function* () {
const kmsSigner = new ethers_aws_kms_signer_1.AwsKmsSigner({ region: 'ap-northeast-1', keyId: 'arn:aws:kms:ap-northxxxxxxx' });
client = new index_1.FireflyClient(true, network, kmsSigner);
yield client.init();
// TODO! uncomment when done testing specifically on BTC-PERP
// const allSymbols = await client.getMarketSymbols();
// get first symbol to run tests on
// if (allSymbols.data) {
// symbol = allSymbols.data[0];
// }
// TODO! uncomment above code when done testing specifically on BTC-PERP
console.log(`--- Trading symbol: ${symbol} ---`);
// get default leverage
defaultLeverage = yield client.getUserDefaultLeverage(symbol);
console.log(`- on leverage: ${defaultLeverage}`);
// market data
const marketData = yield client.getMarketData(symbol);
if (marketData.data && (0, library_1.bnStrToBaseNumber)(marketData.data.marketPrice) > 0) {
marketPrice = (0, library_1.bnStrToBaseNumber)(marketData.data.marketPrice);
indexPrice = (0, library_1.bnStrToBaseNumber)(marketData.data.indexPrice || "0");
const percentChange = 3 / 100; // 3%
buyPrice = Number((marketPrice - marketPrice * percentChange).toFixed(0));
sellPrice = Number((marketPrice + marketPrice * percentChange).toFixed(0));
console.log(`- market price: ${marketPrice}`);
console.log(`- index price: ${indexPrice}`);
}
}));
beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
const kmsSigner = new ethers_aws_kms_signer_1.AwsKmsSigner({ region: 'ap-northeast-1', keyId: 'arn:aws:kms:ap-northxxxxxxx' });
client = new index_1.FireflyClient(true, network, kmsSigner);
yield client.init();
client.addMarket(symbol);
}));
afterEach(() => {
client.sockets.close();
});
it("should initialize the client", () => __awaiter(void 0, void 0, void 0, function* () {
(0, chai_1.expect)(client).to.be.not.eq(undefined);
}));
it("should return public address of account", () => __awaiter(void 0, void 0, void 0, function* () {
(0, chai_1.expect)(client.getPublicAddress()).to.be.equal(testAcctPubAddr);
}));
describe("Create/Place/Post Orders", () => {
beforeEach(() => __awaiter(void 0, void 0, void 0, function* () {
client.addMarket(symbol);
}));
it("should throw error as DOT market is not added to client", () => __awaiter(void 0, void 0, void 0, function* () {
yield (0, chai_1.expect)(client.createSignedOrder({
symbol: "DOT-TEST",
price: 0,
quantity: 0.1,
side: library_1.ORDER_SIDE.SELL,
orderType: library_1.ORDER_TYPE.MARKET,
})).to.be.eventually.rejectedWith("Provided Market Symbol(DOT-TEST) is not added to client library");
}));
it("should create signed order", () => __awaiter(void 0, void 0, void 0, function* () {
const signedOrder = yield client.createSignedOrder({
symbol,
price: 0,
quantity: 0.1,
side: library_1.ORDER_SIDE.SELL,
orderType: library_1.ORDER_TYPE.MARKET,
});
(0, chai_1.expect)(signedOrder.leverage).to.be.equal(1);
(0, chai_1.expect)(signedOrder.price).to.be.equal(0);
(0, chai_1.expect)(signedOrder.quantity).to.be.equal(0.1);
}));
it("should create signed order and verify the signature", () => __awaiter(void 0, void 0, void 0, function* () {
const params = {
symbol,
price: 0,
quantity: 0.1,
side: library_1.ORDER_SIDE.SELL,
orderType: library_1.ORDER_TYPE.MARKET,
};
const signedOrder = yield client.createSignedOrder(params);
const isValid = client.verifyOrderSignature(signedOrder);
(0, chai_1.expect)(isValid).to.be.equal(true);
}));
it("should post a LIMIT order on exchange", () => __awaiter(void 0, void 0, void 0, function* () {
const response = yield client.postOrder({
symbol,
price: buyPrice,
quantity: 0.1,
side: library_1.ORDER_SIDE.BUY,
leverage: defaultLeverage,
orderType: library_1.ORDER_TYPE.LIMIT,
clientId: "Test limit order",
});
(0, chai_1.expect)(response.ok).to.be.equal(true);
}));
});
});
//# sourceMappingURL=fireflyClientKMS.test.js.map
;