@leemour/cli-messaging 0.133.0 → 0.135.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 (54) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/bot/api-input.d.ts +14 -0
  3. package/dist/cli/bot/api-input.d.ts.map +1 -0
  4. package/dist/cli/bot/api-input.js +106 -0
  5. package/dist/cli/bot/api-input.js.map +1 -0
  6. package/dist/cli/bot/api-rpc.d.ts +16 -0
  7. package/dist/cli/bot/api-rpc.d.ts.map +1 -0
  8. package/dist/cli/bot/api-rpc.js +173 -0
  9. package/dist/cli/bot/api-rpc.js.map +1 -0
  10. package/dist/cli/bot/api.d.ts +25 -0
  11. package/dist/cli/bot/api.d.ts.map +1 -0
  12. package/dist/cli/bot/api.js +65 -0
  13. package/dist/cli/bot/api.js.map +1 -0
  14. package/dist/cli/bot/context.d.ts +2 -1
  15. package/dist/cli/bot/context.d.ts.map +1 -1
  16. package/dist/cli/bot/context.js +2 -1
  17. package/dist/cli/bot/context.js.map +1 -1
  18. package/dist/cli/bot/port.d.ts +15 -1
  19. package/dist/cli/bot/port.d.ts.map +1 -1
  20. package/dist/cli/bot/token.d.ts +6 -0
  21. package/dist/cli/bot/token.d.ts.map +1 -1
  22. package/dist/cli/bot/token.js +30 -1
  23. package/dist/cli/bot/token.js.map +1 -1
  24. package/dist/cli/config-command.d.ts.map +1 -1
  25. package/dist/cli/config-command.js +26 -1
  26. package/dist/cli/config-command.js.map +1 -1
  27. package/dist/cli/index.d.ts +5 -1
  28. package/dist/cli/index.d.ts.map +1 -1
  29. package/dist/cli/index.js +4 -0
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/cli/messenger/download-command.d.ts.map +1 -1
  32. package/dist/cli/messenger/download-command.js +2 -2
  33. package/dist/cli/messenger/download-command.js.map +1 -1
  34. package/dist/cli/permission-migration.d.ts +17 -0
  35. package/dist/cli/permission-migration.d.ts.map +1 -0
  36. package/dist/cli/permission-migration.js +104 -0
  37. package/dist/cli/permission-migration.js.map +1 -0
  38. package/dist/parity/audit.d.ts +1 -1
  39. package/dist/parity/audit.d.ts.map +1 -1
  40. package/dist/parity/audit.js +1 -1
  41. package/dist/parity/audit.js.map +1 -1
  42. package/dist/parity/deep.d.ts +51 -0
  43. package/dist/parity/deep.d.ts.map +1 -0
  44. package/dist/parity/deep.js +143 -0
  45. package/dist/parity/deep.js.map +1 -0
  46. package/dist/parity/manifest.d.ts.map +1 -1
  47. package/dist/parity/manifest.js +8 -0
  48. package/dist/parity/manifest.js.map +1 -1
  49. package/dist/sends/guard.d.ts +2 -1
  50. package/dist/sends/guard.d.ts.map +1 -1
  51. package/dist/sends/guard.js +3 -3
  52. package/dist/sends/guard.js.map +1 -1
  53. package/package.json +4 -3
  54. package/parity.json +15 -2
package/README.md CHANGED
@@ -21,7 +21,7 @@ provider has travels in `providerMetadata`.
21
21
  | `.` | `Chat`, `Message`, `Contact`, `Page`… · `formatLocator` / `parseLocator` · `renderMessages` · `pickChat` / `pickPerson` |
22
22
  | `./store` | `openCache` — `node:sqlite` under Node, `bun:sqlite` under Bun, WAL and a busy timeout on both · `openStore` — the shared message store, every method async: one file for every messenger (`MESSAGING_STORE` overrides where), forward-only migrations with `min_compatible`, every sender an identity with a person of their own, edits kept as revisions, a message by its id, deletions kept as tombstones, trigram search · `find` — by text, by sender, or both; `together` for the chats where every sender wrote, `perChat` to cap each chat · `savePeople` and `people` — usernames and bot flags, and a `PeopleLookup` for `pickPerson` |
23
23
  | `./sends` | the send guard: a level per command path (`permissions`: deny, readonly, ask, allow — `readOnly` and `allow` read as levels), a recipient list, an hourly limit, and a journal of every attempt that never holds the text; `newSendId` for a send's identity across retries |
