Merge pull request #34 from element-hq/hs/modules-matrix-event

Replace matrix-js-sdk's MatrixEvent with our own representation
This commit is contained in:
Will Hunt
2025-06-17 14:21:08 +01:00
committed by GitHub
6 changed files with 67 additions and 10 deletions
@@ -5,7 +5,6 @@
```ts ```ts
import { JSX } from 'react'; import { JSX } from 'react';
import { MatrixEvent } from 'matrix-js-sdk/lib/matrix';
import { ModuleApi } from '@matrix-org/react-sdk-module-api'; import { ModuleApi } from '@matrix-org/react-sdk-module-api';
import { Root } from 'react-dom/client'; import { Root } from 'react-dom/client';
import { RuntimeModule } from '@matrix-org/react-sdk-module-api'; import { RuntimeModule } from '@matrix-org/react-sdk-module-api';
@@ -23,6 +22,7 @@ export interface AliasCustomisations {
export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiExtension { export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiExtension {
readonly config: ConfigApi; readonly config: ConfigApi;
createRoot(element: Element): Root; createRoot(element: Element): Root;
// @alpha
readonly customComponents: CustomComponentsApi; readonly customComponents: CustomComponentsApi;
readonly i18n: I18nApi; readonly i18n: I18nApi;
readonly rootNode: HTMLElement; readonly rootNode: HTMLElement;
@@ -60,10 +60,8 @@ export interface ConfigApi {
get<K extends keyof Config = never>(key?: K): Config | Config[K]; get<K extends keyof Config = never>(key?: K): Config | Config[K];
} }
// @public // @alpha
export interface CustomComponentsApi { export interface CustomComponentsApi {
// 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; registerMessageRenderer(eventTypeOrFilter: string | ((mxEvent: MatrixEvent) => boolean), renderer: CustomMessageRenderFunction, hints?: CustomMessageRenderHints): void;
} }
@@ -134,6 +132,18 @@ export interface LifecycleCustomisations {
onLoggedOutAndStorageCleared?(): void; onLoggedOutAndStorageCleared?(): void;
} }
// @alpha
export interface MatrixEvent {
content: Record<string, unknown>;
eventId: string;
originServerTs: number;
roomId: string;
sender: string;
stateKey?: string;
type: string;
unsigned: Record<string, unknown>;
}
// @alpha @deprecated (undocumented) // @alpha @deprecated (undocumented)
export interface Media { export interface Media {
// (undocumented) // (undocumented)
@@ -38,7 +38,6 @@
"@types/react-dom": "^19.0.4", "@types/react-dom": "^19.0.4",
"@types/semver": "^7.5.8", "@types/semver": "^7.5.8",
"@vitest/coverage-v8": "^3.0.4", "@vitest/coverage-v8": "^3.0.4",
"matrix-js-sdk": "^37.5.0",
"matrix-web-i18n": "^3.3.0", "matrix-web-i18n": "^3.3.0",
"semver": "^7.6.3", "semver": "^7.6.3",
"typescript": "^5.7.3", "typescript": "^5.7.3",
@@ -51,7 +50,6 @@
"@matrix-org/react-sdk-module-api": "*", "@matrix-org/react-sdk-module-api": "*",
"@types/react": "*", "@types/react": "*",
"@types/react-dom": "*", "@types/react-dom": "*",
"matrix-js-sdk": "*",
"matrix-web-i18n": "*", "matrix-web-i18n": "*",
"react": "^19" "react": "^19"
}, },
@@ -6,7 +6,7 @@ Please see LICENSE files in the repository root for full details.
*/ */
import type { JSX } from "react"; 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. * Properties for all message components.
@@ -48,7 +48,7 @@ export type CustomMessageRenderHints = {
/** /**
* Function used to render a message component. * Function used to render a message component.
* @alpha Unlikely to change * @alpha Subject to change.
*/ */
export type CustomMessageRenderFunction = ( export type CustomMessageRenderFunction = (
/** /**
@@ -63,7 +63,7 @@ export type CustomMessageRenderFunction = (
/** /**
* API for inserting custom components into Element. * API for inserting custom components into Element.
* @public * @alpha Subject to change.
*/ */
export interface CustomComponentsApi { export interface CustomComponentsApi {
/** /**
@@ -90,7 +90,7 @@ export interface Api extends LegacyModuleApiExtension, LegacyCustomisationsApiEx
/** /**
* The custom message component API. * The custom message component API.
* @public * @alpha
*/ */
readonly customComponents: CustomComponentsApi; readonly customComponents: CustomComponentsApi;
/** /**
@@ -9,6 +9,7 @@ export { ModuleLoader, ModuleIncompatibleError } from "./loader";
export type { Api, Module, ModuleFactory } from "./api"; export type { Api, Module, ModuleFactory } from "./api";
export type { Config, ConfigApi } from "./api/config"; export type { Config, ConfigApi } from "./api/config";
export type { I18nApi, Variables, Translations } from "./api/i18n"; export type { I18nApi, Variables, Translations } from "./api/i18n";
export type * from "./models/event";
export type * from "./api/custom-components"; export type * from "./api/custom-components";
export type * from "./api/legacy-modules"; export type * from "./api/legacy-modules";
export type * from "./api/legacy-customisations"; export type * from "./api/legacy-customisations";
@@ -0,0 +1,48 @@
/*
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, 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;
/**
* 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<string, unknown>;
/**
* Contains optional extra information about the event.
*/
unsigned: Record<string, unknown>;
/**
* 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;
}