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
JavaScript
;
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;