{"_id":"@apilium/mayros-bluebubbles","name":"@apilium/mayros-bluebubbles","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.1":{"name":"@apilium/mayros-bluebubbles","version":"0.1.1","description":"Mayros BlueBubbles channel plugin","license":"MIT","type":"module","publishConfig":{"access":"public"},"peerDependencies":{"@apilium/mayros":">=0.1.0"},"mayros":{"extensions":["./index.ts"],"channel":{"id":"bluebubbles","label":"BlueBubbles","selectionLabel":"BlueBubbles (macOS app)","detailLabel":"BlueBubbles","docsPath":"/channels/bluebubbles","docsLabel":"bluebubbles","blurb":"iMessage via the BlueBubbles mac app + REST API.","aliases":["bb"],"preferOver":["imessage"],"systemImage":"bubble.left.and.text.bubble.right","order":75},"install":{"npmSpec":"@apilium/mayros-bluebubbles","localPath":"extensions/bluebubbles","defaultChoice":"npm"}},"_id":"@apilium/mayros-bluebubbles@0.1.1","_integrity":"sha512-aGvYnLoUWZ59+l9h5MC73qWJ9lTHt67b1Xhl2ikK7onk8lO3PrK7W0Je+yVivdyPq7jZREG9rg1MQ4BaGAiiDw==","_resolved":"/private/var/folders/_y/k11qcrj94k32_yl6486p9bsc0000gn/T/c967310f6f6f7b53bdf3bcec7e0353f6/apilium-mayros-bluebubbles-0.1.1.tgz","_from":"file:apilium-mayros-bluebubbles-0.1.1.tgz","_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-aGvYnLoUWZ59+l9h5MC73qWJ9lTHt67b1Xhl2ikK7onk8lO3PrK7W0Je+yVivdyPq7jZREG9rg1MQ4BaGAiiDw==","shasum":"4cc01c4f2287f88a15ddd82583a9ec046c53ca34","tarball":"https://registry.npmjs.org/@apilium/mayros-bluebubbles/-/mayros-bluebubbles-0.1.1.tgz","fileCount":38,"unpackedSize":408000,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCID04eaWxxToEJaFmfkreath3mfo4ar3ytkSKWFYLwl/uAiAcQoqNm5/QSSdXwPqzhTFCOUbK9u0hwt9i9ncBx01a7Q=="}]},"_npmUser":{"name":"apilium-ai","email":"it@apilium.com"},"directories":{},"maintainers":[{"name":"apilium-ai","email":"it@apilium.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mayros-bluebubbles_0.1.1_1772217422165_0.9154070027186627"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-27T18:37:02.036Z","0.1.1":"2026-02-27T18:37:02.360Z","modified":"2026-02-27T18:37:02.646Z"},"maintainers":[{"name":"apilium-ai","email":"it@apilium.com"}],"description":"Mayros BlueBubbles channel plugin","license":"MIT","readme":"# BlueBubbles extension (developer reference)\n\nThis directory contains the **BlueBubbles external channel plugin** for Mayros.\n\nIf you’re looking for **how to use BlueBubbles as an agent/tool user**, see:\n\n- `skills/bluebubbles/SKILL.md`\n\n## Layout\n\n- Extension package: `extensions/bluebubbles/` (entry: `index.ts`).\n- Channel implementation: `extensions/bluebubbles/src/channel.ts`.\n- Webhook handling: `extensions/bluebubbles/src/monitor.ts` (register via `api.registerHttpHandler`).\n- REST helpers: `extensions/bluebubbles/src/send.ts` + `extensions/bluebubbles/src/probe.ts`.\n- Runtime bridge: `extensions/bluebubbles/src/runtime.ts` (set via `api.runtime`).\n- Catalog entry for onboarding: `src/channels/plugins/catalog.ts`.\n\n## Internal helpers (use these, not raw API calls)\n\n- `probeBlueBubbles` in `extensions/bluebubbles/src/probe.ts` for health checks.\n- `sendMessageBlueBubbles` in `extensions/bluebubbles/src/send.ts` for text delivery.\n- `resolveChatGuidForTarget` in `extensions/bluebubbles/src/send.ts` for chat lookup.\n- `sendBlueBubblesReaction` in `extensions/bluebubbles/src/reactions.ts` for tapbacks.\n- `sendBlueBubblesTyping` + `markBlueBubblesChatRead` in `extensions/bluebubbles/src/chat.ts`.\n- `downloadBlueBubblesAttachment` in `extensions/bluebubbles/src/attachments.ts` for inbound media.\n- `buildBlueBubblesApiUrl` + `blueBubblesFetchWithTimeout` in `extensions/bluebubbles/src/types.ts` for shared REST plumbing.\n\n## Webhooks\n\n- BlueBubbles posts JSON to the gateway HTTP server.\n- Normalize sender/chat IDs defensively (payloads vary by version).\n- Skip messages marked as from self.\n- Route into core reply pipeline via the plugin runtime (`api.runtime`) and `mayros/plugin-sdk` helpers.\n- For attachments/stickers, use `<media:...>` placeholders when text is empty and attach media paths via `MediaUrl(s)` in the inbound context.\n\n## Config (core)\n\n- `channels.bluebubbles.serverUrl` (base URL), `channels.bluebubbles.password`, `channels.bluebubbles.webhookPath`.\n- Action gating: `channels.bluebubbles.actions.reactions` (default true).\n\n## Message tool notes\n\n- **Reactions:** the `react` action requires a `target` (phone number or chat identifier) in addition to `messageId`.\n  Example:\n  `action=react target=+15551234567 messageId=ABC123 emoji=❤️`\n","readmeFilename":"README.md","_rev":"1-7491267f3352b2a8483869ae04da9306"}