@5ss/ai-tools 2.11.1
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/CHANGELOG.md +112 -0
- package/LICENSE +21 -0
- package/README.md +221 -0
- package/dist/ai-sdk/index.d.ts +15 -0
- package/dist/ai-sdk/index.d.ts.map +1 -0
- package/dist/ai-sdk/index.js +24 -0
- package/dist/ai-sdk/index.js.map +1 -0
- package/dist/artifact-D064mHfK.js +44 -0
- package/dist/artifact-D064mHfK.js.map +1 -0
- package/dist/artifacts-O8g-40Pw.js +404 -0
- package/dist/artifacts-O8g-40Pw.js.map +1 -0
- package/dist/aws-json-CecFqzqX.js +23 -0
- package/dist/aws-json-CecFqzqX.js.map +1 -0
- package/dist/aws-service-msttbPrz.js +58 -0
- package/dist/aws-service-msttbPrz.js.map +1 -0
- package/dist/batch-BMM5dXqL.d.ts +22 -0
- package/dist/batch-BMM5dXqL.d.ts.map +1 -0
- package/dist/batch-Co1ujeAW.js +67 -0
- package/dist/batch-Co1ujeAW.js.map +1 -0
- package/dist/bedrock-agentcore-browser-a_qOs-NR.js +182 -0
- package/dist/bedrock-agentcore-browser-a_qOs-NR.js.map +1 -0
- package/dist/bedrock-agentcore-code-interpreter-MWK-8RhA.js +357 -0
- package/dist/bedrock-agentcore-code-interpreter-MWK-8RhA.js.map +1 -0
- package/dist/bytes-BxpimpQx.js +45 -0
- package/dist/bytes-BxpimpQx.js.map +1 -0
- package/dist/client-CCKGsTeI.js +743 -0
- package/dist/client-CCKGsTeI.js.map +1 -0
- package/dist/cloudflare/index.d.ts +37 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +41 -0
- package/dist/cloudflare/index.js.map +1 -0
- package/dist/cloudflare-browser-B6Yolpin.js +428 -0
- package/dist/cloudflare-browser-B6Yolpin.js.map +1 -0
- package/dist/cloudflare-email-Dy0KHeDf.js +197 -0
- package/dist/cloudflare-email-Dy0KHeDf.js.map +1 -0
- package/dist/cloudflare-sandbox-Dp_uNaqW.js +982 -0
- package/dist/cloudflare-sandbox-Dp_uNaqW.js.map +1 -0
- package/dist/content-type-CORxaxcv.js +49 -0
- package/dist/content-type-CORxaxcv.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.js +204 -0
- package/dist/core/index.js.map +1 -0
- package/dist/define-CvpJ_pNP.js +115 -0
- package/dist/define-CvpJ_pNP.js.map +1 -0
- package/dist/errors-DoSpNHvs.js +20 -0
- package/dist/errors-DoSpNHvs.js.map +1 -0
- package/dist/errors-aKhko9T1.d.ts +18 -0
- package/dist/errors-aKhko9T1.d.ts.map +1 -0
- package/dist/eventbridge-scheduler-Bh6GqZY2.js +349 -0
- package/dist/eventbridge-scheduler-Bh6GqZY2.js.map +1 -0
- package/dist/framework-context-DVIIY8ZO.js +24 -0
- package/dist/framework-context-DVIIY8ZO.js.map +1 -0
- package/dist/gotenberg-NuJjxyln.js +291 -0
- package/dist/gotenberg-NuJjxyln.js.map +1 -0
- package/dist/http/index.d.ts +47 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +3 -0
- package/dist/http-service-DDNCO1s4.js +254 -0
- package/dist/http-service-DDNCO1s4.js.map +1 -0
- package/dist/http-service-T7E5UjP8.d.ts +80 -0
- package/dist/http-service-T7E5UjP8.d.ts.map +1 -0
- package/dist/imessage-BSAFOI8Z.js +154 -0
- package/dist/imessage-BSAFOI8Z.js.map +1 -0
- package/dist/index-BU4gmYO8.d.ts +254 -0
- package/dist/index-BU4gmYO8.d.ts.map +1 -0
- package/dist/index-CCivzmxO.d.ts +188 -0
- package/dist/index-CCivzmxO.d.ts.map +1 -0
- package/dist/index-CLmTrcu5.d.ts +22 -0
- package/dist/index-CLmTrcu5.d.ts.map +1 -0
- package/dist/index-CZX5OeOF.d.ts +235 -0
- package/dist/index-CZX5OeOF.d.ts.map +1 -0
- package/dist/index-CdFmEfZO.d.ts +359 -0
- package/dist/index-CdFmEfZO.d.ts.map +1 -0
- package/dist/index-Cuh6eMWc.d.ts +285 -0
- package/dist/index-Cuh6eMWc.d.ts.map +1 -0
- package/dist/index-DuOGj7vc.d.ts +107 -0
- package/dist/index-DuOGj7vc.d.ts.map +1 -0
- package/dist/index-ccZ1XOHw.d.ts +69 -0
- package/dist/index-ccZ1XOHw.d.ts.map +1 -0
- package/dist/index-n8JTpNf1.d.ts +247 -0
- package/dist/index-n8JTpNf1.d.ts.map +1 -0
- package/dist/index-pwW1OsOx.d.ts +134 -0
- package/dist/index-pwW1OsOx.d.ts.map +1 -0
- package/dist/index-zK1ZwS4m.d.ts +347 -0
- package/dist/index-zK1ZwS4m.d.ts.map +1 -0
- package/dist/limits-hjrO8zUG.js +80 -0
- package/dist/limits-hjrO8zUG.js.map +1 -0
- package/dist/mastra/index.d.ts +14 -0
- package/dist/mastra/index.d.ts.map +1 -0
- package/dist/mastra/index.js +26 -0
- package/dist/mastra/index.js.map +1 -0
- package/dist/mastra-vector-Dhc6XZ8l.js +234 -0
- package/dist/mastra-vector-Dhc6XZ8l.js.map +1 -0
- package/dist/mcp/index.d.ts +80 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +97 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/modules/artifacts/index.d.ts +337 -0
- package/dist/modules/artifacts/index.d.ts.map +1 -0
- package/dist/modules/artifacts/index.js +348 -0
- package/dist/modules/artifacts/index.js.map +1 -0
- package/dist/modules/browser/index.d.ts +516 -0
- package/dist/modules/browser/index.d.ts.map +1 -0
- package/dist/modules/browser/index.js +475 -0
- package/dist/modules/browser/index.js.map +1 -0
- package/dist/modules/calendar/index.d.ts +93 -0
- package/dist/modules/calendar/index.d.ts.map +1 -0
- package/dist/modules/calendar/index.js +131 -0
- package/dist/modules/calendar/index.js.map +1 -0
- package/dist/modules/code-sandbox/index.d.ts +317 -0
- package/dist/modules/code-sandbox/index.d.ts.map +1 -0
- package/dist/modules/code-sandbox/index.js +537 -0
- package/dist/modules/code-sandbox/index.js.map +1 -0
- package/dist/modules/content-type/index.d.ts +22 -0
- package/dist/modules/content-type/index.d.ts.map +1 -0
- package/dist/modules/content-type/index.js +66 -0
- package/dist/modules/content-type/index.js.map +1 -0
- package/dist/modules/crypto/index.d.ts +115 -0
- package/dist/modules/crypto/index.d.ts.map +1 -0
- package/dist/modules/crypto/index.js +139 -0
- package/dist/modules/crypto/index.js.map +1 -0
- package/dist/modules/document/index.d.ts +575 -0
- package/dist/modules/document/index.d.ts.map +1 -0
- package/dist/modules/document/index.js +444 -0
- package/dist/modules/document/index.js.map +1 -0
- package/dist/modules/document-extract/index.d.ts +438 -0
- package/dist/modules/document-extract/index.d.ts.map +1 -0
- package/dist/modules/document-extract/index.js +127 -0
- package/dist/modules/document-extract/index.js.map +1 -0
- package/dist/modules/document-render/index.d.ts +336 -0
- package/dist/modules/document-render/index.d.ts.map +1 -0
- package/dist/modules/document-render/index.js +155 -0
- package/dist/modules/document-render/index.js.map +1 -0
- package/dist/modules/email/index.d.ts +311 -0
- package/dist/modules/email/index.d.ts.map +1 -0
- package/dist/modules/email/index.js +167 -0
- package/dist/modules/email/index.js.map +1 -0
- package/dist/modules/email-message/index.d.ts +95 -0
- package/dist/modules/email-message/index.d.ts.map +1 -0
- package/dist/modules/email-message/index.js +264 -0
- package/dist/modules/email-message/index.js.map +1 -0
- package/dist/modules/file-convert/index.d.ts +273 -0
- package/dist/modules/file-convert/index.d.ts.map +1 -0
- package/dist/modules/file-convert/index.js +103 -0
- package/dist/modules/file-convert/index.js.map +1 -0
- package/dist/modules/files/index.d.ts +452 -0
- package/dist/modules/files/index.d.ts.map +1 -0
- package/dist/modules/files/index.js +733 -0
- package/dist/modules/files/index.js.map +1 -0
- package/dist/modules/image/index.d.ts +342 -0
- package/dist/modules/image/index.d.ts.map +1 -0
- package/dist/modules/image/index.js +281 -0
- package/dist/modules/image/index.js.map +1 -0
- package/dist/modules/messaging/index.d.ts +608 -0
- package/dist/modules/messaging/index.d.ts.map +1 -0
- package/dist/modules/messaging/index.js +1067 -0
- package/dist/modules/messaging/index.js.map +1 -0
- package/dist/modules/pdf/index.d.ts +287 -0
- package/dist/modules/pdf/index.d.ts.map +1 -0
- package/dist/modules/pdf/index.js +259 -0
- package/dist/modules/pdf/index.js.map +1 -0
- package/dist/modules/presentation/index.d.ts +247 -0
- package/dist/modules/presentation/index.d.ts.map +1 -0
- package/dist/modules/presentation/index.js +12657 -0
- package/dist/modules/presentation/index.js.map +1 -0
- package/dist/modules/queue/index.d.ts +129 -0
- package/dist/modules/queue/index.d.ts.map +1 -0
- package/dist/modules/queue/index.js +131 -0
- package/dist/modules/queue/index.js.map +1 -0
- package/dist/modules/rag/index.d.ts +250 -0
- package/dist/modules/rag/index.d.ts.map +1 -0
- package/dist/modules/rag/index.js +366 -0
- package/dist/modules/rag/index.js.map +1 -0
- package/dist/modules/scheduler/index.d.ts +216 -0
- package/dist/modules/scheduler/index.d.ts.map +1 -0
- package/dist/modules/scheduler/index.js +153 -0
- package/dist/modules/scheduler/index.js.map +1 -0
- package/dist/modules/skills/index.d.ts +205 -0
- package/dist/modules/skills/index.d.ts.map +1 -0
- package/dist/modules/skills/index.js +203 -0
- package/dist/modules/skills/index.js.map +1 -0
- package/dist/modules/tasks/index.d.ts +287 -0
- package/dist/modules/tasks/index.d.ts.map +1 -0
- package/dist/modules/tasks/index.js +207 -0
- package/dist/modules/tasks/index.js.map +1 -0
- package/dist/modules/vector-store/index.d.ts +3 -0
- package/dist/modules/vector-store/index.js +3 -0
- package/dist/modules/web-fetch/index.d.ts +99 -0
- package/dist/modules/web-fetch/index.d.ts.map +1 -0
- package/dist/modules/web-fetch/index.js +242 -0
- package/dist/modules/web-fetch/index.js.map +1 -0
- package/dist/object-artifact-store-CMTzCm_G.d.ts +7 -0
- package/dist/object-artifact-store-CMTzCm_G.d.ts.map +1 -0
- package/dist/object-artifact-store-wZ2j9cto.js +28 -0
- package/dist/object-artifact-store-wZ2j9cto.js.map +1 -0
- package/dist/pinecone-umY4t6OF.js +190 -0
- package/dist/pinecone-umY4t6OF.js.map +1 -0
- package/dist/provider-CgDAlg6K.js +34 -0
- package/dist/provider-CgDAlg6K.js.map +1 -0
- package/dist/qdrant-DMp4NhKR.js +253 -0
- package/dist/qdrant-DMp4NhKR.js.map +1 -0
- package/dist/resend-BAC38_dA.js +155 -0
- package/dist/resend-BAC38_dA.js.map +1 -0
- package/dist/s3-CsOaPWMP.js +955 -0
- package/dist/s3-CsOaPWMP.js.map +1 -0
- package/dist/schemas-ChOAhdo9.js +192 -0
- package/dist/schemas-ChOAhdo9.js.map +1 -0
- package/dist/slack-Di5BBNpt.js +1455 -0
- package/dist/slack-Di5BBNpt.js.map +1 -0
- package/dist/sqs-DCwS1i2N.js +225 -0
- package/dist/sqs-DCwS1i2N.js.map +1 -0
- package/dist/supabase-vector-Dpp9mmJR.js +218 -0
- package/dist/supabase-vector-Dpp9mmJR.js.map +1 -0
- package/dist/tanstack/index.d.ts +15 -0
- package/dist/tanstack/index.d.ts.map +1 -0
- package/dist/tanstack/index.js +28 -0
- package/dist/tanstack/index.js.map +1 -0
- package/dist/teams-DYAHNb39.js +835 -0
- package/dist/teams-DYAHNb39.js.map +1 -0
- package/dist/telegram-DDXWzkfL.js +734 -0
- package/dist/telegram-DDXWzkfL.js.map +1 -0
- package/dist/textract-CPLiB22H.js +554 -0
- package/dist/textract-CPLiB22H.js.map +1 -0
- package/dist/transport-B4vn-XiQ.js +157 -0
- package/dist/transport-B4vn-XiQ.js.map +1 -0
- package/dist/transport-i96ACAI_.d.ts +46 -0
- package/dist/transport-i96ACAI_.d.ts.map +1 -0
- package/dist/types-Ccb0DXY9.d.ts +150 -0
- package/dist/types-Ccb0DXY9.d.ts.map +1 -0
- package/dist/unique-EwBH1JPB.js +19 -0
- package/dist/unique-EwBH1JPB.js.map +1 -0
- package/dist/vector-store-C3nEO80e.js +193 -0
- package/dist/vector-store-C3nEO80e.js.map +1 -0
- package/dist/vendors/amazon-sp-api/index.d.ts +526 -0
- package/dist/vendors/amazon-sp-api/index.d.ts.map +1 -0
- package/dist/vendors/amazon-sp-api/index.js +975 -0
- package/dist/vendors/amazon-sp-api/index.js.map +1 -0
- package/dist/vendors/bedrock-agentcore-browser/index.d.ts +2 -0
- package/dist/vendors/bedrock-agentcore-browser/index.js +2 -0
- package/dist/vendors/bedrock-agentcore-code-interpreter/index.d.ts +228 -0
- package/dist/vendors/bedrock-agentcore-code-interpreter/index.d.ts.map +1 -0
- package/dist/vendors/bedrock-agentcore-code-interpreter/index.js +2 -0
- package/dist/vendors/cloudflare-browser/index.d.ts +2 -0
- package/dist/vendors/cloudflare-browser/index.js +2 -0
- package/dist/vendors/cloudflare-email/index.d.ts +260 -0
- package/dist/vendors/cloudflare-email/index.d.ts.map +1 -0
- package/dist/vendors/cloudflare-email/index.js +3 -0
- package/dist/vendors/cloudflare-sandbox/index.d.ts +565 -0
- package/dist/vendors/cloudflare-sandbox/index.d.ts.map +1 -0
- package/dist/vendors/cloudflare-sandbox/index.js +2 -0
- package/dist/vendors/eventbridge-scheduler/index.d.ts +2 -0
- package/dist/vendors/eventbridge-scheduler/index.js +2 -0
- package/dist/vendors/gotenberg/index.d.ts +306 -0
- package/dist/vendors/gotenberg/index.d.ts.map +1 -0
- package/dist/vendors/gotenberg/index.js +2 -0
- package/dist/vendors/imessage/index.d.ts +420 -0
- package/dist/vendors/imessage/index.d.ts.map +1 -0
- package/dist/vendors/imessage/index.js +4 -0
- package/dist/vendors/katana/index.d.ts +1570 -0
- package/dist/vendors/katana/index.d.ts.map +1 -0
- package/dist/vendors/katana/index.js +1639 -0
- package/dist/vendors/katana/index.js.map +1 -0
- package/dist/vendors/mastra-vector/index.d.ts +120 -0
- package/dist/vendors/mastra-vector/index.d.ts.map +1 -0
- package/dist/vendors/mastra-vector/index.js +3 -0
- package/dist/vendors/pinecone/index.d.ts +75 -0
- package/dist/vendors/pinecone/index.d.ts.map +1 -0
- package/dist/vendors/pinecone/index.js +3 -0
- package/dist/vendors/qdrant/index.d.ts +75 -0
- package/dist/vendors/qdrant/index.d.ts.map +1 -0
- package/dist/vendors/qdrant/index.js +3 -0
- package/dist/vendors/resend/index.d.ts +3 -0
- package/dist/vendors/resend/index.js +3 -0
- package/dist/vendors/s3/index.d.ts +2 -0
- package/dist/vendors/s3/index.js +2 -0
- package/dist/vendors/slack/index.d.ts +576 -0
- package/dist/vendors/slack/index.d.ts.map +1 -0
- package/dist/vendors/slack/index.js +3 -0
- package/dist/vendors/sqs/index.d.ts +2 -0
- package/dist/vendors/sqs/index.js +2 -0
- package/dist/vendors/supabase-vector/index.d.ts +89 -0
- package/dist/vendors/supabase-vector/index.d.ts.map +1 -0
- package/dist/vendors/supabase-vector/index.js +3 -0
- package/dist/vendors/teams/index.d.ts +303 -0
- package/dist/vendors/teams/index.d.ts.map +1 -0
- package/dist/vendors/teams/index.js +3 -0
- package/dist/vendors/telegram/index.d.ts +319 -0
- package/dist/vendors/telegram/index.d.ts.map +1 -0
- package/dist/vendors/telegram/index.js +3 -0
- package/dist/vendors/textract/index.d.ts +2 -0
- package/dist/vendors/textract/index.js +2 -0
- package/dist/vendors/woocommerce/index.d.ts +1700 -0
- package/dist/vendors/woocommerce/index.d.ts.map +1 -0
- package/dist/vendors/woocommerce/index.js +1427 -0
- package/dist/vendors/woocommerce/index.js.map +1 -0
- package/dist/with-auth-CpKqTrGK.js +240 -0
- package/dist/with-auth-CpKqTrGK.js.map +1 -0
- package/logos/LUCIDE-ATTRIBUTION.txt +4 -0
- package/logos/README.md +89 -0
- package/logos/amazon.svg +6 -0
- package/logos/artifacts.svg +9 -0
- package/logos/browser.svg +9 -0
- package/logos/calendar.svg +15 -0
- package/logos/cloudflare-browser.svg +5 -0
- package/logos/cloudflare-email.svg +5 -0
- package/logos/cloudflare.svg +4 -0
- package/logos/code-sandbox.svg +8 -0
- package/logos/content-type.svg +10 -0
- package/logos/crypto.svg +7 -0
- package/logos/document-extract.svg +12 -0
- package/logos/document-render.svg +8 -0
- package/logos/document.svg +10 -0
- package/logos/email-message.svg +8 -0
- package/logos/email.svg +7 -0
- package/logos/file-convert.svg +9 -0
- package/logos/files.svg +6 -0
- package/logos/gotenberg.svg +340 -0
- package/logos/image.svg +8 -0
- package/logos/imessage.svg +7 -0
- package/logos/katana.svg +13 -0
- package/logos/mastra.svg +7 -0
- package/logos/messaging.svg +7 -0
- package/logos/pack-logos.json +48 -0
- package/logos/pdf.svg +10 -0
- package/logos/pinecone.svg +25 -0
- package/logos/presentation.svg +8 -0
- package/logos/qdrant.svg +4 -0
- package/logos/queue.svg +11 -0
- package/logos/rag.svg +18 -0
- package/logos/resend.svg +5 -0
- package/logos/scheduler.svg +7 -0
- package/logos/skills.svg +10 -0
- package/logos/slack.svg +14 -0
- package/logos/supabase.svg +4 -0
- package/logos/tasks.svg +10 -0
- package/logos/teams.svg +6 -0
- package/logos/telegram.svg +10 -0
- package/logos/textract.svg +5 -0
- package/logos/vector-store.svg +8 -0
- package/logos/web-fetch.svg +8 -0
- package/logos/woocommerce.svg +4 -0
- package/package.json +373 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teams-DYAHNb39.js","names":["#auth","#http","#ensureAccessToken","#accessToken","#accessTokenExpiresAt","#postActivity","#putActivity","#authHeaders","#graphReaction","#ensureGraphToken","#graphToken","#graphTokenExpiresAt"],"sources":["../src/vendors/teams/contracts.ts","../src/vendors/teams/domain.ts","../src/vendors/teams/client.ts","../src/vendors/teams/module.ts","../src/vendors/teams/webhook.ts"],"sourcesContent":["import { z } from 'zod'\n\n/** Practical upper bound for data-URI attachments (small files only). */\nexport const MAX_MEDIA_BYTES = 4 * 1024 * 1024\n\nexport const teamsChatActionSchema = z.enum([\n\t'typing',\n\t'upload_photo',\n\t'record_video',\n\t'upload_video',\n\t'record_voice',\n\t'upload_voice',\n\t'upload_document',\n\t'choose_sticker',\n\t'find_location',\n\t'record_video_note',\n\t'upload_video_note'\n])\n\nexport const teamsAuthSchema = z.object({\n\tapp_id: z.string().min(1).describe('Microsoft Bot Framework application (client) id'),\n\tapp_password: z.string().min(1).describe('Microsoft Bot Framework application credential'),\n\ttenant_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Azure AD tenant id; omit for multi-tenant botframework.com token endpoint')\n})\n\nexport type TeamsAuth = z.infer<typeof teamsAuthSchema>\n\nconst serviceUrlField = z\n\t.string()\n\t.min(1)\n\t.describe('Bot Framework service URL for this conversation (from inbound activity.serviceUrl)')\n\nexport const teamsSendTextInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('Teams conversation id'),\n\ttext: z.string().min(1).max(28_000).describe('Message text'),\n\treply_to_message_id: z.string().min(1).optional().describe('Optional activity id to reply to'),\n\tservice_url: serviceUrlField,\n\treply_markup: z.unknown().optional().describe('Optional Bot Framework attachments array or channel-native markup')\n})\n\nexport const teamsMessageOutputSchema = z.object({\n\tmessage_id: z.string().describe('Bot Framework activity id as string')\n})\n\nexport const teamsEditTextInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('Teams conversation id'),\n\tmessage_id: z.string().min(1).describe('Activity id to edit'),\n\ttext: z.string().min(1).max(28_000).describe('Replacement text'),\n\tservice_url: serviceUrlField,\n\treply_markup: z.unknown().optional().describe('Optional Bot Framework attachments array or channel-native markup')\n})\n\nexport const teamsSendChatActionInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('Teams conversation id'),\n\taction: teamsChatActionSchema.describe('Chat action; Teams maps all values to a typing activity'),\n\tservice_url: serviceUrlField\n})\n\nexport const teamsSetReactionInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('Teams chat or conversation id (Graph chat id when using Graph reactions)'),\n\tmessage_id: z.string().min(1).describe('Message / activity id'),\n\temoji: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(32)\n\t\t.describe('Emoji or short name (like, heart, …); Graph setReaction when tenant_id is bound'),\n\tteam_id: z.string().min(1).optional().describe('Team id for channel-message Graph path'),\n\tchannel_id: z.string().min(1).optional().describe('Channel id for channel-message Graph path')\n})\n\nexport const teamsClearReactionInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('Teams chat or conversation id'),\n\tmessage_id: z.string().min(1).describe('Message / activity id'),\n\temoji: z\n\t\t.string()\n\t\t.min(1)\n\t\t.max(32)\n\t\t.optional()\n\t\t.describe('Same emoji/short name as setReaction; required for Graph unsetReaction'),\n\tteam_id: z.string().min(1).optional().describe('Team id for channel-message Graph path'),\n\tchannel_id: z.string().min(1).optional().describe('Channel id for channel-message Graph path')\n})\n\nexport const teamsSendMediaInputSchema = z.object({\n\tchat_id: z.string().min(1).describe('Teams conversation id'),\n\tkind: z.enum(['photo', 'document']).describe('Media kind'),\n\tbody_base64: z.string().min(1).describe('File body as base64'),\n\tfile_name: z.string().min(1).describe('File name including extension'),\n\tcaption: z.string().max(4000).optional().describe('Optional caption text'),\n\tcontent_type: z.string().optional().describe('Optional content type for the attachment'),\n\tservice_url: serviceUrlField,\n\treply_to_message_id: z.string().min(1).optional().describe('Optional activity id to reply to')\n})\n\nexport const teamsDownloadFileInputSchema = z.object({\n\tfile_id: z.string().min(1).describe('Content URL of the file to download'),\n\tfile_name: z.string().min(1).optional().describe('Preferred file name for the download result'),\n\tservice_url: z\n\t\t.string()\n\t\t.min(1)\n\t\t.optional()\n\t\t.describe('Optional service URL (unused when file_id is an absolute content URL)')\n})\n\nexport const teamsDownloadFileOutputSchema = z.object({\n\tfile_name: z.string(),\n\tfile_size: z.number().optional(),\n\tbody_base64: z.string().describe('Downloaded file body as base64')\n})\n\nexport const teamsAnswerCallbackInputSchema = z.object({\n\tcallback_query_id: z\n\t\t.string()\n\t\t.min(1)\n\t\t.describe('Invoke reply path (absolute URL) or invoke activity id; non-URL values no-op'),\n\ttext: z.string().max(200).optional().describe('Optional notification text'),\n\tshow_alert: z.boolean().optional().describe('When true, prefer an alert-style presentation when supported'),\n\tservice_url: z.string().min(1).optional().describe('Optional service URL when replying via connector path')\n})\n\nexport const teamsGetBotOutputSchema = z.object({\n\tbot_id: z.string(),\n\tusername: z.string(),\n\tdisplay_name: z.string()\n})\n\nexport const teamsOkOutputSchema = z.object({\n\tok: z.boolean()\n})\n\nexport type TeamsSendTextInput = z.infer<typeof teamsSendTextInputSchema>\nexport type TeamsMessageOutput = z.infer<typeof teamsMessageOutputSchema>\nexport type TeamsEditTextInput = z.infer<typeof teamsEditTextInputSchema>\nexport type TeamsSendChatActionInput = z.infer<typeof teamsSendChatActionInputSchema>\nexport type TeamsSetReactionInput = z.infer<typeof teamsSetReactionInputSchema>\nexport type TeamsClearReactionInput = z.infer<typeof teamsClearReactionInputSchema>\nexport type TeamsSendMediaInput = z.infer<typeof teamsSendMediaInputSchema>\nexport type TeamsDownloadFileInput = z.infer<typeof teamsDownloadFileInputSchema>\nexport type TeamsDownloadFileOutput = z.infer<typeof teamsDownloadFileOutputSchema>\nexport type TeamsAnswerCallbackInput = z.infer<typeof teamsAnswerCallbackInputSchema>\nexport type TeamsGetBotOutput = z.infer<typeof teamsGetBotOutputSchema>\n","/**\n * Microsoft Teams / Bot Framework payload shaping + parse.\n * No HTTP — client owns transport.\n *\n * Reactions: Microsoft Graph setReaction / unsetReaction when host binds tenant_id\n * (app-only Graph token). Without tenant_id the client keeps successful no-ops so\n * seam presentation paths do not hard-fail.\n */\n\nimport { isPlainObject, isString, trimEnd } from 'es-toolkit'\n\nimport { ToolError } from '../../core/errors'\nimport { base64ToBytes, bytesToBase64 } from '../../shared/bytes'\nimport type {\n\tTeamsDownloadFileInput,\n\tTeamsDownloadFileOutput,\n\tTeamsGetBotOutput,\n\tTeamsMessageOutput,\n\tTeamsSendMediaInput\n} from './contracts'\nimport { MAX_MEDIA_BYTES } from './contracts'\n\nexport type TeamsFailureKind = 'definite_rejection' | 'outcome_unknown'\n\nexport class TeamsClientError extends ToolError {\n\treadonly failureKind: TeamsFailureKind\n\n\tconstructor(input: {\n\t\tmessage: string\n\t\tfailureKind: TeamsFailureKind\n\t\tmethod: string\n\t\tstatus?: number\n\t\tcause?: unknown\n\t}) {\n\t\tsuper(input.message, {\n\t\t\tcode: 'upstream',\n\t\t\tretryable: input.failureKind === 'outcome_unknown',\n\t\t\tcause: input.cause,\n\t\t\tdetails: {\n\t\t\t\tmethod: input.method,\n\t\t\t\tfailure_kind: input.failureKind,\n\t\t\t\tstatus: input.status\n\t\t\t}\n\t\t})\n\t\tthis.name = 'TeamsClientError'\n\t\tthis.failureKind = input.failureKind\n\t}\n}\n\nexport function isTeamsDefiniteRejection(error: unknown): boolean {\n\treturn error instanceof TeamsClientError && error.failureKind === 'definite_rejection'\n}\n\nexport function isTeamsOutcomeUnknown(error: unknown): boolean {\n\treturn error instanceof TeamsClientError && error.failureKind === 'outcome_unknown'\n}\n\n/** Network / abort / transport failures (and non-classified ToolError) before a parseable response. */\nexport function throwTeamsTransportError(method: string, error: unknown): never {\n\tif (error instanceof TeamsClientError) throw error\n\tif (error instanceof ToolError) {\n\t\tconst status = error.details?.['status']\n\t\tif (typeof status === 'number' && isDefiniteStatus(status)) {\n\t\t\tthrow new TeamsClientError({\n\t\t\t\tmessage: error.message,\n\t\t\t\tfailureKind: 'definite_rejection',\n\t\t\t\tmethod,\n\t\t\t\tstatus,\n\t\t\t\tcause: error\n\t\t\t})\n\t\t}\n\t}\n\tconst message = error instanceof Error ? error.message : `${method} request failed`\n\tthrow new TeamsClientError({\n\t\tmessage,\n\t\tfailureKind: 'outcome_unknown',\n\t\tmethod,\n\t\tcause: error\n\t})\n}\n\nexport function isDefiniteStatus(status: number): boolean {\n\treturn status === 400 || status === 401 || status === 403 || status === 404\n}\n\nexport function botframeworkTokenUrl(tenantId: string | undefined): string {\n\tconst tenant = tenantId && tenantId.length > 0 ? tenantId : 'botframework.com'\n\treturn `https://login.microsoftonline.com/${encodeURIComponent(tenant)}/oauth2/v2.0/token`\n}\n\nexport function botframeworkTokenBody(auth: { app_id: string; app_password: string }): string {\n\treturn new URLSearchParams({\n\t\tgrant_type: 'client_credentials',\n\t\tclient_id: auth.app_id,\n\t\tclient_secret: auth.app_password,\n\t\tscope: 'https://api.botframework.com/.default'\n\t}).toString()\n}\n\n/** App-only Graph token (same client credentials; requires a real Azure AD tenant_id). */\nexport function graphTokenBody(auth: { app_id: string; app_password: string }): string {\n\treturn new URLSearchParams({\n\t\tgrant_type: 'client_credentials',\n\t\tclient_id: auth.app_id,\n\t\tclient_secret: auth.app_password,\n\t\tscope: 'https://graph.microsoft.com/.default'\n\t}).toString()\n}\n\n/**\n * Graph reaction URL.\n * Channel path when team_id + channel_id are set; otherwise chat path using chat_id.\n */\nexport function graphReactionUrl(input: {\n\tchat_id: string\n\tmessage_id: string\n\tteam_id?: string | undefined\n\tchannel_id?: string | undefined\n\top: 'setReaction' | 'unsetReaction'\n}): string {\n\tconst messageId = encodeURIComponent(input.message_id)\n\tif (input.team_id && input.channel_id) {\n\t\treturn (\n\t\t\t`https://graph.microsoft.com/v1.0/teams/${encodeURIComponent(input.team_id)}` +\n\t\t\t`/channels/${encodeURIComponent(input.channel_id)}/messages/${messageId}/${input.op}`\n\t\t)\n\t}\n\treturn `https://graph.microsoft.com/v1.0/chats/${encodeURIComponent(input.chat_id)}/messages/${messageId}/${input.op}`\n}\n\n/** Map free-form emoji / short name to a Graph reactionType string (unicode preferred). */\nexport function toGraphReactionType(emoji: string): string {\n\tconst trimmed = emoji.trim()\n\tconst lower = trimmed.toLowerCase().replace(/^:|:$/g, '')\n\tswitch (lower) {\n\t\tcase 'like':\n\t\tcase 'thumbsup':\n\t\tcase '+1':\n\t\t\treturn '👍'\n\t\tcase 'heart':\n\t\tcase 'love':\n\t\t\treturn '❤️'\n\t\tcase 'laugh':\n\t\tcase 'joy':\n\t\t\treturn '😂'\n\t\tcase 'surprised':\n\t\tcase 'open_mouth':\n\t\t\treturn '😲'\n\t\tcase 'sad':\n\t\tcase 'cry':\n\t\t\treturn '😢'\n\t\tcase 'angry':\n\t\t\treturn '😠'\n\t\tdefault:\n\t\t\treturn trimmed\n\t}\n}\n\nexport function parseAccessToken(data: unknown): { access_token: string; expires_in: number } {\n\tif (!isPlainObject(data) || !isString(data['access_token']) || data['access_token'].length === 0) {\n\t\tthrow new ToolError('Teams token endpoint did not return an access_token', { code: 'bad_auth' })\n\t}\n\tconst expiresIn =\n\t\ttypeof data['expires_in'] === 'number' && Number.isFinite(data['expires_in']) && data['expires_in'] > 0\n\t\t\t? data['expires_in']\n\t\t\t: 3600\n\treturn { access_token: data['access_token'], expires_in: expiresIn }\n}\n\n/** Absolute connector path under a conversation service URL. */\nexport function connectorPath(serviceUrl: string, path: string): string {\n\tconst base = trimEnd(serviceUrl, '/')\n\tconst suffix = path.startsWith('/') ? path : `/${path}`\n\treturn `${base}${suffix}`\n}\n\nexport function conversationActivitiesPath(serviceUrl: string, chatId: string): string {\n\treturn connectorPath(serviceUrl, `/v3/conversations/${encodeURIComponent(chatId)}/activities`)\n}\n\nexport function conversationActivityPath(serviceUrl: string, chatId: string, messageId: string): string {\n\treturn connectorPath(\n\t\tserviceUrl,\n\t\t`/v3/conversations/${encodeURIComponent(chatId)}/activities/${encodeURIComponent(messageId)}`\n\t)\n}\n\n/** Map non-2xx connector responses into TeamsClientError. */\nexport function throwForStatus(label: string, status: number, data: unknown): never {\n\tlet message = `${label} failed with HTTP ${status}`\n\tif (isPlainObject(data)) {\n\t\tconst error = data['error']\n\t\tif (isPlainObject(error) && isString(error['message']) && error['message'].length > 0) {\n\t\t\tmessage = error['message']\n\t\t} else if (isString(data['message']) && data['message'].length > 0) {\n\t\t\tmessage = data['message']\n\t\t}\n\t}\n\tthrow new TeamsClientError({\n\t\tmessage,\n\t\tfailureKind: isDefiniteStatus(status) ? 'definite_rejection' : 'outcome_unknown',\n\t\tmethod: label,\n\t\tstatus\n\t})\n}\n\nexport function parseActivityId(value: unknown): TeamsMessageOutput {\n\tif (isPlainObject(value) && isString(value['id']) && value['id'].length > 0) {\n\t\treturn { message_id: value['id'] }\n\t}\n\t// Some hosts return the id as a bare string body.\n\tif (isString(value) && value.length > 0) {\n\t\treturn { message_id: value }\n\t}\n\tthrow new ToolError('Teams connector returned an invalid activity id', { code: 'upstream' })\n}\n\nexport function attachmentsFromReplyMarkup(replyMarkup: unknown): unknown[] | undefined {\n\tif (Array.isArray(replyMarkup)) return replyMarkup\n\treturn undefined\n}\n\nexport function buildMessageActivity(input: {\n\ttext?: string\n\treply_to_message_id?: string\n\treply_markup?: unknown\n\tattachments?: unknown[]\n}): Record<string, unknown> {\n\tconst fromMarkup = attachmentsFromReplyMarkup(input.reply_markup)\n\tconst attachments = input.attachments ?? fromMarkup\n\treturn {\n\t\ttype: 'message',\n\t\t...(input.text && { text: input.text }),\n\t\t...(input.reply_to_message_id && { replyToId: input.reply_to_message_id }),\n\t\t...(attachments && attachments.length > 0 && { attachments })\n\t}\n}\n\nexport function buildTypingActivity(): Record<string, unknown> {\n\treturn { type: 'typing' }\n}\n\nexport function buildMediaActivity(input: TeamsSendMediaInput): Record<string, unknown> {\n\tconst contentType = input.content_type ?? 'application/octet-stream'\n\tlet bytes: Uint8Array\n\ttry {\n\t\tbytes = base64ToBytes(input.body_base64)\n\t} catch (error) {\n\t\tthrow new ToolError('Invalid base64 body', { code: 'bad_input', cause: error })\n\t}\n\tif (bytes.byteLength === 0) {\n\t\tthrow new ToolError('Media body must not be empty', { code: 'bad_input' })\n\t}\n\tif (bytes.byteLength > MAX_MEDIA_BYTES) {\n\t\tthrow new ToolError('Media exceeds 4 MiB data-URI limit', {\n\t\t\tcode: 'too_large',\n\t\t\tdetails: { max_bytes: MAX_MEDIA_BYTES, content_length: bytes.byteLength }\n\t\t})\n\t}\n\treturn {\n\t\ttype: 'message',\n\t\t...(input.caption && { text: input.caption }),\n\t\t...(input.reply_to_message_id && { replyToId: input.reply_to_message_id }),\n\t\tattachments: [\n\t\t\t{\n\t\t\t\tcontentType,\n\t\t\t\tcontentUrl: `data:${contentType};base64,${input.body_base64}`,\n\t\t\t\tname: input.file_name\n\t\t\t}\n\t\t]\n\t}\n}\n\nexport function parseDownload(input: TeamsDownloadFileInput, bytes: Uint8Array): TeamsDownloadFileOutput {\n\tconst fromUrl = (() => {\n\t\ttry {\n\t\t\tconst url = new URL(input.file_id)\n\t\t\tconst last = url.pathname.split('/').filter(Boolean).pop()\n\t\t\treturn last && last.length > 0 ? decodeURIComponent(last) : undefined\n\t\t} catch {\n\t\t\treturn undefined\n\t\t}\n\t})()\n\treturn {\n\t\tfile_name: input.file_name ?? fromUrl ?? 'download',\n\t\tfile_size: bytes.byteLength,\n\t\tbody_base64: bytesToBase64(bytes)\n\t}\n}\n\nexport function botIdentityFromAuth(appId: string): TeamsGetBotOutput {\n\treturn {\n\t\tbot_id: appId,\n\t\tusername: 'teams-bot',\n\t\tdisplay_name: 'Teams Bot'\n\t}\n}\n\nexport function isAbsoluteHttpUrl(value: string): boolean {\n\ttry {\n\t\tconst url = new URL(value)\n\t\treturn url.protocol === 'http:' || url.protocol === 'https:'\n\t} catch {\n\t\treturn false\n\t}\n}\n\n/** Optional invoke-response body when answering via a reply path. */\nexport function buildInvokeResponseBody(input: { text?: string; show_alert?: boolean }): Record<string, unknown> {\n\treturn {\n\t\ttype: 'invokeResponse',\n\t\tvalue: {\n\t\t\tstatus: 200,\n\t\t\tbody: {\n\t\t\t\t...(input.text && { text: input.text }),\n\t\t\t\t...(input.show_alert !== undefined && { showAlert: input.show_alert })\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Microsoft Teams / Bot Framework vendor client.\n * Host: `new TeamsClient(auth)`. Agent tools: `fromContext(ctx)`.\n *\n * Connector base is per-conversation (`service_url` on method input).\n * Access tokens are cached on the instance with ~60s skew.\n */\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { HttpService } from '../../transport/http-service'\nimport type { HttpServiceOptions } from '../../transport/http-service'\nimport type {\n\tTeamsAnswerCallbackInput,\n\tTeamsAuth,\n\tTeamsClearReactionInput,\n\tTeamsDownloadFileInput,\n\tTeamsDownloadFileOutput,\n\tTeamsEditTextInput,\n\tTeamsGetBotOutput,\n\tTeamsMessageOutput,\n\tTeamsSendChatActionInput,\n\tTeamsSendMediaInput,\n\tTeamsSendTextInput,\n\tTeamsSetReactionInput\n} from './contracts'\nimport { teamsAuthSchema } from './contracts'\nimport {\n\tbotframeworkTokenBody,\n\tbotframeworkTokenUrl,\n\tbotIdentityFromAuth,\n\tbuildInvokeResponseBody,\n\tbuildMediaActivity,\n\tbuildMessageActivity,\n\tbuildTypingActivity,\n\tconversationActivitiesPath,\n\tconversationActivityPath,\n\tgraphReactionUrl,\n\tgraphTokenBody,\n\tisAbsoluteHttpUrl,\n\tisTeamsDefiniteRejection,\n\tisTeamsOutcomeUnknown,\n\tparseAccessToken,\n\tparseActivityId,\n\tparseDownload,\n\tTeamsClientError,\n\tthrowForStatus,\n\tthrowTeamsTransportError,\n\ttoGraphReactionType\n} from './domain'\n\nexport type TeamsClientOptions = Pick<HttpServiceOptions, 'fetch' | 'signal'>\n\nexport class TeamsClient {\n\treadonly #auth: TeamsAuth\n\treadonly #http: HttpService\n\t#accessToken: string | undefined\n\t#accessTokenExpiresAt = 0\n\t#graphToken: string | undefined\n\t#graphTokenExpiresAt = 0\n\n\tconstructor(auth: TeamsAuth, options: TeamsClientOptions = {}) {\n\t\tconst parsed = teamsAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid Teams auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#auth = parsed.data\n\t\tthis.#http = new HttpService({\n\t\t\t...options,\n\t\t\tlabel: 'Teams'\n\t\t})\n\t}\n\n\tstatic fromContext(ctx: ToolContext): TeamsClient {\n\t\tconst auth = requireAuth(ctx, teamsAuthSchema)\n\t\treturn new TeamsClient(auth, {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\tasync #ensureAccessToken(): Promise<string> {\n\t\tconst now = Date.now()\n\t\tif (this.#accessToken && now < this.#accessTokenExpiresAt - 60_000) {\n\t\t\treturn this.#accessToken\n\t\t}\n\t\ttry {\n\t\t\tconst { data } = await this.#http.post(\n\t\t\t\tbotframeworkTokenUrl(this.#auth.tenant_id),\n\t\t\t\tbotframeworkTokenBody(this.#auth),\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Teams token',\n\t\t\t\t\theaders: { 'Content-Type': 'application/x-www-form-urlencoded' }\n\t\t\t\t}\n\t\t\t)\n\t\t\tconst token = parseAccessToken(data)\n\t\t\tthis.#accessToken = token.access_token\n\t\t\tthis.#accessTokenExpiresAt = now + token.expires_in * 1000\n\t\t\treturn token.access_token\n\t\t} catch (error) {\n\t\t\tthrowTeamsTransportError('Teams token', error)\n\t\t}\n\t}\n\n\tasync #postActivity(\n\t\tlabel: string,\n\t\turl: string,\n\t\tbody: Record<string, unknown>,\n\t\theaders: Record<string, string>\n\t): Promise<Awaited<ReturnType<HttpService['post']>>> {\n\t\ttry {\n\t\t\treturn await this.#http.post(url, body, { label, headers, noThrow: true })\n\t\t} catch (error) {\n\t\t\tthrowTeamsTransportError(label, error)\n\t\t}\n\t}\n\n\tasync #putActivity(\n\t\tlabel: string,\n\t\turl: string,\n\t\tbody: Record<string, unknown>,\n\t\theaders: Record<string, string>\n\t): Promise<Awaited<ReturnType<HttpService['put']>>> {\n\t\ttry {\n\t\t\treturn await this.#http.put(url, body, { label, headers, noThrow: true })\n\t\t} catch (error) {\n\t\t\tthrowTeamsTransportError(label, error)\n\t\t}\n\t}\n\n\tasync #authHeaders(): Promise<Record<string, string>> {\n\t\tconst token = await this.#ensureAccessToken()\n\t\treturn {\n\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t'Content-Type': 'application/json'\n\t\t}\n\t}\n\n\t/** POST {service_url}/v3/conversations/{chat_id}/activities — type message */\n\tasync sendText(input: TeamsSendTextInput): Promise<TeamsMessageOutput> {\n\t\tconst headers = await this.#authHeaders()\n\t\tconst url = conversationActivitiesPath(input.service_url, input.chat_id)\n\t\tconst body = buildMessageActivity({\n\t\t\ttext: input.text,\n\t\t\t...(input.reply_to_message_id && { reply_to_message_id: input.reply_to_message_id }),\n\t\t\t...(input.reply_markup !== undefined && { reply_markup: input.reply_markup })\n\t\t})\n\t\tconst res = await this.#postActivity('Teams sendText', url, body, headers)\n\t\tif (!res.ok) throwForStatus('Teams sendText', res.status, res.data)\n\t\treturn parseActivityId(res.data)\n\t}\n\n\t/** PUT {service_url}/v3/conversations/{chat_id}/activities/{message_id} */\n\tasync editText(input: TeamsEditTextInput): Promise<TeamsMessageOutput> {\n\t\tconst headers = await this.#authHeaders()\n\t\tconst url = conversationActivityPath(input.service_url, input.chat_id, input.message_id)\n\t\tconst body = buildMessageActivity({\n\t\t\ttext: input.text,\n\t\t\t...(input.reply_markup !== undefined && { reply_markup: input.reply_markup })\n\t\t})\n\t\tconst res = await this.#putActivity('Teams editText', url, body, headers)\n\t\tif (!res.ok) throwForStatus('Teams editText', res.status, res.data)\n\t\t// Update may return empty body; preserve the edited activity id.\n\t\tif (res.data === undefined || res.data === null || res.data === '') {\n\t\t\treturn { message_id: input.message_id }\n\t\t}\n\t\ttry {\n\t\t\treturn parseActivityId(res.data)\n\t\t} catch {\n\t\t\treturn { message_id: input.message_id }\n\t\t}\n\t}\n\n\t/** POST typing activity (all ChannelTransport actions map to typing). */\n\tasync sendChatAction(input: TeamsSendChatActionInput): Promise<void> {\n\t\tconst headers = await this.#authHeaders()\n\t\tconst url = conversationActivitiesPath(input.service_url, input.chat_id)\n\t\tconst res = await this.#postActivity('Teams sendChatAction', url, buildTypingActivity(), headers)\n\t\tif (!res.ok) throwForStatus('Teams sendChatAction', res.status, res.data)\n\t}\n\n\t/**\n\t * Add a reaction via Microsoft Graph when `tenant_id` is bound on auth.\n\t * Without `tenant_id`, succeeds as a no-op (Bot Framework has no reaction write).\n\t * Channel messages: pass `team_id` + `channel_id`; otherwise uses chat path with `chat_id`.\n\t */\n\tasync setReaction(input: TeamsSetReactionInput): Promise<void> {\n\t\tif (!this.#auth.tenant_id) return\n\t\tawait this.#graphReaction('setReaction', input)\n\t}\n\n\t/**\n\t * Remove a reaction via Graph when `tenant_id` is bound. Requires `emoji` matching setReaction.\n\t * Without `tenant_id`, succeeds as a no-op.\n\t */\n\tasync clearReaction(input: TeamsClearReactionInput): Promise<void> {\n\t\tif (!this.#auth.tenant_id) return\n\t\tif (!input.emoji) {\n\t\t\tthrow new ToolError('Teams clearReaction requires emoji when using Graph reactions (tenant_id bound)', {\n\t\t\t\tcode: 'bad_input'\n\t\t\t})\n\t\t}\n\t\tawait this.#graphReaction('unsetReaction', {\n\t\t\tchat_id: input.chat_id,\n\t\t\tmessage_id: input.message_id,\n\t\t\temoji: input.emoji,\n\t\t\t...(input.team_id && { team_id: input.team_id }),\n\t\t\t...(input.channel_id && { channel_id: input.channel_id })\n\t\t})\n\t}\n\n\tasync #ensureGraphToken(): Promise<string> {\n\t\tconst tenantId = this.#auth.tenant_id\n\t\tif (!tenantId) {\n\t\t\tthrow new ToolError('Teams Graph reactions require tenant_id on auth', { code: 'bad_auth' })\n\t\t}\n\t\tconst now = Date.now()\n\t\tif (this.#graphToken && now < this.#graphTokenExpiresAt - 60_000) {\n\t\t\treturn this.#graphToken\n\t\t}\n\t\ttry {\n\t\t\tconst { data } = await this.#http.post(botframeworkTokenUrl(tenantId), graphTokenBody(this.#auth), {\n\t\t\t\tlabel: 'Teams Graph token',\n\t\t\t\theaders: { 'Content-Type': 'application/x-www-form-urlencoded' }\n\t\t\t})\n\t\t\tconst token = parseAccessToken(data)\n\t\t\tthis.#graphToken = token.access_token\n\t\t\tthis.#graphTokenExpiresAt = now + token.expires_in * 1000\n\t\t\treturn token.access_token\n\t\t} catch (error) {\n\t\t\tthrowTeamsTransportError('Teams Graph token', error)\n\t\t}\n\t}\n\n\tasync #graphReaction(\n\t\top: 'setReaction' | 'unsetReaction',\n\t\tinput: {\n\t\t\tchat_id: string\n\t\t\tmessage_id: string\n\t\t\temoji: string\n\t\t\tteam_id?: string | undefined\n\t\t\tchannel_id?: string | undefined\n\t\t}\n\t): Promise<void> {\n\t\tconst token = await this.#ensureGraphToken()\n\t\tconst url = graphReactionUrl({\n\t\t\tchat_id: input.chat_id,\n\t\t\tmessage_id: input.message_id,\n\t\t\top,\n\t\t\t...(input.team_id && { team_id: input.team_id }),\n\t\t\t...(input.channel_id && { channel_id: input.channel_id })\n\t\t})\n\t\tconst label = op === 'setReaction' ? 'Teams Graph setReaction' : 'Teams Graph unsetReaction'\n\t\tlet res: Awaited<ReturnType<HttpService['post']>>\n\t\ttry {\n\t\t\tres = await this.#http.post(\n\t\t\t\turl,\n\t\t\t\t{ reactionType: toGraphReactionType(input.emoji) },\n\t\t\t\t{\n\t\t\t\t\tlabel,\n\t\t\t\t\tnoThrow: true,\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAuthorization: `Bearer ${token}`,\n\t\t\t\t\t\t'Content-Type': 'application/json; charset=utf-8'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t} catch (error) {\n\t\t\tthrowTeamsTransportError(label, error)\n\t\t}\n\t\tif (!res.ok) throwForStatus(label, res.status, res.data)\n\t}\n\n\t/** POST message with data-URI attachment (small files). */\n\tasync sendMedia(input: TeamsSendMediaInput): Promise<TeamsMessageOutput> {\n\t\tconst headers = await this.#authHeaders()\n\t\tconst url = conversationActivitiesPath(input.service_url, input.chat_id)\n\t\tconst body = buildMediaActivity(input)\n\t\tconst res = await this.#postActivity('Teams sendMedia', url, body, headers)\n\t\tif (!res.ok) throwForStatus('Teams sendMedia', res.status, res.data)\n\t\treturn parseActivityId(res.data)\n\t}\n\n\t/** GET content URL (file_id) with bearer token; return body_base64. */\n\tasync downloadFile(input: TeamsDownloadFileInput): Promise<TeamsDownloadFileOutput> {\n\t\tconst token = await this.#ensureAccessToken()\n\t\tlet res: Awaited<ReturnType<HttpService['bytes']>>\n\t\ttry {\n\t\t\tres = await this.#http.bytes('GET', input.file_id, {\n\t\t\t\tlabel: 'Teams downloadFile',\n\t\t\t\theaders: { Authorization: `Bearer ${token}` },\n\t\t\t\tnoThrow: true\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tthrowTeamsTransportError('Teams downloadFile', error)\n\t\t}\n\t\tif (!res.ok) {\n\t\t\tthrow new TeamsClientError({\n\t\t\t\tmessage: `Teams downloadFile failed with HTTP ${res.status}`,\n\t\t\t\tfailureKind:\n\t\t\t\t\tres.status === 400 || res.status === 401 || res.status === 403 || res.status === 404\n\t\t\t\t\t\t? 'definite_rejection'\n\t\t\t\t\t\t: 'outcome_unknown',\n\t\t\t\tmethod: 'Teams downloadFile',\n\t\t\t\tstatus: res.status\n\t\t\t})\n\t\t}\n\t\treturn parseDownload(input, res.bytes)\n\t}\n\n\t/**\n\t * Answer an invoke callback. When `callback_query_id` is an absolute HTTP(S)\n\t * reply path, POST an invokeResponse there. Otherwise succeed as a no-op\n\t * (host may have already completed the HTTP invoke response).\n\t */\n\tasync answerCallback(input: TeamsAnswerCallbackInput): Promise<void> {\n\t\tif (!isAbsoluteHttpUrl(input.callback_query_id)) {\n\t\t\treturn\n\t\t}\n\t\tconst headers = await this.#authHeaders()\n\t\tconst body = buildInvokeResponseBody({\n\t\t\t...(input.text && { text: input.text }),\n\t\t\t...(input.show_alert !== undefined && { show_alert: input.show_alert })\n\t\t})\n\t\tconst res = await this.#postActivity('Teams answerCallback', input.callback_query_id, body, headers)\n\t\tif (!res.ok) throwForStatus('Teams answerCallback', res.status, res.data)\n\t}\n\n\t/** Identity from bound auth (no connector call). */\n\tasync getBot(): Promise<TeamsGetBotOutput> {\n\t\treturn botIdentityFromAuth(this.#auth.app_id)\n\t}\n}\n\nexport { isTeamsDefiniteRejection, isTeamsOutcomeUnknown, TeamsClientError }\n","import { z } from 'zod'\n\nimport { defineModule, defineTool } from '../../core/define'\nimport { TeamsClient } from './client'\nimport {\n\tteamsAnswerCallbackInputSchema,\n\tteamsAuthSchema,\n\tteamsClearReactionInputSchema,\n\tteamsDownloadFileInputSchema,\n\tteamsDownloadFileOutputSchema,\n\tteamsEditTextInputSchema,\n\tteamsGetBotOutputSchema,\n\tteamsMessageOutputSchema,\n\tteamsOkOutputSchema,\n\tteamsSendChatActionInputSchema,\n\tteamsSendMediaInputSchema,\n\tteamsSendTextInputSchema,\n\tteamsSetReactionInputSchema\n} from './contracts'\n\nconst emptyInputSchema = z.object({}).describe('No input fields')\n\nexport const teamsSendTextTool = defineTool({\n\tid: 'teams-send-text',\n\tname: 'teamsSendText',\n\tdescription:\n\t\t'Send a text message to a Microsoft Teams conversation via Bot Framework. Requires service_url from the inbound activity. Returns the new activity message_id.',\n\tinputSchema: teamsSendTextInputSchema,\n\toutputSchema: teamsMessageOutputSchema,\n\tsideEffect: 'send',\n\truntime: 'both',\n\texecute: async (input, ctx) => TeamsClient.fromContext(ctx).sendText(input)\n})\n\nexport const teamsEditTextTool = defineTool({\n\tid: 'teams-edit-text',\n\tname: 'teamsEditText',\n\tdescription:\n\t\t'Edit the text of an existing Teams activity. Used for progressive live updates and corrections. Requires service_url.',\n\tinputSchema: teamsEditTextInputSchema,\n\toutputSchema: teamsMessageOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => TeamsClient.fromContext(ctx).editText(input)\n})\n\nexport const teamsSendChatActionTool = defineTool({\n\tid: 'teams-send-chat-action',\n\tname: 'teamsSendChatAction',\n\tdescription:\n\t\t'Show a typing indicator in a Teams conversation (Bot Framework typing activity). All action values map to typing. Requires service_url.',\n\tinputSchema: teamsSendChatActionInputSchema,\n\toutputSchema: teamsOkOutputSchema,\n\tsideEffect: 'none',\n\truntime: 'both',\n\texecute: async (input, ctx) => {\n\t\tawait TeamsClient.fromContext(ctx).sendChatAction(input)\n\t\treturn { ok: true }\n\t}\n})\n\nexport const teamsSetReactionTool = defineTool({\n\tid: 'teams-set-reaction',\n\tname: 'teamsSetReaction',\n\tdescription:\n\t\t'Set a reaction on a Teams message. Bot Framework reaction support is limited; this call succeeds as a presentation no-op so channel seams stay uniform.',\n\tinputSchema: teamsSetReactionInputSchema,\n\toutputSchema: teamsOkOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => {\n\t\tawait TeamsClient.fromContext(ctx).setReaction(input)\n\t\treturn { ok: true }\n\t}\n})\n\nexport const teamsClearReactionTool = defineTool({\n\tid: 'teams-clear-reaction',\n\tname: 'teamsClearReaction',\n\tdescription:\n\t\t'Clear reactions on a Teams message. Bot Framework reaction support is limited; this call succeeds as a presentation no-op.',\n\tinputSchema: teamsClearReactionInputSchema,\n\toutputSchema: teamsOkOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => {\n\t\tawait TeamsClient.fromContext(ctx).clearReaction(input)\n\t\treturn { ok: true }\n\t}\n})\n\nexport const teamsSendMediaTool = defineTool({\n\tid: 'teams-send-media',\n\tname: 'teamsSendMedia',\n\tdescription:\n\t\t'Send one photo or document to a Teams conversation as a Bot Framework data-URI attachment (small files). Requires service_url.',\n\tinputSchema: teamsSendMediaInputSchema,\n\toutputSchema: teamsMessageOutputSchema,\n\tsideEffect: 'send',\n\truntime: 'both',\n\texecute: async (input, ctx) => TeamsClient.fromContext(ctx).sendMedia(input)\n})\n\nexport const teamsDownloadFileTool = defineTool({\n\tid: 'teams-download-file',\n\tname: 'teamsDownloadFile',\n\tdescription:\n\t\t'Download a Teams/Bot Framework file by content URL (file_id) and return the body as base64 with optional size and name.',\n\tinputSchema: teamsDownloadFileInputSchema,\n\toutputSchema: teamsDownloadFileOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (input, ctx) => TeamsClient.fromContext(ctx).downloadFile(input)\n})\n\nexport const teamsAnswerCallbackTool = defineTool({\n\tid: 'teams-answer-callback',\n\tname: 'teamsAnswerCallback',\n\tdescription:\n\t\t'Acknowledge a Teams invoke. When callback_query_id is an absolute reply URL, POSTs an invokeResponse; otherwise succeeds as a no-op.',\n\tinputSchema: teamsAnswerCallbackInputSchema,\n\toutputSchema: teamsOkOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'both',\n\texecute: async (input, ctx) => {\n\t\tawait TeamsClient.fromContext(ctx).answerCallback(input)\n\t\treturn { ok: true }\n\t}\n})\n\nexport const teamsGetBotTool = defineTool({\n\tid: 'teams-get-bot',\n\tname: 'teamsGetBot',\n\tdescription: 'Return the current Microsoft Teams bot identity, including bot_id, username, and display_name.',\n\tinputSchema: emptyInputSchema,\n\toutputSchema: teamsGetBotOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'both',\n\texecute: async (_input, ctx) => TeamsClient.fromContext(ctx).getBot()\n})\n\nexport const teamsModule = defineModule({\n\tid: 'teams',\n\ttitle: 'Microsoft Teams',\n\tdescription:\n\t\t'Microsoft Teams tools for text, media, typing, file download, invoke callbacks, and bot identity. Conversation actions require service_url from the active conversation; reaction actions report unsupported behavior.',\n\truntime: 'both',\n\tauth: { type: 'custom', schema: teamsAuthSchema },\n\tcategories: ['messaging', 'chat'],\n\tclassification: 'pii',\n\ttags: ['teams', 'bot-framework'],\n\ttools: [\n\t\tteamsSendTextTool,\n\t\tteamsEditTextTool,\n\t\tteamsSendChatActionTool,\n\t\tteamsSetReactionTool,\n\t\tteamsClearReactionTool,\n\t\tteamsSendMediaTool,\n\t\tteamsDownloadFileTool,\n\t\tteamsAnswerCallbackTool,\n\t\tteamsGetBotTool\n\t]\n})\n","import { isPlainObject, isString } from 'es-toolkit'\n\n/**\n * Host-owned Bot Framework JWT validation is authoritative.\n * This helper only checks that an Authorization Bearer token is present\n * (length > 0 after the scheme). Do not treat a true result as cryptographic\n * authenticity.\n */\nexport function verifyTeamsAuthHeader(headerValue: string | null | undefined): boolean {\n\tif (!headerValue) return false\n\tconst match = /^Bearer\\s+(\\S+)$/i.exec(headerValue.trim())\n\treturn Boolean(match?.[1] && match[1].length > 0)\n}\n\nexport type TeamsInboundMedia = {\n\tkind: string\n\tref?: string\n\tmedia_type?: string\n\tfile_name?: string\n\tfile_size?: number\n}\n\n/** Package-owned normalized inbound event for host routing. */\nexport type TeamsInboundEvent = {\n\tchannel: 'teams'\n\tevent_id: string\n\tchat_id: string\n\tuser_id?: string\n\tmessage_id?: string\n\ttext?: string\n\tmedia?: TeamsInboundMedia[]\n\treply_to?: string\n\traw_type: string\n\treceived_at: string\n\t/** Connector service URL for outbound replies in this conversation. */\n\tservice_url?: string\n\t/** Invoke id / reply path when raw_type is invoke. */\n\tcallback_query_id?: string\n\t/** Opaque invoke value / action data when present. */\n\tcallback_data?: string\n\tusername?: string\n\tchat_type?: string\n}\n\nexport type ParseTeamsActivityResult = { ok: true; event: TeamsInboundEvent } | { ok: false; reason: string }\n\n/** True when value looks like a Bot Framework activity object. */\nexport function isTeamsActivity(value: unknown): value is Record<string, unknown> {\n\tif (!isPlainObject(value)) return false\n\tif (!isString(value['type']) || value['type'].length === 0) return false\n\tconst conversation = value['conversation']\n\treturn isPlainObject(conversation) && isString(conversation['id']) && conversation['id'].length > 0\n}\n\n/**\n * Parse one raw Bot Framework Activity into a normalized inbound event.\n * Returns ok:false for payloads the pack does not surface.\n */\nexport function parseTeamsActivity(body: unknown, options?: { received_at?: string }): ParseTeamsActivityResult {\n\tif (!isPlainObject(body)) {\n\t\treturn { ok: false, reason: 'activity_not_object' }\n\t}\n\tif (!isString(body['type']) || body['type'].length === 0) {\n\t\treturn { ok: false, reason: 'missing_type' }\n\t}\n\n\tconst conversation = body['conversation']\n\tif (!isPlainObject(conversation) || !isString(conversation['id']) || conversation['id'].length === 0) {\n\t\treturn { ok: false, reason: 'missing_conversation' }\n\t}\n\n\tconst receivedAt = options?.received_at ?? new Date().toISOString()\n\tconst rawType = body['type']\n\tconst activityId = isString(body['id']) && body['id'].length > 0 ? body['id'] : undefined\n\tconst eventId = activityId ?? `${rawType}:${conversation['id']}:${receivedAt}`\n\tconst serviceUrl = isString(body['serviceUrl']) && body['serviceUrl'].length > 0 ? body['serviceUrl'] : undefined\n\n\tconst from = body['from']\n\tconst userId = isPlainObject(from) && isString(from['id']) ? from['id'] : undefined\n\tconst username = isPlainObject(from) && isString(from['name']) ? from['name'] : undefined\n\tconst text = firstString(body['text'], body['summary'])\n\tconst replyTo = isString(body['replyToId']) && body['replyToId'].length > 0 ? body['replyToId'] : undefined\n\tconst media = collectMedia(body)\n\tconst conversationType =\n\t\tisString(conversation['conversationType']) && conversation['conversationType'].length > 0\n\t\t\t? conversation['conversationType']\n\t\t\t: undefined\n\n\tif (rawType === 'invoke') {\n\t\tconst callbackData = encodeCallbackData(body['value'])\n\t\tconst event: TeamsInboundEvent = {\n\t\t\tchannel: 'teams',\n\t\t\tevent_id: eventId,\n\t\t\tchat_id: conversation['id'],\n\t\t\traw_type: 'invoke',\n\t\t\treceived_at: receivedAt,\n\t\t\tcallback_query_id: activityId ?? eventId,\n\t\t\t...(userId && { user_id: userId }),\n\t\t\t...(username && { username }),\n\t\t\t...(activityId && { message_id: activityId }),\n\t\t\t...(callbackData && { callback_data: callbackData }),\n\t\t\t...(serviceUrl && { service_url: serviceUrl }),\n\t\t\t...(conversationType && { chat_type: conversationType })\n\t\t}\n\t\treturn { ok: true, event }\n\t}\n\n\tif (rawType === 'message' || rawType === 'messageUpdate') {\n\t\tif (!text && media.length === 0) {\n\t\t\treturn { ok: false, reason: 'empty_message' }\n\t\t}\n\t\tconst event: TeamsInboundEvent = {\n\t\t\tchannel: 'teams',\n\t\t\tevent_id: eventId,\n\t\t\tchat_id: conversation['id'],\n\t\t\traw_type: rawType,\n\t\t\treceived_at: receivedAt,\n\t\t\t...(userId && { user_id: userId }),\n\t\t\t...(username && { username }),\n\t\t\t...(activityId && { message_id: activityId }),\n\t\t\t...(text && { text }),\n\t\t\t...(media.length > 0 && { media }),\n\t\t\t...(replyTo && { reply_to: replyTo }),\n\t\t\t...(serviceUrl && { service_url: serviceUrl }),\n\t\t\t...(conversationType && { chat_type: conversationType })\n\t\t}\n\t\treturn { ok: true, event }\n\t}\n\n\t// Surface conversationUpdate / typing / others with minimal fields for host filters.\n\tconst event: TeamsInboundEvent = {\n\t\tchannel: 'teams',\n\t\tevent_id: eventId,\n\t\tchat_id: conversation['id'],\n\t\traw_type: rawType,\n\t\treceived_at: receivedAt,\n\t\t...(userId && { user_id: userId }),\n\t\t...(username && { username }),\n\t\t...(activityId && { message_id: activityId }),\n\t\t...(text && { text }),\n\t\t...(serviceUrl && { service_url: serviceUrl }),\n\t\t...(conversationType && { chat_type: conversationType })\n\t}\n\treturn { ok: true, event }\n}\n\nfunction firstString(...values: unknown[]): string | undefined {\n\tfor (const value of values) {\n\t\tif (isString(value) && value.length > 0) return value\n\t}\n\treturn undefined\n}\n\nfunction encodeCallbackData(value: unknown): string | undefined {\n\tif (isString(value) && value.length > 0) return value\n\tif (isPlainObject(value)) {\n\t\ttry {\n\t\t\treturn JSON.stringify(value)\n\t\t} catch {\n\t\t\treturn undefined\n\t\t}\n\t}\n\treturn undefined\n}\n\nfunction collectMedia(activity: Record<string, unknown>): TeamsInboundMedia[] {\n\tconst out: TeamsInboundMedia[] = []\n\tconst attachments = activity['attachments']\n\tif (!Array.isArray(attachments)) return out\n\n\tfor (const item of attachments) {\n\t\tif (!isPlainObject(item)) continue\n\t\tconst contentType = isString(item['contentType']) ? item['contentType'] : undefined\n\t\tconst contentUrl = isString(item['contentUrl']) ? item['contentUrl'] : undefined\n\t\tconst name = isString(item['name']) ? item['name'] : undefined\n\t\tif (!contentUrl && !contentType && !name) continue\n\t\tconst kind =\n\t\t\tcontentType && contentType.startsWith('image/')\n\t\t\t\t? 'photo'\n\t\t\t\t: contentType && contentType.startsWith('audio/')\n\t\t\t\t\t? 'audio'\n\t\t\t\t\t: contentType && contentType.startsWith('video/')\n\t\t\t\t\t\t? 'video'\n\t\t\t\t\t\t: 'document'\n\t\tout.push({\n\t\t\tkind,\n\t\t\t...(contentUrl && { ref: contentUrl }),\n\t\t\t...(contentType && { media_type: contentType }),\n\t\t\t...(name && { file_name: name })\n\t\t})\n\t}\n\treturn out\n}\n"],"mappings":"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"}
|