forked from
rocksky.app/rocksky
A decentralized music tracking and discovery platform built on AT Protocol 🎵
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}