auron
Version:
Interact with your ATProto labeler from your terminal
40 lines (39 loc) • 1.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.saveEvents = exports.fetchEvents = void 0;
const events_1 = __importDefault(require("events"));
const loader_1 = require("../utils/loader");
const atproto_1 = require("../api/atproto");
const db_1 = require("../services/db");
const common_1 = require("@atproto/common");
const transformers_1 = require("../services/event/transformers");
const fetchEvents = async (options) => {
const emitter = new events_1.default();
const allEvents = await (0, loader_1.withLoader)(`Fetching events...`, async (updateMessage) => {
emitter.on("update", ({ nextCursor, eventCount, maxCount }) => {
updateMessage(`Fetched page with cursor: ${nextCursor}, total events: ${eventCount} out of ${maxCount}`);
});
const { cursor, events } = await (0, atproto_1.getEvents)(options, emitter);
updateMessage(`Fetched ${events.length} queue items. Cursor: ${cursor}`);
return events;
});
return allEvents;
};
exports.fetchEvents = fetchEvents;
const saveEvents = async (events) => {
await (0, loader_1.withLoader)(`Storing ${events.length} events...`, async (updateMessage) => {
if (events.length === 0) {
updateMessage("No events to store");
throw new Error("No events to store");
}
for (const chunk of (0, common_1.chunkArray)(events, 500)) {
await db_1.database.insertEvents(chunk.map(transformers_1.transformModEventToRow));
updateMessage(`Stored ${chunk.length} out of ${events.length} events in local database`);
}
updateMessage(`Stored ${events.length} events in local database`);
});
};
exports.saveEvents = saveEvents;