@cello-protocol/daemon 0.0.229 → 0.0.231

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/channel-admin-lookup.d.ts +54 -0
  2. package/dist/channel-admin-lookup.d.ts.map +1 -0
  3. package/dist/channel-admin-lookup.js +122 -0
  4. package/dist/channel-admin-lookup.js.map +1 -0
  5. package/dist/channel-collect-tick.d.ts +36 -0
  6. package/dist/channel-collect-tick.d.ts.map +1 -0
  7. package/dist/channel-collect-tick.js +133 -0
  8. package/dist/channel-collect-tick.js.map +1 -0
  9. package/dist/channel-collector.d.ts +99 -0
  10. package/dist/channel-collector.d.ts.map +1 -0
  11. package/dist/channel-collector.js +249 -0
  12. package/dist/channel-collector.js.map +1 -0
  13. package/dist/channel-config-store.d.ts +36 -0
  14. package/dist/channel-config-store.d.ts.map +1 -0
  15. package/dist/channel-config-store.js +84 -0
  16. package/dist/channel-config-store.js.map +1 -0
  17. package/dist/channel-inbox-store.d.ts +46 -0
  18. package/dist/channel-inbox-store.d.ts.map +1 -0
  19. package/dist/channel-inbox-store.js +88 -0
  20. package/dist/channel-inbox-store.js.map +1 -0
  21. package/dist/channel-join-exchange.d.ts +87 -0
  22. package/dist/channel-join-exchange.d.ts.map +1 -0
  23. package/dist/channel-join-exchange.js +289 -0
  24. package/dist/channel-join-exchange.js.map +1 -0
  25. package/dist/channel-log-store.d.ts +14 -0
  26. package/dist/channel-log-store.d.ts.map +1 -1
  27. package/dist/channel-log-store.js +58 -0
  28. package/dist/channel-log-store.js.map +1 -1
  29. package/dist/channel-membership-store.d.ts +118 -0
  30. package/dist/channel-membership-store.d.ts.map +1 -0
  31. package/dist/channel-membership-store.js +226 -0
  32. package/dist/channel-membership-store.js.map +1 -0
  33. package/dist/channel-membership-wiring.d.ts +90 -0
  34. package/dist/channel-membership-wiring.d.ts.map +1 -0
  35. package/dist/channel-membership-wiring.js +387 -0
  36. package/dist/channel-membership-wiring.js.map +1 -0
  37. package/dist/channel-publish-handlers.d.ts +42 -0
  38. package/dist/channel-publish-handlers.d.ts.map +1 -0
  39. package/dist/channel-publish-handlers.js +212 -0
  40. package/dist/channel-publish-handlers.js.map +1 -0
  41. package/dist/channel-publish-wiring.d.ts +52 -0
  42. package/dist/channel-publish-wiring.d.ts.map +1 -0
  43. package/dist/channel-publish-wiring.js +143 -0
  44. package/dist/channel-publish-wiring.js.map +1 -0
  45. package/dist/channel-publisher.d.ts +221 -0
  46. package/dist/channel-publisher.d.ts.map +1 -0
  47. package/dist/channel-publisher.js +430 -0
  48. package/dist/channel-publisher.js.map +1 -0
  49. package/dist/channel-relay-client.d.ts +88 -0
  50. package/dist/channel-relay-client.d.ts.map +1 -0
  51. package/dist/channel-relay-client.js +180 -0
  52. package/dist/channel-relay-client.js.map +1 -0
  53. package/dist/channel-subscription-store.d.ts +137 -0
  54. package/dist/channel-subscription-store.d.ts.map +1 -0
  55. package/dist/channel-subscription-store.js +250 -0
  56. package/dist/channel-subscription-store.js.map +1 -0
  57. package/dist/daemon.d.ts.map +1 -1
  58. package/dist/daemon.js +54 -0
  59. package/dist/daemon.js.map +1 -1
  60. package/dist/inbound-sessions.d.ts +6 -0
  61. package/dist/inbound-sessions.d.ts.map +1 -1
  62. package/dist/inbound-sessions.js +27 -1
  63. package/dist/inbound-sessions.js.map +1 -1
  64. package/dist/refusal-reasons.d.ts +7 -0
  65. package/dist/refusal-reasons.d.ts.map +1 -1
  66. package/dist/refusal-reasons.js +15 -0
  67. package/dist/refusal-reasons.js.map +1 -1
  68. package/dist/session-content-context.d.ts +8 -0
  69. package/dist/session-content-context.d.ts.map +1 -1
  70. package/dist/session-content-ingest.d.ts.map +1 -1
  71. package/dist/session-content-ingest.js +28 -0
  72. package/dist/session-content-ingest.js.map +1 -1
  73. package/dist/session-node-manager.d.ts +4 -0
  74. package/dist/session-node-manager.d.ts.map +1 -1
  75. package/dist/session-node-manager.js +11 -0
  76. package/dist/session-node-manager.js.map +1 -1
  77. package/package.json +5 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-publisher.js","sourceRoot":"","sources":["../src/channel-publisher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ import type { CelloNode } from "@cello-protocol/transport";
