UNPKG

client-aftermath-ts-sdk

Version:
168 lines (167 loc) 8.26 kB
"use strict"; 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}`;