@renegade-fi/node
Version:
Node.js library for Renegade
79 lines • 2.51 kB
JavaScript
import { AuthType, RelayerWebsocket, WS_WALLET_ORDERS_ROUTE, getWalletId, } from "@renegade-fi/core";
export function createOrderWebSocket(options) {
return new OrderWebSocketImpl(options);
}
class OrderWebSocketImpl {
constructor(options) {
Object.defineProperty(this, "config", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "ws", {
enumerable: true,
configurable: true,
writable: true,
value: null
});
Object.defineProperty(this, "callback", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
Object.defineProperty(this, "walletId", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.config = options.config;
this.callback = options.onUpdate;
this.walletId = getWalletId(this.config);
}
connect() {
if (this.ws)
return;
this.ws = new RelayerWebsocket({
config: this.config,
topic: WS_WALLET_ORDERS_ROUTE(this.walletId),
authType: AuthType.Wallet,
onmessage: (event) => this.handleMessage(event),
oncloseCallback: () => this.handleClose(),
onerrorCallback: () => this.handleError(),
});
this.ws.connect();
}
disconnect() {
this.ws?.close();
this.ws = null;
}
handleMessage(event) {
try {
const message = JSON.parse(event.data, (key, value) => {
if (typeof value === "number" && key !== "price") {
return BigInt(value);
}
return value;
});
if (message.topic === WS_WALLET_ORDERS_ROUTE(this.walletId) &&
message.event?.type === "OrderMetadataUpdated" &&
message.event?.order) {
this.callback(message.event.order);
}
}
catch (error) {
console.error("Error processing WebSocket message:", error);
}
}
handleClose() {
console.log("WebSocket connection closed");
this.ws = null;
}
handleError() {
console.error("WebSocket connection error");
this.ws = null;
}
}
//# sourceMappingURL=orderWebSocket.js.map