Encrypted, ephemeral, private memos on atproto

refactor(consumer): extract requirement generation to shared module

graham.systems 13407fbd 3d1b2761

verified
+1
deno.lock
··· 183 183 }, 184 184 "packages/shared": { 185 185 "dependencies": [ 186 + "npm:@atcute/client@^4.0.5", 186 187 "npm:@atcute/lexicons@^1.2.2" 187 188 ] 188 189 }
+4 -15
packages/consumer/mod.ts
··· 1 - import { Client, CredentialManager } from "@atcute/client"; 2 - import { resolveMiniDoc } from "@cistern/shared"; 1 + import type { Client, CredentialManager } from "@atcute/client"; 2 + import { produceRequirements } from "@cistern/shared"; 3 3 import type { Did } from "@atcute/lexicons/syntax"; 4 4 import type { ConsumerOptions, ConsumerParams, LocalKeyPair } from "./types.ts"; 5 5 6 6 export async function createConsumer( 7 7 options: ConsumerOptions, 8 8 ): Promise<Consumer> { 9 - const miniDoc = await resolveMiniDoc(options.handle); 10 - const manager = new CredentialManager({ service: miniDoc.pds }); 11 - const rpc = new Client({ handler: manager }); 12 - await manager.login({ 13 - identifier: miniDoc.handle, 14 - password: options.appPassword, 15 - }); 9 + const reqs = await produceRequirements(options); 16 10 17 - return new Consumer({ 18 - miniDoc, 19 - manager, 20 - rpc, 21 - options, 22 - }); 11 + return new Consumer(reqs); 23 12 } 24 13 25 14 /**
+3 -11
packages/consumer/types.ts
··· 1 - import type { Client, CredentialManager } from "@atcute/client"; 2 - import type { MiniDoc } from "@cistern/shared"; 1 + import type { BaseClientOptions, ClientRequirements } from "@cistern/shared"; 3 2 import type { AppCisternLexiconPubkey } from "@cistern/lexicon"; 4 3 5 4 export interface LocalKeyPair { ··· 7 6 publicKey: AppCisternLexiconPubkey.Main; 8 7 } 9 8 10 - export interface ConsumerOptions { 11 - handle: string; 12 - appPassword: string; 9 + export interface ConsumerOptions extends BaseClientOptions { 13 10 keypair?: LocalKeyPair; 14 11 } 15 12 16 - export interface ConsumerParams { 17 - miniDoc: MiniDoc; 18 - manager: CredentialManager; 19 - rpc: Client; 20 - options: ConsumerOptions; 21 - } 13 + export type ConsumerParams = ClientRequirements<ConsumerOptions>;
+1
packages/shared/deno.jsonc
··· 4 4 ".": "./mod.ts" 5 5 }, 6 6 "imports": { 7 + "@atcute/client": "npm:@atcute/client@^4.0.5", 7 8 "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.2" 8 9 } 9 10 }
+2
packages/shared/mod.ts
··· 1 1 export * from "./resolve-did.ts"; 2 + export * from "./produce-requirements.ts"; 3 + export * from "./types.ts";
+22
packages/shared/produce-requirements.ts
··· 1 + import { Client, CredentialManager } from "@atcute/client"; 2 + import { resolveMiniDoc } from "./resolve-did.ts"; 3 + import type { BaseClientOptions, ClientRequirements } from "./types.ts"; 4 + 5 + export async function produceRequirements<Options extends BaseClientOptions>( 6 + options: Options, 7 + ): Promise<ClientRequirements<Options>> { 8 + const miniDoc = await resolveMiniDoc(options.handle); 9 + const manager = new CredentialManager({ service: miniDoc.pds }); 10 + const rpc = new Client({ handler: manager }); 11 + await manager.login({ 12 + identifier: miniDoc.handle, 13 + password: options.appPassword, 14 + }); 15 + 16 + return { 17 + miniDoc, 18 + manager, 19 + rpc, 20 + options, 21 + }; 22 + }
+1 -8
packages/shared/resolve-did.ts
··· 1 - import type { Did, Handle } from "@atcute/lexicons"; 2 - 3 - export interface MiniDoc { 4 - did: Did; 5 - handle: Handle; 6 - pds: string; 7 - signing_key: string; 8 - } 1 + import type { MiniDoc } from "./types.ts"; 9 2 10 3 export async function resolveMiniDoc( 11 4 handle: string,
+21
packages/shared/types.ts
··· 1 + import type { Did, Handle } from "@atcute/lexicons"; 2 + import type { Client, CredentialManager } from "@atcute/client"; 3 + 4 + export interface MiniDoc { 5 + did: Did; 6 + handle: Handle; 7 + pds: string; 8 + signing_key: string; 9 + } 10 + 11 + export interface BaseClientOptions { 12 + handle: Handle; 13 + appPassword: string; 14 + } 15 + 16 + export interface ClientRequirements<Options extends BaseClientOptions> { 17 + miniDoc: MiniDoc; 18 + manager: CredentialManager; 19 + rpc: Client; 20 + options: Options; 21 + }