2
+ import type { Logger } from "./types.js";
3
+ export declare const CHANNEL_PROTOCOL_ID = "/cello/channel/1.0.0";
4
+ export interface ChannelRelayClientOptions {
5
+ getNode: () => CelloNode | null;
6
+ logger: Logger;
7
+ }
8
+ export declare class ChannelRelayClient {
9
+ #private;
10
+ constructor(opts: ChannelRelayClientOptions);
11
+ /**
12
+ * One request, one stream. THROWS when the relay could not be reached at all, and RESOLVES with
13
+ * whatever the relay said otherwise — including a refusal, which is an answer.
14
+ */
15
+ request(relayAddr: string, frame: Record<string, unknown>): Promise<Record<string, unknown>>;
16
+ /** Deposit one post. A refusal comes back as `{ ok: false, reason }`, never as a throw. */
17
+ deposit(relayAddr: string, req: {
18
+ post_cbor: Uint8Array;
19
+ fetch_key?: {
20
+ pubkey: Uint8Array;
21
+ time_ms: number;
22
+ signature: Uint8Array;
23
+ };
24
+ }): Promise<{
25
+ ok: true;
26
+ receipt_cbor: Uint8Array;
27
+ } | {
28
+ ok: false;
29
+ reason: string;
30
+ skew_ms?: number;
31
+ }>;
32
+ /** Fetch from a post number. The caller verifies everything that comes back. */
33
+ fetch(relayAddr: string, req: {
34
+ channel_pubkey: Uint8Array;
35
+ since_seq: number;
36
+ max_bytes: number;
37
+ auth?: {
38
+ signature: Uint8Array;
39
+ time_ms: number;
40
+ };
41
+ agent_pubkeys?: Uint8Array[];
42
+ }): Promise<{
43
+ ok: true;
44
+ posts: Array<{
45
+ seq: number;
46
+ post_cbor: Uint8Array;
47
+ receipt_cbor?: Uint8Array;
48
+ }>;
49
+ first_held_seq: number | null;
50
+ last_seq: number | null;
51
+ } | {
52
+ ok: false;
53
+ reason: string;
54
+ }>;
55
+ /** Where a relay's queue begins and ends, without pulling any posts. */
56
+ head(relayAddr: string, channelPubkey: Uint8Array): Promise<{
57
+ first_held_seq: number | null;
58
+ last_seq: number | null;
59
+ }>;
60
+ /**
61
+ * Deposit the channel's info record. No receipt: the record carries no post number, so there is
62
+ * nothing for a relay to order or countersign — it either holds the latest one or it does not.
63
+ */
64
+ depositInfo(relayAddr: string, req: {
65
+ info_cbor: Uint8Array;
66
+ }): Promise<{
67
+ ok: true;
68
+ } | {
69
+ ok: false;
70
+ reason: string;
71
+ }>;
72
+ /** Ask a relay to drop everything through a post number. Oldest end only — the relay enforces that. */
73
+ prune(relayAddr: string, req: {
74
+ channel_pubkey: Uint8Array;
75
+ through_seq: number;
76
+ time_ms: number;
77
+ signature: Uint8Array;
78
+ }): Promise<{
79
+ ok: true;
80
+ dropped?: number;
81
+ } | {
82
+ ok: false;
83
+ reason: string;
84
+ }>;
85
+ /** The channel's info record as this relay holds it, or null. */
86
+ info(relayAddr: string, channelPubkey: Uint8Array): Promise<Uint8Array | null>;
87
+ }
88
+ //# sourceMappingURL=channel-relay-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-relay-client.d.ts","sourceRoot":"","sources":["../src/channel-relay-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ /**
2
+ * M16 018-PUBCOLLECT — the daemon's client for the relay's channel protocol.
3
+ *
4
+ * Speaks `/cello/channel/1.0.0` (defined by order 017) over length-prefixed CBOR: one logical
5
+ * request per stream, dial-then-`newStream`, exactly as `content-park-client.ts` does for the park
6
+ * protocol. It owns the transport and nothing else — every decision about what to publish, what to
7
+ * believe and what to store belongs to the publisher and the collector.
8
+ *
9
+ * ⚠️ **A DIAL FAILURE AND A REFUSAL ARE DIFFERENT ANSWERS, and the caller branches on both.** A
10
+ * relay that cannot be reached is not a relay that said no: the first is survivable by the other
11
+ * relay and retried later, the second is a verdict about the post. Collapsing them would make an
12
+ * unreachable relay look like a rejection of the content.
13
+ *
14
+ * ⚠️ The transport rejects with PLAIN OBJECT LITERALS carrying `reason`, not Errors — `String(err)`
15
+ * on one prints "[object Object]". Its own reason is preserved rather than overwritten with a
16
+ * generic one; `content-park-client.ts` records what discarding it cost.
17
+ */
18
+ import * as lp from "it-length-prefixed";
19
+ import { encodeCbor, decodeCbor } from "@cello-protocol/protocol-types";
20
+ export const CHANNEL_PROTOCOL_ID = "/cello/channel/1.0.0";
21
+ /**
22
+ * ⚠️ THE SHARED ENCODER, NOT A LOCAL ONE. `no-multiple-cbor-encoders.test.ts` exists because a
23
+ * locally-constructed cbor-x encoder was copy-pasted into fourteen files and two of them used
24
+ * cbor-x's bare `encode` instead — writing tag-64 typed arrays into the same columns the others
25
+ * wrote as raw bytes. cbor-x reads both, so the corruption was invisible until a non-cbor-x reader
26
+ * touched it. This file built its own anyway; the guard caught it.
27
+ *
28
+ * (The guard is a text scan, so it fires on a comment that spells the forbidden call out too. That
29
+ * is the right trade — a scanner that skipped comments would miss a commented-out one.)
30
+ */
31
+ function toU8(chunk) {
32
+ if (chunk instanceof Uint8Array)
33
+ return chunk;
34
+ const c = chunk;
35
+ return typeof c?.subarray === "function" ? c.subarray() : new Uint8Array(chunk);
36
+ }
37
+ function reasonOf(err) {
38
+ if (err !== null && typeof err === "object" && typeof err.reason === "string") {
39
+ return err.reason;
40
+ }
41
+ if (err instanceof Error)
42
+ return err.message;
43
+ const m = err?.message;
44
+ return typeof m === "string" ? m : "relay_unreachable";
45
+ }
46
+ export class ChannelRelayClient {
47
+ #opts;
48
+ constructor(opts) {
49
+ this.#opts = opts;
50
+ }
51
+ /**
52
+ * One request, one stream. THROWS when the relay could not be reached at all, and RESOLVES with
53
+ * whatever the relay said otherwise — including a refusal, which is an answer.
54
+ */
55
+ async request(relayAddr, frame) {
56
+ const node = this.#opts.getNode();
57
+ if (node === null)
58
+ throw new Error("node_stopped");
59
+ let peerId;
60
+ try {
61
+ ({ peerId } = await node.dial(relayAddr));
62
+ }
63
+ catch (err) {
64
+ throw new Error(reasonOf(err));
65
+ }
66
+ let stream;
67
+ try {
68
+ stream = await node.newStream(peerId, CHANNEL_PROTOCOL_ID);
69
+ }
70
+ catch (err) {
71
+ // `protocol_not_supported` here means the relay is not carrying channels — a real and
72
+ // distinguishable condition, not a refusal of this post.
73
+ throw new Error(reasonOf(err));
74
+ }
75
+ try {
76
+ stream.send(lp.encode.single(encodeCbor(frame)));
77
+ const iter = lp.decode(stream)[Symbol.asyncIterator]();
78
+ const res = await iter.next();
79
+ if (res.done || res.value === undefined)
80
+ throw new Error("relay_closed_without_answering");
81
+ const answer = decodeCbor(toU8(res.value));
82
+ if (typeof answer !== "object" || answer === null || Array.isArray(answer)) {
83
+ throw new Error("relay_answer_malformed");
84
+ }
85
+ return answer;
86
+ }
87
+ finally {
88
+ await stream.close().catch(() => { });
89
+ }
90
+ }
91
+ /** Deposit one post. A refusal comes back as `{ ok: false, reason }`, never as a throw. */
92
+ async deposit(relayAddr, req) {
93
+ const answer = await this.request(relayAddr, {
94
+ type: "channel_deposit",
95
+ post_cbor: req.post_cbor,
96
+ ...(req.fetch_key ? { fetch_key: req.fetch_key } : {}),
97
+ });
98
+ if (answer["type"] === "channel_deposit_ok" && answer["receipt_cbor"] instanceof Uint8Array) {
99
+ return { ok: true, receipt_cbor: answer["receipt_cbor"] };
100
+ }
101
+ return {
102
+ ok: false,
103
+ reason: typeof answer["reason"] === "string" ? answer["reason"] : "unexpected_answer",
104
+ ...(typeof answer["skew_ms"] === "number" ? { skew_ms: answer["skew_ms"] } : {}),
105
+ };
106
+ }
107
+ /** Fetch from a post number. The caller verifies everything that comes back. */
108
+ async fetch(relayAddr, req) {
109
+ const answer = await this.request(relayAddr, {
110
+ type: "channel_fetch",
111
+ channel_pubkey: req.channel_pubkey,
112
+ since_seq: req.since_seq,
113
+ max_bytes: req.max_bytes,
114
+ ...(req.auth ? { auth: req.auth } : {}),
115
+ ...(req.agent_pubkeys ? { agent_pubkeys: req.agent_pubkeys } : {}),
116
+ });
117
+ if (answer["type"] !== "channel_posts" || !Array.isArray(answer["posts"])) {
118
+ return { ok: false, reason: typeof answer["reason"] === "string" ? answer["reason"] : "unexpected_answer" };
119
+ }
120
+ const posts = [];
121
+ for (const raw of answer["posts"]) {
122
+ const seq = raw["seq"];
123
+ const postCbor = raw["post_cbor"];
124
+ // A malformed entry is skipped rather than failing the whole fetch: the other posts in the
125
+ // batch are still good, and the collector verifies each one anyway.
126
+ if (typeof seq !== "number" || !(postCbor instanceof Uint8Array))
127
+ continue;
128
+ posts.push({
129
+ seq,
130
+ post_cbor: postCbor,
131
+ ...(raw["receipt_cbor"] instanceof Uint8Array ? { receipt_cbor: raw["receipt_cbor"] } : {}),
132
+ });
133
+ }
134
+ return {
135
+ ok: true,
136
+ posts,
137
+ first_held_seq: typeof answer["first_held_seq"] === "number" ? answer["first_held_seq"] : null,
138
+ last_seq: typeof answer["last_seq"] === "number" ? answer["last_seq"] : null,
139
+ };
140
+ }
141
+ /** Where a relay's queue begins and ends, without pulling any posts. */
142
+ async head(relayAddr, channelPubkey) {
143
+ const answer = await this.request(relayAddr, { type: "channel_head", channel_pubkey: channelPubkey });
144
+ return {
145
+ first_held_seq: typeof answer["first_held_seq"] === "number" ? answer["first_held_seq"] : null,
146
+ last_seq: typeof answer["last_seq"] === "number" ? answer["last_seq"] : null,
147
+ };
148
+ }
149
+ /**
150
+ * Deposit the channel's info record. No receipt: the record carries no post number, so there is
151
+ * nothing for a relay to order or countersign — it either holds the latest one or it does not.
152
+ */
153
+ async depositInfo(relayAddr, req) {
154
+ const answer = await this.request(relayAddr, { type: "channel_info_set", info_record: req.info_cbor });
155
+ if (answer["type"] === "channel_info_set_ok")
156
+ return { ok: true };
157
+ return { ok: false, reason: typeof answer["reason"] === "string" ? answer["reason"] : "unexpected_answer" };
158
+ }
159
+ /** Ask a relay to drop everything through a post number. Oldest end only — the relay enforces that. */
160
+ async prune(relayAddr, req) {
161
+ const answer = await this.request(relayAddr, {
162
+ type: "channel_prune",
163
+ channel_pubkey: req.channel_pubkey,
164
+ through_seq: req.through_seq,
165
+ time_ms: req.time_ms,
166
+ signature: req.signature,
167
+ });
168
+ // `pruned` is the relay's own field name for how many it dropped — read it as sent.
169
+ if (answer["type"] === "channel_prune_ok") {
170
+ return { ok: true, ...(typeof answer["pruned"] === "number" ? { dropped: answer["pruned"] } : {}) };
171
+ }
172
+ return { ok: false, reason: typeof answer["reason"] === "string" ? answer["reason"] : "unexpected_answer" };
173
+ }
174
+ /** The channel's info record as this relay holds it, or null. */
175
+ async info(relayAddr, channelPubkey) {
176
+ const answer = await this.request(relayAddr, { type: "channel_info", channel_pubkey: channelPubkey });
177
+ return answer["info_record"] instanceof Uint8Array ? answer["info_record"] : null;
178
+ }
179
+ }
180
+ //# sourceMappingURL=channel-relay-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-relay-client.js","sourceRoot":"","sources":["../src/channel-relay-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * ChannelSubscriptionStore — what a SUBSCRIBER knows about a channel it follows (M16).
3
+ *
4
+ * ⚠️ **THE SCHEMA IS 019's, CREATED HERE.** Order 019 owns membership — joining, the group key, the
5
+ * eject re-key — and defines this table. But 018's collector cannot advance a delivery position
6
+ * without somewhere to put it, so the table is created here with 019's FULL column set rather than a
7
+ * smaller one 019 would have to migrate. Nothing holds real data yet, so the alternative is a
8
+ * migration written for an empty database, which this milestone forbids. RAISED on the order.
9
+ *
10
+ * 018 writes `delivered_through` and reads `relays`, `access` and `admin_pubkey`. 019 fills in the
11
+ * join that populates them and adds `channel_subscription_keys` beside this.
12
+ *
13
+ * ─── TWO POSITIONS, NEVER ONE ────────────────────────────────────────────────────────────────
14
+ *
15
+ * delivered_through how far the DAEMON has fetched and verified. Moved by the collector.
16
+ * processed_through how far the AGENT has actually read. Moved by nothing here.
17
+ *
18
+ * Collapsing them into one number would mean a fetch marks a post as read, so anything an agent had
19
+ * not yet seen would be silently skipped the moment the daemon collected it. A fetch never touches
20
+ * `processed_through`; a read never touches `delivered_through`.
21
+ *
22
+ * Keyed on `agent_id` — the stable identity — never on `agent_name`, which is a mutable display
23
+ * label and reusable after retirement.
24
+ */
25
+ import type { DaemonDatabase } from "./sqlcipher-db.js";
26
+ import type { Logger } from "./types.js";
27
+ import type { ChannelAccess } from "@cello-protocol/protocol-types";
28
+ export declare const CHANNEL_SUBSCRIPTION_CREATE_SQL = "\n CREATE TABLE IF NOT EXISTS channel_subscriptions (\n agent_id TEXT NOT NULL,\n channel_pubkey TEXT NOT NULL,\n admin_pubkey TEXT NOT NULL,\n access TEXT NOT NULL,\n guidance TEXT NOT NULL DEFAULT '',\n retention_seconds INTEGER NOT NULL DEFAULT 604800,\n -- JSON array of multiaddrs: the relays this channel publishes to, in the order the info record\n -- gave them. A column per relay would fix the count at two, and the count is the publisher's.\n relays TEXT NOT NULL DEFAULT '[]',\n moniker TEXT NOT NULL DEFAULT '',\n delivered_through INTEGER NOT NULL DEFAULT 0,\n processed_through INTEGER NOT NULL DEFAULT 0,\n joined_at INTEGER NOT NULL DEFAULT 0,\n status TEXT NOT NULL DEFAULT 'active',\n PRIMARY KEY (agent_id, channel_pubkey)\n );\n";
29
+ /**
30
+ * The group keys a subscriber holds, one row per generation.
31
+ *
32
+ * ⚠️ **A SEPARATE TABLE BECAUSE THERE ARE MANY PER SUBSCRIPTION, and every one is kept.** A re-key
33
+ * does not make old posts unreadable — they are still in the relay's queue under the old key — so a
34
+ * single `key` column on the subscription would make the channel's own history undecryptable to its
35
+ * own members the moment anyone was ejected.
36
+ *
37
+ * The key bytes live only here, inside the SQLCipher database, and are never logged.
38
+ */
39
+ export declare const CHANNEL_SUBSCRIPTION_KEYS_CREATE_SQL = "\n CREATE TABLE IF NOT EXISTS channel_subscription_keys (\n agent_id TEXT NOT NULL,\n channel_pubkey TEXT NOT NULL,\n generation INTEGER NOT NULL,\n key BLOB NOT NULL,\n received_at INTEGER NOT NULL,\n PRIMARY KEY (agent_id, channel_pubkey, generation)\n );\n";
40
+ export interface ChannelSubscription {
41
+ agent_id: string;
42
+ channel_pubkey: string;
43
+ admin_pubkey: string;
44
+ access: ChannelAccess;
45
+ relays: string[];
46
+ /** A local display label. The pubkey is the identity; this is what an operator calls it. */
47
+ moniker: string;
48
+ /** What the channel is for, in the publisher's words — and how long its posts last. Both arrive
49
+ * on the acceptance and have no other source, so a subscriber that drops them cannot recover them. */
50
+ guidance: string;
51
+ retention_seconds: number;
52
+ delivered_through: number;
53
+ processed_through: number;
54
+ status: "active" | "left" | "ejected";
55
+ }
56
+ export type ChannelSubscriptionErrorCode = "subscription_unknown" | "position_regression";
57
+ export declare class ChannelSubscriptionError extends Error {
58
+ readonly code: ChannelSubscriptionErrorCode;
59
+ constructor(code: ChannelSubscriptionErrorCode, message: string);
60
+ }
61
+ export declare class ChannelSubscriptionStore {
62
+ #private;
63
+ constructor(db: DaemonDatabase, logger: Logger);
64
+ /** Record (or refresh) a subscription. 019's join calls this; 018's tests use it directly. */
65
+ upsert(sub: {
66
+ agent_id: string;
67
+ channel_pubkey: string;
68
+ admin_pubkey: string;
69
+ access: ChannelAccess;
70
+ relays: string[];
71
+ joined_at?: number;
72
+ guidance?: string;
73
+ retention_seconds?: number;
74
+ }): void;
75
+ get(agentId: string, channelPubkeyHex: string): ChannelSubscription | null;
76
+ /** Every channel this daemon should be collecting for. `left` and `ejected` are not collected. */
77
+ active(): ChannelSubscription[];
78
+ /**
79
+ * Move the DAEMON's position. Never moves backwards: a relay that answers with less than it did
80
+ * last time (a prune, a restart, a different relay) must not rewind a subscriber into re-fetching
81
+ * and re-delivering posts its agent has already been shown.
82
+ */
83
+ setDeliveredThrough(agentId: string, channelPubkeyHex: string, seq: number): void;
84
+ /**
85
+ * Move the AGENT's position — how far it has actually READ.
86
+ *
87
+ * ⚠️ **A LOWER VALUE THROWS RATHER THAN BEING IGNORED.** Silently refusing would leave a caller
88
+ * that computed a wrong position believing it had been applied, and this number is not
89
+ * recoverable from anywhere else: moving it back re-delivers messages the operator already saw,
90
+ * and moving it forward by mistake skips messages they never did. Equal is a no-op, not an error.
91
+ */
92
+ advanceProcessed(agentId: string, channelPubkeyHex: string, seq: number): void;
93
+ /**
94
+ * Store a group key for one generation.
95
+ *
96
+ * ⚠️ **IDEMPOTENT, because a re-key can be delivered twice** — the admin retries an undelivered
97
+ * one, and a member that already has it must not end up with two rows or a replaced key.
98
+ */
99
+ addKey(agentId: string, channelPubkeyHex: string, gk: {
100
+ generation: number;
101
+ key: Uint8Array;
102
+ }, receivedAt: number): void;
103
+ /**
104
+ * Every group key this subscriber holds, newest generation first.
105
+ *
106
+ * ⚠️ **OLD GENERATIONS ARE NEVER DELETED.** A re-key does not make yesterday's posts unreadable —
107
+ * they are still encrypted under the old key and still in the relay's queue — so dropping it
108
+ * would turn the channel's own history into `unknown_generation` for its own members.
109
+ */
110
+ keysFor(agentId: string, channelPubkeyHex: string): Array<{
111
+ generation: number;
112
+ key: Uint8Array;
113
+ }>;
114
+ /**
115
+ * The subscriber's OWN decision to stop following. Purely local: nothing is sent, nothing is asked
116
+ * of the publisher, and `active()` stops returning it so the collector stops fetching.
117
+ */
118
+ markLeft(agentId: string, channelPubkeyHex: string): void;
119
+ /**
120
+ * The PUBLISHER's decision. Distinct from `left` on purpose: one the subscriber chose and can undo
121
+ * by rejoining, the other they cannot, and an operator asking why a channel went quiet needs to
122
+ * see which of the two happened.
123
+ */
124
+ markEjected(agentId: string, channelPubkeyHex: string): void;
125
+ /** A local display label. The pubkey is the identity and naming it changes nothing. */
126
+ setMoniker(agentId: string, channelPubkeyHex: string, moniker: string): void;
127
+ /**
128
+ * Is this pubkey a channel this agent subscribes to?
129
+ *
130
+ * ⚠️ **TRUE FOR `left` AND `ejected` TOO, and that is deliberate.** The one caller is the
131
+ * inbound-session gate: a channel never opens a session, so one arriving from a pubkey we know to
132
+ * be a channel is worth refusing on. Unsubscribing does not stop it being a channel, and
133
+ * answering false here would reopen the hole the moment somebody left.
134
+ */
135
+ isSubscribedChannel(agentId: string, pubkeyHex: string): boolean;
136
+ }
137
+ //# sourceMappingURL=channel-subscription-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-subscription-store.d.ts","sourceRoot":"","sources":["../src/channel-subscription-store.ts"],"names":[],"mappings":"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"}