@node-dlc/messaging
Version:
DLC Messaging Protocol
111 lines • 4.04 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OrderPositionInfo = void 0;
const bufio_1 = require("@node-dlc/bufio");
const MessageType_1 = require("../MessageType");
/**
* OrderPositionInfo message
*/
class OrderPositionInfo {
constructor() {
/**
* The type for OrderPositionInfo message
*/
this.type = OrderPositionInfo.type;
this.shiftForFees = 'neither';
this.fees = BigInt(0);
this.instrumentName = undefined;
this.contractSize = BigInt(0);
this.direction = 'neither';
this.price = BigInt(0); // Can be BTC or USD depending on the instrument
this.extraPrecision = 0;
}
/**
* Deserializes an OrderPositionInfo message
* @param buf
*/
static deserialize(buf) {
const instance = new OrderPositionInfo();
const reader = new bufio_1.BufferReader(buf);
reader.readBigSize(); // read type
instance.length = reader.readBigSize();
const encodedShiftForFees = reader.readUInt8();
if (encodedShiftForFees === 0) {
instance.shiftForFees = 'neither';
}
else if (encodedShiftForFees === 1) {
instance.shiftForFees = 'offeror';
}
else if (encodedShiftForFees === 2) {
instance.shiftForFees = 'acceptor';
}
else {
throw new Error(`Invalid shift for fees value: ${encodedShiftForFees}`);
}
instance.fees = reader.readUInt64BE();
if (!reader.eof) {
const instrumentNameLength = reader.readBigSize();
const instrumentName = reader.readBytes(Number(instrumentNameLength));
instance.instrumentName = instrumentName.toString();
instance.contractSize = reader.readUInt64BE();
const direction = reader.readUInt8();
if (direction === 0) {
instance.direction = 'neither';
}
else if (direction === 1) {
instance.direction = 'buy';
}
else if (direction === 2) {
instance.direction = 'sell';
}
else {
throw new Error(`Invalid direction value: ${direction}`);
}
instance.price = reader.readUInt64BE();
instance.extraPrecision = reader.readUInt16BE();
}
return instance;
}
/**
* Converts OrderPositionInfo to JSON
*/
toJSON() {
return {
type: this.type,
shiftForFees: this.shiftForFees,
fees: Number(this.fees),
instrumentName: this.instrumentName,
direction: this.direction,
price: Number(this.price),
extraPrecision: this.extraPrecision,
};
}
/**
* Serializes the OrderPositionInfo message into a Buffer
*/
serialize() {
const writer = new bufio_1.BufferWriter();
writer.writeBigSize(this.type);
const dataWriter = new bufio_1.BufferWriter();
dataWriter.writeUInt8(this.shiftForFees === 'neither'
? 0
: this.shiftForFees === 'offeror'
? 1
: 2);
dataWriter.writeUInt64BE(this.fees);
if (this.instrumentName) {
dataWriter.writeBigSize(this.instrumentName.length);
dataWriter.writeBytes(Buffer.from(this.instrumentName));
dataWriter.writeUInt64BE(this.contractSize);
dataWriter.writeUInt8(this.direction === 'neither' ? 0 : this.direction === 'buy' ? 1 : 2);
dataWriter.writeUInt64BE(this.price);
dataWriter.writeUInt16BE(this.extraPrecision);
}
writer.writeBigSize(dataWriter.size);
writer.writeBytes(dataWriter.toBuffer());
return writer.toBuffer();
}
}
exports.OrderPositionInfo = OrderPositionInfo;
OrderPositionInfo.type = MessageType_1.MessageType.OrderPositionInfo;
//# sourceMappingURL=OrderPositionInfo.js.map