UNPKG

@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
"use strict"; 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