From 5b13e1da812d6bc60508b777d0f375b9c38e743c Mon Sep 17 00:00:00 2001 From: "Timo K." Date: Mon, 5 Oct 2026 10:29:37 +0200 Subject: [PATCH] renames and restructure - session -> matrixrtc (folder) - move MatrixRtcClient to top level of sdk - RtcTransport -> Transport - backend -> media-backend --- eslint/SdkImportBoundary.js | 10 ++-- sdk/README.md | 2 +- sdk/SdkArchitecture.md | 48 ++++++++++--------- sdk/SdkMigration.md | 16 +++---- sdk/index.ts | 8 ++-- sdk/src/{session => }/MatrixRTCClient.ts | 39 ++++++++------- sdk/src/api.ts | 4 +- .../HomeserverConnected.test.ts | 0 .../HomeserverConnected.ts | 0 .../JsRtcSessionBehaviors.test.ts} | 4 +- .../JsRtcSessionBehaviors.ts} | 0 .../LocalMember.test.ts | 5 +- sdk/src/{session => matrixrtc}/LocalMember.ts | 2 +- .../{session => matrixrtc}/LocalTransport.ts | 4 +- .../MatrixMemberMetadata.test.ts | 0 .../MatrixMemberMetadata.ts | 0 sdk/src/{session => matrixrtc}/Members.ts | 2 +- .../TransportAutoDiscovery.test.ts} | 18 +++---- .../TransportAutoDiscovery.ts} | 8 ++-- .../{session => matrixrtc}/Transports.test.ts | 5 +- sdk/src/{session => matrixrtc}/Transports.ts | 2 +- .../joinJsSdkSession.ts | 0 sdk/src/{session => matrixrtc}/status.test.ts | 2 +- sdk/src/{session => matrixrtc}/status.ts | 0 sdk/src/{backend => media-backend}/api.ts | 0 .../livekit/Connection.test.ts | 0 .../livekit/Connection.ts | 0 .../livekit/ConnectionFactory.ts | 0 .../livekit/ConnectionManager.test.ts | 0 .../livekit/ConnectionManager.ts | 0 .../livekit/DataChannel.test.ts | 0 .../livekit/DataChannel.ts | 0 .../livekit/KeyProvider.ts | 0 .../livekit/LivekitBackend.test.ts | 0 .../livekit/LivekitBackend.ts | 0 .../livekit/LivekitMediaTrack.test.ts | 0 .../livekit/LivekitMediaTrack.ts | 0 .../livekit/LivekitMemberMedia.test.ts | 0 .../livekit/LivekitMemberMedia.ts | 0 .../livekit/LocalMedia.ts | 0 .../livekit/MatrixKeyProvider.test.ts | 0 .../livekit/MatrixKeyProvider.ts | 0 .../livekit/Publisher.ts | 0 .../livekit/connectionState.ts | 0 .../livekit/livekitOptions.test.ts | 0 .../livekit/livekitOptions.ts | 0 .../livekit/openIDSFU.test.ts | 0 .../livekit/openIDSFU.ts | 0 .../livekit/publishOptions.ts | 0 .../livekit/test.ts | 0 sdk/src/utils/displayname.test.ts | 2 +- 51 files changed, 96 insertions(+), 85 deletions(-) rename sdk/src/{session => }/MatrixRTCClient.ts (90%) rename sdk/src/{session => matrixrtc}/HomeserverConnected.test.ts (100%) rename sdk/src/{session => matrixrtc}/HomeserverConnected.ts (100%) rename sdk/src/{session/SessionBehaviors.test.ts => matrixrtc/JsRtcSessionBehaviors.test.ts} (91%) rename sdk/src/{session/SessionBehaviors.ts => matrixrtc/JsRtcSessionBehaviors.ts} (100%) rename sdk/src/{session => matrixrtc}/LocalMember.test.ts (98%) rename sdk/src/{session => matrixrtc}/LocalMember.ts (99%) rename sdk/src/{session => matrixrtc}/LocalTransport.ts (93%) rename sdk/src/{session => matrixrtc}/MatrixMemberMetadata.test.ts (100%) rename sdk/src/{session => matrixrtc}/MatrixMemberMetadata.ts (100%) rename sdk/src/{session => matrixrtc}/Members.ts (97%) rename sdk/src/{session/RtcTransportAutoDiscovery.test.ts => matrixrtc/TransportAutoDiscovery.test.ts} (90%) rename sdk/src/{session/RtcTransportAutoDiscovery.ts => matrixrtc/TransportAutoDiscovery.ts} (93%) rename sdk/src/{session => matrixrtc}/Transports.test.ts (96%) rename sdk/src/{session => matrixrtc}/Transports.ts (96%) rename sdk/src/{session => matrixrtc}/joinJsSdkSession.ts (100%) rename sdk/src/{session => matrixrtc}/status.test.ts (97%) rename sdk/src/{session => matrixrtc}/status.ts (100%) rename sdk/src/{backend => media-backend}/api.ts (100%) rename sdk/src/{backend => media-backend}/livekit/Connection.test.ts (100%) rename sdk/src/{backend => media-backend}/livekit/Connection.ts (100%) rename sdk/src/{backend => media-backend}/livekit/ConnectionFactory.ts (100%) rename sdk/src/{backend => media-backend}/livekit/ConnectionManager.test.ts (100%) rename sdk/src/{backend => media-backend}/livekit/ConnectionManager.ts (100%) rename sdk/src/{backend => media-backend}/livekit/DataChannel.test.ts (100%) rename sdk/src/{backend => media-backend}/livekit/DataChannel.ts (100%) rename sdk/src/{backend => media-backend}/livekit/KeyProvider.ts (100%) rename sdk/src/{backend => media-backend}/livekit/LivekitBackend.test.ts (100%) rename sdk/src/{backend => media-backend}/livekit/LivekitBackend.ts (100%) rename sdk/src/{backend => media-backend}/livekit/LivekitMediaTrack.test.ts (100%) rename sdk/src/{backend => media-backend}/livekit/LivekitMediaTrack.ts (100%) rename sdk/src/{backend => media-backend}/livekit/LivekitMemberMedia.test.ts (100%) rename sdk/src/{backend => media-backend}/livekit/LivekitMemberMedia.ts (100%) rename sdk/src/{backend => media-backend}/livekit/LocalMedia.ts (100%) rename sdk/src/{backend => media-backend}/livekit/MatrixKeyProvider.test.ts (100%) rename sdk/src/{backend => media-backend}/livekit/MatrixKeyProvider.ts (100%) rename sdk/src/{backend => media-backend}/livekit/Publisher.ts (100%) rename sdk/src/{backend => media-backend}/livekit/connectionState.ts (100%) rename sdk/src/{backend => media-backend}/livekit/livekitOptions.test.ts (100%) rename sdk/src/{backend => media-backend}/livekit/livekitOptions.ts (100%) rename sdk/src/{backend => media-backend}/livekit/openIDSFU.test.ts (100%) rename sdk/src/{backend => media-backend}/livekit/openIDSFU.ts (100%) rename sdk/src/{backend => media-backend}/livekit/publishOptions.ts (100%) rename sdk/src/{backend => media-backend}/livekit/test.ts (100%) diff --git a/eslint/SdkImportBoundary.js b/eslint/SdkImportBoundary.js index a86ab6196..5586f0ddd 100644 --- a/eslint/SdkImportBoundary.js +++ b/eslint/SdkImportBoundary.js @@ -22,8 +22,8 @@ const BANNED_PACKAGES = [ /** * Packages only a media backend may import. The session speaks MatrixRTC and - * sees media through `sdk/src/backend/api.ts`; a backend under - * `sdk/src/backend//` is the one place its protocol's library appears. + * sees media through `sdk/src/media-backend/api.ts`; a backend under + * `sdk/src/media-backend//` is the one place its protocol's library appears. */ const BACKEND_PACKAGES = ["livekit-client", "@livekit/"]; @@ -32,7 +32,7 @@ const BACKEND_PACKAGES = ["livekit-client", "@livekit/"]; * outside `sdk/` by relative path (that is `src/`, `component/`, * `playwright/`) or one of the packages above. The development harness under * `sdk/dev/` is a host, not part of the library, and is exempt. Keeps the - * session free of any one media backend, too: outside `sdk/src/backend/`, + * session free of any one media backend, too: outside `sdk/src/media-backend/`, * a backend's packages may only be imported for their types, and only in * the public API, the errors and the test helpers that have to name them. */ @@ -52,7 +52,7 @@ const rule = ESLintUtils.RuleCreator( bannedPackage: "The SDK must not import '{{specifier}}': a host supplies that, the SDK has no UI.", backendPackage: - "Only a media backend under sdk/src/backend/ may import '{{specifier}}'; the session sees media through backend/api.ts.", + "Only a media backend under sdk/src/media-backend/ may import '{{specifier}}'; the session sees media through media-backend/api.ts.", }, schema: [], }, @@ -63,7 +63,7 @@ const rule = ESLintUtils.RuleCreator( if (!filename.startsWith(sdkRoot)) return {}; if (filename.startsWith(resolve(sdkRoot, "dev") + sep)) return {}; const inBackend = filename.startsWith( - resolve(sdkRoot, "src", "backend") + sep, + resolve(sdkRoot, "src", "media-backend") + sep, ); const matchesPackage = (specifier, pkg) => diff --git a/sdk/README.md b/sdk/README.md index dffdb7fe4..4c59ed632 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -6,7 +6,7 @@ the media of every member, as observables. It has no UI. Element Call's own `CallViewModel` is meant to become one consumer of it. The design is in [`SdkArchitecture.md`](./SdkArchitecture.md), the migration from the view model in [`SdkMigration.md`](./SdkMigration.md). Media goes through one media backend -behind `MediaBackend`; LiveKit, under `src/backend/livekit/`, is the only one +behind `MediaBackend`; LiveKit, under `src/media-backend/livekit/`, is the only one today and the only place that imports `livekit-client`. **Status:** first implementation. `createMatrixRTCClient` joins the session, connects to diff --git a/sdk/SdkArchitecture.md b/sdk/SdkArchitecture.md index b2ff14db1..4419a3aba 100644 --- a/sdk/SdkArchitecture.md +++ b/sdk/SdkArchitecture.md @@ -64,10 +64,10 @@ therefore `Element Call → sdk`, never the reverse. The migration from today's The left box is MatrixRTC: who is in the session, with which transport, the keys, the delayed leave, and the join state machine. The right box is a media backend: whatever carries the media, behind the `MediaBackend` interface in -`sdk/src/backend/api.ts`. The client is the join of the two: a member exists +`sdk/src/media-backend/api.ts`. The client is the join of the two: a member exists once its membership does, and gets its media once the backend has something for that membership on its transport. LiveKit is the one backend today; a -cascading SFU or full mesh is another folder under `sdk/src/backend/`, handed +cascading SFU or full mesh is another folder under `sdk/src/media-backend/`, handed in through `options.backend`, and nothing in the left box changes. ### How Element Call uses it @@ -127,20 +127,20 @@ it, and `leave()` also sends the leave. ## Vocabulary -| Word | Meaning here | Elsewhere | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | -| client | a `MatrixRTCClient`: one room, one slot, one local member | `MatrixClient` is always written out | -| membership | one device's MatrixRTC state event, seen by hosts as `RTCMembership`, the js-sdk `CallMembership` behind it | | -| member | an `RTCMember`: a membership plus what the SDK derives from it (display name, transport, media) | Element Call's "matrixLivekitMember" | -| media | a `MemberMedia`: what a member sends, once it has arrived on its transport. `null` while waiting for media | Element Call's `MediaViewModel` is a view of it | -| track | a `MediaTrack`: one publication of a member, audio or video, with `source`, `kind`, `id` and the behaviors on it. `LocalAudioMediaTrack` and `LocalVideoMediaTrack` add the controls over our own | LiveKit `TrackPublication` and `Track`, which never leave the SDK | -| source | a `MediaSource`: what a track is captured from, `microphone`, `camera`, `screenShare`, `screenShareAudio` or `unknown`. Picked out of `tracks$` with `trackBySource$` | LiveKit `Track.Source` | -| publish request | a `PublishRequest`: a source, where to capture it from and how to encode it. Given at the join in `LocalMediaInputs.publish`, or later to `publish` on the local member | | -| active | `isActive$` on an audio track: the track carries sound, as the backend measures it. "Speaking" is a call's reading of it on the microphone track | LiveKit "speaking", `isSpeaking` | -| attach, detach | handing a `