diff --git a/extensions/msteams/src/attachments.test.ts b/extensions/msteams/src/attachments.test.ts index 81802477344..9945e9dab04 100644 --- a/extensions/msteams/src/attachments.test.ts +++ b/extensions/msteams/src/attachments.test.ts @@ -164,7 +164,9 @@ const IMAGE_ATTACHMENT = { contentType: CONTENT_TYPE_IMAGE_PNG, contentUrl: TEST const PNG_BUFFER = Buffer.from("png"); const PNG_BASE64 = PNG_BUFFER.toString("base64"); const PDF_BUFFER = Buffer.from("pdf"); -const createTokenProvider = () => ({ getAccessToken: vi.fn(async () => "token") }); +const createTokenProvider = (token = "token") => ({ + getAccessToken: vi.fn(async () => token), +}); const asSingleItemArray = (value: T) => [value]; const withLabel = (label: string, fields: T): T & LabeledCase => ({ label, diff --git a/extensions/msteams/src/attachments/graph.ts b/extensions/msteams/src/attachments/graph.ts index 1097d0caeb1..3a026680dac 100644 --- a/extensions/msteams/src/attachments/graph.ts +++ b/extensions/msteams/src/attachments/graph.ts @@ -313,6 +313,35 @@ export async function downloadMSTeamsGraphMedia(params: { } catch { // Ignore SharePoint download failures. } + const encodedUrl = Buffer.from(shareUrl).toString("base64url"); + const sharesUrl = `${GRAPH_ROOT}/shares/u!${encodedUrl}/driveItem/content`; + + const media = await downloadAndStoreMSTeamsRemoteMedia({ + url: sharesUrl, + filePathHint: name, + maxBytes: params.maxBytes, + contentTypeHint: "application/octet-stream", + preserveFilenames: params.preserveFilenames, + fetchImpl: async (input, init) => { + const requestUrl = resolveRequestUrl(input); + const headers = new Headers(init?.headers); + headers.set("Authorization", `Bearer ${accessToken}`); + return await safeFetch({ + url: requestUrl, + allowHosts, + authorizationAllowHosts: params.authAllowHosts, + fetchFn, + requestInit: { + ...init, + headers, + }, + }); + }, + }); + sharePointMedia.push(media); + downloadedReferenceUrls.add(shareUrl); + } catch { + // Ignore SharePoint download failures. } } } finally {