@spinabot/brigade 1.6.1 → 1.8.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/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/discord/account-config.d.ts +60 -0
- package/dist/agents/channels/discord/account-config.d.ts.map +1 -1
- package/dist/agents/channels/discord/account-config.js +89 -0
- package/dist/agents/channels/discord/account-config.js.map +1 -1
- package/dist/agents/channels/discord/adapter.d.ts +24 -1
- package/dist/agents/channels/discord/adapter.d.ts.map +1 -1
- package/dist/agents/channels/discord/adapter.js +208 -41
- package/dist/agents/channels/discord/adapter.js.map +1 -1
- package/dist/agents/channels/discord/component-blocks.d.ts +108 -0
- package/dist/agents/channels/discord/component-blocks.d.ts.map +1 -0
- package/dist/agents/channels/discord/component-blocks.js +113 -0
- package/dist/agents/channels/discord/component-blocks.js.map +1 -0
- package/dist/agents/channels/discord/components.d.ts +78 -0
- package/dist/agents/channels/discord/components.d.ts.map +1 -1
- package/dist/agents/channels/discord/components.js +89 -0
- package/dist/agents/channels/discord/components.js.map +1 -1
- package/dist/agents/channels/discord/connection.d.ts +195 -12
- package/dist/agents/channels/discord/connection.d.ts.map +1 -1
- package/dist/agents/channels/discord/connection.js +852 -38
- package/dist/agents/channels/discord/connection.js.map +1 -1
- package/dist/agents/channels/discord/directory-cache.d.ts +47 -0
- package/dist/agents/channels/discord/directory-cache.d.ts.map +1 -0
- package/dist/agents/channels/discord/directory-cache.js +131 -0
- package/dist/agents/channels/discord/directory-cache.js.map +1 -0
- package/dist/agents/channels/discord/directory-live.d.ts +61 -0
- package/dist/agents/channels/discord/directory-live.d.ts.map +1 -0
- package/dist/agents/channels/discord/directory-live.js +140 -0
- package/dist/agents/channels/discord/directory-live.js.map +1 -0
- package/dist/agents/channels/discord/format.d.ts +15 -0
- package/dist/agents/channels/discord/format.d.ts.map +1 -1
- package/dist/agents/channels/discord/format.js +56 -0
- package/dist/agents/channels/discord/format.js.map +1 -1
- package/dist/agents/channels/discord/guilds.d.ts +25 -0
- package/dist/agents/channels/discord/guilds.d.ts.map +1 -0
- package/dist/agents/channels/discord/guilds.js +46 -0
- package/dist/agents/channels/discord/guilds.js.map +1 -0
- package/dist/agents/channels/discord/inbound-extras.d.ts +166 -9
- package/dist/agents/channels/discord/inbound-extras.d.ts.map +1 -1
- package/dist/agents/channels/discord/inbound-extras.js +246 -8
- package/dist/agents/channels/discord/inbound-extras.js.map +1 -1
- package/dist/agents/channels/discord/index.d.ts +10 -3
- package/dist/agents/channels/discord/index.d.ts.map +1 -1
- package/dist/agents/channels/discord/index.js +10 -3
- package/dist/agents/channels/discord/index.js.map +1 -1
- package/dist/agents/channels/discord/modal-registry.d.ts +89 -0
- package/dist/agents/channels/discord/modal-registry.d.ts.map +1 -0
- package/dist/agents/channels/discord/modal-registry.js +104 -0
- package/dist/agents/channels/discord/modal-registry.js.map +1 -0
- package/dist/agents/channels/discord/modals.d.ts +100 -0
- package/dist/agents/channels/discord/modals.d.ts.map +1 -0
- package/dist/agents/channels/discord/modals.js +124 -0
- package/dist/agents/channels/discord/modals.js.map +1 -0
- package/dist/agents/channels/discord/permission-audit.d.ts +43 -0
- package/dist/agents/channels/discord/permission-audit.d.ts.map +1 -0
- package/dist/agents/channels/discord/permission-audit.js +192 -0
- package/dist/agents/channels/discord/permission-audit.js.map +1 -0
- package/dist/agents/channels/discord/plugin.d.ts +18 -2
- package/dist/agents/channels/discord/plugin.d.ts.map +1 -1
- package/dist/agents/channels/discord/plugin.js +73 -4
- package/dist/agents/channels/discord/plugin.js.map +1 -1
- package/dist/agents/channels/discord/probe.d.ts +23 -1
- package/dist/agents/channels/discord/probe.d.ts.map +1 -1
- package/dist/agents/channels/discord/probe.js +40 -5
- package/dist/agents/channels/discord/probe.js.map +1 -1
- package/dist/agents/channels/discord/rest-actions.d.ts +346 -0
- package/dist/agents/channels/discord/rest-actions.d.ts.map +1 -0
- package/dist/agents/channels/discord/rest-actions.js +559 -0
- package/dist/agents/channels/discord/rest-actions.js.map +1 -0
- package/dist/agents/channels/discord/rest-components.d.ts +122 -0
- package/dist/agents/channels/discord/rest-components.d.ts.map +1 -0
- package/dist/agents/channels/discord/rest-components.js +243 -0
- package/dist/agents/channels/discord/rest-components.js.map +1 -0
- package/dist/agents/channels/discord/security-audit.d.ts +29 -0
- package/dist/agents/channels/discord/security-audit.d.ts.map +1 -0
- package/dist/agents/channels/discord/security-audit.js +94 -0
- package/dist/agents/channels/discord/security-audit.js.map +1 -0
- package/dist/agents/channels/discord/security-doctor.d.ts +43 -0
- package/dist/agents/channels/discord/security-doctor.d.ts.map +1 -0
- package/dist/agents/channels/discord/security-doctor.js +83 -0
- package/dist/agents/channels/discord/security-doctor.js.map +1 -0
- package/dist/agents/channels/discord/status-issues.d.ts +37 -0
- package/dist/agents/channels/discord/status-issues.d.ts.map +1 -0
- package/dist/agents/channels/discord/status-issues.js +66 -0
- package/dist/agents/channels/discord/status-issues.js.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts +57 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.d.ts.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.js +98 -0
- package/dist/agents/channels/discord/subagent-thread-binding-store.js.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding.d.ts +95 -0
- package/dist/agents/channels/discord/subagent-thread-binding.d.ts.map +1 -0
- package/dist/agents/channels/discord/subagent-thread-binding.js +208 -0
- package/dist/agents/channels/discord/subagent-thread-binding.js.map +1 -0
- package/dist/agents/channels/discord/system-events.d.ts +31 -0
- package/dist/agents/channels/discord/system-events.d.ts.map +1 -0
- package/dist/agents/channels/discord/system-events.js +74 -0
- package/dist/agents/channels/discord/system-events.js.map +1 -0
- package/dist/agents/channels/general-callback.d.ts +12 -0
- package/dist/agents/channels/general-callback.d.ts.map +1 -1
- package/dist/agents/channels/general-callback.js +18 -0
- package/dist/agents/channels/general-callback.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 +25 -4
- 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/extensions/types.d.ts +7 -0
- package/dist/agents/extensions/types.d.ts.map +1 -1
- package/dist/agents/extensions/types.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/subagent-announce-delivery.d.ts +10 -0
- package/dist/agents/subagent-announce-delivery.d.ts.map +1 -1
- package/dist/agents/subagent-announce-delivery.js +1 -0
- package/dist/agents/subagent-announce-delivery.js.map +1 -1
- package/dist/agents/subagent-completion-bridge.d.ts.map +1 -1
- package/dist/agents/subagent-completion-bridge.js +81 -0
- package/dist/agents/subagent-completion-bridge.js.map +1 -1
- package/dist/agents/subagent-spawn.d.ts.map +1 -1
- package/dist/agents/subagent-spawn.js +57 -4
- package/dist/agents/subagent-spawn.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/discord-action-tool.d.ts +224 -0
- package/dist/agents/tools/discord-action-tool.d.ts.map +1 -0
- package/dist/agents/tools/discord-action-tool.js +848 -0
- package/dist/agents/tools/discord-action-tool.js.map +1 -0
- package/dist/agents/tools/registry.d.ts.map +1 -1
- package/dist/agents/tools/registry.js +39 -0
- package/dist/agents/tools/registry.js.map +1 -1
- package/dist/agents/tools/sessions/index.d.ts +8 -0
- package/dist/agents/tools/sessions/index.d.ts.map +1 -1
- package/dist/agents/tools/sessions/index.js +15 -3
- package/dist/agents/tools/sessions/index.js.map +1 -1
- package/dist/buildstamp.json +1 -1
- package/dist/cli/commands/channels.d.ts +2 -0
- package/dist/cli/commands/channels.d.ts.map +1 -1
- package/dist/cli/commands/channels.js +58 -1
- package/dist/cli/commands/channels.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/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 +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send.js","sourceRoot":"","sources":["../../../../src/agents/channels/bluebubbles/send.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BlueBubbles structured status-issues — the diagnostics the central status
|
|
3
|
+
* surface renders (`collectStatusIssues` on the plugin's status adapter).
|
|
4
|
+
*
|
|
5
|
+
* Three issue families, each carrying a concrete FIX hint:
|
|
6
|
+
* - `not-configured` — serverUrl + password aren't both resolvable.
|
|
7
|
+
* - `unreachable` — the server/info probe failed (server down / bad URL /
|
|
8
|
+
* wrong password).
|
|
9
|
+
* - `private-api-off` — the server is reachable but the Private API is OFF, so
|
|
10
|
+
* reactions / edit / unsend / typing / group-admin can't run.
|
|
11
|
+
*
|
|
12
|
+
* The RICH shape (`{ channel, accountId, kind, message, fix }`) is what callers
|
|
13
|
+
* that want the detail read; `toChannelStatusIssues` maps it onto the central
|
|
14
|
+
* `{ accountId, severity, message }` rows the rollup view + `brigade doctor`
|
|
15
|
+
* already render, so BlueBubbles health shows up alongside the other channels.
|
|
16
|
+
*/
|
|
17
|
+
import type { ChannelAccountSnapshot, ChannelStatusIssue } from "../sdk.js";
|
|
18
|
+
/** The structured issue kinds BlueBubbles surfaces. */
|
|
19
|
+
export type BlueBubblesStatusIssueKind = "not-configured" | "unreachable" | "private-api-off";
|
|
20
|
+
/** A rich, structured BlueBubbles status issue. */
|
|
21
|
+
export interface BlueBubblesStatusIssue {
|
|
22
|
+
/** Always `"bluebubbles"`. */
|
|
23
|
+
channel: string;
|
|
24
|
+
/** The account the issue is about. */
|
|
25
|
+
accountId: string;
|
|
26
|
+
/** The issue family. */
|
|
27
|
+
kind: BlueBubblesStatusIssueKind;
|
|
28
|
+
/** Operator-facing description. */
|
|
29
|
+
message: string;
|
|
30
|
+
/** A concrete remediation hint. */
|
|
31
|
+
fix: string;
|
|
32
|
+
}
|
|
33
|
+
/** The per-account diagnostics `collectBlueBubblesStatusIssues` reads. */
|
|
34
|
+
export interface BlueBubblesStatusAccount {
|
|
35
|
+
accountId: string;
|
|
36
|
+
/** serverUrl + password both resolvable? */
|
|
37
|
+
configured: boolean;
|
|
38
|
+
/** server/info probe reachable? (undefined → not probed). */
|
|
39
|
+
reachable?: boolean;
|
|
40
|
+
/** Private-API status from the probe — true/false/null (unknown). */
|
|
41
|
+
privateApi?: boolean | null;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Derive the structured issues for one or more BlueBubbles accounts. A fully
|
|
45
|
+
* configured + reachable + Private-API-on account contributes nothing. Pure +
|
|
46
|
+
* total — given the diagnostics, it derives the rows; no I/O of its own.
|
|
47
|
+
*/
|
|
48
|
+
export declare function collectBlueBubblesStatusIssues(accounts: BlueBubblesStatusAccount[]): BlueBubblesStatusIssue[];
|
|
49
|
+
/** Map the rich BlueBubbles issues onto the central `ChannelStatusIssue[]` rows. */
|
|
50
|
+
export declare function toChannelStatusIssues(issues: BlueBubblesStatusIssue[]): ChannelStatusIssue[];
|
|
51
|
+
/**
|
|
52
|
+
* Read the BlueBubbles diagnostics off an open-shaped account snapshot. The
|
|
53
|
+
* plugin's `buildAccountSnapshot` stamps `configured` / `reachable` /
|
|
54
|
+
* `privateApi`; this reads them back defensively for `collectStatusIssues`.
|
|
55
|
+
*/
|
|
56
|
+
export declare function statusAccountFromSnapshot(snapshot: ChannelAccountSnapshot): BlueBubblesStatusAccount;
|
|
57
|
+
//# sourceMappingURL=status-issues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-issues.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/bluebubbles/status-issues.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAG5E,uDAAuD;AACvD,MAAM,MAAM,0BAA0B,GAAG,gBAAgB,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAE9F,mDAAmD;AACnD,MAAM,WAAW,sBAAsB;IACtC,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,wBAAwB;IACxB,IAAI,EAAE,0BAA0B,CAAC;IACjC,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,0EAA0E;AAC1E,MAAM,WAAW,wBAAwB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,qEAAqE;IACrE,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAgBD;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,wBAAwB,EAAE,GAAG,sBAAsB,EAAE,CAuC7G;AAED,oFAAoF;AACpF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,kBAAkB,EAAE,CAE5F;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,wBAAwB,CASpG"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BlueBubbles structured status-issues — the diagnostics the central status
|
|
3
|
+
* surface renders (`collectStatusIssues` on the plugin's status adapter).
|
|
4
|
+
*
|
|
5
|
+
* Three issue families, each carrying a concrete FIX hint:
|
|
6
|
+
* - `not-configured` — serverUrl + password aren't both resolvable.
|
|
7
|
+
* - `unreachable` — the server/info probe failed (server down / bad URL /
|
|
8
|
+
* wrong password).
|
|
9
|
+
* - `private-api-off` — the server is reachable but the Private API is OFF, so
|
|
10
|
+
* reactions / edit / unsend / typing / group-admin can't run.
|
|
11
|
+
*
|
|
12
|
+
* The RICH shape (`{ channel, accountId, kind, message, fix }`) is what callers
|
|
13
|
+
* that want the detail read; `toChannelStatusIssues` maps it onto the central
|
|
14
|
+
* `{ accountId, severity, message }` rows the rollup view + `brigade doctor`
|
|
15
|
+
* already render, so BlueBubbles health shows up alongside the other channels.
|
|
16
|
+
*/
|
|
17
|
+
import { BLUEBUBBLES_CHANNEL_ID } from "./account-config.js";
|
|
18
|
+
/** Map a rich issue's kind to the central severity. */
|
|
19
|
+
function severityFor(kind) {
|
|
20
|
+
switch (kind) {
|
|
21
|
+
case "not-configured":
|
|
22
|
+
return "warn";
|
|
23
|
+
case "unreachable":
|
|
24
|
+
return "error";
|
|
25
|
+
case "private-api-off":
|
|
26
|
+
return "warn";
|
|
27
|
+
default:
|
|
28
|
+
return "warn";
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Derive the structured issues for one or more BlueBubbles accounts. A fully
|
|
33
|
+
* configured + reachable + Private-API-on account contributes nothing. Pure +
|
|
34
|
+
* total — given the diagnostics, it derives the rows; no I/O of its own.
|
|
35
|
+
*/
|
|
36
|
+
export function collectBlueBubblesStatusIssues(accounts) {
|
|
37
|
+
const issues = [];
|
|
38
|
+
for (const acc of accounts ?? []) {
|
|
39
|
+
const accountId = (acc?.accountId ?? "").trim();
|
|
40
|
+
if (!accountId)
|
|
41
|
+
continue;
|
|
42
|
+
if (!acc.configured) {
|
|
43
|
+
issues.push({
|
|
44
|
+
channel: BLUEBUBBLES_CHANNEL_ID,
|
|
45
|
+
accountId,
|
|
46
|
+
kind: "not-configured",
|
|
47
|
+
message: "BlueBubbles is not fully configured (serverUrl + password).",
|
|
48
|
+
fix: "Set channels.bluebubbles.serverUrl + password (or run `brigade channels add bluebubbles`).",
|
|
49
|
+
});
|
|
50
|
+
continue; // nothing else is meaningful until it's configured
|
|
51
|
+
}
|
|
52
|
+
if (acc.reachable === false) {
|
|
53
|
+
issues.push({
|
|
54
|
+
channel: BLUEBUBBLES_CHANNEL_ID,
|
|
55
|
+
accountId,
|
|
56
|
+
kind: "unreachable",
|
|
57
|
+
message: "BlueBubbles server/info probe failed — the server is unreachable or rejected the password.",
|
|
58
|
+
fix: "Check the BlueBubbles Server app is running, the serverUrl is reachable from the gateway host, and the password is correct.",
|
|
59
|
+
});
|
|
60
|
+
continue; // can't judge the Private API when unreachable
|
|
61
|
+
}
|
|
62
|
+
if (acc.privateApi === false) {
|
|
63
|
+
issues.push({
|
|
64
|
+
channel: BLUEBUBBLES_CHANNEL_ID,
|
|
65
|
+
accountId,
|
|
66
|
+
kind: "private-api-off",
|
|
67
|
+
message: "BlueBubbles Private API is disabled — reactions, edit, unsend, typing, and group admin can't run.",
|
|
68
|
+
fix: "Enable the Private API in the BlueBubbles Server app (Settings → Private API) and restart the server.",
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return issues;
|
|
73
|
+
}
|
|
74
|
+
/** Map the rich BlueBubbles issues onto the central `ChannelStatusIssue[]` rows. */
|
|
75
|
+
export function toChannelStatusIssues(issues) {
|
|
76
|
+
return issues.map((i) => ({ accountId: i.accountId, severity: severityFor(i.kind), message: `${i.message} ${i.fix}` }));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Read the BlueBubbles diagnostics off an open-shaped account snapshot. The
|
|
80
|
+
* plugin's `buildAccountSnapshot` stamps `configured` / `reachable` /
|
|
81
|
+
* `privateApi`; this reads them back defensively for `collectStatusIssues`.
|
|
82
|
+
*/
|
|
83
|
+
export function statusAccountFromSnapshot(snapshot) {
|
|
84
|
+
const rec = snapshot;
|
|
85
|
+
const privateApiRaw = rec.privateApi;
|
|
86
|
+
return {
|
|
87
|
+
accountId: (snapshot.id ?? "").trim(),
|
|
88
|
+
configured: rec.configured === true,
|
|
89
|
+
...(typeof rec.reachable === "boolean" ? { reachable: rec.reachable } : {}),
|
|
90
|
+
...(typeof privateApiRaw === "boolean" || privateApiRaw === null ? { privateApi: privateApiRaw } : {}),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=status-issues.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-issues.js","sourceRoot":"","sources":["../../../../src/agents/channels/bluebubbles/status-issues.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AA8B7D,uDAAuD;AACvD,SAAS,WAAW,CAAC,IAAgC;IACpD,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,gBAAgB;YACpB,OAAO,MAAM,CAAC;QACf,KAAK,aAAa;YACjB,OAAO,OAAO,CAAC;QAChB,KAAK,iBAAiB;YACrB,OAAO,MAAM,CAAC;QACf;YACC,OAAO,MAAM,CAAC;IAChB,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAAC,QAAoC;IAClF,MAAM,MAAM,GAA6B,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,sBAAsB;gBAC/B,SAAS;gBACT,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,6DAA6D;gBACtE,GAAG,EAAE,4FAA4F;aACjG,CAAC,CAAC;YACH,SAAS,CAAC,mDAAmD;QAC9D,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,sBAAsB;gBAC/B,SAAS;gBACT,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,4FAA4F;gBACrG,GAAG,EAAE,6HAA6H;aAClI,CAAC,CAAC;YACH,SAAS,CAAC,+CAA+C;QAC1D,CAAC;QAED,IAAI,GAAG,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,sBAAsB;gBAC/B,SAAS;gBACT,IAAI,EAAE,iBAAiB;gBACvB,OAAO,EAAE,mGAAmG;gBAC5G,GAAG,EAAE,uGAAuG;aAC5G,CAAC,CAAC;QACJ,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,qBAAqB,CAAC,MAAgC;IACrE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACzH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,QAAgC;IACzE,MAAM,GAAG,GAAG,QAAmC,CAAC;IAChD,MAAM,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC;IACrC,OAAO;QACN,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACrC,UAAU,EAAE,GAAG,CAAC,UAAU,KAAK,IAAI;QACnC,GAAG,CAAC,OAAO,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,OAAO,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,aAA+B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BlueBubbles REST plumbing + shared transport types.
|
|
3
|
+
*
|
|
4
|
+
* BlueBubbles authenticates EVERY REST call by the server password in the QUERY
|
|
5
|
+
* STRING (`?password=<urlencoded>`), NOT a header. `buildBlueBubblesApiUrl`
|
|
6
|
+
* assembles `${serverUrl}/api/v1/<path>?password=…` (the `URL` constructor
|
|
7
|
+
* URL-encodes the password automatically). `blueBubblesFetchWithTimeout` is the
|
|
8
|
+
* single network primitive every REST helper goes through — and it takes an
|
|
9
|
+
* INJECTABLE `fetch` so tests can mock the wire with zero network.
|
|
10
|
+
*/
|
|
11
|
+
/** Default REST timeout (ms). Attachment uploads override to a longer value. */
|
|
12
|
+
export declare const BLUEBUBBLES_DEFAULT_TIMEOUT_MS = 10000;
|
|
13
|
+
/** The injectable fetch seam — production passes `fetch`; tests pass a mock. */
|
|
14
|
+
export type FetchLike = typeof fetch;
|
|
15
|
+
export { SsrfBlockedError } from "../../../infra/net/fetch-guard.js";
|
|
16
|
+
/**
|
|
17
|
+
* Build a BlueBubbles REST URL. `path` is the API path AFTER `/api/v1/`
|
|
18
|
+
* (e.g. `"message/text"`). The password rides in the query string (the wire's
|
|
19
|
+
* auth) and is URL-encoded by the `URL` builder. `query` adds extra params.
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildBlueBubblesApiUrl(params: {
|
|
22
|
+
serverUrl: string;
|
|
23
|
+
path: string;
|
|
24
|
+
password?: string;
|
|
25
|
+
query?: Record<string, string | number | undefined>;
|
|
26
|
+
}): string;
|
|
27
|
+
/**
|
|
28
|
+
* Fetch a BlueBubbles REST URL through Brigade's SSRF guard with a timeout.
|
|
29
|
+
*
|
|
30
|
+
* Every REST call goes through the guard: it re-checks the host on each redirect
|
|
31
|
+
* hop (so a redirect to `169.254.169.254` / `metadata.*` can't reach cloud
|
|
32
|
+
* metadata) and strips `Authorization`/`Cookie` on cross-origin redirects.
|
|
33
|
+
*
|
|
34
|
+
* A BlueBubbles server is almost always a LAN / private-IP host
|
|
35
|
+
* (`192.168.x.x`, `10.x.x.x`, `localhost`), so `allowPrivateNetwork` defaults to
|
|
36
|
+
* TRUE for this channel — but cloud-metadata stays blocked even then, so the
|
|
37
|
+
* guard still defends against the highest-value SSRF target. The operator can
|
|
38
|
+
* tighten it via `channels.bluebubbles.network.allowPrivate=false`.
|
|
39
|
+
*
|
|
40
|
+
* `fetchImpl` is the test seam (inject a mock); it is threaded into the guard so
|
|
41
|
+
* the SSRF classification still runs but the actual wire call is the mock.
|
|
42
|
+
*/
|
|
43
|
+
export declare function blueBubblesFetchWithTimeout(url: string, init: RequestInit, opts?: {
|
|
44
|
+
timeoutMs?: number;
|
|
45
|
+
fetchImpl?: FetchLike;
|
|
46
|
+
allowPrivateNetwork?: boolean;
|
|
47
|
+
}): Promise<Response>;
|
|
48
|
+
/**
|
|
49
|
+
* Read a BlueBubbles JSON response, returning the `data` field (the API wraps
|
|
50
|
+
* payloads as `{ status, message, data }`). Throws an operator-facing error on a
|
|
51
|
+
* non-2xx response or a server-reported error. `context` names the call for the
|
|
52
|
+
* error message.
|
|
53
|
+
*/
|
|
54
|
+
export declare function readBlueBubblesJson<T = unknown>(res: Response, context: string): Promise<T>;
|
|
55
|
+
/** The BlueBubbles `server/info` payload the probe + capability detection read. */
|
|
56
|
+
export interface BlueBubblesServerInfo {
|
|
57
|
+
/** macOS version of the host (`"14.4"`, `"26.0"`, …). */
|
|
58
|
+
os_version?: string;
|
|
59
|
+
/** BlueBubbles server version. */
|
|
60
|
+
server_version?: string;
|
|
61
|
+
/** Whether the Private API is enabled (gates reactions/edit/unsend/effects/groups). */
|
|
62
|
+
private_api?: boolean;
|
|
63
|
+
/** Whether the BlueBubbles helper bundle is connected. */
|
|
64
|
+
helper_connected?: boolean;
|
|
65
|
+
/** Proxy service in use (ngrok / cloudflare / …). */
|
|
66
|
+
proxy_service?: string;
|
|
67
|
+
[key: string]: unknown;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/bluebubbles/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,gFAAgF;AAChF,eAAO,MAAM,8BAA8B,QAAS,CAAC;AAErD,gFAAgF;AAChF,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;AAErC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CACpD,GAAG,MAAM,CAaT;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,2BAA2B,CAChD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAO,GACrF,OAAO,CAAC,QAAQ,CAAC,CAcnB;AAsBD;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAmBjG;AAED,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACrC,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uFAAuF;IACvF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BlueBubbles REST plumbing + shared transport types.
|
|
3
|
+
*
|
|
4
|
+
* BlueBubbles authenticates EVERY REST call by the server password in the QUERY
|
|
5
|
+
* STRING (`?password=<urlencoded>`), NOT a header. `buildBlueBubblesApiUrl`
|
|
6
|
+
* assembles `${serverUrl}/api/v1/<path>?password=…` (the `URL` constructor
|
|
7
|
+
* URL-encodes the password automatically). `blueBubblesFetchWithTimeout` is the
|
|
8
|
+
* single network primitive every REST helper goes through — and it takes an
|
|
9
|
+
* INJECTABLE `fetch` so tests can mock the wire with zero network.
|
|
10
|
+
*/
|
|
11
|
+
import { guardedFetch } from "../../../infra/net/fetch-guard.js";
|
|
12
|
+
/** Default REST timeout (ms). Attachment uploads override to a longer value. */
|
|
13
|
+
export const BLUEBUBBLES_DEFAULT_TIMEOUT_MS = 10_000;
|
|
14
|
+
export { SsrfBlockedError } from "../../../infra/net/fetch-guard.js";
|
|
15
|
+
/**
|
|
16
|
+
* Build a BlueBubbles REST URL. `path` is the API path AFTER `/api/v1/`
|
|
17
|
+
* (e.g. `"message/text"`). The password rides in the query string (the wire's
|
|
18
|
+
* auth) and is URL-encoded by the `URL` builder. `query` adds extra params.
|
|
19
|
+
*/
|
|
20
|
+
export function buildBlueBubblesApiUrl(params) {
|
|
21
|
+
const base = (params.serverUrl ?? "").trim().replace(/\/+$/, "");
|
|
22
|
+
if (!base)
|
|
23
|
+
throw new Error("BlueBubbles serverUrl is required");
|
|
24
|
+
const cleanPath = params.path.replace(/^\/+/, "");
|
|
25
|
+
const url = new URL(`/api/v1/${cleanPath}`, `${base}/`);
|
|
26
|
+
if (params.password)
|
|
27
|
+
url.searchParams.set("password", params.password);
|
|
28
|
+
if (params.query) {
|
|
29
|
+
for (const [k, v] of Object.entries(params.query)) {
|
|
30
|
+
if (v === undefined)
|
|
31
|
+
continue;
|
|
32
|
+
url.searchParams.set(k, String(v));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return url.toString();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Fetch a BlueBubbles REST URL through Brigade's SSRF guard with a timeout.
|
|
39
|
+
*
|
|
40
|
+
* Every REST call goes through the guard: it re-checks the host on each redirect
|
|
41
|
+
* hop (so a redirect to `169.254.169.254` / `metadata.*` can't reach cloud
|
|
42
|
+
* metadata) and strips `Authorization`/`Cookie` on cross-origin redirects.
|
|
43
|
+
*
|
|
44
|
+
* A BlueBubbles server is almost always a LAN / private-IP host
|
|
45
|
+
* (`192.168.x.x`, `10.x.x.x`, `localhost`), so `allowPrivateNetwork` defaults to
|
|
46
|
+
* TRUE for this channel — but cloud-metadata stays blocked even then, so the
|
|
47
|
+
* guard still defends against the highest-value SSRF target. The operator can
|
|
48
|
+
* tighten it via `channels.bluebubbles.network.allowPrivate=false`.
|
|
49
|
+
*
|
|
50
|
+
* `fetchImpl` is the test seam (inject a mock); it is threaded into the guard so
|
|
51
|
+
* the SSRF classification still runs but the actual wire call is the mock.
|
|
52
|
+
*/
|
|
53
|
+
export async function blueBubblesFetchWithTimeout(url, init, opts = {}) {
|
|
54
|
+
const timeoutMs = opts.timeoutMs ?? BLUEBUBBLES_DEFAULT_TIMEOUT_MS;
|
|
55
|
+
const headers = headersToRecord(init.headers);
|
|
56
|
+
const { response } = await guardedFetch(url, {
|
|
57
|
+
method: init.method ?? "GET",
|
|
58
|
+
...(Object.keys(headers).length > 0 ? { headers } : {}),
|
|
59
|
+
...(init.body !== undefined && init.body !== null ? { body: init.body } : {}),
|
|
60
|
+
timeoutMs,
|
|
61
|
+
// LAN servers are the norm for BlueBubbles; default-allow private but keep
|
|
62
|
+
// cloud-metadata blocked. The operator may flip this off per account.
|
|
63
|
+
allowPrivateNetwork: opts.allowPrivateNetwork !== false,
|
|
64
|
+
...(opts.fetchImpl ? { fetchImpl: opts.fetchImpl } : {}),
|
|
65
|
+
});
|
|
66
|
+
return response;
|
|
67
|
+
}
|
|
68
|
+
/** Coerce a fetch headers init to a plain record for the guard's option shape. */
|
|
69
|
+
function headersToRecord(h) {
|
|
70
|
+
const out = {};
|
|
71
|
+
if (!h)
|
|
72
|
+
return out;
|
|
73
|
+
if (typeof Headers !== "undefined" && h instanceof Headers) {
|
|
74
|
+
h.forEach((v, k) => {
|
|
75
|
+
out[k] = v;
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
else if (Array.isArray(h)) {
|
|
79
|
+
for (const pair of h) {
|
|
80
|
+
const k = pair[0];
|
|
81
|
+
const v = pair[1];
|
|
82
|
+
if (k)
|
|
83
|
+
out[k] = String(v ?? "");
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
for (const [k, v] of Object.entries(h))
|
|
88
|
+
out[k] = String(v ?? "");
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Read a BlueBubbles JSON response, returning the `data` field (the API wraps
|
|
94
|
+
* payloads as `{ status, message, data }`). Throws an operator-facing error on a
|
|
95
|
+
* non-2xx response or a server-reported error. `context` names the call for the
|
|
96
|
+
* error message.
|
|
97
|
+
*/
|
|
98
|
+
export async function readBlueBubblesJson(res, context) {
|
|
99
|
+
let body = null;
|
|
100
|
+
const text = await res.text();
|
|
101
|
+
if (text) {
|
|
102
|
+
try {
|
|
103
|
+
body = JSON.parse(text);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
body = null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const record = (body && typeof body === "object" ? body : {});
|
|
110
|
+
if (!res.ok) {
|
|
111
|
+
const msg = (typeof record.message === "string" && record.message) ||
|
|
112
|
+
(typeof record.error === "string" && record.error) ||
|
|
113
|
+
`HTTP ${res.status}`;
|
|
114
|
+
throw new Error(`BlueBubbles ${context} failed: ${msg}`);
|
|
115
|
+
}
|
|
116
|
+
return record.data;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/agents/channels/bluebubbles/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BlueBubbles inbound gateway route.
|
|
3
|
+
*
|
|
4
|
+
* BlueBubbles POSTs each event to a Brigade gateway HTTP route. Because a
|
|
5
|
+
* BlueBubbles webhook CANNOT send custom headers, the server PASSWORD is embedded
|
|
6
|
+
* in the registered webhook URL's QUERY STRING (`?password=…` / `?guid=…`) and
|
|
7
|
+
* verified on each inbound POST. (Some BlueBubbles versions also send the token
|
|
8
|
+
* as a header — those are accepted too.) Verification happens FIRST, before the
|
|
9
|
+
* body is parsed / routed, so a forged event can't reach the agent.
|
|
10
|
+
*
|
|
11
|
+
* Mirrors `slack/webhook.ts` (the webhook-ingress blueprint): build an
|
|
12
|
+
* `HttpRoute`, register it via `b.httpRoute(...)` from the module, resolve the
|
|
13
|
+
* started adapter (`resolveSink`) at REQUEST time (late binding — the route is
|
|
14
|
+
* registered before the plugin starts accounts), always reply 200 so BlueBubbles
|
|
15
|
+
* doesn't retry-storm.
|
|
16
|
+
*/
|
|
17
|
+
import type { HttpRoute } from "../sdk.js";
|
|
18
|
+
/** Default fixed-window rate-limit: max authenticated requests per window. */
|
|
19
|
+
export declare const WEBHOOK_RATE_LIMIT_MAX = 240;
|
|
20
|
+
/** Default fixed-window length (ms). 240 req / 10s ≈ 24 rps sustained per account. */
|
|
21
|
+
export declare const WEBHOOK_RATE_LIMIT_WINDOW_MS = 10000;
|
|
22
|
+
/** Default bound on concurrently in-flight handler bodies (normalize/dedupe/dispatch). */
|
|
23
|
+
export declare const WEBHOOK_MAX_IN_FLIGHT = 32;
|
|
24
|
+
/**
|
|
25
|
+
* A fixed-window request rate-limiter. `hit()` records one request against the
|
|
26
|
+
* current window and returns whether it is WITHIN the limit. The window resets
|
|
27
|
+
* lazily on the first hit after it elapses (no timers held). Self-contained so
|
|
28
|
+
* the webhook route can bound a replay-storm / hostile sender on the `auth:none`
|
|
29
|
+
* path without a central dependency.
|
|
30
|
+
*/
|
|
31
|
+
export interface FixedWindowRateLimiter {
|
|
32
|
+
/** Record a request; returns true when it is allowed (within the window's cap). */
|
|
33
|
+
hit(nowMs?: number): boolean;
|
|
34
|
+
}
|
|
35
|
+
/** Build a fixed-window rate limiter (`max` requests per `windowMs`). */
|
|
36
|
+
export declare function createFixedWindowRateLimiter(max: number, windowMs: number): FixedWindowRateLimiter;
|
|
37
|
+
/**
|
|
38
|
+
* A bounded concurrency gate. `tryAcquire()` reserves a slot (returns a release
|
|
39
|
+
* fn) or returns null when the cap is already reached. The handler releases its
|
|
40
|
+
* slot in a `finally` so a thrown handler can't leak the count.
|
|
41
|
+
*/
|
|
42
|
+
export interface InFlightLimiter {
|
|
43
|
+
tryAcquire(): (() => void) | null;
|
|
44
|
+
inFlight(): number;
|
|
45
|
+
}
|
|
46
|
+
/** Build an in-flight concurrency limiter capped at `max` simultaneous holders. */
|
|
47
|
+
export declare function createInFlightLimiter(max: number): InFlightLimiter;
|
|
48
|
+
/** Constant-time compare of two strings — avoids leaking via timing. */
|
|
49
|
+
export declare function safeEqualToken(a: string, b: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Verify a BlueBubbles webhook request's password. The supplied token comes from
|
|
52
|
+
* the URL query (`password` / `guid`) or, when present, a header. When
|
|
53
|
+
* `expectedPassword` is empty the check is SKIPPED (returns true) — the operator
|
|
54
|
+
* opted out (not recommended). Returns false when a password is configured but
|
|
55
|
+
* the supplied one is missing / wrong.
|
|
56
|
+
*/
|
|
57
|
+
export declare function verifyBlueBubblesWebhook(args: {
|
|
58
|
+
expectedPassword: string;
|
|
59
|
+
suppliedToken: string | undefined;
|
|
60
|
+
}): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Parse the request body. BlueBubbles delivers JSON; a form-encoded fallback
|
|
63
|
+
* (some proxy setups) carries the JSON under a `payload`/`data` field.
|
|
64
|
+
*/
|
|
65
|
+
export declare function parseBlueBubblesBody(rawBody: string, contentType: string): {
|
|
66
|
+
type?: string;
|
|
67
|
+
payload: unknown;
|
|
68
|
+
} | null;
|
|
69
|
+
/** The minimal adapter surface the webhook route drives. */
|
|
70
|
+
export interface BlueBubblesWebhookSink {
|
|
71
|
+
/** Feed a parsed BlueBubbles webhook event into the inbound path. */
|
|
72
|
+
feedWebhookEvent(eventType: string | undefined, payload: unknown): void;
|
|
73
|
+
}
|
|
74
|
+
export interface BuildBlueBubblesWebhookRouteArgs {
|
|
75
|
+
/** The gateway route path (e.g. `/bluebubbles/webhook`). */
|
|
76
|
+
path: string;
|
|
77
|
+
/** The configured server password (`""` → no auth check). */
|
|
78
|
+
password: string;
|
|
79
|
+
/** Resolve the started adapter to feed events into (null when not started). */
|
|
80
|
+
resolveSink: () => BlueBubblesWebhookSink | null;
|
|
81
|
+
/** Logger. */
|
|
82
|
+
log?: (msg: string, meta?: Record<string, unknown>) => void;
|
|
83
|
+
/** Max authenticated requests per window before throttling (default {@link WEBHOOK_RATE_LIMIT_MAX}). */
|
|
84
|
+
rateLimitMax?: number;
|
|
85
|
+
/** Fixed-window length in ms (default {@link WEBHOOK_RATE_LIMIT_WINDOW_MS}). */
|
|
86
|
+
rateLimitWindowMs?: number;
|
|
87
|
+
/** Max concurrently in-flight handler bodies (default {@link WEBHOOK_MAX_IN_FLIGHT}). */
|
|
88
|
+
maxInFlight?: number;
|
|
89
|
+
/** TEST SEAM — inject the clock used by the rate limiter. */
|
|
90
|
+
now?: () => number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build the Brigade `HttpRoute` for the BlueBubbles webhook. Register it via
|
|
94
|
+
* `b.httpRoute(...)` from the module.
|
|
95
|
+
*/
|
|
96
|
+
export declare function buildBlueBubblesWebhookRoute(args: BuildBlueBubblesWebhookRouteArgs): HttpRoute;
|
|
97
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../../src/agents/channels/bluebubbles/webhook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAK3C,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,sFAAsF;AACtF,eAAO,MAAM,4BAA4B,QAAS,CAAC;AACnD,0FAA0F;AAC1F,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,sBAAsB;IACtC,mFAAmF;IACnF,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC7B;AAED,yEAAyE;AACzE,wBAAgB,4BAA4B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,sBAAsB,CAelG;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IAClC,QAAQ,IAAI,MAAM,CAAC;CACnB;AAED,mFAAmF;AACnF,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAgBlE;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAO5D;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,GAAG,OAAO,CAKV;AA6CD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAoBrH;AAED,4DAA4D;AAC5D,MAAM,WAAW,sBAAsB;IACtC,qEAAqE;IACrE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACxE;AAED,MAAM,WAAW,gCAAgC;IAChD,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,WAAW,EAAE,MAAM,sBAAsB,GAAG,IAAI,CAAC;IACjD,cAAc;IACd,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5D,wGAAwG;IACxG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gFAAgF;IAChF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,gCAAgC,GAAG,SAAS,CA2F9F"}
|