Spaces:
Running
Running
| /** | |
| * Native Teams file card attachments for Bot Framework. | |
| * | |
| * The Bot Framework SDK supports `application/vnd.microsoft.teams.card.file.info` | |
| * content type which produces native Teams file cards. | |
| * | |
| * @see https://learn.microsoft.com/en-us/microsoftteams/platform/bots/how-to/bots-filesv4 | |
| */ | |
| import type { DriveItemProperties } from "./graph-upload.js"; | |
| /** | |
| * Build a native Teams file card attachment for Bot Framework. | |
| * | |
| * This uses the `application/vnd.microsoft.teams.card.file.info` content type | |
| * which is supported by Bot Framework and produces native Teams file cards | |
| * (the same display as when a user manually shares a file). | |
| * | |
| * @param file - DriveItem properties from getDriveItemProperties() | |
| * @returns Attachment object for Bot Framework sendActivity() | |
| */ | |
| export function buildTeamsFileInfoCard(file: DriveItemProperties): { | |
| contentType: string; | |
| contentUrl: string; | |
| name: string; | |
| content: { | |
| uniqueId: string; | |
| fileType: string; | |
| }; | |
| } { | |
| // Extract unique ID from eTag (remove quotes, braces, and version suffix) | |
| // Example eTag formats: "{GUID},version" or "\"{GUID},version\"" | |
| const rawETag = file.eTag; | |
| const uniqueId = | |
| rawETag | |
| .replace(/^["']|["']$/g, "") // Remove outer quotes | |
| .replace(/[{}]/g, "") // Remove curly braces | |
| .split(",")[0] ?? rawETag; // Take the GUID part before comma | |
| // Extract file extension from filename | |
| const lastDot = file.name.lastIndexOf("."); | |
| const fileType = lastDot >= 0 ? file.name.slice(lastDot + 1).toLowerCase() : ""; | |
| return { | |
| contentType: "application/vnd.microsoft.teams.card.file.info", | |
| contentUrl: file.webDavUrl, | |
| name: file.name, | |
| content: { | |
| uniqueId, | |
| fileType, | |
| }, | |
| }; | |
| } | |