UNPKG

whales-otc-pre-market-aptos-sdk

Version:

TypeScript SDK for Whales OTC Pre-Market trading on Aptos blockchain

156 lines (155 loc) 7.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventCrawler = exports.EventDeserializer = void 0; const ts_sdk_1 = require("@aptos-labs/ts-sdk"); const type_1 = require("./type"); const graphqlClient_1 = require("./graphqlClient"); class EventDeserializer { configUpdatedEvent(event) { const deserializer = ts_sdk_1.Deserializer.fromHex(event.data); return { event_name: event.event_name, sender: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), fee_percent: deserializer.deserializeU64().toString(), fee_wallet: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), block_height: event.block_height, transaction_version: event.transaction_version, }; } roleAddedEvent(event) { const deserializer = ts_sdk_1.Deserializer.fromHex(event.data); return { event_name: event.event_name, sender: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), user: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), role: deserializer.deserializeU8(), block_height: event.block_height, transaction_version: event.transaction_version, }; } roleRemovedEvent(event) { const deserializer = ts_sdk_1.Deserializer.fromHex(event.data); return { event_name: event.event_name, sender: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), user: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), role: deserializer.deserializeU8(), block_height: event.block_height, transaction_version: event.transaction_version, }; } otcOfferCreatedEvent(event) { const deserializer = ts_sdk_1.Deserializer.fromHex(event.data); return { event_name: event.event_name, offer_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), order_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), token_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), owner: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), ex_token: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), value: deserializer.deserializeU64().toString(), deadline: deserializer.deserializeU64().toString(), is_buyer: deserializer.deserializeBool(), status: deserializer.deserializeU8(), block_height: event.block_height, transaction_version: event.transaction_version, }; } otcOfferFilledEvent(event) { const deserializer = ts_sdk_1.Deserializer.fromHex(event.data); return { event_name: event.event_name, offer_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), buyer: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), value: deserializer.deserializeU64().toString(), status: deserializer.deserializeU8(), block_height: event.block_height, transaction_version: event.transaction_version, }; } otcOfferUpdatedEvent(event) { const deserializer = ts_sdk_1.Deserializer.fromHex(event.data); return { event_name: event.event_name, offer_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), buyer: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), new_price: deserializer.deserializeU64().toString(), new_deadline: deserializer.deserializeU64().toString(), status: deserializer.deserializeU8(), block_height: event.block_height, transaction_version: event.transaction_version, }; } otcOfferCancelledEvent(event) { const deserializer = ts_sdk_1.Deserializer.fromHex(event.data); return { event_name: event.event_name, offer_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(), status: deserializer.deserializeU8(), block_height: event.block_height, transaction_version: event.transaction_version, }; } } exports.EventDeserializer = EventDeserializer; class EventCrawler { constructor(aptos, packageId, graphQlConfig) { this.graphqlClient = null; this.aptos = aptos; this.packageId = packageId; this.eventDeserializer = new EventDeserializer(); if (graphQlConfig) { this.graphqlClient = new graphqlClient_1.GraphQLClient(graphQlConfig); } } async getEvents(offset, limit = 25) { const events = await this.aptos.event.getModuleEventsByEventType({ eventType: `${ts_sdk_1.AccountAddress.fromStringStrict(this.packageId).toStringShort()}::otc_pre_events::EventWrapper`, options: { offset, limit, }, }); const parsedEvents = events.map((event) => this.parseEvent({ ...event.data, block_height: event.transaction_block_height, transaction_version: event.transaction_version, })); return parsedEvents.filter((event) => event !== null); } async getEventsV2(version = 0, limit = 50) { if (!this.graphqlClient) { throw new Error("GraphQL client not initialized"); } const events = await this.graphqlClient.getEvents(version.toString(), limit); const parsedEvents = events.map((event) => this.parseEvent({ event_name: event.event_name, data: event.data, block_height: Number(event.block_height), transaction_version: Number(event.version), })); return parsedEvents.filter((event) => event !== null); } parseEvent(event) { switch (event.event_name) { case type_1.EventType.ConfigUpdatedEvent: return this.eventDeserializer.configUpdatedEvent(event); case type_1.EventType.RoleAddedEvent: return this.eventDeserializer.roleAddedEvent(event); case type_1.EventType.RoleRemovedEvent: return this.eventDeserializer.roleRemovedEvent(event); case type_1.EventType.OtcOfferCreatedEvent: return this.eventDeserializer.otcOfferCreatedEvent(event); case type_1.EventType.OtcOfferFilledEvent: return this.eventDeserializer.otcOfferFilledEvent(event); case type_1.EventType.OtcOfferUpdatedEvent: return this.eventDeserializer.otcOfferUpdatedEvent(event); case type_1.EventType.OtcOfferCancelledEvent: return this.eventDeserializer.otcOfferCancelledEvent(event); default: console.log(`Unknown event type: ${event.event_name}`); return null; } } } exports.EventCrawler = EventCrawler;