Encrypted, ephemeral, private memos on atproto
1# @cistern/consumer
2
3Consumer client for retrieving, decrypting, and deleting Cistern memos.
4
5## Usage
6
7### Generate Keypair
8
9```typescript
10import { createConsumer, serializeKey } from "@cistern/consumer";
11
12const consumer = await createConsumer({
13 handle: "user.bsky.social",
14 appPassword: "xxxx-xxxx-xxxx-xxxx",
15});
16
17const keypair = await consumer.generateKeyPair();
18
19console.log(`Public key URI: ${keypair.publicKey}`);
20console.log(`Private key: ${serializeKey(keypair.privateKey)}`);
21```
22
23### Use Existing Keypair
24
25```typescript
26import { createConsumer } from "@cistern/consumer";
27
28const consumer = await createConsumer({
29 handle: "user.bsky.social",
30 appPassword: "xxxx-xxxx-xxxx-xxxx",
31 keypair: {
32 publicKey: "at://did:plc:abc123/app.cistern.pubkey/3jzfcijpj2z",
33 privateKey: "base64-encoded-private-key",
34 },
35});
36```
37
38### List Memos (Polling)
39
40```typescript
41for await (const memo of consumer.listMemos()) {
42 console.log(`[${memo.tid}] ${memo.text}`);
43 await consumer.deleteMemo(memo.tid);
44}
45```
46
47### Subscribe to Memos (Real-time)
48
49```typescript
50for await (const memo of consumer.subscribeToMemos()) {
51 console.log(`[${memo.tid}] ${memo.text}`);
52 await consumer.deleteMemo(memo.tid);
53}
54```