@moxxy/plugin-channel-signal 0.27.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/LICENSE +21 -0
- package/dist/channel/chunker.d.ts +69 -0
- package/dist/channel/chunker.d.ts.map +1 -0
- package/dist/channel/chunker.js +133 -0
- package/dist/channel/chunker.js.map +1 -0
- package/dist/channel/turn-runner.d.ts +33 -0
- package/dist/channel/turn-runner.d.ts.map +1 -0
- package/dist/channel/turn-runner.js +70 -0
- package/dist/channel/turn-runner.js.map +1 -0
- package/dist/channel/voice.d.ts +37 -0
- package/dist/channel/voice.d.ts.map +1 -0
- package/dist/channel/voice.js +88 -0
- package/dist/channel/voice.js.map +1 -0
- package/dist/channel.d.ts +154 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.js +468 -0
- package/dist/channel.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +215 -0
- package/dist/index.js.map +1 -0
- package/dist/jsonrpc.d.ts +53 -0
- package/dist/jsonrpc.d.ts.map +1 -0
- package/dist/jsonrpc.js +167 -0
- package/dist/jsonrpc.js.map +1 -0
- package/dist/keys.d.ts +37 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +55 -0
- package/dist/keys.js.map +1 -0
- package/dist/pair-flow.d.ts +21 -0
- package/dist/pair-flow.d.ts.map +1 -0
- package/dist/pair-flow.js +136 -0
- package/dist/pair-flow.js.map +1 -0
- package/dist/permission.d.ts +21 -0
- package/dist/permission.d.ts.map +1 -0
- package/dist/permission.js +27 -0
- package/dist/permission.js.map +1 -0
- package/dist/schema.d.ts +4295 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +84 -0
- package/dist/schema.js.map +1 -0
- package/dist/setup-wizard.d.ts +14 -0
- package/dist/setup-wizard.d.ts.map +1 -0
- package/dist/setup-wizard.js +85 -0
- package/dist/setup-wizard.js.map +1 -0
- package/dist/sidecar.d.ts +137 -0
- package/dist/sidecar.d.ts.map +1 -0
- package/dist/sidecar.js +421 -0
- package/dist/sidecar.js.map +1 -0
- package/package.json +89 -0
- package/src/channel/chunker.test.ts +135 -0
- package/src/channel/chunker.ts +147 -0
- package/src/channel/turn-runner.ts +97 -0
- package/src/channel/voice.test.ts +136 -0
- package/src/channel/voice.ts +118 -0
- package/src/channel.test.ts +364 -0
- package/src/channel.ts +607 -0
- package/src/index.ts +289 -0
- package/src/jsonrpc.test.ts +128 -0
- package/src/jsonrpc.ts +198 -0
- package/src/keys.test.ts +45 -0
- package/src/keys.ts +56 -0
- package/src/pair-flow.ts +161 -0
- package/src/permission.ts +36 -0
- package/src/schema.ts +98 -0
- package/src/setup-wizard.ts +98 -0
- package/src/sidecar.test.ts +276 -0
- package/src/sidecar.ts +511 -0
- package/src/subcommands.test.ts +206 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,aAIkC,CAAC;AAElE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;gCAOb,CAAC;AAEjB,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAyChE,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAaX,CAAC;AAEjB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAKhB,CAAC;AAEjB,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
package/dist/schema.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Zod validation for signal-cli `receive` notification params — every inbound
|
|
4
|
+
* envelope is validated + size-capped BEFORE any field reaches the session
|
|
5
|
+
* (channel invariant A8). We only type the fields the channel consumes;
|
|
6
|
+
* unknown extras pass through untouched so a newer signal-cli doesn't fail
|
|
7
|
+
* validation, but nothing un-modeled is ever read.
|
|
8
|
+
*/
|
|
9
|
+
/** Cap on inbound prompt text we will forward to the model. */
|
|
10
|
+
export const MAX_INBOUND_TEXT_CHARS = 16_000;
|
|
11
|
+
/**
|
|
12
|
+
* Attachment ids become filenames under signal-cli's attachments dir; a strict
|
|
13
|
+
* charset (no separators, no dots-only names) makes path traversal impossible
|
|
14
|
+
* before we ever join() it.
|
|
15
|
+
*/
|
|
16
|
+
export const attachmentIdSchema = z
|
|
17
|
+
.string()
|
|
18
|
+
.min(1)
|
|
19
|
+
.max(256)
|
|
20
|
+
.regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/, 'invalid attachment id');
|
|
21
|
+
export const attachmentSchema = z
|
|
22
|
+
.object({
|
|
23
|
+
id: attachmentIdSchema.optional(),
|
|
24
|
+
contentType: z.string().max(128).optional(),
|
|
25
|
+
filename: z.string().max(512).nullable().optional(),
|
|
26
|
+
size: z.number().int().nonnegative().optional(),
|
|
27
|
+
})
|
|
28
|
+
.passthrough();
|
|
29
|
+
const groupInfoSchema = z
|
|
30
|
+
.object({
|
|
31
|
+
groupId: z.string().max(256).optional(),
|
|
32
|
+
})
|
|
33
|
+
.passthrough();
|
|
34
|
+
const dataMessageSchema = z
|
|
35
|
+
.object({
|
|
36
|
+
timestamp: z.number().int().optional(),
|
|
37
|
+
message: z.string().max(MAX_INBOUND_TEXT_CHARS).nullable().optional(),
|
|
38
|
+
groupInfo: groupInfoSchema.nullable().optional(),
|
|
39
|
+
attachments: z.array(attachmentSchema).max(16).optional(),
|
|
40
|
+
})
|
|
41
|
+
.passthrough();
|
|
42
|
+
/**
|
|
43
|
+
* A sync'd copy of a message the ACCOUNT OWNER sent from another of their
|
|
44
|
+
* devices (their phone, Signal Desktop, …). "Note to Self" prompts arrive this
|
|
45
|
+
* way — and so can echoes of our OWN sends, which is why the channel filters
|
|
46
|
+
* these by sent-timestamp before acting (loop protection).
|
|
47
|
+
*/
|
|
48
|
+
const sentMessageSchema = z
|
|
49
|
+
.object({
|
|
50
|
+
timestamp: z.number().int().optional(),
|
|
51
|
+
message: z.string().max(MAX_INBOUND_TEXT_CHARS).nullable().optional(),
|
|
52
|
+
destination: z.string().max(128).nullable().optional(),
|
|
53
|
+
destinationNumber: z.string().max(32).nullable().optional(),
|
|
54
|
+
destinationUuid: z.string().max(64).nullable().optional(),
|
|
55
|
+
groupInfo: groupInfoSchema.nullable().optional(),
|
|
56
|
+
attachments: z.array(attachmentSchema).max(16).optional(),
|
|
57
|
+
})
|
|
58
|
+
.passthrough();
|
|
59
|
+
const syncMessageSchema = z
|
|
60
|
+
.object({
|
|
61
|
+
sentMessage: sentMessageSchema.optional(),
|
|
62
|
+
})
|
|
63
|
+
.passthrough();
|
|
64
|
+
export const envelopeSchema = z
|
|
65
|
+
.object({
|
|
66
|
+
source: z.string().max(128).nullable().optional(),
|
|
67
|
+
sourceNumber: z.string().max(32).nullable().optional(),
|
|
68
|
+
sourceUuid: z.string().max(64).nullable().optional(),
|
|
69
|
+
sourceName: z.string().max(256).nullable().optional(),
|
|
70
|
+
sourceDevice: z.number().int().optional(),
|
|
71
|
+
timestamp: z.number().int().optional(),
|
|
72
|
+
dataMessage: dataMessageSchema.nullable().optional(),
|
|
73
|
+
syncMessage: syncMessageSchema.nullable().optional(),
|
|
74
|
+
// typingMessage / receiptMessage / receiptMessage etc. pass through and are
|
|
75
|
+
// simply not consumed.
|
|
76
|
+
})
|
|
77
|
+
.passthrough();
|
|
78
|
+
export const receiveParamsSchema = z
|
|
79
|
+
.object({
|
|
80
|
+
account: z.string().max(64).optional(),
|
|
81
|
+
envelope: envelopeSchema,
|
|
82
|
+
})
|
|
83
|
+
.passthrough();
|
|
84
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ChannelSubcommandContext } from '@moxxy/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Interactive Signal setup wizard (the channel's `interactiveCommand`).
|
|
4
|
+
*
|
|
5
|
+
* Walks the operator through:
|
|
6
|
+
* 1. verify the `signal-cli` binary is installed (install hint when missing),
|
|
7
|
+
* 2. store the account number (E.164) in the vault — no API token exists for
|
|
8
|
+
* Signal; identity comes from device linking,
|
|
9
|
+
* 3. choose the autonomous tool allow-list,
|
|
10
|
+
* 4. hand off to the pair flow (QR link) when the account isn't linked yet,
|
|
11
|
+
* or start the channel directly when it is.
|
|
12
|
+
*/
|
|
13
|
+
export declare function runSignalWizard(ctx: ChannelSubcommandContext): Promise<number>;
|
|
14
|
+
//# sourceMappingURL=setup-wizard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wizard.d.ts","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAU3D;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,GAAG,EAAE,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2EpF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { cancel, intro, isCancel, log, note, outro, text } from '@clack/prompts';
|
|
2
|
+
import { E164_RE, SIGNAL_ACCOUNT_KEY } from './keys.js';
|
|
3
|
+
import { SIGNAL_CLI_INSTALL_HINT, findSignalCliOnPath, listSignalAccounts } from './sidecar.js';
|
|
4
|
+
import { runSignalPairFlow } from './pair-flow.js';
|
|
5
|
+
const ANSI = process.stdout.isTTY && !process.env.NO_COLOR;
|
|
6
|
+
const bold = (s) => (ANSI ? `\x1b[1m${s}\x1b[22m` : s);
|
|
7
|
+
const dim = (s) => (ANSI ? `\x1b[2m${s}\x1b[22m` : s);
|
|
8
|
+
/**
|
|
9
|
+
* Interactive Signal setup wizard (the channel's `interactiveCommand`).
|
|
10
|
+
*
|
|
11
|
+
* Walks the operator through:
|
|
12
|
+
* 1. verify the `signal-cli` binary is installed (install hint when missing),
|
|
13
|
+
* 2. store the account number (E.164) in the vault — no API token exists for
|
|
14
|
+
* Signal; identity comes from device linking,
|
|
15
|
+
* 3. choose the autonomous tool allow-list,
|
|
16
|
+
* 4. hand off to the pair flow (QR link) when the account isn't linked yet,
|
|
17
|
+
* or start the channel directly when it is.
|
|
18
|
+
*/
|
|
19
|
+
export async function runSignalWizard(ctx) {
|
|
20
|
+
const vault = ctx.deps.vault;
|
|
21
|
+
intro(bold('moxxy signal setup'));
|
|
22
|
+
const binary = findSignalCliOnPath();
|
|
23
|
+
if (!binary) {
|
|
24
|
+
log.error(SIGNAL_CLI_INSTALL_HINT);
|
|
25
|
+
return 1;
|
|
26
|
+
}
|
|
27
|
+
log.success(`Found signal-cli: ${binary}`);
|
|
28
|
+
note('moxxy joins your Signal account as a LINKED DEVICE (like Signal Desktop).\n' +
|
|
29
|
+
'It will see the messages your account receives, so it runs on its own\n' +
|
|
30
|
+
'dedicated, isolated runner. After linking, message your own "Note to Self"\n' +
|
|
31
|
+
'to talk to moxxy; other senders must be allow-listed explicitly.', 'how the Signal channel works');
|
|
32
|
+
const existing = await vault.get(SIGNAL_ACCOUNT_KEY);
|
|
33
|
+
const account = await text({
|
|
34
|
+
message: 'Your Signal account number (E.164)',
|
|
35
|
+
placeholder: '+15551234567',
|
|
36
|
+
...(existing ? { initialValue: existing } : {}),
|
|
37
|
+
validate: (v) => {
|
|
38
|
+
if (!v || !v.trim())
|
|
39
|
+
return 'required';
|
|
40
|
+
if (!E164_RE.test(v.trim()))
|
|
41
|
+
return 'expected E.164, e.g. +15551234567';
|
|
42
|
+
return undefined;
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
if (isCancel(account)) {
|
|
46
|
+
cancel('cancelled.');
|
|
47
|
+
return 0;
|
|
48
|
+
}
|
|
49
|
+
const accountNumber = String(account).trim();
|
|
50
|
+
await vault.set(SIGNAL_ACCOUNT_KEY, accountNumber, ['signal']);
|
|
51
|
+
log.success(`Stored account ${accountNumber} in the vault.`);
|
|
52
|
+
const allow = await text({
|
|
53
|
+
message: 'Autonomous tool allow-list (comma-separated; "*" = all, blank = read-only)',
|
|
54
|
+
placeholder: 'Read, Grep, Glob',
|
|
55
|
+
});
|
|
56
|
+
if (isCancel(allow)) {
|
|
57
|
+
cancel('cancelled.');
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
const allowedTools = String(allow)
|
|
61
|
+
.split(',')
|
|
62
|
+
.map((s) => s.trim())
|
|
63
|
+
.filter(Boolean);
|
|
64
|
+
// Linked already? (one-shot listAccounts spawn; on probe failure fall through
|
|
65
|
+
// to the pair flow, which handles the already-linked case gracefully too).
|
|
66
|
+
let linked = false;
|
|
67
|
+
try {
|
|
68
|
+
linked = (await listSignalAccounts({ binary })).includes(accountNumber);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
linked = false;
|
|
72
|
+
}
|
|
73
|
+
if (linked) {
|
|
74
|
+
log.info('This machine is already linked. Starting the channel…');
|
|
75
|
+
outro(dim('handing off to the channel…'));
|
|
76
|
+
return ctx.startChannel({ allowedTools });
|
|
77
|
+
}
|
|
78
|
+
note('Next: link this machine to your Signal account. A QR will appear —\n' +
|
|
79
|
+
'on your phone open Signal → Settings → Linked Devices → Link New Device\n' +
|
|
80
|
+
'and scan it. signal-cli keeps the linked-device keys in\n' +
|
|
81
|
+
'~/.local/share/signal-cli/ (moxxy stores only the number + allow-list).', 'link your phone');
|
|
82
|
+
outro(dim('opening the linking QR…'));
|
|
83
|
+
return runSignalPairFlow(ctx, { allowedTools });
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=setup-wizard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-wizard.js","sourceRoot":"","sources":["../src/setup-wizard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { SignalRpcClient, type RpcStream } from './jsonrpc.js';
|
|
2
|
+
/**
|
|
3
|
+
* signal-cli sidecar lifecycle — the plugin owns the external `signal-cli`
|
|
4
|
+
* process the way `@moxxy/plugin-browser` owns its Playwright sidecar:
|
|
5
|
+
* spawn on channel `start()`, health-check before use, SIGTERM→SIGKILL grace
|
|
6
|
+
* on stop (via the sdk's `sleepWithAbort`, the runner-supervisor pattern).
|
|
7
|
+
*
|
|
8
|
+
* Transport: `signal-cli -a <account> daemon --socket <path>` — JSON-RPC over
|
|
9
|
+
* a UNIX socket. Chosen over `--tcp`/`--http` because a filesystem socket is
|
|
10
|
+
* never remotely reachable and needs no port/auth story; the socket lives in a
|
|
11
|
+
* fresh per-process temp path so two channels can't collide.
|
|
12
|
+
*
|
|
13
|
+
* signal-cli keeps the actual Signal protocol store (identity keys, sessions,
|
|
14
|
+
* message queue) in ITS OWN data dir — `$XDG_DATA_HOME/signal-cli/`
|
|
15
|
+
* (`~/.local/share/signal-cli/` by default). moxxy never touches those files;
|
|
16
|
+
* attachments land in `<dataDir>/attachments/<id>`.
|
|
17
|
+
*/
|
|
18
|
+
export interface SidecarLogger {
|
|
19
|
+
info?(msg: string, meta?: Record<string, unknown>): void;
|
|
20
|
+
warn?(msg: string, meta?: Record<string, unknown>): void;
|
|
21
|
+
}
|
|
22
|
+
/** The slice of `child_process.ChildProcess` the sidecar manager needs. */
|
|
23
|
+
export interface SpawnedProcess {
|
|
24
|
+
readonly pid?: number | undefined;
|
|
25
|
+
kill(signal?: NodeJS.Signals): boolean;
|
|
26
|
+
once(event: 'exit', listener: (code: number | null) => void): unknown;
|
|
27
|
+
once(event: 'error', listener: (err: Error) => void): unknown;
|
|
28
|
+
readonly stderr?: {
|
|
29
|
+
on(event: 'data', listener: (chunk: Buffer | string) => void): unknown;
|
|
30
|
+
} | null;
|
|
31
|
+
readonly stdout?: {
|
|
32
|
+
on(event: 'data', listener: (chunk: Buffer | string) => void): unknown;
|
|
33
|
+
} | null;
|
|
34
|
+
}
|
|
35
|
+
export type SpawnFn = (command: string, args: ReadonlyArray<string>) => SpawnedProcess;
|
|
36
|
+
export type ConnectFn = (socketPath: string) => Promise<RpcStream>;
|
|
37
|
+
/** `$XDG_DATA_HOME/signal-cli` (defaults to `~/.local/share/signal-cli`). */
|
|
38
|
+
export declare function signalCliDataDir(env?: NodeJS.ProcessEnv): string;
|
|
39
|
+
/** Where the daemon writes received attachments (voice notes live here). */
|
|
40
|
+
export declare function signalCliAttachmentsDir(env?: NodeJS.ProcessEnv): string;
|
|
41
|
+
/**
|
|
42
|
+
* Cheap PATH probe for the `signal-cli` binary — a directory scan with an
|
|
43
|
+
* exec-bit check, NO process spawn (signal-cli is a JVM app; spawning it takes
|
|
44
|
+
* seconds and `isAvailable` runs on every `moxxy channels list` / `doctor`).
|
|
45
|
+
* Returns the resolved path or null. Never throws: a missing/odd PATH must
|
|
46
|
+
* not crash discovery.
|
|
47
|
+
*/
|
|
48
|
+
export declare function findSignalCliOnPath(env?: NodeJS.ProcessEnv): string | null;
|
|
49
|
+
/** One-line install guidance surfaced when the binary is missing. */
|
|
50
|
+
export declare const SIGNAL_CLI_INSTALL_HINT: string;
|
|
51
|
+
export interface SignalSidecarOptions {
|
|
52
|
+
/** E.164 account the daemon serves (`-a <account>`). */
|
|
53
|
+
readonly account: string;
|
|
54
|
+
/** Binary path/name. Default `signal-cli` (resolved by the OS from PATH). */
|
|
55
|
+
readonly binary?: string;
|
|
56
|
+
/** Socket path override (tests). Default: fresh path under the OS tmpdir. */
|
|
57
|
+
readonly socketPath?: string;
|
|
58
|
+
/** How long to wait for the daemon socket + health check. Default 45s —
|
|
59
|
+
* signal-cli is a JVM app and cold-starts slowly. */
|
|
60
|
+
readonly bootTimeoutMs?: number;
|
|
61
|
+
/** SIGTERM grace before SIGKILL. Default 5s. */
|
|
62
|
+
readonly killGraceMs?: number;
|
|
63
|
+
readonly logger?: SidecarLogger;
|
|
64
|
+
readonly spawnFn?: SpawnFn;
|
|
65
|
+
readonly connectFn?: ConnectFn;
|
|
66
|
+
}
|
|
67
|
+
export declare class SignalSidecar {
|
|
68
|
+
private readonly opts;
|
|
69
|
+
private child;
|
|
70
|
+
private exited;
|
|
71
|
+
private exitCode;
|
|
72
|
+
private client;
|
|
73
|
+
private readonly recentStderr;
|
|
74
|
+
private readonly exitListeners;
|
|
75
|
+
readonly socketPath: string;
|
|
76
|
+
constructor(opts: SignalSidecarOptions);
|
|
77
|
+
/** Fires when the daemon exits (clean stop AND crash). */
|
|
78
|
+
onExit(listener: (code: number | null) => void): () => void;
|
|
79
|
+
get rpc(): SignalRpcClient | null;
|
|
80
|
+
/**
|
|
81
|
+
* Spawn the daemon and wait until it is actually serving: the socket accepts
|
|
82
|
+
* a connection AND a `version` JSON-RPC round-trips. Rejects (and reaps the
|
|
83
|
+
* child) when the child dies early or the boot deadline passes, carrying the
|
|
84
|
+
* daemon's stderr tail so the CAUSE ("User +… is not registered") surfaces
|
|
85
|
+
* instead of a bare timeout.
|
|
86
|
+
*/
|
|
87
|
+
start(): Promise<SignalRpcClient>;
|
|
88
|
+
/**
|
|
89
|
+
* Graceful shutdown: close the RPC stream, SIGTERM, wait `killGraceMs` for a
|
|
90
|
+
* clean exit (aborting the wait the moment `exit` fires — the sdk's
|
|
91
|
+
* `sleepWithAbort` pattern from the runner supervisor), then SIGKILL a
|
|
92
|
+
* holdout so a wedged JVM can never outlive the channel as an orphan.
|
|
93
|
+
*/
|
|
94
|
+
stop(): Promise<void>;
|
|
95
|
+
/** Resolves true when the child exits within `ms`, false on timeout. */
|
|
96
|
+
private waitForExit;
|
|
97
|
+
private markExited;
|
|
98
|
+
private watchStderr;
|
|
99
|
+
private describeEarlyExit;
|
|
100
|
+
private stderrTailSuffix;
|
|
101
|
+
private removeSocketFile;
|
|
102
|
+
}
|
|
103
|
+
export interface LinkProcessHandle {
|
|
104
|
+
/** Resolves with the `sgnl://linkdevice…` URI to render as a QR. */
|
|
105
|
+
readonly uri: Promise<string>;
|
|
106
|
+
/** Resolves when the phone completed the link (process exited 0). Carries the
|
|
107
|
+
* linked account number when signal-cli printed it. Rejects on failure. */
|
|
108
|
+
readonly completed: Promise<{
|
|
109
|
+
account: string | null;
|
|
110
|
+
}>;
|
|
111
|
+
cancel(): void;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Run `signal-cli link -n <deviceName>`: it prints the linking URI, then blocks
|
|
115
|
+
* until the phone scans it (or the QR expires, at which point it exits
|
|
116
|
+
* non-zero). Separate from the daemon — linking happens BEFORE an account
|
|
117
|
+
* exists locally, so the daemon (which requires one) can't do it.
|
|
118
|
+
*/
|
|
119
|
+
export declare function startLinkProcess(opts: {
|
|
120
|
+
readonly deviceName: string;
|
|
121
|
+
readonly binary?: string;
|
|
122
|
+
readonly spawnFn?: SpawnFn;
|
|
123
|
+
readonly logger?: SidecarLogger;
|
|
124
|
+
}): LinkProcessHandle;
|
|
125
|
+
/**
|
|
126
|
+
* List the accounts registered in the local signal-cli store (a one-shot
|
|
127
|
+
* `signal-cli --output=json listAccounts` spawn). Used at channel start to
|
|
128
|
+
* decide "linked already?" — NOT in `isAvailable` (JVM spawns are too slow for
|
|
129
|
+
* a discovery probe). Parses JSON output and falls back to scraping `+<digits>`
|
|
130
|
+
* so an older plain-text signal-cli still works.
|
|
131
|
+
*/
|
|
132
|
+
export declare function listSignalAccounts(opts?: {
|
|
133
|
+
readonly binary?: string;
|
|
134
|
+
readonly spawnFn?: SpawnFn;
|
|
135
|
+
readonly timeoutMs?: number;
|
|
136
|
+
}): Promise<string[]>;
|
|
137
|
+
//# sourceMappingURL=sidecar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../src/sidecar.ts"],"names":[],"mappings":"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"}
|