A decentralized music tracking and discovery platform built on AT Protocol 🎵
at main 39 lines 1.3 kB view raw
1import { isValidHandle } from "@atproto/syntax"; 2import { env } from "./env"; 3import { logger } from "logger"; 4import { ctx } from "context"; 5import chalk from "chalk"; 6 7export async function getDidAndHandle(): Promise<[string, string]> { 8 let handle = env.ROCKSKY_HANDLE || env.ROCKSKY_IDENTIFIER; 9 let did = env.ROCKSKY_HANDLE || env.ROCKSKY_IDENTIFIER; 10 11 if (!handle) { 12 console.error( 13 `❌ No AT Proto handle or DID provided, please provide one in the environment variables ${chalk.bold("ROCKSKY_HANDLE")} or ${chalk.bold("ROCKSKY_IDENTIFIER")}`, 14 ); 15 process.exit(1); 16 } 17 18 if (!env.ROCKSKY_PASSWORD) { 19 console.error( 20 `❌ No app password provided, please provide one in the environment variable ${chalk.bold("ROCKSKY_PASSWORD")}\nYou can create one at ${chalk.blueBright("https://bsky.app/settings/app-passwords")}`, 21 ); 22 process.exit(1); 23 } 24 25 if (handle.startsWith("did:plc:") || handle.startsWith("did:web:")) { 26 handle = await ctx.resolver.resolveDidToHandle(handle); 27 } 28 29 if (!isValidHandle(handle)) { 30 logger.error`❌ Invalid handle: ${handle}`; 31 process.exit(1); 32 } 33 34 if (!did.startsWith("did:plc:") && !did.startsWith("did:web:")) { 35 did = await ctx.baseIdResolver.handle.resolve(did); 36 } 37 38 return [did, handle]; 39}