@spinabot/brigade 1.7.0 → 1.9.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 +19 -0
- package/dist/agents/agent-loop.d.ts +13 -0
- package/dist/agents/agent-loop.d.ts.map +1 -1
- package/dist/agents/agent-loop.js +5 -0
- package/dist/agents/agent-loop.js.map +1 -1
- package/dist/agents/channels/access-control/group-tool-policy.d.ts +73 -0
- package/dist/agents/channels/access-control/group-tool-policy.d.ts.map +1 -0
- package/dist/agents/channels/access-control/group-tool-policy.js +193 -0
- package/dist/agents/channels/access-control/group-tool-policy.js.map +1 -0
- package/dist/agents/channels/access-control/index.d.ts +1 -0
- package/dist/agents/channels/access-control/index.d.ts.map +1 -1
- package/dist/agents/channels/access-control/index.js +1 -0
- package/dist/agents/channels/access-control/index.js.map +1 -1
- package/dist/agents/channels/bluebubbles/account-config.d.ts +253 -0
- package/dist/agents/channels/bluebubbles/account-config.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/account-config.js +486 -0
- package/dist/agents/channels/bluebubbles/account-config.js.map +1 -0
- package/dist/agents/channels/bluebubbles/account-registry.d.ts +33 -0
- package/dist/agents/channels/bluebubbles/account-registry.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/account-registry.js +46 -0
- package/dist/agents/channels/bluebubbles/account-registry.js.map +1 -0
- package/dist/agents/channels/bluebubbles/adapter.d.ts +45 -0
- package/dist/agents/channels/bluebubbles/adapter.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/adapter.js +366 -0
- package/dist/agents/channels/bluebubbles/adapter.js.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.d.ts +52 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.js +118 -0
- package/dist/agents/channels/bluebubbles/catchup-cursor.js.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup.d.ts +114 -0
- package/dist/agents/channels/bluebubbles/catchup.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/catchup.js +220 -0
- package/dist/agents/channels/bluebubbles/catchup.js.map +1 -0
- package/dist/agents/channels/bluebubbles/chat.d.ts +75 -0
- package/dist/agents/channels/bluebubbles/chat.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/chat.js +182 -0
- package/dist/agents/channels/bluebubbles/chat.js.map +1 -0
- package/dist/agents/channels/bluebubbles/connection.d.ts +95 -0
- package/dist/agents/channels/bluebubbles/connection.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/connection.js +413 -0
- package/dist/agents/channels/bluebubbles/connection.js.map +1 -0
- package/dist/agents/channels/bluebubbles/contact-names.d.ts +79 -0
- package/dist/agents/channels/bluebubbles/contact-names.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/contact-names.js +188 -0
- package/dist/agents/channels/bluebubbles/contact-names.js.map +1 -0
- package/dist/agents/channels/bluebubbles/debounce.d.ts +78 -0
- package/dist/agents/channels/bluebubbles/debounce.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/debounce.js +173 -0
- package/dist/agents/channels/bluebubbles/debounce.js.map +1 -0
- package/dist/agents/channels/bluebubbles/dedupe.d.ts +25 -0
- package/dist/agents/channels/bluebubbles/dedupe.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/dedupe.js +35 -0
- package/dist/agents/channels/bluebubbles/dedupe.js.map +1 -0
- package/dist/agents/channels/bluebubbles/effects.d.ts +17 -0
- package/dist/agents/channels/bluebubbles/effects.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/effects.js +57 -0
- package/dist/agents/channels/bluebubbles/effects.js.map +1 -0
- package/dist/agents/channels/bluebubbles/history.d.ts +56 -0
- package/dist/agents/channels/bluebubbles/history.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/history.js +140 -0
- package/dist/agents/channels/bluebubbles/history.js.map +1 -0
- package/dist/agents/channels/bluebubbles/index.d.ts +18 -0
- package/dist/agents/channels/bluebubbles/index.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/index.js +18 -0
- package/dist/agents/channels/bluebubbles/index.js.map +1 -0
- package/dist/agents/channels/bluebubbles/media.d.ts +104 -0
- package/dist/agents/channels/bluebubbles/media.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/media.js +222 -0
- package/dist/agents/channels/bluebubbles/media.js.map +1 -0
- package/dist/agents/channels/bluebubbles/messaging.d.ts +13 -0
- package/dist/agents/channels/bluebubbles/messaging.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/messaging.js +36 -0
- package/dist/agents/channels/bluebubbles/messaging.js.map +1 -0
- package/dist/agents/channels/bluebubbles/module.d.ts +24 -0
- package/dist/agents/channels/bluebubbles/module.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/module.js +52 -0
- package/dist/agents/channels/bluebubbles/module.js.map +1 -0
- package/dist/agents/channels/bluebubbles/normalize.d.ts +111 -0
- package/dist/agents/channels/bluebubbles/normalize.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/normalize.js +239 -0
- package/dist/agents/channels/bluebubbles/normalize.js.map +1 -0
- package/dist/agents/channels/bluebubbles/plugin.d.ts +46 -0
- package/dist/agents/channels/bluebubbles/plugin.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/plugin.js +242 -0
- package/dist/agents/channels/bluebubbles/plugin.js.map +1 -0
- package/dist/agents/channels/bluebubbles/probe.d.ts +79 -0
- package/dist/agents/channels/bluebubbles/probe.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/probe.js +138 -0
- package/dist/agents/channels/bluebubbles/probe.js.map +1 -0
- package/dist/agents/channels/bluebubbles/reactions.d.ts +46 -0
- package/dist/agents/channels/bluebubbles/reactions.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/reactions.js +207 -0
- package/dist/agents/channels/bluebubbles/reactions.js.map +1 -0
- package/dist/agents/channels/bluebubbles/send.d.ts +132 -0
- package/dist/agents/channels/bluebubbles/send.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/send.js +327 -0
- package/dist/agents/channels/bluebubbles/send.js.map +1 -0
- package/dist/agents/channels/bluebubbles/status-issues.d.ts +57 -0
- package/dist/agents/channels/bluebubbles/status-issues.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/status-issues.js +93 -0
- package/dist/agents/channels/bluebubbles/status-issues.js.map +1 -0
- package/dist/agents/channels/bluebubbles/types.d.ts +69 -0
- package/dist/agents/channels/bluebubbles/types.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/types.js +118 -0
- package/dist/agents/channels/bluebubbles/types.js.map +1 -0
- package/dist/agents/channels/bluebubbles/webhook.d.ts +97 -0
- package/dist/agents/channels/bluebubbles/webhook.d.ts.map +1 -0
- package/dist/agents/channels/bluebubbles/webhook.js +249 -0
- package/dist/agents/channels/bluebubbles/webhook.js.map +1 -0
- package/dist/agents/channels/bundled-channel-metas.d.ts +13 -0
- package/dist/agents/channels/bundled-channel-metas.d.ts.map +1 -1
- package/dist/agents/channels/bundled-channel-metas.js +33 -0
- package/dist/agents/channels/bundled-channel-metas.js.map +1 -1
- package/dist/agents/channels/imessage/account-config.d.ts +178 -0
- package/dist/agents/channels/imessage/account-config.d.ts.map +1 -0
- package/dist/agents/channels/imessage/account-config.js +371 -0
- package/dist/agents/channels/imessage/account-config.js.map +1 -0
- package/dist/agents/channels/imessage/adapter.d.ts +36 -0
- package/dist/agents/channels/imessage/adapter.d.ts.map +1 -0
- package/dist/agents/channels/imessage/adapter.js +286 -0
- package/dist/agents/channels/imessage/adapter.js.map +1 -0
- package/dist/agents/channels/imessage/client.d.ts +99 -0
- package/dist/agents/channels/imessage/client.d.ts.map +1 -0
- package/dist/agents/channels/imessage/client.js +231 -0
- package/dist/agents/channels/imessage/client.js.map +1 -0
- package/dist/agents/channels/imessage/connection.d.ts +101 -0
- package/dist/agents/channels/imessage/connection.d.ts.map +1 -0
- package/dist/agents/channels/imessage/connection.js +367 -0
- package/dist/agents/channels/imessage/connection.js.map +1 -0
- package/dist/agents/channels/imessage/format.d.ts +45 -0
- package/dist/agents/channels/imessage/format.d.ts.map +1 -0
- package/dist/agents/channels/imessage/format.js +170 -0
- package/dist/agents/channels/imessage/format.js.map +1 -0
- package/dist/agents/channels/imessage/history.d.ts +49 -0
- package/dist/agents/channels/imessage/history.d.ts.map +1 -0
- package/dist/agents/channels/imessage/history.js +74 -0
- package/dist/agents/channels/imessage/history.js.map +1 -0
- package/dist/agents/channels/imessage/index.d.ts +25 -0
- package/dist/agents/channels/imessage/index.d.ts.map +1 -0
- package/dist/agents/channels/imessage/index.js +25 -0
- package/dist/agents/channels/imessage/index.js.map +1 -0
- package/dist/agents/channels/imessage/media.d.ts +92 -0
- package/dist/agents/channels/imessage/media.d.ts.map +1 -0
- package/dist/agents/channels/imessage/media.js +196 -0
- package/dist/agents/channels/imessage/media.js.map +1 -0
- package/dist/agents/channels/imessage/messaging.d.ts +14 -0
- package/dist/agents/channels/imessage/messaging.d.ts.map +1 -0
- package/dist/agents/channels/imessage/messaging.js +37 -0
- package/dist/agents/channels/imessage/messaging.js.map +1 -0
- package/dist/agents/channels/imessage/module.d.ts +16 -0
- package/dist/agents/channels/imessage/module.d.ts.map +1 -0
- package/dist/agents/channels/imessage/module.js +23 -0
- package/dist/agents/channels/imessage/module.js.map +1 -0
- package/dist/agents/channels/imessage/monitor.d.ts +207 -0
- package/dist/agents/channels/imessage/monitor.d.ts.map +1 -0
- package/dist/agents/channels/imessage/monitor.js +504 -0
- package/dist/agents/channels/imessage/monitor.js.map +1 -0
- package/dist/agents/channels/imessage/plugin.d.ts +53 -0
- package/dist/agents/channels/imessage/plugin.d.ts.map +1 -0
- package/dist/agents/channels/imessage/plugin.js +215 -0
- package/dist/agents/channels/imessage/plugin.js.map +1 -0
- package/dist/agents/channels/imessage/probe.d.ts +68 -0
- package/dist/agents/channels/imessage/probe.d.ts.map +1 -0
- package/dist/agents/channels/imessage/probe.js +134 -0
- package/dist/agents/channels/imessage/probe.js.map +1 -0
- package/dist/agents/channels/imessage/remote-attachments.d.ts +61 -0
- package/dist/agents/channels/imessage/remote-attachments.d.ts.map +1 -0
- package/dist/agents/channels/imessage/remote-attachments.js +131 -0
- package/dist/agents/channels/imessage/remote-attachments.js.map +1 -0
- package/dist/agents/channels/imessage/send.d.ts +61 -0
- package/dist/agents/channels/imessage/send.d.ts.map +1 -0
- package/dist/agents/channels/imessage/send.js +108 -0
- package/dist/agents/channels/imessage/send.js.map +1 -0
- package/dist/agents/channels/imessage/targets.d.ts +91 -0
- package/dist/agents/channels/imessage/targets.d.ts.map +1 -0
- package/dist/agents/channels/imessage/targets.js +245 -0
- package/dist/agents/channels/imessage/targets.js.map +1 -0
- package/dist/agents/channels/imessage/watch-error.d.ts +23 -0
- package/dist/agents/channels/imessage/watch-error.d.ts.map +1 -0
- package/dist/agents/channels/imessage/watch-error.js +69 -0
- package/dist/agents/channels/imessage/watch-error.js.map +1 -0
- package/dist/agents/channels/inbound-pipeline.d.ts +11 -0
- package/dist/agents/channels/inbound-pipeline.d.ts.map +1 -1
- package/dist/agents/channels/inbound-pipeline.js +20 -1
- package/dist/agents/channels/inbound-pipeline.js.map +1 -1
- package/dist/agents/channels/manager.d.ts +9 -0
- package/dist/agents/channels/manager.d.ts.map +1 -1
- package/dist/agents/channels/manager.js.map +1 -1
- package/dist/agents/channels/sdk.d.ts +4 -0
- package/dist/agents/channels/sdk.d.ts.map +1 -1
- package/dist/agents/channels/sdk.js +4 -0
- package/dist/agents/channels/sdk.js.map +1 -1
- package/dist/agents/extensions/modules/index.d.ts.map +1 -1
- package/dist/agents/extensions/modules/index.js +12 -0
- package/dist/agents/extensions/modules/index.js.map +1 -1
- package/dist/agents/session-wiring.d.ts +31 -0
- package/dist/agents/session-wiring.d.ts.map +1 -1
- package/dist/agents/session-wiring.js +45 -2
- package/dist/agents/session-wiring.js.map +1 -1
- package/dist/agents/tools/bluebubbles-action-tool.d.ts +66 -0
- package/dist/agents/tools/bluebubbles-action-tool.d.ts.map +1 -0
- package/dist/agents/tools/bluebubbles-action-tool.js +234 -0
- package/dist/agents/tools/bluebubbles-action-tool.js.map +1 -0
- package/dist/agents/tools/registry.d.ts.map +1 -1
- package/dist/agents/tools/registry.js +18 -0
- package/dist/agents/tools/registry.js.map +1 -1
- package/dist/buildstamp.json +1 -1
- package/dist/cli/commands/expose.d.ts +40 -0
- package/dist/cli/commands/expose.d.ts.map +1 -0
- package/dist/cli/commands/expose.js +200 -0
- package/dist/cli/commands/expose.js.map +1 -0
- package/dist/cli/program/build-program.d.ts.map +1 -1
- package/dist/cli/program/build-program.js +61 -0
- package/dist/cli/program/build-program.js.map +1 -1
- package/dist/config/io.d.ts +41 -0
- package/dist/config/io.d.ts.map +1 -1
- package/dist/config/io.js.map +1 -1
- package/dist/core/server.d.ts.map +1 -1
- package/dist/core/server.js +48 -2
- package/dist/core/server.js.map +1 -1
- package/dist/core/tunnel/auth-proxy.d.ts +55 -0
- package/dist/core/tunnel/auth-proxy.d.ts.map +1 -0
- package/dist/core/tunnel/auth-proxy.js +179 -0
- package/dist/core/tunnel/auth-proxy.js.map +1 -0
- package/dist/core/tunnel/manager.d.ts +42 -0
- package/dist/core/tunnel/manager.d.ts.map +1 -0
- package/dist/core/tunnel/manager.js +102 -0
- package/dist/core/tunnel/manager.js.map +1 -0
- package/dist/core/tunnel/providers/bore.d.ts +18 -0
- package/dist/core/tunnel/providers/bore.d.ts.map +1 -0
- package/dist/core/tunnel/providers/bore.js +117 -0
- package/dist/core/tunnel/providers/bore.js.map +1 -0
- package/dist/core/tunnel/providers/cloudflared.d.ts +24 -0
- package/dist/core/tunnel/providers/cloudflared.d.ts.map +1 -0
- package/dist/core/tunnel/providers/cloudflared.js +179 -0
- package/dist/core/tunnel/providers/cloudflared.js.map +1 -0
- package/dist/core/tunnel/providers/custom.d.ts +21 -0
- package/dist/core/tunnel/providers/custom.d.ts.map +1 -0
- package/dist/core/tunnel/providers/custom.js +124 -0
- package/dist/core/tunnel/providers/custom.js.map +1 -0
- package/dist/core/tunnel/registry.d.ts +15 -0
- package/dist/core/tunnel/registry.d.ts.map +1 -0
- package/dist/core/tunnel/registry.js +26 -0
- package/dist/core/tunnel/registry.js.map +1 -0
- package/dist/core/tunnel/state.d.ts +39 -0
- package/dist/core/tunnel/state.d.ts.map +1 -0
- package/dist/core/tunnel/state.js +57 -0
- package/dist/core/tunnel/state.js.map +1 -0
- package/dist/core/tunnel/types.d.ts +61 -0
- package/dist/core/tunnel/types.d.ts.map +1 -0
- package/dist/core/tunnel/types.js +20 -0
- package/dist/core/tunnel/types.js.map +1 -0
- package/dist/infra/net/fetch-guard.d.ts +24 -2
- package/dist/infra/net/fetch-guard.d.ts.map +1 -1
- package/dist/infra/net/fetch-guard.js +78 -31
- package/dist/infra/net/fetch-guard.js.map +1 -1
- package/package.json +5 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Channel access control — public surface. */
|
|
2
2
|
export { evaluateAccess } from "./policy.js";
|
|
3
|
+
export { resolveChannelGroupToolsPolicy, resolveToolsBySender, } from "./group-tool-policy.js";
|
|
3
4
|
export { formatAllowFrom, } from "./format-allow-from.js";
|
|
4
5
|
export { PAIRING_MAX_PENDING, PAIRING_TTL_MS, addAllowFrom, approvePairingCode, clearChannelOwner, eraseAccessState, isAllowed, readAllowFrom, readChannelOwner, readGroupAllowFrom, readPendingPairings, removeAllowFrom, revokePairingCode, setChannelOwner, upsertPairingRequest, } from "./store.js";
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/agents/channels/access-control/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,EAAE,cAAc,EAA2B,MAAM,aAAa,CAAC;AACtE,OAAO,EACN,eAAe,GAGf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACpB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/agents/channels/access-control/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,OAAO,EAAE,cAAc,EAA2B,MAAM,aAAa,CAAC;AACtE,OAAO,EACN,8BAA8B,EAC9B,oBAAoB,GAKpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,eAAe,GAGf,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACN,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACpB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BlueBubbles config-shape helpers (multi-ACCOUNT aware; mirrors Slack's
|
|
3
|
+
* `account-config.ts`).
|
|
4
|
+
*
|
|
5
|
+
* BlueBubbles is a richer iMessage transport than the native `imessage` channel:
|
|
6
|
+
* instead of driving a local `imsg` CLI subprocess, it talks to a BlueBubbles
|
|
7
|
+
* macOS server over HTTP REST (outbound) and receives inbound updates via a
|
|
8
|
+
* webhook POST the server fires at a Brigade gateway HTTP route. So unlike
|
|
9
|
+
* `imessage` (which has no secret), BlueBubbles HAS a real secret — the server
|
|
10
|
+
* `password` — which is sealed into the encrypted credential store and embedded
|
|
11
|
+
* in the registered webhook URL query string (BlueBubbles webhooks can't carry
|
|
12
|
+
* custom headers).
|
|
13
|
+
*
|
|
14
|
+
* The knobs this module resolves per account:
|
|
15
|
+
*
|
|
16
|
+
* - `serverUrl` base URL of the BlueBubbles server (`http://192.168.1.5:1234`).
|
|
17
|
+
* - `password` the SECRET — REST auth (`?password=…`) + webhook auth. Sealed.
|
|
18
|
+
* - `webhookPath` the gateway inbound route path (default `/bluebubbles/webhook`).
|
|
19
|
+
* - `actions` per-rich-action toggles (`reactions`/`edit`/`unsend`/`effects`/`groupAdmin`).
|
|
20
|
+
* - `region` default phone-number region for E.164 normalisation (US).
|
|
21
|
+
* - `mediaMaxMb` cap on an outbound attachment's size (MB).
|
|
22
|
+
* - `probeTimeoutMs` HTTP round-trip timeout for the doctor/probe + REST calls.
|
|
23
|
+
*
|
|
24
|
+
* Two config shapes are recognised so the surface lines up with the other
|
|
25
|
+
* channels:
|
|
26
|
+
*
|
|
27
|
+
* Legacy (single-account):
|
|
28
|
+
* channels.bluebubbles = { enabled: true, serverUrl: "http://…", password: "${BB_PASSWORD}" }
|
|
29
|
+
*
|
|
30
|
+
* Multi-account:
|
|
31
|
+
* channels.bluebubbles = {
|
|
32
|
+
* enabled: true,
|
|
33
|
+
* accounts: [
|
|
34
|
+
* { id: "home", serverUrl: "http://192.168.1.5:1234", password: "${BB_HOME}" },
|
|
35
|
+
* { id: "work", serverUrl: "http://10.0.0.9:1234", password: "${BB_WORK}" },
|
|
36
|
+
* ],
|
|
37
|
+
* }
|
|
38
|
+
*
|
|
39
|
+
* A legacy config with no `accounts[]` reads as `[{ id: "default" }]`.
|
|
40
|
+
*/
|
|
41
|
+
import type { BrigadeConfig } from "../../../config/io.js";
|
|
42
|
+
import type { BlueBubblesCatchupConfig } from "./catchup.js";
|
|
43
|
+
/** Canonical channel id + default account id. */
|
|
44
|
+
declare const CHANNEL_ID = "bluebubbles";
|
|
45
|
+
declare const DEFAULT_ACCOUNT_ID = "default";
|
|
46
|
+
/** Default inbound webhook route path (base; named accounts get a slug suffix). */
|
|
47
|
+
declare const DEFAULT_WEBHOOK_PATH = "/bluebubbles/webhook";
|
|
48
|
+
/** Default HTTP probe / request timeout (ms). */
|
|
49
|
+
export declare const DEFAULT_BLUEBUBBLES_PROBE_TIMEOUT_MS = 10000;
|
|
50
|
+
/** Default rolling group-history context size (recent messages attached to an untagged group msg). */
|
|
51
|
+
export declare const DEFAULT_BLUEBUBBLES_HISTORY_LIMIT = 10;
|
|
52
|
+
/** Hard ceiling on the rolling-history fetch size. */
|
|
53
|
+
export declare const BLUEBUBBLES_MAX_HISTORY_LIMIT = 100;
|
|
54
|
+
/** Per-knob env var consulted as a last-resort fallback for the password. */
|
|
55
|
+
declare const PASSWORD_ENV_VAR = "BLUEBUBBLES_PASSWORD";
|
|
56
|
+
/** Per-knob env var consulted as a last-resort fallback for the server URL. */
|
|
57
|
+
declare const SERVER_URL_ENV_VAR = "BLUEBUBBLES_SERVER_URL";
|
|
58
|
+
/**
|
|
59
|
+
* Rich-action toggles. The five COARSE flags are the umbrella switches (each
|
|
60
|
+
* defaults ON; the operator disables per account). The optional FINE-GRAINED
|
|
61
|
+
* flags let the operator gate a single op independently — e.g. allow group
|
|
62
|
+
* renames but forbid removing participants. A fine flag left undefined inherits
|
|
63
|
+
* its umbrella (group-admin ops ← `groupAdmin`; `sendWithEffect` ← `effects`;
|
|
64
|
+
* `reply`/`sendAttachment` ← always on) — finer per-op gating layered on top of
|
|
65
|
+
* the coarse switches, which stay the simple default surface.
|
|
66
|
+
*/
|
|
67
|
+
export interface BlueBubblesActionFlags {
|
|
68
|
+
reactions: boolean;
|
|
69
|
+
edit: boolean;
|
|
70
|
+
unsend: boolean;
|
|
71
|
+
effects: boolean;
|
|
72
|
+
groupAdmin: boolean;
|
|
73
|
+
/** Native inline reply (a threaded reply to a specific message). Default: on. */
|
|
74
|
+
reply?: boolean;
|
|
75
|
+
/** Send with a bubble/screen effect. Default: inherits `effects`. */
|
|
76
|
+
sendWithEffect?: boolean;
|
|
77
|
+
/** Rename a group chat. Default: inherits `groupAdmin`. */
|
|
78
|
+
renameGroup?: boolean;
|
|
79
|
+
/** Set a group chat icon. Default: inherits `groupAdmin`. */
|
|
80
|
+
setGroupIcon?: boolean;
|
|
81
|
+
/** Add a participant to a group. Default: inherits `groupAdmin`. */
|
|
82
|
+
addParticipant?: boolean;
|
|
83
|
+
/** Remove a participant from a group. Default: inherits `groupAdmin`. */
|
|
84
|
+
removeParticipant?: boolean;
|
|
85
|
+
/** Leave a group. Default: inherits `groupAdmin`. */
|
|
86
|
+
leaveGroup?: boolean;
|
|
87
|
+
/** Send a media attachment. Default: on. */
|
|
88
|
+
sendAttachment?: boolean;
|
|
89
|
+
}
|
|
90
|
+
/** Default rich-action toggles — everything on (Private API gates the rest at runtime). */
|
|
91
|
+
export declare const DEFAULT_BLUEBUBBLES_ACTIONS: BlueBubblesActionFlags;
|
|
92
|
+
/** The fine-grained per-op action flag names. */
|
|
93
|
+
export type BlueBubblesFineActionName = "reply" | "sendWithEffect" | "renameGroup" | "setGroupIcon" | "addParticipant" | "removeParticipant" | "leaveGroup" | "sendAttachment";
|
|
94
|
+
/**
|
|
95
|
+
* Resolve whether a FINE-GRAINED op is allowed, honouring an explicit per-op
|
|
96
|
+
* flag when set and otherwise inheriting the umbrella:
|
|
97
|
+
* - group-admin ops (rename/icon/add/remove/leave) ← `groupAdmin`;
|
|
98
|
+
* - `sendWithEffect` ← `effects`;
|
|
99
|
+
* - `reply` / `sendAttachment` ← always on (no coarse umbrella gates them).
|
|
100
|
+
*/
|
|
101
|
+
export declare function isBlueBubblesOpAllowed(actions: BlueBubblesActionFlags, op: BlueBubblesFineActionName): boolean;
|
|
102
|
+
/** Network policy overrides — relax the SSRF guard for a trusted LAN server. */
|
|
103
|
+
export interface BlueBubblesNetworkConfig {
|
|
104
|
+
/**
|
|
105
|
+
* Allow private/LAN/loopback BlueBubbles hosts (default TRUE — a BlueBubbles
|
|
106
|
+
* server is almost always on the operator's LAN). Cloud-metadata stays blocked
|
|
107
|
+
* regardless. Set false to force the strict public-only SSRF policy.
|
|
108
|
+
*/
|
|
109
|
+
allowPrivate?: boolean;
|
|
110
|
+
}
|
|
111
|
+
/** Resolved per-account info — what the adapter runtime reads. */
|
|
112
|
+
export interface ResolvedBlueBubblesAccount {
|
|
113
|
+
accountId: string;
|
|
114
|
+
enabled: boolean;
|
|
115
|
+
/** Base server URL (scheme-normalised, trailing slash stripped). */
|
|
116
|
+
serverUrl: string;
|
|
117
|
+
/** The server password (REST + webhook auth). May be "" when unset. */
|
|
118
|
+
password: string;
|
|
119
|
+
/** The gateway inbound route path for this account. */
|
|
120
|
+
webhookPath: string;
|
|
121
|
+
/** Default phone-number region (E.164 normalisation). */
|
|
122
|
+
region: string;
|
|
123
|
+
/** Outbound media size cap (bytes). */
|
|
124
|
+
mediaMaxBytes: number;
|
|
125
|
+
/** HTTP probe / request timeout (ms). */
|
|
126
|
+
probeTimeoutMs: number;
|
|
127
|
+
/** Per-rich-action toggles. */
|
|
128
|
+
actions: BlueBubblesActionFlags;
|
|
129
|
+
/** On-(re)connect catch-up backfill config (undefined → defaults; `enabled:false` disables). */
|
|
130
|
+
catchup?: BlueBubblesCatchupConfig;
|
|
131
|
+
/**
|
|
132
|
+
* Inbound coalescing window (ms). When > 0, a text + its link-preview balloon
|
|
133
|
+
* (or a text + a split-out attachment) arriving as two `new-message` webhooks
|
|
134
|
+
* are merged into ONE agent turn. 0 (default) disables coalescing.
|
|
135
|
+
*/
|
|
136
|
+
inboundDebounceMs: number;
|
|
137
|
+
/**
|
|
138
|
+
* Rolling group-history context: how many recent messages to fetch + attach
|
|
139
|
+
* as context on an untagged GROUP message (so the agent sees what it's
|
|
140
|
+
* replying into). 0 disables. Default 10.
|
|
141
|
+
*/
|
|
142
|
+
historyLimit: number;
|
|
143
|
+
/** Same as `historyLimit` but for DMs. 0 disables. Default 0 (DMs already carry their own thread). */
|
|
144
|
+
dmHistoryLimit: number;
|
|
145
|
+
/**
|
|
146
|
+
* Allow-list of local directory roots an OUTBOUND attachment may be read from.
|
|
147
|
+
* Layered ON TOP OF the central media-path denylist. Empty (default) = no
|
|
148
|
+
* extra root restriction (the central guard still applies).
|
|
149
|
+
*/
|
|
150
|
+
mediaLocalRoots: string[];
|
|
151
|
+
/** Allow private/LAN/loopback targets through the SSRF guard (default TRUE). */
|
|
152
|
+
allowPrivateNetwork: boolean;
|
|
153
|
+
/**
|
|
154
|
+
* The bot's OWN iMessage handle (phone/email) — used as `selfId` for group
|
|
155
|
+
* mention-gating. Empty when the operator hasn't set it (mention-gating in
|
|
156
|
+
* groups then can't fire and the channel falls back to its other group
|
|
157
|
+
* addressed-signals). Normalised to digits for a phone, lower-case for email.
|
|
158
|
+
*/
|
|
159
|
+
selfHandle: string;
|
|
160
|
+
verbose: boolean;
|
|
161
|
+
}
|
|
162
|
+
/** Is the BlueBubbles channel switched on at all (any shape)? */
|
|
163
|
+
export declare function bluebubblesChannelEnabled(cfg: BrigadeConfig): boolean;
|
|
164
|
+
/** List configured account ids. Legacy single-account configs surface `["default"]`. */
|
|
165
|
+
export declare function listBlueBubblesAccountIds(cfg: BrigadeConfig): string[];
|
|
166
|
+
/**
|
|
167
|
+
* Normalise a BlueBubbles server URL: trim, default the scheme to `http://`
|
|
168
|
+
* when absent (BlueBubbles is commonly a LAN HTTP host), and strip trailing
|
|
169
|
+
* slashes. Returns "" for an empty input (don't throw at config-read time).
|
|
170
|
+
*/
|
|
171
|
+
export declare function normalizeBlueBubblesServerUrl(raw: string): string;
|
|
172
|
+
/**
|
|
173
|
+
* Resolve the BlueBubbles server URL for an account. Precedence: per-account
|
|
174
|
+
* config `${VAR}`/literal → top-level config → `BLUEBUBBLES_SERVER_URL` env → "".
|
|
175
|
+
*/
|
|
176
|
+
export declare function resolveBlueBubblesServerUrl(cfg: BrigadeConfig, accountId?: string | null, env?: NodeJS.ProcessEnv): string;
|
|
177
|
+
/**
|
|
178
|
+
* Resolve the server password (the SECRET) for an account. Precedence:
|
|
179
|
+
* per-account config `${VAR}`/literal → top-level config `${VAR}`/literal →
|
|
180
|
+
* durable sealed token (`channel:bluebubbles`) → `BLUEBUBBLES_PASSWORD` env → "".
|
|
181
|
+
*
|
|
182
|
+
* The sealed token is per-channel (NOT per-account today, like Slack's bot
|
|
183
|
+
* token), so multi-account installs that need distinct passwords should use
|
|
184
|
+
* `${VAR}` refs / env per account.
|
|
185
|
+
*/
|
|
186
|
+
export declare function resolveBlueBubblesPassword(cfg: BrigadeConfig, accountId?: string | null, env?: NodeJS.ProcessEnv): string;
|
|
187
|
+
/**
|
|
188
|
+
* Resolve the inbound webhook route path for an account. The default account
|
|
189
|
+
* keeps the base path; a named account (only present when >1 account is
|
|
190
|
+
* configured) gets a distinct, collision-free path so two servers never share
|
|
191
|
+
* one route. An explicit per-account `webhookPath` overrides the derived slug.
|
|
192
|
+
*/
|
|
193
|
+
export declare function resolveBlueBubblesWebhookPath(cfg: BrigadeConfig, accountId?: string | null, env?: NodeJS.ProcessEnv): string;
|
|
194
|
+
/** Resolve the HTTP probe / request timeout (ms) for an account. */
|
|
195
|
+
export declare function resolveBlueBubblesProbeTimeoutMs(cfg: BrigadeConfig, accountId?: string | null): number;
|
|
196
|
+
/** Resolve the per-rich-action toggles for an account. */
|
|
197
|
+
export declare function resolveBlueBubblesActions(cfg: BrigadeConfig, accountId?: string | null): BlueBubblesActionFlags;
|
|
198
|
+
/**
|
|
199
|
+
* Normalise a handle for self/mention matching: an email lower-cases; a phone
|
|
200
|
+
* keeps only its digits (so `+1 (555) 123-4567` and `15551234567` compare equal).
|
|
201
|
+
* Returns "" for an empty input.
|
|
202
|
+
*/
|
|
203
|
+
export declare function normalizeBlueBubblesSelfHandle(raw: string | undefined): string;
|
|
204
|
+
/**
|
|
205
|
+
* Resolve the bot's own handle for an account (per-account `selfHandle` wins over
|
|
206
|
+
* the top-level slot), normalised. Empty when unset.
|
|
207
|
+
*/
|
|
208
|
+
export declare function resolveBlueBubblesSelfHandle(cfg: BrigadeConfig, accountId?: string | null, env?: NodeJS.ProcessEnv): string;
|
|
209
|
+
/**
|
|
210
|
+
* Resolve whether the SSRF guard should allow private/LAN/loopback hosts for an
|
|
211
|
+
* account. Per-account `network.allowPrivate` wins over the top-level slot;
|
|
212
|
+
* DEFAULTS TO TRUE (a BlueBubbles server is normally on the operator's LAN).
|
|
213
|
+
* Cloud-metadata stays blocked regardless of this flag.
|
|
214
|
+
*/
|
|
215
|
+
export declare function resolveBlueBubblesAllowPrivateNetwork(cfg: BrigadeConfig, accountId?: string | null): boolean;
|
|
216
|
+
/**
|
|
217
|
+
* Resolve the on-(re)connect catch-up backfill config for an account
|
|
218
|
+
* (per-account overrides the top-level slot). Returns `undefined` when neither
|
|
219
|
+
* level configured it — the connection then uses catch-up's built-in defaults.
|
|
220
|
+
*/
|
|
221
|
+
export declare function resolveBlueBubblesCatchup(cfg: BrigadeConfig, accountId?: string | null): BlueBubblesCatchupConfig | undefined;
|
|
222
|
+
/**
|
|
223
|
+
* Resolve the inbound coalescing window (ms) for an account (per-account wins
|
|
224
|
+
* over the top-level slot). 0 (default) disables coalescing.
|
|
225
|
+
*/
|
|
226
|
+
export declare function resolveBlueBubblesInboundDebounceMs(cfg: BrigadeConfig, accountId?: string | null): number;
|
|
227
|
+
/**
|
|
228
|
+
* Resolve the rolling group-history context size for an account (per-account
|
|
229
|
+
* wins over the top-level slot). Defaults to {@link DEFAULT_BLUEBUBBLES_HISTORY_LIMIT};
|
|
230
|
+
* 0 disables.
|
|
231
|
+
*/
|
|
232
|
+
export declare function resolveBlueBubblesHistoryLimit(cfg: BrigadeConfig, accountId?: string | null): number;
|
|
233
|
+
/**
|
|
234
|
+
* Resolve the rolling DM-history context size for an account. Defaults to 0
|
|
235
|
+
* (a DM already carries its own thread context); 0 disables.
|
|
236
|
+
*/
|
|
237
|
+
export declare function resolveBlueBubblesDmHistoryLimit(cfg: BrigadeConfig, accountId?: string | null): number;
|
|
238
|
+
/**
|
|
239
|
+
* Resolve the OUTBOUND-attachment local-root allow-list for an account
|
|
240
|
+
* (per-account entries merged with the top-level slot, de-duped). Empty when
|
|
241
|
+
* neither level configured it — the central media-path denylist still applies.
|
|
242
|
+
*/
|
|
243
|
+
export declare function resolveBlueBubblesMediaLocalRoots(cfg: BrigadeConfig, accountId?: string | null): string[];
|
|
244
|
+
/** Resolve a per-account view of the config (defaults filled in). */
|
|
245
|
+
export declare function resolveBlueBubblesAccount(cfg: BrigadeConfig, accountId?: string | null, env?: NodeJS.ProcessEnv): ResolvedBlueBubblesAccount;
|
|
246
|
+
/**
|
|
247
|
+
* Resolve the idle-thread-session TTL in ms, or `null` when unset / disabled.
|
|
248
|
+
* Accepts a number (ms) or a duration string (`"6h"`, `"30m"`, …). The cron
|
|
249
|
+
* session-reaper uses this to age out idle BlueBubbles group sessions.
|
|
250
|
+
*/
|
|
251
|
+
export declare function bluebubblesThreadIdleTtlMs(cfg: BrigadeConfig): number | null;
|
|
252
|
+
export { CHANNEL_ID as BLUEBUBBLES_CHANNEL_ID, DEFAULT_ACCOUNT_ID as BLUEBUBBLES_DEFAULT_ACCOUNT_ID, PASSWORD_ENV_VAR as BLUEBUBBLES_PASSWORD_ENV_VAR, SERVER_URL_ENV_VAR as BLUEBUBBLES_SERVER_URL_ENV_VAR, DEFAULT_WEBHOOK_PATH as BLUEBUBBLES_DEFAULT_WEBHOOK_PATH, };
|
|
253
|
+
//# sourceMappingURL=account-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-config.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/bluebubbles/account-config.ts"],"names":[],"mappings":"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"}
|