55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import { assert } from "https://deno.land/std@0.224.0/assert/mod.ts";
|
|
|
|
import {
|
|
NSchema,
|
|
NSecSigner,
|
|
NRelay1
|
|
} from '@nostrify/nostrify';
|
|
|
|
import * as nip19 from 'nostr-tools/nip19'
|
|
|
|
console.log("\nUse at your own risk!\n");
|
|
console.log("Considering trying it out with a throwaway nsec.");
|
|
console.log("All data will be public. Anything you upload is hard to delete.\n");
|
|
|
|
const path = prompt("Enter Instagram backup (absolute) path (unzip first): ");
|
|
const posts = JSON.parse(await Deno.readTextFile(path + "/content/posts_1.json"));
|
|
|
|
console.log("Number of posts:", posts.length);
|
|
|
|
console.log("You can try one picture at a time, duplicates are skipped the next run.");
|
|
|
|
const n = Number(prompt("How many do you want to upload?", posts.length));
|
|
|
|
if (n == 0) { Deno.exit(0); }
|
|
|
|
assert(n > 0);
|
|
assert(n <= posts.length);
|
|
|
|
const nsec_str = prompt("\nPlease enter your nsec:");
|
|
|
|
// Sanity check format
|
|
NSchema.bech32('nsec').parse(nsec_str);
|
|
|
|
// Actually parse nsec
|
|
const { type, data } = nip19.decode(nsec_str);
|
|
assert(type === 'nsec');
|
|
|
|
const signer = new NSecSigner(data);
|
|
const pubkey_hex = await signer.getPublicKey();
|
|
const npub = nip19.npubEncode(pubkey_hex);
|
|
console.log("\nYour npub: ", npub);
|
|
console.log("In hex format: ", pubkey_hex);
|
|
|
|
// TODO: get relays from profile and/or allow multiple
|
|
const relay_str = prompt("Pick a relay:");
|
|
const relay = new NRelay1(relay_str);
|
|
|
|
console.log("\nAs a sanity check, here's your last message (if any):");
|
|
|
|
for await (const msg of relay.req([{ kinds: [1], limit: 1, authors: [pubkey_hex] }])) {
|
|
if (msg[0] === 'EVENT') console.log(msg[2].content);
|
|
if (msg[0] === 'EOSE') break;
|
|
}
|
|
|
|
await relay.close()
|