@leemour/cli-messaging 0.96.0 → 0.98.0

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 (203) hide show
  1. package/README.md +11 -3
  2. package/dist/cli/bot/admins.d.ts +10 -0
  3. package/dist/cli/bot/admins.d.ts.map +1 -0
  4. package/dist/cli/bot/admins.js +114 -0
  5. package/dist/cli/bot/admins.js.map +1 -0
  6. package/dist/cli/bot/command.d.ts +1 -1
  7. package/dist/cli/bot/command.d.ts.map +1 -1
  8. package/dist/cli/bot/command.js +60 -23
  9. package/dist/cli/bot/command.js.map +1 -1
  10. package/dist/cli/bot/context.d.ts +19 -1
  11. package/dist/cli/bot/context.d.ts.map +1 -1
  12. package/dist/cli/bot/context.js +44 -3
  13. package/dist/cli/bot/context.js.map +1 -1
  14. package/dist/cli/bot/copy.d.ts +19 -0
  15. package/dist/cli/bot/copy.d.ts.map +1 -0
  16. package/dist/cli/bot/copy.js +85 -0
  17. package/dist/cli/bot/copy.js.map +1 -0
  18. package/dist/cli/bot/messages.d.ts +10 -0
  19. package/dist/cli/bot/messages.d.ts.map +1 -0
  20. package/dist/cli/bot/messages.js +252 -0
  21. package/dist/cli/bot/messages.js.map +1 -0
  22. package/dist/cli/bot/port.d.ts +83 -5
  23. package/dist/cli/bot/port.d.ts.map +1 -1
  24. package/dist/cli/bot/port.js +2 -1
  25. package/dist/cli/bot/port.js.map +1 -1
  26. package/dist/cli/config-command.js +1 -1
  27. package/dist/cli/config-command.js.map +1 -1
  28. package/dist/cli/deadline.d.ts.map +1 -1
  29. package/dist/cli/deadline.js +11 -2
  30. package/dist/cli/deadline.js.map +1 -1
  31. package/dist/cli/index.d.ts +6 -2
  32. package/dist/cli/index.d.ts.map +1 -1
  33. package/dist/cli/index.js +4 -0
  34. package/dist/cli/index.js.map +1 -1
  35. package/dist/cli/messenger/admin-moderation-command.js +2 -2
  36. package/dist/cli/messenger/admin-moderation-command.js.map +1 -1
  37. package/dist/cli/messenger/ask.d.ts.map +1 -1
  38. package/dist/cli/messenger/ask.js +1 -1
  39. package/dist/cli/messenger/ask.js.map +1 -1
  40. package/dist/cli/messenger/context.d.ts +18 -2
  41. package/dist/cli/messenger/context.d.ts.map +1 -1
  42. package/dist/cli/messenger/context.js +30 -8
  43. package/dist/cli/messenger/context.js.map +1 -1
  44. package/dist/cli/messenger/download-command.d.ts.map +1 -1
  45. package/dist/cli/messenger/download-command.js +97 -30
  46. package/dist/cli/messenger/download-command.js.map +1 -1
  47. package/dist/cli/messenger/guard-commands.js +3 -3
  48. package/dist/cli/messenger/guard-commands.js.map +1 -1
  49. package/dist/cli/messenger/port.d.ts +12 -1
  50. package/dist/cli/messenger/port.d.ts.map +1 -1
  51. package/dist/cli/messenger/port.js.map +1 -1
  52. package/dist/cli/messenger/stored.d.ts +3 -2
  53. package/dist/cli/messenger/stored.d.ts.map +1 -1
  54. package/dist/cli/messenger/stored.js +34 -4
  55. package/dist/cli/messenger/stored.js.map +1 -1
  56. package/dist/cli/messenger/watch-command.d.ts +2 -1
  57. package/dist/cli/messenger/watch-command.d.ts.map +1 -1
  58. package/dist/cli/messenger/watch-command.js +11 -2
  59. package/dist/cli/messenger/watch-command.js.map +1 -1
  60. package/dist/domain/capabilities.d.ts +3 -0
  61. package/dist/domain/capabilities.d.ts.map +1 -1
  62. package/dist/kit/contract.d.ts +37 -0
  63. package/dist/kit/contract.d.ts.map +1 -0
  64. package/dist/kit/contract.js +408 -0
  65. package/dist/kit/contract.js.map +1 -0
  66. package/dist/kit/fake.d.ts +16 -0
  67. package/dist/kit/fake.d.ts.map +1 -0
  68. package/dist/kit/fake.js +457 -0
  69. package/dist/kit/fake.js.map +1 -0
  70. package/dist/kit/index.d.ts +4 -0
  71. package/dist/kit/index.d.ts.map +1 -0
  72. package/dist/kit/index.js +4 -0
  73. package/dist/kit/index.js.map +1 -0
  74. package/dist/kit/seed.d.ts +38 -0
  75. package/dist/kit/seed.d.ts.map +1 -0
  76. package/dist/kit/seed.js +83 -0
  77. package/dist/kit/seed.js.map +1 -0
  78. package/dist/mcp/resources.d.ts +6 -1
  79. package/dist/mcp/resources.d.ts.map +1 -1
  80. package/dist/mcp/resources.js +14 -5
  81. package/dist/mcp/resources.js.map +1 -1
  82. package/dist/mcp/server.d.ts.map +1 -1
  83. package/dist/mcp/server.js +3 -0
  84. package/dist/mcp/server.js.map +1 -1
  85. package/dist/mcp/tool.d.ts +12 -2
  86. package/dist/mcp/tool.d.ts.map +1 -1
  87. package/dist/mcp/tool.js +15 -8
  88. package/dist/mcp/tool.js.map +1 -1
  89. package/dist/mcp/tools/chats.js +3 -3
  90. package/dist/mcp/tools/chats.js.map +1 -1
  91. package/dist/mcp/tools/contacts.js +3 -3
  92. package/dist/mcp/tools/contacts.js.map +1 -1
  93. package/dist/mcp/tools/inbox.d.ts.map +1 -1
  94. package/dist/mcp/tools/inbox.js +3 -4
  95. package/dist/mcp/tools/inbox.js.map +1 -1
  96. package/dist/mcp/tools/messages.d.ts.map +1 -1
  97. package/dist/mcp/tools/messages.js +5 -8
  98. package/dist/mcp/tools/messages.js.map +1 -1
  99. package/dist/mcp/tools/review.d.ts.map +1 -1
  100. package/dist/mcp/tools/review.js +3 -4
  101. package/dist/mcp/tools/review.js.map +1 -1
  102. package/dist/moderation/check.d.ts +3 -1
  103. package/dist/moderation/check.d.ts.map +1 -1
  104. package/dist/moderation/check.js +3 -2
  105. package/dist/moderation/check.js.map +1 -1
  106. package/dist/parity/audit.d.ts +11 -9
  107. package/dist/parity/audit.d.ts.map +1 -1
  108. package/dist/parity/audit.js +63 -46
  109. package/dist/parity/audit.js.map +1 -1
  110. package/dist/parity/bin.js +17 -8
  111. package/dist/parity/bin.js.map +1 -1
  112. package/dist/parity/catalogue.d.ts.map +1 -1
  113. package/dist/parity/catalogue.js +7 -1
  114. package/dist/parity/catalogue.js.map +1 -1
  115. package/dist/parity/manifest.d.ts +19 -12
  116. package/dist/parity/manifest.d.ts.map +1 -1
  117. package/dist/parity/manifest.js +60 -37
  118. package/dist/parity/manifest.js.map +1 -1
  119. package/dist/parity/pages.d.ts +3 -3
  120. package/dist/parity/pages.d.ts.map +1 -1
  121. package/dist/parity/pages.js +4 -5
  122. package/dist/parity/pages.js.map +1 -1
  123. package/dist/parity/seed.d.ts +11 -0
  124. package/dist/parity/seed.d.ts.map +1 -0
  125. package/dist/parity/seed.js +99 -0
  126. package/dist/parity/seed.js.map +1 -0
  127. package/dist/parity/wording.d.ts +4 -3
  128. package/dist/parity/wording.d.ts.map +1 -1
  129. package/dist/parity/wording.js +21 -10
  130. package/dist/parity/wording.js.map +1 -1
  131. package/dist/search/correct.d.ts +25 -0
  132. package/dist/search/correct.d.ts.map +1 -0
  133. package/dist/search/correct.js +65 -0
  134. package/dist/search/correct.js.map +1 -0
  135. package/dist/search/query.d.ts +5 -2
  136. package/dist/search/query.d.ts.map +1 -1
  137. package/dist/search/query.js +5 -4
  138. package/dist/search/query.js.map +1 -1
  139. package/dist/search/search.d.ts +27 -0
  140. package/dist/search/search.d.ts.map +1 -0
  141. package/dist/search/search.js +65 -0
  142. package/dist/search/search.js.map +1 -0
  143. package/dist/sends/guarded.d.ts +12 -0
  144. package/dist/sends/guarded.d.ts.map +1 -1
  145. package/dist/sends/guarded.js +24 -2
  146. package/dist/sends/guarded.js.map +1 -1
  147. package/dist/services/archive.d.ts +8 -3
  148. package/dist/services/archive.d.ts.map +1 -1
  149. package/dist/services/archive.js +21 -2
  150. package/dist/services/archive.js.map +1 -1
  151. package/dist/services/chats.d.ts.map +1 -1
  152. package/dist/services/chats.js +11 -7
  153. package/dist/services/chats.js.map +1 -1
  154. package/dist/services/deps.d.ts +13 -0
  155. package/dist/services/deps.d.ts.map +1 -1
  156. package/dist/services/deps.js +12 -0
  157. package/dist/services/deps.js.map +1 -1
  158. package/dist/services/inbox.d.ts +13 -3
  159. package/dist/services/inbox.d.ts.map +1 -1
  160. package/dist/services/inbox.js +45 -15
  161. package/dist/services/inbox.js.map +1 -1
  162. package/dist/services/messages.d.ts +9 -2
  163. package/dist/services/messages.d.ts.map +1 -1
  164. package/dist/services/messages.js +27 -4
  165. package/dist/services/messages.js.map +1 -1
  166. package/dist/services/moderation.d.ts.map +1 -1
  167. package/dist/services/moderation.js +7 -1
  168. package/dist/services/moderation.js.map +1 -1
  169. package/dist/services/people.d.ts.map +1 -1
  170. package/dist/services/people.js +5 -4
  171. package/dist/services/people.js.map +1 -1
  172. package/dist/speech/hearing.d.ts +1 -1
  173. package/dist/speech/hearing.d.ts.map +1 -1
  174. package/dist/speech/hearing.js +2 -2
  175. package/dist/speech/hearing.js.map +1 -1
  176. package/dist/store/index.d.ts +1 -1
  177. package/dist/store/index.d.ts.map +1 -1
  178. package/dist/store/index.js.map +1 -1
  179. package/dist/store/sqlite/completeness.d.ts +17 -0
  180. package/dist/store/sqlite/completeness.d.ts.map +1 -0
  181. package/dist/store/sqlite/completeness.js +30 -0
  182. package/dist/store/sqlite/completeness.js.map +1 -0
  183. package/dist/store/sqlite/messages.d.ts +2 -2
  184. package/dist/store/sqlite/messages.d.ts.map +1 -1
  185. package/dist/store/sqlite/messages.js +14 -2
  186. package/dist/store/sqlite/messages.js.map +1 -1
  187. package/dist/store/sqlite/search-index.d.ts.map +1 -1
  188. package/dist/store/sqlite/search-index.js +45 -9
  189. package/dist/store/sqlite/search-index.js.map +1 -1
  190. package/dist/store/sqlite/search.d.ts +2 -0
  191. package/dist/store/sqlite/search.d.ts.map +1 -1
  192. package/dist/store/sqlite/search.js +27 -17
  193. package/dist/store/sqlite/search.js.map +1 -1
  194. package/dist/store/sqlite/words.d.ts +78 -0
  195. package/dist/store/sqlite/words.d.ts.map +1 -0
  196. package/dist/store/sqlite/words.js +237 -0
  197. package/dist/store/sqlite/words.js.map +1 -0
  198. package/dist/store/store.d.ts +35 -0
  199. package/dist/store/store.d.ts.map +1 -1
  200. package/dist/store/store.js +14 -2
  201. package/dist/store/store.js.map +1 -1
  202. package/package.json +8 -3
  203. package/parity.json +533 -440
