aibroker 0.11.0 → 0.12.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 +15 -2
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +12 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/todoist-webhook.d.ts +121 -0
- package/dist/daemon/todoist-webhook.d.ts.map +1 -0
- package/dist/daemon/todoist-webhook.js +287 -0
- package/dist/daemon/todoist-webhook.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -152,7 +152,19 @@ For callers with no session and no mailbox — a launchd poller checking whether
|
|
|
152
152
|
|
|
153
153
|
Every probe of an idle session does inject a message that stays in that session's context, so keep the text short and probe rarely.
|
|
154
154
|
|
|
155
|
-
### 7.
|
|
155
|
+
### 7. File work from your phone or watch (optional)
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
tailscale funnel --bg --https=8443 http://127.0.0.1:8766
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Add a task in Todoist and it reaches the session that owns it — no polling, because Todoist pushes. Set a **reminder** rather than a due date to schedule work: `reminder:fired` is a webhook event, a task merely becoming due is not.
|
|
162
|
+
|
|
163
|
+
This is an execution ingress, so it is narrow by construction: every request must carry a valid HMAC signature, only explicitly allowlisted projects can reach a session, and an empty allowlist accepts nothing rather than everything. Todoist's Inbox cannot be shared, which is what makes quick capture from a watch safe.
|
|
164
|
+
|
|
165
|
+
Full setup, routing rules and the security model: **[docs/todoist.md](docs/todoist.md)**.
|
|
166
|
+
|
|
167
|
+
### 8. Audit what one session did to another
|
|
156
168
|
|
|
157
169
|
```bash
|
|
158
170
|
aibroker audit # recent cross-session activity
|
|
@@ -172,7 +184,7 @@ Bodies are stored in full, because a summary of a message is exactly the self-re
|
|
|
172
184
|
|
|
173
185
|
The format is deliberately plain JSONL: greppable with the tools already on the machine, appendable by any other tool that wants to contribute events, and a torn final line costs one record rather than the file. Set `AIBROKER_AUDIT_FILE` to relocate it.
|
|
174
186
|
|
|
175
|
-
###
|
|
187
|
+
### 9. Connect an adapter
|
|
176
188
|
|
|
177
189
|
```bash
|
|
178
190
|
# WhatsApp
|
|
@@ -413,6 +425,7 @@ Addressing is explicit: `hub:machine-b/session:abc` routes through the bridge to
|
|
|
413
425
|
| [mcp-tools.md](docs/mcp-tools.md) | All 42 MCP tools with parameters |
|
|
414
426
|
| [adapters.md](docs/adapters.md) | Adapter development guide |
|
|
415
427
|
| [pailot.md](docs/pailot.md) | PAILot iOS app integration |
|
|
428
|
+
| [todoist.md](docs/todoist.md) | Todoist inbound channel: webhook setup, routing, security model |
|
|
416
429
|
| [mesh.md](docs/mesh.md) | Multi-machine mesh networking |
|
|
417
430
|
| [ipc.md](docs/ipc.md) | IPC protocol and message format |
|
|
418
431
|
| [tts-stt.md](docs/tts-stt.md) | Voice pipeline details |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4CH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAyBvD,wBAAsB,WAAW,CAAC,OAAO,CAAC,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgchB"}
|
package/dist/daemon/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import { setAppDir } from "../core/persistence.js";
|
|
|
13
13
|
import { IpcServer } from "../ipc/server.js";
|
|
14
14
|
import { AdapterRegistry } from "./adapter-registry.js";
|
|
15
15
|
import { registerCoreHandlers } from "./core-handlers.js";
|
|
16
|
+
import { startTodoistWebhook } from "./todoist-webhook.js";
|
|
16
17
|
import { setScreenshotHandler, broadcastText, broadcastVoice, broadcastImage, handleMqttCommand, transcribeAndRoute, setVoiceBatchSession } from "../adapters/pailot/gateway.js";
|
|
17
18
|
import { startMqttBroker, stopMqttBroker, setMqttInboundHandler, mqttPublishTyping, mqttPublishText, mqttPublishControl } from "../adapters/pailot/mqtt-broker.js";
|
|
18
19
|
import { registerToken as apnsRegisterToken } from "../apns/client.js";
|
|
@@ -279,6 +280,17 @@ export async function startDaemon(options) {
|
|
|
279
280
|
registerCoreHandlers(ipcServer, adapterRegistry, apiBackend, manager);
|
|
280
281
|
ipcServer.start();
|
|
281
282
|
adapterRegistry.startHealthPolling();
|
|
283
|
+
// Todoist inbound channel. Enabled only when TODOIST_CLIENT_SECRET is set;
|
|
284
|
+
// a task filed from a phone or fired by a reminder reaches the owning
|
|
285
|
+
// session through the same dispatch path as everything else, so it inherits
|
|
286
|
+
// the shell guard, the delivery confirmation and the audit trail.
|
|
287
|
+
startTodoistWebhook({
|
|
288
|
+
deliver: async (project, body) => {
|
|
289
|
+
const { dispatch } = await import("./dispatch.js");
|
|
290
|
+
const r = await dispatch(project, body, {});
|
|
291
|
+
return { outcome: r.outcome, session: r.session, reason: r.reason || undefined };
|
|
292
|
+
},
|
|
293
|
+
});
|
|
282
294
|
// Prune stale image contexts every 5 minutes (30-minute TTL enforced inside)
|
|
283
295
|
setInterval(() => {
|
|
284
296
|
const evicted = pruneStaleContexts();
|
package/dist/daemon/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/daemon/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* daemon/todoist-webhook.ts — Todoist as an inbound channel.
|
|
3
|
+
*
|
|
4
|
+
* File a task from a phone or a watch and it reaches the session that owns the
|
|
5
|
+
* project, without a poller. Todoist pushes; the daemon routes it to `dispatch`.
|
|
6
|
+
*
|
|
7
|
+
* ── Why webhooks rather than polling ────────────────────────────────────────
|
|
8
|
+
*
|
|
9
|
+
* Polling forces a choice between latency and cost, and gets both wrong. The
|
|
10
|
+
* decisive detail is that `reminder:fired` is a webhook event: a task with a
|
|
11
|
+
* reminder pushes AT the reminder time. Due dates do NOT push — a task merely
|
|
12
|
+
* becoming due fires nothing — so scheduling is expressed as a reminder, and
|
|
13
|
+
* "run the sweep at 09:00" needs no timer anywhere in this system.
|
|
14
|
+
*
|
|
15
|
+
* ── This is an execution ingress, so it is deliberately narrow ──────────────
|
|
16
|
+
*
|
|
17
|
+
* A task arriving here becomes an instruction a session acts on with the
|
|
18
|
+
* user's full rights. Todoist's own payload documents that `initiator` "may be
|
|
19
|
+
* the same user indicated in user_id OR A COLLABORATOR FROM A SHARED PROJECT",
|
|
20
|
+
* which is precisely the exposure: without a boundary, anyone on any shared
|
|
21
|
+
* project has a path to this machine. Hence:
|
|
22
|
+
*
|
|
23
|
+
* - Only tasks under a configured ingress project (or its children) are
|
|
24
|
+
* considered. Everything else is acknowledged and dropped.
|
|
25
|
+
* - Every request must carry a valid HMAC signature.
|
|
26
|
+
* - Everything — accepted, ignored, refused — goes through the audit trail.
|
|
27
|
+
*
|
|
28
|
+
* ── Echo loops ──────────────────────────────────────────────────────────────
|
|
29
|
+
*
|
|
30
|
+
* `note:added` is an event, so an agent commenting on a task triggers a webhook
|
|
31
|
+
* that could route back to an agent that comments again. `initiator` cannot
|
|
32
|
+
* break the cycle: when agents act as the user, the initiator IS the user. Our
|
|
33
|
+
* own writes are therefore marked, and marked content is ignored on the way in.
|
|
34
|
+
*/
|
|
35
|
+
import { type Server } from "node:http";
|
|
36
|
+
/** Prefix on anything an agent writes back to Todoist, so we ignore our own echo. */
|
|
37
|
+
export declare const AGENT_MARK = "\uD83E\uDD16";
|
|
38
|
+
export interface TodoistEvent {
|
|
39
|
+
event_name: string;
|
|
40
|
+
user_id?: string;
|
|
41
|
+
event_data?: Record<string, unknown>;
|
|
42
|
+
event_data_extra?: Record<string, unknown>;
|
|
43
|
+
initiator?: {
|
|
44
|
+
email?: string;
|
|
45
|
+
full_name?: string;
|
|
46
|
+
id?: string;
|
|
47
|
+
};
|
|
48
|
+
triggered_at?: string;
|
|
49
|
+
version?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface WebhookConfig {
|
|
52
|
+
/** Client secret from the App Management Console — signs every request. */
|
|
53
|
+
secret: string;
|
|
54
|
+
port: number;
|
|
55
|
+
/**
|
|
56
|
+
* Interface to bind. Loopback by default.
|
|
57
|
+
*
|
|
58
|
+
* Todoist calls from the public internet, so SOMETHING must expose this —
|
|
59
|
+
* but that something should terminate TLS and forward to loopback, not have
|
|
60
|
+
* this process on a public interface. Tailscale Funnel, Cloudflare Tunnel and
|
|
61
|
+
* a Caddy/nginx reverse proxy all work that way. Note Funnel specifically,
|
|
62
|
+
* not Serve: Serve is reachable only from inside the tailnet, and Todoist's
|
|
63
|
+
* servers are not in it.
|
|
64
|
+
*/
|
|
65
|
+
bind: string;
|
|
66
|
+
/** Path the receiver answers on. Anything else 404s. */
|
|
67
|
+
path: string;
|
|
68
|
+
/**
|
|
69
|
+
* Project ids allowed to reach a session. An explicit allowlist, not a
|
|
70
|
+
* subtree resolved at runtime, and deliberately so: a project added later
|
|
71
|
+
* does not silently become an execution ingress. It has to be granted.
|
|
72
|
+
*/
|
|
73
|
+
ingressProjectIds: Set<string>;
|
|
74
|
+
/** project id -> session that owns it, for tasks filed straight into a project. */
|
|
75
|
+
projectOwners: Map<string, string>;
|
|
76
|
+
/**
|
|
77
|
+
* Where a task with no owner goes — the watch case, where everything lands
|
|
78
|
+
* in the Inbox with no project and no label. Unset means such tasks are
|
|
79
|
+
* recorded and dropped rather than guessed at.
|
|
80
|
+
*/
|
|
81
|
+
defaultOwner?: string;
|
|
82
|
+
}
|
|
83
|
+
export type RouteDecision = {
|
|
84
|
+
act: true;
|
|
85
|
+
project: string;
|
|
86
|
+
body: string;
|
|
87
|
+
taskId: string;
|
|
88
|
+
} | {
|
|
89
|
+
act: false;
|
|
90
|
+
reason: string;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Verify Todoist's HMAC over the RAW body.
|
|
94
|
+
*
|
|
95
|
+
* Must run against the exact bytes received: re-serialising parsed JSON changes
|
|
96
|
+
* key order and whitespace and the signature will never match.
|
|
97
|
+
*/
|
|
98
|
+
export declare function verifySignature(raw: Buffer, header: string | undefined, secret: string): boolean;
|
|
99
|
+
/** Stable identity for an event, for replay/duplicate suppression. */
|
|
100
|
+
export declare function eventKey(e: TodoistEvent): string;
|
|
101
|
+
/**
|
|
102
|
+
* Decide whether an event should reach a session, and as what.
|
|
103
|
+
*
|
|
104
|
+
* Pure, so the routing rules are testable without a socket: this function is
|
|
105
|
+
* the entire security boundary of the ingress.
|
|
106
|
+
*/
|
|
107
|
+
export declare function route(e: TodoistEvent, cfg: WebhookConfig): RouteDecision;
|
|
108
|
+
export interface WebhookDeps {
|
|
109
|
+
/** Deliver a work order. Returns a short outcome for the audit record. */
|
|
110
|
+
deliver: (project: string, body: string) => Promise<{
|
|
111
|
+
outcome: string;
|
|
112
|
+
session: string;
|
|
113
|
+
reason?: string;
|
|
114
|
+
}>;
|
|
115
|
+
}
|
|
116
|
+
export declare function createWebhookServer(cfg: WebhookConfig, deps: WebhookDeps): Server;
|
|
117
|
+
/** Read config from the environment. Returns null when not configured. */
|
|
118
|
+
export declare function webhookConfigFromEnv(): WebhookConfig | null;
|
|
119
|
+
/** Start the receiver if configured. No-op otherwise. */
|
|
120
|
+
export declare function startTodoistWebhook(deps: WebhookDeps): Server | null;
|
|
121
|
+
//# sourceMappingURL=todoist-webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoist-webhook.d.ts","sourceRoot":"","sources":["../../src/daemon/todoist-webhook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAA2D,KAAK,MAAM,EAAE,MAAM,WAAW,CAAC;AAKjG,qFAAqF;AACrF,eAAO,MAAM,UAAU,iBAAO,CAAC;AAE/B,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,SAAS,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;;;;OASG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb;;;;OAIG;IACH,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,mFAAmF;IACnF,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOhG;AAED,sEAAsE;AACtE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAGhD;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,GAAG,aAAa,CAkDxE;AAmBD,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5G;AAgBD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CA+EjF;AAED,0EAA0E;AAC1E,wBAAgB,oBAAoB,IAAI,aAAa,GAAG,IAAI,CAuB3D;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,IAAI,CAwBpE"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* daemon/todoist-webhook.ts — Todoist as an inbound channel.
|
|
3
|
+
*
|
|
4
|
+
* File a task from a phone or a watch and it reaches the session that owns the
|
|
5
|
+
* project, without a poller. Todoist pushes; the daemon routes it to `dispatch`.
|
|
6
|
+
*
|
|
7
|
+
* ── Why webhooks rather than polling ────────────────────────────────────────
|
|
8
|
+
*
|
|
9
|
+
* Polling forces a choice between latency and cost, and gets both wrong. The
|
|
10
|
+
* decisive detail is that `reminder:fired` is a webhook event: a task with a
|
|
11
|
+
* reminder pushes AT the reminder time. Due dates do NOT push — a task merely
|
|
12
|
+
* becoming due fires nothing — so scheduling is expressed as a reminder, and
|
|
13
|
+
* "run the sweep at 09:00" needs no timer anywhere in this system.
|
|
14
|
+
*
|
|
15
|
+
* ── This is an execution ingress, so it is deliberately narrow ──────────────
|
|
16
|
+
*
|
|
17
|
+
* A task arriving here becomes an instruction a session acts on with the
|
|
18
|
+
* user's full rights. Todoist's own payload documents that `initiator` "may be
|
|
19
|
+
* the same user indicated in user_id OR A COLLABORATOR FROM A SHARED PROJECT",
|
|
20
|
+
* which is precisely the exposure: without a boundary, anyone on any shared
|
|
21
|
+
* project has a path to this machine. Hence:
|
|
22
|
+
*
|
|
23
|
+
* - Only tasks under a configured ingress project (or its children) are
|
|
24
|
+
* considered. Everything else is acknowledged and dropped.
|
|
25
|
+
* - Every request must carry a valid HMAC signature.
|
|
26
|
+
* - Everything — accepted, ignored, refused — goes through the audit trail.
|
|
27
|
+
*
|
|
28
|
+
* ── Echo loops ──────────────────────────────────────────────────────────────
|
|
29
|
+
*
|
|
30
|
+
* `note:added` is an event, so an agent commenting on a task triggers a webhook
|
|
31
|
+
* that could route back to an agent that comments again. `initiator` cannot
|
|
32
|
+
* break the cycle: when agents act as the user, the initiator IS the user. Our
|
|
33
|
+
* own writes are therefore marked, and marked content is ignored on the way in.
|
|
34
|
+
*/
|
|
35
|
+
import { createServer } from "node:http";
|
|
36
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
37
|
+
import { log } from "../core/log.js";
|
|
38
|
+
import { audit } from "./audit.js";
|
|
39
|
+
/** Prefix on anything an agent writes back to Todoist, so we ignore our own echo. */
|
|
40
|
+
export const AGENT_MARK = "🤖";
|
|
41
|
+
/**
|
|
42
|
+
* Verify Todoist's HMAC over the RAW body.
|
|
43
|
+
*
|
|
44
|
+
* Must run against the exact bytes received: re-serialising parsed JSON changes
|
|
45
|
+
* key order and whitespace and the signature will never match.
|
|
46
|
+
*/
|
|
47
|
+
export function verifySignature(raw, header, secret) {
|
|
48
|
+
if (!header || !secret)
|
|
49
|
+
return false;
|
|
50
|
+
const expected = createHmac("sha256", secret).update(raw).digest();
|
|
51
|
+
let got;
|
|
52
|
+
try {
|
|
53
|
+
got = Buffer.from(header, "base64");
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
if (got.length !== expected.length)
|
|
59
|
+
return false;
|
|
60
|
+
return timingSafeEqual(got, expected);
|
|
61
|
+
}
|
|
62
|
+
/** Stable identity for an event, for replay/duplicate suppression. */
|
|
63
|
+
export function eventKey(e) {
|
|
64
|
+
const id = e.event_data?.id ?? "?";
|
|
65
|
+
return `${e.event_name}:${id}:${e.triggered_at ?? ""}`;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Decide whether an event should reach a session, and as what.
|
|
69
|
+
*
|
|
70
|
+
* Pure, so the routing rules are testable without a socket: this function is
|
|
71
|
+
* the entire security boundary of the ingress.
|
|
72
|
+
*/
|
|
73
|
+
export function route(e, cfg) {
|
|
74
|
+
const data = e.event_data ?? {};
|
|
75
|
+
const content = typeof data.content === "string" ? data.content : "";
|
|
76
|
+
const description = typeof data.description === "string" ? data.description : "";
|
|
77
|
+
const taskId = typeof data.id === "string" ? data.id : String(data.id ?? "");
|
|
78
|
+
// Our own writes come back as events. Drop them before anything else, or an
|
|
79
|
+
// agent's comment becomes an instruction to an agent.
|
|
80
|
+
if (content.startsWith(AGENT_MARK) || description.startsWith(AGENT_MARK)) {
|
|
81
|
+
return { act: false, reason: "agent-authored content, ignored to avoid an echo loop" };
|
|
82
|
+
}
|
|
83
|
+
const ACTIONABLE = new Set(["item:added", "item:completed", "reminder:fired"]);
|
|
84
|
+
if (!ACTIONABLE.has(e.event_name)) {
|
|
85
|
+
return { act: false, reason: `event ${e.event_name} is not actionable` };
|
|
86
|
+
}
|
|
87
|
+
// Completion is the human saying "done"; it must never start work.
|
|
88
|
+
if (e.event_name === "item:completed") {
|
|
89
|
+
return { act: false, reason: "task completed — recorded, no action taken" };
|
|
90
|
+
}
|
|
91
|
+
const projectId = typeof data.project_id === "string" ? data.project_id : "";
|
|
92
|
+
if (!cfg.ingressProjectIds.has(projectId)) {
|
|
93
|
+
// The boundary. Anything outside the allowlist is acknowledged and dropped,
|
|
94
|
+
// so a task filed into a shared project cannot reach a session.
|
|
95
|
+
return { act: false, reason: `project ${projectId || "?"} is not an ingress project` };
|
|
96
|
+
}
|
|
97
|
+
if (!content.trim()) {
|
|
98
|
+
return { act: false, reason: "task has no content" };
|
|
99
|
+
}
|
|
100
|
+
// Owner, most explicit first:
|
|
101
|
+
// 1. a `pai:<name>` label — say exactly where it goes
|
|
102
|
+
// 2. the project it was filed in — "put it in the Whazaa list"
|
|
103
|
+
// 3. the configured default — the watch case: Inbox, no label, no project
|
|
104
|
+
const labels = Array.isArray(data.labels) ? data.labels.map(String) : [];
|
|
105
|
+
const labelled = labels.map((l) => l.trim())
|
|
106
|
+
.find((l) => l.toLowerCase().startsWith("pai:"))?.slice(4).trim();
|
|
107
|
+
const owner = labelled || cfg.projectOwners.get(projectId) || cfg.defaultOwner;
|
|
108
|
+
if (!owner) {
|
|
109
|
+
return {
|
|
110
|
+
act: false,
|
|
111
|
+
reason: "no pai:<name> label, no owner for this project, and no default owner configured",
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
const body = description.trim() ? `${content}\n\n${description}` : content;
|
|
115
|
+
return { act: true, project: owner, body, taskId };
|
|
116
|
+
}
|
|
117
|
+
/** Bounded replay guard: Todoist retries, and a retry must not run work twice. */
|
|
118
|
+
class SeenSet {
|
|
119
|
+
max;
|
|
120
|
+
seen = new Set();
|
|
121
|
+
order = [];
|
|
122
|
+
constructor(max = 2_000) {
|
|
123
|
+
this.max = max;
|
|
124
|
+
}
|
|
125
|
+
has(k) { return this.seen.has(k); }
|
|
126
|
+
add(k) {
|
|
127
|
+
if (this.seen.has(k))
|
|
128
|
+
return;
|
|
129
|
+
this.seen.add(k);
|
|
130
|
+
this.order.push(k);
|
|
131
|
+
if (this.order.length > this.max) {
|
|
132
|
+
const drop = this.order.shift();
|
|
133
|
+
if (drop)
|
|
134
|
+
this.seen.delete(drop);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function readBody(req, limit = 1_000_000) {
|
|
139
|
+
return new Promise((resolve, reject) => {
|
|
140
|
+
const chunks = [];
|
|
141
|
+
let size = 0;
|
|
142
|
+
req.on("data", (c) => {
|
|
143
|
+
size += c.length;
|
|
144
|
+
if (size > limit) {
|
|
145
|
+
reject(new Error("payload too large"));
|
|
146
|
+
req.destroy();
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
chunks.push(c);
|
|
150
|
+
});
|
|
151
|
+
req.on("end", () => resolve(Buffer.concat(chunks)));
|
|
152
|
+
req.on("error", reject);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
export function createWebhookServer(cfg, deps) {
|
|
156
|
+
const seen = new SeenSet();
|
|
157
|
+
return createServer((req, res) => {
|
|
158
|
+
void (async () => {
|
|
159
|
+
if (req.method !== "POST") {
|
|
160
|
+
res.writeHead(405).end();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Ignore query strings; a proxy may append them.
|
|
164
|
+
const reqPath = (req.url ?? "/").split("?")[0];
|
|
165
|
+
if (reqPath !== cfg.path) {
|
|
166
|
+
res.writeHead(404).end();
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
let raw;
|
|
170
|
+
try {
|
|
171
|
+
raw = await readBody(req);
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
res.writeHead(413).end();
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (!verifySignature(raw, req.headers["x-todoist-hmac-sha256"], cfg.secret)) {
|
|
178
|
+
// Unsigned or wrongly signed: someone found the endpoint. Worth a record.
|
|
179
|
+
audit({
|
|
180
|
+
action: "webhook", actor: "todoist", target: "aibroker",
|
|
181
|
+
outcome: "rejected", reason: "invalid or missing HMAC signature",
|
|
182
|
+
});
|
|
183
|
+
log("todoist-webhook: rejected a request with an invalid signature");
|
|
184
|
+
res.writeHead(401).end();
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
let event;
|
|
188
|
+
try {
|
|
189
|
+
event = JSON.parse(raw.toString("utf-8"));
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
res.writeHead(400).end();
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
// Acknowledge immediately, then work. Todoist retries on a slow or failed
|
|
196
|
+
// response, and a dispatch can take a minute — without this, every slow
|
|
197
|
+
// delivery is retried and the work runs more than once.
|
|
198
|
+
res.writeHead(200, { "content-type": "application/json" }).end('{"ok":true}');
|
|
199
|
+
const key = eventKey(event);
|
|
200
|
+
if (seen.has(key)) {
|
|
201
|
+
log(`todoist-webhook: duplicate ${key}, ignored`);
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
seen.add(key);
|
|
205
|
+
const decision = route(event, cfg);
|
|
206
|
+
const who = event.initiator?.email ?? event.initiator?.full_name ?? "todoist";
|
|
207
|
+
if (!decision.act) {
|
|
208
|
+
audit({
|
|
209
|
+
action: "webhook", actor: who, target: "aibroker",
|
|
210
|
+
outcome: "ignored", reason: decision.reason,
|
|
211
|
+
meta: { event: event.event_name, task: event.event_data?.content ?? undefined },
|
|
212
|
+
});
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
const r = await deps.deliver(decision.project, decision.body);
|
|
217
|
+
audit({
|
|
218
|
+
action: "webhook", actor: who, target: r.session || decision.project,
|
|
219
|
+
outcome: r.outcome, body: decision.body, reason: r.reason,
|
|
220
|
+
meta: { event: event.event_name, taskId: decision.taskId },
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
catch (err) {
|
|
224
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
225
|
+
audit({
|
|
226
|
+
action: "webhook", actor: who, target: decision.project,
|
|
227
|
+
outcome: "failed", body: decision.body, reason,
|
|
228
|
+
meta: { event: event.event_name, taskId: decision.taskId },
|
|
229
|
+
});
|
|
230
|
+
log(`todoist-webhook: delivery failed — ${reason}`);
|
|
231
|
+
}
|
|
232
|
+
})();
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
/** Read config from the environment. Returns null when not configured. */
|
|
236
|
+
export function webhookConfigFromEnv() {
|
|
237
|
+
const secret = process.env.TODOIST_CLIENT_SECRET;
|
|
238
|
+
if (!secret)
|
|
239
|
+
return null;
|
|
240
|
+
// "id" or "id=owner", comma-separated. The owner half is optional and maps a
|
|
241
|
+
// project to the session that owns work filed there.
|
|
242
|
+
const ids = new Set();
|
|
243
|
+
const owners = new Map();
|
|
244
|
+
for (const entry of (process.env.TODOIST_INGRESS_PROJECTS ?? "").split(",")) {
|
|
245
|
+
const [id, owner] = entry.split("=").map((s) => s.trim());
|
|
246
|
+
if (!id)
|
|
247
|
+
continue;
|
|
248
|
+
ids.add(id);
|
|
249
|
+
if (owner)
|
|
250
|
+
owners.set(id, owner);
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
secret,
|
|
254
|
+
port: Number(process.env.TODOIST_WEBHOOK_PORT) || 8766,
|
|
255
|
+
bind: process.env.TODOIST_WEBHOOK_BIND ?? "127.0.0.1",
|
|
256
|
+
path: process.env.TODOIST_WEBHOOK_PATH ?? "/todoist",
|
|
257
|
+
ingressProjectIds: ids,
|
|
258
|
+
projectOwners: owners,
|
|
259
|
+
defaultOwner: process.env.TODOIST_DEFAULT_OWNER,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/** Start the receiver if configured. No-op otherwise. */
|
|
263
|
+
export function startTodoistWebhook(deps) {
|
|
264
|
+
const cfg = webhookConfigFromEnv();
|
|
265
|
+
if (!cfg) {
|
|
266
|
+
log("todoist-webhook: not configured (set TODOIST_CLIENT_SECRET to enable)");
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
if (cfg.ingressProjectIds.size === 0) {
|
|
270
|
+
// Refusing here is deliberate: with an empty allowlist the ingress would
|
|
271
|
+
// accept work from every project on the account, including shared ones.
|
|
272
|
+
log("todoist-webhook: TODOIST_INGRESS_PROJECTS is empty — refusing to accept every project");
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
const server = createWebhookServer(cfg, deps);
|
|
276
|
+
if (cfg.bind !== "127.0.0.1" && cfg.bind !== "localhost") {
|
|
277
|
+
log(`todoist-webhook: WARNING binding ${cfg.bind}, not loopback — this puts an execution ingress ` +
|
|
278
|
+
`directly on the network. Prefer loopback with a TLS proxy (Tailscale Funnel, Cloudflare Tunnel, Caddy) in front.`);
|
|
279
|
+
}
|
|
280
|
+
server.listen(cfg.port, cfg.bind, () => {
|
|
281
|
+
log(`todoist-webhook: listening on ${cfg.bind}:${cfg.port}${cfg.path}, ` +
|
|
282
|
+
`${cfg.ingressProjectIds.size} ingress project(s), default owner ${cfg.defaultOwner ?? "(none)"}`);
|
|
283
|
+
});
|
|
284
|
+
server.on("error", (err) => log(`todoist-webhook: server error — ${err.message}`));
|
|
285
|
+
return server;
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=todoist-webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"todoist-webhook.js","sourceRoot":"","sources":["../../src/daemon/todoist-webhook.ts"],"names":[],"mappings":"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"}
|