@leemour/cli-messaging 0.66.0 → 0.68.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/README.md +1 -1
- package/dist/cli/messenger/processes.d.ts +6 -0
- package/dist/cli/messenger/processes.d.ts.map +1 -1
- package/dist/cli/messenger/processes.js +42 -1
- package/dist/cli/messenger/processes.js.map +1 -1
- package/dist/cli/messenger/store-maintenance-command.d.ts.map +1 -1
- package/dist/cli/messenger/store-maintenance-command.js +140 -4
- package/dist/cli/messenger/store-maintenance-command.js.map +1 -1
- package/dist/parity/bin.d.ts +3 -0
- package/dist/parity/bin.d.ts.map +1 -0
- package/dist/parity/bin.js +17 -0
- package/dist/parity/bin.js.map +1 -0
- package/dist/parity/index.d.ts +2 -0
- package/dist/parity/index.d.ts.map +1 -0
- package/dist/parity/index.js +2 -0
- package/dist/parity/index.js.map +1 -0
- package/dist/parity/manifest.d.ts +42 -0
- package/dist/parity/manifest.d.ts.map +1 -0
- package/dist/parity/manifest.js +117 -0
- package/dist/parity/manifest.js.map +1 -0
- package/dist/store/sqlite/accounts.d.ts +6 -0
- package/dist/store/sqlite/accounts.d.ts.map +1 -0
- package/dist/store/sqlite/accounts.js +18 -0
- package/dist/store/sqlite/accounts.js.map +1 -0
- package/dist/store/sqlite/chats.d.ts +17 -0
- package/dist/store/sqlite/chats.d.ts.map +1 -0
- package/dist/store/sqlite/chats.js +105 -0
- package/dist/store/sqlite/chats.js.map +1 -0
- package/dist/store/sqlite/drizzle/bun.js +1 -1
- package/dist/store/sqlite/drizzle/core.d.ts +1 -1
- package/dist/store/sqlite/drizzle/core.d.ts.map +1 -1
- package/dist/store/sqlite/drizzle/core.js +11 -1
- package/dist/store/sqlite/drizzle/node.js +1 -1
- package/dist/store/sqlite/drizzle/{shared-ZF3LACGD.js → shared-I773JEFB.js} +6 -1
- package/dist/store/sqlite/identities.d.ts +23 -0
- package/dist/store/sqlite/identities.d.ts.map +1 -0
- package/dist/store/sqlite/identities.js +169 -0
- package/dist/store/sqlite/identities.js.map +1 -0
- package/dist/store/sqlite/values.d.ts +8 -0
- package/dist/store/sqlite/values.d.ts.map +1 -0
- package/dist/store/sqlite/values.js +11 -0
- package/dist/store/sqlite/values.js.map +1 -0
- package/dist/store/store.d.ts.map +1 -1
- package/dist/store/store.js +29 -200
- package/dist/store/store.js.map +1 -1
- package/package.json +13 -3
- package/parity.json +1246 -0
- /package/dist/store/sqlite/drizzle/{shared-ZF3LACGD.js.map → shared-I773JEFB.js.map} +0 -0
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ provider has travels in `providerMetadata`.
|
|
|
20
20
|
| `.` | `Chat`, `Message`, `Contact`, `Page`… · `formatLocator` / `parseLocator` · `renderMessages` · `pickChat` / `pickPerson` |
|
|
21
21
|
| `./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` |
|
|
22
22
|
| `./sends` | the send guard: read-only profiles, an allow-list of actions, 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 |
|
|
23
|
-
| `./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)` gives shell completion, chat ids from the store and never a connection · `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 info`, `store check` and `store
|
|
23
|
+
| `./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)` gives shell completion, chat ids from the store and never a connection · `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 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`, never without `--allow-dangerous` · `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; `--allow-send` adds `<cli>_messages_send`, `_edit`, `_forward`, `_pin`, `_unpin`, `<cli>_reactions_add`, `_remove`, `<cli>_polls_vote`, `_close` and `_create` (and `<cli>_polls_show` is a read tool) through the same guard as their commands, `--allow-mark-read` adds `<cli>_chats_mark_read` (`chats mark-read`: the other side sees it, so `--allow-send` does not imply it), `--allow-delete` adds `<cli>_messages_delete` (the owner's copy only, never for everyone), and `--confirm-send` shows the owner every send in a form from the server first), and `mcp config` prints the entry for a desktop client |
|
|
24
24
|
|
|
25
25
|
⚠ **Errors are recognised by shape, not by class** (`isCliFailure`). A package linked during
|
|
26
26
|
development brings its own copy of cli-core, and an error built by one copy is not an `instanceof`
|
|
@@ -6,4 +6,10 @@ export declare const alive: (pid: number) => boolean;
|
|
|
6
6
|
* somebody else, who must never be signalled. Only the owner of a process may read its environment.
|
|
7
7
|
*/
|
|
8
8
|
export declare const carries: (pid: number, marker: string) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* The other processes that have any of `paths` open, whichever app they belong to — a `serve` keeps
|
|
11
|
+
* its lock under its own app's directory, where the other CLI cannot look. `undefined` when this
|
|
12
|
+
* system cannot tell: no `/proc`, no `lsof`. `paths` must be real paths, as the kernel reports them.
|
|
13
|
+
*/
|
|
14
|
+
export declare const holdersOf: (paths: string[]) => number[] | undefined;
|
|
9
15
|
//# sourceMappingURL=processes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processes.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/processes.ts"],"names":[],"mappings":"AAGA,mEAAmE;AACnE,eAAO,MAAM,KAAK,QAAS,MAAM,KAAG,OAOnC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,QAAS,MAAM,UAAU,MAAM,KAAG,OAgBrD,CAAA"}
|
|
1
|
+
{"version":3,"file":"processes.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/processes.ts"],"names":[],"mappings":"AAGA,mEAAmE;AACnE,eAAO,MAAM,KAAK,QAAS,MAAM,KAAG,OAOnC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,QAAS,MAAM,UAAU,MAAM,KAAG,OAgBrD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,SAAS,UAAW,MAAM,EAAE,KAAG,MAAM,EAAE,GAAG,SAiCtD,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { execFileSync } from "node:child_process";
|
|
2
|
-
import { readFileSync } from "node:fs";
|
|
2
|
+
import { readdirSync, readFileSync, readlinkSync } from "node:fs";
|
|
3
3
|
/** Signal 0 checks that the process exists without touching it. */
|
|
4
4
|
export const alive = (pid) => {
|
|
5
5
|
try {
|
|
@@ -34,4 +34,45 @@ export const carries = (pid, marker) => {
|
|
|
34
34
|
}
|
|
35
35
|
return false;
|
|
36
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* The other processes that have any of `paths` open, whichever app they belong to — a `serve` keeps
|
|
39
|
+
* its lock under its own app's directory, where the other CLI cannot look. `undefined` when this
|
|
40
|
+
* system cannot tell: no `/proc`, no `lsof`. `paths` must be real paths, as the kernel reports them.
|
|
41
|
+
*/
|
|
42
|
+
export const holdersOf = (paths) => {
|
|
43
|
+
if (process.platform === "linux") {
|
|
44
|
+
const wanted = new Set(paths);
|
|
45
|
+
return readdirSync("/proc")
|
|
46
|
+
.filter((entry) => /^\d+$/.test(entry) && Number(entry) !== process.pid)
|
|
47
|
+
.filter((pid) => {
|
|
48
|
+
try {
|
|
49
|
+
return readdirSync(`/proc/${pid}/fd`).some((fd) => {
|
|
50
|
+
try {
|
|
51
|
+
return wanted.has(readlinkSync(`/proc/${pid}/fd/${fd}`));
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
})
|
|
62
|
+
.map(Number);
|
|
63
|
+
}
|
|
64
|
+
const pids = (listed) => listed
|
|
65
|
+
.split("\n")
|
|
66
|
+
.filter(Boolean)
|
|
67
|
+
.map(Number)
|
|
68
|
+
.filter((pid) => pid !== process.pid);
|
|
69
|
+
try {
|
|
70
|
+
return pids(execFileSync("lsof", ["-t", "--", ...paths], { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }));
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
// lsof exits 1 when some file is open by nobody, and fails to start when it is not installed.
|
|
74
|
+
const { status, stdout } = error;
|
|
75
|
+
return status === 1 ? pids(stdout ?? "") : undefined;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
37
78
|
//# sourceMappingURL=processes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processes.js","sourceRoot":"","sources":["../../../src/cli/messenger/processes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"processes.js","sourceRoot":"","sources":["../../../src/cli/messenger/processes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-maintenance-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/store-maintenance-command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store-maintenance-command.d.ts","sourceRoot":"","sources":["../../../src/cli/messenger/store-maintenance-command.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAOnC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAuC7C,oGAAoG;AACpG,eAAO,MAAM,YAAY,QAAe,MAAM,CAAC,UAAU;;;;;;;;;;;;;;;;EAkBxD,CAAA;AAED,eAAO,MAAM,wBAAwB,cAAe,SAAS,KAAG,OAAO,EAMtE,CAAA"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { existsSync, statfsSync, statSync } from "node:fs";
|
|
2
|
-
import { dirname } from "node:path";
|
|
1
|
+
import { chmodSync, constants, copyFileSync, existsSync, mkdirSync, realpathSync, renameSync, rmSync, statfsSync, statSync, writeFileSync, } from "node:fs";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import { CliError } from "@leemour/cli-core";
|
|
3
4
|
import { Command } from "commander";
|
|
4
5
|
import { MIGRATIONS, migrate } from "../../store/migrations.js";
|
|
5
6
|
import { openCache } from "../../store/open.js";
|
|
6
7
|
import { storePath } from "../../store/path.js";
|
|
7
8
|
import { backfillNormalized, pendingNormalization } from "../../store/sqlite/backfill.js";
|
|
8
9
|
import { environmentOf, outputFor } from "../context.js";
|
|
10
|
+
import { holdersOf } from "./processes.js";
|
|
11
|
+
import { servingProfiles } from "./serve-command.js";
|
|
9
12
|
const SPEAKS = MIGRATIONS.at(-1)?.version ?? 0;
|
|
10
13
|
const SEARCH_INDEXES = ["messages_fts", "chats_fts", "identities_fts"];
|
|
11
14
|
/** An empty file is normal: `openStore` creates it before the first migration runs. */
|
|
@@ -60,6 +63,8 @@ export const storeMaintenanceCommands = (messenger) => [
|
|
|
60
63
|
infoCommand(),
|
|
61
64
|
checkCommand(messenger),
|
|
62
65
|
migrateCommand(messenger),
|
|
66
|
+
backupCommand(),
|
|
67
|
+
restoreCommand(messenger),
|
|
63
68
|
];
|
|
64
69
|
const infoCommand = () => new Command("info")
|
|
65
70
|
.description("the store file: where it is, its size, its schema and how many rows it holds; changes nothing")
|
|
@@ -108,8 +113,9 @@ const checkCommand = (messenger) => new Command("check")
|
|
|
108
113
|
}
|
|
109
114
|
renderer.result(answer);
|
|
110
115
|
const { command } = messenger.app;
|
|
111
|
-
if (answer.schema.version < SPEAKS)
|
|
112
|
-
renderer.note(`the file is behind this build — \`${command} store migrate\``);
|
|
116
|
+
if (answer.schema.version < SPEAKS) {
|
|
117
|
+
renderer.note(`the file is behind this build — a copy first, \`${command} store backup <file>\`, then \`${command} store migrate\``);
|
|
118
|
+
}
|
|
113
119
|
if (answer.pendingNormalization) {
|
|
114
120
|
renderer.note(`${answer.pendingNormalization} messages wait for normalization — \`${command} store migrate\``);
|
|
115
121
|
}
|
|
@@ -206,6 +212,136 @@ const migrateCommand = (messenger) => new Command("migrate")
|
|
|
206
212
|
});
|
|
207
213
|
renderer.result(answer);
|
|
208
214
|
});
|
|
215
|
+
const backupCommand = () => new Command("backup")
|
|
216
|
+
.description("copy the store into a new file, while it is in use; never overwrites a file")
|
|
217
|
+
.argument("<file>", "the new file")
|
|
218
|
+
.action(async function (file) {
|
|
219
|
+
const { renderer } = outputFor(this);
|
|
220
|
+
const path = storePath(environmentOf(this).env ?? process.env);
|
|
221
|
+
const target = resolve(file);
|
|
222
|
+
if (!existsSync(path))
|
|
223
|
+
throw new CliError("not_found", `no store at ${path} to back up`);
|
|
224
|
+
if (existsSync(target))
|
|
225
|
+
throw new CliError("validation_error", `${target} exists — a backup never overwrites a file`);
|
|
226
|
+
// VACUUM INTO fills an empty file and keeps its mode; a file it creates itself is readable by all.
|
|
227
|
+
writeFileSync(target, "", { flag: "wx", mode: 0o600 });
|
|
228
|
+
try {
|
|
229
|
+
await reading(path, (database) => database.prepare("VACUUM INTO ?").run(target));
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
rmSync(target);
|
|
233
|
+
throw error;
|
|
234
|
+
}
|
|
235
|
+
const copy = await reading(target, (database) => ({
|
|
236
|
+
schema: schemaOf(database).version,
|
|
237
|
+
rows: { chats: count(database, "chats"), messages: count(database, "messages") },
|
|
238
|
+
}));
|
|
239
|
+
renderer.result({ path: target, from: path, bytes: bytesOf(target), ...copy });
|
|
240
|
+
});
|
|
241
|
+
/**
|
|
242
|
+
* Puts a backup in place of the store, keeping the store it replaces beside it. Refuses while any
|
|
243
|
+
* process has the file open — it would go on writing to the file set aside — or while this CLI's
|
|
244
|
+
* `serve` runs: that opens the store on its first write, so until then it holds nothing to see.
|
|
245
|
+
*/
|
|
246
|
+
const restoreCommand = (messenger) => new Command("restore")
|
|
247
|
+
.description("put a backup in place of the store; the store it replaces is kept beside it, never deleted")
|
|
248
|
+
.argument("<file>", "a file `store backup` wrote")
|
|
249
|
+
.action(async function (file) {
|
|
250
|
+
const { renderer } = outputFor(this);
|
|
251
|
+
const path = storePath(environmentOf(this).env ?? process.env);
|
|
252
|
+
const backup = resolve(file);
|
|
253
|
+
if (!existsSync(backup))
|
|
254
|
+
throw new CliError("not_found", `no file at ${backup}`);
|
|
255
|
+
if (existsSync(path) && realpathSync(backup) === realpathSync(path)) {
|
|
256
|
+
throw new CliError("validation_error", `${backup} is the store itself`);
|
|
257
|
+
}
|
|
258
|
+
const schema = await backupSchema(backup);
|
|
259
|
+
const env = environmentOf(this).env ?? process.env;
|
|
260
|
+
const serving = servingProfiles(messenger.app, env);
|
|
261
|
+
if (serving.length > 0) {
|
|
262
|
+
throw new CliError("validation_error", `${messenger.app.command} serve is running for ${serving.join(", ")} — \`${messenger.app.command} server stop\` first`);
|
|
263
|
+
}
|
|
264
|
+
const stamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
265
|
+
const kept = existsSync(path) ? `${path}.before-restore-${stamp}` : null;
|
|
266
|
+
if (kept)
|
|
267
|
+
await quiesce(path, messenger, (message) => renderer.warn(message));
|
|
268
|
+
else
|
|
269
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
270
|
+
const incoming = `${path}.restoring-${stamp}`;
|
|
271
|
+
copyFileSync(backup, incoming, constants.COPYFILE_EXCL);
|
|
272
|
+
chmodSync(incoming, 0o600);
|
|
273
|
+
if (kept) {
|
|
274
|
+
renameSync(path, kept);
|
|
275
|
+
for (const suffix of ["-wal", "-shm"])
|
|
276
|
+
if (existsSync(`${path}${suffix}`))
|
|
277
|
+
renameSync(`${path}${suffix}`, `${kept}${suffix}`);
|
|
278
|
+
}
|
|
279
|
+
renameSync(incoming, path);
|
|
280
|
+
renderer.result({ path, restoredFrom: backup, keptAt: kept, schema: schema.version });
|
|
281
|
+
if (kept)
|
|
282
|
+
renderer.note(`the store it replaced is kept at ${kept}`);
|
|
283
|
+
// One that has not touched the store yet holds nothing open, and was not seen.
|
|
284
|
+
renderer.note("restart every serve and mcp of either CLI that was running, so they read the restored store");
|
|
285
|
+
if (schema.version < SPEAKS) {
|
|
286
|
+
renderer.note(`the backup is behind this build; the next command migrates it — \`${messenger.app.command} store migrate\` now`);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
const backupSchema = async (backup) => {
|
|
290
|
+
let read;
|
|
291
|
+
try {
|
|
292
|
+
read = await reading(backup, (database) => ({
|
|
293
|
+
integrity: String(database.prepare("PRAGMA quick_check(1)").get()?.quick_check),
|
|
294
|
+
schema: schemaOf(database),
|
|
295
|
+
}));
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
throw new CliError("validation_error", `${backup} is not a store this tool can read: ${messageOf(error)}`);
|
|
299
|
+
}
|
|
300
|
+
const { integrity, schema } = read;
|
|
301
|
+
if (schema.version === 0)
|
|
302
|
+
throw new CliError("validation_error", `${backup} holds no message store`);
|
|
303
|
+
if (integrity !== "ok")
|
|
304
|
+
throw new CliError("validation_error", `${backup} is damaged: ${integrity}`);
|
|
305
|
+
if (!schema.writable) {
|
|
306
|
+
throw new CliError("configuration_error", `the backup was written by a newer version (schema ${schema.version}, needs at least ` +
|
|
307
|
+
`${schema.minCompatible}; this one speaks ${SPEAKS}) — upgrade this tool`);
|
|
308
|
+
}
|
|
309
|
+
return schema;
|
|
310
|
+
};
|
|
311
|
+
/**
|
|
312
|
+
* No other process has the file open, no write is under way, and the write-ahead log is folded in,
|
|
313
|
+
* so the file set aside is whole on its own. In WAL mode SQLite cannot say who has the file open —
|
|
314
|
+
* `EXCLUSIVE` behaves as `IMMEDIATE` — so that is asked of the system.
|
|
315
|
+
*/
|
|
316
|
+
const quiesce = async (path, messenger, warn) => {
|
|
317
|
+
const { command } = messenger.app;
|
|
318
|
+
const files = [path, `${path}-wal`, `${path}-shm`]
|
|
319
|
+
.filter((file) => existsSync(file))
|
|
320
|
+
.map((file) => realpathSync(file));
|
|
321
|
+
const holders = holdersOf(files);
|
|
322
|
+
if (holders === undefined) {
|
|
323
|
+
warn(`this system cannot say which processes have the store open — restart every running serve and mcp after this`);
|
|
324
|
+
}
|
|
325
|
+
else if (holders.length > 0) {
|
|
326
|
+
throw new CliError("validation_error", `the store is open in process ${holders.join(", ")} — stop it first (a serve: \`${command} server stop\`, ` +
|
|
327
|
+
"or the other CLI's; an mcp: its client), then restore");
|
|
328
|
+
}
|
|
329
|
+
const database = await openCache(path);
|
|
330
|
+
try {
|
|
331
|
+
database.exec("PRAGMA busy_timeout = 1000");
|
|
332
|
+
database.exec("PRAGMA wal_checkpoint(TRUNCATE)");
|
|
333
|
+
try {
|
|
334
|
+
database.exec("BEGIN IMMEDIATE");
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
throw new CliError("validation_error", "a write to the store is under way — try again in a moment");
|
|
338
|
+
}
|
|
339
|
+
database.exec("ROLLBACK");
|
|
340
|
+
}
|
|
341
|
+
finally {
|
|
342
|
+
database.close();
|
|
343
|
+
}
|
|
344
|
+
};
|
|
209
345
|
const isoOf = (value) => new Date(Number(value)).toISOString();
|
|
210
346
|
const messageOf = (error) => (error instanceof Error ? error.message : String(error));
|
|
211
347
|
//# sourceMappingURL=store-maintenance-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-maintenance-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/store-maintenance-command.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store-maintenance-command.js","sourceRoot":"","sources":["../../../src/cli/messenger/store-maintenance-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/parity/bin.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { parityProblems } from "./manifest.js";
|
|
4
|
+
const cli = process.argv[2];
|
|
5
|
+
if (cli !== "max" && cli !== "tg") {
|
|
6
|
+
console.error("usage: <tool> commands --json | cli-messaging-parity <max|tg>");
|
|
7
|
+
process.exit(2);
|
|
8
|
+
}
|
|
9
|
+
const manifest = JSON.parse(readFileSync(new URL("../../parity.json", import.meta.url), "utf8"));
|
|
10
|
+
const problems = parityProblems(manifest, cli, JSON.parse(readFileSync(0, "utf8")));
|
|
11
|
+
for (const problem of problems)
|
|
12
|
+
console.error(problem);
|
|
13
|
+
if (problems.length > 0) {
|
|
14
|
+
console.error(`${problems.length} difference(s) from @leemour/cli-messaging parity.json — see docs/dev/STANDARD.md`);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=bin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/parity/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAA2B,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC3B,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAA;IAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,MAAM,QAAQ,GAAa,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,mBAAmB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;AAC1G,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,EAAE,GAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;AACjG,KAAK,MAAM,OAAO,IAAI,QAAQ;IAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AACtD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,MAAM,mFAAmF,CAAC,CAAA;IACpH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parity/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parity/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { CommandInfo, OptionInfo } from "@leemour/cli-core/commands";
|
|
2
|
+
export type Cli = "max" | "tg";
|
|
3
|
+
export type State = "both" | "max-only" | "tg-only" | "planned";
|
|
4
|
+
/** `"both"`, or a one-sided or planned entry that says why (`reason`) or who closes it (`by`). */
|
|
5
|
+
export type Entry = "both" | {
|
|
6
|
+
state: Exclude<State, "both">;
|
|
7
|
+
reason?: string;
|
|
8
|
+
by?: string;
|
|
9
|
+
};
|
|
10
|
+
export interface CommandRow {
|
|
11
|
+
state: State;
|
|
12
|
+
reason?: string;
|
|
13
|
+
by?: string;
|
|
14
|
+
/** On a planned row: it stands for every path below it, which then have no rows of their own. */
|
|
15
|
+
subtree?: boolean;
|
|
16
|
+
options?: Record<string, Entry>;
|
|
17
|
+
}
|
|
18
|
+
export interface CatalogueOption {
|
|
19
|
+
value?: string;
|
|
20
|
+
meaning: string;
|
|
21
|
+
default?: string;
|
|
22
|
+
note?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface Manifest {
|
|
25
|
+
options: Record<string, CatalogueOption>;
|
|
26
|
+
globalOptions: Record<string, Entry>;
|
|
27
|
+
commands: Record<string, CommandRow>;
|
|
28
|
+
}
|
|
29
|
+
/** What `commands --json` prints, as far as the check reads it. */
|
|
30
|
+
export interface CommandsJson {
|
|
31
|
+
cli: string;
|
|
32
|
+
globalOptions: readonly OptionInfo[];
|
|
33
|
+
commands: readonly CommandInfo[];
|
|
34
|
+
}
|
|
35
|
+
export declare const longName: (flags: string) => string;
|
|
36
|
+
/** The row above `path` that covers it and everything else below it: one-sided, or planned as a subtree. */
|
|
37
|
+
export declare const coveringRow: (manifest: Manifest, path: string) => string | undefined;
|
|
38
|
+
/** Everything wrong with the manifest itself; empty when it is well-formed. */
|
|
39
|
+
export declare const manifestProblems: (manifest: Manifest) => string[];
|
|
40
|
+
/** Where a CLI's `commands --json` disagrees with its column of the manifest; empty when it agrees. */
|
|
41
|
+
export declare const parityProblems: (manifest: Manifest, cli: Cli, program: CommandsJson) => string[];
|
|
42
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/parity/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEzE,MAAM,MAAM,GAAG,GAAG,KAAK,GAAG,IAAI,CAAA;AAC9B,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/D,kGAAkG;AAClG,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE5F,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,iGAAiG;IACjG,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CACrC;AAED,mEAAmE;AACnE,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,SAAS,UAAU,EAAE,CAAA;IACpC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAA;CACjC;AAID,eAAO,MAAM,QAAQ,UAAW,MAAM,KAAG,MAA+E,CAAA;AAwBxH,4GAA4G;AAC5G,eAAO,MAAM,WAAW,aAAc,QAAQ,QAAQ,MAAM,KAAG,MAAM,GAAG,SAQvE,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,aAAc,QAAQ,KAAG,MAAM,EAgC3D,CAAA;AAwBD,uGAAuG;AACvG,eAAO,MAAM,cAAc,aAAc,QAAQ,OAAO,GAAG,WAAW,YAAY,KAAG,MAAM,EAmB1F,CAAA"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
const STATES = ["both", "max-only", "tg-only", "planned"];
|
|
2
|
+
export const longName = (flags) => flags.split(/[\s,|]+/).find((part) => part.startsWith("--")) ?? flags;
|
|
3
|
+
const stateOf = (entry) => (typeof entry === "string" ? entry : entry.state);
|
|
4
|
+
const entryProblems = (where, entry) => {
|
|
5
|
+
if (typeof entry === "string")
|
|
6
|
+
return entry === "both" ? [] : [`${where}: "${entry}" — only "both" stands alone`];
|
|
7
|
+
const problems = [];
|
|
8
|
+
if (!STATES.includes(entry.state))
|
|
9
|
+
problems.push(`${where}: no such state "${entry.state}"`);
|
|
10
|
+
if (entry.state === "max-only" || entry.state === "tg-only") {
|
|
11
|
+
if (!entry.reason)
|
|
12
|
+
problems.push(`${where}: ${entry.state} without a reason`);
|
|
13
|
+
}
|
|
14
|
+
else if (entry.reason)
|
|
15
|
+
problems.push(`${where}: a reason on a ${entry.state} row`);
|
|
16
|
+
if (entry.state === "planned" && !entry.by)
|
|
17
|
+
problems.push(`${where}: planned without "by"`);
|
|
18
|
+
if (entry.state !== "planned" && entry.by)
|
|
19
|
+
problems.push(`${where}: "by" on a ${entry.state} row`);
|
|
20
|
+
return problems;
|
|
21
|
+
};
|
|
22
|
+
const unsorted = (where, keys) => {
|
|
23
|
+
const sorted = [...keys].sort();
|
|
24
|
+
const at = keys.findIndex((key, index) => key !== sorted[index]);
|
|
25
|
+
return at === -1 ? [] : [`${where}: keys out of order at "${keys[at]}" — run the seed to sort`];
|
|
26
|
+
};
|
|
27
|
+
const oneSided = (state) => state === "max-only" || state === "tg-only";
|
|
28
|
+
/** The row above `path` that covers it and everything else below it: one-sided, or planned as a subtree. */
|
|
29
|
+
export const coveringRow = (manifest, path) => {
|
|
30
|
+
const words = path.split(" ");
|
|
31
|
+
for (let length = words.length - 1; length > 0; length--) {
|
|
32
|
+
const parent = words.slice(0, length).join(" ");
|
|
33
|
+
const row = manifest.commands[parent];
|
|
34
|
+
if (row && (oneSided(row.state) || row.subtree))
|
|
35
|
+
return parent;
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
};
|
|
39
|
+
/** Everything wrong with the manifest itself; empty when it is well-formed. */
|
|
40
|
+
export const manifestProblems = (manifest) => {
|
|
41
|
+
const problems = [
|
|
42
|
+
...unsorted("options", Object.keys(manifest.options)),
|
|
43
|
+
...unsorted("globalOptions", Object.keys(manifest.globalOptions)),
|
|
44
|
+
...unsorted("commands", Object.keys(manifest.commands)),
|
|
45
|
+
];
|
|
46
|
+
const used = new Set();
|
|
47
|
+
const optionEntries = (where, options) => {
|
|
48
|
+
problems.push(...unsorted(`${where} options`, Object.keys(options)));
|
|
49
|
+
for (const [name, entry] of Object.entries(options)) {
|
|
50
|
+
used.add(name);
|
|
51
|
+
if (!manifest.options[name])
|
|
52
|
+
problems.push(`${where} ${name}: not in the option catalogue`);
|
|
53
|
+
problems.push(...entryProblems(`${where} ${name}`, entry));
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
optionEntries("(global)", manifest.globalOptions);
|
|
57
|
+
for (const [path, row] of Object.entries(manifest.commands)) {
|
|
58
|
+
problems.push(...entryProblems(path, row));
|
|
59
|
+
if (row.subtree && row.state !== "planned")
|
|
60
|
+
problems.push(`${path}: subtree on a ${row.state} row`);
|
|
61
|
+
const parent = path.split(" ").slice(0, -1).join(" ");
|
|
62
|
+
if (parent && !manifest.commands[parent])
|
|
63
|
+
problems.push(`${path}: no row for its parent "${parent}"`);
|
|
64
|
+
const cover = coveringRow(manifest, path);
|
|
65
|
+
if (cover)
|
|
66
|
+
problems.push(`${path}: under "${cover}", which is ${manifest.commands[cover]?.state} and covers it`);
|
|
67
|
+
optionEntries(path, row.options ?? {});
|
|
68
|
+
}
|
|
69
|
+
for (const [name, option] of Object.entries(manifest.options)) {
|
|
70
|
+
if (!option.meaning)
|
|
71
|
+
problems.push(`options ${name}: no meaning`);
|
|
72
|
+
if (!used.has(name))
|
|
73
|
+
problems.push(`options ${name}: in the catalogue, on no command`);
|
|
74
|
+
}
|
|
75
|
+
return problems;
|
|
76
|
+
};
|
|
77
|
+
const present = (cli, state) => state === "planned" ? undefined : state === "both" || state === `${cli}-only`;
|
|
78
|
+
const compare = (cli, where, state, has) => {
|
|
79
|
+
if (state === undefined)
|
|
80
|
+
return has ? [`${where}: not in the manifest — add its row first`] : [];
|
|
81
|
+
const expected = present(cli, state);
|
|
82
|
+
if (expected === undefined || expected === has)
|
|
83
|
+
return [];
|
|
84
|
+
return has
|
|
85
|
+
? [`${where}: ${cli} has it, the manifest says ${state}`]
|
|
86
|
+
: [`${where}: the manifest says ${state}, ${cli} lacks it`];
|
|
87
|
+
};
|
|
88
|
+
const optionsOf = (options) => new Set(options.map((option) => longName(option.flags)));
|
|
89
|
+
const compareOptions = (cli, where, entries, options) => {
|
|
90
|
+
const has = optionsOf(options);
|
|
91
|
+
return [...new Set([...has, ...Object.keys(entries)])].sort().flatMap((name) => {
|
|
92
|
+
const entry = entries[name];
|
|
93
|
+
return compare(cli, `${where} ${name}`, entry === undefined ? undefined : stateOf(entry), has.has(name));
|
|
94
|
+
});
|
|
95
|
+
};
|
|
96
|
+
/** Where a CLI's `commands --json` disagrees with its column of the manifest; empty when it agrees. */
|
|
97
|
+
export const parityProblems = (manifest, cli, program) => {
|
|
98
|
+
const found = new Map();
|
|
99
|
+
const walk = (command) => {
|
|
100
|
+
found.set(command.path.join(" "), command);
|
|
101
|
+
command.commands.forEach(walk);
|
|
102
|
+
};
|
|
103
|
+
program.commands.forEach(walk);
|
|
104
|
+
const problems = compareOptions(cli, "(global)", manifest.globalOptions, program.globalOptions);
|
|
105
|
+
const paths = [...new Set([...found.keys(), ...Object.keys(manifest.commands)])].sort();
|
|
106
|
+
for (const path of paths) {
|
|
107
|
+
if (coveringRow(manifest, path))
|
|
108
|
+
continue;
|
|
109
|
+
const row = manifest.commands[path];
|
|
110
|
+
const command = found.get(path);
|
|
111
|
+
problems.push(...compare(cli, path, row?.state, command !== undefined));
|
|
112
|
+
if (row && command && present(cli, row.state) !== false && !oneSided(row.state))
|
|
113
|
+
problems.push(...compareOptions(cli, path, row.options ?? {}, command.options));
|
|
114
|
+
}
|
|
115
|
+
return problems;
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/parity/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AccountKey } from "../store.js";
|
|
2
|
+
import type { StoreContext } from "./open.js";
|
|
3
|
+
/** An account's row, made on first sight; a name only replaces what was known when there is one. */
|
|
4
|
+
export declare const accountPk: ({ orm, now }: StoreContext, { provider, account }: AccountKey, name?: string | null) => number;
|
|
5
|
+
export declare const findAccountPk: ({ orm }: StoreContext, { provider, account }: AccountKey) => number | undefined;
|
|
6
|
+
//# sourceMappingURL=accounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../src/store/sqlite/accounts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAG7C,oGAAoG;AACpG,eAAO,MAAM,SAAS,iBAAkB,YAAY,yBAAyB,UAAU,SAAQ,MAAM,GAAG,IAAI,WAWzG,CAAA;AAEH,eAAO,MAAM,aAAa,YAAa,YAAY,yBAAyB,UAAU,KAAG,MAAM,GAAG,SAKpF,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { and, eq, sql } from "./drizzle/core.js";
|
|
2
|
+
import { accounts } from "./schema.js";
|
|
3
|
+
/** An account's row, made on first sight; a name only replaces what was known when there is one. */
|
|
4
|
+
export const accountPk = ({ orm, now }, { provider, account }, name = null) => Number(orm
|
|
5
|
+
.insert(accounts)
|
|
6
|
+
.values({ provider, nativeId: account, name, createdAt: now() })
|
|
7
|
+
.onConflictDoUpdate({
|
|
8
|
+
target: [accounts.provider, accounts.nativeId],
|
|
9
|
+
set: { name: sql `coalesce(excluded.name, ${accounts.name})` },
|
|
10
|
+
})
|
|
11
|
+
.returning({ pk: accounts.pk })
|
|
12
|
+
.get()?.pk);
|
|
13
|
+
export const findAccountPk = ({ orm }, { provider, account }) => orm
|
|
14
|
+
.select({ pk: accounts.pk })
|
|
15
|
+
.from(accounts)
|
|
16
|
+
.where(and(eq(accounts.provider, provider), eq(accounts.nativeId, account)))
|
|
17
|
+
.get()?.pk;
|
|
18
|
+
//# sourceMappingURL=accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../../src/store/sqlite/accounts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,oGAAoG;AACpG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAgB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAc,EAAE,IAAI,GAAkB,IAAI,EAAE,EAAE,CACrH,MAAM,CACJ,GAAG;KACA,MAAM,CAAC,QAAQ,CAAC;KAChB,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC;KAC/D,kBAAkB,CAAC;IAClB,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC9C,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAA,2BAA2B,QAAQ,CAAC,IAAI,GAAG,EAAE;CAC9D,CAAC;KACD,SAAS,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;KAC9B,GAAG,EAAE,EAAE,EAAE,CACb,CAAA;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,EAAgB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAc,EAAsB,EAAE,CAC5G,GAAG;KACA,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;KAC3B,IAAI,CAAC,QAAQ,CAAC;KACd,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;KAC3E,GAAG,EAAE,EAAE,EAAE,CAAA"}
|