This commit is contained in:
Siddharth Singh 2024-06-30 16:31:02 +05:30
parent 9f3f6917d3
commit 480f4ed370
No known key found for this signature in database

View file

@ -5,8 +5,7 @@
import { nip19 } from 'npm:nostr-tools@^2.7.0';
import { DittoDB } from '@/db/DittoDB.ts';
import { EventsDB } from '@/storages/EventsDB.ts';
import { NSchema, NRelay1, NostrEvent } from '@nostrify/nostrify';
import { NostrEvent, NRelay1, NSchema } from '@nostrify/nostrify';
const kysely = await DittoDB.getInstance();
const eventsDB = new EventsDB(kysely);
@ -16,7 +15,12 @@ interface ImportEventsOpts {
}
type DoEvent = (evt: NostrEvent) => void | Promise<void>;
const importUsers = async (authors: string[], relays: string[], opts?: Partial<ImportEventsOpts>, doEvent: DoEvent = async (evt: NostrEvent) => await eventsDB.event(evt)) => {
const importUsers = async (
authors: string[],
relays: string[],
opts?: Partial<ImportEventsOpts>,
doEvent: DoEvent = async (evt: NostrEvent) => await eventsDB.event(evt),
) => {
// Kind 0s + follow lists.
const profiles: Record<string, Record<number, NostrEvent>> = {};
// Kind 1s.
@ -24,7 +28,7 @@ const importUsers = async (authors: string[], relays: string[], opts?: Partial<I
const { profilesOnly = false } = opts || {};
await Promise.all(relays.map(async relay => {
await Promise.all(relays.map(async (relay) => {
if (!relay.startsWith('wss://')) console.error(`Invalid relay url ${relay}`);
const conn = new NRelay1(relay);
const kinds = [0, 3];
@ -32,7 +36,7 @@ const importUsers = async (authors: string[], relays: string[], opts?: Partial<I
const matched = await conn.query([{ kinds, authors, limit: 1000 }]);
await conn.close();
await Promise.all(
matched.map(async event => {
matched.map(async (event) => {
const { kind, pubkey } = event;
if (kind === 1 && !notes.has(event.id)) {
// add the event to eventsDB only if it has not been found already.
@ -45,10 +49,9 @@ const importUsers = async (authors: string[], relays: string[], opts?: Partial<I
const existing = profiles[pubkey][kind];
if (existing?.created_at > event.created_at) return;
else profiles[pubkey][kind] = event;
})
)
}))
}),
);
}));
for (const user in profiles) {
const profile = profiles[user];
@ -56,7 +59,7 @@ const importUsers = async (authors: string[], relays: string[], opts?: Partial<I
await doEvent(profile[kind]);
}
}
}
};
if (import.meta.main) {
if (!Deno.args.length) {
@ -73,7 +76,7 @@ if (import.meta.main) {
for (const arg of Deno.args) {
if (arg.startsWith('-')) {
if (optionsEnd) {
console.error("Option encountered after end of options section.");
console.error('Option encountered after end of options section.');
showUsage();
}
switch (arg) {
@ -83,8 +86,7 @@ if (import.meta.main) {
opts.profilesOnly = true;
break;
}
}
else if (arg.startsWith('npub1')) {
} else if (arg.startsWith('npub1')) {
optionsEnd = true;
if (relaySectionBegun) {
@ -97,8 +99,7 @@ if (import.meta.main) {
continue;
}
pubkeys.push(decoded);
}
else {
} else {
relaySectionBegun = true;
if (!arg.startsWith('wss://')) {
console.error(`invalid relay url ${arg}, skipping...`);
@ -113,7 +114,7 @@ if (import.meta.main) {
function showHelp() {
console.info('ditto - db:import');
console.info('Import users\' posts and kind 0s from a given set of relays.\n');
console.info("Import users' posts and kind 0s from a given set of relays.\n");
showUsage();
console.info(`
OPTIONS:
@ -124,6 +125,8 @@ OPTIONS:
}
function showUsage() {
console.info('Usage: deno task db:import [options] npub1xxxxxx[ npub1yyyyyyy]...' +
' wss://first.relay[ second.relay]...');
console.info(
'Usage: deno task db:import [options] npub1xxxxxx[ npub1yyyyyyy]...' +
' wss://first.relay[ second.relay]...',
);
}