From 13407fbd7be35da7a652435223760edb0ab7922d Mon Sep 17 00:00:00 2001 From: Graham Barber Date: Sun, 9 Nov 2025 18:36:43 +0000 Subject: [PATCH] refactor(consumer): extract requirement generation to shared module --- deno.lock | 1 + packages/consumer/mod.ts | 19 ++++--------------- packages/consumer/types.ts | 14 +++----------- packages/shared/deno.jsonc | 1 + packages/shared/mod.ts | 2 ++ packages/shared/produce-requirements.ts | 22 ++++++++++++++++++++++ packages/shared/resolve-did.ts | 9 +-------- packages/shared/types.ts | 21 +++++++++++++++++++++ 8 files changed, 55 insertions(+), 34 deletions(-) create mode 100644 packages/shared/produce-requirements.ts create mode 100644 packages/shared/types.ts diff --git a/deno.lock b/deno.lock index b921d32..8c1e388 100644 --- a/deno.lock +++ b/deno.lock @@ -183,6 +183,7 @@ }, "packages/shared": { "dependencies": [ + "npm:@atcute/client@^4.0.5", "npm:@atcute/lexicons@^1.2.2" ] } diff --git a/packages/consumer/mod.ts b/packages/consumer/mod.ts index 0c8f022..2d0bc6c 100644 --- a/packages/consumer/mod.ts +++ b/packages/consumer/mod.ts @@ -1,25 +1,14 @@ -import { Client, CredentialManager } from "@atcute/client"; -import { resolveMiniDoc } from "@cistern/shared"; +import type { Client, CredentialManager } from "@atcute/client"; +import { produceRequirements } from "@cistern/shared"; import type { Did } from "@atcute/lexicons/syntax"; import type { ConsumerOptions, ConsumerParams, LocalKeyPair } from "./types.ts"; export async function createConsumer( options: ConsumerOptions, ): Promise { - const miniDoc = await resolveMiniDoc(options.handle); - const manager = new CredentialManager({ service: miniDoc.pds }); - const rpc = new Client({ handler: manager }); - await manager.login({ - identifier: miniDoc.handle, - password: options.appPassword, - }); + const reqs = await produceRequirements(options); - return new Consumer({ - miniDoc, - manager, - rpc, - options, - }); + return new Consumer(reqs); } /** diff --git a/packages/consumer/types.ts b/packages/consumer/types.ts index ceb3110..1758e68 100644 --- a/packages/consumer/types.ts +++ b/packages/consumer/types.ts @@ -1,5 +1,4 @@ -import type { Client, CredentialManager } from "@atcute/client"; -import type { MiniDoc } from "@cistern/shared"; +import type { BaseClientOptions, ClientRequirements } from "@cistern/shared"; import type { AppCisternLexiconPubkey } from "@cistern/lexicon"; export interface LocalKeyPair { @@ -7,15 +6,8 @@ export interface LocalKeyPair { publicKey: AppCisternLexiconPubkey.Main; } -export interface ConsumerOptions { - handle: string; - appPassword: string; +export interface ConsumerOptions extends BaseClientOptions { keypair?: LocalKeyPair; } -export interface ConsumerParams { - miniDoc: MiniDoc; - manager: CredentialManager; - rpc: Client; - options: ConsumerOptions; -} +export type ConsumerParams = ClientRequirements; diff --git a/packages/shared/deno.jsonc b/packages/shared/deno.jsonc index 49dab39..b747401 100644 --- a/packages/shared/deno.jsonc +++ b/packages/shared/deno.jsonc @@ -4,6 +4,7 @@ ".": "./mod.ts" }, "imports": { + "@atcute/client": "npm:@atcute/client@^4.0.5", "@atcute/lexicons": "npm:@atcute/lexicons@^1.2.2" } } diff --git a/packages/shared/mod.ts b/packages/shared/mod.ts index b8509f8..c589def 100644 --- a/packages/shared/mod.ts +++ b/packages/shared/mod.ts @@ -1 +1,3 @@ export * from "./resolve-did.ts"; +export * from "./produce-requirements.ts"; +export * from "./types.ts"; diff --git a/packages/shared/produce-requirements.ts b/packages/shared/produce-requirements.ts new file mode 100644 index 0000000..7f860af --- /dev/null +++ b/packages/shared/produce-requirements.ts @@ -0,0 +1,22 @@ +import { Client, CredentialManager } from "@atcute/client"; +import { resolveMiniDoc } from "./resolve-did.ts"; +import type { BaseClientOptions, ClientRequirements } from "./types.ts"; + +export async function produceRequirements( + options: Options, +): Promise> { + const miniDoc = await resolveMiniDoc(options.handle); + const manager = new CredentialManager({ service: miniDoc.pds }); + const rpc = new Client({ handler: manager }); + await manager.login({ + identifier: miniDoc.handle, + password: options.appPassword, + }); + + return { + miniDoc, + manager, + rpc, + options, + }; +} diff --git a/packages/shared/resolve-did.ts b/packages/shared/resolve-did.ts index f911b4f..92e42a5 100644 --- a/packages/shared/resolve-did.ts +++ b/packages/shared/resolve-did.ts @@ -1,11 +1,4 @@ -import type { Did, Handle } from "@atcute/lexicons"; - -export interface MiniDoc { - did: Did; - handle: Handle; - pds: string; - signing_key: string; -} +import type { MiniDoc } from "./types.ts"; export async function resolveMiniDoc( handle: string, diff --git a/packages/shared/types.ts b/packages/shared/types.ts new file mode 100644 index 0000000..e26359e --- /dev/null +++ b/packages/shared/types.ts @@ -0,0 +1,21 @@ +import type { Did, Handle } from "@atcute/lexicons"; +import type { Client, CredentialManager } from "@atcute/client"; + +export interface MiniDoc { + did: Did; + handle: Handle; + pds: string; + signing_key: string; +} + +export interface BaseClientOptions { + handle: Handle; + appPassword: string; +} + +export interface ClientRequirements { + miniDoc: MiniDoc; + manager: CredentialManager; + rpc: Client; + options: Options; +} -- 2.51.2