@leemour/cli-messaging 0.88.0 → 0.90.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.
- package/dist/background/units.d.ts +7 -0
- package/dist/background/units.d.ts.map +1 -1
- package/dist/background/units.js +3 -2
- package/dist/background/units.js.map +1 -1
- package/dist/cli/bot/port.d.ts +29 -0
- package/dist/cli/bot/port.d.ts.map +1 -0
- package/dist/cli/bot/port.js +2 -0
- package/dist/cli/bot/port.js.map +1 -0
- package/dist/cli/bot/registry.d.ts +37 -0
- package/dist/cli/bot/registry.d.ts.map +1 -0
- package/dist/cli/bot/registry.js +94 -0
- package/dist/cli/bot/registry.js.map +1 -0
- package/dist/cli/bot/token.d.ts +25 -0
- package/dist/cli/bot/token.d.ts.map +1 -0
- package/dist/cli/bot/token.js +36 -0
- package/dist/cli/bot/token.js.map +1 -0
- package/dist/cli/index.d.ts +5 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/messenger/after.d.ts +18 -5
- package/dist/cli/messenger/after.d.ts.map +1 -1
- package/dist/cli/messenger/after.js +19 -31
- package/dist/cli/messenger/after.js.map +1 -1
- package/dist/cli/messenger/conversations-command.d.ts +10 -0
- package/dist/cli/messenger/conversations-command.d.ts.map +1 -0
- package/dist/cli/messenger/conversations-command.js +101 -0
- package/dist/cli/messenger/conversations-command.js.map +1 -0
- package/dist/cli/messenger/messages-command.d.ts.map +1 -1
- package/dist/cli/messenger/messages-command.js +6 -7
- package/dist/cli/messenger/messages-command.js.map +1 -1
- package/dist/cli/messenger/server-command.d.ts +37 -6
- package/dist/cli/messenger/server-command.d.ts.map +1 -1
- package/dist/cli/messenger/server-command.js +114 -64
- package/dist/cli/messenger/server-command.js.map +1 -1
- package/dist/cli/messenger/store-maintenance-command.d.ts.map +1 -1
- package/dist/cli/messenger/store-maintenance-command.js +34 -0
- package/dist/cli/messenger/store-maintenance-command.js.map +1 -1
- package/dist/conversations/link.d.ts +2 -2
- package/dist/conversations/link.d.ts.map +1 -1
- package/dist/conversations/link.js +6 -4
- package/dist/conversations/link.js.map +1 -1
- package/dist/domain/models.d.ts +2 -0
- package/dist/domain/models.d.ts.map +1 -1
- package/dist/mcp/confirm.js +1 -1
- package/dist/mcp/confirm.js.map +1 -1
- package/dist/mcp/tool.d.ts +2 -0
- package/dist/mcp/tool.d.ts.map +1 -1
- package/dist/mcp/tool.js +2 -0
- package/dist/mcp/tool.js.map +1 -1
- package/dist/mcp/tools/chats.d.ts.map +1 -1
- package/dist/mcp/tools/chats.js +13 -8
- package/dist/mcp/tools/chats.js.map +1 -1
- package/dist/mcp/tools/conversations.d.ts +5 -0
- package/dist/mcp/tools/conversations.d.ts.map +1 -0
- package/dist/mcp/tools/conversations.js +56 -0
- package/dist/mcp/tools/conversations.js.map +1 -0
- package/dist/mcp/tools/inbox.js +3 -3
- package/dist/mcp/tools/inbox.js.map +1 -1
- package/dist/mcp/tools/messages-actions.js +2 -2
- package/dist/mcp/tools/messages-actions.js.map +1 -1
- package/dist/mcp/tools/messages-send.js +4 -4
- package/dist/mcp/tools/messages-send.js.map +1 -1
- package/dist/mcp/tools/messages.d.ts.map +1 -1
- package/dist/mcp/tools/messages.js +25 -18
- package/dist/mcp/tools/messages.js.map +1 -1
- package/dist/mcp/tools/review.d.ts.map +1 -1
- package/dist/mcp/tools/review.js +3 -3
- package/dist/mcp/tools/review.js.map +1 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +2 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/parity/bin.js +15 -2
- package/dist/parity/bin.js.map +1 -1
- package/dist/parity/index.d.ts +1 -0
- package/dist/parity/index.d.ts.map +1 -1
- package/dist/parity/index.js +1 -0
- package/dist/parity/index.js.map +1 -1
- package/dist/parity/wording.d.ts +7 -0
- package/dist/parity/wording.d.ts.map +1 -0
- package/dist/parity/wording.js +31 -0
- package/dist/parity/wording.js.map +1 -0
- package/dist/sends/permissions.js +1 -1
- package/dist/sends/permissions.js.map +1 -1
- package/dist/services/conversations.d.ts +45 -0
- package/dist/services/conversations.d.ts.map +1 -0
- package/dist/services/conversations.js +92 -0
- package/dist/services/conversations.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +3 -0
- package/dist/services/index.js.map +1 -1
- package/dist/store/sqlite/conversations.d.ts +45 -0
- package/dist/store/sqlite/conversations.d.ts.map +1 -0
- package/dist/store/sqlite/conversations.js +309 -0
- package/dist/store/sqlite/conversations.js.map +1 -0
- package/dist/store/sqlite/messages.d.ts.map +1 -1
- package/dist/store/sqlite/messages.js +2 -0
- package/dist/store/sqlite/messages.js.map +1 -1
- package/dist/store/sqlite/reads.d.ts +50 -0
- package/dist/store/sqlite/reads.d.ts.map +1 -1
- package/dist/store/sqlite/reads.js +2 -1
- package/dist/store/sqlite/reads.js.map +1 -1
- package/dist/store/sqlite/search.d.ts +33 -0
- package/dist/store/sqlite/search.d.ts.map +1 -1
- package/dist/store/store.d.ts +70 -0
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +46 -0
- package/dist/store/store.js.map +1 -1
- package/package.json +1 -1
- package/parity.json +47 -21
|
@@ -9,6 +9,13 @@ export interface Unit {
|
|
|
9
9
|
/** What the unit runs, and the variables it runs with. */
|
|
10
10
|
command: string[];
|
|
11
11
|
environment: Record<string, string>;
|
|
12
|
+
/** What the server does, for `systemctl status` and the agent list. */
|
|
13
|
+
purpose?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Exit codes that must not start it again — a refused login retried every 30 s is a login per
|
|
16
|
+
* retry. launchd cannot leave out single codes, so with any of these its agent does not restart.
|
|
17
|
+
*/
|
|
18
|
+
noRestartOn?: number[];
|
|
12
19
|
}
|
|
13
20
|
/**
|
|
14
21
|
* Only the variables that say **where** the files are travel into the unit: a unit written from a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/background/units.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/background/units.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE/C,MAAM,WAAW,IAAI;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAS,WAAW,OAAO,MAAM,CAAC,UAAU,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAOjG,CAAA;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,IAAI,CAAA;IACjD,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,KAAK,MAAM,CAAA;IAC9C,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,EAAE,CAAA;IACjC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,EAAE,CAAA;IAChC,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACnG,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACpD,kDAAkD;IAClD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAA;IAC9B,+CAA+C;IAC/C,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;CAChC;AAaD,eAAO,MAAM,OAAO,QAAS,WAAW,UAAU,YAAY,OAAO,MAAM,CAAC,UAAU,KAAG,QAoExF,CAAA;AAID,eAAO,MAAM,OAAO,QAAS,WAAW,UAAU,YAAY,OAAO,MAAM,CAAC,UAAU,KAAG,QAgExF,CAAA;AAED,eAAO,MAAM,IAAI,SAAU,MAAM,GAAG,SAAS,SAAS,MAAM,KAAG,MACyD,CAAA;AAExH,4GAA4G;AAC5G,eAAO,MAAM,OAAO,QAAS,WAAW,UAAU,YAAY,KAAG,QAgBhE,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,WAAW,UAAU,YAAY,OAAO,MAAM,CAAC,UAAU,KAAG,QAI5F,CAAA"}
|
package/dist/background/units.js
CHANGED
|
@@ -39,13 +39,14 @@ export const systemd = (app, system, env) => {
|
|
|
39
39
|
},
|
|
40
40
|
text: (unit) => [
|
|
41
41
|
"[Unit]",
|
|
42
|
-
`Description=${app.command} serve — keep the local message archive current (profile ${unit.profile})`,
|
|
42
|
+
`Description=${app.command} serve — ${unit.purpose ?? "keep the local message archive current"} (profile ${unit.profile})`,
|
|
43
43
|
"",
|
|
44
44
|
"[Service]",
|
|
45
45
|
`ExecStart=${unit.command.map((word) => systemdQuote(word, { command: true })).join(" ")}`,
|
|
46
46
|
...Object.entries(unit.environment).map(([name, value]) => `Environment=${systemdQuote(`${name}=${value}`)}`),
|
|
47
47
|
"Restart=on-failure",
|
|
48
48
|
"RestartSec=30",
|
|
49
|
+
...(unit.noRestartOn?.length ? [`RestartPreventExitStatus=${unit.noRestartOn.join(" ")}`] : []),
|
|
49
50
|
"",
|
|
50
51
|
"[Install]",
|
|
51
52
|
"WantedBy=default.target",
|
|
@@ -113,7 +114,7 @@ export const launchd = (app, system, env) => {
|
|
|
113
114
|
// launchd loads every agent here at login; disabled, it waits for `server start` to enable it.
|
|
114
115
|
" <key>Disabled</key><true/>",
|
|
115
116
|
" <key>RunAtLoad</key><true/>",
|
|
116
|
-
" <key>KeepAlive</key><dict><key>SuccessfulExit</key><false/></dict>",
|
|
117
|
+
...(unit.noRestartOn?.length ? [] : [" <key>KeepAlive</key><dict><key>SuccessfulExit</key><false/></dict>"]),
|
|
117
118
|
" <key>ThrottleInterval</key><integer>30</integer>",
|
|
118
119
|
` <key>StandardOutPath</key><string>${xml(unit.logPath ?? "")}</string>`,
|
|
119
120
|
` <key>StandardErrorPath</key><string>${xml(unit.logPath ?? "")}</string>`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/background/units.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../src/background/units.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
import type { Provider } from "../../domain/models.js";
|
|
3
|
+
import type { AppIdentity } from "../app.js";
|
|
4
|
+
import type { MessengerCore } from "../messenger/port.js";
|
|
5
|
+
import type { GlobalFlags, ResolveOptions, Settings } from "../settings.js";
|
|
6
|
+
import type { ChatRegistry } from "./registry.js";
|
|
7
|
+
import type { BotTokenStore } from "./token.js";
|
|
8
|
+
/**
|
|
9
|
+
* The part of the personal core a bot can do. It grows as bot commands move here; a bot never gets
|
|
10
|
+
* `chats` or `history` from this type, because neither Bot API lists a bot's chats.
|
|
11
|
+
*/
|
|
12
|
+
export type BotAdapter = Pick<MessengerCore, "me" | "close">;
|
|
13
|
+
/** What one messenger CLI hands the shared bot commands. */
|
|
14
|
+
export interface BotMessenger {
|
|
15
|
+
app: AppIdentity;
|
|
16
|
+
/** How the store tells this messenger's bots from its personal accounts: `max-bot`, `telegram-bot`. */
|
|
17
|
+
provider: Provider;
|
|
18
|
+
/** The messenger's own name, as its users write it — `MAX`, `Telegram`. */
|
|
19
|
+
name?: string;
|
|
20
|
+
/** Called with `kind: "bot"`. */
|
|
21
|
+
resolveSettings: (flags: GlobalFlags, options?: ResolveOptions) => Settings;
|
|
22
|
+
/** A client for this token; `stop` ends a command that runs until told to, and its request in flight. */
|
|
23
|
+
connect: (command: Command, token: string, stop?: AbortSignal) => Promise<BotAdapter>;
|
|
24
|
+
/** Where the token lives; the shared `BotTokenStore` when unset. A CLI's tests put their own here. */
|
|
25
|
+
tokenStore?: (command: Command, profile: string) => BotTokenStore;
|
|
26
|
+
/** The chats the bot has seen; the shared `ChatRegistry` when unset. */
|
|
27
|
+
registry?: (command: Command, profile: string) => ChatRegistry;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,OAAO,CAAC,CAAA;AAE5D,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,WAAW,CAAA;IAChB,uGAAuG;IACvG,QAAQ,EAAE,QAAQ,CAAA;IAClB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iCAAiC;IACjC,eAAe,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,QAAQ,CAAA;IAC3E,yGAAyG;IACzG,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA;IACrF,sGAAsG;IACtG,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,aAAa,CAAA;IACjE,wEAAwE;IACxE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,YAAY,CAAA;CAC/D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../../src/cli/bot/port.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Chat } from "../../domain/models.js";
|
|
2
|
+
import type { AppIdentity } from "../app.js";
|
|
3
|
+
export interface SeenChat extends Chat {
|
|
4
|
+
firstSeenAt: string;
|
|
5
|
+
lastSeenAt: string;
|
|
6
|
+
}
|
|
7
|
+
/** Everything this machine keeps about its bots: seen chats, recipients, the send journal. */
|
|
8
|
+
export declare const botsDirectory: (app: AppIdentity, env?: NodeJS.ProcessEnv) => string;
|
|
9
|
+
/** One bot's files. The names are what max-cli has always used: a moved path would lose a recipient list, and with it the limit. */
|
|
10
|
+
export declare const botFiles: (app: AppIdentity, profile: string, env?: NodeJS.ProcessEnv) => {
|
|
11
|
+
registry: string;
|
|
12
|
+
recipients: string;
|
|
13
|
+
journal: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The chats this bot has seen, because neither MAX's nor Telegram's Bot API has a call that lists them.
|
|
17
|
+
*
|
|
18
|
+
* State, not cache: the messenger cannot give it back, so clearing a cache must not take it. Titles
|
|
19
|
+
* are in it, hence 0600.
|
|
20
|
+
*/
|
|
21
|
+
export declare class ChatRegistry {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(app: AppIdentity, profile: string, env?: NodeJS.ProcessEnv);
|
|
24
|
+
list(): SeenChat[];
|
|
25
|
+
/** The bot's own user id, once any command has learned it — the key its messages are stored under. */
|
|
26
|
+
botId(): string | undefined;
|
|
27
|
+
rememberBot(id: string): void;
|
|
28
|
+
/** Makes this bot known to `bot list` before it has seen any chat. */
|
|
29
|
+
touch(): void;
|
|
30
|
+
/** Newer facts win; a chat seen only as an id keeps the title it had. */
|
|
31
|
+
observe(chats: readonly (Partial<Chat> & {
|
|
32
|
+
id: string;
|
|
33
|
+
})[], now?: Date): void;
|
|
34
|
+
}
|
|
35
|
+
/** Every profile that has ever kept a registry — the bots this machine has used. */
|
|
36
|
+
export declare const registryProfiles: (app: AppIdentity, env?: NodeJS.ProcessEnv) => string[];
|
|
37
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAE5C,MAAM,WAAW,QAAS,SAAQ,IAAI;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,8FAA8F;AAC9F,eAAO,MAAM,aAAa,QAAS,WAAW,QAAO,MAAM,CAAC,UAAU,KAAiB,MACC,CAAA;AAExF,oIAAoI;AACpI,eAAO,MAAM,QAAQ,QAAS,WAAW,WAAW,MAAM,QAAO,MAAM,CAAC,UAAU;IAG9E,QAAQ;IACR,UAAU;IACV,OAAO;CAEV,CAAA;AAED;;;;;GAKG;AACH,qBAAa,YAAY;;IAGvB,YAAY,GAAG,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,EAElF;IAED,IAAI,IAAI,QAAQ,EAAE,CAGjB;IAED,sGAAsG;IACtG,KAAK,IAAI,MAAM,GAAG,SAAS,CAG1B;IAED,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAG5B;IAED,sEAAsE;IACtE,KAAK,IAAI,IAAI,CAEZ;IAED,yEAAyE;IACzE,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI,CAuBxF;CAeF;AAED,oFAAoF;AACpF,eAAO,MAAM,gBAAgB,QAAS,WAAW,QAAO,MAAM,CAAC,UAAU,KAAiB,MAAM,EAO/F,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { resolvePaths, writeSecurely } from "@leemour/cli-core";
|
|
4
|
+
/** Everything this machine keeps about its bots: seen chats, recipients, the send journal. */
|
|
5
|
+
export const botsDirectory = (app, env = process.env) => join(resolvePaths({ appName: app.appName, prefix: app.envPrefix, env }).state, "bots");
|
|
6
|
+
/** One bot's files. The names are what max-cli has always used: a moved path would lose a recipient list, and with it the limit. */
|
|
7
|
+
export const botFiles = (app, profile, env = process.env) => {
|
|
8
|
+
const directory = botsDirectory(app, env);
|
|
9
|
+
return {
|
|
10
|
+
registry: join(directory, `${profile}.json`),
|
|
11
|
+
recipients: join(directory, "recipients", `${profile}.json`),
|
|
12
|
+
journal: join(directory, "sends", `${profile}.jsonl`),
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The chats this bot has seen, because neither MAX's nor Telegram's Bot API has a call that lists them.
|
|
17
|
+
*
|
|
18
|
+
* State, not cache: the messenger cannot give it back, so clearing a cache must not take it. Titles
|
|
19
|
+
* are in it, hence 0600.
|
|
20
|
+
*/
|
|
21
|
+
export class ChatRegistry {
|
|
22
|
+
#path;
|
|
23
|
+
constructor(app, profile, env = process.env) {
|
|
24
|
+
this.#path = botFiles(app, profile, env).registry;
|
|
25
|
+
}
|
|
26
|
+
list() {
|
|
27
|
+
const { chats } = this.#read();
|
|
28
|
+
return Array.isArray(chats) ? chats : [];
|
|
29
|
+
}
|
|
30
|
+
/** The bot's own user id, once any command has learned it — the key its messages are stored under. */
|
|
31
|
+
botId() {
|
|
32
|
+
const { botId } = this.#read();
|
|
33
|
+
return typeof botId === "string" ? botId : undefined;
|
|
34
|
+
}
|
|
35
|
+
rememberBot(id) {
|
|
36
|
+
const file = this.#read();
|
|
37
|
+
if (file.botId !== id)
|
|
38
|
+
this.#write({ ...file, botId: id });
|
|
39
|
+
}
|
|
40
|
+
/** Makes this bot known to `bot list` before it has seen any chat. */
|
|
41
|
+
touch() {
|
|
42
|
+
if (!existsSync(this.#path))
|
|
43
|
+
writeSecurely(this.#path, `${JSON.stringify({ chats: [] }, null, 2)}\n`, 0o600);
|
|
44
|
+
}
|
|
45
|
+
/** Newer facts win; a chat seen only as an id keeps the title it had. */
|
|
46
|
+
observe(chats, now = new Date()) {
|
|
47
|
+
if (chats.length === 0)
|
|
48
|
+
return;
|
|
49
|
+
const byId = new Map(this.list().map((chat) => [chat.id, chat]));
|
|
50
|
+
const at = now.toISOString();
|
|
51
|
+
for (const chat of chats) {
|
|
52
|
+
const known = byId.get(chat.id);
|
|
53
|
+
const defined = Object.fromEntries(Object.entries(chat).filter(([, value]) => value !== undefined && value !== null));
|
|
54
|
+
byId.set(chat.id, {
|
|
55
|
+
title: null,
|
|
56
|
+
kind: "unknown",
|
|
57
|
+
unreadCount: null,
|
|
58
|
+
lastMessageAt: null,
|
|
59
|
+
participantsCount: null,
|
|
60
|
+
...known,
|
|
61
|
+
...defined,
|
|
62
|
+
id: chat.id,
|
|
63
|
+
firstSeenAt: known?.firstSeenAt ?? at,
|
|
64
|
+
lastSeenAt: at,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
this.#write({ ...this.#read(), chats: [...byId.values()] });
|
|
68
|
+
}
|
|
69
|
+
#read() {
|
|
70
|
+
if (!existsSync(this.#path))
|
|
71
|
+
return {};
|
|
72
|
+
try {
|
|
73
|
+
const parsed = JSON.parse(readFileSync(this.#path, "utf8"));
|
|
74
|
+
return parsed && typeof parsed === "object" ? parsed : {};
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return {};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
#write(file) {
|
|
81
|
+
writeSecurely(this.#path, `${JSON.stringify(file, null, 2)}\n`, 0o600);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** Every profile that has ever kept a registry — the bots this machine has used. */
|
|
85
|
+
export const registryProfiles = (app, env = process.env) => {
|
|
86
|
+
const directory = botsDirectory(app, env);
|
|
87
|
+
if (!existsSync(directory))
|
|
88
|
+
return [];
|
|
89
|
+
return readdirSync(directory, { withFileTypes: true })
|
|
90
|
+
.filter((entry) => entry.isFile() && entry.name.endsWith(".json"))
|
|
91
|
+
.map((entry) => entry.name)
|
|
92
|
+
.map((name) => name.slice(0, -".json".length));
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/cli/bot/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAS/D,8FAA8F;AAC9F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAgB,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAU,EAAE,CAC9F,IAAI,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;AAExF,oIAAoI;AACpI,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAgB,EAAE,OAAe,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAE,EAAE;IAClG,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACzC,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,OAAO,OAAO,CAAC;QAC5C,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,OAAO,CAAC;QAC5D,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,QAAQ,CAAC;KACtD,CAAA;AACH,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,OAAO,YAAY;IACd,KAAK,CAAQ;IAEtB,YAAY,GAAgB,EAAE,OAAe,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG;QACjF,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAA;IACnD,CAAC;IAED,IAAI;QACF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAC1C,CAAC;IAED,sGAAsG;IACtG,KAAK;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;IACtD,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;IAC5D,CAAC;IAED,sEAAsE;IACtE,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC9G,CAAC;IAED,yEAAyE;IACzE,OAAO,CAAC,KAAkD,EAAE,GAAG,GAAS,IAAI,IAAI,EAAE;QAChF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAA;QAChE,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;QAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAChC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAClF,CAAA;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE;gBAChB,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,IAAI;gBACjB,aAAa,EAAE,IAAI;gBACnB,iBAAiB,EAAE,IAAI;gBACvB,GAAG,KAAK;gBACR,GAAG,OAAO;gBACV,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,EAAE;gBACrC,UAAU,EAAE,EAAE;aACf,CAAC,CAAA;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAA;QACtC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;YAC3D,OAAO,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACxE,CAAC;CACF;AAED,oFAAoF;AACpF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAgB,EAAE,GAAG,GAAsB,OAAO,CAAC,GAAG,EAAY,EAAE;IACnG,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACzC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,CAAA;IACrC,OAAO,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SACnD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACjE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AAClD,CAAC,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type CredentialSource, type KeyringStore } from "@leemour/cli-core";
|
|
2
|
+
import { type AppIdentity } from "../app.js";
|
|
3
|
+
export interface BotTokenStoreOptions {
|
|
4
|
+
app: AppIdentity;
|
|
5
|
+
profile: string;
|
|
6
|
+
env?: NodeJS.ProcessEnv;
|
|
7
|
+
keyring?: KeyringStore;
|
|
8
|
+
configDir?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A bot token per profile, beside — never inside — the personal session: keyring account
|
|
12
|
+
* `bot:<profile>` under the app's own service, `<PREFIX>_BOT_TOKEN`, then a 0600 file.
|
|
13
|
+
*/
|
|
14
|
+
export declare class BotTokenStore {
|
|
15
|
+
#private;
|
|
16
|
+
readonly profile: string;
|
|
17
|
+
constructor({ app, profile, env, keyring, configDir }: BotTokenStoreOptions);
|
|
18
|
+
read(): {
|
|
19
|
+
token: string;
|
|
20
|
+
source: CredentialSource;
|
|
21
|
+
} | undefined;
|
|
22
|
+
write(token: string): CredentialSource;
|
|
23
|
+
remove(): CredentialSource[];
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/token.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,gBAAgB,EAErB,KAAK,YAAY,EAGlB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAA;AAErD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,WAAW,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,qBAAa,aAAa;;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAIxB,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,GAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,oBAAoB,EAaxF;IAED,IAAI,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAA;KAAE,GAAG,SAAS,CAG9D;IAED,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAErC;IAED,MAAM,IAAI,gBAAgB,EAAE,CAE3B;CACF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Credentials, pathsAreOverridden, resolvePaths, } from "@leemour/cli-core";
|
|
2
|
+
import { envName } from "../app.js";
|
|
3
|
+
/**
|
|
4
|
+
* A bot token per profile, beside — never inside — the personal session: keyring account
|
|
5
|
+
* `bot:<profile>` under the app's own service, `<PREFIX>_BOT_TOKEN`, then a 0600 file.
|
|
6
|
+
*/
|
|
7
|
+
export class BotTokenStore {
|
|
8
|
+
profile;
|
|
9
|
+
#account;
|
|
10
|
+
#credentials;
|
|
11
|
+
constructor({ app, profile, env = process.env, keyring, configDir }) {
|
|
12
|
+
const where = { appName: app.appName, prefix: app.envPrefix, env };
|
|
13
|
+
this.profile = profile;
|
|
14
|
+
this.#account = `bot:${profile}`;
|
|
15
|
+
this.#credentials = new Credentials({
|
|
16
|
+
configDir: configDir ?? resolvePaths(where).config,
|
|
17
|
+
service: app.appName,
|
|
18
|
+
envVar: envName(app, "BOT_TOKEN"),
|
|
19
|
+
isolated: pathsAreOverridden(where),
|
|
20
|
+
...(keyring ? { keyring } : {}),
|
|
21
|
+
env,
|
|
22
|
+
warn: (message) => process.stderr.write(`${message}\n`),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
read() {
|
|
26
|
+
const stored = this.#credentials.read(this.#account);
|
|
27
|
+
return stored ? { token: stored.secret, source: stored.source } : undefined;
|
|
28
|
+
}
|
|
29
|
+
write(token) {
|
|
30
|
+
return this.#credentials.write(this.#account, token);
|
|
31
|
+
}
|
|
32
|
+
remove() {
|
|
33
|
+
return this.#credentials.remove(this.#account);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/cli/bot/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,EAEX,kBAAkB,EAClB,YAAY,GACb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAoB,OAAO,EAAE,MAAM,WAAW,CAAA;AAUrD;;;GAGG;AACH,MAAM,OAAO,aAAa;IACf,OAAO,CAAQ;IACf,QAAQ,CAAQ;IAChB,YAAY,CAAa;IAElC,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAwB;QACvF,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAA;QAClE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,OAAO,OAAO,EAAE,CAAA;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC;YAClC,SAAS,EAAE,SAAS,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM;YAClD,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC;YACjC,QAAQ,EAAE,kBAAkB,CAAC,KAAK,CAAC;YACnC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/B,GAAG;YACH,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC;SACxD,CAAC,CAAA;IACJ,CAAC;IAED,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpD,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IAC7E,CAAC;IAED,KAAK,CAAC,KAAa;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACtD,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAChD,CAAC;CACF"}
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -3,6 +3,9 @@ export { INBOX_CHATS, newIn, REVIEW_CHATS, reviewIn, unanswered, unreadIn } from
|
|
|
3
3
|
export { momentOf } from "../services/moment.js";
|
|
4
4
|
export { maskedAccount } from "../services/people.js";
|
|
5
5
|
export { type AppIdentity, envName } from "./app.js";
|
|
6
|
+
export type { BotAdapter, BotMessenger } from "./bot/port.js";
|
|
7
|
+
export { botFiles, botsDirectory, ChatRegistry, registryProfiles, type SeenChat } from "./bot/registry.js";
|
|
8
|
+
export { BotTokenStore, type BotTokenStoreOptions } from "./bot/token.js";
|
|
6
9
|
export { CONTRACT, commandsCommand } from "./commands-command.js";
|
|
7
10
|
export { configCommand } from "./config-command.js";
|
|
8
11
|
export { type BaseContext, type BaseEnvironment, baseContext, environmentOf, outputFor, provide, } from "./context.js";
|
|
@@ -16,6 +19,7 @@ export { markReadCommand } from "./messenger/chats-read-command.js";
|
|
|
16
19
|
export { completeCommand } from "./messenger/complete-command.js";
|
|
17
20
|
export { contactsCommand } from "./messenger/contacts-command.js";
|
|
18
21
|
export { type ConnectOptions, type Fetching, type Messenger, type MessengerContext, messengerContext, } from "./messenger/context.js";
|
|
22
|
+
export { conversationsCommand } from "./messenger/conversations-command.js";
|
|
19
23
|
export { doctorCommand } from "./messenger/doctor-command.js";
|
|
20
24
|
export { recipientsCommand, sendsCommand } from "./messenger/guard-commands.js";
|
|
21
25
|
export { inboxCommand } from "./messenger/inbox.js";
|
|
@@ -31,7 +35,7 @@ export type { AccountTools, After, ChatReading, Download, GroupModeration, LiveU
|
|
|
31
35
|
export { reactionsCommand } from "./messenger/reactions-command.js";
|
|
32
36
|
export { reviewCommand } from "./messenger/review.js";
|
|
33
37
|
export { serveCommand, servingProfiles } from "./messenger/serve-command.js";
|
|
34
|
-
export { type ServerSystem, serverCommand } from "./messenger/server-command.js";
|
|
38
|
+
export { type Running, type ServerOptions, type ServerProcess, type ServerSystem, serverCommand, } from "./messenger/server-command.js";
|
|
35
39
|
export { topicsCommand } from "./messenger/topics-command.js";
|
|
36
40
|
export { watchCommand } from "./messenger/watch-command.js";
|
|
37
41
|
export { listed, renderList, renderPage, window, withPaging } from "./paging.js";
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACvG,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,KAAK,WAAW,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,WAAW,EACX,aAAa,EACb,SAAS,EACT,OAAO,GACR,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,KAAK,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,gBAAgB,GACjB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,KAAK,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACzF,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAA;AACxE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,YAAY,EACV,YAAY,EACZ,KAAK,EACL,WAAW,EACX,QAAQ,EACR,eAAe,EACf,WAAW,EACX,cAAc,EACd,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,OAAO,EACP,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,IAAI,EACJ,UAAU,GACX,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC5E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -3,6 +3,8 @@ export { INBOX_CHATS, newIn, REVIEW_CHATS, reviewIn, unanswered, unreadIn } from
|
|
|
3
3
|
export { momentOf } from "../services/moment.js";
|
|
4
4
|
export { maskedAccount } from "../services/people.js";
|
|
5
5
|
export { envName } from "./app.js";
|
|
6
|
+
export { botFiles, botsDirectory, ChatRegistry, registryProfiles } from "./bot/registry.js";
|
|
7
|
+
export { BotTokenStore } from "./bot/token.js";
|
|
6
8
|
export { CONTRACT, commandsCommand } from "./commands-command.js";
|
|
7
9
|
export { configCommand } from "./config-command.js";
|
|
8
10
|
export { baseContext, environmentOf, outputFor, provide, } from "./context.js";
|
|
@@ -16,6 +18,7 @@ export { markReadCommand } from "./messenger/chats-read-command.js";
|
|
|
16
18
|
export { completeCommand } from "./messenger/complete-command.js";
|
|
17
19
|
export { contactsCommand } from "./messenger/contacts-command.js";
|
|
18
20
|
export { messengerContext, } from "./messenger/context.js";
|
|
21
|
+
export { conversationsCommand } from "./messenger/conversations-command.js";
|
|
19
22
|
export { doctorCommand } from "./messenger/doctor-command.js";
|
|
20
23
|
export { recipientsCommand, sendsCommand } from "./messenger/guard-commands.js";
|
|
21
24
|
export { inboxCommand } from "./messenger/inbox.js";
|
|
@@ -30,7 +33,7 @@ export { pollsCommand } from "./messenger/polls-command.js";
|
|
|
30
33
|
export { reactionsCommand } from "./messenger/reactions-command.js";
|
|
31
34
|
export { reviewCommand } from "./messenger/review.js";
|
|
32
35
|
export { serveCommand, servingProfiles } from "./messenger/serve-command.js";
|
|
33
|
-
export { serverCommand } from "./messenger/server-command.js";
|
|
36
|
+
export { serverCommand, } from "./messenger/server-command.js";
|
|
34
37
|
export { topicsCommand } from "./messenger/topics-command.js";
|
|
35
38
|
export { watchCommand } from "./messenger/watch-command.js";
|
|
36
39
|
export { listed, renderList, renderPage, window, withPaging } from "./paging.js";
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACvG,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAoB,OAAO,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,20 @@
|
|
|
1
1
|
import type { After } from "./port.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
export interface ListStart {
|
|
3
|
+
beforeId?: string;
|
|
4
|
+
beforeTime?: string;
|
|
5
|
+
afterId?: string;
|
|
6
|
+
afterTime?: string;
|
|
7
|
+
}
|
|
8
|
+
/** How each starting point is spelled where it was typed: `--before-id` on the command line, `before_id` in MCP. */
|
|
9
|
+
export type Spell = (key: keyof ListStart) => string;
|
|
10
|
+
export declare const flagOf: Spell;
|
|
11
|
+
/**
|
|
12
|
+
* A list reads one way from one place: at most one starting point. Ids are opaque to us, so
|
|
13
|
+
* `afterId` is never read as a time, however it looks.
|
|
14
|
+
*/
|
|
15
|
+
export declare const listStart: (start: ListStart, spell?: Spell) => {
|
|
16
|
+
after?: After;
|
|
17
|
+
before?: string;
|
|
18
|
+
beforeTime?: number;
|
|
19
|
+
};
|
|
7
20
|
//# sourceMappingURL=after.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"after.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/after.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAEtC,
|
|
1
|
+
{"version":3,"file":"after.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/after.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AAEtC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,oHAAoH;AACpH,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,MAAM,SAAS,KAAK,MAAM,CAAA;AAEpD,eAAO,MAAM,MAAM,EAAE,KAAqF,CAAA;AAI1G;;;GAGG;AACH,eAAO,MAAM,SAAS,UACb,SAAS,UACT,KAAK,KACX;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAgBvD,CAAA"}
|
|
@@ -1,39 +1,27 @@
|
|
|
1
1
|
import { CliError } from "@leemour/cli-core";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export const afterOf = (reference, flag = "--after") => {
|
|
5
|
-
const wanted = reference.trim();
|
|
6
|
-
if (isMoment(wanted))
|
|
7
|
-
return { time: momentOf(wanted, flag) };
|
|
8
|
-
if (!isId(wanted)) {
|
|
9
|
-
throw new CliError("validation_error", `${flag} takes a message id, an ISO 8601 time or 30m, 2h, 1d ago — not "${wanted}"`);
|
|
10
|
-
}
|
|
11
|
-
return { id: wanted };
|
|
12
|
-
};
|
|
2
|
+
import { momentOf } from "../../services/moment.js";
|
|
3
|
+
export const flagOf = (key) => `--${key.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`)}`;
|
|
13
4
|
const isId = (value) => value !== "" && !/[\s\p{Cc}]/u.test(value);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export const listStart = (beforeId, afterId, afterTime, beforeTime) => {
|
|
21
|
-
const given = [
|
|
22
|
-
beforeId === undefined ? undefined : "--before-id",
|
|
23
|
-
beforeTime === undefined ? undefined : "--before-time",
|
|
24
|
-
afterId === undefined ? undefined : "--after-id",
|
|
25
|
-
afterTime === undefined ? undefined : "--after-time",
|
|
26
|
-
].filter((flag) => flag !== undefined);
|
|
5
|
+
/**
|
|
6
|
+
* A list reads one way from one place: at most one starting point. Ids are opaque to us, so
|
|
7
|
+
* `afterId` is never read as a time, however it looks.
|
|
8
|
+
*/
|
|
9
|
+
export const listStart = (start, spell = flagOf) => {
|
|
10
|
+
const given = Object.keys(start).filter((key) => start[key] !== undefined);
|
|
27
11
|
if (given.length > 1) {
|
|
28
|
-
throw new CliError("validation_error", `${given.join(" and ")} are two starting points; give one of them`);
|
|
12
|
+
throw new CliError("validation_error", `${given.map(spell).join(" and ")} are two starting points; give one of them`);
|
|
29
13
|
}
|
|
14
|
+
const { beforeId, beforeTime, afterId, afterTime } = start;
|
|
15
|
+
if (beforeTime !== undefined)
|
|
16
|
+
return { beforeTime: momentOf(beforeTime, spell("beforeTime")) };
|
|
30
17
|
if (afterTime !== undefined)
|
|
31
|
-
return { time: momentOf(afterTime, "
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
18
|
+
return { after: { time: momentOf(afterTime, spell("afterTime")) } };
|
|
19
|
+
const id = (beforeId ?? afterId)?.trim();
|
|
20
|
+
if (id === undefined)
|
|
21
|
+
return {};
|
|
22
|
+
const key = beforeId === undefined ? "afterId" : "beforeId";
|
|
35
23
|
if (!isId(id))
|
|
36
|
-
throw new CliError("validation_error",
|
|
37
|
-
return { id };
|
|
24
|
+
throw new CliError("validation_error", `${spell(key)} takes a message id — not "${start[key]}"`);
|
|
25
|
+
return key === "beforeId" ? { before: id } : { after: { id } };
|
|
38
26
|
};
|
|
39
27
|
//# sourceMappingURL=after.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"after.js","sourceRoot":"","sources":["../../../src/cli/messenger/after.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"after.js","sourceRoot":"","sources":["../../../src/cli/messenger/after.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAanD,MAAM,CAAC,MAAM,MAAM,GAAU,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAA;AAE1G,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAE1E;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,KAAgB,EAChB,KAAK,GAAU,MAAM,EACoC,EAAE;IAC3D,MAAM,KAAK,GAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAyB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAA;IACnG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,QAAQ,CAChB,kBAAkB,EAClB,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,4CAA4C,CAC9E,CAAA;IACH,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC1D,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAA;IAC9F,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,CAAA;IAChG,MAAM,EAAE,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,CAAA;IACxC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAC/B,MAAM,GAAG,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;IAC3D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,8BAA8B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC/G,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;AAChE,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { type Messenger } from "./context.js";
|
|
3
|
+
/**
|
|
4
|
+
* `conversations`: the threads inside a group chat, found by rules over the stored messages — replies,
|
|
5
|
+
* mentions, one sender's messages in a row. From the store alone; nothing is built until asked (phase 3).
|
|
6
|
+
*/
|
|
7
|
+
export declare const conversationsCommand: (messenger: Messenger) => Command;
|
|
8
|
+
/** `messages links`: why a message sits where it does in its conversation. */
|
|
9
|
+
export declare const linksCommand: (messenger: Messenger) => Command;
|
|
10
|
+
//# sourceMappingURL=conversations-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conversations-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/conversations-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAKnC,OAAO,EAAE,KAAK,SAAS,EAAoB,MAAM,cAAc,CAAA;AAE/D;;;GAGG;AACH,eAAO,MAAM,oBAAoB,cAAe,SAAS,KAAG,OA6E3D,CAAA;AAED,8EAA8E;AAC9E,eAAO,MAAM,YAAY,cAAe,SAAS,KAAG,OAwB9C,CAAA"}
|