Skip to content

Commit fcd23b4

Browse files
authored
Delayed event management: split endpoints, no auth (#31183)
* Delayed event management: split endpoints, no auth Use the new js-sdk client methods for calling the dedicated, unauthenticated endpoints for each of the cancel/restart/send actions for updating a delayed event. Note that these methods are compatible with homeservers that support only the original endpoint where the update action is in the request body. * REPLACEME: pull in dependant js-sdk branch see matrix-org/matrix-js-sdk#5066 * Format with Prettier * Update matrix-js-sdk
1 parent 250d657 commit fcd23b4

5 files changed

Lines changed: 65 additions & 27 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132
"matrix-encrypt-attachment": "^1.0.3",
133133
"matrix-events-sdk": "0.0.1",
134134
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
135-
"matrix-widget-api": "^1.10.0",
135+
"matrix-widget-api": "^1.14.0",
136136
"memoize-one": "^6.0.0",
137137
"mime": "^4.0.4",
138138
"oidc-client-ts": "^3.0.1",

src/stores/widgets/StopGapWidgetDriver.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import {
2626
type IWidgetApiErrorResponseDataDetails,
2727
type ISearchUserDirectoryResult,
2828
type IGetMediaConfigResult,
29-
type UpdateDelayedEventAction,
3029
} from "matrix-widget-api";
3130
import {
3231
ClientEvent,
@@ -425,12 +424,34 @@ export class StopGapWidgetDriver extends WidgetDriver {
425424
/**
426425
* @experimental Part of MSC4140 & MSC4157
427426
*/
428-
public async updateDelayedEvent(delayId: string, action: UpdateDelayedEventAction): Promise<void> {
427+
public async cancelScheduledDelayedEvent(delayId: string): Promise<void> {
429428
const client = MatrixClientPeg.get();
430429

431430
if (!client) throw new Error("Not in a room or not attached to a client");
432431

433-
await client._unstable_updateDelayedEvent(delayId, action);
432+
await client._unstable_cancelScheduledDelayedEvent(delayId);
433+
}
434+
435+
/**
436+
* @experimental Part of MSC4140 & MSC4157
437+
*/
438+
public async restartScheduledDelayedEvent(delayId: string): Promise<void> {
439+
const client = MatrixClientPeg.get();
440+
441+
if (!client) throw new Error("Not in a room or not attached to a client");
442+
443+
await client._unstable_restartScheduledDelayedEvent(delayId);
444+
}
445+
446+
/**
447+
* @experimental Part of MSC4140 & MSC4157
448+
*/
449+
public async sendScheduledDelayedEvent(delayId: string): Promise<void> {
450+
const client = MatrixClientPeg.get();
451+
452+
if (!client) throw new Error("Not in a room or not attached to a client");
453+
454+
await client._unstable_sendScheduledDelayedEvent(delayId);
434455
}
435456

436457
/**

test/test-utils/test-utils.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,9 @@ export function createTestClient(): MatrixClient {
276276

277277
_unstable_sendDelayedEvent: jest.fn(),
278278
_unstable_sendDelayedStateEvent: jest.fn(),
279-
_unstable_updateDelayedEvent: jest.fn(),
279+
_unstable_cancelScheduledDelayedEvent: jest.fn(),
280+
_unstable_restartScheduledDelayedEvent: jest.fn(),
281+
_unstable_sendScheduledDelayedEvent: jest.fn(),
280282

281283
searchUserDirectory: jest.fn().mockResolvedValue({ limited: false, results: [] }),
282284
setDeviceVerified: jest.fn(),

test/unit-tests/stores/widgets/StopGapWidgetDriver-test.ts

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import {
2727
SimpleObservable,
2828
OpenIDRequestState,
2929
type IOpenIDUpdate,
30-
UpdateDelayedEventAction,
3130
} from "matrix-widget-api";
3231
import {
3332
type ApprovalOpts,
@@ -554,24 +553,40 @@ describe("StopGapWidgetDriver", () => {
554553
driver = mkDefaultDriver();
555554
});
556555

557-
it("updates delayed events", async () => {
558-
client._unstable_updateDelayedEvent.mockResolvedValue({});
559-
for (const action of [
560-
UpdateDelayedEventAction.Cancel,
561-
UpdateDelayedEventAction.Restart,
562-
UpdateDelayedEventAction.Send,
563-
]) {
564-
await expect(driver.updateDelayedEvent("id", action)).resolves.toBeUndefined();
565-
expect(client._unstable_updateDelayedEvent).toHaveBeenCalledWith("id", action);
566-
}
556+
it("can cancel scheduled delayed events", async () => {
557+
client._unstable_cancelScheduledDelayedEvent.mockResolvedValue({});
558+
await expect(driver.cancelScheduledDelayedEvent("id")).resolves.toBeUndefined();
559+
expect(client._unstable_cancelScheduledDelayedEvent).toHaveBeenCalledWith("id");
560+
});
561+
562+
it("can restart scheduled delayed events", async () => {
563+
client._unstable_restartScheduledDelayedEvent.mockResolvedValue({});
564+
await expect(driver.restartScheduledDelayedEvent("id")).resolves.toBeUndefined();
565+
expect(client._unstable_restartScheduledDelayedEvent).toHaveBeenCalledWith("id");
566+
});
567+
568+
it("can send scheduled delayed events", async () => {
569+
client._unstable_sendScheduledDelayedEvent.mockResolvedValue({});
570+
await expect(driver.sendScheduledDelayedEvent("id")).resolves.toBeUndefined();
571+
expect(client._unstable_sendScheduledDelayedEvent).toHaveBeenCalledWith("id");
567572
});
568573

569-
it("fails to update delayed events", async () => {
574+
it("fails to cancel scheduled delayed events", async () => {
575+
const errorMessage = "Cannot cancel this delayed event";
576+
client._unstable_cancelScheduledDelayedEvent.mockRejectedValue(new Error(errorMessage));
577+
await expect(driver.cancelScheduledDelayedEvent("id")).rejects.toThrow(errorMessage);
578+
});
579+
580+
it("fails to restart scheduled delayed events", async () => {
570581
const errorMessage = "Cannot restart this delayed event";
571-
client._unstable_updateDelayedEvent.mockRejectedValue(new Error(errorMessage));
572-
await expect(driver.updateDelayedEvent("id", UpdateDelayedEventAction.Restart)).rejects.toThrow(
573-
errorMessage,
574-
);
582+
client._unstable_restartScheduledDelayedEvent.mockRejectedValue(new Error(errorMessage));
583+
await expect(driver.restartScheduledDelayedEvent("id")).rejects.toThrow(errorMessage);
584+
});
585+
586+
it("fails to send scheduled delayed events", async () => {
587+
const errorMessage = "Cannot send this delayed event";
588+
client._unstable_sendScheduledDelayedEvent.mockRejectedValue(new Error(errorMessage));
589+
await expect(driver.sendScheduledDelayedEvent("id")).rejects.toThrow(errorMessage);
575590
});
576591
});
577592

yarn.lock

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9659,7 +9659,7 @@ matrix-events-sdk@0.0.1:
96599659

96609660
"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop":
96619661
version "39.1.2"
9662-
resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/b489bb15cf3f5de8024a3e31ccb36cf294f82887"
9662+
resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/df88edfda0aa00ad1d574e367f024db9a927e96b"
96639663
dependencies:
96649664
"@babel/runtime" "^7.12.5"
96659665
"@matrix-org/matrix-sdk-crypto-wasm" "^15.3.0"
@@ -9669,7 +9669,7 @@ matrix-events-sdk@0.0.1:
96699669
jwt-decode "^4.0.0"
96709670
loglevel "^1.9.2"
96719671
matrix-events-sdk "0.0.1"
9672-
matrix-widget-api "^1.10.0"
9672+
matrix-widget-api "^1.14.0"
96739673
oidc-client-ts "^3.0.1"
96749674
p-retry "7"
96759675
sdp-transform "^3.0.0"
@@ -9687,10 +9687,10 @@ matrix-web-i18n@^3.2.1, matrix-web-i18n@^3.4.0:
96879687
minimist "^1.2.8"
96889688
walk "^2.3.15"
96899689

9690-
matrix-widget-api@^1.10.0:
9691-
version "1.13.1"
9692-
resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.13.1.tgz#5b1caeed2fc58148bcd2984e0546d2d06a1713ad"
9693-
integrity sha512-mkOHUVzaN018TCbObfGOSaMW2GoUxOfcxNNlTVx5/HeMk3OSQPQM0C9oEME5Liiv/dBUoSrEB64V8wF7e/gb1w==
9690+
matrix-widget-api@^1.14.0:
9691+
version "1.14.0"
9692+
resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.14.0.tgz#aa90c40ace27d3165299f7dbc760a53001ce1446"
9693+
integrity sha512-DDvZGOQhI/rilPWg5VlLN7pHIsPt0Jt14lsuHDP+KU+fmpAQNITJ6aIld1ZoXWsrVGv2PS3x6K/MHtfruIOQJQ==
96949694
dependencies:
96959695
"@types/events" "^3.0.0"
96969696
events "^3.2.0"

0 commit comments

Comments
 (0)