@rubytech/create-maxy-code 0.1.578 → 0.1.580
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/package.json +1 -1
- package/payload/platform/lib/telegram-media/dist/index.d.ts +45 -0
- package/payload/platform/lib/telegram-media/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/telegram-media/dist/index.js +89 -0
- package/payload/platform/lib/telegram-media/dist/index.js.map +1 -0
- package/payload/platform/lib/telegram-media/src/__tests__/telegram-media.test.ts +104 -0
- package/payload/platform/lib/telegram-media/src/index.ts +102 -0
- package/payload/platform/lib/telegram-media/tsconfig.json +9 -0
- package/payload/platform/lib/telegram-media/vitest.config.ts +9 -0
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/PLUGIN.md +2 -2
- package/payload/platform/plugins/admin/hooks/__tests__/archive-ingest-surface-gate.test.sh +22 -0
- package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +34 -0
- package/payload/platform/plugins/admin/hooks/__tests__/quote-path-write-gate.test.sh +25 -0
- package/payload/platform/plugins/admin/hooks/archive-ingest-surface-gate.sh +11 -4
- package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +2 -2
- package/payload/platform/plugins/admin/hooks/quote-path-write-gate.sh +6 -3
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +9 -1
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +17 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-schema-shape.test.ts +23 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visit-status-write.test.ts +175 -3
- package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visits-scope.test.ts +101 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/schema.sql +35 -1
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visit-status.ts +73 -8
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visits.ts +59 -8
- package/payload/platform/plugins/docs/references/admin-ui.md +6 -0
- package/payload/platform/plugins/docs/references/troubleshooting.md +2 -0
- package/payload/platform/plugins/telegram/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/telegram/PLUGIN.md +23 -3
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js +99 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/api-census.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js +226 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js +143 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-store.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js +197 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.js +196 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/invoice-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.js +95 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.js +293 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js +130 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/schemas.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.js +119 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/thread-tool.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js +71 -66
- package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts +15 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js +27 -10
- package/payload/platform/plugins/telegram/mcp/dist/lib/account-write.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts +34 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js +106 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/api-census.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts +41 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js +120 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/card-store.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.d.ts +73 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.js +270 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts +34 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.js +134 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.d.ts +70 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.js +232 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/invoice.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.d.ts +42 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.js +92 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.d.ts +76 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.js +288 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts +250 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js +400 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/schemas.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.d.ts +38 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.js +120 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/vitest.config.ts +14 -0
- package/payload/platform/plugins/telegram/skills/build/SKILL.md +161 -21
- package/payload/platform/scripts/__tests__/hook-matcher-dispatch.test.sh +163 -0
- package/payload/platform/scripts/check-no-esm-require.mjs +6 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +6 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/webchat-channel/dist/server.js +4 -4
- package/payload/platform/services/webchat-channel/dist/server.js.map +1 -1
- package/payload/platform/templates/specialists/agents/personal-assistant.md +1 -1
- package/payload/server/public/activity.html +6 -6
- package/payload/server/public/agents.html +5 -5
- package/payload/server/public/assets/{AdminLoginScreens-CAZ3DSwA.js → AdminLoginScreens-Dxv5t1YY.js} +1 -1
- package/payload/server/public/assets/AdminLoginScreens-Dxv5t1YY.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-Dxv5t1YY.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-BMslfZxN.js +3 -0
- package/payload/server/public/assets/AdminShell-BMslfZxN.js.br +0 -0
- package/payload/server/public/assets/AdminShell-BMslfZxN.js.gz +0 -0
- package/payload/server/public/assets/{activity-BwPck2yT.js → activity-kQ3w70LJ.js} +1 -1
- package/payload/server/public/assets/activity-kQ3w70LJ.js.br +0 -0
- package/payload/server/public/assets/activity-kQ3w70LJ.js.gz +0 -0
- package/payload/server/public/assets/admin-DapcMKCG.js +1 -0
- package/payload/server/public/assets/admin-DapcMKCG.js.br +0 -0
- package/payload/server/public/assets/admin-DapcMKCG.js.gz +0 -0
- package/payload/server/public/assets/{agents-IQYaRvoh.js → agents-Cn_bZgnD.js} +1 -1
- package/payload/server/public/assets/agents-Cn_bZgnD.js.br +0 -0
- package/payload/server/public/assets/agents-Cn_bZgnD.js.gz +0 -0
- package/payload/server/public/assets/{browser-CPG8w8rQ.js → browser-BE-GDk5-.js} +1 -1
- package/payload/server/public/assets/browser-BE-GDk5-.js.br +0 -0
- package/payload/server/public/assets/browser-BE-GDk5-.js.gz +0 -0
- package/payload/server/public/assets/{calendar-CRwrgNdq.js → calendar-Di7BEHHN.js} +1 -1
- package/payload/server/public/assets/calendar-Di7BEHHN.js.br +0 -0
- package/payload/server/public/assets/calendar-Di7BEHHN.js.gz +0 -0
- package/payload/server/public/assets/chat-DLmikhie.js +1 -0
- package/payload/server/public/assets/chat-DLmikhie.js.br +1 -0
- package/payload/server/public/assets/chat-DLmikhie.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-Id9VAZAz.js +1 -0
- package/payload/server/public/assets/chevron-left-Id9VAZAz.js.br +0 -0
- package/payload/server/public/assets/clock-DKpWWJbJ.js +1 -0
- package/payload/server/public/assets/clock-DKpWWJbJ.js.br +0 -0
- package/payload/server/public/assets/{copy-JyiMTV0k.js → copy-nkxspu2J.js} +1 -1
- package/payload/server/public/assets/copy-nkxspu2J.js.br +0 -0
- package/payload/server/public/assets/copy-nkxspu2J.js.gz +0 -0
- package/payload/server/public/assets/data-C1_m9Xyf.js +1 -0
- package/payload/server/public/assets/data-C1_m9Xyf.js.br +0 -0
- package/payload/server/public/assets/data-C1_m9Xyf.js.gz +0 -0
- package/payload/server/public/assets/{field-B490-evJ.js → field-2rIXxGMt.js} +1 -1
- package/payload/server/public/assets/field-2rIXxGMt.js.br +0 -0
- package/payload/server/public/assets/field-2rIXxGMt.js.gz +0 -0
- package/payload/server/public/assets/{file-text-cnHv9ZS6.js → file-text-CdSqrscg.js} +1 -1
- package/payload/server/public/assets/file-text-CdSqrscg.js.br +0 -0
- package/payload/server/public/assets/file-text-CdSqrscg.js.gz +0 -0
- package/payload/server/public/assets/{graph-lFwEUDSH.js → graph-BfBHHXaC.js} +1 -1
- package/payload/server/public/assets/graph-BfBHHXaC.js.br +0 -0
- package/payload/server/public/assets/graph-BfBHHXaC.js.gz +0 -0
- package/payload/server/public/assets/{graph-labels-C6qUA0vO.js → graph-labels-CHW2aBke.js} +1 -1
- package/payload/server/public/assets/graph-labels-CHW2aBke.js.br +0 -0
- package/payload/server/public/assets/graph-labels-CHW2aBke.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-D43jgaWP.css +1 -0
- package/payload/server/public/assets/jsx-runtime-D43jgaWP.css.br +0 -0
- package/payload/server/public/assets/jsx-runtime-D43jgaWP.css.gz +0 -0
- package/payload/server/public/assets/{operator-BdoEy5mh.js → operator-BOiL8sxx.js} +1 -1
- package/payload/server/public/assets/operator-BOiL8sxx.js.br +0 -0
- package/payload/server/public/assets/operator-BOiL8sxx.js.gz +0 -0
- package/payload/server/public/assets/page-CZ6tyH8t.js +1 -0
- package/payload/server/public/assets/page-CZ6tyH8t.js.br +0 -0
- package/payload/server/public/assets/page-CZ6tyH8t.js.gz +0 -0
- package/payload/server/public/assets/{page-DMrnnXNA.js → page-Cd36Y0h6.js} +1 -1
- package/payload/server/public/assets/page-Cd36Y0h6.js.br +0 -0
- package/payload/server/public/assets/page-Cd36Y0h6.js.gz +0 -0
- package/payload/server/public/assets/play-7LTxCuLX.js +1 -0
- package/payload/server/public/assets/play-7LTxCuLX.js.br +0 -0
- package/payload/server/public/assets/play-7LTxCuLX.js.gz +0 -0
- package/payload/server/public/assets/{public-B-X1Cxfw.js → public-CVBav4FQ.js} +1 -1
- package/payload/server/public/assets/public-CVBav4FQ.js.br +0 -0
- package/payload/server/public/assets/public-CVBav4FQ.js.gz +0 -0
- package/payload/server/public/assets/{rotate-ccw-DVFvQAHG.js → rotate-ccw-J9f-GWjm.js} +1 -1
- package/payload/server/public/assets/rotate-ccw-J9f-GWjm.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-J9f-GWjm.js.gz +0 -0
- package/payload/server/public/assets/{routines-CgkkGJaS.js → routines-C1AB-3FR.js} +2 -2
- package/payload/server/public/assets/routines-C1AB-3FR.js.br +0 -0
- package/payload/server/public/assets/routines-C1AB-3FR.js.gz +0 -0
- package/payload/server/public/assets/{skills-CW7gVcaG.js → skills-C4EfNKEx.js} +1 -1
- package/payload/server/public/assets/skills-C4EfNKEx.js.br +0 -0
- package/payload/server/public/assets/skills-C4EfNKEx.js.gz +0 -0
- package/payload/server/public/assets/{tasks-Ddjp0Rwh.js → tasks-DszD3aZl.js} +2 -2
- package/payload/server/public/assets/tasks-DszD3aZl.js.br +0 -0
- package/payload/server/public/assets/tasks-DszD3aZl.js.gz +0 -0
- package/payload/server/public/assets/{triangle-alert-DUrUutX4.js → triangle-alert-B5WAyAkC.js} +1 -1
- package/payload/server/public/assets/triangle-alert-B5WAyAkC.js.br +4 -0
- package/payload/server/public/assets/triangle-alert-B5WAyAkC.js.gz +0 -0
- package/payload/server/public/assets/{useCopyFeedback-ClVINDrQ.js → useCopyFeedback-B2nuNNJw.js} +1 -1
- package/payload/server/public/assets/useCopyFeedback-B2nuNNJw.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-B2nuNNJw.js.gz +0 -0
- package/payload/server/public/assets/{useMediaQuery-BUFkZYRs.js → useMediaQuery-DUPJPHQt.js} +2 -2
- package/payload/server/public/assets/useMediaQuery-DUPJPHQt.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-DUPJPHQt.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js +2 -0
- package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BEgr0nHN.js.gz +0 -0
- package/payload/server/public/assets/{wrench-BW28s_d0.js → wrench-DZJZm17j.js} +1 -1
- package/payload/server/public/assets/wrench-DZJZm17j.js.br +0 -0
- package/payload/server/public/assets/wrench-DZJZm17j.js.gz +0 -0
- package/payload/server/public/browser.html +5 -5
- package/payload/server/public/calendar.html +8 -8
- package/payload/server/public/chat.html +14 -14
- package/payload/server/public/data.html +12 -12
- package/payload/server/public/field.html +3 -3
- package/payload/server/public/graph.html +10 -10
- package/payload/server/public/index.html +14 -14
- package/payload/server/public/operator.html +16 -16
- package/payload/server/public/public.html +14 -14
- package/payload/server/public/routines.html +8 -8
- package/payload/server/public/skills.html +6 -6
- package/payload/server/public/tasks.html +7 -7
- package/payload/server/server.js +1571 -891
- package/payload/server/public/assets/AdminLoginScreens-CAZ3DSwA.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-CAZ3DSwA.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-BLs5v0qF.js +0 -3
- package/payload/server/public/assets/AdminShell-BLs5v0qF.js.br +0 -0
- package/payload/server/public/assets/AdminShell-BLs5v0qF.js.gz +0 -0
- package/payload/server/public/assets/activity-BwPck2yT.js.br +0 -0
- package/payload/server/public/assets/activity-BwPck2yT.js.gz +0 -0
- package/payload/server/public/assets/admin-DjtOoabA.js +0 -1
- package/payload/server/public/assets/admin-DjtOoabA.js.br +0 -0
- package/payload/server/public/assets/admin-DjtOoabA.js.gz +0 -0
- package/payload/server/public/assets/agents-IQYaRvoh.js.br +0 -0
- package/payload/server/public/assets/agents-IQYaRvoh.js.gz +0 -0
- package/payload/server/public/assets/browser-CPG8w8rQ.js.br +0 -0
- package/payload/server/public/assets/browser-CPG8w8rQ.js.gz +0 -0
- package/payload/server/public/assets/calendar-CRwrgNdq.js.br +0 -0
- package/payload/server/public/assets/calendar-CRwrgNdq.js.gz +0 -0
- package/payload/server/public/assets/chat-B7yZ4KLl.js +0 -1
- package/payload/server/public/assets/chat-B7yZ4KLl.js.br +0 -3
- package/payload/server/public/assets/chat-B7yZ4KLl.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-BzKUQqLy.js +0 -1
- package/payload/server/public/assets/chevron-left-BzKUQqLy.js.br +0 -0
- package/payload/server/public/assets/clock-BafWFNGo.js +0 -1
- package/payload/server/public/assets/clock-BafWFNGo.js.br +0 -0
- package/payload/server/public/assets/copy-JyiMTV0k.js.br +0 -0
- package/payload/server/public/assets/copy-JyiMTV0k.js.gz +0 -0
- package/payload/server/public/assets/data-DHtGCVrl.js +0 -1
- package/payload/server/public/assets/data-DHtGCVrl.js.br +0 -0
- package/payload/server/public/assets/data-DHtGCVrl.js.gz +0 -0
- package/payload/server/public/assets/field-B490-evJ.js.br +0 -0
- package/payload/server/public/assets/field-B490-evJ.js.gz +0 -0
- package/payload/server/public/assets/file-text-cnHv9ZS6.js.br +0 -0
- package/payload/server/public/assets/file-text-cnHv9ZS6.js.gz +0 -0
- package/payload/server/public/assets/graph-lFwEUDSH.js.br +0 -0
- package/payload/server/public/assets/graph-lFwEUDSH.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-C6qUA0vO.js.br +0 -0
- package/payload/server/public/assets/graph-labels-C6qUA0vO.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-ChVh0xOm.css +0 -1
- package/payload/server/public/assets/jsx-runtime-ChVh0xOm.css.br +0 -0
- package/payload/server/public/assets/jsx-runtime-ChVh0xOm.css.gz +0 -0
- package/payload/server/public/assets/operator-BdoEy5mh.js.br +0 -0
- package/payload/server/public/assets/operator-BdoEy5mh.js.gz +0 -0
- package/payload/server/public/assets/page-DMrnnXNA.js.br +0 -0
- package/payload/server/public/assets/page-DMrnnXNA.js.gz +0 -0
- package/payload/server/public/assets/page-DeMikGYL.js +0 -1
- package/payload/server/public/assets/page-DeMikGYL.js.br +0 -0
- package/payload/server/public/assets/page-DeMikGYL.js.gz +0 -0
- package/payload/server/public/assets/play-D6OAQVJ_.js +0 -1
- package/payload/server/public/assets/play-D6OAQVJ_.js.br +0 -0
- package/payload/server/public/assets/play-D6OAQVJ_.js.gz +0 -0
- package/payload/server/public/assets/public-B-X1Cxfw.js.br +0 -0
- package/payload/server/public/assets/public-B-X1Cxfw.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-DVFvQAHG.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-DVFvQAHG.js.gz +0 -0
- package/payload/server/public/assets/routines-CgkkGJaS.js.br +0 -0
- package/payload/server/public/assets/routines-CgkkGJaS.js.gz +0 -0
- package/payload/server/public/assets/skills-CW7gVcaG.js.br +0 -0
- package/payload/server/public/assets/skills-CW7gVcaG.js.gz +0 -0
- package/payload/server/public/assets/tasks-Ddjp0Rwh.js.br +0 -0
- package/payload/server/public/assets/tasks-Ddjp0Rwh.js.gz +0 -0
- package/payload/server/public/assets/triangle-alert-DUrUutX4.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-DUrUutX4.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-ClVINDrQ.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-ClVINDrQ.js.gz +0 -0
- package/payload/server/public/assets/useMediaQuery-BUFkZYRs.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-BUFkZYRs.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DnyqQFet.js +0 -2
- package/payload/server/public/assets/useVoiceRecorder-DnyqQFet.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-DnyqQFet.js.gz +0 -0
- package/payload/server/public/assets/wrench-BW28s_d0.js.br +0 -0
- package/payload/server/public/assets/wrench-BW28s_d0.js.gz +0 -0
- /package/payload/server/public/assets/{jsx-runtime-YcUntiud.js → jsx-runtime-Cjug_Cyb.js} +0 -0
- /package/payload/server/public/assets/{jsx-runtime-YcUntiud.js.br → jsx-runtime-Cjug_Cyb.js.br} +0 -0
- /package/payload/server/public/assets/{jsx-runtime-YcUntiud.js.gz → jsx-runtime-Cjug_Cyb.js.gz} +0 -0
package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visits.ts
CHANGED
|
@@ -3,14 +3,18 @@ import { readSessionCookie, resolveSession } from './_lib/session'
|
|
|
3
3
|
import { q } from './_lib/log'
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* One published
|
|
6
|
+
* One published row: ONE VISIT, ONE ATTENDING WORKER (Task 2551).
|
|
7
|
+
*
|
|
8
|
+
* The `visits` table is keyed on the attendance, so a visit two workers share is
|
|
9
|
+
* two rows here. `processVisits` folds them into the `VisitRow` below; nothing
|
|
10
|
+
* outside this file sees this shape.
|
|
7
11
|
*
|
|
8
12
|
* The ontology's own fields (`schema-construction.md`) and the portal person the
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
13
|
+
* row is assigned to, and nothing else. A job sheet's contents are the account's
|
|
14
|
+
* to design, and they are files, which the Task 1910 exchange already carries —
|
|
15
|
+
* so nothing of theirs belongs in this shape.
|
|
12
16
|
*/
|
|
13
|
-
export interface
|
|
17
|
+
export interface VisitReadRow {
|
|
14
18
|
visitId: string
|
|
15
19
|
ownerId: string
|
|
16
20
|
jobId: string
|
|
@@ -38,6 +42,23 @@ export interface VisitRow {
|
|
|
38
42
|
signatures: number
|
|
39
43
|
}
|
|
40
44
|
|
|
45
|
+
/**
|
|
46
|
+
* One visit, as an account's own page renders it: one card naming every worker
|
|
47
|
+
* on it (Task 2551).
|
|
48
|
+
*
|
|
49
|
+
* `owners` is who is attending. It holds one id for an ordinary visit, two for a
|
|
50
|
+
* visit two workers share, and one empty string for a visit whose engineer
|
|
51
|
+
* carries no `portalOwnerId` — the unbound sentinel `visits.ownerId` has always
|
|
52
|
+
* used.
|
|
53
|
+
*
|
|
54
|
+
* `ownerId` is `owners[0]` and is DERIVED, not authoritative. It stays because
|
|
55
|
+
* the planner groups cards onto worker rows by it and that page is not this
|
|
56
|
+
* task's to change; `owners` is what says who is actually on the job.
|
|
57
|
+
*/
|
|
58
|
+
export interface VisitRow extends VisitReadRow {
|
|
59
|
+
owners: string[]
|
|
60
|
+
}
|
|
61
|
+
|
|
41
62
|
/**
|
|
42
63
|
* One candidate for one unallocated visit (Task 2511).
|
|
43
64
|
*
|
|
@@ -117,6 +138,33 @@ function parseJson<T>(raw: string, fallback: T): T {
|
|
|
117
138
|
}
|
|
118
139
|
}
|
|
119
140
|
|
|
141
|
+
/**
|
|
142
|
+
* The attendance rows for one visit, as one card (Task 2551).
|
|
143
|
+
*
|
|
144
|
+
* CALLED AFTER THE SQL FILTER, NEVER BEFORE. An own-scoped person's read already
|
|
145
|
+
* returned only their own attendance, so their card names them and nobody else.
|
|
146
|
+
* Folding first would hand them the colleague names the file drop deliberately
|
|
147
|
+
* withholds, which is the rule `processVisits` states below.
|
|
148
|
+
*
|
|
149
|
+
* The order of `owners` is the read's `ORDER BY`, so the same set always renders
|
|
150
|
+
* the same way rather than in whatever order D1 happened to answer in.
|
|
151
|
+
*/
|
|
152
|
+
export function foldOwners(rows: readonly VisitReadRow[]): VisitRow[] {
|
|
153
|
+
const out: VisitRow[] = []
|
|
154
|
+
const at = new Map<string, VisitRow>()
|
|
155
|
+
for (const r of rows) {
|
|
156
|
+
const held = at.get(r.visitId)
|
|
157
|
+
if (held) {
|
|
158
|
+
if (!held.owners.includes(r.ownerId)) held.owners.push(r.ownerId)
|
|
159
|
+
continue
|
|
160
|
+
}
|
|
161
|
+
const card: VisitRow = { ...r, owners: [r.ownerId] }
|
|
162
|
+
at.set(r.visitId, card)
|
|
163
|
+
out.push(card)
|
|
164
|
+
}
|
|
165
|
+
return out
|
|
166
|
+
}
|
|
167
|
+
|
|
120
168
|
/**
|
|
121
169
|
* The visits a signed-in person may read.
|
|
122
170
|
*
|
|
@@ -160,13 +208,16 @@ export async function processVisits(
|
|
|
160
208
|
ON s.accountId = v.accountId AND s.currentGeneration = v.generation
|
|
161
209
|
WHERE v.accountId = ?` +
|
|
162
210
|
(scoped ? ' AND v.ownerId = ?' : '') +
|
|
163
|
-
|
|
211
|
+
// ownerId joins the ORDER BY because the table is keyed on the attendance
|
|
212
|
+
// (Task 2551): the rows for one visit arrive together and in a fixed order,
|
|
213
|
+
// so the worker list on a shared card does not vary between reads.
|
|
214
|
+
' ORDER BY v.startDate ASC, v.visitId ASC, v.ownerId ASC'
|
|
164
215
|
const stmt = env.DB.prepare(sql)
|
|
165
216
|
const bound = scoped
|
|
166
217
|
? stmt.bind(env.PORTAL_ACCOUNT_ID, session.ownerId)
|
|
167
218
|
: stmt.bind(env.PORTAL_ACCOUNT_ID)
|
|
168
|
-
const rows = await bound.all<
|
|
169
|
-
const visits = rows.results ?? []
|
|
219
|
+
const rows = await bound.all<VisitReadRow>()
|
|
220
|
+
const visits = foldOwners(rows.results ?? [])
|
|
170
221
|
|
|
171
222
|
// THE SAME TWO FILTERS, and the owner one for the same reason: an own-scoped
|
|
172
223
|
// person may see their own row and no other, or this page becomes a way to
|
|
@@ -1301,6 +1301,12 @@ authoritative. This section names the surfaces and what backs each.
|
|
|
1301
1301
|
> - **Dashboard home** renders on `/` (a greeting, stat cards, a Live-now column,
|
|
1302
1302
|
> a Recent artefacts card, and a Channels column), consuming existing endpoints
|
|
1303
1303
|
> only.
|
|
1304
|
+
> - **Channels card.** One card holds every conversation, whatever channel it
|
|
1305
|
+
> came in on, newest first. Each row starts with a small icon saying which
|
|
1306
|
+
> channel it is: the WhatsApp mark, the Telegram mark, or a globe for a web
|
|
1307
|
+
> chat visitor. The newest eight are shown, and a "Show N more" control below
|
|
1308
|
+
> them reveals the rest. A conversation with no message time yet sits at the
|
|
1309
|
+
> bottom.
|
|
1304
1310
|
> - **Channels card rows.** A WhatsApp row shows a profile picture,
|
|
1305
1311
|
> the conversation's name, its last message, and the time, matching the layout
|
|
1306
1312
|
> of the WhatsApp client. The name is the one WhatsApp itself holds: a group
|
|
@@ -156,6 +156,8 @@ To deliberately disconnect the wrong account, use the header menu's **Disconnect
|
|
|
156
156
|
2. `outcome=fail-token` or `invalid_grant` lines mean Anthropic rejected the refresh token itself (revoked or expired beyond the rotation window). The brand needs a fresh `claude /login`. Pre-576 the most common cause was the admin server and a spawned `claude` racing to rotate the same single-use refresh token; that race is now serialised by the file lock at `~/.${brand}/.claude/.credentials.json.lock` and a re-read after the lock skips redundant refreshes.
|
|
157
157
|
3. `grep '\[auth-health\]' ~/.${brand}/logs/server.log | tail -n 5` — the heartbeat fires every five minutes. `status=dead expiresIn=...` means the refresh token is gone; only a re-login fixes it. `status=ok` heartbeats with no spawns in between mean the credentials file is healthy and the failure lives elsewhere.
|
|
158
158
|
4. The spawn-failure surface now carries `reason=auth-refresh-failed` (with `authStatus` in the JSON body) instead of generic `pid-file-timeout` whenever the credentials file is in `dead` or `expired` state at the moment of failure — visible in `grep '\[spawn-failed\]'` on server.log.
|
|
159
|
+
5. `grep -F '[claude-auth] op=cred-write' ~/.${brand}/logs/server.log` — one line per write to the credentials file, naming the call site (`site=refresh` for a token refresh, `site=login-writeback` for the macOS Keychain copy after `claude auth login`) and the refresh-token length that actually landed (`refreshTokenLen=`). A `refreshTokenLen=0` line names the write that emptied the token. `op=cred-write-refused reason=blank-refresh-token` means a write tried to blank a stored token and was stopped; the access token still updated, the refresh token did not.
|
|
160
|
+
6. `grep -F 'op=cred-refresh-census' ~/.${brand}/logs/server.log | tail -1` — the hourly cross-brand sweep, which reads every brand on the host because a blanked token stays invisible until that brand's access token expires up to eight hours later. `result=blank-tokens` names each affected brand in its `detail=` field (`property-administrators:0` is an empty token, `:unreadable` is a file that will not parse). `result=no-brands-found` means the sweep measured nothing at all, which is not the same as a clean result and is itself worth investigating.
|
|
159
161
|
|
|
160
162
|
**A WhatsApp message you can see on your phone never appears in the app.** First check whether it was ever stored, rather than assuming it routed elsewhere: ask {{productName}} for the most recent ingest reconcile, or `grep '\[wa-ingest-audit\]' ~/.${brand}/logs/server.log | tail -1`. A healthy line reads `op=reconcile … unpersisted=0 inFlight=0 guard=installed`. If `unpersisted` is above zero, the `ids=` field names the exact message ids that arrived at the wire and were never written to the store — those messages are genuinely lost to the platform, not hidden in another workspace or sub-account, and they cannot be re-fetched because WhatsApp only delivers an acked message once. Forward the message from your phone to get it back in; it re-enters as a new message through the normal path.
|
|
161
163
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "telegram",
|
|
3
|
-
"description": "Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent.
|
|
3
|
+
"description": "Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent. Ships typed tools for cards, inbound files, forum threads, structured asks, outbound media and payments, reaches every remaining Bot API method through telegram-api, and carries a build skill for authoring cards, in-place edits and Mini App surfaces.",
|
|
4
4
|
"version": "0.1.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Rubytech LLC"
|
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: telegram
|
|
3
3
|
surface: platform
|
|
4
|
-
description: Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent.
|
|
4
|
+
description: Guide users through connecting Telegram bots — creating a bot via BotFather, finding user IDs, and registering any number of bots, each with its own role, access policy and agent. Ships typed tools for cards, inbound files, forum threads, structured asks, outbound media and payments, reaches every remaining Bot API method through telegram-api, and carries a build skill for authoring cards, in-place edits and Mini App surfaces.
|
|
5
5
|
metadata: {"platform":{"optional":false}}
|
|
6
6
|
tools:
|
|
7
|
-
- name:
|
|
7
|
+
- name: telegram-card
|
|
8
8
|
publicAllowlist: false
|
|
9
|
-
adminAllowlist:
|
|
9
|
+
adminAllowlist: true
|
|
10
|
+
riskClass: external
|
|
11
|
+
- name: telegram-media-fetch
|
|
12
|
+
publicAllowlist: false
|
|
13
|
+
adminAllowlist: true
|
|
14
|
+
riskClass: external
|
|
15
|
+
- name: telegram-thread
|
|
16
|
+
publicAllowlist: false
|
|
17
|
+
adminAllowlist: true
|
|
18
|
+
riskClass: external
|
|
19
|
+
- name: telegram-ask
|
|
20
|
+
publicAllowlist: false
|
|
21
|
+
adminAllowlist: true
|
|
22
|
+
riskClass: external
|
|
23
|
+
- name: telegram-media-send
|
|
24
|
+
publicAllowlist: false
|
|
25
|
+
adminAllowlist: true
|
|
26
|
+
riskClass: external
|
|
27
|
+
- name: telegram-invoice
|
|
28
|
+
publicAllowlist: false
|
|
29
|
+
adminAllowlist: true
|
|
10
30
|
riskClass: external
|
|
11
31
|
- name: message-history
|
|
12
32
|
publicAllowlist: false
|
|
@@ -2,8 +2,11 @@ import { describe, expect, it } from "vitest";
|
|
|
2
2
|
import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { join, resolve } from "node:path";
|
|
5
|
-
import { bootCensusLine, diffMethods, extractMethodNames } from "../lib/api-census.js";
|
|
5
|
+
import { bootCensusLine, diffMethods, extractMethodNames, OWNED_METHODS, tallyPassthrough, passthroughCensusLine, } from "../lib/api-census.js";
|
|
6
6
|
import { BOT_API_METHODS } from "../lib/api-methods.js";
|
|
7
|
+
import { ASK_METHOD } from "../tools/ask.js";
|
|
8
|
+
import { MEDIA_SEND_METHOD } from "../tools/media-send.js";
|
|
9
|
+
import { INVOICE_METHOD } from "../tools/invoice.js";
|
|
7
10
|
function stubAccount(bots) {
|
|
8
11
|
const root = mkdtempSync(join(tmpdir(), "tg-census-"));
|
|
9
12
|
const platformRoot = join(root, "platform");
|
|
@@ -74,4 +77,99 @@ describe("extractMethodNames", () => {
|
|
|
74
77
|
expect(diffMethods(extractMethodNames(page))).toEqual({ missing: [], added: [] });
|
|
75
78
|
});
|
|
76
79
|
});
|
|
80
|
+
describe("OWNED_METHODS", () => {
|
|
81
|
+
it("names the tool that owns each method the three shipped tools absorbed", () => {
|
|
82
|
+
expect(OWNED_METHODS.sendMessage).toBe("telegram-card");
|
|
83
|
+
expect(OWNED_METHODS.editMessageText).toBe("telegram-card");
|
|
84
|
+
expect(OWNED_METHODS.editMessageReplyMarkup).toBe("telegram-card");
|
|
85
|
+
expect(OWNED_METHODS.answerCallbackQuery).toBe("telegram-card");
|
|
86
|
+
expect(OWNED_METHODS.getFile).toBe("telegram-media-fetch");
|
|
87
|
+
expect(OWNED_METHODS.createForumTopic).toBe("telegram-thread");
|
|
88
|
+
expect(OWNED_METHODS.unpinAllForumTopicMessages).toBe("telegram-thread");
|
|
89
|
+
});
|
|
90
|
+
it("names every method the Task 2594 tools absorb", () => {
|
|
91
|
+
for (const m of Object.values(ASK_METHOD))
|
|
92
|
+
expect(OWNED_METHODS[m]).toBe("telegram-ask");
|
|
93
|
+
for (const m of Object.values(MEDIA_SEND_METHOD)) {
|
|
94
|
+
expect(OWNED_METHODS[m]).toBe("telegram-media-send");
|
|
95
|
+
}
|
|
96
|
+
for (const m of Object.values(INVOICE_METHOD)) {
|
|
97
|
+
expect(OWNED_METHODS[m]).toBe("telegram-invoice");
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
it("claims nothing no tool implements", () => {
|
|
101
|
+
// The buckets that stay on telegram-api by design: membership,
|
|
102
|
+
// business-account, bot-self-config, org-verification, chat-cosmetic.
|
|
103
|
+
expect(OWNED_METHODS.pinChatMessage).toBeUndefined();
|
|
104
|
+
expect(OWNED_METHODS.setMyCommands).toBeUndefined();
|
|
105
|
+
expect(OWNED_METHODS.sendSticker).toBeUndefined();
|
|
106
|
+
});
|
|
107
|
+
it("counts a passthrough call to a newly owned method as owned, not as healthy passthrough", () => {
|
|
108
|
+
const t = tallyPassthrough([
|
|
109
|
+
"[telegram-api] op=call callId=aa method=sendPhoto listed=true files=1",
|
|
110
|
+
"[telegram-api] op=call callId=bb method=sendInvoice listed=true files=0",
|
|
111
|
+
"[telegram-api] op=call callId=cc method=pinChatMessage listed=true files=0",
|
|
112
|
+
]);
|
|
113
|
+
expect(t.owned).toEqual({ sendPhoto: 1, sendInvoice: 1 });
|
|
114
|
+
expect(t.passthrough).toEqual({ pinChatMessage: 1 });
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
describe("tallyPassthrough", () => {
|
|
118
|
+
const call = (m) => `[telegram-api] op=call callId=aa method=${m} listed=true files=0`;
|
|
119
|
+
it("splits owned from passthrough by method name", () => {
|
|
120
|
+
const out = tallyPassthrough([
|
|
121
|
+
call("sendMessage"),
|
|
122
|
+
call("pinChatMessage"),
|
|
123
|
+
call("pinChatMessage"),
|
|
124
|
+
]);
|
|
125
|
+
expect(out.owned).toEqual({ sendMessage: 1 });
|
|
126
|
+
expect(out.passthrough).toEqual({ pinChatMessage: 2 });
|
|
127
|
+
});
|
|
128
|
+
it("ignores lines that are not a telegram-api op=call", () => {
|
|
129
|
+
const out = tallyPassthrough([
|
|
130
|
+
"[telegram-api] op=result callId=aa method=sendMessage ok=true",
|
|
131
|
+
"[telegram-tools] op=call tool=telegram-card method=sendMessage callId=bb botId=1",
|
|
132
|
+
"unrelated log line",
|
|
133
|
+
]);
|
|
134
|
+
expect(out.owned).toEqual({});
|
|
135
|
+
expect(out.passthrough).toEqual({});
|
|
136
|
+
});
|
|
137
|
+
it("counts nothing from an empty input, which is the not-measuring state", () => {
|
|
138
|
+
expect(tallyPassthrough([])).toEqual({ owned: {}, passthrough: {} });
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe("passthroughCensusLine", () => {
|
|
142
|
+
it("reports owned rising when an owned method goes through the passthrough", () => {
|
|
143
|
+
const dir = mkdtempSync(join(tmpdir(), "logs-"));
|
|
144
|
+
writeFileSync(join(dir, "mcp-admin-s1.log"), "[telegram-api] op=call callId=aa method=pinChatMessage listed=true files=0\n", "utf-8");
|
|
145
|
+
expect(passthroughCensusLine(dir)).toContain("owned=0 passthrough=1");
|
|
146
|
+
writeFileSync(join(dir, "mcp-admin-s2.log"), "[telegram-api] op=call callId=bb method=sendMessage listed=true files=0\n", "utf-8");
|
|
147
|
+
const risen = passthroughCensusLine(dir);
|
|
148
|
+
expect(risen).toContain("owned=1 passthrough=1");
|
|
149
|
+
expect(risen).toContain("sendMessage:1");
|
|
150
|
+
});
|
|
151
|
+
it("reports owned rising on a newly owned method, then falling to zero", () => {
|
|
152
|
+
// owned=0 is also what a dead counter prints, so a zero on its own proves
|
|
153
|
+
// nothing. The pair is the assertion: the same function must report 1 for a
|
|
154
|
+
// log that holds a sendPoll call and 0 for one that does not.
|
|
155
|
+
const risen = mkdtempSync(join(tmpdir(), "logs-"));
|
|
156
|
+
writeFileSync(join(risen, "mcp-admin-s1.log"), "[telegram-api] op=call callId=aa method=sendPoll listed=true files=0\n" +
|
|
157
|
+
"[telegram-api] op=call callId=bb method=pinChatMessage listed=true files=0\n", "utf-8");
|
|
158
|
+
const line = passthroughCensusLine(risen);
|
|
159
|
+
expect(line).toContain("owned=1 passthrough=1");
|
|
160
|
+
expect(line).toContain("sendPoll:1");
|
|
161
|
+
const quiet = mkdtempSync(join(tmpdir(), "logs-"));
|
|
162
|
+
writeFileSync(join(quiet, "mcp-admin-s1.log"), "[telegram-api] op=call callId=aa method=pinChatMessage listed=true files=0\n", "utf-8");
|
|
163
|
+
expect(passthroughCensusLine(quiet)).toContain("owned=0 passthrough=1");
|
|
164
|
+
});
|
|
165
|
+
it("reports zeros rather than throwing when LOG_DIR is absent", () => {
|
|
166
|
+
expect(passthroughCensusLine(undefined)).toContain("owned=0 passthrough=0");
|
|
167
|
+
expect(passthroughCensusLine("/no/such/dir")).toContain("owned=0 passthrough=0");
|
|
168
|
+
});
|
|
169
|
+
it("skips rotated .gz files, which it cannot read as text", () => {
|
|
170
|
+
const dir = mkdtempSync(join(tmpdir(), "logs-"));
|
|
171
|
+
writeFileSync(join(dir, "mcp-admin-s1.log.gz"), Buffer.from([0x1f, 0x8b, 0x08]));
|
|
172
|
+
expect(passthroughCensusLine(dir)).toContain("owned=0 passthrough=0");
|
|
173
|
+
});
|
|
174
|
+
});
|
|
77
175
|
//# sourceMappingURL=api-census.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-census.test.js","sourceRoot":"","sources":["../../src/__tests__/api-census.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"api-census.test.js","sourceRoot":"","sources":["../../src/__tests__/api-census.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-tool.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ask-tool.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { describe, expect, it, beforeEach } from "vitest";
|
|
2
|
+
import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { telegramAsk, ASK_METHOD } from "../tools/ask.js";
|
|
6
|
+
const ACC = "acc-1";
|
|
7
|
+
const BOT = "111";
|
|
8
|
+
let platformRoot;
|
|
9
|
+
let lines;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
const root = mkdtempSync(join(tmpdir(), "brand-"));
|
|
12
|
+
mkdirSync(join(root, "platform"), { recursive: true });
|
|
13
|
+
const dir = join(root, "data", "accounts", ACC);
|
|
14
|
+
mkdirSync(dir, { recursive: true });
|
|
15
|
+
writeFileSync(join(dir, "account.json"), JSON.stringify({ telegram: { bots: [{ id: BOT, role: "admin", token: `${BOT}:SECRET` }] } }), "utf-8");
|
|
16
|
+
platformRoot = join(root, "platform");
|
|
17
|
+
lines = [];
|
|
18
|
+
});
|
|
19
|
+
function recorder(reply) {
|
|
20
|
+
const calls = [];
|
|
21
|
+
const fetchImpl = (async (url, init) => {
|
|
22
|
+
calls.push({
|
|
23
|
+
method: String(url).split("/").pop() ?? "",
|
|
24
|
+
body: JSON.parse(String(init.body)),
|
|
25
|
+
});
|
|
26
|
+
return new Response(JSON.stringify(reply));
|
|
27
|
+
});
|
|
28
|
+
return { calls, fetchImpl };
|
|
29
|
+
}
|
|
30
|
+
function deps(fetchImpl) {
|
|
31
|
+
return {
|
|
32
|
+
platformRoot,
|
|
33
|
+
accountId: ACC,
|
|
34
|
+
callId: "cafe",
|
|
35
|
+
log: (l) => lines.push(l),
|
|
36
|
+
fetchImpl,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
describe("ASK_METHOD", () => {
|
|
40
|
+
it("maps every kind to its Bot API method name", () => {
|
|
41
|
+
expect(ASK_METHOD).toEqual({
|
|
42
|
+
poll: "sendPoll",
|
|
43
|
+
checklist: "sendChecklist",
|
|
44
|
+
location: "sendLocation",
|
|
45
|
+
venue: "sendVenue",
|
|
46
|
+
contact: "sendContact",
|
|
47
|
+
dice: "sendDice",
|
|
48
|
+
stopPoll: "stopPoll",
|
|
49
|
+
editChecklist: "editMessageChecklist",
|
|
50
|
+
editLiveLocation: "editMessageLiveLocation",
|
|
51
|
+
stopLiveLocation: "stopMessageLiveLocation",
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe("telegramAsk", () => {
|
|
56
|
+
it("sends a poll with options as InputPollOption objects", async () => {
|
|
57
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 5 } });
|
|
58
|
+
const out = await telegramAsk({ botId: BOT, chatId: -100123, kind: "poll", question: "Which slot?", options: ["9am", "2pm"] }, deps(fetchImpl));
|
|
59
|
+
expect(out.isError).toBe(false);
|
|
60
|
+
expect(calls[0]?.method).toBe("sendPoll");
|
|
61
|
+
expect(calls[0]?.body).toEqual({
|
|
62
|
+
chat_id: -100123,
|
|
63
|
+
question: "Which slot?",
|
|
64
|
+
options: [{ text: "9am" }, { text: "2pm" }],
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
it("passes the quiz optionals with the Bot API's own names", async () => {
|
|
68
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 1 } });
|
|
69
|
+
await telegramAsk({
|
|
70
|
+
botId: BOT,
|
|
71
|
+
chatId: 1,
|
|
72
|
+
kind: "poll",
|
|
73
|
+
question: "q",
|
|
74
|
+
options: ["a", "b"],
|
|
75
|
+
pollType: "quiz",
|
|
76
|
+
correctOptionIds: [1],
|
|
77
|
+
isAnonymous: false,
|
|
78
|
+
openPeriod: 300,
|
|
79
|
+
}, deps(fetchImpl));
|
|
80
|
+
expect(calls[0]?.body).toMatchObject({
|
|
81
|
+
type: "quiz",
|
|
82
|
+
correct_option_ids: [1],
|
|
83
|
+
is_anonymous: false,
|
|
84
|
+
open_period: 300,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
it("refuses a poll with no question, before any network call", async () => {
|
|
88
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: {} });
|
|
89
|
+
const out = await telegramAsk({ botId: BOT, chatId: 1, kind: "poll", options: ["a"] }, deps(fetchImpl));
|
|
90
|
+
expect(out.isError).toBe(true);
|
|
91
|
+
expect(out.text).toContain("question");
|
|
92
|
+
expect(calls.length).toBe(0);
|
|
93
|
+
});
|
|
94
|
+
it("refuses a checklist with no businessConnectionId, before any network call", async () => {
|
|
95
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: {} });
|
|
96
|
+
const out = await telegramAsk({
|
|
97
|
+
botId: BOT,
|
|
98
|
+
chatId: 1,
|
|
99
|
+
kind: "checklist",
|
|
100
|
+
checklist: { title: "Snags", tasks: [{ id: 1, text: "Seal the flashing" }] },
|
|
101
|
+
}, deps(fetchImpl));
|
|
102
|
+
expect(out.isError).toBe(true);
|
|
103
|
+
expect(out.text).toContain("businessConnectionId");
|
|
104
|
+
expect(calls.length).toBe(0);
|
|
105
|
+
});
|
|
106
|
+
it("refuses a venue missing its address, before any network call", async () => {
|
|
107
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: {} });
|
|
108
|
+
const out = await telegramAsk({ botId: BOT, chatId: 1, kind: "venue", latitude: 51.5, longitude: -0.1, title: "Site" }, deps(fetchImpl));
|
|
109
|
+
expect(out.isError).toBe(true);
|
|
110
|
+
expect(out.text).toContain("address");
|
|
111
|
+
expect(calls.length).toBe(0);
|
|
112
|
+
});
|
|
113
|
+
it("nests the checklist as Telegram's InputChecklist", async () => {
|
|
114
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 3 } });
|
|
115
|
+
await telegramAsk({
|
|
116
|
+
botId: BOT,
|
|
117
|
+
chatId: 1,
|
|
118
|
+
kind: "checklist",
|
|
119
|
+
businessConnectionId: "bc1",
|
|
120
|
+
checklist: {
|
|
121
|
+
title: "Snags",
|
|
122
|
+
tasks: [{ id: 1, text: "Seal" }],
|
|
123
|
+
othersCanMarkTasksAsDone: true,
|
|
124
|
+
},
|
|
125
|
+
}, deps(fetchImpl));
|
|
126
|
+
expect(calls[0]?.body).toEqual({
|
|
127
|
+
chat_id: 1,
|
|
128
|
+
business_connection_id: "bc1",
|
|
129
|
+
checklist: {
|
|
130
|
+
title: "Snags",
|
|
131
|
+
tasks: [{ id: 1, text: "Seal" }],
|
|
132
|
+
others_can_mark_tasks_as_done: true,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
it("sends only chat_id and message_id for stopPoll and stopLiveLocation", async () => {
|
|
137
|
+
for (const kind of ["stopPoll", "stopLiveLocation"]) {
|
|
138
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: true });
|
|
139
|
+
await telegramAsk({ botId: BOT, chatId: 5, kind, messageId: 9 }, deps(fetchImpl));
|
|
140
|
+
expect(calls[0]?.body).toEqual({ chat_id: 5, message_id: 9 });
|
|
141
|
+
expect(calls[0]?.method).toBe(ASK_METHOD[kind]);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
it("adds the shared optionals to any kind", async () => {
|
|
145
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 1 } });
|
|
146
|
+
await telegramAsk({
|
|
147
|
+
botId: BOT,
|
|
148
|
+
chatId: 1,
|
|
149
|
+
kind: "dice",
|
|
150
|
+
messageThreadId: 7,
|
|
151
|
+
disableNotification: true,
|
|
152
|
+
replyToMessageId: 42,
|
|
153
|
+
buttons: [[{ text: "Again", callbackData: "roll" }]],
|
|
154
|
+
}, deps(fetchImpl));
|
|
155
|
+
expect(calls[0]?.body).toMatchObject({
|
|
156
|
+
message_thread_id: 7,
|
|
157
|
+
disable_notification: true,
|
|
158
|
+
reply_parameters: { message_id: 42 },
|
|
159
|
+
reply_markup: { inline_keyboard: [[{ text: "Again", callback_data: "roll" }]] },
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
it("withholds the send-envelope options from the edit and stop kinds", async () => {
|
|
163
|
+
// Telegram's tables carry reply_markup on stopPoll, editMessageChecklist,
|
|
164
|
+
// editMessageLiveLocation and stopMessageLiveLocation, and none of the
|
|
165
|
+
// send-envelope options, so a caller setting them must not reach the wire.
|
|
166
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: true });
|
|
167
|
+
await telegramAsk({
|
|
168
|
+
botId: BOT,
|
|
169
|
+
chatId: 5,
|
|
170
|
+
kind: "stopPoll",
|
|
171
|
+
messageId: 9,
|
|
172
|
+
disableNotification: true,
|
|
173
|
+
protectContent: true,
|
|
174
|
+
replyToMessageId: 3,
|
|
175
|
+
messageThreadId: 8,
|
|
176
|
+
buttons: [[{ text: "Results", callbackData: "r" }]],
|
|
177
|
+
}, deps(fetchImpl));
|
|
178
|
+
expect(calls[0]?.body).toEqual({
|
|
179
|
+
chat_id: 5,
|
|
180
|
+
message_id: 9,
|
|
181
|
+
reply_markup: { inline_keyboard: [[{ text: "Results", callback_data: "r" }]] },
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
it("omits message_thread_id on a checklist, the one send method with no such field", async () => {
|
|
185
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: { message_id: 3 } });
|
|
186
|
+
await telegramAsk({
|
|
187
|
+
botId: BOT,
|
|
188
|
+
chatId: 1,
|
|
189
|
+
kind: "checklist",
|
|
190
|
+
businessConnectionId: "bc1",
|
|
191
|
+
checklist: { title: "Snags", tasks: [{ id: 1, text: "Seal" }] },
|
|
192
|
+
messageThreadId: 8,
|
|
193
|
+
disableNotification: true,
|
|
194
|
+
}, deps(fetchImpl));
|
|
195
|
+
expect(calls[0]?.body).toEqual({
|
|
196
|
+
chat_id: 1,
|
|
197
|
+
business_connection_id: "bc1",
|
|
198
|
+
checklist: { title: "Snags", tasks: [{ id: 1, text: "Seal" }] },
|
|
199
|
+
disable_notification: true,
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
it("relays Telegram's refusal unaltered", async () => {
|
|
203
|
+
const { fetchImpl } = recorder({
|
|
204
|
+
ok: false,
|
|
205
|
+
error_code: 400,
|
|
206
|
+
description: "Bad Request: poll can't be sent to channel direct messages chats",
|
|
207
|
+
});
|
|
208
|
+
const out = await telegramAsk({ botId: BOT, chatId: 1, kind: "poll", question: "q", options: ["a"] }, deps(fetchImpl));
|
|
209
|
+
expect(out.isError).toBe(true);
|
|
210
|
+
expect(out.text).toContain("channel direct messages chats");
|
|
211
|
+
});
|
|
212
|
+
it("emits a call/result pair sharing one callId", async () => {
|
|
213
|
+
const { fetchImpl } = recorder({ ok: true, result: { message_id: 1 } });
|
|
214
|
+
await telegramAsk({ botId: BOT, chatId: 1, kind: "dice" }, deps(fetchImpl));
|
|
215
|
+
expect(lines.join("\n")).toContain("op=call tool=telegram-ask method=sendDice callId=cafe");
|
|
216
|
+
expect(lines.join("\n")).toContain("op=result callId=cafe");
|
|
217
|
+
});
|
|
218
|
+
it("refuses when the account has no such bot, naming the registered ones", async () => {
|
|
219
|
+
const { calls, fetchImpl } = recorder({ ok: true, result: {} });
|
|
220
|
+
const out = await telegramAsk({ botId: "999", chatId: 1, kind: "dice" }, deps(fetchImpl));
|
|
221
|
+
expect(out.isError).toBe(true);
|
|
222
|
+
expect(out.text).toContain(BOT);
|
|
223
|
+
expect(calls.length).toBe(0);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
//# sourceMappingURL=ask-tool.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ask-tool.test.js","sourceRoot":"","sources":["../../src/__tests__/ask-tool.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card-store.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/card-store.test.ts"],"names":[],"mappings":""}
|