From ead847ec6a50d2f46207288b54fd85ad5858eaf3 Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Tue, 17 Jun 2025 13:16:01 +0100 Subject: [PATCH 1/7] Use MatrixEvent provided by us. --- .../src/api/custom-components.ts | 2 +- packages/element-web-module-api/src/index.ts | 1 + .../src/models/event.ts | 24 +++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 packages/element-web-module-api/src/models/event.ts diff --git a/packages/element-web-module-api/src/api/custom-components.ts b/packages/element-web-module-api/src/api/custom-components.ts index 794786538a..0c8a26712d 100644 --- a/packages/element-web-module-api/src/api/custom-components.ts +++ b/packages/element-web-module-api/src/api/custom-components.ts @@ -6,7 +6,7 @@ Please see LICENSE files in the repository root for full details. */ import type { JSX } from "react"; -import type { MatrixEvent } from "matrix-js-sdk/lib/matrix"; +import type { MatrixEvent } from "../models/event"; /** * Properties for all message components. diff --git a/packages/element-web-module-api/src/index.ts b/packages/element-web-module-api/src/index.ts index 4fbf15e9ba..0a7337ec21 100644 --- a/packages/element-web-module-api/src/index.ts +++ b/packages/element-web-module-api/src/index.ts @@ -9,6 +9,7 @@ export { ModuleLoader, ModuleIncompatibleError } from "./loader"; export type { Api, Module, ModuleFactory } from "./api"; export type { Config, ConfigApi } from "./api/config"; export type { I18nApi, Variables, Translations } from "./api/i18n"; +export type * from "./models/event"; export type * from "./api/custom-components"; export type * from "./api/legacy-modules"; export type * from "./api/legacy-customisations"; diff --git a/packages/element-web-module-api/src/models/event.ts b/packages/element-web-module-api/src/models/event.ts new file mode 100644 index 0000000000..d8c1cfad86 --- /dev/null +++ b/packages/element-web-module-api/src/models/event.ts @@ -0,0 +1,24 @@ +import type { EventStatus, IEventRelation, Membership } from "matrix-js-sdk"; + +/** + * Representation of a Matrix event. + * @beta + */ +export interface MatrixEvent { + // Properties provided by the spec + eventId: string; + roomId?: string; + sender: string; + content: Record; + unsigned: Record; + type: string; + stateKey?: string; + originServerTs: number; + redacts?: string; + + // Properties provided by the SDK + membership?: Membership; + status: EventStatus; + relation?: IEventRelation | null; + age?: number; +} From 89102aa9038d472b940bd2ec04b9f7ec7471dd7b Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Tue, 17 Jun 2025 13:27:50 +0100 Subject: [PATCH 2/7] fixup types --- packages/element-web-module-api/src/models/event.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/element-web-module-api/src/models/event.ts b/packages/element-web-module-api/src/models/event.ts index d8c1cfad86..28b9267529 100644 --- a/packages/element-web-module-api/src/models/event.ts +++ b/packages/element-web-module-api/src/models/event.ts @@ -5,7 +5,6 @@ import type { EventStatus, IEventRelation, Membership } from "matrix-js-sdk"; * @beta */ export interface MatrixEvent { - // Properties provided by the spec eventId: string; roomId?: string; sender: string; @@ -15,8 +14,6 @@ export interface MatrixEvent { stateKey?: string; originServerTs: number; redacts?: string; - - // Properties provided by the SDK membership?: Membership; status: EventStatus; relation?: IEventRelation | null; From 56d0c5656a08a077ce34dec0fdf11867f5360775 Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Tue, 17 Jun 2025 13:30:47 +0100 Subject: [PATCH 3/7] API update\ --- .../element-web-module-api.api.md | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index 754a4d2eec..3a8474d949 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -4,8 +4,10 @@ ```ts +import { EventStatus } from 'matrix-js-sdk'; +import { IEventRelation } from 'matrix-js-sdk'; import { JSX } from 'react'; -import { MatrixEvent } from 'matrix-js-sdk/lib/matrix'; +import { Membership } from 'matrix-js-sdk'; import { ModuleApi } from '@matrix-org/react-sdk-module-api'; import { Root } from 'react-dom/client'; import { RuntimeModule } from '@matrix-org/react-sdk-module-api'; @@ -62,6 +64,7 @@ export interface ConfigApi { // @public export interface CustomComponentsApi { + // Warning: (ae-incompatible-release-tags) The symbol "registerMessageRenderer" is marked as @public, but its signature references "MatrixEvent" which is marked as @beta // Warning: (ae-incompatible-release-tags) The symbol "registerMessageRenderer" is marked as @public, but its signature references "CustomMessageRenderFunction" which is marked as @alpha // Warning: (ae-incompatible-release-tags) The symbol "registerMessageRenderer" is marked as @public, but its signature references "CustomMessageRenderHints" which is marked as @alpha registerMessageRenderer(eventTypeOrFilter: string | ((mxEvent: MatrixEvent) => boolean), renderer: CustomMessageRenderFunction, hints?: CustomMessageRenderHints): void; @@ -134,6 +137,36 @@ export interface LifecycleCustomisations { onLoggedOutAndStorageCleared?(): void; } +// @beta +export interface MatrixEvent { + // (undocumented) + age?: number; + // (undocumented) + content: Record; + // (undocumented) + eventId: string; + // (undocumented) + membership?: Membership; + // (undocumented) + originServerTs: number; + // (undocumented) + redacts?: string; + // (undocumented) + relation?: IEventRelation | null; + // (undocumented) + roomId?: string; + // (undocumented) + sender: string; + // (undocumented) + stateKey?: string; + // (undocumented) + status: EventStatus; + // (undocumented) + type: string; + // (undocumented) + unsigned: Record; +} + // @alpha @deprecated (undocumented) export interface Media { // (undocumented) From b38f0f2dd20b5d6bedb9199b66a415c5d0ec5700 Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Tue, 17 Jun 2025 13:33:41 +0100 Subject: [PATCH 4/7] Drop js-sdk --- .../element-web-module-api/element-web-module-api.api.md | 9 --------- packages/element-web-module-api/package.json | 2 -- packages/element-web-module-api/src/models/event.ts | 5 ----- 3 files changed, 16 deletions(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index 3a8474d949..b2bda29ab8 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -4,10 +4,7 @@ ```ts -import { EventStatus } from 'matrix-js-sdk'; -import { IEventRelation } from 'matrix-js-sdk'; import { JSX } from 'react'; -import { Membership } from 'matrix-js-sdk'; import { ModuleApi } from '@matrix-org/react-sdk-module-api'; import { Root } from 'react-dom/client'; import { RuntimeModule } from '@matrix-org/react-sdk-module-api'; @@ -146,22 +143,16 @@ export interface MatrixEvent { // (undocumented) eventId: string; // (undocumented) - membership?: Membership; - // (undocumented) originServerTs: number; // (undocumented) redacts?: string; // (undocumented) - relation?: IEventRelation | null; - // (undocumented) roomId?: string; // (undocumented) sender: string; // (undocumented) stateKey?: string; // (undocumented) - status: EventStatus; - // (undocumented) type: string; // (undocumented) unsigned: Record; diff --git a/packages/element-web-module-api/package.json b/packages/element-web-module-api/package.json index ed0b67418a..b9432f9e01 100644 --- a/packages/element-web-module-api/package.json +++ b/packages/element-web-module-api/package.json @@ -38,7 +38,6 @@ "@types/react-dom": "^19.0.4", "@types/semver": "^7.5.8", "@vitest/coverage-v8": "^3.0.4", - "matrix-js-sdk": "^37.5.0", "matrix-web-i18n": "^3.3.0", "semver": "^7.6.3", "typescript": "^5.7.3", @@ -51,7 +50,6 @@ "@matrix-org/react-sdk-module-api": "*", "@types/react": "*", "@types/react-dom": "*", - "matrix-js-sdk": "*", "matrix-web-i18n": "*", "react": "^19" }, diff --git a/packages/element-web-module-api/src/models/event.ts b/packages/element-web-module-api/src/models/event.ts index 28b9267529..54c787362a 100644 --- a/packages/element-web-module-api/src/models/event.ts +++ b/packages/element-web-module-api/src/models/event.ts @@ -1,5 +1,3 @@ -import type { EventStatus, IEventRelation, Membership } from "matrix-js-sdk"; - /** * Representation of a Matrix event. * @beta @@ -14,8 +12,5 @@ export interface MatrixEvent { stateKey?: string; originServerTs: number; redacts?: string; - membership?: Membership; - status: EventStatus; - relation?: IEventRelation | null; age?: number; } From c49ac2677bb80d5bda47f66e9c536c4ce85f51d1 Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Tue, 17 Jun 2025 13:42:54 +0100 Subject: [PATCH 5/7] copyright --- packages/element-web-module-api/src/models/event.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/element-web-module-api/src/models/event.ts b/packages/element-web-module-api/src/models/event.ts index 54c787362a..709fb9e18c 100644 --- a/packages/element-web-module-api/src/models/event.ts +++ b/packages/element-web-module-api/src/models/event.ts @@ -1,3 +1,10 @@ +/* +Copyright 2025 New Vector Ltd. + +SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial +Please see LICENSE files in the repository root for full details. +*/ + /** * Representation of a Matrix event. * @beta From e2a89888c29029d9c6d2b34aab553d7acafa35b7 Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Tue, 17 Jun 2025 14:02:41 +0100 Subject: [PATCH 6/7] Mark MatrixEvent as @alpha and document. --- .../src/models/event.ts | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/packages/element-web-module-api/src/models/event.ts b/packages/element-web-module-api/src/models/event.ts index 709fb9e18c..b75606090e 100644 --- a/packages/element-web-module-api/src/models/event.ts +++ b/packages/element-web-module-api/src/models/event.ts @@ -6,18 +6,43 @@ Please see LICENSE files in the repository root for full details. */ /** - * Representation of a Matrix event. - * @beta + * Representation of a Matrix event, as specified by the client server specification. + * @alpha Subject to change. + * @see https://spec.matrix.org/v1.14/client-server-api/#room-event-format */ export interface MatrixEvent { + /** + * The event ID of this event. + */ eventId: string; - roomId?: string; + /** + * The room ID which contains this event. + */ + roomId: string; + /** + * The Matrix ID of the user who sent this event. + */ sender: string; + /** + * The content of the event. + * If the event was encrypted, this is the decrypted content. + */ content: Record; + /** + * Contains optional extra information about the event. + */ unsigned: Record; + /** + * The type of the event. + */ type: string; + /** + * The state key of the event. + * If this key is set, including `""` then the event is a state event. + */ stateKey?: string; + /** + * Timestamp (in milliseconds since the unix epoch) on originating homeserver when this event was sent. + */ originServerTs: number; - redacts?: string; - age?: number; } From 0d4a45d4472a493f25bf46f73afe49032797f3e2 Mon Sep 17 00:00:00 2001 From: Half-Shot Date: Tue, 17 Jun 2025 14:03:10 +0100 Subject: [PATCH 7/7] Update custom components API to have @alpha stability. --- .../element-web-module-api.api.md | 22 ++++--------------- .../src/api/custom-components.ts | 4 ++-- .../element-web-module-api/src/api/index.ts | 2 +- 3 files changed, 7 insertions(+), 21 deletions(-) diff --git a/packages/element-web-module-api/element-web-module-api.api.md b/packages/element-web-module-api/element-web-module-api.api.md index b2bda29ab8..6d6403735e 100644 --- a/packages/element-web-module-api/element-web-module-api.api.md +++ b/packages/element-web-module-api/element-web-module-api.api.md @@ -22,6 +22,7 @@ export interface AliasCustomisations { export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiExtension { readonly config: ConfigApi; createRoot(element: Element): Root; + // @alpha readonly customComponents: CustomComponentsApi; readonly i18n: I18nApi; readonly rootNode: HTMLElement; @@ -59,11 +60,8 @@ export interface ConfigApi { get(key?: K): Config | Config[K]; } -// @public +// @alpha export interface CustomComponentsApi { - // Warning: (ae-incompatible-release-tags) The symbol "registerMessageRenderer" is marked as @public, but its signature references "MatrixEvent" which is marked as @beta - // Warning: (ae-incompatible-release-tags) The symbol "registerMessageRenderer" is marked as @public, but its signature references "CustomMessageRenderFunction" which is marked as @alpha - // Warning: (ae-incompatible-release-tags) The symbol "registerMessageRenderer" is marked as @public, but its signature references "CustomMessageRenderHints" which is marked as @alpha registerMessageRenderer(eventTypeOrFilter: string | ((mxEvent: MatrixEvent) => boolean), renderer: CustomMessageRenderFunction, hints?: CustomMessageRenderHints): void; } @@ -134,27 +132,15 @@ export interface LifecycleCustomisations { onLoggedOutAndStorageCleared?(): void; } -// @beta +// @alpha export interface MatrixEvent { - // (undocumented) - age?: number; - // (undocumented) content: Record; - // (undocumented) eventId: string; - // (undocumented) originServerTs: number; - // (undocumented) - redacts?: string; - // (undocumented) - roomId?: string; - // (undocumented) + roomId: string; sender: string; - // (undocumented) stateKey?: string; - // (undocumented) type: string; - // (undocumented) unsigned: Record; } diff --git a/packages/element-web-module-api/src/api/custom-components.ts b/packages/element-web-module-api/src/api/custom-components.ts index 0c8a26712d..becc0f1992 100644 --- a/packages/element-web-module-api/src/api/custom-components.ts +++ b/packages/element-web-module-api/src/api/custom-components.ts @@ -48,7 +48,7 @@ export type CustomMessageRenderHints = { /** * Function used to render a message component. - * @alpha Unlikely to change + * @alpha Subject to change. */ export type CustomMessageRenderFunction = ( /** @@ -63,7 +63,7 @@ export type CustomMessageRenderFunction = ( /** * API for inserting custom components into Element. - * @public + * @alpha Subject to change. */ export interface CustomComponentsApi { /** diff --git a/packages/element-web-module-api/src/api/index.ts b/packages/element-web-module-api/src/api/index.ts index 3e9d4d072f..399d807a14 100644 --- a/packages/element-web-module-api/src/api/index.ts +++ b/packages/element-web-module-api/src/api/index.ts @@ -90,7 +90,7 @@ export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiEx /** * The custom message component API. - * @public + * @alpha */ readonly customComponents: CustomComponentsApi; /**