@@ -0,0 +1,457 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ import { isId, pickChat, pickPerson } from "../resolve.js";
3
+ import { contractSeed } from "./seed.js";
4
+ const NO_SETTINGS = {
5
+ allCanPin: null,
6
+ onlyAdminsAdd: null,
7
+ onlyAdminsCall: null,
8
+ onlyOwnerEditsInfo: null,
9
+ membersSeeLink: null,
10
+ };
11
+ /** `before` as a time, for a messenger whose store pages by time (`Fetching.orderBy`). */
12
+ const ISO_TIME = /^\d{4}-\d{2}-\d{2}T/;
13
+ const THIS_SESSION = { current: true, client: "fake", device: null, location: null, lastActiveAt: null };
14
+ const page = (all, window) => {
15
+ const end = window.limit === undefined ? all.length : window.offset + window.limit;
16
+ return { items: all.slice(window.offset, end), hasMore: end < all.length };
17
+ };
18
+ const newest = (all, limit) => ({
19
+ items: all.slice(Math.max(0, all.length - limit)),
20
+ hasMore: all.length > limit,
21
+ });
22
+ const missing = (what) => new CliError("not_found", `the fake adapter has no ${what}`);
23
+ /**
24
+ * A messenger in memory, over `seed` (`contractSeed()` when not given), copied so a test may keep
25
+ * using its seed. It keeps the port's promises — oldest first, `hasMore`, a repeated send id leaving
26
+ * one message, `CliError` codes — and passes `contractCases`. Writes change only its own copy.
27
+ *
28
+ * With `{ feed: true }` it also pushes its history, as a messenger with `history: "store"` does:
29
+ * the chats and people in one batch, then each chat's messages in a batch of their own.
30
+ */
31
+ export const fakeAdapter = (seed = contractSeed(), options = {}) => {
32
+ const state = structuredClone(seed);
33
+ let account = state.account;
34
+ const sends = new Map();
35
+ const pins = new Map();
36
+ const polls = new Map();
37
+ const scheduled = [];
38
+ const admins = new Map();
39
+ const groups = new Map();
40
+ const contacts = new Set(state.people.map((person) => person.id));
41
+ const blocked = new Set();
42
+ const folders = [];
43
+ const listeners = new Set();
44
+ let counter = 0;
45
+ const ownId = () => {
46
+ if (!account)
47
+ throw new CliError("authentication_error", "the fake adapter is not logged in");
48
+ return account.id;
49
+ };
50
+ const chatOf = (reference) => {
51
+ const exact = state.chats.find((chat) => chat.id === reference);
52
+ if (exact)
53
+ return exact;
54
+ if (isId(reference))
55
+ throw missing(`chat ${reference}`);
56
+ return pickChat(reference, state.chats);
57
+ };
58
+ const messagesOf = (chatId) => state.messages.filter((message) => message.chatId === chatId);
59
+ const messageOf = (chatId, messageId) => {
60
+ const found = state.messages.find((message) => message.chatId === chatId && message.id === messageId);
61
+ if (!found)
62
+ throw missing(`message ${messageId} in chat ${chatId}`);
63
+ return found;
64
+ };
65
+ const personOf = (reference) => pickPerson(reference, {
66
+ get: (id) => state.people.find((person) => person.id === id),
67
+ all: () => state.people,
68
+ });
69
+ const nextId = (prefix) => {
70
+ counter += 1;
71
+ const numeric = state.messages.every((message) => /^\d+$/.test(message.id));
72
+ if (!numeric)
73
+ return `new-${prefix}-${counter}`;
74
+ return String(Math.max(0, ...state.messages.map((message) => Number(message.id))) + 1);
75
+ };
76
+ const later = (chatId) => {
77
+ const last = messagesOf(chatId).at(-1);
78
+ const after = last ? Date.parse(last.timestamp) + 1000 : 0;
79
+ return new Date(Math.max(Date.now(), after)).toISOString();
80
+ };
81
+ const compose = (chat, text, extra = {}) => ({
82
+ id: nextId("sent"),
83
+ chatId: chat.id,
84
+ senderId: ownId(),
85
+ senderName: account?.name ?? null,
86
+ timestamp: later(chat.id),
87
+ editedAt: null,
88
+ text,
89
+ outgoing: true,
90
+ attachments: [],
91
+ replyTo: null,
92
+ forwardedFrom: null,
93
+ reactions: null,
94
+ ...extra,
95
+ });
96
+ const post = (chat, text, extra = {}) => {
97
+ const message = compose(chat, text, extra);
98
+ state.messages.push(message);
99
+ chat.lastMessageAt = message.timestamp;
100
+ for (const listener of listeners)
101
+ listener({ event: "message", message: { ...message, chatTitle: chat.title } });
102
+ return message;
103
+ };
104
+ const once = (sendId, make) => {
105
+ const known = sends.get(sendId);
106
+ if (known)
107
+ return known;
108
+ const sent = make();
109
+ sends.set(sendId, sent);
110
+ return sent;
111
+ };
112
+ const cardOf = (chat) => ({ ...chat, ...(groups.get(chat.id) ?? groupDefaults()) });
113
+ const groupDefaults = () => ({ description: null, link: null, settings: { ...NO_SETTINGS } });
114
+ const groupOf = (chatId) => {
115
+ const existing = groups.get(chatId);
116
+ if (existing)
117
+ return existing;
118
+ const fresh = groupDefaults();
119
+ groups.set(chatId, fresh);
120
+ return fresh;
121
+ };
122
+ const pollOf = (chatId, messageId) => {
123
+ const found = polls.get(`${chatId}/${messageId}`);
124
+ if (!found)
125
+ throw missing(`poll on message ${messageId}`);
126
+ return found;
127
+ };
128
+ const asMember = ({ id, name, username }) => ({ id, name, username });
129
+ const folderOf = (folderId) => {
130
+ const found = folders.find((folder) => folder.id === folderId);
131
+ if (!found)
132
+ throw missing(`folder ${folderId}`);
133
+ return found;
134
+ };
135
+ return {
136
+ self: () => account?.id ?? null,
137
+ me: async () => {
138
+ ownId();
139
+ return { ...account };
140
+ },
141
+ chats: async (window) => page(structuredClone(state.chats), window),
142
+ history: async (reference, { limit, before }) => {
143
+ const all = messagesOf(chatOf(reference).id);
144
+ if (before === undefined)
145
+ return structuredClone(newest(all, limit));
146
+ const index = all.findIndex((message) => message.id === before);
147
+ const time = ISO_TIME.test(before) ? Date.parse(before) : Number.NaN;
148
+ if (index === -1 && Number.isNaN(time))
149
+ throw missing(`message ${before}`);
150
+ const older = index === -1 ? all.filter((message) => Date.parse(message.timestamp) < time) : all.slice(0, index);
151
+ return structuredClone(newest(older, limit));
152
+ },
153
+ resolve: async (reference) => ({ ...chatOf(reference) }),
154
+ chat: async (reference) => {
155
+ const chat = chatOf(reference);
156
+ return { ...chat, members: chat.kind === "channel" ? null : structuredClone(state.members[chat.id] ?? []) };
157
+ },
158
+ contact: async (reference) => {
159
+ const chat = state.chats.find((one) => one.id === reference);
160
+ if (chat && chat.kind !== "dialog")
161
+ throw new CliError("validation_error", `${reference} is a chat, not a person`);
162
+ const partner = chat && state.members[chat.id]?.find((member) => member.id !== account?.id);
163
+ const person = personOf(partner?.id ?? reference);
164
+ const shared = state.chats
165
+ .filter((one) => state.members[one.id]?.some((member) => member.id === person.id))
166
+ .map(({ id, title, kind, lastMessageAt }) => ({ id, title, kind, lastMessageAt }));
167
+ return { ...person, chats: shared };
168
+ },
169
+ around: async (reference, messageId, { before, after }) => {
170
+ const all = messagesOf(chatOf(reference).id);
171
+ const index = all.findIndex((message) => message.id === messageId);
172
+ if (index === -1)
173
+ throw missing(`message ${messageId}`);
174
+ return structuredClone(all.slice(Math.max(0, index - before), index + after + 1)).map((message) => message.id === messageId ? { ...message, anchor: true } : message);
175
+ },
176
+ send: async (chatId, text, options) => once(options.sendId, () => {
177
+ const chat = chatOf(chatId);
178
+ const attachments = (options.attachments ?? []).map(({ kind, name, bytes }) => ({
179
+ kind,
180
+ name,
181
+ size: bytes.length,
182
+ }));
183
+ const extra = { attachments, ...(options.replyTo === undefined ? {} : { replyToId: options.replyTo }) };
184
+ if (options.at === undefined)
185
+ return { message: post(chat, text, extra), sendId: options.sendId };
186
+ const message = compose(chat, text, { ...extra, scheduledFor: options.at });
187
+ scheduled.push(message);
188
+ return { message, sendId: options.sendId };
189
+ }),
190
+ logout: async () => {
191
+ account = null;
192
+ },
193
+ close: async () => {
194
+ listeners.clear();
195
+ },
196
+ historyAfter: async (reference, { limit, after }) => {
197
+ const all = messagesOf(chatOf(reference).id);
198
+ const newer = "id" in after
199
+ ? all.slice(all.findIndex((message) => message.id === after.id) + 1)
200
+ : all.filter((message) => Date.parse(message.timestamp) > after.time);
201
+ return structuredClone({ items: newer.slice(0, limit), hasMore: newer.length > limit });
202
+ },
203
+ historyBefore: async (reference, { limit, time }) => structuredClone(newest(messagesOf(chatOf(reference).id).filter((message) => Date.parse(message.timestamp) < time), limit)),
204
+ topics: async (reference) => {
205
+ chatOf(reference);
206
+ return { items: [], hasMore: false };
207
+ },
208
+ inspect: async (link) => {
209
+ throw missing(`chat behind ${link}`);
210
+ },
211
+ edit: async (chatId, messageId, text) => {
212
+ const message = messageOf(chatId, messageId);
213
+ if (!message.outgoing)
214
+ throw new CliError("permission_error", "only the owner's own message can be edited");
215
+ message.text = text;
216
+ message.editedAt = new Date().toISOString();
217
+ return { ...message };
218
+ },
219
+ forward: async (fromChatId, messageId, toChatId, { sendId }) => once(sendId, () => {
220
+ const original = messageOf(fromChatId, messageId);
221
+ const forwardedFrom = {
222
+ id: original.id,
223
+ senderId: original.senderId,
224
+ senderName: original.senderName,
225
+ timestamp: original.timestamp,
226
+ text: original.text,
227
+ attachments: original.attachments,
228
+ outgoing: original.outgoing,
229
+ };
230
+ return { message: post(chatOf(toChatId), original.text, { forwardedFrom }), sendId };
231
+ }).message,
232
+ delete: async (chatId, messageIds) => {
233
+ for (const id of messageIds)
234
+ messageOf(chatId, id);
235
+ state.messages = state.messages.filter((message) => message.chatId !== chatId || !messageIds.includes(message.id));
236
+ },
237
+ pin: async (chatId, messageId) => {
238
+ messageOf(chatId, messageId);
239
+ pins.set(chatId, messageId);
240
+ },
241
+ unpin: async (chatId, messageId) => {
242
+ if (pins.get(chatId) === messageId)
243
+ pins.delete(chatId);
244
+ },
245
+ react: async (chatId, messageId, emoji) => {
246
+ messageOf(chatId, messageId).reactions =
247
+ emoji === null ? null : { counts: [{ reaction: emoji, count: 1 }], mine: emoji, total: 1 };
248
+ },
249
+ markRead: async (chatId) => {
250
+ chatOf(chatId).unreadCount = 0;
251
+ },
252
+ poll: async (chatId, messageId) => ({ ...pollOf(chatId, messageId) }),
253
+ vote: async (chatId, messageId, answerIds) => {
254
+ const poll = pollOf(chatId, messageId);
255
+ const unknown = answerIds.find((id) => !poll.answers.some((answer) => answer.id === id));
256
+ if (unknown !== undefined)
257
+ throw new CliError("validation_error", `the poll has no answer ${unknown}`);
258
+ for (const answer of poll.answers)
259
+ answer.chosen = answerIds.includes(answer.id);
260
+ return { ...poll };
261
+ },
262
+ closePoll: async (chatId, messageId) => {
263
+ const poll = pollOf(chatId, messageId);
264
+ poll.closed = true;
265
+ return { ...poll };
266
+ },
267
+ createPoll: async (chatId, poll, { sendId }) => once(sendId, () => {
268
+ const sent = post(chatOf(chatId), poll.question);
269
+ polls.set(`${chatId}/${sent.id}`, {
270
+ chatId,
271
+ messageId: sent.id,
272
+ question: poll.question,
273
+ answers: poll.answers.map((text, index) => ({ id: String(index), text, voters: null, chosen: false })),
274
+ closed: false,
275
+ multiple: poll.multiple,
276
+ anonymous: poll.anonymous,
277
+ voters: null,
278
+ });
279
+ return { message: sent, sendId };
280
+ }),
281
+ watch: async (onEvent, signal, onReady) => {
282
+ if (signal.aborted)
283
+ return;
284
+ listeners.add(onEvent);
285
+ onReady?.();
286
+ await new Promise((resolve) => signal.addEventListener("abort", () => resolve(), { once: true }));
287
+ listeners.delete(onEvent);
288
+ },
289
+ ...(options.feed
290
+ ? {
291
+ feed: async (onBatch, signal) => {
292
+ if (signal.aborted)
293
+ return;
294
+ onBatch({ chats: structuredClone(state.chats), people: state.people.map(asMember) });
295
+ for (const chat of state.chats) {
296
+ const messages = messagesOf(chat.id);
297
+ if (messages.length > 0)
298
+ onBatch({ messages: structuredClone(messages) });
299
+ }
300
+ await new Promise((resolve) => signal.addEventListener("abort", () => resolve(), { once: true }));
301
+ },
302
+ }
303
+ : {}),
304
+ download: async (reference, messageId) => {
305
+ const message = messageOf(chatOf(reference).id, messageId);
306
+ return {
307
+ files: message.attachments.map((attachment) => ({
308
+ kind: attachment.kind,
309
+ ...(attachment.name === undefined ? {} : { name: attachment.name }),
310
+ bytes: async function* () { },
311
+ })),
312
+ skipped: [],
313
+ };
314
+ },
315
+ transcribe: async (reference, messageId) => {
316
+ const message = messageOf(chatOf(reference).id, messageId);
317
+ if (!message.attachments.some((attachment) => attachment.kind === "voice"))
318
+ throw new CliError("validation_error", `message ${messageId} is not a voice message`);
319
+ return { text: message.text, pending: false };
320
+ },
321
+ scheduled: async (reference) => {
322
+ const chat = chatOf(reference);
323
+ return structuredClone(scheduled.filter((message) => message.chatId === chat.id));
324
+ },
325
+ members: async (reference, window) => {
326
+ const chat = chatOf(reference);
327
+ const ruling = admins.get(chat.id) ?? [];
328
+ const all = (state.members[chat.id] ?? []).map((member) => ({
329
+ ...member,
330
+ role: ruling.includes(member.id) ? "admin" : "member",
331
+ }));
332
+ return { ...page(all, window), chatId: chat.id };
333
+ },
334
+ admins: async (reference) => [...(admins.get(chatOf(reference).id) ?? [])],
335
+ chatEvents: async (reference, { since }) => ({
336
+ chatId: chatOf(reference).id,
337
+ since: new Date(since).toISOString(),
338
+ events: [],
339
+ more: false,
340
+ }),
341
+ sessions: async () => [{ ...THIS_SESSION }],
342
+ lookup: async () => {
343
+ throw missing("person with that phone number");
344
+ },
345
+ addressBook: async () => state.people.filter((person) => contacts.has(person.id)).map(asMember),
346
+ people: async (references) => references.map((reference) => personOf(reference).id),
347
+ createGroup: async (title, people, { channel }) => {
348
+ const chat = {
349
+ id: nextId("chat"),
350
+ title,
351
+ kind: channel ? "channel" : "group",
352
+ unreadCount: 0,
353
+ lastMessageAt: null,
354
+ participantsCount: people.length + 1,
355
+ };
356
+ state.chats.unshift(chat);
357
+ state.members[chat.id] = [ownId(), ...people].map((id) => ({
358
+ id,
359
+ name: state.people.find((person) => person.id === id)?.name ?? null,
360
+ username: null,
361
+ }));
362
+ return cardOf(chat);
363
+ },
364
+ join: async (link) => {
365
+ throw missing(`chat behind ${link}`);
366
+ },
367
+ leave: async (reference) => {
368
+ const chat = chatOf(reference);
369
+ chat.membershipState = "left";
370
+ return { chatId: chat.id };
371
+ },
372
+ group: async (reference) => cardOf(chatOf(reference)),
373
+ updateGroup: async (chatId, change) => {
374
+ const chat = chatOf(chatId);
375
+ const group = groupOf(chat.id);
376
+ if (change.title !== undefined)
377
+ chat.title = change.title;
378
+ if (change.description !== undefined)
379
+ group.description = change.description;
380
+ Object.assign(group.settings, change.settings);
381
+ return cardOf(chat);
382
+ },
383
+ resetInviteLink: async (chatId) => {
384
+ const chat = chatOf(chatId);
385
+ groupOf(chat.id).link = `https://example.invalid/join/${nextId("link")}`;
386
+ return cardOf(chat);
387
+ },
388
+ addMembers: async (chatId, people) => {
389
+ const list = state.members[chatOf(chatId).id] ?? [];
390
+ for (const id of people)
391
+ if (!list.some((member) => member.id === id))
392
+ list.push(asMember(personOf(id)));
393
+ state.members[chatId] = list;
394
+ return { notAdded: [] };
395
+ },
396
+ removeMembers: async (chatId, people) => {
397
+ state.members[chatId] = (state.members[chatOf(chatId).id] ?? []).filter((member) => !people.includes(member.id));
398
+ },
399
+ addAdmin: async (chatId, person) => {
400
+ const list = admins.get(chatOf(chatId).id) ?? [];
401
+ admins.set(chatId, [...new Set([...list, person])]);
402
+ },
403
+ removeAdmin: async (chatId, person) => {
404
+ admins.set(chatId, (admins.get(chatOf(chatId).id) ?? []).filter((id) => id !== person));
405
+ },
406
+ folders: async () => structuredClone(folders),
407
+ createFolder: async (title, chatIds) => {
408
+ const folder = { id: nextId("folder"), title, chatIds: [...chatIds] };
409
+ folders.push(folder);
410
+ return { ...folder };
411
+ },
412
+ updateFolder: async (folderId, change) => {
413
+ const folder = folderOf(folderId);
414
+ if (change.title !== undefined)
415
+ folder.title = change.title;
416
+ folder.chatIds = [...new Set([...folder.chatIds, ...(change.add ?? [])])].filter((id) => !change.remove?.includes(id));
417
+ return { ...folder };
418
+ },
419
+ deleteFolder: async (folderId) => {
420
+ folders.splice(folders.indexOf(folderOf(folderId)), 1);
421
+ },
422
+ addContact: async (personId) => {
423
+ const person = personOf(personId);
424
+ contacts.add(person.id);
425
+ return asMember(person);
426
+ },
427
+ removeContact: async (personId) => {
428
+ contacts.delete(personOf(personId).id);
429
+ },
430
+ block: async (personId) => {
431
+ blocked.add(personOf(personId).id);
432
+ },
433
+ unblock: async (personId) => {
434
+ blocked.delete(personId);
435
+ },
436
+ renameContact: async (personId, firstName, lastName) => {
437
+ const person = personOf(personId);
438
+ person.name = [firstName, lastName].filter(Boolean).join(" ");
439
+ return asMember(person);
440
+ },
441
+ importContacts: async (entries) => entries.flatMap(({ name }) => {
442
+ const person = state.people.find((one) => one.name === name);
443
+ if (!person)
444
+ return [];
445
+ contacts.add(person.id);
446
+ return [asMember(person)];
447
+ }),
448
+ updateProfile: async (change) => {
449
+ const current = { ...account, id: ownId() };
450
+ const name = [change.firstName, change.lastName].filter(Boolean).join(" ");
451
+ account = { ...current, ...(name ? { name } : {}) };
452
+ return { ...account };
453
+ },
454
+ endOtherSessions: async () => [{ ...THIS_SESSION }],
455
+ };
456
+ };
457
+ //# sourceMappingURL=fake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake.js","sourceRoot":"","sources":["../../src/kit/fake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { type ContractCase, type ContractOptions, contractCases, OPTIONAL_METHODS } from "./contract.js";
2
+ export { type FakeAdapter, fakeAdapter } from "./fake.js";
3
+ export { BUSY_PAGE, contractSeed, digitIds, type IdKind, type IdMaker, type Seed, wordIds } from "./seed.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/kit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACxG,OAAO,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { contractCases, OPTIONAL_METHODS } from "./contract.js";
2
+ export { fakeAdapter } from "./fake.js";
3
+ export { BUSY_PAGE, contractSeed, digitIds, wordIds } from "./seed.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/kit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACxG,OAAO,EAAoB,WAAW,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAwC,OAAO,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,38 @@
1
+ import type { Account, Chat, Contact, Id, Member, Message } from "../domain/models.js";
2
+ /** What the shared cases read. An adapter's test puts it into its own fake, by whatever that fake takes. */
3
+ export interface Seed {
4
+ /** `null` is a profile that never logged in. */
5
+ account: Account | null;
6
+ people: Contact[];
7
+ /** Newest activity first, as `chats` lists them. */
8
+ chats: Chat[];
9
+ /** Who is in each chat, by chat id. */
10
+ members: Record<Id, Member[]>;
11
+ /** Every chat's messages, each chat's oldest first. */
12
+ messages: Message[];
13
+ /** A group with more messages than three pages of `BUSY_PAGE`. */
14
+ busy: Id;
15
+ /** A one-to-one chat with `person`. */
16
+ dialog: Id;
17
+ person: Id;
18
+ /** A title two groups share, so a chat named by it is ambiguous. */
19
+ twins: string;
20
+ }
21
+ export type IdKind = "chat" | "message" | "person";
22
+ /** An id for the `n`th thing of a kind; `time` is when a message was sent, for a messenger whose ids carry it. */
23
+ export type IdMaker = (kind: IdKind, n: number, time: Date) => Id;
24
+ export declare const BUSY_PAGE = 3;
25
+ /** Ids that are not numbers, so no code may take them for one. */
26
+ export declare const wordIds: IdMaker;
27
+ /** Whole numbers within 2^53, for a messenger whose store pages by id. */
28
+ export declare const digitIds: IdMaker;
29
+ /**
30
+ * The fixed world the cases expect: the owner, two people, a busy group, a one-to-one chat and two
31
+ * groups with one title. `ids` names everything, so a messenger whose ids have a shape of their own
32
+ * can seed its fake with them.
33
+ */
34
+ export declare const contractSeed: ({ ids, loggedIn }?: {
35
+ ids?: IdMaker;
36
+ loggedIn?: boolean;
37
+ }) => Seed;
38
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/kit/seed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAEtF,4GAA4G;AAC5G,MAAM,WAAW,IAAI;IACnB,gDAAgD;IAChD,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,oDAAoD;IACpD,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAC7B,uDAAuD;IACvD,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,kEAAkE;IAClE,IAAI,EAAE,EAAE,CAAA;IACR,uCAAuC;IACvC,MAAM,EAAE,EAAE,CAAA;IACV,MAAM,EAAE,EAAE,CAAA;IACV,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAA;AAElD,kHAAkH;AAClH,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAA;AAEjE,eAAO,MAAM,SAAS,IAAI,CAAA;AAG1B,kEAAkE;AAClE,eAAO,MAAM,OAAO,EAAE,OAAqC,CAAA;AAE3D,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,EAAE,OAAkF,CAAA;AAIzG;;;;GAIG;AACH,eAAO,MAAM,YAAY,uBAAwC;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,KAAQ,IA2E7G,CAAA"}
@@ -0,0 +1,83 @@
1
+ export const BUSY_PAGE = 3;
2
+ const BUSY_MESSAGES = 10;
3
+ /** Ids that are not numbers, so no code may take them for one. */
4
+ export const wordIds = (kind, n) => `${kind}-${n}`;
5
+ /** Whole numbers within 2^53, for a messenger whose store pages by id. */
6
+ export const digitIds = (kind, n) => String({ person: 100, chat: 200, message: 1000 }[kind] + n);
7
+ const START = Date.parse("2026-09-01T09:00:00.000Z");
8
+ /**
9
+ * The fixed world the cases expect: the owner, two people, a busy group, a one-to-one chat and two
10
+ * groups with one title. `ids` names everything, so a messenger whose ids have a shape of their own
11
+ * can seed its fake with them.
12
+ */
13
+ export const contractSeed = ({ ids = wordIds, loggedIn = true } = {}) => {
14
+ const at = (minute) => new Date(START + minute * 60_000);
15
+ const owner = {
16
+ id: ids("person", 1, at(0)),
17
+ name: "Owner",
18
+ username: "owner",
19
+ description: null,
20
+ lastMessagedAt: null,
21
+ };
22
+ const ann = { ...owner, id: ids("person", 2, at(0)), name: "Ann Lee", username: "ann" };
23
+ const bob = { ...owner, id: ids("person", 3, at(0)), name: "Bob Ray", username: null };
24
+ let messageNumber = 0;
25
+ const message = (chatId, minute, from, text) => {
26
+ messageNumber += 1;
27
+ return {
28
+ id: ids("message", messageNumber, at(minute)),
29
+ chatId,
30
+ senderId: from.id,
31
+ senderName: from.name,
32
+ timestamp: at(minute).toISOString(),
33
+ editedAt: null,
34
+ text,
35
+ outgoing: from.id === owner.id,
36
+ attachments: [],
37
+ replyTo: null,
38
+ forwardedFrom: null,
39
+ reactions: null,
40
+ };
41
+ };
42
+ const group = (n, title, minute) => ({
43
+ id: ids("chat", n, at(0)),
44
+ title,
45
+ kind: "group",
46
+ unreadCount: 0,
47
+ lastMessageAt: at(minute).toISOString(),
48
+ participantsCount: 3,
49
+ });
50
+ const busy = group(1, "Book club", 40);
51
+ const dialog = {
52
+ ...group(2, "Ann Lee", 30),
53
+ kind: "dialog",
54
+ participantsCount: 2,
55
+ unreadCount: 1,
56
+ };
57
+ const twinA = group(3, "Twins", 20);
58
+ const twinB = group(4, "Twins", 10);
59
+ const messages = [
60
+ ...[twinB, twinA].map((chat, index) => message(chat.id, 10 * (index + 1), bob, `hello from ${chat.title}`)),
61
+ message(dialog.id, 29, owner, "are you coming?"),
62
+ message(dialog.id, 30, ann, "yes"),
63
+ ...Array.from({ length: BUSY_MESSAGES }, (_, index) => message(busy.id, 31 + index, [owner, ann, bob][index % 3], `chapter ${index + 1}`)),
64
+ ];
65
+ const everyone = [owner, ann, bob].map(({ id, name, username }) => ({ id, name, username }));
66
+ return {
67
+ account: loggedIn ? { id: owner.id, name: owner.name, username: owner.username } : null,
68
+ people: [{ ...ann, lastMessagedAt: dialog.lastMessageAt }, bob],
69
+ chats: [busy, dialog, twinA, twinB],
70
+ members: {
71
+ [busy.id]: everyone,
72
+ [dialog.id]: everyone.slice(0, 2),
73
+ [twinA.id]: everyone,
74
+ [twinB.id]: everyone,
75
+ },
76
+ messages,
77
+ busy: busy.id,
78
+ dialog: dialog.id,
79
+ person: ann.id,
80
+ twins: "Twins",
81
+ };
82
+ };
83
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/kit/seed.ts"],"names":[],"mappings":"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"}