client-aftermath-ts-sdk
Version:
Client Aftermath TypeScript SDK
168 lines (167 loc) • 8.26 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventsApiHelpers = void 0;
const dayjs_1 = __importDefault(require("dayjs"));
class EventsApiHelpers {
// =========================================================================
// Constructor
// =========================================================================
constructor(Provider) {
this.Provider = Provider;
// =========================================================================
// Public Methods
// =========================================================================
// =========================================================================
// Fetching
// =========================================================================
// TODO: make this filter by looking ONLY at all relevant AF packages
// TODO: move to wallet package ?
this.fetchSubscribeToUserEvents = (inputs) => __awaiter(this, void 0, void 0, function* () {
const { address, onEvent } = inputs;
const unsubscribe = yield this.Provider.provider.subscribeEvent({
filter: {
Sender: address,
},
onMessage: onEvent,
});
return unsubscribe;
});
this.fetchCastEventsWithCursor = (inputs) => __awaiter(this, void 0, void 0, function* () {
var _b;
const { query, eventFromEventOnChain, cursor, limit } = inputs;
const fetchedEvents = yield this.Provider.provider.queryEvents({
query,
cursor: cursor
? Object.assign(Object.assign({}, cursor), { eventSeq: cursor === null || cursor === void 0 ? void 0 : cursor.eventSeq.toString() }) : undefined,
limit, // defaultlimit ?
});
const eventsOnChain = fetchedEvents.data;
const events = eventsOnChain.map((event) => eventFromEventOnChain(event));
const nextCursor = (_b = fetchedEvents.nextCursor) !== null && _b !== void 0 ? _b : null;
return { events, nextCursor };
});
// TODO: make this function use timestamp passing as one of event filter args
this.fetchEventsWithinTime = (inputs) => __awaiter(this, void 0, void 0, function* () {
const { fetchEventsFunc, timeUnit, time, limitStepSize } = inputs;
let loopCount = 0;
let eventsWithinTime = [];
let cursor = undefined;
do {
const eventsWithCursor = yield fetchEventsFunc({
cursor,
limit: limitStepSize !== null && limitStepSize !== void 0 ? limitStepSize : EventsApiHelpers.constants.defaultLimitStepSize,
});
const events = eventsWithCursor.events;
const now = Date.now();
const endIndex = events.findIndex((event) => {
if (event.timestamp === undefined)
return false;
const eventDate = dayjs_1.default.unix(event.timestamp / 1000);
return (0, dayjs_1.default)(now).diff(eventDate, timeUnit, true) > time;
});
eventsWithinTime = [
...eventsWithinTime,
...(endIndex < 0 ? events : events.slice(0, endIndex)),
];
if (events.length === 0 ||
// events.length < limitStepSize ||
eventsWithCursor.nextCursor === null ||
endIndex >= 0)
return eventsWithinTime;
cursor = eventsWithCursor.nextCursor;
loopCount += 1;
if (loopCount >= EventsApiHelpers.constants.maxLoops) {
return eventsWithinTime;
}
} while (true);
});
this.fetchAllEvents = (inputs) => __awaiter(this, void 0, void 0, function* () {
const { fetchEventsFunc, limitStepSize } = inputs;
let allEvents = [];
let cursor = undefined;
do {
const eventsWithCursor = yield fetchEventsFunc({
cursor,
limit: limitStepSize !== null && limitStepSize !== void 0 ? limitStepSize : EventsApiHelpers.constants.defaultLimitStepSize,
});
const events = eventsWithCursor.events;
allEvents = [...allEvents, ...events];
if (events.length === 0 || eventsWithCursor.nextCursor === null)
return allEvents;
cursor = eventsWithCursor.nextCursor;
} while (true);
});
}
}
exports.EventsApiHelpers = EventsApiHelpers;
_a = EventsApiHelpers;
// =========================================================================
// Private Static Constants
// =========================================================================
EventsApiHelpers.constants = {
defaultLimitStepSize: 256,
maxLoops: 20,
};
// =========================================================================
// Static Methods
// =========================================================================
// =========================================================================
// Helpers
// =========================================================================
EventsApiHelpers.suiEventOfTypeOrUndefined = (event, eventType) =>
// event.type === (typeof eventType === "string" ? eventType : eventType())
event.type.includes(typeof eventType === "string" ? eventType : eventType())
? event
: undefined;
EventsApiHelpers.castEventOfTypeOrUndefined = (event, eventType, castFunction, exactMatch) => {
if (exactMatch
? event.type !==
(typeof eventType === "string" ? eventType : eventType())
: !event.type.includes(typeof eventType === "string" ? eventType : eventType()))
return;
const castedEvent = castFunction(event);
return castedEvent;
};
EventsApiHelpers.findCastEventsOrUndefined = (inputs) => {
const { events, eventType, castFunction } = inputs;
const foundEvents = events.filter((event) => EventsApiHelpers.suiEventOfTypeOrUndefined(event, eventType) !==
undefined);
const castedEvents = foundEvents.map((event) => castFunction(event));
return castedEvents;
};
EventsApiHelpers.findCastEventOrUndefined = (inputs) => {
const events = _a.findCastEventsOrUndefined(inputs);
if (events.length <= 0)
return;
return events[0];
};
EventsApiHelpers.findCastEventInTransactionOrUndefined = (transaction, eventType, castFunction) => {
var _b;
return _a.findCastEventOrUndefined({
events: (_b = transaction.events) !== null && _b !== void 0 ? _b : [],
eventType,
castFunction,
});
};
EventsApiHelpers.findCastEventInTransactionsOrUndefined = (transactions, eventType, castFunction) => {
if (transactions.length === 0)
return;
const foundEvent = transactions
.map((transaction) => EventsApiHelpers.findCastEventInTransactionOrUndefined(transaction, eventType, castFunction))
.find((event) => event !== undefined);
return foundEvent;
};
EventsApiHelpers.createEventType = (packageAddress, packageName, eventType) => `${packageAddress}::${packageName}::${eventType}`;