fix(msteams): Send invokeResponse immediately to prevent Teams timeout (#27632)

Fix file upload 'Something went wrong' error by sending the invoke
acknowledgement before performing the file upload, rather than after.

Changes:
- Move invokeResponse to fire immediately upon receiving fileConsent/invoke
- Handle file upload asynchronously without blocking the response
- Update test to wait for async upload completion using vi.waitFor

This prevents Teams from timing out while waiting for the HTTP 200
acknowledgement during slow file uploads to OneDrive.

Fixes #27632
This commit is contained in:
AI Assistant
2026-02-26 22:42:34 +08:00
committed by Peter Steinberger
parent 7d9397099b
commit 09f4abdd61
2 changed files with 20 additions and 12 deletions

View File

@@ -148,18 +148,24 @@ describe("msteams file consent invoke authz", () => {
await handler.run?.(context);
expect(fileConsentMockState.uploadToConsentUrl).toHaveBeenCalledTimes(1);
// invokeResponse should be sent immediately
expect(sendActivity).toHaveBeenCalledWith(
expect.objectContaining({
type: "invokeResponse",
}),
);
// Wait for async upload to complete
await vi.waitFor(() => {
expect(fileConsentMockState.uploadToConsentUrl).toHaveBeenCalledTimes(1);
});
expect(fileConsentMockState.uploadToConsentUrl).toHaveBeenCalledWith(
expect.objectContaining({
url: "https://upload.example.com/put",
}),
);
expect(getPendingUpload(uploadId)).toBeUndefined();
expect(sendActivity).toHaveBeenCalledWith(
expect.objectContaining({
type: "invokeResponse",
}),
);
});
it("rejects cross-conversation accept invoke and keeps pending upload", async () => {