24
- | `./cli` | the command skeleton: `run` (never throws, returns an exit code), the global flags, `settingsFor` (flag → environment → file → default, one strict file schema with each CLI's own fields), the profile as the first word, `--timeout` that closes what a command holds, paging, and run records: `--record` keeps a run's ids and timings (never content), a failure is kept unless `--no-record`, and `runsCommand` gives `runs list\|show\|path` · `configCommand(app, config)` shows and changes the settings with where each came from · `completeCommand(messenger, config, options?)` gives shell completion, account-scoped chat and person ids from the store and never a connection; `options.sources` can supply local suggestions for a separate command group and `options.account` can read an existing local account binding · `storeSummary(env)` gives its local store diagnostics to consumers retaining their own doctor command · `doctorCommand(messenger)` reports the installation's state from disk (the store, the account, sends, runs, the messenger's own checks), and connects only with `--online`; `doctor report create` writes that, the failed run and the recent sends to a file with every id a label · `skillCommand(app, url)` prints the CLI's own SKILL.md for an agent (`skill show`) · `commandsCommand(app)` describes every command as JSON, with `contract` (`CONTRACT`, the major version of the output types) and which commands write · the shared read commands: a CLI describes its messenger once (`Messenger`: its app, a `connect` that returns a `MessengerAdapter`, how `me` maps to a chat) and gets `accountCommand`, `chatsCommand` (`list`, `show`), `contactsCommand` (`list`, `show`) `recipientsCommand`, `sendsCommand`, `watchCommand` (new messages as they arrive, `--jsonl`, until Ctrl-C or `--timeout`; `--events` adds edits, deletions and reactions, each kept in the store), `storeCommand` (the local store: `store fetch` puts a chat's history into it, resumable, FloodWait-aware, `--since` to stop at a time, `--background` for a detached job that `store jobs list|show|cancel` follow, `--estimate` to only price what is left from the store alone; `store status` what it holds; `store export` a chat's messages out of it, as JSON or `--format markdown`; `store clear --left` deletes the chats the account has left; `store info`, `store check`, `store migrate`, `store backup` and `store restore` look after the file itself — its size and schema, whether it is healthy and which chats are behind, bringing it up to this build, and a copy to go back to), `inboxCommand` (other people's unread messages in every chat, or with `--new` what arrived since the last check — each message once, the point moved only by a run that printed; copied from max-cli), `serveCommand` (keeps the store current until stopped — one per profile by a lock file, catch-up on, started by a person, `server start` or a unit), `serverCommand` (`server start|stop|restart|status|logs`: `serve` in the background, as max-cli's `server`; `install|uninstall` add a systemd user unit or a launchd agent per profile, and `install` starts nothing), and `messagesCommand` (`list`, `show`, `context`, `search` over the store by any three letters inside a word, or `--regex`, `send` through the send guard (`--reply-to`, `--silent`, `--no-preview`, `--md`, `--file` and `--photo` with the text as the caption, and `--at` to send later, with `scheduled` listing the queue), `edit` of the owner's own message, `forward` to another chat and `pin`/`unpin` through it too (the adapter's optional `edit`, `forward`, `pin` and `unpin`), and `delete` — at most 10, for the owner unless `--for-everyone`; it asks first by default, and `--allow-dangerous` is the yes · `reactionsCommand` (`add`, `remove`: the owner's reaction on a message, through the guard; the adapter's optional `react`) · `pollsCommand` (`show` a poll with its answer ids, `vote` by id or `--retract`, `close` the owner's own, `create` one — a vote guarded as a reaction, closing as an edit, a new poll as a message with a send id); a `msg:` locator names a message) — every read saved to the store, `--offline` answered from it, each call a run event · `mcpCommand(messenger)` serves the profile to an agent over MCP on stdin and stdout (copied from max-cli: one connection held for minutes, one call at a time, read tools named `<cli>_<command words>` answering what `--json` prints, `<cli>_status` without connecting; the write tools — `<cli>_messages_send`, `_edit`, `_forward`, `_pin`, `_unpin`, `_delete`, `<cli>_reactions_add`, `_remove`, `<cli>_chats_mark_read`, `<cli>_polls_vote`, `_close` and `_create` — are offered by the profile's `permissions` and run through the same guard as their commands; a write at level `ask` shows the owner a form first (`--allow-dangerous` or `--yes` skips it), `--confirm-send` puts every write through the form, and `messages_delete` never deletes for everyone), and `mcp config` prints the entry for a desktop client |
24
+ | `./cli` | the command skeleton: `run` (never throws, returns an exit code), the global flags, `settingsFor` (flag → environment → file → default, one strict file schema with each CLI's own fields), the profile as the first word, `--timeout` that closes what a command holds, paging, and run records: `--record` keeps a run's ids and timings (never content), a failure is kept unless `--no-record`, and `runsCommand` gives `runs list\|show\|path` · `configCommand(app, config)` shows and changes the settings with where each came from, and `config migrate --dry-run` previews translation of legacy access settings before `config migrate` saves it; `migratePermissionConfig` provides the same layer-preserving transformation to consumers · `completeCommand(messenger, config, options?)` gives shell completion, account-scoped chat and person ids from the store and never a connection; `options.sources` can supply local suggestions for a separate command group and `options.account` can read an existing local account binding · `storeSummary(env)` gives its local store diagnostics to consumers retaining their own doctor command · `doctorCommand(messenger)` reports the installation's state from disk (the store, the account, sends, runs, the messenger's own checks), and connects only with `--online`; `doctor report create` writes that, the failed run and the recent sends to a file with every id a label · `skillCommand(app, url)` prints the CLI's own SKILL.md for an agent (`skill show`) · `commandsCommand(app)` describes every command as JSON, with `contract` (`CONTRACT`, the major version of the output types) and which commands write · the shared read commands: a CLI describes its messenger once (`Messenger`: its app, a `connect` that returns a `MessengerAdapter`, how `me` maps to a chat) and gets `accountCommand`, `chatsCommand` (`list`, `show`), `contactsCommand` (`list`, `show`) `recipientsCommand`, `sendsCommand`, `watchCommand` (new messages as they arrive, `--jsonl`, until Ctrl-C or `--timeout`; `--events` adds edits, deletions and reactions, each kept in the store), `storeCommand` (the local store: `store fetch` puts a chat's history into it, resumable, FloodWait-aware, `--since` to stop at a time, `--background` for a detached job that `store jobs list|show|cancel` follow, `--estimate` to only price what is left from the store alone; `store status` what it holds; `store export` a chat's messages out of it, as JSON or `--format markdown`; `store clear --left` deletes the chats the account has left; `store info`, `store check`, `store migrate`, `store backup` and `store restore` look after the file itself — its size and schema, whether it is healthy and which chats are behind, bringing it up to this build, and a copy to go back to), `inboxCommand` (other people's unread messages in every chat, or with `--new` what arrived since the last check — each message once, the point moved only by a run that printed; copied from max-cli), `serveCommand` (keeps the store current until stopped — one per profile by a lock file, catch-up on, started by a person, `server start` or a unit), `serverCommand` (`server start|stop|restart|status|logs`: `serve` in the background, as max-cli's `server`; `install|uninstall` add a systemd user unit or a launchd agent per profile, and `install` starts nothing), and `messagesCommand` (`list`, `show`, `context`, `search` over the store by any three letters inside a word, or `--regex`, `send` through the send guard (`--reply-to`, `--silent`, `--no-preview`, `--md`, `--file` and `--photo` with the text as the caption, and `--at` to send later, with `scheduled` listing the queue), `edit` of the owner's own message, `forward` to another chat and `pin`/`unpin` through it too (the adapter's optional `edit`, `forward`, `pin` and `unpin`), and `delete` — at most 10, for the owner unless `--for-everyone`; it asks first by default, and `--allow-dangerous` is the yes · `reactionsCommand` (`add`, `remove`: the owner's reaction on a message, through the guard; the adapter's optional `react`) · `pollsCommand` (`show` a poll with its answer ids, `vote` by id or `--retract`, `close` the owner's own, `create` one — a vote guarded as a reaction, closing as an edit, a new poll as a message with a send id); a `msg:` locator names a message) — every read saved to the store, `--offline` answered from it, each call a run event · `mcpCommand(messenger)` serves the profile to an agent over MCP on stdin and stdout (copied from max-cli: one connection held for minutes, one call at a time, read tools named `<cli>_<command words>` answering what `--json` prints, `<cli>_status` without connecting; the write tools — `<cli>_messages_send`, `_edit`, `_forward`, `_pin`, `_unpin`, `_delete`, `<cli>_reactions_add`, `_remove`, `<cli>_chats_mark_read`, `<cli>_polls_vote`, `_close` and `_create` — are offered by the profile's `permissions` and run through the same guard as their commands; a write at level `ask` shows the owner a form first (`--allow-dangerous` or `--yes` skips it), `--confirm-send` puts every write through the form, and `messages_delete` never deletes for everyone), and `mcp config` prints the entry for a desktop client |
25
25
  | `./testing` | the adapter kit — **not stable yet**, so it may change in any release: `fakeAdapter(seed)`, a messenger in memory with every method group, for command tests; `contractCases({ connect })`, the port's promises as cases any test runner runs over an adapter; `contractSeed`, the chats and messages they read. How to write an adapter and run them: [the adapter guide](docs/dev/ADAPTERS.md) |
26
26
 
27
27
  ⚠ **Errors are recognised by shape, not by class** (`isCliFailure`). A package linked during
@@ -0,0 +1,14 @@
1
+ import { type ManifestOperation, type SchemaNode } from "@leemour/cli-core/codegen";
2
+ import * as v from "valibot";
3
+ export declare const apiFlagOf: (name: string) => string;
4
+ export declare const apiOptionKey: (name: string) => string;
5
+ export declare const checkApiParameter: (name: string, node: SchemaNode, raw: string, schemas: Readonly<Record<string, v.GenericSchema>>) => string | undefined;
6
+ export declare const readApiBody: (options: {
7
+ body?: string;
8
+ bodyFile?: string;
9
+ }, read?: (path: string | number) => string) => string | undefined;
10
+ export declare const checkApiBody: (operation: ManifestOperation, text: string | undefined, schemas: Readonly<Record<string, v.GenericSchema>>) => string | undefined;
11
+ export declare const parseApiJson: (text: string) => unknown;
12
+ export declare const apiJson: (value: unknown) => string;
13
+ export declare const apiPlainJson: (value: unknown) => unknown;
14
+ //# sourceMappingURL=api-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-input.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/api-input.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE/F,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAK5B,eAAO,MAAM,SAAS,SAAU,MAAM,KAAG,MAKvB,CAAA;AAElB,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,MAC0C,CAAA;AAWtF,eAAO,MAAM,iBAAiB,SACtB,MAAM,QACN,UAAU,OACX,MAAM,WACF,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,KACjD,MAAM,GAAG,SAiCX,CAAA;AAED,eAAO,MAAM,WAAW,YACb;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,SACvC,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,KACtC,MAAM,GAAG,SAOX,CAAA;AAED,eAAO,MAAM,YAAY,cACZ,iBAAiB,QACtB,MAAM,GAAG,SAAS,WACf,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,KACjD,MAAM,GAAG,SAkCX,CAAA;AAED,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,OAM3C,CAAA;AAED,eAAO,MAAM,OAAO,UAAW,OAAO,KAAG,MAAoC,CAAA;AAE7E,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,OAK3C,CAAA"}
@@ -0,0 +1,106 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { CliError } from "@leemour/cli-core";
3
+ import { identifier } from "@leemour/cli-core/codegen";
4
+ import { isLosslessNumber, isSafeNumber, LosslessNumber, parse, stringify } from "lossless-json";
5
+ import * as v from "valibot";
6
+ /** `--timeout` is the program's own deadline: a parameter spelled like it would never reach MAX. */
7
+ const RENAMED = { timeout: "poll-timeout" };
8
+ export const apiFlagOf = (name) => RENAMED[name] ??
9
+ name
10
+ .replace(/_/g, "-")
11
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
12
+ .toLowerCase();
13
+ export const apiOptionKey = (name) => apiFlagOf(name).replace(/-([a-z0-9])/g, (_, letter) => letter.toUpperCase());
14
+ const DIGITS = /^-?\d+$/;
15
+ /** A flag's text as the JSON value it stands for, so a generated schema can judge it. */
16
+ const coerce = (raw) => {
17
+ if (DIGITS.test(raw))
18
+ return new LosslessNumber(raw);
19
+ if (raw === "true" || raw === "false")
20
+ return raw === "true";
21
+ return raw;
22
+ };
23
+ export const checkApiParameter = (name, node, raw, schemas) => {
24
+ switch (node.type) {
25
+ case "ref": {
26
+ const schema = schemas[identifier(node.ref)];
27
+ return schema && !v.safeParse(schema, coerce(raw)).success
28
+ ? `--${apiFlagOf(name)} is not a valid ${node.ref}`
29
+ : undefined;
30
+ }
31
+ case "union":
32
+ return node.of.some((member) => checkApiParameter(name, member, raw, schemas) === undefined)
33
+ ? undefined
34
+ : `--${apiFlagOf(name)} does not match any allowed type`;
35
+ case "integer":
36
+ if (!DIGITS.test(raw))
37
+ return `--${apiFlagOf(name)} takes an integer`;
38
+ if (node.minimum !== undefined && BigInt(raw) < BigInt(node.minimum))
39
+ return `--${apiFlagOf(name)} is at least ${node.minimum}`;
40
+ if (node.maximum !== undefined && BigInt(raw) > BigInt(node.maximum))
41
+ return `--${apiFlagOf(name)} is at most ${node.maximum}`;
42
+ return undefined;
43
+ case "boolean":
44
+ return raw === "true" || raw === "false" ? undefined : `--${apiFlagOf(name)} takes true or false`;
45
+ case "string":
46
+ return node.enum && !node.enum.includes(raw)
47
+ ? `--${apiFlagOf(name)} is one of ${node.enum.join(", ")}`
48
+ : undefined;
49
+ case "array":
50
+ return raw
51
+ .split(",")
52
+ .map((item) => checkApiParameter(name, node.items, item.trim(), schemas))
53
+ .find((problem) => problem !== undefined);
54
+ default:
55
+ return undefined;
56
+ }
57
+ };
58
+ export const readApiBody = (options, read = (path) => readFileSync(path, "utf8")) => {
59
+ if (options.body !== undefined && options.bodyFile !== undefined) {
60
+ throw new CliError("validation_error", "--body and --body-file both given; pick one");
61
+ }
62
+ if (options.bodyFile !== undefined)
63
+ return read(options.bodyFile === "-" ? 0 : options.bodyFile);
64
+ if (options.body === "-")
65
+ return read(0);
66
+ return options.body;
67
+ };
68
+ export const checkApiBody = (operation, text, schemas) => {
69
+ if (text === undefined || text.trim() === "") {
70
+ if (operation.request?.required) {
71
+ throw new CliError("validation_error", `${operation.command} needs a JSON body: --body '<json>', --body -, or --body-file`);
72
+ }
73
+ return undefined;
74
+ }
75
+ let value;
76
+ try {
77
+ value = parse(text);
78
+ }
79
+ catch {
80
+ throw new CliError("validation_error", "the body is not valid JSON");
81
+ }
82
+ const schema = operation.request?.schema
83
+ ? schemas[operation.request.schema]
84
+ : undefined;
85
+ if (schema) {
86
+ const result = v.safeParse(schema, value);
87
+ if (!result.success) {
88
+ // Valibot's own message quotes the value it got — message text, which must not reach a run record.
89
+ const where = result.issues.map((issue) => `${v.getDotPath(issue) ?? "(body)"} expects ${issue.expected ?? issue.kind}`);
90
+ throw new CliError("validation_error", `the body does not match ${operation.request?.schema}: ${where.join("; ")}`);
91
+ }
92
+ }
93
+ // The validated output carries ids as strings; MAX wants the digits as numbers, so the text goes as written.
94
+ return text;
95
+ };
96
+ export const parseApiJson = (text) => {
97
+ try {
98
+ return parse(text);
99
+ }
100
+ catch {
101
+ throw new CliError("validation_error", "the body is not valid JSON");
102
+ }
103
+ };
104
+ export const apiJson = (value) => stringify(value) ?? "null";
105
+ export const apiPlainJson = (value) => JSON.parse(stringify(value, (_, inner) => isLosslessNumber(inner) && !isSafeNumber(inner.value) ? inner.toString() : inner) ?? "null");
106
+ //# sourceMappingURL=api-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-input.js","sourceRoot":"","sources":["../../../src/cli/bot/api-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ManifestOperation, type SchemaNode } from "@leemour/cli-core/codegen";
2
+ import type { ApiCommandInput } from "./api.js";
3
+ type Definitions = Readonly<Record<string, SchemaNode>>;
4
+ type ObjectValue = Record<string, unknown>;
5
+ export interface RpcApiBody {
6
+ text?: string;
7
+ value: ObjectValue;
8
+ files: {
9
+ field: string;
10
+ path: string;
11
+ }[];
12
+ secrets: string[];
13
+ }
14
+ export declare const prepareRpcApiBody: (operation: ManifestOperation, input: ApiCommandInput, definitions: Definitions) => RpcApiBody;
15
+ export {};
16
+ //# sourceMappingURL=api-rpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-rpc.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/api-rpc.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAG/C,KAAK,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;AACvD,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE1C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,WAAW,CAAA;IAClB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACxC,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AA+FD,eAAO,MAAM,iBAAiB,cACjB,iBAAiB,SACrB,eAAe,eACT,WAAW,KACvB,UAkEF,CAAA"}
@@ -0,0 +1,173 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ import { identifier } from "@leemour/cli-core/codegen";
3
+ import { isLosslessNumber, LosslessNumber } from "lossless-json";
4
+ import { apiJson, parseApiJson } from "./api-input.js";
5
+ const object = (value) => value !== null && typeof value === "object" && !Array.isArray(value) && !isLosslessNumber(value);
6
+ const resolved = (node, definitions) => {
7
+ const seen = new Set();
8
+ let nullable = node.nullable;
9
+ let sensitive = node.sensitive;
10
+ while (node.type === "ref") {
11
+ if (seen.has(node.ref))
12
+ throw new CliError("configuration_error", "a generated API reference cycle cannot be resolved");
13
+ seen.add(node.ref);
14
+ const next = definitions[identifier(node.ref)];
15
+ if (!next)
16
+ throw new CliError("configuration_error", `the generated API has no schema ${node.ref}`);
17
+ nullable ||= next.nullable;
18
+ sensitive ||= next.sensitive;
19
+ node = next;
20
+ }
21
+ return { ...node, ...(nullable ? { nullable } : {}), ...(sensitive ? { sensitive } : {}) };
22
+ };
23
+ const matches = (value, original, definitions, depth = 0) => {
24
+ if (depth > 128)
25
+ throw new CliError("validation_error", "the API body is nested too deeply");
26
+ const node = resolved(original, definitions);
27
+ if (value === null && node.nullable)
28
+ return true;
29
+ switch (node.type) {
30
+ case "union":
31
+ return node.of.some((member) => matches(value, member, definitions, depth + 1));
32
+ case "allOf":
33
+ return node.of.every((member) => matches(value, member, definitions, depth + 1));
34
+ case "string":
35
+ return typeof value === "string" && (!node.enum || node.enum.includes(value));
36
+ case "integer":
37
+ return isLosslessNumber(value)
38
+ ? /^-?\d+$/.test(value.value)
39
+ : typeof value === "number" && Number.isSafeInteger(value);
40
+ case "number":
41
+ return typeof value === "number" || isLosslessNumber(value);
42
+ case "boolean":
43
+ return typeof value === "boolean" && (!node.enum || node.enum.includes(value));
44
+ case "array":
45
+ return Array.isArray(value) && value.every((item) => matches(item, node.items, definitions, depth + 1));
46
+ case "object":
47
+ return (object(value) &&
48
+ node.required.every((name) => value[name] !== undefined) &&
49
+ Object.entries(node.properties).every(([name, field]) => value[name] === undefined || matches(value[name], field, definitions, depth + 1)));
50
+ case "unknown":
51
+ return true;
52
+ case "ref":
53
+ return false;
54
+ }
55
+ };
56
+ const flagValue = (raw, original, definitions) => {
57
+ const node = resolved(original, definitions);
58
+ switch (node.type) {
59
+ case "string":
60
+ return raw;
61
+ case "boolean":
62
+ if (raw === "true" || raw === "false")
63
+ return raw === "true";
64
+ break;
65
+ case "integer":
66
+ if (/^-?\d+$/.test(raw))
67
+ return new LosslessNumber(raw);
68
+ break;
69
+ case "number": {
70
+ const value = parseApiJson(raw);
71
+ if (typeof value === "number" || isLosslessNumber(value))
72
+ return value;
73
+ break;
74
+ }
75
+ case "union":
76
+ for (const member of node.of) {
77
+ try {
78
+ const value = flagValue(raw, member, definitions);
79
+ if (matches(value, member, definitions))
80
+ return value;
81
+ }
82
+ catch (error) {
83
+ if (error.code === "configuration_error")
84
+ throw error;
85
+ }
86
+ }
87
+ break;
88
+ case "object":
89
+ case "array":
90
+ case "allOf":
91
+ case "unknown":
92
+ return parseApiJson(raw);
93
+ case "ref":
94
+ break;
95
+ }
96
+ throw new CliError("validation_error", "an API parameter does not match its declared type");
97
+ };
98
+ export const prepareRpcApiBody = (operation, input, definitions) => {
99
+ const parsed = input.body?.trim() ? parseApiJson(input.body) : {};
100
+ if (!object(parsed))
101
+ throw new CliError("validation_error", "an RPC API body must be a JSON object");
102
+ const value = { ...parsed };
103
+ for (const parameter of operation.parameters) {
104
+ const raw = input.fields[parameter.name];
105
+ if (raw === undefined)
106
+ continue;
107
+ if (parameter.sensitive)
108
+ throw new CliError("validation_error", "secret API fields must be read from stdin or a JSON file");
109
+ if (Object.hasOwn(value, parameter.name))
110
+ throw new CliError("validation_error", `${parameter.name} was given in both the body and a flag`);
111
+ value[parameter.name] = flagValue(raw, parameter.schema, definitions);
112
+ }
113
+ const files = [];
114
+ const secrets = [];
115
+ const references = new Set();
116
+ let depth = 0;
117
+ const walk = (current, original) => {
118
+ if (++depth > 128)
119
+ throw new CliError("validation_error", "the API body is nested too deeply");
120
+ try {
121
+ const node = resolved(original, definitions);
122
+ if (node.sensitive && typeof current === "string" && current !== "")
123
+ secrets.push(current);
124
+ if (node.type === "union") {
125
+ const member = node.of.find((candidate) => matches(current, candidate, definitions));
126
+ return member ? walk(current, member) : current;
127
+ }
128
+ if (node.type === "allOf")
129
+ return node.of.reduce((part, member) => walk(part, member), current);
130
+ if (node.type === "array" && Array.isArray(current))
131
+ return current.map((item) => walk(item, node.items));
132
+ if (node.type === "object" && object(current))
133
+ return Object.fromEntries(Object.entries(current).map(([name, field]) => {
134
+ const schema = node.properties[name] ?? node.additionalProperties;
135
+ return [name, schema ? walk(field, schema) : field];
136
+ }));
137
+ if (node.type === "string" && node.format && typeof current === "string") {
138
+ if (current.startsWith("@")) {
139
+ const path = current.slice(1);
140
+ if (!path)
141
+ throw new CliError("validation_error", "an API file reference needs a path after @");
142
+ let field = `_api_file_${files.length}`;
143
+ while (Object.hasOwn(value, field) || files.some((file) => file.field === field))
144
+ field += "_";
145
+ files.push({ field, path });
146
+ return `attach://${field}`;
147
+ }
148
+ if (current.startsWith("attach://"))
149
+ references.add(current.slice(9));
150
+ }
151
+ return current;
152
+ }
153
+ finally {
154
+ depth--;
155
+ }
156
+ };
157
+ const schema = operation.request?.schema ? definitions[operation.request.schema] : undefined;
158
+ if (operation.request?.schema && !schema)
159
+ throw new CliError("configuration_error", "the generated API request schema is missing");
160
+ const prepared = schema ? walk(value, schema) : value;
161
+ if (secrets.length > 0 && input.bodySource === "argument")
162
+ throw new CliError("validation_error", "secret API fields must be read from stdin or a JSON file");
163
+ for (const field of references)
164
+ if (!files.some((file) => file.field === field))
165
+ throw new CliError("validation_error", "an API multipart reference has no corresponding file; use @path");
166
+ return {
167
+ value: prepared,
168
+ ...(operation.request || Object.keys(value).length ? { text: apiJson(prepared) } : {}),
169
+ files,
170
+ secrets,
171
+ };
172
+ };
173
+ //# sourceMappingURL=api-rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-rpc.js","sourceRoot":"","sources":["../../../src/cli/bot/api-rpc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ManifestOperation, SchemaNode } from "@leemour/cli-core/codegen";
2
+ import { Command } from "commander";
3
+ export interface ApiCommandInput {
4
+ path: Record<string, string>;
5
+ query: Record<string, string>;
6
+ headers: Record<string, string>;
7
+ fields: Record<string, string>;
8
+ body?: string;
9
+ bodySource?: "argument" | "stdin" | "file";
10
+ tokenProfile?: string;
11
+ }
12
+ export interface ApiCommands {
13
+ operations: readonly ManifestOperation[];
14
+ description?: string;
15
+ checkParameter: (name: string, schema: SchemaNode, raw: string) => string | undefined;
16
+ checkBody?: (operation: ManifestOperation, text: string | undefined) => string | undefined;
17
+ before?: (command: Command, operation: ManifestOperation) => void | Promise<void>;
18
+ readBody?: (command: Command, options: {
19
+ body?: string;
20
+ bodyFile?: string;
21
+ }) => string | undefined;
22
+ execute: (command: Command, operation: ManifestOperation, input: ApiCommandInput) => Promise<void>;
23
+ }
24
+ export declare const generatedApiCommand: (api: ApiCommands) => Command;
25
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE9E,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAA;AAG3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,CAAA;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACxC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;IACrF,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,MAAM,GAAG,SAAS,CAAA;IAC1F,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACjF,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,CAAA;IAClG,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACnG;AAED,eAAO,MAAM,mBAAmB,QAAS,WAAW,KAAG,OAsEtD,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { CliError } from "@leemour/cli-core";
2
+ import { annotate } from "@leemour/cli-core/commands";
3
+ import { Command, Option } from "commander";
4
+ import { apiFlagOf, apiOptionKey, readApiBody } from "./api-input.js";
5
+ export const generatedApiCommand = (api) => {
6
+ const group = new Command("api").description(api.description ?? "every operation of the official Bot API, generated from its schema");
7
+ group.option("--store-token <profile>", "keep a returned authentication token only in this bot profile's OS keyring; never print it");
8
+ for (const operation of api.operations) {
9
+ const binding = operation.binding.kind === "http"
10
+ ? `${operation.binding.method} ${operation.binding.path}`
11
+ : operation.binding.name;
12
+ const command = new Command(operation.command).description(`${operation.summary ?? operation.id} — ${operation.effect} (${binding})`);
13
+ for (const parameter of operation.parameters) {
14
+ if (parameter.sensitive)
15
+ continue;
16
+ const option = new Option(`--${apiFlagOf(parameter.name)} <value>`, parameter.description?.split("\n")[0] ?? parameter.name);
17
+ command.addOption(parameter.required && parameter.in !== "body" ? option.makeOptionMandatory() : option);
18
+ }
19
+ if (operation.request) {
20
+ command.option("--body <json>", "the request body as JSON; - reads it from stdin");
21
+ command.option("--body-file <path>", "the request body from a JSON file; - is stdin");
22
+ }
23
+ annotate(command, { origin: "generated", operationId: operation.id, mutates: operation.effect !== "read" });
24
+ command.action(async function () {
25
+ const options = this.opts();
26
+ const input = { path: {}, query: {}, headers: {}, fields: {} };
27
+ const tokenProfile = group.opts().storeToken;
28
+ if (operation.response?.sensitive) {
29
+ if (!tokenProfile?.trim())
30
+ throw new CliError("validation_error", "--store-token <profile> is required for this credential-returning operation");
31
+ input.tokenProfile = tokenProfile;
32
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(tokenProfile))
33
+ throw new CliError("validation_error", "--store-token needs a bot profile name using letters, digits, underscores or hyphens");
34
+ }
35
+ else if (tokenProfile !== undefined) {
36
+ throw new CliError("validation_error", "--store-token is only supported for credential-returning operations");
37
+ }
38
+ for (const parameter of operation.parameters) {
39
+ const raw = options[apiOptionKey(parameter.name)];
40
+ if (raw === undefined)
41
+ continue;
42
+ if (parameter.in !== "body") {
43
+ const problem = api.checkParameter(parameter.name, parameter.schema, raw);
44
+ if (problem)
45
+ throw new CliError("validation_error", problem);
46
+ }
47
+ const target = parameter.in === "body" ? input.fields : parameter.in === "header" ? input.headers : input[parameter.in];
48
+ target[parameter.name] = raw;
49
+ }
50
+ await api.before?.(this, operation);
51
+ const text = (api.readBody ?? ((_command, body) => readApiBody(body)))(this, options);
52
+ if (options.body !== undefined)
53
+ input.bodySource = options.body === "-" ? "stdin" : "argument";
54
+ else if (options.bodyFile !== undefined)
55
+ input.bodySource = options.bodyFile === "-" ? "stdin" : "file";
56
+ const body = operation.binding.kind === "rpc" ? text : api.checkBody ? api.checkBody(operation, text) : text;
57
+ if (body !== undefined)
58
+ input.body = body;
59
+ await api.execute(this, operation, input);
60
+ });
61
+ group.addCommand(command);
62
+ }
63
+ return group;
64
+ };
65
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/cli/bot/api.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { Command } from "commander";
2
2
  import { SendJournal } from "../../sends/journal.js";
