whales-pre-market-aptos-sdk
Version:
TypeScript SDK for Whales Pre-Market on Aptos blockchain
306 lines (305 loc) • 14.7 kB
JavaScript
"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(),
discount_verifier_pubkey: ts_sdk_1.AccountAddress.fromStrict(deserializer.deserializeFixedBytes(32)).toString(),
pledge_rate: deserializer.deserializeU64().toString(),
fee_settle: deserializer.deserializeU64().toString(),
fee_refund: 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,
};
}
exTokenAddedEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
sender: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
token: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
exTokenRemovedEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
sender: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
token: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
newTokenEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
token_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
token_index: deserializer.deserializeU64().toString(),
settle_duration: deserializer.deserializeU64().toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
newOfferEvent(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(),
offer_type: deserializer.deserializeU8(),
token_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
token_index: deserializer.deserializeU64().toString(),
amount: deserializer.deserializeU64().toString(),
value: deserializer.deserializeU64().toString(),
collateral: deserializer.deserializeU64().toString(),
full_match: deserializer.deserializeBool(),
doer: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
ex_token: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
newOrderEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
order_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
offer_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
amount: deserializer.deserializeU64().toString(),
seller: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
buyer: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
settleFilledEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
order_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
value: deserializer.deserializeU64().toString(),
fee: deserializer.deserializeU64().toString(),
doer: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
settleCancelledEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
order_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
value: deserializer.deserializeU64().toString(),
fee: deserializer.deserializeU64().toString(),
doer: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
cancelOfferEvent(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(),
refund_value: deserializer.deserializeU64().toString(),
refund_fee: deserializer.deserializeU64().toString(),
doer: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
closeOfferEvent(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(),
refund_amount: deserializer.deserializeU64().toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
forceCancelOrderEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
order_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
doer: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
updateTokenSettleDurationEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
token_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
token_index: deserializer.deserializeU64().toString(),
old_value: deserializer.deserializeU64().toString(),
new_value: deserializer.deserializeU64().toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
tokenToSettlePhaseEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
token_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
token_index: deserializer.deserializeU64().toString(),
token: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
settle_rate: deserializer.deserializeU64().toString(),
settle_time: deserializer.deserializeU64().toString(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
tokenForceCancelSettlePhaseEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
token_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
token_index: deserializer.deserializeU64().toString(),
status: deserializer.deserializeU8(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
tokenStatusToggledEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
token_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
token_index: deserializer.deserializeU64().toString(),
old_status: deserializer.deserializeU8(),
new_status: deserializer.deserializeU8(),
block_height: event.block_height,
transaction_version: event.transaction_version,
};
}
tokenCancelledEvent(event) {
const deserializer = ts_sdk_1.Deserializer.fromHex(event.data);
return {
event_name: event.event_name,
token_id: ts_sdk_1.AccountAddress.deserialize(deserializer).toString(),
token_index: deserializer.deserializeU64().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()}::event_config::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(versionGt = 0, limit = 50, versionEq = null) {
if (!this.graphqlClient) {
throw new Error("GraphQL client not initialized");
}
const events = await this.graphqlClient.getEvents(versionGt.toString(), limit, versionEq?.toString() || null);
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.ExTokenAddedEvent:
return this.eventDeserializer.exTokenAddedEvent(event);
case type_1.EventType.ExTokenRemovedEvent:
return this.eventDeserializer.exTokenRemovedEvent(event);
case type_1.EventType.NewTokenEvent:
return this.eventDeserializer.newTokenEvent(event);
case type_1.EventType.NewOfferEvent:
return this.eventDeserializer.newOfferEvent(event);
case type_1.EventType.NewOrderEvent:
return this.eventDeserializer.newOrderEvent(event);
case type_1.EventType.SettleFilledEvent:
return this.eventDeserializer.settleFilledEvent(event);
case type_1.EventType.SettleCancelledEvent:
return this.eventDeserializer.settleCancelledEvent(event);
case type_1.EventType.CancelOfferEvent:
return this.eventDeserializer.cancelOfferEvent(event);
case type_1.EventType.CloseOfferEvent:
return this.eventDeserializer.closeOfferEvent(event);
case type_1.EventType.ForceCancelOrderEvent:
return this.eventDeserializer.forceCancelOrderEvent(event);
case type_1.EventType.UpdateTokenSettleDurationEvent:
return this.eventDeserializer.updateTokenSettleDurationEvent(event);
case type_1.EventType.TokenToSettlePhaseEvent:
return this.eventDeserializer.tokenToSettlePhaseEvent(event);
case type_1.EventType.TokenForceCancelSettlePhaseEvent:
return this.eventDeserializer.tokenForceCancelSettlePhaseEvent(event);
case type_1.EventType.TokenStatusToggledEvent:
return this.eventDeserializer.tokenStatusToggledEvent(event);
case type_1.EventType.TokenCancelledEvent:
return this.eventDeserializer.tokenCancelledEvent(event);
default:
console.log(`Unknown event type: ${event.event_name}`);
return null;
}
}
}
exports.EventCrawler = EventCrawler;