@renegade-fi/node
Version:
Node.js library for Renegade
85 lines • 2.94 kB
JavaScript
import { AuthType, getWalletId, RelayerWebsocket, WS_WALLET_ORDERS_ROUTE, } 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) {
const logger = this.config.getLogger("node:services:orderWebSocket");
const msg = error instanceof Error ? error.message : String(error);
logger.error(`Error processing WebSocket message: ${msg}`, {
walletId: this.walletId,
});
}
}
handleClose() {
const logger = this.config.getLogger("node:services:orderWebSocket");
logger.debug("WebSocket connection closed", { walletId: this.walletId });
this.ws = null;
}
handleError() {
const logger = this.config.getLogger("node:services:orderWebSocket");
logger.error("WebSocket connection error", { walletId: this.walletId });
this.ws = null;
}
}
//# sourceMappingURL=orderWebSocket.js.map