3
+ import type { Level, PermissionKey } from "../../sends/permissions.js";
3
4
  import { RecipientList } from "../../sends/recipients.js";
4
5
  import type { BotAdapter, BotChatRef, BotConnectOptions, BotMessenger } from "./port.js";
5
6
  import { ChatRegistry } from "./registry.js";
@@ -38,7 +39,7 @@ export declare const botContext: (command: Command, bot: BotMessenger) => {
38
39
  * a fix is typed with — `max sales bot recipients add …` — and a bot has no hourly limit unless
39
40
  * its section sets one.
40
41
  */
41
- guard: () => import("../../sends/guard.js").SendGuard;
42
+ guard: (permissionDefaults?: Readonly<Record<PermissionKey, Level>>) => import("../../sends/guard.js").SendGuard;
42
43
  /** A chat id, `user:<id>`, or the title of a chat this bot has seen — never a guess. */
43
44
  chatRef: (typed: string) => BotChatRef;
44
45
  readSecret: (prompt: string) => Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAMzD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxF,OAAO,EAAY,YAAY,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,qGAAqG;AACrG,eAAO,MAAM,QAAQ,QAAS,YAAY,WAAW,MAAM,KAAG,MAAyD,CAAA;AAEvH,yFAAyF;AACzF,eAAO,MAAM,UAAU,YAAa,OAAO,OAAO,YAAY;;;;;;;;;;;;;;;;;;IAuB1D,sEAAsE;;;;;;;;IAEtE;;;;OAIG;;IAkBH,wFAAwF;qBACvE,MAAM,KAAG,UAAU;yBAKf,MAAM;IAI3B,6DAA6D;qBA/CjC,MAAM,YAAW,iBAAiB,KAAQ,OAAO,CAAC,UAAU,CAAC;IAiDzF,8EAA8E;8BACrD,iBAAiB,KAAQ,OAAO,CAAC,UAAU,CAAC;CAQxE,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;AAEtD,oHAAoH;AACpH,eAAO,MAAM,MAAM,YAAa,UAAU,WAAW,OAAO,KAAG,UAQ9D,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAMzD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACxF,OAAO,EAAY,YAAY,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE1C,qGAAqG;AACrG,eAAO,MAAM,QAAQ,QAAS,YAAY,WAAW,MAAM,KAAG,MAAyD,CAAA;AAEvH,yFAAyF;AACzF,eAAO,MAAM,UAAU,YAAa,OAAO,OAAO,YAAY;;;;;;;;;;;;;;;;;;IAuB1D,sEAAsE;;;;;;;;IAEtE;;;;OAIG;iCAC0B,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAkBnE,wFAAwF;qBACvE,MAAM,KAAG,UAAU;yBAKf,MAAM;IAI3B,6DAA6D;qBAhDjC,MAAM,YAAW,iBAAiB,KAAQ,OAAO,CAAC,UAAU,CAAC;IAkDzF,8EAA8E;8BACrD,iBAAiB,KAAQ,OAAO,CAAC,UAAU,CAAC;CAQxE,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;AAEtD,oHAAoH;AACpH,eAAO,MAAM,MAAM,YAAa,UAAU,WAAW,OAAO,KAAG,UAQ9D,CAAA"}
@@ -43,13 +43,14 @@ export const botContext = (command, bot) => {
43
43
  * a fix is typed with — `max sales bot recipients add …` — and a bot has no hourly limit unless
44
44
  * its section sets one.
45
45
  */
46
- guard: () => sendGuard({
46
+ guard: (permissionDefaults) => sendGuard({
47
47
  profile: `${asFirstWord(profile)}bot`,
48
48
  command: bot.app.command,
49
49
  readOnly: settings.readOnly,
50
50
  readOnlyFrom: settings.sources.readOnly ?? "default",
51
51
  permissions: settings.permissions,
52
52
  permissionSources: settings.permissionSources,
53
+ ...(permissionDefaults ? { permissionDefaults } : {}),
53
54
  permissionFix: (request, key) => bot.permissionFix?.(settings, request) ??
54
55
  `${bot.app.command} ${asFirstWord(profile)}config set --bot permissions.${key} allow`,
55
56
  ask: terminalAsker(command),
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/cli/bot/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/cli/bot/context.ts"],"names":[],"mappings":"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"}
@@ -192,7 +192,21 @@ export interface BotUpdates {
192
192
  * The part of the personal core a bot can do, and the groups its Bot API has. A bot never gets
193
193
  * `chats` from this type: neither Bot API lists a bot's chats.
194
194
  */
195
- export type BotAdapter = Pick<MessengerCore, "me" | "close"> & Partial<MarkdownFormatting> & Partial<BotMessaging> & Partial<BotHistory> & Partial<MessagePins> & Partial<BotChatTools> & Partial<BotChatAdmins> & Partial<BotChatMembers> & Partial<BotMenu> & Partial<BotCallbacks> & Partial<BotWebhooks> & Partial<BotUpdates> & Partial<BotPeople>;
195
+ export type BotAdapter = Pick<MessengerCore, "me" | "close"> & Partial<MarkdownFormatting> & Partial<BotNativeApi> & Partial<BotMessaging> & Partial<BotHistory> & Partial<MessagePins> & Partial<BotChatTools> & Partial<BotChatAdmins> & Partial<BotChatMembers> & Partial<BotMenu> & Partial<BotCallbacks> & Partial<BotWebhooks> & Partial<BotUpdates> & Partial<BotPeople>;
196
+ export interface BotNativeApi {
197
+ api(method: string, input: {
198
+ body?: string;
199
+ files: readonly {
200
+ field: string;
201
+ name: string;
202
+ bytes: Uint8Array;
203
+ }[];
204
+ secrets: readonly string[];
205
+ }, options: {
206
+ reads: boolean;
207
+ timeoutMs?: number;
208
+ }): Promise<unknown>;
209
+ }
196
210
  export interface BotConnectOptions {
197
211
  stop?: AbortSignal;
198
212
  events?: EventSink;
@@ -1 +1 @@
1
- {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/port.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../../src/cli/bot/port.ts"],"names":[],"mappings":"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"}