@cello-protocol/daemon 0.0.49 → 0.0.51
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/bin/cello-daemon.js +13 -0
- package/dist/bin/cello-daemon.js.map +1 -1
- package/dist/connect-or-start.d.ts +11 -11
- package/dist/connect-or-start.d.ts.map +1 -1
- package/dist/connect-or-start.js +97 -39
- package/dist/connect-or-start.js.map +1 -1
- package/dist/daemon.d.ts +11 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +127 -26
- package/dist/daemon.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/ipc-server.d.ts.map +1 -1
- package/dist/ipc-server.js +79 -13
- package/dist/ipc-server.js.map +1 -1
- package/dist/lock-file.d.ts +12 -0
- package/dist/lock-file.d.ts.map +1 -1
- package/dist/lock-file.js +36 -1
- package/dist/lock-file.js.map +1 -1
- package/dist/park-envelope.d.ts +93 -0
- package/dist/park-envelope.d.ts.map +1 -0
- package/dist/park-envelope.js +172 -0
- package/dist/park-envelope.js.map +1 -0
- package/dist/retry-queue.d.ts.map +1 -1
- package/dist/retry-queue.js +13 -1
- package/dist/retry-queue.js.map +1 -1
- package/dist/session-node-manager.d.ts +31 -13
- package/dist/session-node-manager.d.ts.map +1 -1
- package/dist/session-node-manager.js +104 -26
- package/dist/session-node-manager.js.map +1 -1
- package/dist/singleton-lock.d.ts +85 -0
- package/dist/singleton-lock.d.ts.map +1 -0
- package/dist/singleton-lock.js +208 -0
- package/dist/singleton-lock.js.map +1 -0
- package/dist/sqlcipher-db.d.ts +28 -0
- package/dist/sqlcipher-db.d.ts.map +1 -1
- package/dist/sqlcipher-db.js +6 -1
- package/dist/sqlcipher-db.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOD-SINGLE-DAEMON-1 — the daemon singleton, enforced by the kernel.
|
|
3
|
+
*
|
|
4
|
+
* `daemon.lock` is a JSON file, and a file cannot answer "is a daemon running?". Anyone may delete
|
|
5
|
+
* it; a `kill -9` leaves it behind naming a pid that is dead — or, worse, one the OS has since REUSED
|
|
6
|
+
* for an unrelated process, which makes `isProcessAlive()` say "yes" forever. Every stale-lock
|
|
7
|
+
* heuristic ever written is an attempt to guess what only the kernel actually knows.
|
|
8
|
+
*
|
|
9
|
+
* So we ask the kernel. The daemon takes a real POSIX write lock (`fcntl`) on a dedicated file and
|
|
10
|
+
* holds it for its entire lifetime. Two processes cannot hold it at once, and the kernel drops it the
|
|
11
|
+
* instant the holder dies — SIGKILL, panic, `kill -9`, however it goes. There is no stale state to
|
|
12
|
+
* clean up and no recovery step to get wrong.
|
|
13
|
+
*
|
|
14
|
+
* ## Why SQLite is the lock
|
|
15
|
+
*
|
|
16
|
+
* Node has no `flock`. `fs.constants.O_EXLOCK` exists only on macOS/BSD — using it would leave every
|
|
17
|
+
* Linux operator (including the EC2 demo agent) with NO lock at all, which is worse than none because
|
|
18
|
+
* it looks like one. A native `flock` addon (`fs-ext`) compiles from source, and install time is a
|
|
19
|
+
* cost every operator pays on every version bump (see CLAUDE.md — the client is a heavy local node,
|
|
20
|
+
* not a thin wrapper).
|
|
21
|
+
*
|
|
22
|
+
* `@signalapp/sqlcipher` is already a daemon dependency, ships prebuilt (no compile), and SQLite's
|
|
23
|
+
* whole business is taking correct `fcntl` locks on every POSIX platform. `locking_mode = exclusive`
|
|
24
|
+
* plus one header write acquires the exclusive lock and holds it until the connection closes. A
|
|
25
|
+
* second process gets SQLITE_BUSY immediately (`busy_timeout = 0`). SQLite also tracks locks per
|
|
26
|
+
* inode inside the process, so this correctly refuses a second daemon in the SAME process too —
|
|
27
|
+
* which raw `fcntl`, whose locks are per-process, would not.
|
|
28
|
+
*
|
|
29
|
+
* The lock database holds no rows and never will. It is a mutex that happens to be spelled in SQL.
|
|
30
|
+
*
|
|
31
|
+
* ## The division of labour with daemon.lock (AC4)
|
|
32
|
+
*
|
|
33
|
+
* The OS lock DECIDES whether a daemon may start. `daemon.lock` only SUPPLIES METADATA — it is how we
|
|
34
|
+
* learn the holder's pid to name in the error, because `fcntl` will not tell us. If the JSON is
|
|
35
|
+
* missing, stale, or lying, the worst outcome is a less specific error message. It can never admit a
|
|
36
|
+
* second daemon, and it can never wedge a legitimate one out.
|
|
37
|
+
*
|
|
38
|
+
* ## The one constraint
|
|
39
|
+
*
|
|
40
|
+
* `~/.cello` must live on a LOCAL filesystem. POSIX `fcntl` locks are advisory-but-honoured on local
|
|
41
|
+
* filesystems (APFS, ext4, xfs — macOS and the Linux hosts we run on); on NFSv3 without a working
|
|
42
|
+
* `lockd`, and on some 9p/WSL2 setups, they can silently degrade to no-ops. There, two daemons would
|
|
43
|
+
* both "acquire" and the singleton would be absent while appearing present. We do not attempt to
|
|
44
|
+
* detect this — a real self-test needs a second process, which is far too much to do at every startup.
|
|
45
|
+
* The lock path is logged in `daemon.singleton.acquired` so an operator debugging a two-daemon
|
|
46
|
+
* situation can see exactly which file the kernel was asked about.
|
|
47
|
+
*/
|
|
48
|
+
import { join } from "node:path";
|
|
49
|
+
import { readFileSync } from "node:fs";
|
|
50
|
+
import { loadSignalModule } from "./sqlcipher-db.js";
|
|
51
|
+
/** The file the kernel lock is taken on. Holds no data — see the note above. */
|
|
52
|
+
export const SINGLETON_LOCK_FILENAME = "daemon.singleton";
|
|
53
|
+
export class DaemonAlreadyRunningError extends Error {
|
|
54
|
+
/** The pid from `daemon.lock`, or null when that file is absent/unreadable/malformed. */
|
|
55
|
+
holderPid;
|
|
56
|
+
constructor(holderPid) {
|
|
57
|
+
super(holderPid === null
|
|
58
|
+
? "another daemon is already running (pid unknown — daemon.lock is missing or unreadable)"
|
|
59
|
+
: `another daemon is already running (pid ${holderPid})`);
|
|
60
|
+
this.name = "DaemonAlreadyRunningError";
|
|
61
|
+
this.holderPid = holderPid;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Read the holder's pid from the advisory `daemon.lock`. METADATA ONLY (AC4): this pid is used to
|
|
66
|
+
* write a better error message and for nothing else. It never decides anything, so a stale or absent
|
|
67
|
+
* file costs us a specific error message, never correctness.
|
|
68
|
+
*/
|
|
69
|
+
function readHolderPid(celloDir) {
|
|
70
|
+
try {
|
|
71
|
+
const parsed = JSON.parse(readFileSync(join(celloDir, "daemon.lock"), "utf-8"));
|
|
72
|
+
return typeof parsed.pid === "number" ? parsed.pid : null;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function isBusy(err) {
|
|
79
|
+
const code = err?.code;
|
|
80
|
+
return typeof code === "string" && code.startsWith("SQLITE_BUSY");
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Take the exclusive OS lock for `celloDir`, or throw `DaemonAlreadyRunningError` if another process
|
|
84
|
+
* holds it. Returns a handle that holds the lock until `release()` (or process death).
|
|
85
|
+
*
|
|
86
|
+
* Call this BEFORE opening the database, registering agents, or connecting to the directory (AC2):
|
|
87
|
+
* a daemon that loses the race must do NONE of those things.
|
|
88
|
+
*/
|
|
89
|
+
/**
|
|
90
|
+
* How long a STARTING daemon will wait for a contended lock before giving up.
|
|
91
|
+
*
|
|
92
|
+
* Not zero, and the reason is subtle. `probeSingletonLock()` does not read the lock — it TAKES it and
|
|
93
|
+
* drops it. That means a probe (a concurrent `cello login`, a shim, a status check) holds the
|
|
94
|
+
* exclusive lock for the few milliseconds it takes to open the file and write the header. With a zero
|
|
95
|
+
* timeout, a daemon that reaches its acquisition inside that window would get SQLITE_BUSY and exit
|
|
96
|
+
* "another daemon is already running" — when no other daemon exists at all. A read-only question must
|
|
97
|
+
* never be able to kill the thing it is asking about.
|
|
98
|
+
*
|
|
99
|
+
* A genuine second daemon still loses within this bound, which is what AC2's "immediately" is for.
|
|
100
|
+
*/
|
|
101
|
+
const DAEMON_ACQUIRE_BUSY_TIMEOUT_MS = 3000;
|
|
102
|
+
/**
|
|
103
|
+
* How long a PROBE waits before concluding the lock is held.
|
|
104
|
+
*
|
|
105
|
+
* Also not zero, and for the mirror of the reason above. A probe takes the lock too, so two probes
|
|
106
|
+
* can collide with each other: a second `cello login`, or the MCP shim autostarting while the
|
|
107
|
+
* operator types `cello login`. With a zero timeout the loser of that collision would report "held"
|
|
108
|
+
* — i.e. "a daemon is already running" — when there is no daemon at all, and the caller would sit in
|
|
109
|
+
* connectWithRetry for ten seconds before failing with a confident lie. That is precisely the class
|
|
110
|
+
* of wrong-but-certain statement this whole story exists to abolish.
|
|
111
|
+
*
|
|
112
|
+
* A REAL daemon holds the lock forever, so waiting a little costs a probe nothing in the case that
|
|
113
|
+
* matters — it still times out and still correctly answers "held". A transient probe-vs-probe
|
|
114
|
+
* collision, meanwhile, resolves in milliseconds. Strictly better than zero in both directions.
|
|
115
|
+
*/
|
|
116
|
+
const PROBE_BUSY_TIMEOUT_MS = 500;
|
|
117
|
+
/** The daemon binary's exit code when it loses the singleton race — distinct from 1 = "broken". */
|
|
118
|
+
export const EXIT_ALREADY_RUNNING = 3;
|
|
119
|
+
function openLockDb(lockDbPath) {
|
|
120
|
+
const mod = loadSignalModule();
|
|
121
|
+
const Ctor = mod.Database ?? mod.default;
|
|
122
|
+
try {
|
|
123
|
+
return new Ctor(lockDbPath);
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
// The file could not be opened at all (permissions, unwritable dir). NOT a contended lock —
|
|
127
|
+
// never let this be mistaken for "a daemon is running".
|
|
128
|
+
throw new Error(`Could not open the daemon singleton lock at ${lockDbPath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export function acquireSingletonLock(celloDir, logger, busyTimeoutMs = DAEMON_ACQUIRE_BUSY_TIMEOUT_MS) {
|
|
132
|
+
const lockDbPath = join(celloDir, SINGLETON_LOCK_FILENAME);
|
|
133
|
+
const db = openLockDb(lockDbPath);
|
|
134
|
+
try {
|
|
135
|
+
db.pragma(`busy_timeout = ${busyTimeoutMs}`);
|
|
136
|
+
db.pragma("locking_mode = exclusive");
|
|
137
|
+
// SQLite defers the actual lock acquisition until it has a reason to write. `user_version` is a
|
|
138
|
+
// write to the database header — it takes the exclusive lock and stores nothing.
|
|
139
|
+
db.pragma("user_version = 1");
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
try {
|
|
143
|
+
db.close();
|
|
144
|
+
}
|
|
145
|
+
catch { /* we are already failing; closing is best-effort */ }
|
|
146
|
+
if (isBusy(err)) {
|
|
147
|
+
const holderPid = readHolderPid(celloDir);
|
|
148
|
+
logger.info("daemon.singleton.contended", { holderPid, lockPath: lockDbPath });
|
|
149
|
+
throw new DaemonAlreadyRunningError(holderPid);
|
|
150
|
+
}
|
|
151
|
+
// Some other SQLite failure. Keep the frame — a bare SQLITE_* error here reads as a database
|
|
152
|
+
// problem, when what actually failed was taking the singleton lock.
|
|
153
|
+
throw new Error(`Could not take the daemon singleton lock at ${lockDbPath}: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
154
|
+
}
|
|
155
|
+
logger.info("daemon.singleton.acquired", { pid: process.pid, lockPath: lockDbPath });
|
|
156
|
+
let released = false;
|
|
157
|
+
return {
|
|
158
|
+
release() {
|
|
159
|
+
if (released)
|
|
160
|
+
return;
|
|
161
|
+
released = true;
|
|
162
|
+
try {
|
|
163
|
+
db.close();
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
logger.warn("daemon.singleton.release.failed", {
|
|
167
|
+
error: err instanceof Error ? err.message : String(err),
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Is a daemon holding the lock for `celloDir` right now?
|
|
175
|
+
*
|
|
176
|
+
* "held" — a daemon is alive. Connect to it; never spawn beside it.
|
|
177
|
+
* "free" — no daemon is running, whatever `daemon.lock` claims. Spawning is correct.
|
|
178
|
+
* "unknown" — we could not ask the kernel (native module missing, directory unreadable).
|
|
179
|
+
*
|
|
180
|
+
* The third answer is the point. "I could not determine whether a daemon is running" and "no daemon is
|
|
181
|
+
* running" are different facts, and collapsing them into one boolean means the caller spawns on both —
|
|
182
|
+
* so the one case where we are blind becomes the one case we start a second daemon. Callers must
|
|
183
|
+
* refuse to spawn on "unknown" and surface the underlying error instead.
|
|
184
|
+
*
|
|
185
|
+
* Asking the kernel rather than trusting `daemon.lock` is also what makes a REUSED pid harmless: a
|
|
186
|
+
* stale lock file naming a live-but-unrelated process would otherwise wedge `cello login` forever.
|
|
187
|
+
*
|
|
188
|
+
* The probe takes the lock and immediately drops it. The gap between the probe and a subsequent spawn
|
|
189
|
+
* is safe: the daemon we spawn acquires the lock authoritatively and exits EXIT_ALREADY_RUNNING if it
|
|
190
|
+
* loses that race — and the caller reads that exit code as "someone else won, connect to them", never
|
|
191
|
+
* as a failure. Two probes can therefore both say "free" and both spawn, and exactly one daemon
|
|
192
|
+
* survives.
|
|
193
|
+
*/
|
|
194
|
+
export function probeSingletonLock(celloDir, logger) {
|
|
195
|
+
try {
|
|
196
|
+
acquireSingletonLock(celloDir, logger, PROBE_BUSY_TIMEOUT_MS).release();
|
|
197
|
+
return "free";
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
if (err instanceof DaemonAlreadyRunningError)
|
|
201
|
+
return "held";
|
|
202
|
+
logger.warn("daemon.singleton.probe.failed", {
|
|
203
|
+
error: err instanceof Error ? err.message : String(err),
|
|
204
|
+
});
|
|
205
|
+
return "unknown";
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=singleton-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"singleton-lock.js","sourceRoot":"","sources":["../src/singleton-lock.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlcipher-db.d.ts
CHANGED
|
@@ -55,6 +55,27 @@ export declare class DbEncryptionError extends Error {
|
|
|
55
55
|
readonly guidance: string;
|
|
56
56
|
constructor(code: DbErrorCode, message: string, guidance: string);
|
|
57
57
|
}
|
|
58
|
+
interface SignalRunResult {
|
|
59
|
+
changes: number;
|
|
60
|
+
lastInsertRowid: number;
|
|
61
|
+
}
|
|
62
|
+
interface SignalStatement {
|
|
63
|
+
run(params?: unknown[] | Record<string, unknown>): SignalRunResult;
|
|
64
|
+
get(params?: unknown[] | Record<string, unknown>): unknown;
|
|
65
|
+
all(params?: unknown[] | Record<string, unknown>): unknown[];
|
|
66
|
+
}
|
|
67
|
+
export interface SignalDatabase {
|
|
68
|
+
exec(sql: string): void;
|
|
69
|
+
prepare(sql: string): SignalStatement;
|
|
70
|
+
pragma(source: string, options?: {
|
|
71
|
+
simple?: boolean;
|
|
72
|
+
}): unknown;
|
|
73
|
+
close(): void;
|
|
74
|
+
}
|
|
75
|
+
interface SignalModule {
|
|
76
|
+
default: new (path: string) => SignalDatabase;
|
|
77
|
+
Database: new (path: string) => SignalDatabase;
|
|
78
|
+
}
|
|
58
79
|
/** True when the file at `dbPath` exists and is an UNENCRYPTED node:sqlite database. */
|
|
59
80
|
export declare function isPlaintextSqliteFile(dbPath: string): boolean;
|
|
60
81
|
/**
|
|
@@ -68,6 +89,12 @@ export declare function isPlaintextSqliteFile(dbPath: string): boolean;
|
|
|
68
89
|
* a pre-story PLAINTEXT DB must be migrated first, not opened).
|
|
69
90
|
*/
|
|
70
91
|
export declare function resolveDbKey(dbPath: string, keyPath: string): Uint8Array;
|
|
92
|
+
/**
|
|
93
|
+
* Load the SQLCipher native module. Exported because the daemon's singleton lock
|
|
94
|
+
* (DOD-SINGLE-DAEMON-1) needs the same engine for its kernel-level file lock — one place that knows
|
|
95
|
+
* how to load the prebuilt, and one error when it will not load.
|
|
96
|
+
*/
|
|
97
|
+
export declare function loadSignalModule(): SignalModule;
|
|
71
98
|
/**
|
|
72
99
|
* Open `dbPath` as a SQLCipher database keyed by `dbKey`. Verifies the key (reads sqlite_master)
|
|
73
100
|
* and enables WAL after verification. Throws DbEncryptionError on any failure — never returns a
|
|
@@ -84,4 +111,5 @@ export declare function openEncryptedDatabase(dbPath: string, dbKey: Uint8Array,
|
|
|
84
111
|
export declare function openEncryptedDatabaseAtPath(dbPath: string, keyPath?: string): DaemonDatabase;
|
|
85
112
|
/** The key file path the daemon uses for a given DB path (DEC-2: one plaintext key file). */
|
|
86
113
|
export declare function dbKeyPathFor(dbPath: string): string;
|
|
114
|
+
export {};
|
|
87
115
|
//# sourceMappingURL=sqlcipher-db.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlcipher-db.d.ts","sourceRoot":"","sources":["../src/sqlcipher-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAsBH,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC1F,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACnC,GAAG,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAAC;IACtC,KAAK,IAAI,IAAI,CAAC;IACd;;;;OAIG;IACH,MAAM,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC;CAClE;AAID,MAAM,MAAM,WAAW,GAAG,4BAA4B,GAAG,0BAA0B,GAAG,gBAAgB,CAAC;AAEvG,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACd,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAMjE;
|
|
1
|
+
{"version":3,"file":"sqlcipher-db.d.ts","sourceRoot":"","sources":["../src/sqlcipher-db.ts"],"names":[],"mappings":"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"}
|
package/dist/sqlcipher-db.js
CHANGED
|
@@ -178,7 +178,12 @@ export function resolveDbKey(dbPath, keyPath) {
|
|
|
178
178
|
return new Uint8Array(key);
|
|
179
179
|
}
|
|
180
180
|
// ─── Open ────────────────────────────────────────────────────────────────────────
|
|
181
|
-
|
|
181
|
+
/**
|
|
182
|
+
* Load the SQLCipher native module. Exported because the daemon's singleton lock
|
|
183
|
+
* (DOD-SINGLE-DAEMON-1) needs the same engine for its kernel-level file lock — one place that knows
|
|
184
|
+
* how to load the prebuilt, and one error when it will not load.
|
|
185
|
+
*/
|
|
186
|
+
export function loadSignalModule() {
|
|
182
187
|
const require = createRequire(import.meta.url);
|
|
183
188
|
try {
|
|
184
189
|
return require("@signalapp/sqlcipher");
|
package/dist/sqlcipher-db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlcipher-db.js","sourceRoot":"","sources":["../src/sqlcipher-db.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sqlcipher-db.js","sourceRoot":"","sources":["../src/sqlcipher-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,UAAU,GACX,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,YAAY,GAAG,EAAE,CAAC,CAAC,UAAU;AA0BnC,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,CAAc;IAC3B,mFAAmF;IAC1E,QAAQ,CAAS;IAC1B,YAAY,IAAiB,EAAE,OAAe,EAAE,QAAgB;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAwBD,mFAAmF;AAEnF,MAAM,kBAAkB;IACb,MAAM,CAAkB;IACjC,YAAY,KAAsB;QAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,GAAG,CAAC,GAAG,MAAiB;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,GAAG,CAAC,GAAG,MAAiB;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,GAAG,CAAC,GAAG,MAAiB;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;CACF;AAED,MAAM,iBAAiB;IACZ,MAAM,CAAiB;IAChC,YAAY,KAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,GAAW;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,CAAC,MAAc,EAAE,OAA8B;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;CACF;AAED,yFAAyF;AACzF,6FAA6F;AAC7F,iGAAiG;AACjG,8EAA8E;AAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpG,wFAAwF;AACxF,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,2FAA2F;YAC3F,MAAM,SAAS,GAAG,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAChE,IAAI,SAAS,GAAG,YAAY,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;QACpD,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC;AAED,oFAAoF;AAEpF;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,OAAe;IAC1D,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,IAAI,iBAAiB,CACzB,4BAA4B,EAC5B,yBAAyB,GAAG,CAAC,MAAM,oBAAoB,YAAY,EAAE,EACrE,mBAAmB,OAAO,uFAAuF,CAClH,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,iBAAiB,CACzB,4BAA4B,EAC5B,sBAAsB,MAAM,wCAAwC,EACpE,iEAAiE,OAAO,wFAAwF,CACjK,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,MAAM,GAAG,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,oBAAoB,OAAO,CAAC,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9F,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC;QACH,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,SAAS,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,uFAAuF;QACvF,2EAA2E;QAC3E,SAAS,CAAC,EAAE,CAAC,CAAC;QACd,IAAI,CAAC;YACH,UAAU,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,SAAS,CAAC,EAAE,CAAC,CAAC;IACd,IAAI,CAAC;QACH,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YACH,UAAU,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,kGAAkG;IAClG,6FAA6F;IAC7F,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,SAAS,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,SAAS,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,oFAAoF;AAEpF;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,sBAAsB,CAAiB,CAAC;IACzD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,IAAI,iBAAiB,CACzB,0BAA0B,EAC1B,wCAAwC,MAAM,EAAE,EAChD,wGAAwG,CACzG,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAc,EACd,KAAiB,EACjB,MAAyE;IAEzE,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC;IAEzC,IAAI,KAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,uCAAuC,MAAM,GAAG,CAAC,CAAC;IAC1G,CAAC;IAED,8FAA8F;IAC9F,iGAAiG;IACjG,8FAA8F;IAC9F,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,KAAK,CAAC,MAAM,CAAC,YAAY,MAAM,IAAI,CAAC,CAAC;IAErC,IAAI,CAAC;QACH,0FAA0F;QAC1F,KAAK,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;QACD,6FAA6F;QAC7F,0EAA0E;QAC1E,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,IAAI,iBAAiB,CACzB,4BAA4B,EAC5B,mDAAmD,MAAM,GAAG,EAC5D,mIAAmI,CACpI,CAAC;IACJ,CAAC;IAED,4FAA4F;IAC5F,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YACnB,4FAA4F;YAC5F,2FAA2F;YAC3F,MAAM,EAAE,IAAI,CAAC,4BAA4B,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,EAAE,IAAI,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,OAAO,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAc,EAAE,OAAgB;IAC1E,MAAM,EAAE,GAAG,OAAO,IAAI,GAAG,MAAM,MAAM,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,iBAAiB,CACzB,4BAA4B,EAC5B,mCAAmC,EAAE,EAAE,EACvC,mEAAmE,CACpE,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IAC7B,OAAO,qBAAqB,CAAC,MAAM,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,GAAG,MAAM,MAAM,CAAC;AACzB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cello-protocol/daemon",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.51",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -30,10 +30,10 @@
|
|
|
30
30
|
"@signalapp/sqlcipher": "^3.3.5",
|
|
31
31
|
"cbor-x": "^1.6.0",
|
|
32
32
|
"it-length-prefixed": "^10.0.1",
|
|
33
|
-
"@cello-protocol/gateway": "0.0.1",
|
|
34
33
|
"@cello-protocol/crypto": "0.0.18",
|
|
35
|
-
"@cello-protocol/
|
|
36
|
-
"@cello-protocol/transport": "0.0.
|
|
34
|
+
"@cello-protocol/gateway": "0.0.1",
|
|
35
|
+
"@cello-protocol/transport": "0.0.18",
|
|
36
|
+
"@cello-protocol/protocol-types": "0.0.20"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^25.6.2",
|