From edf2f39eec28c2d4a8a459800a32f2d83080d278 Mon Sep 17 00:00:00 2001 From: "Timo K." Date: Thu, 17 Sep 2026 09:46:56 +0200 Subject: [PATCH] use the prebuild rust-sdk package --- .gitattributes | 3 - .github/workflows/build-element-call.yaml | 8 + .github/workflows/build.yaml | 8 + .github/workflows/lint.yaml | 8 + .github/workflows/test.yaml | 16 + .github/workflows/translations-download.yaml | 8 + .npmrc | 9 + .oxfmtrc.json | 7 +- .oxlintrc.json | 3 - README.md | 18 +- docs/README.md | 1 + docs/linking.md | 3 + docs/matrix_rtc_sdk.md | 135 + element-call-oxidation-plan.md | 38 +- knip.ts | 3 - package.json | 2 +- pnpm-lock.yaml | 18 +- pnpm-workspace.yaml | 2 + scripts/sync-matrix-rtc-sdk.sh | 52 - src/matrix-rtc-sdk/generated/VERSION | 2 - .../generated/matrix_rtc-ffi.ts | 121 - src/matrix-rtc-sdk/generated/matrix_rtc.ts | 9440 ----------------- .../generated/wasm-bindgen/index.d.ts | 30 - .../generated/wasm-bindgen/index.js | 3250 ------ .../generated/wasm-bindgen/index_bg.wasm | Bin 1609348 -> 0 bytes src/matrix-rtc-sdk/index.ts | 42 +- src/matrix-rtc-sdk/logSink.ts | 2 +- src/utils/test-matrix-rtc.ts | 21 +- vitest.config.ts | 1 - 29 files changed, 292 insertions(+), 12959 deletions(-) delete mode 100644 .gitattributes create mode 100644 .npmrc create mode 100644 docs/matrix_rtc_sdk.md delete mode 100755 scripts/sync-matrix-rtc-sdk.sh delete mode 100644 src/matrix-rtc-sdk/generated/VERSION delete mode 100644 src/matrix-rtc-sdk/generated/matrix_rtc-ffi.ts delete mode 100644 src/matrix-rtc-sdk/generated/matrix_rtc.ts delete mode 100644 src/matrix-rtc-sdk/generated/wasm-bindgen/index.d.ts delete mode 100644 src/matrix-rtc-sdk/generated/wasm-bindgen/index.js delete mode 100644 src/matrix-rtc-sdk/generated/wasm-bindgen/index_bg.wasm diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index de8fcaf3d..000000000 --- a/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -# uniffi-generated MatrixRTC SDK bindings, vendored by scripts/sync-matrix-rtc-sdk.sh -src/matrix-rtc-sdk/generated/** linguist-generated=true -src/matrix-rtc-sdk/generated/**/*.wasm binary diff --git a/.github/workflows/build-element-call.yaml b/.github/workflows/build-element-call.yaml index f4071975e..838ef95bc 100644 --- a/.github/workflows/build-element-call.yaml +++ b/.github/workflows/build-element-call.yaml @@ -42,6 +42,14 @@ jobs: with: cache: "pnpm" node-version-file: ".node-version" + - name: Authenticate to GitHub Packages + # The MatrixRTC SDK (@billcarsonfr/matrix-rtc, see .npmrc) is on the GitHub + # Packages npm registry, which needs a token with read:packages even for + # public packages. A workflow's GITHUB_TOKEN only reaches packages of its own + # repository, so this is a personal access token kept as a repository secret. + env: + NPM_REGISTRY_TOKEN: ${{ secrets.MATRIX_RTC_NPM_TOKEN }} + run: echo "//npm.pkg.github.com/:_authToken=${NPM_REGISTRY_TOKEN}" >> ~/.npmrc - name: Install dependencies # ignore-pnpmfile should never be commited. Make CI crash if it happened (`pnpmfileChecksum` is present) run: "pnpm install --frozen-lockfile --ignore-pnpmfile" diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 3fe10723d..babb65c94 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -102,6 +102,14 @@ jobs: with: cache: "pnpm" node-version-file: ".node-version" + - name: Authenticate to GitHub Packages + # The MatrixRTC SDK (@billcarsonfr/matrix-rtc, see .npmrc) is on the GitHub + # Packages npm registry, which needs a token with read:packages even for + # public packages. A workflow's GITHUB_TOKEN only reaches packages of its own + # repository, so this is a personal access token kept as a repository secret. + env: + NPM_REGISTRY_TOKEN: ${{ secrets.MATRIX_RTC_NPM_TOKEN }} + run: echo "//npm.pkg.github.com/:_authToken=${NPM_REGISTRY_TOKEN}" >> ~/.npmrc - name: Install dependencies run: "pnpm install --frozen-lockfile --ignore-pnpmfile" - name: Build Storybook diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index ad92e7d1a..d8bce7f06 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -17,6 +17,14 @@ jobs: with: cache: "pnpm" node-version-file: ".node-version" + - name: Authenticate to GitHub Packages + # The MatrixRTC SDK (@billcarsonfr/matrix-rtc, see .npmrc) is on the GitHub + # Packages npm registry, which needs a token with read:packages even for + # public packages. A workflow's GITHUB_TOKEN only reaches packages of its own + # repository, so this is a personal access token kept as a repository secret. + env: + NPM_REGISTRY_TOKEN: ${{ secrets.MATRIX_RTC_NPM_TOKEN }} + run: echo "//npm.pkg.github.com/:_authToken=${NPM_REGISTRY_TOKEN}" >> ~/.npmrc - name: Install dependencies # ignore-pnpmfile should never be commited. Make CI crash if it happened (`pnpmfileChecksum` is present) run: "pnpm install --frozen-lockfile --ignore-pnpmfile" diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 7ba5f424a..683b1a5d4 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -19,6 +19,14 @@ jobs: with: cache: "pnpm" node-version-file: ".node-version" + - name: Authenticate to GitHub Packages + # The MatrixRTC SDK (@billcarsonfr/matrix-rtc, see .npmrc) is on the GitHub + # Packages npm registry, which needs a token with read:packages even for + # public packages. A workflow's GITHUB_TOKEN only reaches packages of its own + # repository, so this is a personal access token kept as a repository secret. + env: + NPM_REGISTRY_TOKEN: ${{ secrets.MATRIX_RTC_NPM_TOKEN }} + run: echo "//npm.pkg.github.com/:_authToken=${NPM_REGISTRY_TOKEN}" >> ~/.npmrc - name: Install dependencies # ignore-pnpmfile should never be commited. Make CI crash if it happened (`pnpmfileChecksum` is present) run: "pnpm install --frozen-lockfile --ignore-pnpmfile" @@ -65,6 +73,14 @@ jobs: with: cache: "pnpm" node-version-file: ".node-version" + - name: Authenticate to GitHub Packages + # The MatrixRTC SDK (@billcarsonfr/matrix-rtc, see .npmrc) is on the GitHub + # Packages npm registry, which needs a token with read:packages even for + # public packages. A workflow's GITHUB_TOKEN only reaches packages of its own + # repository, so this is a personal access token kept as a repository secret. + env: + NPM_REGISTRY_TOKEN: ${{ secrets.MATRIX_RTC_NPM_TOKEN }} + run: echo "//npm.pkg.github.com/:_authToken=${NPM_REGISTRY_TOKEN}" >> ~/.npmrc - name: Install dependencies # ignore-pnpmfile should never be commited. Make CI crash if it happened (`pnpmfileChecksum` is present) run: pnpm install --frozen-lockfile --ignore-pnpmfile diff --git a/.github/workflows/translations-download.yaml b/.github/workflows/translations-download.yaml index f61a44c59..9b9d204ff 100644 --- a/.github/workflows/translations-download.yaml +++ b/.github/workflows/translations-download.yaml @@ -25,6 +25,14 @@ jobs: cache: "pnpm" node-version-file: ".node-version" + - name: Authenticate to GitHub Packages + # The MatrixRTC SDK (@billcarsonfr/matrix-rtc, see .npmrc) is on the GitHub + # Packages npm registry, which needs a token with read:packages even for + # public packages. A workflow's GITHUB_TOKEN only reaches packages of its own + # repository, so this is a personal access token kept as a repository secret. + env: + NPM_REGISTRY_TOKEN: ${{ secrets.MATRIX_RTC_NPM_TOKEN }} + run: echo "//npm.pkg.github.com/:_authToken=${NPM_REGISTRY_TOKEN}" >> ~/.npmrc - name: Install Deps # ignore-pnpmfile should never be commited. Make CI crash if it happened (`pnpmfileChecksum` is present) run: "pnpm install --frozen-lockfile --ignore-pnpmfile" diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..9cd6995e5 --- /dev/null +++ b/.npmrc @@ -0,0 +1,9 @@ +# The MatrixRTC SDK (`@element-hq/matrix-rtc`, aliased in package.json to the +# name the fork's CI publishes it under) comes from the GitHub Packages npm +# registry, which needs a token with `read:packages` even for public +# packages. This is a stop-gap while the SDK is in flux; once it is published +# to npmjs.com this file and the alias go away (docs/matrix_rtc_sdk.md). +# Only the scope->registry mapping lives here; the token goes in your +# user-level npm config (~/.npmrc), never in this file. CI writes it there +# from a repository secret (see .github/workflows). +@billcarsonfr:registry=https://npm.pkg.github.com diff --git a/.oxfmtrc.json b/.oxfmtrc.json index 44be81943..20bac1bf8 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -2,10 +2,5 @@ "$schema": "./node_modules/oxfmt/configuration_schema.json", "printWidth": 80, "sortPackageJson": false, - "ignorePatterns": [ - "pnpm-lock.yaml", - "node_modules", - "dist", - "src/matrix-rtc-sdk/generated" - ] + "ignorePatterns": ["pnpm-lock.yaml", "node_modules", "dist"] } diff --git a/.oxlintrc.json b/.oxlintrc.json index cf1cef833..c89ab8a28 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -28,9 +28,6 @@ "env": { "builtin": true }, - // uniffi-generated bindings and wasm-bindgen glue, vendored by - // scripts/sync-matrix-rtc-sdk.sh; not ours to lint - "ignorePatterns": ["src/matrix-rtc-sdk/generated/**"], "rules": { "element-call/copyright-header": [ "error", diff --git a/README.md b/README.md index 84910ed57..c5dbc0a1a 100644 --- a/README.md +++ b/README.md @@ -206,6 +206,19 @@ corepack enable pnpm install ``` +`pnpm install` currently needs a GitHub token: the MatrixRTC SDK +(`@element-hq/matrix-rtc`) is, as a stop-gap until it is published to npmjs.com, +an npm package on the GitHub Packages registry, which rejects anonymous +requests even for public packages. Create a classic personal access token with +the `read:packages` scope and add it to your user-level npm config once: + +```sh +echo "//npm.pkg.github.com/:_authToken=" >> ~/.npmrc +``` + +See [The MatrixRTC SDK package](./docs/matrix_rtc_sdk.md) for the details, CI +setup and developing against a local crate. + To use it, create a local config by, e.g., `cp ./config/config.devenv.json ./public/config.json` and adapt it if necessary. The `config.devenv.json` config should work with the backend development @@ -220,6 +233,7 @@ pnpm dev See also: - [Developing with linked packages](./docs/linking.md) +- [The MatrixRTC SDK package](./docs/matrix_rtc_sdk.md) #### Element Call as a component (experimental) @@ -298,7 +312,9 @@ The package is not published yet. A host installs it as a git dependency on the whose `prepare` script runs the build on install. That build needs pnpm (via Corepack) on the host's machine, runs a full `pnpm install` of this repository -and is memory-hungry, since it inherits the `--max-old-space-size` setting of +(so the host needs the GitHub Packages token described in +[The MatrixRTC SDK package](./docs/matrix_rtc_sdk.md) as well) and is +memory-hungry, since it inherits the `--max-old-space-size` setting of the app build; the host's pnpm also has to allow it to run at all (`allowBuilds` in its `pnpm-workspace.yaml`). Note that `component/` is a pnpm project of its own for this reason, so pnpm commands run from inside that diff --git a/docs/README.md b/docs/README.md index 8bd148462..84bcb2d24 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,6 +9,7 @@ This folder contains documentation for setup, usage, and development of Element - [MatrixRTC modes](./matrix_rtc_modes.md) - [Self-Hosting](./self_hosting.md) - [Developing with linked packages](./linking.md) +- [The MatrixRTC SDK package](./matrix_rtc_sdk.md) (registry token, CI, local crate) ### Writing code for Element Call (agent-readable conventions) diff --git a/docs/linking.md b/docs/linking.md index 3a18844d4..a792d7dd9 100644 --- a/docs/linking.md +++ b/docs/linking.md @@ -29,6 +29,9 @@ Instead, create a file named `.links.cjs` in the Element Call project directory module.exports = { "matrix-js-sdk": "../your/path/matrix-js-sdk", "matrix-widget-api": "../your/path/matrix-widget-api", + // The MatrixRTC SDK: run `npm run build` in that directory first + "@element-hq/matrix-rtc": + "../your/path/matrix-rust-rtc/MatrixSdkArchitectureDraft/web-test-app", }; ``` diff --git a/docs/matrix_rtc_sdk.md b/docs/matrix_rtc_sdk.md new file mode 100644 index 000000000..1f155683c --- /dev/null +++ b/docs/matrix_rtc_sdk.md @@ -0,0 +1,135 @@ +# The MatrixRTC SDK package + +Element Call's MatrixRTC logic (session membership, keep-alive, transport +tokens, media key exchange) runs in the Rust `matrix-rtc` crate, compiled to +WebAssembly and shipped as the npm package `@element-hq/matrix-rtc`. The +package is built and published by the +[`npm-web-bindings.yml`](https://github.com/element-hq/matrix-rust-rtc/blob/main/.github/workflows/npm-web-bindings.yml) +workflow of the `matrix-rust-rtc` repository, from its +`MatrixSdkArchitectureDraft/web-test-app` directory. Element Call loads it in +`src/matrix-rtc-sdk/index.ts`, the only module that imports the package +directly. + +## Where the package comes from + +For now the package lives on the **GitHub Packages** npm registry +(`https://npm.pkg.github.com`), not on npmjs.com. **This is a stop-gap** for +the phase in which the crate's API still changes with every push: publishing +from the crate's CI into a registry that comes with the repository needs no +account or secret upstream, and nothing else consumes the package yet. Once +the SDK is ready for consumers beyond Element Call, it should be published to +**npmjs.com** as `@element-hq/matrix-rtc`, which makes everything in this +document about tokens and scopes go away: `pnpm install` works anonymously +again, forks and Renovate can install, component hosts need no setup, and the +alias in `package.json` and the scope line in `.npmrc` are deleted. + +Until then, two properties of GitHub Packages shape the setup below: + +- **Every request needs a token**, including reads of public packages. There + is no anonymous install. +- **A package is scoped to the owner of the repository whose CI published + it.** While the crate is developed on the `BillCarsonFr` fork, the package is + published as `@billcarsonfr/matrix-rtc`; once it is published from + `element-hq/matrix-rust-rtc` it becomes `@element-hq/matrix-rtc`. + +So that the code does not have to change when that happens, `package.json` +installs the fork's package under the final name: + +```json +"@element-hq/matrix-rtc": "npm:@billcarsonfr/matrix-rtc@next" +``` + +and the repository's `.npmrc` maps only the scope to the registry: + +```ini +@billcarsonfr:registry=https://npm.pkg.github.com +``` + +When the package moves to `element-hq`, change the alias to the plain package +and the scope line in `.npmrc` accordingly; nothing else in the repository +refers to the fork's name. + +## Setting up your machine + +1. Create a **personal access token (classic)** at + with only the `read:packages` scope. + Fine-grained tokens do not work with GitHub Packages. +2. Add it to your **user-level** npm config. Never put it in the repository's + `.npmrc`: + + ```sh + echo "//npm.pkg.github.com/:_authToken=" >> ~/.npmrc + ``` + +3. Run `pnpm install` as usual. + +Without the token, `pnpm install` fails while resolving +`@billcarsonfr/matrix-rtc` with a `401` or `404` from `npm.pkg.github.com`; +that error always means "no or wrong token", never "the package does not +exist". + +## CI and other consumers + +A workflow's built-in `GITHUB_TOKEN` can only read packages owned by the +repository's own owner, so element-hq's workflows cannot read a package owned +by the `BillCarsonFr` user. The workflows that run `pnpm install` therefore +write a personal access token from the repository secret +`MATRIX_RTC_NPM_TOKEN` (scope `read:packages`) to `~/.npmrc` before installing. +Keep in mind: + +- **Pull requests from forks and from Renovate do not receive secrets**, so + their installs fail until the package is readable with the built-in token. +- **Hosts of the [component](../README.md#element-call-as-a-component-experimental)** + install it as a git dependency whose `prepare` script runs + `pnpm install --frozen-lockfile` in this repository, so they need the same + token in their `~/.npmrc` or CI. + +Publishing from `element-hq/matrix-rust-rtc` (and granting the Element Call +repository access to the package) would let the built-in token work for +element-hq's own workflows, but that only patches the CI case. The intended end +state is the npmjs.com publication described above, which removes the token +requirement for everyone. + +## Versions + +The package version tracks the crate's `Cargo.toml`. Every push to the tracked +branches of `matrix-rust-rtc` publishes a `next` pre-release named +`-next..`, and a `matrix-rtc-v` tag +publishes `latest`. Element Call follows `next`; `pnpm install` picks up a new +pre-release only when the lockfile is updated, e.g. with +`pnpm update @element-hq/matrix-rtc`. + +The publish job runs only after the crate's own `cargo test` job passed on a +_push_ (pull-request runs never publish). If a `next` build you expect is +missing, check that workflow's push runs for a failed crate job and re-run it; +its tests are known to be timing-sensitive. + +## Developing against a local crate checkout + +To run Element Call against a crate you are changing, build the package there +and link it, instead of waiting for CI: + +```sh +cd ../matrix-rust-rtc/MatrixSdkArchitectureDraft/web-test-app +npm install && npm run build # produces dist/ +``` + +then add it to `.links.cjs` in this repository and run `pnpm links:on`, as +described in [Developing with linked packages](./linking.md): + +```cjs +"@element-hq/matrix-rtc": "../matrix-rust-rtc/MatrixSdkArchitectureDraft/web-test-app", +``` + +`pnpm links:off` restores the registry package before committing. + +## How the wasm is loaded + +`initMatrixRtcSdk()` in `src/matrix-rtc-sdk/index.ts` is the single entry +point: it awaits the package's `initAsync`, then installs the log sink that +routes the crate's logs into Element Call's logger. The wasm is imported as +`@element-hq/matrix-rtc/wasm?url`, so the app builds emit it as an asset next +to the other `.wasm` files and the component build inlines it. Unit tests read +the bytes from the installed package instead (`src/utils/test-matrix-rtc.ts`), +since vitest has no server to fetch from. A component host can point at a copy +it serves itself through `initializeElementCall(config, { matrixRtcWasm })`. diff --git a/element-call-oxidation-plan.md b/element-call-oxidation-plan.md index df5aaf74f..38a541a8f 100644 --- a/element-call-oxidation-plan.md +++ b/element-call-oxidation-plan.md @@ -59,8 +59,9 @@ files it touches are listed there. `src/utils/logger.ts` (S6) so a later swap is one line. - Writing a matrix-rust-sdk-backed driver (Element X). The interface is shaped so one can be written; none is written here. -- Publishing the crate as an npm package. Until it exists, the generated - bindings are vendored (§5.1). +- Publishing the crate as an npm package: done upstream (`@element-hq/matrix-rtc`, + built and published by `npm-web-bindings.yml` in matrix-rust-rtc; consumed + here since 2026-09-16, §5.1). - Turning on MSC4153 (cross-signed sender) enforcement. Parity first (§5.8). --- @@ -501,13 +502,24 @@ RateLimited`, 403 → `Rejected`, 404/`M_UNRECOGNIZED` → `Unsupported`. ## 5. Decisions and assumptions -1. **Vendored bindings.** `src/matrix-rtc-sdk/generated/` holds `matrix_rtc.ts`, - `matrix_rtc-ffi.ts`, `wasm-bindgen/index.js`, `index_bg.wasm` and a - hand-written `wasm-bindgen/index.d.ts` (no `allowJs` in `tsconfig.json`), - synced by `scripts/sync-matrix-rtc-sdk.sh` (runs `ubrn build web` in the - draft **without** the `runtime-probe` feature, copies). Committed so CI - works. `@ubjs/core` becomes a dependency. The wasm is ~6.5 MB unoptimised. - **Assumption:** committing the binary is acceptable for the draft phase. +1. **The SDK is an npm package.** `@element-hq/matrix-rtc` (the draft's + `web-test-app/`, built by `npm-web-bindings.yml`: uniffi bindings, the + wasm-bindgen glue, a `wasm-opt`'d ~760 KB wasm, `.d.ts`, and `@ubjs/core` + as its own dependency) is a devDependency, aliased in `package.json` to + `@billcarsonfr/matrix-rtc@next` while it is published from the fork, so + the imports already say `@element-hq/matrix-rtc`. It lives on the GitHub + Packages registry: `.npmrc` maps the scope, a `read:packages` token goes + in `~/.npmrc` (CI: the `MATRIX_RTC_NPM_TOKEN` secret). **The GitHub + Packages registry is a stop-gap** for the phase in which the crate's API + moves with every push; once the SDK is ready for consumers beyond Element + Call it belongs on npmjs.com as `@element-hq/matrix-rtc`, which drops the + alias, `.npmrc`, the CI secret and every token requirement + (`docs/matrix_rtc_sdk.md`). `src/matrix-rtc-sdk/` + keeps only the loader (`initMatrixRtcSdk`: package `initAsync` + our log + sink, wasm via `@element-hq/matrix-rtc/wasm?url`) and the curated + re-exports. _History:_ until 2026-09-16 the bindings were vendored under + `src/matrix-rtc-sdk/generated/` by `scripts/sync-matrix-rtc-sdk.sh`; local + crate work now goes through `pnpm links:on` (`docs/linking.md`). 2. **Wasm loading.** Verified: Vite 8 library mode inlines `?url` and `new URL(…, import.meta.url)` assets as base64 regardless of `assetsInlineLimit`; `?url&no-inline` emits a file. App builds use `?url`; @@ -599,12 +611,14 @@ Gate: `cargo test --features uniffi`, `cargo clippy --all-targets --features uni ### S0b — SDK intake ☑ -- `scripts/sync-matrix-rtc-sdk.sh`, `src/matrix-rtc-sdk/generated/**`, +- ~~`scripts/sync-matrix-rtc-sdk.sh`, `src/matrix-rtc-sdk/generated/**`~~ + (replaced by the `@element-hq/matrix-rtc` package on 2026-09-16, §5.1), `src/matrix-rtc-sdk/index.ts` (loader + curated re-exports), `src/matrix-rtc-sdk/index.test.ts` (boot, one join round-trip against the TS mock driver). -- `package.json` (`@ubjs/core`), `knip.ts` (`ignore` for `generated/**`), - `.oxlintrc.json` `ignorePatterns`, `.oxfmtrc.json` ignore, +- `package.json` (~~`@ubjs/core`~~ now `@element-hq/matrix-rtc`; the + `generated/**` carve-outs in `knip.ts`, `.oxlintrc.json`, `.oxfmtrc.json`, + `vitest.config.ts` and `.gitattributes` went with the vendored files), `vite.config.ts` (nothing needed for `?url`; verified `vite-plugin-wasm` ignores it), `tsconfig.json` untouched thanks to the `.d.ts`. - Gate: `pnpm lint && pnpm format:check && pnpm test:unit`. diff --git a/knip.ts b/knip.ts index 200dbb426..951af9a42 100644 --- a/knip.ts +++ b/knip.ts @@ -26,10 +26,7 @@ export default { // This is a shell built-in. "printf", ], - // uniffi-generated bindings (scripts/sync-matrix-rtc-sdk.sh): every - // export the crate has, most of them unused here by design ignore: [ - "src/matrix-rtc-sdk/generated/**", // The host-facing driver seam, landed ahead of its consumers (the // `CallParticipation` layer and the hosts, see element-call-oxidation-plan.md) "src/driver/**", diff --git a/package.json b/package.json index 7bfe8dc1c..49d056c8d 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ }, "devDependencies": { "@codecov/vite-plugin": "^1.3.0", + "@element-hq/matrix-rtc": "npm:@billcarsonfr/matrix-rtc@next", "@fontsource/inconsolata": "^5.1.0", "@fontsource/inter": "^5.1.0", "@formatjs/intl-durationformat": "^0.10.0", @@ -82,7 +83,6 @@ "@types/react-dom": "^19.0.0", "@types/sdp-transform": "^2.4.5", "@typescript-eslint/utils": "^8.61.0", - "@ubjs/core": "0.31.0-5", "@use-gesture/react": "^10.2.11", "@vector-im/compound-design-tokens": "^10.0.0", "@vector-im/compound-web": "^10.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e80c0a9ec..57e103183 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,6 +25,9 @@ importers: '@codecov/vite-plugin': specifier: ^1.3.0 version: 1.9.1(vite@8.2.2(@types/node@24.13.3)(esbuild@0.28.2)(jiti@2.7.0)(sass@1.103.1)(terser@5.46.1)(yaml@2.9.0)) + '@element-hq/matrix-rtc': + specifier: npm:@billcarsonfr/matrix-rtc@next + version: '@billcarsonfr/matrix-rtc@0.1.0-next.7.c5a5a80(matrix-js-sdk@https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/24929be0e741be6a5d0a7226f1c682e245263b8a)' '@fontsource/inconsolata': specifier: ^5.1.0 version: 5.3.0 @@ -127,9 +130,6 @@ importers: '@typescript-eslint/utils': specifier: ^8.61.0 version: 8.69.0(eslint@8.57.1(supports-color@7.2.0))(supports-color@7.2.0)(typescript@5.9.3) - '@ubjs/core': - specifier: 0.31.0-5 - version: 0.31.0-5 '@use-gesture/react': specifier: ^10.2.11 version: 10.3.1(react@19.2.8) @@ -412,6 +412,13 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@billcarsonfr/matrix-rtc@0.1.0-next.7.c5a5a80': + resolution: {integrity: sha512-6Ti4jQZahHPI2Y9F/6dUplSEvoDdWP0OTLJXFUe708YFa13nRwW3t7QoRRbsSB5O0eWQHwu9hHVJQHEjpx4EwA==, tarball: https://npm.pkg.github.com/download/@billcarsonfr/matrix-rtc/0.1.0-next.7.c5a5a80/55919d699c12752b2316ad6d97a00c4b78088057} + version: 0.1.0-next.7.c5a5a80 + engines: {node: '>=20'} + peerDependencies: + matrix-js-sdk: '>=42' + '@blazediff/core@1.9.1': resolution: {integrity: sha512-ehg3jIkYKulZh+8om/O25vkvSsXXwC+skXmyA87FFx6A/45eqOkZsBltMw/TVteb0mloiGT8oGRTcjRAz66zaA==} @@ -6365,6 +6372,11 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@billcarsonfr/matrix-rtc@0.1.0-next.7.c5a5a80(matrix-js-sdk@https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/24929be0e741be6a5d0a7226f1c682e245263b8a)': + dependencies: + '@ubjs/core': 0.31.0-5 + matrix-js-sdk: https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/24929be0e741be6a5d0a7226f1c682e245263b8a + '@blazediff/core@1.9.1': {} '@bufbuild/protobuf@1.10.1': {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 9e4f0fd6f..85113e126 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,6 +3,8 @@ supportedArchitectures: cpu: [current, arm64] libc: [current, glibc] minimumReleaseAgeExclude: + # The MatrixRTC SDK is consumed as `next` pre-releases straight from its CI + - "@billcarsonfr/matrix-rtc" - "@vector-im/compound-design-tokens" - "@vector-im/compound-web" - matrix-js-sdk diff --git a/scripts/sync-matrix-rtc-sdk.sh b/scripts/sync-matrix-rtc-sdk.sh deleted file mode 100755 index 29847f3cf..000000000 --- a/scripts/sync-matrix-rtc-sdk.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -# -# Copyright 2026 Element Creations Ltd. -# -# SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial -# Please see LICENSE in the repository root for full details. -# -# Vendors the matrix-rtc crate's uniffi web bindings into -# src/matrix-rtc-sdk/generated/. Until the crate ships as an npm package this -# is how Element Call picks up a new build of it: build it there, copy the -# generated TypeScript, the wasm-bindgen glue and the wasm here. -# -# scripts/sync-matrix-rtc-sdk.sh [path-to-MatrixSdkArchitectureDraft] [--no-build] -# -# The build uses web-test-app/ubrn.element-call.config.yaml (feature `uniffi` -# only, release profile, its own output directory so the app's test build is -# left alone). Pass --no-build to copy whatever was built last. - -set -euo pipefail - -DRAFT="${1:-../matrix-rust-rtc/MatrixSdkArchitectureDraft}" -BUILD=1 -for arg in "$@"; do - [[ "$arg" == "--no-build" ]] && BUILD=0 -done - -APP="$DRAFT/web-test-app" -GENERATED="$APP/src/generated-element-call" -DEST="$(cd "$(dirname "$0")/.." && pwd)/src/matrix-rtc-sdk/generated" - -if [[ ! -f "$APP/ubrn.element-call.config.yaml" ]]; then - echo "No web-test-app/ubrn.element-call.config.yaml under $DRAFT" >&2 - exit 1 -fi - -if [[ "$BUILD" == 1 ]]; then - (cd "$APP" && npx ubrn build web --config ubrn.element-call.config.yaml --release) -fi - -mkdir -p "$DEST/wasm-bindgen" -cp "$GENERATED/matrix_rtc.ts" "$GENERATED/matrix_rtc-ffi.ts" "$DEST/" -cp "$GENERATED/wasm-bindgen/index.js" "$GENERATED/wasm-bindgen/index_bg.wasm" "$DEST/wasm-bindgen/" - -REV="$(git -C "$DRAFT" rev-parse --short HEAD 2>/dev/null || echo unknown)" -DIRTY="$(git -C "$DRAFT" status --porcelain 2>/dev/null | grep -q . && echo '-dirty' || true)" -cat > "$DEST/VERSION" < void; -export type UniffiForeignFutureDroppedCallback = (handle: bigint) => void; -export type UniffiForeignFutureDroppedCallbackStruct = { - handle: bigint; - free: UniffiForeignFutureDroppedCallback; -}; -type UniffiCallbackInterfaceMatrixRtcConnectionsListenerMethod0 = (uniffiHandle: bigint, connections: Uint8Array) => UniffiResult; -type UniffiCallbackInterfaceCloneMatrixRtcConnectionsListener = (handle: bigint) => UniffiResult; -type UniffiCallbackInterfaceFreeMatrixRtcConnectionsListener = (handle: bigint) => void; -export type UniffiVTableCallbackInterfaceMatrixRtcConnectionsListener = { - uniffi_free: UniffiCallbackInterfaceFreeMatrixRtcConnectionsListener; - uniffi_clone: UniffiCallbackInterfaceCloneMatrixRtcConnectionsListener; - on_connections_change: UniffiCallbackInterfaceMatrixRtcConnectionsListenerMethod0; -}; -type UniffiCallbackInterfaceMatrixRtcKeyMapListenerMethod0 = (uniffiHandle: bigint, keyMap: Uint8Array, change: Uint8Array) => UniffiResult; -type UniffiCallbackInterfaceCloneMatrixRtcKeyMapListener = (handle: bigint) => UniffiResult; -type UniffiCallbackInterfaceFreeMatrixRtcKeyMapListener = (handle: bigint) => void; -export type UniffiVTableCallbackInterfaceMatrixRtcKeyMapListener = { - uniffi_free: UniffiCallbackInterfaceFreeMatrixRtcKeyMapListener; - uniffi_clone: UniffiCallbackInterfaceCloneMatrixRtcKeyMapListener; - on_key_map_change: UniffiCallbackInterfaceMatrixRtcKeyMapListenerMethod0; -}; -type UniffiCallbackInterfaceMatrixRtcKeyRejectedListenerMethod0 = (uniffiHandle: bigint, memberId: Uint8Array, reason: Uint8Array) => UniffiResult; -type UniffiCallbackInterfaceCloneMatrixRtcKeyRejectedListener = (handle: bigint) => UniffiResult; -type UniffiCallbackInterfaceFreeMatrixRtcKeyRejectedListener = (handle: bigint) => void; -export type UniffiVTableCallbackInterfaceMatrixRtcKeyRejectedListener = { - uniffi_free: UniffiCallbackInterfaceFreeMatrixRtcKeyRejectedListener; - uniffi_clone: UniffiCallbackInterfaceCloneMatrixRtcKeyRejectedListener; - on_key_rejected: UniffiCallbackInterfaceMatrixRtcKeyRejectedListenerMethod0; -}; -type UniffiCallbackInterfaceMatrixRtcLogSinkMethod0 = (uniffiHandle: bigint, level: Uint8Array, target: Uint8Array, message: Uint8Array) => UniffiResult; -type UniffiCallbackInterfaceCloneMatrixRtcLogSink = (handle: bigint) => UniffiResult; -type UniffiCallbackInterfaceFreeMatrixRtcLogSink = (handle: bigint) => void; -export type UniffiVTableCallbackInterfaceMatrixRtcLogSink = { - uniffi_free: UniffiCallbackInterfaceFreeMatrixRtcLogSink; - uniffi_clone: UniffiCallbackInterfaceCloneMatrixRtcLogSink; - log: UniffiCallbackInterfaceMatrixRtcLogSinkMethod0; -}; -export type UniffiForeignFutureResultRustBuffer = { - return_value: Uint8Array; - call_status: UniffiRustCallStatus; -}; -export type UniffiForeignFutureCompleterustBuffer = (callbackData: bigint, result: UniffiForeignFutureResultRustBuffer) => void; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod0 = (uniffiHandle: bigint, roomId: Uint8Array, eventType: Uint8Array, contentJson: Uint8Array, durationMs: bigint, uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod1 = (uniffiHandle: bigint, roomId: Uint8Array, eventType: Uint8Array, stateKey: Uint8Array, contentJson: Uint8Array, uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod2 = (uniffiHandle: bigint, roomId: Uint8Array, eventType: Uint8Array, contentJson: Uint8Array, delayMs: bigint, stickyDurationMs: Uint8Array, uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod3 = (uniffiHandle: bigint, roomId: Uint8Array, eventType: Uint8Array, stateKey: Uint8Array, contentJson: Uint8Array, delayMs: bigint, uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -export type UniffiForeignFutureResultVoid = { - call_status: UniffiRustCallStatus; -}; -export type UniffiForeignFutureCompletevoid = (callbackData: bigint, result: UniffiForeignFutureResultVoid) => void; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod4 = (uniffiHandle: bigint, roomId: Uint8Array, delayId: Uint8Array, uniffiFutureCallback: UniffiForeignFutureCompletevoid, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod5 = (uniffiHandle: bigint, roomId: Uint8Array, delayId: Uint8Array, uniffiFutureCallback: UniffiForeignFutureCompletevoid, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod6 = (uniffiHandle: bigint, request: Uint8Array, uniffiFutureCallback: UniffiForeignFutureCompletevoid, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod7 = (uniffiHandle: bigint, request: Uint8Array, uniffiFutureCallback: UniffiForeignFutureCompletevoid, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod8 = (uniffiHandle: bigint, recipients: Uint8Array, eventType: Uint8Array, contentJson: Uint8Array, uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod9 = (uniffiHandle: bigint, uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod10 = (uniffiHandle: bigint, request: Uint8Array, uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod11 = (uniffiHandle: bigint, eventType: Uint8Array, stateKey: Uint8Array, limit: number, uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod12 = (uniffiHandle: bigint, eventType: Uint8Array, stateKey: Uint8Array, uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, uniffiCallbackData: bigint) => UniffiForeignFutureDroppedCallbackStruct; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod13 = (uniffiHandle: bigint, sink: bigint) => UniffiResult; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod14 = (uniffiHandle: bigint, sink: bigint) => UniffiResult; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod15 = (uniffiHandle: bigint, sink: bigint) => UniffiResult; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod16 = (uniffiHandle: bigint) => number; -type UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod17 = (uniffiHandle: bigint, sink: bigint) => UniffiResult; -type UniffiCallbackInterfaceCloneMatrixRtcMatrixDriverCallback = (handle: bigint) => UniffiResult; -type UniffiCallbackInterfaceFreeMatrixRtcMatrixDriverCallback = (handle: bigint) => void; -export type UniffiVTableCallbackInterfaceMatrixRtcMatrixDriverCallback = { - uniffi_free: UniffiCallbackInterfaceFreeMatrixRtcMatrixDriverCallback; - uniffi_clone: UniffiCallbackInterfaceCloneMatrixRtcMatrixDriverCallback; - send_sticky_event: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod0; - send_state_event: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod1; - send_delayed_event: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod2; - send_delayed_state_event: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod3; - restart_delayed_event: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod4; - cancel_delayed_event: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod5; - delegate_delayed_leave_via_homeserver: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod6; - delegate_delayed_leave_via_transport: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod7; - send_to_device: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod8; - get_rtc_transports: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod9; - get_livekit_token: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod10; - read_events: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod11; - read_state: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod12; - subscribe_room_events: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod13; - subscribe_to_device_events: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod14; - subscribe_state_updates: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod15; - is_homeserver_connected: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod16; - subscribe_connectivity: UniffiCallbackInterfaceMatrixRtcMatrixDriverCallbackMethod17; -}; -type UniffiCallbackInterfaceMatrixRtcMembershipsListenerMethod0 = (uniffiHandle: bigint, memberships: Uint8Array) => UniffiResult; -type UniffiCallbackInterfaceCloneMatrixRtcMembershipsListener = (handle: bigint) => UniffiResult; -type UniffiCallbackInterfaceFreeMatrixRtcMembershipsListener = (handle: bigint) => void; -export type UniffiVTableCallbackInterfaceMatrixRtcMembershipsListener = { - uniffi_free: UniffiCallbackInterfaceFreeMatrixRtcMembershipsListener; - uniffi_clone: UniffiCallbackInterfaceCloneMatrixRtcMembershipsListener; - on_memberships_change: UniffiCallbackInterfaceMatrixRtcMembershipsListenerMethod0; -}; -type UniffiCallbackInterfaceMatrixRtcSessionListenerMethod0 = (uniffiHandle: bigint, session: Uint8Array) => UniffiResult; -type UniffiCallbackInterfaceCloneMatrixRtcSessionListener = (handle: bigint) => UniffiResult; -type UniffiCallbackInterfaceFreeMatrixRtcSessionListener = (handle: bigint) => void; -export type UniffiVTableCallbackInterfaceMatrixRtcSessionListener = { - uniffi_free: UniffiCallbackInterfaceFreeMatrixRtcSessionListener; - uniffi_clone: UniffiCallbackInterfaceCloneMatrixRtcSessionListener; - on_session_change: UniffiCallbackInterfaceMatrixRtcSessionListenerMethod0; -}; -type UniffiCallbackInterfaceMatrixRtcStatusListenerMethod0 = (uniffiHandle: bigint, status: Uint8Array) => UniffiResult; -type UniffiCallbackInterfaceCloneMatrixRtcStatusListener = (handle: bigint) => UniffiResult; -type UniffiCallbackInterfaceFreeMatrixRtcStatusListener = (handle: bigint) => void; -export type UniffiVTableCallbackInterfaceMatrixRtcStatusListener = { - uniffi_free: UniffiCallbackInterfaceFreeMatrixRtcStatusListener; - uniffi_clone: UniffiCallbackInterfaceCloneMatrixRtcStatusListener; - on_status_change: UniffiCallbackInterfaceMatrixRtcStatusListenerMethod0; -}; \ No newline at end of file diff --git a/src/matrix-rtc-sdk/generated/matrix_rtc.ts b/src/matrix-rtc-sdk/generated/matrix_rtc.ts deleted file mode 100644 index d34986c1f..000000000 --- a/src/matrix-rtc-sdk/generated/matrix_rtc.ts +++ /dev/null @@ -1,9440 +0,0 @@ -// This file was autogenerated by some hot garbage in the `uniffi-bindgen-react-native` crate. -// Trust me, you don't want to mess with it! -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -import * as wasmBundle from "./wasm-bindgen/index.js"; -import { type UniffiRustFutureContinuationCallback, type UniffiForeignFutureDroppedCallback, type UniffiForeignFutureDroppedCallbackStruct, type UniffiVTableCallbackInterfaceMatrixRtcConnectionsListener, type UniffiVTableCallbackInterfaceMatrixRtcKeyMapListener, type UniffiVTableCallbackInterfaceMatrixRtcKeyRejectedListener, type UniffiVTableCallbackInterfaceMatrixRtcLogSink, type UniffiForeignFutureResultRustBuffer, type UniffiForeignFutureCompleterustBuffer, type UniffiForeignFutureResultVoid, type UniffiForeignFutureCompletevoid, type UniffiVTableCallbackInterfaceMatrixRtcMatrixDriverCallback, type UniffiVTableCallbackInterfaceMatrixRtcMembershipsListener, type UniffiVTableCallbackInterfaceMatrixRtcSessionListener, type UniffiVTableCallbackInterfaceMatrixRtcStatusListener, -} from "./matrix_rtc-ffi"; -import { type FfiConverter, type UniffiByteArray, type UniffiGcObject, type UniffiHandle, type UniffiObjectFactory, type UniffiReferenceHolder, type UniffiRustCallStatus, AbstractFfiConverterByteArray, Cursor, FfiConverterArray, FfiConverterArrayBuffer, FfiConverterBool, FfiConverterObject, FfiConverterObjectWithCallbacks, FfiConverterOptional, FfiConverterUInt32, FfiConverterUInt64, FfiConverterUInt8, RustBuffer, UniffiAbstractObject, UniffiEnum, UniffiError, UniffiInternalError, UniffiResult, UniffiRustCaller, destructorGuardSymbol, pointerLiteralSymbol, uniffiCreateFfiConverterString, uniffiCreateRecord, uniffiRustCallAsync, uniffiTraitInterfaceCall, uniffiTraitInterfaceCallAsyncWithError, uniffiTypeNameSymbol, variantOrdinalSymbol, -} from "@ubjs/core"; -// wasm1: wrap the wasm-bindgen namespace once so the codegen call sites can -// uniformly reference `nativeModule().rustbuffer_alloc` / `.rustbuffer_free`. -// For wasm1, RustBuffers are plain JS Uint8Arrays — no Rust-side allocation -// is involved, so alloc just hands back a fresh view and free is a no-op. -const _nativeModule = Object.assign({}, wasmBundle, { - rustbuffer_alloc: (n: number): Uint8Array => new Uint8Array(n), - rustbuffer_free: (_: Uint8Array): void => {}, -}); -const nativeModule = () => _nativeModule; -const uniffiCaller = new UniffiRustCaller(() => new wasmBundle.RustCallStatus()); - -const uniffiIsDebug = - // @ts-ignore -- The process global might not be defined - typeof process !== "object" || - // @ts-ignore -- The process global might not be defined - process?.env?.NODE_ENV !== "production" || - false; - -// Public interface members begin here. - -/** - * Static session computation for room-list / header info: values, not - * subscriptions — call it on every room update and populate room_info from - * the snapshot fields. Takes all relevant events in one list (sticky and - * state, many rooms at once — the dispatch groups by room and slot). - * Origins are unknown here, so origin-dependent conditions stay - * unenforced — fine for room-info purposes. - */ -export function computeSessionsFromEvents(eventsJson: Array, compat: FfiElementCallCompat): Array /*throws*/ { - const __rb: Uint8Array = uniffiCaller.rustCallWithError( - /*liftError:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError), - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_func_compute_sessions_from_events( - FfiConverterSequenceString.lower(eventsJson, nativeModule().rustbuffer_alloc), - FfiConverterTypeFfiElementCallCompat.lower(compat, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterSequenceTypeFfiSessionSnapshot.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - -/** - * The severity of one impairment, so a host can sort or filter without - * re-deriving the table. (`impairments` already arrives sorted, most severe - * first.) - */ -export function impairmentSeverity(impairment: FfiImpairment): FfiSeverity { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_func_impairment_severity( - FfiConverterTypeFfiImpairment.lower(impairment, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterTypeFfiSeverity.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - -/** - * Routes the crate's log lines to `sink`, at `max_level` and above. Call - * once after the bindings are initialised; calling again replaces the sink - * and the level. The `log` facade accepts one logger per process, so if the - * host already installed a Rust logger of its own (a native host with - * `tracing`), that one keeps the lines and the sink stays silent. - */ -export function setLogSink(sink: LogSink, maxLevel: FfiLogLevel): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_func_set_log_sink( - FfiConverterTypeLogSink.lower(sink, nativeModule().rustbuffer_alloc), - FfiConverterTypeFfiLogLevel.lower(maxLevel, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - -const stringConverter = (() => { - const encoder = new TextEncoder(); - const decoder = new TextDecoder(); - return { - stringToBytes: (s: string) => encoder.encode(s), - bytesToString: (ab: UniffiByteArray) => decoder.decode(ab), - stringByteLength: (s: string) => encoder.encode(s).byteLength, - writeStringIntoBuffer: (s: string, buf: any, offset: number): number => { - const view = new Uint8Array( - buf.arrayBuffer, - offset, - buf.arrayBuffer.byteLength - offset, - ); - return encoder.encodeInto(s, view).written; - }, - readStringFromBuffer: (buf: any, offset: number, length: number): string => - decoder.decode(new Uint8Array(buf.arrayBuffer, offset, length)), - }; -})(); -const FfiConverterString = uniffiCreateFfiConverterString(stringConverter); - -export type FfiConnectionData = { - /** - * The connection key (`livekit_service_url`) `FfiMembership::connections` - * refers to. - */ - serviceUrl: string, - /** - * The SFU websocket URL to connect to. - */ - wsUrl: string, - jwtToken: string, - /** - * From the JWT's `exp`; `None` when it carries none. A failed re-mint - * keeps the old token (a host may still be connected on it), so check - * this rather than discovering staleness through a failed connect. - */ - expiresAtTs?: bigint -} - -/** - * Generated factory for {@link FfiConnectionData} record objects. - */ -export const FfiConnectionData = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiConnectionData = (() => { - type TypeName = FfiConnectionData; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - serviceUrl: FfiConverterString.readFromCursor(c), - wsUrl: FfiConverterString.readFromCursor(c), - jwtToken: FfiConverterString.readFromCursor(c), - expiresAtTs: FfiConverterOptionalUInt64.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.serviceUrl, c); - FfiConverterString.writeIntoCursor(value.wsUrl, c); - FfiConverterString.writeIntoCursor(value.jwtToken, c); - FfiConverterOptionalUInt64.writeIntoCursor(value.expiresAtTs, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.serviceUrl) + - FfiConverterString.allocationSize(value.wsUrl) + - FfiConverterString.allocationSize(value.jwtToken) + - FfiConverterOptionalUInt64.allocationSize(value.expiresAtTs); - - } - }; - return new FFIConverter(); -})(); - -export enum FfiConnectionProblemKind { - /** - * Wanted, never minted — absent from `connections()` entirely. - */ - NoToken, - /** - * Present in `connections()` but its JWT is past `exp`. - */ - TokenExpired -} - -const FfiConverterTypeFfiConnectionProblemKind = (() => { - type TypeName = FfiConnectionProblemKind; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiConnectionProblemKind.NoToken; - case 2: return FfiConnectionProblemKind.TokenExpired; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiConnectionProblemKind.NoToken: return c.writeI32(1); - case FfiConnectionProblemKind.TokenExpired: return c.writeI32(2); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - -/** - * A connection the session needs that the host cannot currently use. - */ -export type FfiConnectionProblem = { - serviceUrl: string, - /** - * Members whose media is unavailable because of it. - */ - memberIds: Array, - kind: FfiConnectionProblemKind, - lastError: string, - /** - * When the next mint is due; `0` = at the next beat. - */ - retryAtTs: bigint -} - -/** - * Generated factory for {@link FfiConnectionProblem} record objects. - */ -export const FfiConnectionProblem = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiConnectionProblem = (() => { - type TypeName = FfiConnectionProblem; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - serviceUrl: FfiConverterString.readFromCursor(c), - memberIds: FfiConverterSequenceString.readFromCursor(c), - kind: FfiConverterTypeFfiConnectionProblemKind.readFromCursor(c), - lastError: FfiConverterString.readFromCursor(c), - retryAtTs: FfiConverterUInt64.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.serviceUrl, c); - FfiConverterSequenceString.writeIntoCursor(value.memberIds, c); - FfiConverterTypeFfiConnectionProblemKind.writeIntoCursor(value.kind, c); - FfiConverterString.writeIntoCursor(value.lastError, c); - FfiConverterUInt64.writeIntoCursor(value.retryAtTs, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.serviceUrl) + - FfiConverterSequenceString.allocationSize(value.memberIds) + - FfiConverterTypeFfiConnectionProblemKind.allocationSize(value.kind) + - FfiConverterString.allocationSize(value.lastError) + - FfiConverterUInt64.allocationSize(value.retryAtTs); - - } - }; - return new FFIConverter(); -})(); - -export enum FfiDeviceAttribution { - Verified, - Claimed, - Unknown -} - -const FfiConverterTypeFfiDeviceAttribution = (() => { - type TypeName = FfiDeviceAttribution; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiDeviceAttribution.Verified; - case 2: return FfiDeviceAttribution.Claimed; - case 3: return FfiDeviceAttribution.Unknown; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiDeviceAttribution.Verified: return c.writeI32(1); - case FfiDeviceAttribution.Claimed: return c.writeI32(2); - case FfiDeviceAttribution.Unknown: return c.writeI32(3); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - -export type FfiRtcTransport = { - transportType: string, - /** - * Type-specific fields as a JSON string (LiveKit: `livekit_service_url`). - */ - propertiesJson: string -} - -/** - * Generated factory for {@link FfiRtcTransport} record objects. - */ -export const FfiRtcTransport = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiRtcTransport = (() => { - type TypeName = FfiRtcTransport; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - transportType: FfiConverterString.readFromCursor(c), - propertiesJson: FfiConverterString.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.transportType, c); - FfiConverterString.writeIntoCursor(value.propertiesJson, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.transportType) + - FfiConverterString.allocationSize(value.propertiesJson); - - } - }; - return new FFIConverter(); -})(); - -export type FfiMember = { - memberId: string, - userId: string, - deviceId?: string, - deviceAttribution: FfiDeviceAttribution, - /** - * `origin_server_ts` of the event that started this participation, where - * the dialect needs it to tell joins apart (MSC3401 compat). - */ - membershipTs?: bigint, - /** - * From the room's `m.room.member` state for this user, kept current by - * the session: a rename shows up as a memberships change. - */ - displayName?: string, - avatarUrl?: string, - /** - * The membership event this entry was projected from — the *current* - * one, so it changes on every re-send. Relate application events - * (reactions, hand raises) to it. `None` for a member without an event - * yet (our own entry before the echo). - */ - eventId?: string, - intent?: string, - applicationType?: string, - /** - * The transports this member publishes on. - */ - publishedTransports: Array, - canSubscribe: Array -} - -/** - * Generated factory for {@link FfiMember} record objects. - */ -export const FfiMember = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiMember = (() => { - type TypeName = FfiMember; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - memberId: FfiConverterString.readFromCursor(c), - userId: FfiConverterString.readFromCursor(c), - deviceId: FfiConverterOptionalString.readFromCursor(c), - deviceAttribution: FfiConverterTypeFfiDeviceAttribution.readFromCursor(c), - membershipTs: FfiConverterOptionalUInt64.readFromCursor(c), - displayName: FfiConverterOptionalString.readFromCursor(c), - avatarUrl: FfiConverterOptionalString.readFromCursor(c), - eventId: FfiConverterOptionalString.readFromCursor(c), - intent: FfiConverterOptionalString.readFromCursor(c), - applicationType: FfiConverterOptionalString.readFromCursor(c), - publishedTransports: FfiConverterSequenceTypeFfiRtcTransport.readFromCursor(c), - canSubscribe: FfiConverterSequenceString.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.memberId, c); - FfiConverterString.writeIntoCursor(value.userId, c); - FfiConverterOptionalString.writeIntoCursor(value.deviceId, c); - FfiConverterTypeFfiDeviceAttribution.writeIntoCursor(value.deviceAttribution, c); - FfiConverterOptionalUInt64.writeIntoCursor(value.membershipTs, c); - FfiConverterOptionalString.writeIntoCursor(value.displayName, c); - FfiConverterOptionalString.writeIntoCursor(value.avatarUrl, c); - FfiConverterOptionalString.writeIntoCursor(value.eventId, c); - FfiConverterOptionalString.writeIntoCursor(value.intent, c); - FfiConverterOptionalString.writeIntoCursor(value.applicationType, c); - FfiConverterSequenceTypeFfiRtcTransport.writeIntoCursor(value.publishedTransports, c); - FfiConverterSequenceString.writeIntoCursor(value.canSubscribe, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.memberId) + - FfiConverterString.allocationSize(value.userId) + - FfiConverterOptionalString.allocationSize(value.deviceId) + - FfiConverterTypeFfiDeviceAttribution.allocationSize(value.deviceAttribution) + - FfiConverterOptionalUInt64.allocationSize(value.membershipTs) + - FfiConverterOptionalString.allocationSize(value.displayName) + - FfiConverterOptionalString.allocationSize(value.avatarUrl) + - FfiConverterOptionalString.allocationSize(value.eventId) + - FfiConverterOptionalString.allocationSize(value.intent) + - FfiConverterOptionalString.allocationSize(value.applicationType) + - FfiConverterSequenceTypeFfiRtcTransport.allocationSize(value.publishedTransports) + - FfiConverterSequenceString.allocationSize(value.canSubscribe); - - } - }; - return new FFIConverter(); -})(); - -export type FfiConnectionWithMembers = { - connection: FfiConnectionData, - members: Array -} - -/** - * Generated factory for {@link FfiConnectionWithMembers} record objects. - */ -export const FfiConnectionWithMembers = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiConnectionWithMembers = (() => { - type TypeName = FfiConnectionWithMembers; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - connection: FfiConverterTypeFfiConnectionData.readFromCursor(c), - members: FfiConverterSequenceTypeFfiMember.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterTypeFfiConnectionData.writeIntoCursor(value.connection, c); - FfiConverterSequenceTypeFfiMember.writeIntoCursor(value.members, c); - } - allocationSize(value: TypeName): number { - return FfiConverterTypeFfiConnectionData.allocationSize(value.connection) + - FfiConverterSequenceTypeFfiMember.allocationSize(value.members); - - } - }; - return new FFIConverter(); -})(); - -export enum FfiJoinExclusionReason { - SlotClosed, - UnencryptedInEncryptedRoom, - SenderNotInRoom, - Expired -} - -const FfiConverterTypeFfiJoinExclusionReason = (() => { - type TypeName = FfiJoinExclusionReason; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiJoinExclusionReason.SlotClosed; - case 2: return FfiJoinExclusionReason.UnencryptedInEncryptedRoom; - case 3: return FfiJoinExclusionReason.SenderNotInRoom; - case 4: return FfiJoinExclusionReason.Expired; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiJoinExclusionReason.SlotClosed: return c.writeI32(1); - case FfiJoinExclusionReason.UnencryptedInEncryptedRoom: return c.writeI32(2); - case FfiJoinExclusionReason.SenderNotInRoom: return c.writeI32(3); - case FfiJoinExclusionReason.Expired: return c.writeI32(4); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - -export type FfiExcludedCandidate = { - member: FfiMember, - reason: FfiJoinExclusionReason -} - -/** - * Generated factory for {@link FfiExcludedCandidate} record objects. - */ -export const FfiExcludedCandidate = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiExcludedCandidate = (() => { - type TypeName = FfiExcludedCandidate; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - member: FfiConverterTypeFfiMember.readFromCursor(c), - reason: FfiConverterTypeFfiJoinExclusionReason.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterTypeFfiMember.writeIntoCursor(value.member, c); - FfiConverterTypeFfiJoinExclusionReason.writeIntoCursor(value.reason, c); - } - allocationSize(value: TypeName): number { - return FfiConverterTypeFfiMember.allocationSize(value.member) + - FfiConverterTypeFfiJoinExclusionReason.allocationSize(value.reason); - - } - }; - return new FFIConverter(); -})(); - -/** - * See `driver::TransportDelegationRequest`: the token request with the - * MSC4195 through the homeserver: `POST - * /_matrix/client/unstable/io.element.msc4195/rtc/livekit/delegate_delayed_leave` - * with the body `{ url, room_id, slot_id, member, delay_id, delay_timeout }` - * — `url` is `sfu_url`, `member` is `member_json` parsed, `delay_timeout` - * is `delay_timeout_ms`. - */ -export type FfiHomeserverDelegationRequest = { - /** - * The SFU websocket URL our token named: the service checks it is its own. - */ - sfuUrl: string, - /** - * The authorisation service of the transport we publish on. - */ - livekitServiceUrl: string, - roomId: string, - slotId: string, - /** - * MSC4195 member claims `{ id, claimed_user_id, claimed_device_id }`. - */ - memberJson: string, - delayId: string, - delayTimeoutMs: bigint -} - -/** - * Generated factory for {@link FfiHomeserverDelegationRequest} record objects. - */ -export const FfiHomeserverDelegationRequest = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiHomeserverDelegationRequest = (() => { - type TypeName = FfiHomeserverDelegationRequest; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - sfuUrl: FfiConverterString.readFromCursor(c), - livekitServiceUrl: FfiConverterString.readFromCursor(c), - roomId: FfiConverterString.readFromCursor(c), - slotId: FfiConverterString.readFromCursor(c), - memberJson: FfiConverterString.readFromCursor(c), - delayId: FfiConverterString.readFromCursor(c), - delayTimeoutMs: FfiConverterUInt64.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.sfuUrl, c); - FfiConverterString.writeIntoCursor(value.livekitServiceUrl, c); - FfiConverterString.writeIntoCursor(value.roomId, c); - FfiConverterString.writeIntoCursor(value.slotId, c); - FfiConverterString.writeIntoCursor(value.memberJson, c); - FfiConverterString.writeIntoCursor(value.delayId, c); - FfiConverterUInt64.writeIntoCursor(value.delayTimeoutMs, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.sfuUrl) + - FfiConverterString.allocationSize(value.livekitServiceUrl) + - FfiConverterString.allocationSize(value.roomId) + - FfiConverterString.allocationSize(value.slotId) + - FfiConverterString.allocationSize(value.memberJson) + - FfiConverterString.allocationSize(value.delayId) + - FfiConverterUInt64.allocationSize(value.delayTimeoutMs); - - } - }; - return new FFIConverter(); -})(); - -export type FfiJoinParams = { - applicationType: string, - /** - * `application["m.call.intent"]`. - */ - intent?: string, - stickyDurationMs: bigint, - keepAliveTimeoutMs: bigint, - /** - * Lifetime when the homeserver refuses delayed events (default 5 min). - */ - degradedLifetimeMs?: bigint, - /** - * Hand the delayed leave to the SFU (MSC4195): the crate tries the - * homeserver, then the authorisation service, then keeps restarting the - * leave itself. - */ - delegateDelayedLeave: boolean, - /** - * The delay of the delegated leave (MSC4195 asks for ≥ 1 h); the short - * `keep_alive_timeout_ms` leave stays armed until delegation is confirmed. - */ - delegatedDelayMs: bigint -} - -/** - * Generated factory for {@link FfiJoinParams} record objects. - */ -export const FfiJoinParams = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiJoinParams = (() => { - type TypeName = FfiJoinParams; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - applicationType: FfiConverterString.readFromCursor(c), - intent: FfiConverterOptionalString.readFromCursor(c), - stickyDurationMs: FfiConverterUInt64.readFromCursor(c), - keepAliveTimeoutMs: FfiConverterUInt64.readFromCursor(c), - degradedLifetimeMs: FfiConverterOptionalUInt64.readFromCursor(c), - delegateDelayedLeave: FfiConverterBool.readFromCursor(c), - delegatedDelayMs: FfiConverterUInt64.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.applicationType, c); - FfiConverterOptionalString.writeIntoCursor(value.intent, c); - FfiConverterUInt64.writeIntoCursor(value.stickyDurationMs, c); - FfiConverterUInt64.writeIntoCursor(value.keepAliveTimeoutMs, c); - FfiConverterOptionalUInt64.writeIntoCursor(value.degradedLifetimeMs, c); - FfiConverterBool.writeIntoCursor(value.delegateDelayedLeave, c); - FfiConverterUInt64.writeIntoCursor(value.delegatedDelayMs, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.applicationType) + - FfiConverterOptionalString.allocationSize(value.intent) + - FfiConverterUInt64.allocationSize(value.stickyDurationMs) + - FfiConverterUInt64.allocationSize(value.keepAliveTimeoutMs) + - FfiConverterOptionalUInt64.allocationSize(value.degradedLifetimeMs) + - FfiConverterBool.allocationSize(value.delegateDelayedLeave) + - FfiConverterUInt64.allocationSize(value.delegatedDelayMs); - - } - }; - return new FFIConverter(); -})(); - -/** - * Join progress, step by step. - */ -export type FfiJoinProgress = { - hasFetchedTransports: boolean, - hasFetchedInitialMemberList: boolean, - hasCreatedTransportToken: boolean, - hasSentDelayedLeaveEvent: boolean, - hasSentMemberJoinEvent: boolean, - hasDelegatedDelayedEvent: boolean, - hasStartedHeartbeat: boolean -} - -/** - * Generated factory for {@link FfiJoinProgress} record objects. - */ -export const FfiJoinProgress = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiJoinProgress = (() => { - type TypeName = FfiJoinProgress; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - hasFetchedTransports: FfiConverterBool.readFromCursor(c), - hasFetchedInitialMemberList: FfiConverterBool.readFromCursor(c), - hasCreatedTransportToken: FfiConverterBool.readFromCursor(c), - hasSentDelayedLeaveEvent: FfiConverterBool.readFromCursor(c), - hasSentMemberJoinEvent: FfiConverterBool.readFromCursor(c), - hasDelegatedDelayedEvent: FfiConverterBool.readFromCursor(c), - hasStartedHeartbeat: FfiConverterBool.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterBool.writeIntoCursor(value.hasFetchedTransports, c); - FfiConverterBool.writeIntoCursor(value.hasFetchedInitialMemberList, c); - FfiConverterBool.writeIntoCursor(value.hasCreatedTransportToken, c); - FfiConverterBool.writeIntoCursor(value.hasSentDelayedLeaveEvent, c); - FfiConverterBool.writeIntoCursor(value.hasSentMemberJoinEvent, c); - FfiConverterBool.writeIntoCursor(value.hasDelegatedDelayedEvent, c); - FfiConverterBool.writeIntoCursor(value.hasStartedHeartbeat, c); - } - allocationSize(value: TypeName): number { - return FfiConverterBool.allocationSize(value.hasFetchedTransports) + - FfiConverterBool.allocationSize(value.hasFetchedInitialMemberList) + - FfiConverterBool.allocationSize(value.hasCreatedTransportToken) + - FfiConverterBool.allocationSize(value.hasSentDelayedLeaveEvent) + - FfiConverterBool.allocationSize(value.hasSentMemberJoinEvent) + - FfiConverterBool.allocationSize(value.hasDelegatedDelayedEvent) + - FfiConverterBool.allocationSize(value.hasStartedHeartbeat); - - } - }; - return new FFIConverter(); -})(); - -export type FfiLivekitToken = { - jwt: string, - /** - * The SFU websocket URL from the response, when it returned one. - */ - url?: string -} - -/** - * Generated factory for {@link FfiLivekitToken} record objects. - */ -export const FfiLivekitToken = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiLivekitToken = (() => { - type TypeName = FfiLivekitToken; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - jwt: FfiConverterString.readFromCursor(c), - url: FfiConverterOptionalString.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.jwt, c); - FfiConverterOptionalString.writeIntoCursor(value.url, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.jwt) + - FfiConverterOptionalString.allocationSize(value.url); - - } - }; - return new FFIConverter(); -})(); - -/** - * See `driver::LivekitTokenRequest`: the driver fetches the OpenID token - * itself and posts `{ room_id, slot_id, openid_token, member }` to - * `{url}/get_token` — or, with `legacy_sfu_get`, `{ room: room_id, - * openid_token, device_id }` to `{url}/sfu/get`. - */ -export type FfiLivekitTokenRequest = { - url: string, - roomId: string, - slotId: string, - /** - * MSC4195 member claims `{ id, claimed_user_id, claimed_device_id }`. - */ - memberJson: string, - legacySfuGet: boolean -} - -/** - * Generated factory for {@link FfiLivekitTokenRequest} record objects. - */ -export const FfiLivekitTokenRequest = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiLivekitTokenRequest = (() => { - type TypeName = FfiLivekitTokenRequest; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - url: FfiConverterString.readFromCursor(c), - roomId: FfiConverterString.readFromCursor(c), - slotId: FfiConverterString.readFromCursor(c), - memberJson: FfiConverterString.readFromCursor(c), - legacySfuGet: FfiConverterBool.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.url, c); - FfiConverterString.writeIntoCursor(value.roomId, c); - FfiConverterString.writeIntoCursor(value.slotId, c); - FfiConverterString.writeIntoCursor(value.memberJson, c); - FfiConverterBool.writeIntoCursor(value.legacySfuGet, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.url) + - FfiConverterString.allocationSize(value.roomId) + - FfiConverterString.allocationSize(value.slotId) + - FfiConverterString.allocationSize(value.memberJson) + - FfiConverterBool.allocationSize(value.legacySfuGet); - - } - }; - return new FFIConverter(); -})(); - -export type FfiMediaKey = { - memberId: string, - key: ArrayBuffer, - index: number, - creationTsMs: bigint -} - -/** - * Generated factory for {@link FfiMediaKey} record objects. - */ -export const FfiMediaKey = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiMediaKey = (() => { - type TypeName = FfiMediaKey; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - memberId: FfiConverterString.readFromCursor(c), - key: FfiConverterArrayBuffer.readFromCursor(c), - index: FfiConverterUInt8.readFromCursor(c), - creationTsMs: FfiConverterUInt64.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.memberId, c); - FfiConverterArrayBuffer.writeIntoCursor(value.key, c); - FfiConverterUInt8.writeIntoCursor(value.index, c); - FfiConverterUInt64.writeIntoCursor(value.creationTsMs, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.memberId) + - FfiConverterArrayBuffer.allocationSize(value.key) + - FfiConverterUInt8.allocationSize(value.index) + - FfiConverterUInt64.allocationSize(value.creationTsMs); - - } - }; - return new FFIConverter(); -})(); - -/** - * Why an inbound media key was discarded — the answer to "why can't I hear - * them?", which the crate computes and used to drop on the floor. - */ -export enum FfiKeyRejection { - Cleartext, - UnknownOrigin, - SenderMismatch, - DeviceMismatch, - UnattributableMember, - NotCrossSigned, - WrongRoom, - Outdated, - NotManagingKeys -} - -const FfiConverterTypeFfiKeyRejection = (() => { - type TypeName = FfiKeyRejection; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiKeyRejection.Cleartext; - case 2: return FfiKeyRejection.UnknownOrigin; - case 3: return FfiKeyRejection.SenderMismatch; - case 4: return FfiKeyRejection.DeviceMismatch; - case 5: return FfiKeyRejection.UnattributableMember; - case 6: return FfiKeyRejection.NotCrossSigned; - case 7: return FfiKeyRejection.WrongRoom; - case 8: return FfiKeyRejection.Outdated; - case 9: return FfiKeyRejection.NotManagingKeys; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiKeyRejection.Cleartext: return c.writeI32(1); - case FfiKeyRejection.UnknownOrigin: return c.writeI32(2); - case FfiKeyRejection.SenderMismatch: return c.writeI32(3); - case FfiKeyRejection.DeviceMismatch: return c.writeI32(4); - case FfiKeyRejection.UnattributableMember: return c.writeI32(5); - case FfiKeyRejection.NotCrossSigned: return c.writeI32(6); - case FfiKeyRejection.WrongRoom: return c.writeI32(7); - case FfiKeyRejection.Outdated: return c.writeI32(8); - case FfiKeyRejection.NotManagingKeys: return c.writeI32(9); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - -/** - * Who can hear whom, for one tile. Two independent booleans: they fail for - * different reasons and a UI renders them in different places. - */ -export type FfiMediaKeyState = { - /** - * They hold our current key: they can decrypt us. - */ - holdsOurKey: boolean, - /** - * We hold theirs: we can decrypt them. - */ - haveTheirKey: boolean, - /** - * Why their most recent key was discarded, while we still lack one. - */ - rejection?: FfiKeyRejection, - /** - * MSC4153: whether the device that sent the key we hold from them is - * cross-signed by its owner; `None` while we hold none or the host - * could not tell. Reported whether or not the check is enforced. - */ - senderCrossSigned?: boolean -} - -/** - * Generated factory for {@link FfiMediaKeyState} record objects. - */ -export const FfiMediaKeyState = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiMediaKeyState = (() => { - type TypeName = FfiMediaKeyState; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - holdsOurKey: FfiConverterBool.readFromCursor(c), - haveTheirKey: FfiConverterBool.readFromCursor(c), - rejection: FfiConverterOptionalTypeFfiKeyRejection.readFromCursor(c), - senderCrossSigned: FfiConverterOptionalBoolean.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterBool.writeIntoCursor(value.holdsOurKey, c); - FfiConverterBool.writeIntoCursor(value.haveTheirKey, c); - FfiConverterOptionalTypeFfiKeyRejection.writeIntoCursor(value.rejection, c); - FfiConverterOptionalBoolean.writeIntoCursor(value.senderCrossSigned, c); - } - allocationSize(value: TypeName): number { - return FfiConverterBool.allocationSize(value.holdsOurKey) + - FfiConverterBool.allocationSize(value.haveTheirKey) + - FfiConverterOptionalTypeFfiKeyRejection.allocationSize(value.rejection) + - FfiConverterOptionalBoolean.allocationSize(value.senderCrossSigned); - - } - }; - return new FFIConverter(); -})(); - -export enum FfiMembershipState { - /** - * In the session's joined projection. - */ - Joined, - /** - * Left the session but still holds a not-yet-rotated copy of our media - * key — render as "leaving / may still be listening" until rotation - * settles. - */ - LeftWithKeys -} - -const FfiConverterTypeFfiMembershipState = (() => { - type TypeName = FfiMembershipState; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiMembershipState.Joined; - case 2: return FfiMembershipState.LeftWithKeys; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiMembershipState.Joined: return c.writeI32(1); - case FfiMembershipState.LeftWithKeys: return c.writeI32(2); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - -/** - * One entry of the membership list — everything needed to render a tile - * and later attach its media from the LK rooms. - */ -export type FfiMembership = { - member: FfiMember, - state: FfiMembershipState, - /** - * `service_url`s (the connection key, `FfiConnectionData::service_url`) - * of the connections this member publishes on — the LK room(s) carrying - * their media. Empty for receive-only members and `LeftWithKeys` - * entries. - */ - connections: Array, - /** - * Participant identity inside those LK rooms (MSC4195 pseudonymous - * hash; `{user}:{device}` in legacy compat mode). - */ - transportIdentity?: string, - /** - * Whether this member and we can hear each other. `None` when the call - * does not manage media keys, for our own tile, and while not joined. - */ - mediaKey?: FfiMediaKeyState -} - -/** - * Generated factory for {@link FfiMembership} record objects. - */ -export const FfiMembership = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiMembership = (() => { - type TypeName = FfiMembership; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - member: FfiConverterTypeFfiMember.readFromCursor(c), - state: FfiConverterTypeFfiMembershipState.readFromCursor(c), - connections: FfiConverterSequenceString.readFromCursor(c), - transportIdentity: FfiConverterOptionalString.readFromCursor(c), - mediaKey: FfiConverterOptionalTypeFfiMediaKeyState.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterTypeFfiMember.writeIntoCursor(value.member, c); - FfiConverterTypeFfiMembershipState.writeIntoCursor(value.state, c); - FfiConverterSequenceString.writeIntoCursor(value.connections, c); - FfiConverterOptionalString.writeIntoCursor(value.transportIdentity, c); - FfiConverterOptionalTypeFfiMediaKeyState.writeIntoCursor(value.mediaKey, c); - } - allocationSize(value: TypeName): number { - return FfiConverterTypeFfiMember.allocationSize(value.member) + - FfiConverterTypeFfiMembershipState.allocationSize(value.state) + - FfiConverterSequenceString.allocationSize(value.connections) + - FfiConverterOptionalString.allocationSize(value.transportIdentity) + - FfiConverterOptionalTypeFfiMediaKeyState.allocationSize(value.mediaKey); - - } - }; - return new FFIConverter(); -})(); - -/** - * Our sticky membership event on the server (MSC4354). - */ -export type FfiMembershipPublication = { - lifetimeMs: bigint, - lastPublishedTs: bigint, - /** - * `last_published_ts + lifetime_ms` — when the server drops us if no - * refresh lands. - */ - expiresAtTs: bigint, - refreshFailingSinceTs?: bigint, - lastRefreshError?: string -} - -/** - * Generated factory for {@link FfiMembershipPublication} record objects. - */ -export const FfiMembershipPublication = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiMembershipPublication = (() => { - type TypeName = FfiMembershipPublication; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - lifetimeMs: FfiConverterUInt64.readFromCursor(c), - lastPublishedTs: FfiConverterUInt64.readFromCursor(c), - expiresAtTs: FfiConverterUInt64.readFromCursor(c), - refreshFailingSinceTs: FfiConverterOptionalUInt64.readFromCursor(c), - lastRefreshError: FfiConverterOptionalString.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterUInt64.writeIntoCursor(value.lifetimeMs, c); - FfiConverterUInt64.writeIntoCursor(value.lastPublishedTs, c); - FfiConverterUInt64.writeIntoCursor(value.expiresAtTs, c); - FfiConverterOptionalUInt64.writeIntoCursor(value.refreshFailingSinceTs, c); - FfiConverterOptionalString.writeIntoCursor(value.lastRefreshError, c); - } - allocationSize(value: TypeName): number { - return FfiConverterUInt64.allocationSize(value.lifetimeMs) + - FfiConverterUInt64.allocationSize(value.lastPublishedTs) + - FfiConverterUInt64.allocationSize(value.expiresAtTs) + - FfiConverterOptionalUInt64.allocationSize(value.refreshFailingSinceTs) + - FfiConverterOptionalString.allocationSize(value.lastRefreshError); - - } - }; - return new FFIConverter(); -})(); - -/** - * Pre-2026 Element Call interop, selected per call (session read side + - * own-membership write side). - */ -export enum FfiElementCallCompat { - Off, - StateEvents -} - -const FfiConverterTypeFfiElementCallCompat = (() => { - type TypeName = FfiElementCallCompat; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiElementCallCompat.Off; - case 2: return FfiElementCallCompat.StateEvents; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiElementCallCompat.Off: return c.writeI32(1); - case FfiElementCallCompat.StateEvents: return c.writeI32(2); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - -/** - * Per-manager configuration: the compat dialect plus the encryption knobs a - * host must be able to set (a room without a slot negotiates nothing, so - * the local defaults decide). - */ -export type FfiParticipationConfig = { - compat: FfiElementCallCompat, - /** - * Whether to exchange media keys when the slot prescribes nothing (no - * slot in the room). A slot's negotiated encryption overrides it. - */ - manageMediaKeys: boolean, - /** - * MSC4153: discard media keys from a sending device the host did not - * report as cross-signed by its owner. Hosts that cannot evaluate that - * (or whose peers may be unverified guests) turn it off. - */ - requireCrossSignedSender: boolean, - /** - * Wait this long after sending a rotated key before encrypting with it, - * so slow peers have it before the first frame arrives. - */ - useKeyDelayMs: bigint -} - -/** - * Generated factory for {@link FfiParticipationConfig} record objects. - */ -export const FfiParticipationConfig = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiParticipationConfig = (() => { - type TypeName = FfiParticipationConfig; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - compat: FfiConverterTypeFfiElementCallCompat.readFromCursor(c), - manageMediaKeys: FfiConverterBool.readFromCursor(c), - requireCrossSignedSender: FfiConverterBool.readFromCursor(c), - useKeyDelayMs: FfiConverterUInt64.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterTypeFfiElementCallCompat.writeIntoCursor(value.compat, c); - FfiConverterBool.writeIntoCursor(value.manageMediaKeys, c); - FfiConverterBool.writeIntoCursor(value.requireCrossSignedSender, c); - FfiConverterUInt64.writeIntoCursor(value.useKeyDelayMs, c); - } - allocationSize(value: TypeName): number { - return FfiConverterTypeFfiElementCallCompat.allocationSize(value.compat) + - FfiConverterBool.allocationSize(value.manageMediaKeys) + - FfiConverterBool.allocationSize(value.requireCrossSignedSender) + - FfiConverterUInt64.allocationSize(value.useKeyDelayMs); - - } - }; - return new FFIConverter(); -})(); - -export type FfiSendEventResponse = { - eventId?: string, - delayId?: string -} - -/** - * Generated factory for {@link FfiSendEventResponse} record objects. - */ -export const FfiSendEventResponse = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiSendEventResponse = (() => { - type TypeName = FfiSendEventResponse; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - eventId: FfiConverterOptionalString.readFromCursor(c), - delayId: FfiConverterOptionalString.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterOptionalString.writeIntoCursor(value.eventId, c); - FfiConverterOptionalString.writeIntoCursor(value.delayId, c); - } - allocationSize(value: TypeName): number { - return FfiConverterOptionalString.allocationSize(value.eventId) + - FfiConverterOptionalString.allocationSize(value.delayId); - - } - }; - return new FFIConverter(); -})(); - -/** - * One of the room-state / timeline reads the session's seed makes. A read - * that failed leaves its condition *unknown*, which is not the same as the - * condition being absent. - */ -export enum FfiSessionRead { - Slot, - RoomEncryption, - RoomMembers, - MemberEvents -} - -const FfiConverterTypeFfiSessionRead = (() => { - type TypeName = FfiSessionRead; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiSessionRead.Slot; - case 2: return FfiSessionRead.RoomEncryption; - case 3: return FfiSessionRead.RoomMembers; - case 4: return FfiSessionRead.MemberEvents; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiSessionRead.Slot: return c.writeI32(1); - case FfiSessionRead.RoomEncryption: return c.writeI32(2); - case FfiSessionRead.RoomMembers: return c.writeI32(3); - case FfiSessionRead.MemberEvents: return c.writeI32(4); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - -/** - * One session as a plain value — what [`compute_sessions_from_events`] - * returns. The convenience data the room-list / header / lobby / room_info - * computation needs is precomputed into fields (records carry no methods). - */ -export type FfiSessionSnapshot = { - roomId: string, - slotId: string, - members: Array, - memberCount: number, - isActive: boolean, - /** - * `origin_server_ts` of the earliest joined membership, while active. - */ - startTs?: bigint, - applicationType?: string, - /** - * `None` while no slot state was supplied (condition unenforced). - */ - slotOpen?: boolean, - /** - * The slot-prescribed encryption decision; `None` while unknown. - * - * Read it together with `failed_reads`: `None` with an empty - * `failed_reads` means "this call is not encrypted", `None` with - * `Slot` in it means "we could not find out" — the difference between - * rendering an open padlock and rendering nothing. - */ - encrypted?: boolean, - /** - * `true` once the live session finished seeding (even after read - * failures); always `true` for a statically computed snapshot. - */ - seeded: boolean, - /** - * Seed reads that failed, so an absent value can be told from an - * unknown one. Empty is the healthy case, and an entry disappears once - * a live state update supplies that value. - */ - failedReads: Array, - /** - * Member events that landed but are not in the joined projection, with - * the reason — the load-bearing diagnostics for "why can nobody see - * me?". Find your own entry with `own_member_id()`. - */ - excludedCandidates: Array -} - -/** - * Generated factory for {@link FfiSessionSnapshot} record objects. - */ -export const FfiSessionSnapshot = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiSessionSnapshot = (() => { - type TypeName = FfiSessionSnapshot; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - roomId: FfiConverterString.readFromCursor(c), - slotId: FfiConverterString.readFromCursor(c), - members: FfiConverterSequenceTypeFfiMember.readFromCursor(c), - memberCount: FfiConverterUInt32.readFromCursor(c), - isActive: FfiConverterBool.readFromCursor(c), - startTs: FfiConverterOptionalUInt64.readFromCursor(c), - applicationType: FfiConverterOptionalString.readFromCursor(c), - slotOpen: FfiConverterOptionalBoolean.readFromCursor(c), - encrypted: FfiConverterOptionalBoolean.readFromCursor(c), - seeded: FfiConverterBool.readFromCursor(c), - failedReads: FfiConverterSequenceTypeFfiSessionRead.readFromCursor(c), - excludedCandidates: FfiConverterSequenceTypeFfiExcludedCandidate.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.roomId, c); - FfiConverterString.writeIntoCursor(value.slotId, c); - FfiConverterSequenceTypeFfiMember.writeIntoCursor(value.members, c); - FfiConverterUInt32.writeIntoCursor(value.memberCount, c); - FfiConverterBool.writeIntoCursor(value.isActive, c); - FfiConverterOptionalUInt64.writeIntoCursor(value.startTs, c); - FfiConverterOptionalString.writeIntoCursor(value.applicationType, c); - FfiConverterOptionalBoolean.writeIntoCursor(value.slotOpen, c); - FfiConverterOptionalBoolean.writeIntoCursor(value.encrypted, c); - FfiConverterBool.writeIntoCursor(value.seeded, c); - FfiConverterSequenceTypeFfiSessionRead.writeIntoCursor(value.failedReads, c); - FfiConverterSequenceTypeFfiExcludedCandidate.writeIntoCursor(value.excludedCandidates, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.roomId) + - FfiConverterString.allocationSize(value.slotId) + - FfiConverterSequenceTypeFfiMember.allocationSize(value.members) + - FfiConverterUInt32.allocationSize(value.memberCount) + - FfiConverterBool.allocationSize(value.isActive) + - FfiConverterOptionalUInt64.allocationSize(value.startTs) + - FfiConverterOptionalString.allocationSize(value.applicationType) + - FfiConverterOptionalBoolean.allocationSize(value.slotOpen) + - FfiConverterOptionalBoolean.allocationSize(value.encrypted) + - FfiConverterBool.allocationSize(value.seeded) + - FfiConverterSequenceTypeFfiSessionRead.allocationSize(value.failedReads) + - FfiConverterSequenceTypeFfiExcludedCandidate.allocationSize(value.excludedCandidates); - - } - }; - return new FFIConverter(); -})(); - -export type FfiToDeviceRecipient = { - userId: string, - deviceId: string -} - -/** - * Generated factory for {@link FfiToDeviceRecipient} record objects. - */ -export const FfiToDeviceRecipient = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiToDeviceRecipient = (() => { - type TypeName = FfiToDeviceRecipient; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - userId: FfiConverterString.readFromCursor(c), - deviceId: FfiConverterString.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.userId, c); - FfiConverterString.writeIntoCursor(value.deviceId, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.userId) + - FfiConverterString.allocationSize(value.deviceId); - - } - }; - return new FFIConverter(); -})(); - -export type FfiToDeviceDelivery = { - recipient: FfiToDeviceRecipient, - error?: string -} - -/** - * Generated factory for {@link FfiToDeviceDelivery} record objects. - */ -export const FfiToDeviceDelivery = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiToDeviceDelivery = (() => { - type TypeName = FfiToDeviceDelivery; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - recipient: FfiConverterTypeFfiToDeviceRecipient.readFromCursor(c), - error: FfiConverterOptionalString.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterTypeFfiToDeviceRecipient.writeIntoCursor(value.recipient, c); - FfiConverterOptionalString.writeIntoCursor(value.error, c); - } - allocationSize(value: TypeName): number { - return FfiConverterTypeFfiToDeviceRecipient.allocationSize(value.recipient) + - FfiConverterOptionalString.allocationSize(value.error); - - } - }; - return new FFIConverter(); -})(); - -/** - * MSC4195 delay fields, sent to `{livekit_service_url}/get_token` (or - * `/sfu/get` with `legacy_sfu_get`). - */ -export type FfiTransportDelegationRequest = { - livekitServiceUrl: string, - roomId: string, - slotId: string, - /** - * MSC4195 member claims `{ id, claimed_user_id, claimed_device_id }`. - */ - memberJson: string, - delayId: string, - delayTimeoutMs: bigint, - legacySfuGet: boolean -} - -/** - * Generated factory for {@link FfiTransportDelegationRequest} record objects. - */ -export const FfiTransportDelegationRequest = (() => { - const defaults = () => ({ - }); - const create = (() => { - return uniffiCreateRecord>(defaults); - })(); - return Object.freeze({ - create, - new: create, - defaults: () => Object.freeze(defaults()) as Partial, - }); -})(); - -const FfiConverterTypeFfiTransportDelegationRequest = (() => { - type TypeName = FfiTransportDelegationRequest; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - return { - livekitServiceUrl: FfiConverterString.readFromCursor(c), - roomId: FfiConverterString.readFromCursor(c), - slotId: FfiConverterString.readFromCursor(c), - memberJson: FfiConverterString.readFromCursor(c), - delayId: FfiConverterString.readFromCursor(c), - delayTimeoutMs: FfiConverterUInt64.readFromCursor(c), - legacySfuGet: FfiConverterBool.readFromCursor(c) - }; - } - writeIntoCursor(value: TypeName, c: Cursor): void { - FfiConverterString.writeIntoCursor(value.livekitServiceUrl, c); - FfiConverterString.writeIntoCursor(value.roomId, c); - FfiConverterString.writeIntoCursor(value.slotId, c); - FfiConverterString.writeIntoCursor(value.memberJson, c); - FfiConverterString.writeIntoCursor(value.delayId, c); - FfiConverterUInt64.writeIntoCursor(value.delayTimeoutMs, c); - FfiConverterBool.writeIntoCursor(value.legacySfuGet, c); - } - allocationSize(value: TypeName): number { - return FfiConverterString.allocationSize(value.livekitServiceUrl) + - FfiConverterString.allocationSize(value.roomId) + - FfiConverterString.allocationSize(value.slotId) + - FfiConverterString.allocationSize(value.memberJson) + - FfiConverterString.allocationSize(value.delayId) + - FfiConverterUInt64.allocationSize(value.delayTimeoutMs) + - FfiConverterBool.allocationSize(value.legacySfuGet); - - } - }; - return new FFIConverter(); -})(); - -/** - * Which pump stopped, for [`FfiDisconnectCause::ManagerStopped`]. - */ -export enum FfiComponent { - Session, - OwnMembership, - Connections, - Encryption, - Participation -} - -const FfiConverterTypeFfiComponent = (() => { - type TypeName = FfiComponent; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiComponent.Session; - case 2: return FfiComponent.OwnMembership; - case 3: return FfiComponent.Connections; - case 4: return FfiComponent.Encryption; - case 5: return FfiComponent.Participation; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiComponent.Session: return c.writeI32(1); - case FfiComponent.OwnMembership: return c.writeI32(2); - case FfiComponent.Connections: return c.writeI32(3); - case FfiComponent.Encryption: return c.writeI32(4); - case FfiComponent.Participation: return c.writeI32(5); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - -/** - * What became of the dead man's switch when we left. A failed cancel still - * leaves us out of the call — the delay is itself a leave — but a stray - * delayed event of ours may land afterwards. - */ -export enum FfiDelayedLeaveOutcome { - Cancelled, - MayStillFire -} - -const FfiConverterTypeFfiDelayedLeaveOutcome = (() => { - type TypeName = FfiDelayedLeaveOutcome; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiDelayedLeaveOutcome.Cancelled; - case 2: return FfiDelayedLeaveOutcome.MayStillFire; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiDelayedLeaveOutcome.Cancelled: return c.writeI32(1); - case FfiDelayedLeaveOutcome.MayStillFire: return c.writeI32(2); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - -/** - * How the delayed leave was handed to the SFU (MSC4195). - */ -export enum FfiDelegationRoute { - /** - * The homeserver's CS API endpoint. - */ - Homeserver, - /** - * The authorisation service's token endpoint with the delay fields. - */ - AuthorisationService -} - -const FfiConverterTypeFfiDelegationRoute = (() => { - type TypeName = FfiDelegationRoute; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiDelegationRoute.Homeserver; - case 2: return FfiDelegationRoute.AuthorisationService; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiDelegationRoute.Homeserver: return c.writeI32(1); - case FfiDelegationRoute.AuthorisationService: return c.writeI32(2); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - - -// Enum: FfiJoinError -export enum FfiJoinError_Tags { - AlreadyJoined = "AlreadyJoined", - InvalidParams = "InvalidParams", - SlotClosed = "SlotClosed", - NoTransport = "NoTransport", - TokenRefused = "TokenRefused", - EncryptionSetup = "EncryptionSetup", - Driver = "Driver" -} -/** - * Why a join failed. Typed so a host can decide what to offer next: - * `NoTransport` is a configuration problem, `TokenRefused` may be worth a - * retry. - */ -export const FfiJoinError = (() => { - - type AlreadyJoined__interface = { - tag: FfiJoinError_Tags.AlreadyJoined - }; - class AlreadyJoined_ extends UniffiEnum implements AlreadyJoined__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiJoinError"; - readonly tag = FfiJoinError_Tags.AlreadyJoined; - constructor() { - super("FfiJoinError", "AlreadyJoined"); - } - - static new(): AlreadyJoined_ { - return new AlreadyJoined_(); - } - - static instanceOf(obj: any): obj is AlreadyJoined_ { - return obj.tag === FfiJoinError_Tags.AlreadyJoined; - } - - } - - type InvalidParams__interface = { - tag: FfiJoinError_Tags.InvalidParams; - inner: -Readonly<{message: string}> - }; - class InvalidParams_ extends UniffiEnum implements InvalidParams__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiJoinError"; - readonly tag = FfiJoinError_Tags.InvalidParams; - readonly inner: -Readonly<{message: string}>; - constructor( -inner: {message: string }) { - super("FfiJoinError", "InvalidParams"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {message: string }): InvalidParams_ { - return new InvalidParams_(inner); - } - - static instanceOf(obj: any): obj is InvalidParams_ { - return obj.tag === FfiJoinError_Tags.InvalidParams; - } - - } - - type SlotClosed__interface = { - tag: FfiJoinError_Tags.SlotClosed - }; - class SlotClosed_ extends UniffiEnum implements SlotClosed__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiJoinError"; - readonly tag = FfiJoinError_Tags.SlotClosed; - constructor() { - super("FfiJoinError", "SlotClosed"); - } - - static new(): SlotClosed_ { - return new SlotClosed_(); - } - - static instanceOf(obj: any): obj is SlotClosed_ { - return obj.tag === FfiJoinError_Tags.SlotClosed; - } - - } - - type NoTransport__interface = { - tag: FfiJoinError_Tags.NoTransport; - inner: -Readonly<{message: string}> - }; - class NoTransport_ extends UniffiEnum implements NoTransport__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiJoinError"; - readonly tag = FfiJoinError_Tags.NoTransport; - readonly inner: -Readonly<{message: string}>; - constructor( -inner: {message: string }) { - super("FfiJoinError", "NoTransport"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {message: string }): NoTransport_ { - return new NoTransport_(inner); - } - - static instanceOf(obj: any): obj is NoTransport_ { - return obj.tag === FfiJoinError_Tags.NoTransport; - } - - } - - type TokenRefused__interface = { - tag: FfiJoinError_Tags.TokenRefused; - inner: -Readonly<{message: string}> - }; - class TokenRefused_ extends UniffiEnum implements TokenRefused__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiJoinError"; - readonly tag = FfiJoinError_Tags.TokenRefused; - readonly inner: -Readonly<{message: string}>; - constructor( -inner: {message: string }) { - super("FfiJoinError", "TokenRefused"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {message: string }): TokenRefused_ { - return new TokenRefused_(inner); - } - - static instanceOf(obj: any): obj is TokenRefused_ { - return obj.tag === FfiJoinError_Tags.TokenRefused; - } - - } - - type EncryptionSetup__interface = { - tag: FfiJoinError_Tags.EncryptionSetup; - inner: -Readonly<{message: string}> - }; - class EncryptionSetup_ extends UniffiEnum implements EncryptionSetup__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiJoinError"; - readonly tag = FfiJoinError_Tags.EncryptionSetup; - readonly inner: -Readonly<{message: string}>; - constructor( -inner: {message: string }) { - super("FfiJoinError", "EncryptionSetup"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {message: string }): EncryptionSetup_ { - return new EncryptionSetup_(inner); - } - - static instanceOf(obj: any): obj is EncryptionSetup_ { - return obj.tag === FfiJoinError_Tags.EncryptionSetup; - } - - } - - type Driver__interface = { - tag: FfiJoinError_Tags.Driver; - inner: -Readonly<{message: string}> - }; - class Driver_ extends UniffiEnum implements Driver__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiJoinError"; - readonly tag = FfiJoinError_Tags.Driver; - readonly inner: -Readonly<{message: string}>; - constructor( -inner: {message: string }) { - super("FfiJoinError", "Driver"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {message: string }): Driver_ { - return new Driver_(inner); - } - - static instanceOf(obj: any): obj is Driver_ { - return obj.tag === FfiJoinError_Tags.Driver; - } - - } - - function instanceOf(obj: any): obj is FfiJoinError { - return obj[uniffiTypeNameSymbol] === "FfiJoinError"; - } - - return Object.freeze({ - instanceOf, - AlreadyJoined: AlreadyJoined_, - InvalidParams: InvalidParams_, - SlotClosed: SlotClosed_, - NoTransport: NoTransport_, - TokenRefused: TokenRefused_, - EncryptionSetup: EncryptionSetup_, - Driver: Driver_ - }); - -})(); -/** - * Why a join failed. Typed so a host can decide what to offer next: - * `NoTransport` is a configuration problem, `TokenRefused` may be worth a - * retry. - */ -export type FfiJoinError = InstanceType< - typeof FfiJoinError['AlreadyJoined' | 'InvalidParams' | 'SlotClosed' | 'NoTransport' | 'TokenRefused' | 'EncryptionSetup' | 'Driver'] ->; - -// FfiConverter for enum FfiJoinError -const FfiConverterTypeFfiJoinError = (() => { - type TypeName = FfiJoinError; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new FfiJoinError.AlreadyJoined(); - case 2: return new FfiJoinError.InvalidParams({message: FfiConverterString.readFromCursor(c) }); - case 3: return new FfiJoinError.SlotClosed(); - case 4: return new FfiJoinError.NoTransport({message: FfiConverterString.readFromCursor(c) }); - case 5: return new FfiJoinError.TokenRefused({message: FfiConverterString.readFromCursor(c) }); - case 6: return new FfiJoinError.EncryptionSetup({message: FfiConverterString.readFromCursor(c) }); - case 7: return new FfiJoinError.Driver({message: FfiConverterString.readFromCursor(c) }); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case FfiJoinError_Tags.AlreadyJoined: { - c.writeI32(1); - return; - } - case FfiJoinError_Tags.InvalidParams: { - c.writeI32(2); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner.message, c); - return; - } - case FfiJoinError_Tags.SlotClosed: { - c.writeI32(3); - return; - } - case FfiJoinError_Tags.NoTransport: { - c.writeI32(4); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner.message, c); - return; - } - case FfiJoinError_Tags.TokenRefused: { - c.writeI32(5); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner.message, c); - return; - } - case FfiJoinError_Tags.EncryptionSetup: { - c.writeI32(6); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner.message, c); - return; - } - case FfiJoinError_Tags.Driver: { - c.writeI32(7); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner.message, c); - return; - } - default: - // Throwing from here means that FfiJoinError_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case FfiJoinError_Tags.AlreadyJoined: { - return 4; - } - case FfiJoinError_Tags.InvalidParams: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner.message); - return size; - } - case FfiJoinError_Tags.SlotClosed: { - return 4; - } - case FfiJoinError_Tags.NoTransport: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner.message); - return size; - } - case FfiJoinError_Tags.TokenRefused: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner.message); - return size; - } - case FfiJoinError_Tags.EncryptionSetup: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner.message); - return size; - } - case FfiJoinError_Tags.Driver: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner.message); - return size; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - - -// Enum: FfiDisconnectCause -export enum FfiDisconnectCause_Tags { - NeverJoined = "NeverJoined", - LeftByHost = "LeftByHost", - SlotClosed = "SlotClosed", - JoinFailed = "JoinFailed", - ManagerStopped = "ManagerStopped" -} -/** - * Why we are not in a call. Terminal by construction: unlike an impairment, - * none of these clears on its own. - */ -export const FfiDisconnectCause = (() => { - - type NeverJoined__interface = { - tag: FfiDisconnectCause_Tags.NeverJoined - }; - /** - * No join has been attempted on this manager. - */ - class NeverJoined_ extends UniffiEnum implements NeverJoined__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiDisconnectCause"; - readonly tag = FfiDisconnectCause_Tags.NeverJoined; - constructor() { - super("FfiDisconnectCause", "NeverJoined"); - } - - static new(): NeverJoined_ { - return new NeverJoined_(); - } - - static instanceOf(obj: any): obj is NeverJoined_ { - return obj.tag === FfiDisconnectCause_Tags.NeverJoined; - } - - } - - type LeftByHost__interface = { - tag: FfiDisconnectCause_Tags.LeftByHost; - inner: -Readonly<{code?: string; reason?: string}> - }; - /** - * The host called `leave()`. - */ - class LeftByHost_ extends UniffiEnum implements LeftByHost__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiDisconnectCause"; - readonly tag = FfiDisconnectCause_Tags.LeftByHost; - readonly inner: -Readonly<{code?: string; reason?: string}>; - constructor( -inner: {code?: string; reason?: string }) { - super("FfiDisconnectCause", "LeftByHost"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {code?: string; reason?: string }): LeftByHost_ { - return new LeftByHost_(inner); - } - - static instanceOf(obj: any): obj is LeftByHost_ { - return obj.tag === FfiDisconnectCause_Tags.LeftByHost; - } - - } - - type SlotClosed__interface = { - tag: FfiDisconnectCause_Tags.SlotClosed - }; - /** - * The slot was closed under us and the machine left on its own. - */ - class SlotClosed_ extends UniffiEnum implements SlotClosed__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiDisconnectCause"; - readonly tag = FfiDisconnectCause_Tags.SlotClosed; - constructor() { - super("FfiDisconnectCause", "SlotClosed"); - } - - static new(): SlotClosed_ { - return new SlotClosed_(); - } - - static instanceOf(obj: any): obj is SlotClosed_ { - return obj.tag === FfiDisconnectCause_Tags.SlotClosed; - } - - } - - type JoinFailed__interface = { - tag: FfiDisconnectCause_Tags.JoinFailed; - inner: -Readonly<{atTs: bigint; progress: FfiJoinProgress; error: FfiJoinError}> - }; - /** - * `join()` failed; the participation never started. `progress` says how - * far it got. - */ - class JoinFailed_ extends UniffiEnum implements JoinFailed__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiDisconnectCause"; - readonly tag = FfiDisconnectCause_Tags.JoinFailed; - readonly inner: -Readonly<{atTs: bigint; progress: FfiJoinProgress; error: FfiJoinError}>; - constructor( -inner: {atTs: bigint; progress: FfiJoinProgress; error: FfiJoinError }) { - super("FfiDisconnectCause", "JoinFailed"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {atTs: bigint; progress: FfiJoinProgress; error: FfiJoinError }): JoinFailed_ { - return new JoinFailed_(inner); - } - - static instanceOf(obj: any): obj is JoinFailed_ { - return obj.tag === FfiDisconnectCause_Tags.JoinFailed; - } - - } - - type ManagerStopped__interface = { - tag: FfiDisconnectCause_Tags.ManagerStopped; - inner: -Readonly<{component: FfiComponent}> - }; - /** - * A pump stopped. The manager is dead and will not recover; build a new - * one. - */ - class ManagerStopped_ extends UniffiEnum implements ManagerStopped__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiDisconnectCause"; - readonly tag = FfiDisconnectCause_Tags.ManagerStopped; - readonly inner: -Readonly<{component: FfiComponent}>; - constructor( -inner: {component: FfiComponent }) { - super("FfiDisconnectCause", "ManagerStopped"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {component: FfiComponent }): ManagerStopped_ { - return new ManagerStopped_(inner); - } - - static instanceOf(obj: any): obj is ManagerStopped_ { - return obj.tag === FfiDisconnectCause_Tags.ManagerStopped; - } - - } - - function instanceOf(obj: any): obj is FfiDisconnectCause { - return obj[uniffiTypeNameSymbol] === "FfiDisconnectCause"; - } - - return Object.freeze({ - instanceOf, - NeverJoined: NeverJoined_, - LeftByHost: LeftByHost_, - SlotClosed: SlotClosed_, - JoinFailed: JoinFailed_, - ManagerStopped: ManagerStopped_ - }); - -})(); -/** - * Why we are not in a call. Terminal by construction: unlike an impairment, - * none of these clears on its own. - */ -export type FfiDisconnectCause = InstanceType< - typeof FfiDisconnectCause['NeverJoined' | 'LeftByHost' | 'SlotClosed' | 'JoinFailed' | 'ManagerStopped'] ->; - -// FfiConverter for enum FfiDisconnectCause -const FfiConverterTypeFfiDisconnectCause = (() => { - type TypeName = FfiDisconnectCause; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new FfiDisconnectCause.NeverJoined(); - case 2: return new FfiDisconnectCause.LeftByHost({code: FfiConverterOptionalString.readFromCursor(c), reason: FfiConverterOptionalString.readFromCursor(c) }); - case 3: return new FfiDisconnectCause.SlotClosed(); - case 4: return new FfiDisconnectCause.JoinFailed({atTs: FfiConverterUInt64.readFromCursor(c), progress: FfiConverterTypeFfiJoinProgress.readFromCursor(c), error: FfiConverterTypeFfiJoinError.readFromCursor(c) }); - case 5: return new FfiDisconnectCause.ManagerStopped({component: FfiConverterTypeFfiComponent.readFromCursor(c) }); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case FfiDisconnectCause_Tags.NeverJoined: { - c.writeI32(1); - return; - } - case FfiDisconnectCause_Tags.LeftByHost: { - c.writeI32(2); - const inner = value.inner; - FfiConverterOptionalString.writeIntoCursor(inner.code, c); - FfiConverterOptionalString.writeIntoCursor(inner.reason, c); - return; - } - case FfiDisconnectCause_Tags.SlotClosed: { - c.writeI32(3); - return; - } - case FfiDisconnectCause_Tags.JoinFailed: { - c.writeI32(4); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.atTs, c); - FfiConverterTypeFfiJoinProgress.writeIntoCursor(inner.progress, c); - FfiConverterTypeFfiJoinError.writeIntoCursor(inner.error, c); - return; - } - case FfiDisconnectCause_Tags.ManagerStopped: { - c.writeI32(5); - const inner = value.inner; - FfiConverterTypeFfiComponent.writeIntoCursor(inner.component, c); - return; - } - default: - // Throwing from here means that FfiDisconnectCause_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case FfiDisconnectCause_Tags.NeverJoined: { - return 4; - } - case FfiDisconnectCause_Tags.LeftByHost: { - const inner = value.inner; - let size = 4; - size += FfiConverterOptionalString.allocationSize(inner.code); - size += FfiConverterOptionalString.allocationSize(inner.reason); - return size; - } - case FfiDisconnectCause_Tags.SlotClosed: { - return 4; - } - case FfiDisconnectCause_Tags.JoinFailed: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.atTs); - size += FfiConverterTypeFfiJoinProgress.allocationSize(inner.progress); - size += FfiConverterTypeFfiJoinError.allocationSize(inner.error); - return size; - } - case FfiDisconnectCause_Tags.ManagerStopped: { - const inner = value.inner; - let size = 4; - size += FfiConverterTypeFfiComponent.allocationSize(inner.component); - return size; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - - -// Enum: FfiEncryptionStatus -export enum FfiEncryptionStatus_Tags { - Joining = "Joining", - Connected = "Connected" -} -/** - * The media-key exchange as a whole. - */ -export const FfiEncryptionStatus = (() => { - - type Joining__interface = { - tag: FfiEncryptionStatus_Tags.Joining; - inner: -Readonly<{hasDistributedInitialKeys: boolean; hasReceivedAllMemberKeys: boolean}> - }; - class Joining_ extends UniffiEnum implements Joining__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiEncryptionStatus"; - readonly tag = FfiEncryptionStatus_Tags.Joining; - readonly inner: -Readonly<{hasDistributedInitialKeys: boolean; hasReceivedAllMemberKeys: boolean}>; - constructor( -inner: {hasDistributedInitialKeys: boolean; hasReceivedAllMemberKeys: boolean }) { - super("FfiEncryptionStatus", "Joining"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {hasDistributedInitialKeys: boolean; hasReceivedAllMemberKeys: boolean }): Joining_ { - return new Joining_(inner); - } - - static instanceOf(obj: any): obj is Joining_ { - return obj.tag === FfiEncryptionStatus_Tags.Joining; - } - - } - - type Connected__interface = { - tag: FfiEncryptionStatus_Tags.Connected; - inner: -Readonly<{leftMembersWithKeys: Array; fullySettled: boolean; lastRotationTs: bigint}> - }; - class Connected_ extends UniffiEnum implements Connected__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiEncryptionStatus"; - readonly tag = FfiEncryptionStatus_Tags.Connected; - readonly inner: -Readonly<{leftMembersWithKeys: Array; fullySettled: boolean; lastRotationTs: bigint}>; - constructor( -inner: {leftMembersWithKeys: Array; fullySettled: boolean; lastRotationTs: bigint }) { - super("FfiEncryptionStatus", "Connected"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {leftMembersWithKeys: Array; fullySettled: boolean; lastRotationTs: bigint }): Connected_ { - return new Connected_(inner); - } - - static instanceOf(obj: any): obj is Connected_ { - return obj.tag === FfiEncryptionStatus_Tags.Connected; - } - - } - - function instanceOf(obj: any): obj is FfiEncryptionStatus { - return obj[uniffiTypeNameSymbol] === "FfiEncryptionStatus"; - } - - return Object.freeze({ - instanceOf, - Joining: Joining_, - Connected: Connected_ - }); - -})(); -/** - * The media-key exchange as a whole. - */ -export type FfiEncryptionStatus = InstanceType< - typeof FfiEncryptionStatus['Joining' | 'Connected'] ->; - -// FfiConverter for enum FfiEncryptionStatus -const FfiConverterTypeFfiEncryptionStatus = (() => { - type TypeName = FfiEncryptionStatus; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new FfiEncryptionStatus.Joining({hasDistributedInitialKeys: FfiConverterBool.readFromCursor(c), hasReceivedAllMemberKeys: FfiConverterBool.readFromCursor(c) }); - case 2: return new FfiEncryptionStatus.Connected({leftMembersWithKeys: FfiConverterSequenceTypeFfiMember.readFromCursor(c), fullySettled: FfiConverterBool.readFromCursor(c), lastRotationTs: FfiConverterUInt64.readFromCursor(c) }); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case FfiEncryptionStatus_Tags.Joining: { - c.writeI32(1); - const inner = value.inner; - FfiConverterBool.writeIntoCursor(inner.hasDistributedInitialKeys, c); - FfiConverterBool.writeIntoCursor(inner.hasReceivedAllMemberKeys, c); - return; - } - case FfiEncryptionStatus_Tags.Connected: { - c.writeI32(2); - const inner = value.inner; - FfiConverterSequenceTypeFfiMember.writeIntoCursor(inner.leftMembersWithKeys, c); - FfiConverterBool.writeIntoCursor(inner.fullySettled, c); - FfiConverterUInt64.writeIntoCursor(inner.lastRotationTs, c); - return; - } - default: - // Throwing from here means that FfiEncryptionStatus_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case FfiEncryptionStatus_Tags.Joining: { - const inner = value.inner; - let size = 4; - size += FfiConverterBool.allocationSize(inner.hasDistributedInitialKeys); - size += FfiConverterBool.allocationSize(inner.hasReceivedAllMemberKeys); - return size; - } - case FfiEncryptionStatus_Tags.Connected: { - const inner = value.inner; - let size = 4; - size += FfiConverterSequenceTypeFfiMember.allocationSize(inner.leftMembersWithKeys); - size += FfiConverterBool.allocationSize(inner.fullySettled); - size += FfiConverterUInt64.allocationSize(inner.lastRotationTs); - return size; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - - -// Enum: FfiEventOrigin -export enum FfiEventOrigin_Tags { - Encrypted = "Encrypted", - Cleartext = "Cleartext", - Unknown = "Unknown" -} -export const FfiEventOrigin = (() => { - - type Encrypted__interface = { - tag: FfiEventOrigin_Tags.Encrypted; - inner: -Readonly<{senderDeviceId?: string}> - }; - class Encrypted_ extends UniffiEnum implements Encrypted__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiEventOrigin"; - readonly tag = FfiEventOrigin_Tags.Encrypted; - readonly inner: -Readonly<{senderDeviceId?: string}>; - constructor( -inner: {senderDeviceId?: string }) { - super("FfiEventOrigin", "Encrypted"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {senderDeviceId?: string }): Encrypted_ { - return new Encrypted_(inner); - } - - static instanceOf(obj: any): obj is Encrypted_ { - return obj.tag === FfiEventOrigin_Tags.Encrypted; - } - - } - - type Cleartext__interface = { - tag: FfiEventOrigin_Tags.Cleartext - }; - class Cleartext_ extends UniffiEnum implements Cleartext__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiEventOrigin"; - readonly tag = FfiEventOrigin_Tags.Cleartext; - constructor() { - super("FfiEventOrigin", "Cleartext"); - } - - static new(): Cleartext_ { - return new Cleartext_(); - } - - static instanceOf(obj: any): obj is Cleartext_ { - return obj.tag === FfiEventOrigin_Tags.Cleartext; - } - - } - - type Unknown__interface = { - tag: FfiEventOrigin_Tags.Unknown - }; - class Unknown_ extends UniffiEnum implements Unknown__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiEventOrigin"; - readonly tag = FfiEventOrigin_Tags.Unknown; - constructor() { - super("FfiEventOrigin", "Unknown"); - } - - static new(): Unknown_ { - return new Unknown_(); - } - - static instanceOf(obj: any): obj is Unknown_ { - return obj.tag === FfiEventOrigin_Tags.Unknown; - } - - } - - function instanceOf(obj: any): obj is FfiEventOrigin { - return obj[uniffiTypeNameSymbol] === "FfiEventOrigin"; - } - - return Object.freeze({ - instanceOf, - Encrypted: Encrypted_, - Cleartext: Cleartext_, - Unknown: Unknown_ - }); - -})(); -export type FfiEventOrigin = InstanceType< - typeof FfiEventOrigin['Encrypted' | 'Cleartext' | 'Unknown'] ->; - -// FfiConverter for enum FfiEventOrigin -const FfiConverterTypeFfiEventOrigin = (() => { - type TypeName = FfiEventOrigin; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new FfiEventOrigin.Encrypted({senderDeviceId: FfiConverterOptionalString.readFromCursor(c) }); - case 2: return new FfiEventOrigin.Cleartext(); - case 3: return new FfiEventOrigin.Unknown(); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case FfiEventOrigin_Tags.Encrypted: { - c.writeI32(1); - const inner = value.inner; - FfiConverterOptionalString.writeIntoCursor(inner.senderDeviceId, c); - return; - } - case FfiEventOrigin_Tags.Cleartext: { - c.writeI32(2); - return; - } - case FfiEventOrigin_Tags.Unknown: { - c.writeI32(3); - return; - } - default: - // Throwing from here means that FfiEventOrigin_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case FfiEventOrigin_Tags.Encrypted: { - const inner = value.inner; - let size = 4; - size += FfiConverterOptionalString.allocationSize(inner.senderDeviceId); - return size; - } - case FfiEventOrigin_Tags.Cleartext: { - return 4; - } - case FfiEventOrigin_Tags.Unknown: { - return 4; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - - -// Enum: FfiImpairment -export enum FfiImpairment_Tags { - HomeserverUnreachable = "HomeserverUnreachable", - KeepAliveRestartFailing = "KeepAliveRestartFailing", - KeepAliveExpired = "KeepAliveExpired", - KeepAliveUnavailable = "KeepAliveUnavailable", - MembershipRefreshFailing = "MembershipRefreshFailing", - OwnMembershipMissing = "OwnMembershipMissing", - OwnMembershipExcluded = "OwnMembershipExcluded", - MediaKeyNotDelivered = "MediaKeyNotDelivered", - MediaKeyNotReceived = "MediaKeyNotReceived", - MediaKeyRejected = "MediaKeyRejected", - ConnectionUnavailable = "ConnectionUnavailable", - ConnectionTokenExpired = "ConnectionTokenExpired", - SessionStateUnread = "SessionStateUnread", - JoinedBeforeSeed = "JoinedBeforeSeed" -} -/** - * A condition that is true right now and that the crate is still working - * on. Every variant clears by itself when the underlying operation - * succeeds — an impairment is never terminal; anything terminal ends the - * participation and appears as [`FfiDisconnectCause`] instead. - * - * A host that renders one warning banner can read this list and nothing - * else; the structured status above is for anything that needs the details. - */ -export const FfiImpairment = (() => { - - type HomeserverUnreachable__interface = { - tag: FfiImpairment_Tags.HomeserverUnreachable; - inner: -Readonly<{sinceTs: bigint}> - }; - /** - * The driver reports the homeserver unreachable; clears when it is back. - */ - class HomeserverUnreachable_ extends UniffiEnum implements HomeserverUnreachable__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.HomeserverUnreachable; - readonly inner: -Readonly<{sinceTs: bigint}>; - constructor( -inner: {sinceTs: bigint }) { - super("FfiImpairment", "HomeserverUnreachable"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {sinceTs: bigint }): HomeserverUnreachable_ { - return new HomeserverUnreachable_(inner); - } - - static instanceOf(obj: any): obj is HomeserverUnreachable_ { - return obj.tag === FfiImpairment_Tags.HomeserverUnreachable; - } - - } - - type KeepAliveRestartFailing__interface = { - tag: FfiImpairment_Tags.KeepAliveRestartFailing; - inner: -Readonly<{sinceTs: bigint; firesAtTs: bigint; lastError: string}> - }; - class KeepAliveRestartFailing_ extends UniffiEnum implements KeepAliveRestartFailing__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.KeepAliveRestartFailing; - readonly inner: -Readonly<{sinceTs: bigint; firesAtTs: bigint; lastError: string}>; - constructor( -inner: {sinceTs: bigint; firesAtTs: bigint; lastError: string }) { - super("FfiImpairment", "KeepAliveRestartFailing"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {sinceTs: bigint; firesAtTs: bigint; lastError: string }): KeepAliveRestartFailing_ { - return new KeepAliveRestartFailing_(inner); - } - - static instanceOf(obj: any): obj is KeepAliveRestartFailing_ { - return obj.tag === FfiImpairment_Tags.KeepAliveRestartFailing; - } - - } - - type KeepAliveExpired__interface = { - tag: FfiImpairment_Tags.KeepAliveExpired; - inner: -Readonly<{sinceTs: bigint}> - }; - class KeepAliveExpired_ extends UniffiEnum implements KeepAliveExpired__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.KeepAliveExpired; - readonly inner: -Readonly<{sinceTs: bigint}>; - constructor( -inner: {sinceTs: bigint }) { - super("FfiImpairment", "KeepAliveExpired"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {sinceTs: bigint }): KeepAliveExpired_ { - return new KeepAliveExpired_(inner); - } - - static instanceOf(obj: any): obj is KeepAliveExpired_ { - return obj.tag === FfiImpairment_Tags.KeepAliveExpired; - } - - } - - type KeepAliveUnavailable__interface = { - tag: FfiImpairment_Tags.KeepAliveUnavailable; - inner: -Readonly<{permanent: boolean; membershipExpiresAtTs: bigint}> - }; - class KeepAliveUnavailable_ extends UniffiEnum implements KeepAliveUnavailable__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.KeepAliveUnavailable; - readonly inner: -Readonly<{permanent: boolean; membershipExpiresAtTs: bigint}>; - constructor( -inner: {permanent: boolean; membershipExpiresAtTs: bigint }) { - super("FfiImpairment", "KeepAliveUnavailable"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {permanent: boolean; membershipExpiresAtTs: bigint }): KeepAliveUnavailable_ { - return new KeepAliveUnavailable_(inner); - } - - static instanceOf(obj: any): obj is KeepAliveUnavailable_ { - return obj.tag === FfiImpairment_Tags.KeepAliveUnavailable; - } - - } - - type MembershipRefreshFailing__interface = { - tag: FfiImpairment_Tags.MembershipRefreshFailing; - inner: -Readonly<{sinceTs: bigint; expiresAtTs: bigint; lastError: string}> - }; - class MembershipRefreshFailing_ extends UniffiEnum implements MembershipRefreshFailing__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.MembershipRefreshFailing; - readonly inner: -Readonly<{sinceTs: bigint; expiresAtTs: bigint; lastError: string}>; - constructor( -inner: {sinceTs: bigint; expiresAtTs: bigint; lastError: string }) { - super("FfiImpairment", "MembershipRefreshFailing"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {sinceTs: bigint; expiresAtTs: bigint; lastError: string }): MembershipRefreshFailing_ { - return new MembershipRefreshFailing_(inner); - } - - static instanceOf(obj: any): obj is MembershipRefreshFailing_ { - return obj.tag === FfiImpairment_Tags.MembershipRefreshFailing; - } - - } - - type OwnMembershipMissing__interface = { - tag: FfiImpairment_Tags.OwnMembershipMissing; - inner: -Readonly<{sinceTs: bigint; republishedAtTs?: bigint}> - }; - class OwnMembershipMissing_ extends UniffiEnum implements OwnMembershipMissing__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.OwnMembershipMissing; - readonly inner: -Readonly<{sinceTs: bigint; republishedAtTs?: bigint}>; - constructor( -inner: {sinceTs: bigint; republishedAtTs?: bigint }) { - super("FfiImpairment", "OwnMembershipMissing"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {sinceTs: bigint; republishedAtTs?: bigint }): OwnMembershipMissing_ { - return new OwnMembershipMissing_(inner); - } - - static instanceOf(obj: any): obj is OwnMembershipMissing_ { - return obj.tag === FfiImpairment_Tags.OwnMembershipMissing; - } - - } - - type OwnMembershipExcluded__interface = { - tag: FfiImpairment_Tags.OwnMembershipExcluded; - inner: -Readonly<{reason: FfiJoinExclusionReason}> - }; - class OwnMembershipExcluded_ extends UniffiEnum implements OwnMembershipExcluded__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.OwnMembershipExcluded; - readonly inner: -Readonly<{reason: FfiJoinExclusionReason}>; - constructor( -inner: {reason: FfiJoinExclusionReason }) { - super("FfiImpairment", "OwnMembershipExcluded"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {reason: FfiJoinExclusionReason }): OwnMembershipExcluded_ { - return new OwnMembershipExcluded_(inner); - } - - static instanceOf(obj: any): obj is OwnMembershipExcluded_ { - return obj.tag === FfiImpairment_Tags.OwnMembershipExcluded; - } - - } - - type MediaKeyNotDelivered__interface = { - tag: FfiImpairment_Tags.MediaKeyNotDelivered; - inner: -Readonly<{memberIds: Array}> - }; - class MediaKeyNotDelivered_ extends UniffiEnum implements MediaKeyNotDelivered__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.MediaKeyNotDelivered; - readonly inner: -Readonly<{memberIds: Array}>; - constructor( -inner: {memberIds: Array }) { - super("FfiImpairment", "MediaKeyNotDelivered"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {memberIds: Array }): MediaKeyNotDelivered_ { - return new MediaKeyNotDelivered_(inner); - } - - static instanceOf(obj: any): obj is MediaKeyNotDelivered_ { - return obj.tag === FfiImpairment_Tags.MediaKeyNotDelivered; - } - - } - - type MediaKeyNotReceived__interface = { - tag: FfiImpairment_Tags.MediaKeyNotReceived; - inner: -Readonly<{memberIds: Array}> - }; - class MediaKeyNotReceived_ extends UniffiEnum implements MediaKeyNotReceived__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.MediaKeyNotReceived; - readonly inner: -Readonly<{memberIds: Array}>; - constructor( -inner: {memberIds: Array }) { - super("FfiImpairment", "MediaKeyNotReceived"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {memberIds: Array }): MediaKeyNotReceived_ { - return new MediaKeyNotReceived_(inner); - } - - static instanceOf(obj: any): obj is MediaKeyNotReceived_ { - return obj.tag === FfiImpairment_Tags.MediaKeyNotReceived; - } - - } - - type MediaKeyRejected__interface = { - tag: FfiImpairment_Tags.MediaKeyRejected; - inner: -Readonly<{memberId: string; senderUserId: string; reason: FfiKeyRejection; atTs: bigint}> - }; - class MediaKeyRejected_ extends UniffiEnum implements MediaKeyRejected__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.MediaKeyRejected; - readonly inner: -Readonly<{memberId: string; senderUserId: string; reason: FfiKeyRejection; atTs: bigint}>; - constructor( -inner: {memberId: string; senderUserId: string; reason: FfiKeyRejection; atTs: bigint }) { - super("FfiImpairment", "MediaKeyRejected"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {memberId: string; senderUserId: string; reason: FfiKeyRejection; atTs: bigint }): MediaKeyRejected_ { - return new MediaKeyRejected_(inner); - } - - static instanceOf(obj: any): obj is MediaKeyRejected_ { - return obj.tag === FfiImpairment_Tags.MediaKeyRejected; - } - - } - - type ConnectionUnavailable__interface = { - tag: FfiImpairment_Tags.ConnectionUnavailable; - inner: -Readonly<{serviceUrl: string; memberIds: Array; lastError: string; retryAtTs: bigint}> - }; - class ConnectionUnavailable_ extends UniffiEnum implements ConnectionUnavailable__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.ConnectionUnavailable; - readonly inner: -Readonly<{serviceUrl: string; memberIds: Array; lastError: string; retryAtTs: bigint}>; - constructor( -inner: {serviceUrl: string; memberIds: Array; lastError: string; retryAtTs: bigint }) { - super("FfiImpairment", "ConnectionUnavailable"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {serviceUrl: string; memberIds: Array; lastError: string; retryAtTs: bigint }): ConnectionUnavailable_ { - return new ConnectionUnavailable_(inner); - } - - static instanceOf(obj: any): obj is ConnectionUnavailable_ { - return obj.tag === FfiImpairment_Tags.ConnectionUnavailable; - } - - } - - type ConnectionTokenExpired__interface = { - tag: FfiImpairment_Tags.ConnectionTokenExpired; - inner: -Readonly<{serviceUrl: string; expiredAtTs: bigint; lastError: string}> - }; - class ConnectionTokenExpired_ extends UniffiEnum implements ConnectionTokenExpired__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.ConnectionTokenExpired; - readonly inner: -Readonly<{serviceUrl: string; expiredAtTs: bigint; lastError: string}>; - constructor( -inner: {serviceUrl: string; expiredAtTs: bigint; lastError: string }) { - super("FfiImpairment", "ConnectionTokenExpired"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {serviceUrl: string; expiredAtTs: bigint; lastError: string }): ConnectionTokenExpired_ { - return new ConnectionTokenExpired_(inner); - } - - static instanceOf(obj: any): obj is ConnectionTokenExpired_ { - return obj.tag === FfiImpairment_Tags.ConnectionTokenExpired; - } - - } - - type SessionStateUnread__interface = { - tag: FfiImpairment_Tags.SessionStateUnread; - inner: -Readonly<{reads: Array}> - }; - class SessionStateUnread_ extends UniffiEnum implements SessionStateUnread__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.SessionStateUnread; - readonly inner: -Readonly<{reads: Array}>; - constructor( -inner: {reads: Array }) { - super("FfiImpairment", "SessionStateUnread"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {reads: Array }): SessionStateUnread_ { - return new SessionStateUnread_(inner); - } - - static instanceOf(obj: any): obj is SessionStateUnread_ { - return obj.tag === FfiImpairment_Tags.SessionStateUnread; - } - - } - - type JoinedBeforeSeed__interface = { - tag: FfiImpairment_Tags.JoinedBeforeSeed; - inner: -Readonly<{atTs: bigint}> - }; - class JoinedBeforeSeed_ extends UniffiEnum implements JoinedBeforeSeed__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiImpairment"; - readonly tag = FfiImpairment_Tags.JoinedBeforeSeed; - readonly inner: -Readonly<{atTs: bigint}>; - constructor( -inner: {atTs: bigint }) { - super("FfiImpairment", "JoinedBeforeSeed"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {atTs: bigint }): JoinedBeforeSeed_ { - return new JoinedBeforeSeed_(inner); - } - - static instanceOf(obj: any): obj is JoinedBeforeSeed_ { - return obj.tag === FfiImpairment_Tags.JoinedBeforeSeed; - } - - } - - function instanceOf(obj: any): obj is FfiImpairment { - return obj[uniffiTypeNameSymbol] === "FfiImpairment"; - } - - return Object.freeze({ - instanceOf, - HomeserverUnreachable: HomeserverUnreachable_, - KeepAliveRestartFailing: KeepAliveRestartFailing_, - KeepAliveExpired: KeepAliveExpired_, - KeepAliveUnavailable: KeepAliveUnavailable_, - MembershipRefreshFailing: MembershipRefreshFailing_, - OwnMembershipMissing: OwnMembershipMissing_, - OwnMembershipExcluded: OwnMembershipExcluded_, - MediaKeyNotDelivered: MediaKeyNotDelivered_, - MediaKeyNotReceived: MediaKeyNotReceived_, - MediaKeyRejected: MediaKeyRejected_, - ConnectionUnavailable: ConnectionUnavailable_, - ConnectionTokenExpired: ConnectionTokenExpired_, - SessionStateUnread: SessionStateUnread_, - JoinedBeforeSeed: JoinedBeforeSeed_ - }); - -})(); -/** - * A condition that is true right now and that the crate is still working - * on. Every variant clears by itself when the underlying operation - * succeeds — an impairment is never terminal; anything terminal ends the - * participation and appears as [`FfiDisconnectCause`] instead. - * - * A host that renders one warning banner can read this list and nothing - * else; the structured status above is for anything that needs the details. - */ -export type FfiImpairment = InstanceType< - typeof FfiImpairment['HomeserverUnreachable' | 'KeepAliveRestartFailing' | 'KeepAliveExpired' | 'KeepAliveUnavailable' | 'MembershipRefreshFailing' | 'OwnMembershipMissing' | 'OwnMembershipExcluded' | 'MediaKeyNotDelivered' | 'MediaKeyNotReceived' | 'MediaKeyRejected' | 'ConnectionUnavailable' | 'ConnectionTokenExpired' | 'SessionStateUnread' | 'JoinedBeforeSeed'] ->; - -// FfiConverter for enum FfiImpairment -const FfiConverterTypeFfiImpairment = (() => { - type TypeName = FfiImpairment; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new FfiImpairment.HomeserverUnreachable({sinceTs: FfiConverterUInt64.readFromCursor(c) }); - case 2: return new FfiImpairment.KeepAliveRestartFailing({sinceTs: FfiConverterUInt64.readFromCursor(c), firesAtTs: FfiConverterUInt64.readFromCursor(c), lastError: FfiConverterString.readFromCursor(c) }); - case 3: return new FfiImpairment.KeepAliveExpired({sinceTs: FfiConverterUInt64.readFromCursor(c) }); - case 4: return new FfiImpairment.KeepAliveUnavailable({permanent: FfiConverterBool.readFromCursor(c), membershipExpiresAtTs: FfiConverterUInt64.readFromCursor(c) }); - case 5: return new FfiImpairment.MembershipRefreshFailing({sinceTs: FfiConverterUInt64.readFromCursor(c), expiresAtTs: FfiConverterUInt64.readFromCursor(c), lastError: FfiConverterString.readFromCursor(c) }); - case 6: return new FfiImpairment.OwnMembershipMissing({sinceTs: FfiConverterUInt64.readFromCursor(c), republishedAtTs: FfiConverterOptionalUInt64.readFromCursor(c) }); - case 7: return new FfiImpairment.OwnMembershipExcluded({reason: FfiConverterTypeFfiJoinExclusionReason.readFromCursor(c) }); - case 8: return new FfiImpairment.MediaKeyNotDelivered({memberIds: FfiConverterSequenceString.readFromCursor(c) }); - case 9: return new FfiImpairment.MediaKeyNotReceived({memberIds: FfiConverterSequenceString.readFromCursor(c) }); - case 10: return new FfiImpairment.MediaKeyRejected({memberId: FfiConverterString.readFromCursor(c), senderUserId: FfiConverterString.readFromCursor(c), reason: FfiConverterTypeFfiKeyRejection.readFromCursor(c), atTs: FfiConverterUInt64.readFromCursor(c) }); - case 11: return new FfiImpairment.ConnectionUnavailable({serviceUrl: FfiConverterString.readFromCursor(c), memberIds: FfiConverterSequenceString.readFromCursor(c), lastError: FfiConverterString.readFromCursor(c), retryAtTs: FfiConverterUInt64.readFromCursor(c) }); - case 12: return new FfiImpairment.ConnectionTokenExpired({serviceUrl: FfiConverterString.readFromCursor(c), expiredAtTs: FfiConverterUInt64.readFromCursor(c), lastError: FfiConverterString.readFromCursor(c) }); - case 13: return new FfiImpairment.SessionStateUnread({reads: FfiConverterSequenceTypeFfiSessionRead.readFromCursor(c) }); - case 14: return new FfiImpairment.JoinedBeforeSeed({atTs: FfiConverterUInt64.readFromCursor(c) }); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case FfiImpairment_Tags.HomeserverUnreachable: { - c.writeI32(1); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.sinceTs, c); - return; - } - case FfiImpairment_Tags.KeepAliveRestartFailing: { - c.writeI32(2); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.sinceTs, c); - FfiConverterUInt64.writeIntoCursor(inner.firesAtTs, c); - FfiConverterString.writeIntoCursor(inner.lastError, c); - return; - } - case FfiImpairment_Tags.KeepAliveExpired: { - c.writeI32(3); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.sinceTs, c); - return; - } - case FfiImpairment_Tags.KeepAliveUnavailable: { - c.writeI32(4); - const inner = value.inner; - FfiConverterBool.writeIntoCursor(inner.permanent, c); - FfiConverterUInt64.writeIntoCursor(inner.membershipExpiresAtTs, c); - return; - } - case FfiImpairment_Tags.MembershipRefreshFailing: { - c.writeI32(5); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.sinceTs, c); - FfiConverterUInt64.writeIntoCursor(inner.expiresAtTs, c); - FfiConverterString.writeIntoCursor(inner.lastError, c); - return; - } - case FfiImpairment_Tags.OwnMembershipMissing: { - c.writeI32(6); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.sinceTs, c); - FfiConverterOptionalUInt64.writeIntoCursor(inner.republishedAtTs, c); - return; - } - case FfiImpairment_Tags.OwnMembershipExcluded: { - c.writeI32(7); - const inner = value.inner; - FfiConverterTypeFfiJoinExclusionReason.writeIntoCursor(inner.reason, c); - return; - } - case FfiImpairment_Tags.MediaKeyNotDelivered: { - c.writeI32(8); - const inner = value.inner; - FfiConverterSequenceString.writeIntoCursor(inner.memberIds, c); - return; - } - case FfiImpairment_Tags.MediaKeyNotReceived: { - c.writeI32(9); - const inner = value.inner; - FfiConverterSequenceString.writeIntoCursor(inner.memberIds, c); - return; - } - case FfiImpairment_Tags.MediaKeyRejected: { - c.writeI32(10); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner.memberId, c); - FfiConverterString.writeIntoCursor(inner.senderUserId, c); - FfiConverterTypeFfiKeyRejection.writeIntoCursor(inner.reason, c); - FfiConverterUInt64.writeIntoCursor(inner.atTs, c); - return; - } - case FfiImpairment_Tags.ConnectionUnavailable: { - c.writeI32(11); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner.serviceUrl, c); - FfiConverterSequenceString.writeIntoCursor(inner.memberIds, c); - FfiConverterString.writeIntoCursor(inner.lastError, c); - FfiConverterUInt64.writeIntoCursor(inner.retryAtTs, c); - return; - } - case FfiImpairment_Tags.ConnectionTokenExpired: { - c.writeI32(12); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner.serviceUrl, c); - FfiConverterUInt64.writeIntoCursor(inner.expiredAtTs, c); - FfiConverterString.writeIntoCursor(inner.lastError, c); - return; - } - case FfiImpairment_Tags.SessionStateUnread: { - c.writeI32(13); - const inner = value.inner; - FfiConverterSequenceTypeFfiSessionRead.writeIntoCursor(inner.reads, c); - return; - } - case FfiImpairment_Tags.JoinedBeforeSeed: { - c.writeI32(14); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.atTs, c); - return; - } - default: - // Throwing from here means that FfiImpairment_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case FfiImpairment_Tags.HomeserverUnreachable: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.sinceTs); - return size; - } - case FfiImpairment_Tags.KeepAliveRestartFailing: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.sinceTs); - size += FfiConverterUInt64.allocationSize(inner.firesAtTs); - size += FfiConverterString.allocationSize(inner.lastError); - return size; - } - case FfiImpairment_Tags.KeepAliveExpired: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.sinceTs); - return size; - } - case FfiImpairment_Tags.KeepAliveUnavailable: { - const inner = value.inner; - let size = 4; - size += FfiConverterBool.allocationSize(inner.permanent); - size += FfiConverterUInt64.allocationSize(inner.membershipExpiresAtTs); - return size; - } - case FfiImpairment_Tags.MembershipRefreshFailing: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.sinceTs); - size += FfiConverterUInt64.allocationSize(inner.expiresAtTs); - size += FfiConverterString.allocationSize(inner.lastError); - return size; - } - case FfiImpairment_Tags.OwnMembershipMissing: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.sinceTs); - size += FfiConverterOptionalUInt64.allocationSize(inner.republishedAtTs); - return size; - } - case FfiImpairment_Tags.OwnMembershipExcluded: { - const inner = value.inner; - let size = 4; - size += FfiConverterTypeFfiJoinExclusionReason.allocationSize(inner.reason); - return size; - } - case FfiImpairment_Tags.MediaKeyNotDelivered: { - const inner = value.inner; - let size = 4; - size += FfiConverterSequenceString.allocationSize(inner.memberIds); - return size; - } - case FfiImpairment_Tags.MediaKeyNotReceived: { - const inner = value.inner; - let size = 4; - size += FfiConverterSequenceString.allocationSize(inner.memberIds); - return size; - } - case FfiImpairment_Tags.MediaKeyRejected: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner.memberId); - size += FfiConverterString.allocationSize(inner.senderUserId); - size += FfiConverterTypeFfiKeyRejection.allocationSize(inner.reason); - size += FfiConverterUInt64.allocationSize(inner.atTs); - return size; - } - case FfiImpairment_Tags.ConnectionUnavailable: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner.serviceUrl); - size += FfiConverterSequenceString.allocationSize(inner.memberIds); - size += FfiConverterString.allocationSize(inner.lastError); - size += FfiConverterUInt64.allocationSize(inner.retryAtTs); - return size; - } - case FfiImpairment_Tags.ConnectionTokenExpired: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner.serviceUrl); - size += FfiConverterUInt64.allocationSize(inner.expiredAtTs); - size += FfiConverterString.allocationSize(inner.lastError); - return size; - } - case FfiImpairment_Tags.SessionStateUnread: { - const inner = value.inner; - let size = 4; - size += FfiConverterSequenceTypeFfiSessionRead.allocationSize(inner.reads); - return size; - } - case FfiImpairment_Tags.JoinedBeforeSeed: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.atTs); - return size; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - - -// Enum: FfiKeepAlive -export enum FfiKeepAlive_Tags { - Armed = "Armed", - Delegated = "Delegated", - RestartFailing = "RestartFailing", - Expired = "Expired", - Unavailable = "Unavailable" -} -/** - * The dead man's switch that clears our membership if this client dies. - * Mutually exclusive states of one mechanism. - */ -export const FfiKeepAlive = (() => { - - type Armed__interface = { - tag: FfiKeepAlive_Tags.Armed; - inner: -Readonly<{delayMs: bigint; lastRestartTs: bigint; firesAtTs: bigint}> - }; - /** - * Armed, and we restart it ourselves. - */ - class Armed_ extends UniffiEnum implements Armed__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiKeepAlive"; - readonly tag = FfiKeepAlive_Tags.Armed; - readonly inner: -Readonly<{delayMs: bigint; lastRestartTs: bigint; firesAtTs: bigint}>; - constructor( -inner: {delayMs: bigint; lastRestartTs: bigint; firesAtTs: bigint }) { - super("FfiKeepAlive", "Armed"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {delayMs: bigint; lastRestartTs: bigint; firesAtTs: bigint }): Armed_ { - return new Armed_(inner); - } - - static instanceOf(obj: any): obj is Armed_ { - return obj.tag === FfiKeepAlive_Tags.Armed; - } - - } - - type Delegated__interface = { - tag: FfiKeepAlive_Tags.Delegated; - inner: -Readonly<{delegatedAtTs: bigint; earliestFireTs: bigint; via: FfiDelegationRoute}> - }; - /** - * Handed to the SFU (MSC4195): we no longer restart it, so a frozen - * `last_restart_ts` is expected here rather than a fault. - */ - class Delegated_ extends UniffiEnum implements Delegated__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiKeepAlive"; - readonly tag = FfiKeepAlive_Tags.Delegated; - readonly inner: -Readonly<{delegatedAtTs: bigint; earliestFireTs: bigint; via: FfiDelegationRoute}>; - constructor( -inner: {delegatedAtTs: bigint; earliestFireTs: bigint; via: FfiDelegationRoute }) { - super("FfiKeepAlive", "Delegated"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {delegatedAtTs: bigint; earliestFireTs: bigint; via: FfiDelegationRoute }): Delegated_ { - return new Delegated_(inner); - } - - static instanceOf(obj: any): obj is Delegated_ { - return obj.tag === FfiKeepAlive_Tags.Delegated; - } - - } - - type RestartFailing__interface = { - tag: FfiKeepAlive_Tags.RestartFailing; - inner: -Readonly<{sinceTs: bigint; firesAtTs: bigint; lastError: string}> - }; - /** - * Armed, but restarts are failing — we drop out at `fires_at_ts` - * unless one succeeds. - */ - class RestartFailing_ extends UniffiEnum implements RestartFailing__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiKeepAlive"; - readonly tag = FfiKeepAlive_Tags.RestartFailing; - readonly inner: -Readonly<{sinceTs: bigint; firesAtTs: bigint; lastError: string}>; - constructor( -inner: {sinceTs: bigint; firesAtTs: bigint; lastError: string }) { - super("FfiKeepAlive", "RestartFailing"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {sinceTs: bigint; firesAtTs: bigint; lastError: string }): RestartFailing_ { - return new RestartFailing_(inner); - } - - static instanceOf(obj: any): obj is RestartFailing_ { - return obj.tag === FfiKeepAlive_Tags.RestartFailing; - } - - } - - type Expired__interface = { - tag: FfiKeepAlive_Tags.Expired; - inner: -Readonly<{sinceTs: bigint}> - }; - /** - * Its delay elapsed with no successful restart: we are probably out - * already. A replacement is being armed. - */ - class Expired_ extends UniffiEnum implements Expired__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiKeepAlive"; - readonly tag = FfiKeepAlive_Tags.Expired; - readonly inner: -Readonly<{sinceTs: bigint}>; - constructor( -inner: {sinceTs: bigint }) { - super("FfiKeepAlive", "Expired"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {sinceTs: bigint }): Expired_ { - return new Expired_(inner); - } - - static instanceOf(obj: any): obj is Expired_ { - return obj.tag === FfiKeepAlive_Tags.Expired; - } - - } - - type Unavailable__interface = { - tag: FfiKeepAlive_Tags.Unavailable; - inner: -Readonly<{permanent: boolean; nextProbeTs?: bigint}> - }; - /** - * None armed. `permanent` = this homeserver refuses delayed events for - * good; otherwise we re-probe at `next_probe_ts` (`Some(0)` = next beat). - */ - class Unavailable_ extends UniffiEnum implements Unavailable__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiKeepAlive"; - readonly tag = FfiKeepAlive_Tags.Unavailable; - readonly inner: -Readonly<{permanent: boolean; nextProbeTs?: bigint}>; - constructor( -inner: {permanent: boolean; nextProbeTs?: bigint }) { - super("FfiKeepAlive", "Unavailable"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {permanent: boolean; nextProbeTs?: bigint }): Unavailable_ { - return new Unavailable_(inner); - } - - static instanceOf(obj: any): obj is Unavailable_ { - return obj.tag === FfiKeepAlive_Tags.Unavailable; - } - - } - - function instanceOf(obj: any): obj is FfiKeepAlive { - return obj[uniffiTypeNameSymbol] === "FfiKeepAlive"; - } - - return Object.freeze({ - instanceOf, - Armed: Armed_, - Delegated: Delegated_, - RestartFailing: RestartFailing_, - Expired: Expired_, - Unavailable: Unavailable_ - }); - -})(); -/** - * The dead man's switch that clears our membership if this client dies. - * Mutually exclusive states of one mechanism. - */ -export type FfiKeepAlive = InstanceType< - typeof FfiKeepAlive['Armed' | 'Delegated' | 'RestartFailing' | 'Expired' | 'Unavailable'] ->; - -// FfiConverter for enum FfiKeepAlive -const FfiConverterTypeFfiKeepAlive = (() => { - type TypeName = FfiKeepAlive; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new FfiKeepAlive.Armed({delayMs: FfiConverterUInt64.readFromCursor(c), lastRestartTs: FfiConverterUInt64.readFromCursor(c), firesAtTs: FfiConverterUInt64.readFromCursor(c) }); - case 2: return new FfiKeepAlive.Delegated({delegatedAtTs: FfiConverterUInt64.readFromCursor(c), earliestFireTs: FfiConverterUInt64.readFromCursor(c), via: FfiConverterTypeFfiDelegationRoute.readFromCursor(c) }); - case 3: return new FfiKeepAlive.RestartFailing({sinceTs: FfiConverterUInt64.readFromCursor(c), firesAtTs: FfiConverterUInt64.readFromCursor(c), lastError: FfiConverterString.readFromCursor(c) }); - case 4: return new FfiKeepAlive.Expired({sinceTs: FfiConverterUInt64.readFromCursor(c) }); - case 5: return new FfiKeepAlive.Unavailable({permanent: FfiConverterBool.readFromCursor(c), nextProbeTs: FfiConverterOptionalUInt64.readFromCursor(c) }); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case FfiKeepAlive_Tags.Armed: { - c.writeI32(1); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.delayMs, c); - FfiConverterUInt64.writeIntoCursor(inner.lastRestartTs, c); - FfiConverterUInt64.writeIntoCursor(inner.firesAtTs, c); - return; - } - case FfiKeepAlive_Tags.Delegated: { - c.writeI32(2); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.delegatedAtTs, c); - FfiConverterUInt64.writeIntoCursor(inner.earliestFireTs, c); - FfiConverterTypeFfiDelegationRoute.writeIntoCursor(inner.via, c); - return; - } - case FfiKeepAlive_Tags.RestartFailing: { - c.writeI32(3); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.sinceTs, c); - FfiConverterUInt64.writeIntoCursor(inner.firesAtTs, c); - FfiConverterString.writeIntoCursor(inner.lastError, c); - return; - } - case FfiKeepAlive_Tags.Expired: { - c.writeI32(4); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.sinceTs, c); - return; - } - case FfiKeepAlive_Tags.Unavailable: { - c.writeI32(5); - const inner = value.inner; - FfiConverterBool.writeIntoCursor(inner.permanent, c); - FfiConverterOptionalUInt64.writeIntoCursor(inner.nextProbeTs, c); - return; - } - default: - // Throwing from here means that FfiKeepAlive_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case FfiKeepAlive_Tags.Armed: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.delayMs); - size += FfiConverterUInt64.allocationSize(inner.lastRestartTs); - size += FfiConverterUInt64.allocationSize(inner.firesAtTs); - return size; - } - case FfiKeepAlive_Tags.Delegated: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.delegatedAtTs); - size += FfiConverterUInt64.allocationSize(inner.earliestFireTs); - size += FfiConverterTypeFfiDelegationRoute.allocationSize(inner.via); - return size; - } - case FfiKeepAlive_Tags.RestartFailing: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.sinceTs); - size += FfiConverterUInt64.allocationSize(inner.firesAtTs); - size += FfiConverterString.allocationSize(inner.lastError); - return size; - } - case FfiKeepAlive_Tags.Expired: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.sinceTs); - return size; - } - case FfiKeepAlive_Tags.Unavailable: { - const inner = value.inner; - let size = 4; - size += FfiConverterBool.allocationSize(inner.permanent); - size += FfiConverterOptionalUInt64.allocationSize(inner.nextProbeTs); - return size; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - -/** - * The `log` crate's levels, for a [`LogSink`]. - */ -export enum FfiLogLevel { - Error, - Warn, - Info, - Debug, - Trace -} - -const FfiConverterTypeFfiLogLevel = (() => { - type TypeName = FfiLogLevel; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiLogLevel.Error; - case 2: return FfiLogLevel.Warn; - case 3: return FfiLogLevel.Info; - case 4: return FfiLogLevel.Debug; - case 5: return FfiLogLevel.Trace; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiLogLevel.Error: return c.writeI32(1); - case FfiLogLevel.Warn: return c.writeI32(2); - case FfiLogLevel.Info: return c.writeI32(3); - case FfiLogLevel.Debug: return c.writeI32(4); - case FfiLogLevel.Trace: return c.writeI32(5); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - - -// Enum: FfiRosterPresence -export enum FfiRosterPresence_Tags { - AwaitingEcho = "AwaitingEcho", - Present = "Present", - Missing = "Missing", - Excluded = "Excluded" -} -/** - * Whether the session projects our own membership — i.e. whether anybody - * can see us. - */ -export const FfiRosterPresence = (() => { - - type AwaitingEcho__interface = { - tag: FfiRosterPresence_Tags.AwaitingEcho - }; - /** - * Sent, echo not back yet. Not a fault. - */ - class AwaitingEcho_ extends UniffiEnum implements AwaitingEcho__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiRosterPresence"; - readonly tag = FfiRosterPresence_Tags.AwaitingEcho; - constructor() { - super("FfiRosterPresence", "AwaitingEcho"); - } - - static new(): AwaitingEcho_ { - return new AwaitingEcho_(); - } - - static instanceOf(obj: any): obj is AwaitingEcho_ { - return obj.tag === FfiRosterPresence_Tags.AwaitingEcho; - } - - } - - type Present__interface = { - tag: FfiRosterPresence_Tags.Present - }; - class Present_ extends UniffiEnum implements Present__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiRosterPresence"; - readonly tag = FfiRosterPresence_Tags.Present; - constructor() { - super("FfiRosterPresence", "Present"); - } - - static new(): Present_ { - return new Present_(); - } - - static instanceOf(obj: any): obj is Present_ { - return obj.tag === FfiRosterPresence_Tags.Present; - } - - } - - type Missing__interface = { - tag: FfiRosterPresence_Tags.Missing; - inner: -Readonly<{sinceTs: bigint; republishedAtTs?: bigint}> - }; - /** - * It was in the roster and is gone. - */ - class Missing_ extends UniffiEnum implements Missing__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiRosterPresence"; - readonly tag = FfiRosterPresence_Tags.Missing; - readonly inner: -Readonly<{sinceTs: bigint; republishedAtTs?: bigint}>; - constructor( -inner: {sinceTs: bigint; republishedAtTs?: bigint }) { - super("FfiRosterPresence", "Missing"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {sinceTs: bigint; republishedAtTs?: bigint }): Missing_ { - return new Missing_(inner); - } - - static instanceOf(obj: any): obj is Missing_ { - return obj.tag === FfiRosterPresence_Tags.Missing; - } - - } - - type Excluded__interface = { - tag: FfiRosterPresence_Tags.Excluded; - inner: -Readonly<{reason: FfiJoinExclusionReason}> - }; - /** - * On the server, but the session refuses to project it. The self-heal - * deliberately does not re-send here. - */ - class Excluded_ extends UniffiEnum implements Excluded__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiRosterPresence"; - readonly tag = FfiRosterPresence_Tags.Excluded; - readonly inner: -Readonly<{reason: FfiJoinExclusionReason}>; - constructor( -inner: {reason: FfiJoinExclusionReason }) { - super("FfiRosterPresence", "Excluded"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {reason: FfiJoinExclusionReason }): Excluded_ { - return new Excluded_(inner); - } - - static instanceOf(obj: any): obj is Excluded_ { - return obj.tag === FfiRosterPresence_Tags.Excluded; - } - - } - - function instanceOf(obj: any): obj is FfiRosterPresence { - return obj[uniffiTypeNameSymbol] === "FfiRosterPresence"; - } - - return Object.freeze({ - instanceOf, - AwaitingEcho: AwaitingEcho_, - Present: Present_, - Missing: Missing_, - Excluded: Excluded_ - }); - -})(); -/** - * Whether the session projects our own membership — i.e. whether anybody - * can see us. - */ -export type FfiRosterPresence = InstanceType< - typeof FfiRosterPresence['AwaitingEcho' | 'Present' | 'Missing' | 'Excluded'] ->; - -// FfiConverter for enum FfiRosterPresence -const FfiConverterTypeFfiRosterPresence = (() => { - type TypeName = FfiRosterPresence; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new FfiRosterPresence.AwaitingEcho(); - case 2: return new FfiRosterPresence.Present(); - case 3: return new FfiRosterPresence.Missing({sinceTs: FfiConverterUInt64.readFromCursor(c), republishedAtTs: FfiConverterOptionalUInt64.readFromCursor(c) }); - case 4: return new FfiRosterPresence.Excluded({reason: FfiConverterTypeFfiJoinExclusionReason.readFromCursor(c) }); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case FfiRosterPresence_Tags.AwaitingEcho: { - c.writeI32(1); - return; - } - case FfiRosterPresence_Tags.Present: { - c.writeI32(2); - return; - } - case FfiRosterPresence_Tags.Missing: { - c.writeI32(3); - const inner = value.inner; - FfiConverterUInt64.writeIntoCursor(inner.sinceTs, c); - FfiConverterOptionalUInt64.writeIntoCursor(inner.republishedAtTs, c); - return; - } - case FfiRosterPresence_Tags.Excluded: { - c.writeI32(4); - const inner = value.inner; - FfiConverterTypeFfiJoinExclusionReason.writeIntoCursor(inner.reason, c); - return; - } - default: - // Throwing from here means that FfiRosterPresence_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case FfiRosterPresence_Tags.AwaitingEcho: { - return 4; - } - case FfiRosterPresence_Tags.Present: { - return 4; - } - case FfiRosterPresence_Tags.Missing: { - const inner = value.inner; - let size = 4; - size += FfiConverterUInt64.allocationSize(inner.sinceTs); - size += FfiConverterOptionalUInt64.allocationSize(inner.republishedAtTs); - return size; - } - case FfiRosterPresence_Tags.Excluded: { - const inner = value.inner; - let size = 4; - size += FfiConverterTypeFfiJoinExclusionReason.allocationSize(inner.reason); - return size; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - -/** - * How severe an [`FfiImpairment`] is, and therefore where to render it. - */ -export enum FfiSeverity { - /** - * We are, or are about to be, out of the call — or peers cannot use - * our media. - */ - Critical, - /** - * Degraded but functioning; a crash or a timeout would now hurt. - */ - Degraded, - /** - * Worth surfacing in diagnostics, not in the call UI. - */ - Notice -} - -const FfiConverterTypeFfiSeverity = (() => { - type TypeName = FfiSeverity; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return FfiSeverity.Critical; - case 2: return FfiSeverity.Degraded; - case 3: return FfiSeverity.Notice; - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value) { - case FfiSeverity.Critical: return c.writeI32(1); - case FfiSeverity.Degraded: return c.writeI32(2); - case FfiSeverity.Notice: return c.writeI32(3); - } - } - allocationSize(value: TypeName): number { - return 4; - } - } - return new FFIConverter(); -})(); - - -// Enum: FfiStatus -export enum FfiStatus_Tags { - Disconnected = "Disconnected", - Joining = "Joining", - Connected = "Connected", - Leaving = "Leaving" -} -/** - * The participation status, in full. - * - * This used to be four opaque variants with everything else hidden behind - * `debug_snapshot`'s unversioned JSON — which is a diagnostics dump, not a - * UI contract. Every field a host needs is now typed. - */ -export const FfiStatus = (() => { - - type Disconnected__interface = { - tag: FfiStatus_Tags.Disconnected; - inner: -Readonly<{cause: FfiDisconnectCause}> - }; - class Disconnected_ extends UniffiEnum implements Disconnected__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiStatus"; - readonly tag = FfiStatus_Tags.Disconnected; - readonly inner: -Readonly<{cause: FfiDisconnectCause}>; - constructor( -inner: {cause: FfiDisconnectCause }) { - super("FfiStatus", "Disconnected"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {cause: FfiDisconnectCause }): Disconnected_ { - return new Disconnected_(inner); - } - - static instanceOf(obj: any): obj is Disconnected_ { - return obj.tag === FfiStatus_Tags.Disconnected; - } - - } - - type Joining__interface = { - tag: FfiStatus_Tags.Joining; - inner: -Readonly<{ownMembership: FfiJoinProgress; encryption: FfiEncryptionStatus; impairments: Array}> - }; - class Joining_ extends UniffiEnum implements Joining__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiStatus"; - readonly tag = FfiStatus_Tags.Joining; - readonly inner: -Readonly<{ownMembership: FfiJoinProgress; encryption: FfiEncryptionStatus; impairments: Array}>; - constructor( -inner: {ownMembership: FfiJoinProgress; encryption: FfiEncryptionStatus; impairments: Array }) { - super("FfiStatus", "Joining"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {ownMembership: FfiJoinProgress; encryption: FfiEncryptionStatus; impairments: Array }): Joining_ { - return new Joining_(inner); - } - - static instanceOf(obj: any): obj is Joining_ { - return obj.tag === FfiStatus_Tags.Joining; - } - - } - - type Connected__interface = { - tag: FfiStatus_Tags.Connected; - inner: -Readonly<{keepAlive: FfiKeepAlive; membership: FfiMembershipPublication; roster: FfiRosterPresence; encryption: FfiEncryptionStatus; impairments: Array}> - }; - class Connected_ extends UniffiEnum implements Connected__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiStatus"; - readonly tag = FfiStatus_Tags.Connected; - readonly inner: -Readonly<{keepAlive: FfiKeepAlive; membership: FfiMembershipPublication; roster: FfiRosterPresence; encryption: FfiEncryptionStatus; impairments: Array}>; - constructor( -inner: {keepAlive: FfiKeepAlive; membership: FfiMembershipPublication; roster: FfiRosterPresence; encryption: FfiEncryptionStatus; impairments: Array }) { - super("FfiStatus", "Connected"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {keepAlive: FfiKeepAlive; membership: FfiMembershipPublication; roster: FfiRosterPresence; encryption: FfiEncryptionStatus; impairments: Array }): Connected_ { - return new Connected_(inner); - } - - static instanceOf(obj: any): obj is Connected_ { - return obj.tag === FfiStatus_Tags.Connected; - } - - } - - type Leaving__interface = { - tag: FfiStatus_Tags.Leaving; - inner: -Readonly<{leaveEventSent: boolean; delayedLeave?: FfiDelayedLeaveOutcome; impairments: Array}> - }; - class Leaving_ extends UniffiEnum implements Leaving__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiStatus"; - readonly tag = FfiStatus_Tags.Leaving; - readonly inner: -Readonly<{leaveEventSent: boolean; delayedLeave?: FfiDelayedLeaveOutcome; impairments: Array}>; - constructor( -inner: {leaveEventSent: boolean; delayedLeave?: FfiDelayedLeaveOutcome; impairments: Array }) { - super("FfiStatus", "Leaving"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {leaveEventSent: boolean; delayedLeave?: FfiDelayedLeaveOutcome; impairments: Array }): Leaving_ { - return new Leaving_(inner); - } - - static instanceOf(obj: any): obj is Leaving_ { - return obj.tag === FfiStatus_Tags.Leaving; - } - - } - - function instanceOf(obj: any): obj is FfiStatus { - return obj[uniffiTypeNameSymbol] === "FfiStatus"; - } - - return Object.freeze({ - instanceOf, - Disconnected: Disconnected_, - Joining: Joining_, - Connected: Connected_, - Leaving: Leaving_ - }); - -})(); -/** - * The participation status, in full. - * - * This used to be four opaque variants with everything else hidden behind - * `debug_snapshot`'s unversioned JSON — which is a diagnostics dump, not a - * UI contract. Every field a host needs is now typed. - */ -export type FfiStatus = InstanceType< - typeof FfiStatus['Disconnected' | 'Joining' | 'Connected' | 'Leaving'] ->; - -// FfiConverter for enum FfiStatus -const FfiConverterTypeFfiStatus = (() => { - type TypeName = FfiStatus; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new FfiStatus.Disconnected({cause: FfiConverterTypeFfiDisconnectCause.readFromCursor(c) }); - case 2: return new FfiStatus.Joining({ownMembership: FfiConverterTypeFfiJoinProgress.readFromCursor(c), encryption: FfiConverterTypeFfiEncryptionStatus.readFromCursor(c), impairments: FfiConverterSequenceTypeFfiImpairment.readFromCursor(c) }); - case 3: return new FfiStatus.Connected({keepAlive: FfiConverterTypeFfiKeepAlive.readFromCursor(c), membership: FfiConverterTypeFfiMembershipPublication.readFromCursor(c), roster: FfiConverterTypeFfiRosterPresence.readFromCursor(c), encryption: FfiConverterTypeFfiEncryptionStatus.readFromCursor(c), impairments: FfiConverterSequenceTypeFfiImpairment.readFromCursor(c) }); - case 4: return new FfiStatus.Leaving({leaveEventSent: FfiConverterBool.readFromCursor(c), delayedLeave: FfiConverterOptionalTypeFfiDelayedLeaveOutcome.readFromCursor(c), impairments: FfiConverterSequenceTypeFfiImpairment.readFromCursor(c) }); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case FfiStatus_Tags.Disconnected: { - c.writeI32(1); - const inner = value.inner; - FfiConverterTypeFfiDisconnectCause.writeIntoCursor(inner.cause, c); - return; - } - case FfiStatus_Tags.Joining: { - c.writeI32(2); - const inner = value.inner; - FfiConverterTypeFfiJoinProgress.writeIntoCursor(inner.ownMembership, c); - FfiConverterTypeFfiEncryptionStatus.writeIntoCursor(inner.encryption, c); - FfiConverterSequenceTypeFfiImpairment.writeIntoCursor(inner.impairments, c); - return; - } - case FfiStatus_Tags.Connected: { - c.writeI32(3); - const inner = value.inner; - FfiConverterTypeFfiKeepAlive.writeIntoCursor(inner.keepAlive, c); - FfiConverterTypeFfiMembershipPublication.writeIntoCursor(inner.membership, c); - FfiConverterTypeFfiRosterPresence.writeIntoCursor(inner.roster, c); - FfiConverterTypeFfiEncryptionStatus.writeIntoCursor(inner.encryption, c); - FfiConverterSequenceTypeFfiImpairment.writeIntoCursor(inner.impairments, c); - return; - } - case FfiStatus_Tags.Leaving: { - c.writeI32(4); - const inner = value.inner; - FfiConverterBool.writeIntoCursor(inner.leaveEventSent, c); - FfiConverterOptionalTypeFfiDelayedLeaveOutcome.writeIntoCursor(inner.delayedLeave, c); - FfiConverterSequenceTypeFfiImpairment.writeIntoCursor(inner.impairments, c); - return; - } - default: - // Throwing from here means that FfiStatus_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case FfiStatus_Tags.Disconnected: { - const inner = value.inner; - let size = 4; - size += FfiConverterTypeFfiDisconnectCause.allocationSize(inner.cause); - return size; - } - case FfiStatus_Tags.Joining: { - const inner = value.inner; - let size = 4; - size += FfiConverterTypeFfiJoinProgress.allocationSize(inner.ownMembership); - size += FfiConverterTypeFfiEncryptionStatus.allocationSize(inner.encryption); - size += FfiConverterSequenceTypeFfiImpairment.allocationSize(inner.impairments); - return size; - } - case FfiStatus_Tags.Connected: { - const inner = value.inner; - let size = 4; - size += FfiConverterTypeFfiKeepAlive.allocationSize(inner.keepAlive); - size += FfiConverterTypeFfiMembershipPublication.allocationSize(inner.membership); - size += FfiConverterTypeFfiRosterPresence.allocationSize(inner.roster); - size += FfiConverterTypeFfiEncryptionStatus.allocationSize(inner.encryption); - size += FfiConverterSequenceTypeFfiImpairment.allocationSize(inner.impairments); - return size; - } - case FfiStatus_Tags.Leaving: { - const inner = value.inner; - let size = 4; - size += FfiConverterBool.allocationSize(inner.leaveEventSent); - size += FfiConverterOptionalTypeFfiDelayedLeaveOutcome.allocationSize(inner.delayedLeave); - size += FfiConverterSequenceTypeFfiImpairment.allocationSize(inner.impairments); - return size; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - - -// Enum: FfiTransportIntent -export enum FfiTransportIntent_Tags { - Publish = "Publish", - ReceiveOnly = "ReceiveOnly" -} -export const FfiTransportIntent = (() => { - - type Publish__interface = { - tag: FfiTransportIntent_Tags.Publish; - inner: -Readonly<{transport: FfiRtcTransport}> - }; - class Publish_ extends UniffiEnum implements Publish__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiTransportIntent"; - readonly tag = FfiTransportIntent_Tags.Publish; - readonly inner: -Readonly<{transport: FfiRtcTransport}>; - constructor( -inner: {transport: FfiRtcTransport }) { - super("FfiTransportIntent", "Publish"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {transport: FfiRtcTransport }): Publish_ { - return new Publish_(inner); - } - - static instanceOf(obj: any): obj is Publish_ { - return obj.tag === FfiTransportIntent_Tags.Publish; - } - - } - - type ReceiveOnly__interface = { - tag: FfiTransportIntent_Tags.ReceiveOnly; - inner: -Readonly<{canSubscribe: Array}> - }; - class ReceiveOnly_ extends UniffiEnum implements ReceiveOnly__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "FfiTransportIntent"; - readonly tag = FfiTransportIntent_Tags.ReceiveOnly; - readonly inner: -Readonly<{canSubscribe: Array}>; - constructor( -inner: {canSubscribe: Array }) { - super("FfiTransportIntent", "ReceiveOnly"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {canSubscribe: Array }): ReceiveOnly_ { - return new ReceiveOnly_(inner); - } - - static instanceOf(obj: any): obj is ReceiveOnly_ { - return obj.tag === FfiTransportIntent_Tags.ReceiveOnly; - } - - } - - function instanceOf(obj: any): obj is FfiTransportIntent { - return obj[uniffiTypeNameSymbol] === "FfiTransportIntent"; - } - - return Object.freeze({ - instanceOf, - Publish: Publish_, - ReceiveOnly: ReceiveOnly_ - }); - -})(); -export type FfiTransportIntent = InstanceType< - typeof FfiTransportIntent['Publish' | 'ReceiveOnly'] ->; - -// FfiConverter for enum FfiTransportIntent -const FfiConverterTypeFfiTransportIntent = (() => { - type TypeName = FfiTransportIntent; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new FfiTransportIntent.Publish({transport: FfiConverterTypeFfiRtcTransport.readFromCursor(c) }); - case 2: return new FfiTransportIntent.ReceiveOnly({canSubscribe: FfiConverterSequenceString.readFromCursor(c) }); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case FfiTransportIntent_Tags.Publish: { - c.writeI32(1); - const inner = value.inner; - FfiConverterTypeFfiRtcTransport.writeIntoCursor(inner.transport, c); - return; - } - case FfiTransportIntent_Tags.ReceiveOnly: { - c.writeI32(2); - const inner = value.inner; - FfiConverterSequenceString.writeIntoCursor(inner.canSubscribe, c); - return; - } - default: - // Throwing from here means that FfiTransportIntent_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case FfiTransportIntent_Tags.Publish: { - const inner = value.inner; - let size = 4; - size += FfiConverterTypeFfiRtcTransport.allocationSize(inner.transport); - return size; - } - case FfiTransportIntent_Tags.ReceiveOnly: { - const inner = value.inner; - let size = 4; - size += FfiConverterSequenceString.allocationSize(inner.canSubscribe); - return size; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - - -// Error type: RtcError -export enum RtcError_Tags { - InvalidInput = "InvalidInput", - Http = "Http", - Driver = "Driver", - Rejected = "Rejected", - Unsupported = "Unsupported", - RateLimited = "RateLimited", - Stopped = "Stopped", - AlreadyJoined = "AlreadyJoined", - NotJoined = "NotJoined", - SlotClosed = "SlotClosed", - NoTransport = "NoTransport", - TokenRefused = "TokenRefused", - EncryptionSetup = "EncryptionSetup" -} -/** - * Errors across the FFI, both directions. A foreign driver maps its - * homeserver errors onto these: `Rejected` = 403 `M_FORBIDDEN`, - * `Unsupported` = 404 `M_UNRECOGNIZED` — both read as "this homeserver will - * never do delayed events" by the own-membership machine. - */ -export const RtcError = (() => { - - type InvalidInput__interface = { - tag: RtcError_Tags.InvalidInput; - inner: -Readonly< -[string -]> - }; - class InvalidInput_ extends UniffiError implements InvalidInput__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.InvalidInput; - readonly inner: -Readonly< -[string -]>; - constructor(v0: string) { - super("RtcError", "InvalidInput"); - - this.inner = Object.freeze([v0]); - } - static new(v0: string): InvalidInput_ { - return new InvalidInput_(v0); - } - - static instanceOf(obj: any): obj is InvalidInput_ { - return obj.tag === RtcError_Tags.InvalidInput; - } - static hasInner(obj: any): obj is InvalidInput_ { - return InvalidInput_.instanceOf(obj); - } - - static getInner(obj: InvalidInput_): -Readonly< -[string -]> { - return obj.inner; - } - - } - - type Http__interface = { - tag: RtcError_Tags.Http; - inner: -Readonly< -[string -]> - }; - /** - * A homeserver HTTP failure — transient as far as this crate knows. - */ - class Http_ extends UniffiError implements Http__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.Http; - readonly inner: -Readonly< -[string -]>; - constructor(v0: string) { - super("RtcError", "Http"); - - this.inner = Object.freeze([v0]); - } - static new(v0: string): Http_ { - return new Http_(v0); - } - - static instanceOf(obj: any): obj is Http_ { - return obj.tag === RtcError_Tags.Http; - } - static hasInner(obj: any): obj is Http_ { - return Http_.instanceOf(obj); - } - - static getInner(obj: Http_): -Readonly< -[string -]> { - return obj.inner; - } - - } - - type Driver__interface = { - tag: RtcError_Tags.Driver; - inner: -Readonly< -[string -]> - }; - /** - * Anything the driver could not classify. - */ - class Driver_ extends UniffiError implements Driver__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.Driver; - readonly inner: -Readonly< -[string -]>; - constructor(v0: string) { - super("RtcError", "Driver"); - - this.inner = Object.freeze([v0]); - } - static new(v0: string): Driver_ { - return new Driver_(v0); - } - - static instanceOf(obj: any): obj is Driver_ { - return obj.tag === RtcError_Tags.Driver; - } - static hasInner(obj: any): obj is Driver_ { - return Driver_.instanceOf(obj); - } - - static getInner(obj: Driver_): -Readonly< -[string -]> { - return obj.inner; - } - - } - - type Rejected__interface = { - tag: RtcError_Tags.Rejected; - inner: -Readonly< -[string -]> - }; - class Rejected_ extends UniffiError implements Rejected__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.Rejected; - readonly inner: -Readonly< -[string -]>; - constructor(v0: string) { - super("RtcError", "Rejected"); - - this.inner = Object.freeze([v0]); - } - static new(v0: string): Rejected_ { - return new Rejected_(v0); - } - - static instanceOf(obj: any): obj is Rejected_ { - return obj.tag === RtcError_Tags.Rejected; - } - static hasInner(obj: any): obj is Rejected_ { - return Rejected_.instanceOf(obj); - } - - static getInner(obj: Rejected_): -Readonly< -[string -]> { - return obj.inner; - } - - } - - type Unsupported__interface = { - tag: RtcError_Tags.Unsupported; - inner: -Readonly< -[string -]> - }; - class Unsupported_ extends UniffiError implements Unsupported__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.Unsupported; - readonly inner: -Readonly< -[string -]>; - constructor(v0: string) { - super("RtcError", "Unsupported"); - - this.inner = Object.freeze([v0]); - } - static new(v0: string): Unsupported_ { - return new Unsupported_(v0); - } - - static instanceOf(obj: any): obj is Unsupported_ { - return obj.tag === RtcError_Tags.Unsupported; - } - static hasInner(obj: any): obj is Unsupported_ { - return Unsupported_.instanceOf(obj); - } - - static getInner(obj: Unsupported_): -Readonly< -[string -]> { - return obj.inner; - } - - } - - type RateLimited__interface = { - tag: RtcError_Tags.RateLimited; - inner: -Readonly<{retryAfterMs?: bigint}> - }; - /** - * `M_LIMIT_EXCEEDED`: back off for `retry_after_ms` before retrying. - */ - class RateLimited_ extends UniffiError implements RateLimited__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.RateLimited; - readonly inner: -Readonly<{retryAfterMs?: bigint}>; - constructor( -inner: {retryAfterMs?: bigint }) { - super("RtcError", "RateLimited"); - - this.inner = Object.freeze(inner); - } - static new( -inner: {retryAfterMs?: bigint }): RateLimited_ { - return new RateLimited_(inner); - } - - static instanceOf(obj: any): obj is RateLimited_ { - return obj.tag === RtcError_Tags.RateLimited; - } - static hasInner(obj: any): obj is RateLimited_ { - return RateLimited_.instanceOf(obj); - } - - static getInner(obj: RateLimited_): -Readonly<{retryAfterMs?: bigint}> { - return obj.inner; - } - - } - - type Stopped__interface = { - tag: RtcError_Tags.Stopped - }; - /** - * The manager behind the call has stopped; build a new one. - */ - class Stopped_ extends UniffiError implements Stopped__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.Stopped; - constructor() { - super("RtcError", "Stopped"); - } - - static new(): Stopped_ { - return new Stopped_(); - } - - static instanceOf(obj: any): obj is Stopped_ { - return obj.tag === RtcError_Tags.Stopped; - } - static hasInner(obj: any): obj is Stopped_ { - return false; - } - - } - - type AlreadyJoined__interface = { - tag: RtcError_Tags.AlreadyJoined - }; - class AlreadyJoined_ extends UniffiError implements AlreadyJoined__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.AlreadyJoined; - constructor() { - super("RtcError", "AlreadyJoined"); - } - - static new(): AlreadyJoined_ { - return new AlreadyJoined_(); - } - - static instanceOf(obj: any): obj is AlreadyJoined_ { - return obj.tag === RtcError_Tags.AlreadyJoined; - } - static hasInner(obj: any): obj is AlreadyJoined_ { - return false; - } - - } - - type NotJoined__interface = { - tag: RtcError_Tags.NotJoined - }; - class NotJoined_ extends UniffiError implements NotJoined__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.NotJoined; - constructor() { - super("RtcError", "NotJoined"); - } - - static new(): NotJoined_ { - return new NotJoined_(); - } - - static instanceOf(obj: any): obj is NotJoined_ { - return obj.tag === RtcError_Tags.NotJoined; - } - static hasInner(obj: any): obj is NotJoined_ { - return false; - } - - } - - type SlotClosed__interface = { - tag: RtcError_Tags.SlotClosed - }; - class SlotClosed_ extends UniffiError implements SlotClosed__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.SlotClosed; - constructor() { - super("RtcError", "SlotClosed"); - } - - static new(): SlotClosed_ { - return new SlotClosed_(); - } - - static instanceOf(obj: any): obj is SlotClosed_ { - return obj.tag === RtcError_Tags.SlotClosed; - } - static hasInner(obj: any): obj is SlotClosed_ { - return false; - } - - } - - type NoTransport__interface = { - tag: RtcError_Tags.NoTransport; - inner: -Readonly< -[string -]> - }; - /** - * The homeserver advertises no usable RTC transport — a configuration - * problem; retrying will not help. - */ - class NoTransport_ extends UniffiError implements NoTransport__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.NoTransport; - readonly inner: -Readonly< -[string -]>; - constructor(v0: string) { - super("RtcError", "NoTransport"); - - this.inner = Object.freeze([v0]); - } - static new(v0: string): NoTransport_ { - return new NoTransport_(v0); - } - - static instanceOf(obj: any): obj is NoTransport_ { - return obj.tag === RtcError_Tags.NoTransport; - } - static hasInner(obj: any): obj is NoTransport_ { - return NoTransport_.instanceOf(obj); - } - - static getInner(obj: NoTransport_): -Readonly< -[string -]> { - return obj.inner; - } - - } - - type TokenRefused__interface = { - tag: RtcError_Tags.TokenRefused; - inner: -Readonly< -[string -]> - }; - /** - * A transport exists but its token could not be minted — auth or - * network; retrying may help. - */ - class TokenRefused_ extends UniffiError implements TokenRefused__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.TokenRefused; - readonly inner: -Readonly< -[string -]>; - constructor(v0: string) { - super("RtcError", "TokenRefused"); - - this.inner = Object.freeze([v0]); - } - static new(v0: string): TokenRefused_ { - return new TokenRefused_(v0); - } - - static instanceOf(obj: any): obj is TokenRefused_ { - return obj.tag === RtcError_Tags.TokenRefused; - } - static hasInner(obj: any): obj is TokenRefused_ { - return TokenRefused_.instanceOf(obj); - } - - static getInner(obj: TokenRefused_): -Readonly< -[string -]> { - return obj.inner; - } - - } - - type EncryptionSetup__interface = { - tag: RtcError_Tags.EncryptionSetup; - inner: -Readonly< -[string -]> - }; - /** - * A crate precondition, not a caller mistake. - */ - class EncryptionSetup_ extends UniffiError implements EncryptionSetup__interface { - /** - * @private - * This field is private and should not be used, use `tag` instead. - */ - readonly [uniffiTypeNameSymbol] = "RtcError"; - readonly tag = RtcError_Tags.EncryptionSetup; - readonly inner: -Readonly< -[string -]>; - constructor(v0: string) { - super("RtcError", "EncryptionSetup"); - - this.inner = Object.freeze([v0]); - } - static new(v0: string): EncryptionSetup_ { - return new EncryptionSetup_(v0); - } - - static instanceOf(obj: any): obj is EncryptionSetup_ { - return obj.tag === RtcError_Tags.EncryptionSetup; - } - static hasInner(obj: any): obj is EncryptionSetup_ { - return EncryptionSetup_.instanceOf(obj); - } - - static getInner(obj: EncryptionSetup_): -Readonly< -[string -]> { - return obj.inner; - } - - } - - function instanceOf(obj: any): obj is RtcError { - return obj[uniffiTypeNameSymbol] === "RtcError"; - } - - return Object.freeze({ - instanceOf, - InvalidInput: InvalidInput_, - Http: Http_, - Driver: Driver_, - Rejected: Rejected_, - Unsupported: Unsupported_, - RateLimited: RateLimited_, - Stopped: Stopped_, - AlreadyJoined: AlreadyJoined_, - NotJoined: NotJoined_, - SlotClosed: SlotClosed_, - NoTransport: NoTransport_, - TokenRefused: TokenRefused_, - EncryptionSetup: EncryptionSetup_ - }); - -})(); -/** - * Errors across the FFI, both directions. A foreign driver maps its - * homeserver errors onto these: `Rejected` = 403 `M_FORBIDDEN`, - * `Unsupported` = 404 `M_UNRECOGNIZED` — both read as "this homeserver will - * never do delayed events" by the own-membership machine. - */ -export type RtcError = InstanceType< - typeof RtcError['InvalidInput' | 'Http' | 'Driver' | 'Rejected' | 'Unsupported' | 'RateLimited' | 'Stopped' | 'AlreadyJoined' | 'NotJoined' | 'SlotClosed' | 'NoTransport' | 'TokenRefused' | 'EncryptionSetup'] ->; - -// FfiConverter for enum RtcError -const FfiConverterTypeRtcError = (() => { - type TypeName = RtcError; - class FFIConverter extends AbstractFfiConverterByteArray { - readFromCursor(c: Cursor): TypeName { - switch (c.readI32()) { - case 1: return new RtcError.InvalidInput(FfiConverterString.readFromCursor(c)); - case 2: return new RtcError.Http(FfiConverterString.readFromCursor(c)); - case 3: return new RtcError.Driver(FfiConverterString.readFromCursor(c)); - case 4: return new RtcError.Rejected(FfiConverterString.readFromCursor(c)); - case 5: return new RtcError.Unsupported(FfiConverterString.readFromCursor(c)); - case 6: return new RtcError.RateLimited({retryAfterMs: FfiConverterOptionalUInt64.readFromCursor(c) }); - case 7: return new RtcError.Stopped(); - case 8: return new RtcError.AlreadyJoined(); - case 9: return new RtcError.NotJoined(); - case 10: return new RtcError.SlotClosed(); - case 11: return new RtcError.NoTransport(FfiConverterString.readFromCursor(c)); - case 12: return new RtcError.TokenRefused(FfiConverterString.readFromCursor(c)); - case 13: return new RtcError.EncryptionSetup(FfiConverterString.readFromCursor(c)); - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - writeIntoCursor(value: TypeName, c: Cursor): void { - switch (value.tag) { - case RtcError_Tags.InvalidInput: { - c.writeI32(1); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner[0], c); - return; - } - case RtcError_Tags.Http: { - c.writeI32(2); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner[0], c); - return; - } - case RtcError_Tags.Driver: { - c.writeI32(3); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner[0], c); - return; - } - case RtcError_Tags.Rejected: { - c.writeI32(4); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner[0], c); - return; - } - case RtcError_Tags.Unsupported: { - c.writeI32(5); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner[0], c); - return; - } - case RtcError_Tags.RateLimited: { - c.writeI32(6); - const inner = value.inner; - FfiConverterOptionalUInt64.writeIntoCursor(inner.retryAfterMs, c); - return; - } - case RtcError_Tags.Stopped: { - c.writeI32(7); - return; - } - case RtcError_Tags.AlreadyJoined: { - c.writeI32(8); - return; - } - case RtcError_Tags.NotJoined: { - c.writeI32(9); - return; - } - case RtcError_Tags.SlotClosed: { - c.writeI32(10); - return; - } - case RtcError_Tags.NoTransport: { - c.writeI32(11); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner[0], c); - return; - } - case RtcError_Tags.TokenRefused: { - c.writeI32(12); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner[0], c); - return; - } - case RtcError_Tags.EncryptionSetup: { - c.writeI32(13); - const inner = value.inner; - FfiConverterString.writeIntoCursor(inner[0], c); - return; - } - default: - // Throwing from here means that RtcError_Tags hasn't matched an ordinal. - throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - allocationSize(value: TypeName): number { - switch (value.tag) { - case RtcError_Tags.InvalidInput: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner[0]); - return size; - } - case RtcError_Tags.Http: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner[0]); - return size; - } - case RtcError_Tags.Driver: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner[0]); - return size; - } - case RtcError_Tags.Rejected: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner[0]); - return size; - } - case RtcError_Tags.Unsupported: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner[0]); - return size; - } - case RtcError_Tags.RateLimited: { - const inner = value.inner; - let size = 4; - size += FfiConverterOptionalUInt64.allocationSize(inner.retryAfterMs); - return size; - } - case RtcError_Tags.Stopped: { - return 4; - } - case RtcError_Tags.AlreadyJoined: { - return 4; - } - case RtcError_Tags.NotJoined: { - return 4; - } - case RtcError_Tags.SlotClosed: { - return 4; - } - case RtcError_Tags.NoTransport: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner[0]); - return size; - } - case RtcError_Tags.TokenRefused: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner[0]); - return size; - } - case RtcError_Tags.EncryptionSetup: { - const inner = value.inner; - let size = 4; - size += FfiConverterString.allocationSize(inner[0]); - return size; - } - default: throw new UniffiInternalError.UnexpectedEnumCase(); - } - } - } - return new FFIConverter(); -})(); - -export interface ConnectionsListener { - - onConnectionsChange(connections: Array): void; -} - - -export class ConnectionsListenerImpl extends UniffiAbstractObject implements ConnectionsListener { - - readonly [uniffiTypeNameSymbol] = "ConnectionsListenerImpl"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeConnectionsListenerImplObjectFactory.bless(pointer); -} - - - - - onConnectionsChange(connections: Array): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_connectionslistener_on_connections_change( - uniffiTypeConnectionsListenerImplObjectFactory.clonePointer(this), - FfiConverterSequenceTypeFfiConnectionWithMembers.lower(connections, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeConnectionsListenerImplObjectFactory.pointer(this); - uniffiTypeConnectionsListenerImplObjectFactory.freePointer(pointer); - uniffiTypeConnectionsListenerImplObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is ConnectionsListenerImpl { - return uniffiTypeConnectionsListenerImplObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeConnectionsListenerImplObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeConnectionsListenerImplObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): ConnectionsListener { - const instance = Object.create(ConnectionsListenerImpl.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "ConnectionsListenerImpl"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: ConnectionsListener): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: ConnectionsListener): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_connectionslistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_connectionslistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is ConnectionsListener { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "ConnectionsListenerImpl"; - }, -}})(); -const FfiConverterTypeConnectionsListener = new FfiConverterObjectWithCallbacks(uniffiTypeConnectionsListenerImplObjectFactory); - -// Add a vtable for the callbacks that go in ConnectionsListener. - -// Put the implementation in a struct so we don't pollute the top-level namespace -const uniffiCallbackInterfaceConnectionsListener: { vtable: any; register: () => void; } = { - // Create the VTable using a series of closures. - // ts automatically converts these into C callback functions. - vtable: { - on_connections_change: ( - uniffiHandle: bigint, - connections: Uint8Array,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeConnectionsListener.lift(uniffiHandle); - return jsCallback.onConnectionsChange( - FfiConverterSequenceTypeFfiConnectionWithMembers.lift(connections) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - uniffi_free: (uniffiHandle: UniffiHandle): void => { - // this will throw a stale handle error if the handle isn't found. - FfiConverterTypeConnectionsListener.drop(uniffiHandle); - }, - uniffi_clone: (uniffiHandle: UniffiHandle): UniffiHandle => { - return FfiConverterTypeConnectionsListener.clone(uniffiHandle); - } - }, - register: () => {nativeModule().ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_connectionslistener( - uniffiCallbackInterfaceConnectionsListener.vtable - ); - }, -}; - -/** - * One end of the driver's connectivity stream: the host emits the new - * verdict whenever its homeserver connection comes or goes (a syncing - * client: sync running or not). `false` from `emit` means no consumer is - * left — unhook the handler. - */ -export interface ConnectivitySinkLike { - - emit(connected: boolean): boolean; -} -/** - * @deprecated Use `ConnectivitySinkLike` instead. - */ -export type ConnectivitySinkInterface = ConnectivitySinkLike; - - -/** - * One end of the driver's connectivity stream: the host emits the new - * verdict whenever its homeserver connection comes or goes (a syncing - * client: sync running or not). `false` from `emit` means no consumer is - * left — unhook the handler. - */ -export class ConnectivitySink extends UniffiAbstractObject implements ConnectivitySinkLike { - - readonly [uniffiTypeNameSymbol] = "ConnectivitySink"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeConnectivitySinkObjectFactory.bless(pointer); -} - - - - - emit(connected: boolean): boolean { - return FfiConverterBool.lift(uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_connectivitysink_emit( - uniffiTypeConnectivitySinkObjectFactory.clonePointer(this), - FfiConverterBool.lower(connected, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - )); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeConnectivitySinkObjectFactory.pointer(this); - uniffiTypeConnectivitySinkObjectFactory.freePointer(pointer); - uniffiTypeConnectivitySinkObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is ConnectivitySink { - return uniffiTypeConnectivitySinkObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeConnectivitySinkObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeConnectivitySinkObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): ConnectivitySinkLike { - const instance = Object.create(ConnectivitySink.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "ConnectivitySink"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: ConnectivitySinkLike): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: ConnectivitySinkLike): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_connectivitysink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_connectivitysink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is ConnectivitySinkLike { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "ConnectivitySink"; - }, -}})(); -const FfiConverterTypeConnectivitySink = new FfiConverterObject(uniffiTypeConnectivitySinkObjectFactory); - -/** - * The FFI driver object — the one place a foreign [`MatrixDriverCallback`] - * becomes a [`crate::driver::MatrixDriver`]. Room-scoped and room-lived, - * like matrix-rust-sdk's widget `MatrixDriver`: construct it once per room - * and share it across managers (one room can hold several slots). - * - * It is both the FFI handle *and* the adapter: the trait impls below - * translate JSON-string payloads and FFI records into the crate's driver - * types. The foreign `subscribe_*` handshake happens in [`Self::new`], each - * sink feeding one inbound channel; the Rust trait's `subscribe_*` methods - * (fresh receiver per call) are served by fanning those channels out - * internally — so any number of managers consume a foreign driver exactly - * like a native one. - */ -export interface FfiMatrixDriverLike { - -} -/** - * @deprecated Use `FfiMatrixDriverLike` instead. - */ -export type FfiMatrixDriverInterface = FfiMatrixDriverLike; - - -/** - * The FFI driver object — the one place a foreign [`MatrixDriverCallback`] - * becomes a [`crate::driver::MatrixDriver`]. Room-scoped and room-lived, - * like matrix-rust-sdk's widget `MatrixDriver`: construct it once per room - * and share it across managers (one room can hold several slots). - * - * It is both the FFI handle *and* the adapter: the trait impls below - * translate JSON-string payloads and FFI records into the crate's driver - * types. The foreign `subscribe_*` handshake happens in [`Self::new`], each - * sink feeding one inbound channel; the Rust trait's `subscribe_*` methods - * (fresh receiver per call) are served by fanning those channels out - * internally — so any number of managers consume a foreign driver exactly - * like a native one. - */ -export class FfiMatrixDriver extends UniffiAbstractObject implements FfiMatrixDriverLike { - - readonly [uniffiTypeNameSymbol] = "FfiMatrixDriver"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; -/** - * Performs the `subscribe_*` handshake with the foreign driver - * (synchronously, exactly once). - */ - constructor(callback: MatrixDriverCallback) { - super(); - const pointer = - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_constructor_ffimatrixdriver_new( - FfiConverterTypeMatrixDriverCallback.lower(callback, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeFfiMatrixDriverObjectFactory.bless(pointer); - } - - - - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeFfiMatrixDriverObjectFactory.pointer(this); - uniffiTypeFfiMatrixDriverObjectFactory.freePointer(pointer); - uniffiTypeFfiMatrixDriverObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is FfiMatrixDriver { - return uniffiTypeFfiMatrixDriverObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeFfiMatrixDriverObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeFfiMatrixDriverObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): FfiMatrixDriverLike { - const instance = Object.create(FfiMatrixDriver.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "FfiMatrixDriver"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: FfiMatrixDriverLike): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: FfiMatrixDriverLike): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_ffimatrixdriver(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_ffimatrixdriver(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is FfiMatrixDriverLike { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "FfiMatrixDriver"; - }, -}})(); -const FfiConverterTypeFfiMatrixDriver = new FfiConverterObject(uniffiTypeFfiMatrixDriverObjectFactory); - -export interface KeyMapListener { - -/** - * The full map plus the one key that changed — route `change` to the LK - * room(s) of that member. - */ - onKeyMapChange(keyMap: Array, change: FfiMediaKey): void; -} - - -export class KeyMapListenerImpl extends UniffiAbstractObject implements KeyMapListener { - - readonly [uniffiTypeNameSymbol] = "KeyMapListenerImpl"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeKeyMapListenerImplObjectFactory.bless(pointer); -} - - - - -/** - * The full map plus the one key that changed — route `change` to the LK - * room(s) of that member. - */ - onKeyMapChange(keyMap: Array, change: FfiMediaKey): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_keymaplistener_on_key_map_change( - uniffiTypeKeyMapListenerImplObjectFactory.clonePointer(this), - FfiConverterSequenceTypeFfiMediaKey.lower(keyMap, nativeModule().rustbuffer_alloc), - FfiConverterTypeFfiMediaKey.lower(change, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeKeyMapListenerImplObjectFactory.pointer(this); - uniffiTypeKeyMapListenerImplObjectFactory.freePointer(pointer); - uniffiTypeKeyMapListenerImplObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is KeyMapListenerImpl { - return uniffiTypeKeyMapListenerImplObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeKeyMapListenerImplObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeKeyMapListenerImplObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): KeyMapListener { - const instance = Object.create(KeyMapListenerImpl.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "KeyMapListenerImpl"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: KeyMapListener): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: KeyMapListener): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_keymaplistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_keymaplistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is KeyMapListener { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "KeyMapListenerImpl"; - }, -}})(); -const FfiConverterTypeKeyMapListener = new FfiConverterObjectWithCallbacks(uniffiTypeKeyMapListenerImplObjectFactory); - -// Add a vtable for the callbacks that go in KeyMapListener. - -// Put the implementation in a struct so we don't pollute the top-level namespace -const uniffiCallbackInterfaceKeyMapListener: { vtable: any; register: () => void; } = { - // Create the VTable using a series of closures. - // ts automatically converts these into C callback functions. - vtable: { - on_key_map_change: ( - uniffiHandle: bigint, - keyMap: Uint8Array, - change: Uint8Array,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeKeyMapListener.lift(uniffiHandle); - return jsCallback.onKeyMapChange( - FfiConverterSequenceTypeFfiMediaKey.lift(keyMap), - FfiConverterTypeFfiMediaKey.lift(change) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - uniffi_free: (uniffiHandle: UniffiHandle): void => { - // this will throw a stale handle error if the handle isn't found. - FfiConverterTypeKeyMapListener.drop(uniffiHandle); - }, - uniffi_clone: (uniffiHandle: UniffiHandle): UniffiHandle => { - return FfiConverterTypeKeyMapListener.clone(uniffiHandle); - } - }, - register: () => {nativeModule().ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_keymaplistener( - uniffiCallbackInterfaceKeyMapListener.vtable - ); - }, -}; - -export interface KeyRejectedListener { - -/** - * An inbound media key was discarded: `member_id` names whose, `reason` - * says why. - * - * **Secondary** to `FfiMembership::media_key.rejection` and - * `FfiImpairment::MediaKeyRejected`, which a UI attaching late still - * finds; this is for logging and telemetry. - */ - onKeyRejected(memberId: string, reason: FfiKeyRejection): void; -} - - -export class KeyRejectedListenerImpl extends UniffiAbstractObject implements KeyRejectedListener { - - readonly [uniffiTypeNameSymbol] = "KeyRejectedListenerImpl"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeKeyRejectedListenerImplObjectFactory.bless(pointer); -} - - - - -/** - * An inbound media key was discarded: `member_id` names whose, `reason` - * says why. - * - * **Secondary** to `FfiMembership::media_key.rejection` and - * `FfiImpairment::MediaKeyRejected`, which a UI attaching late still - * finds; this is for logging and telemetry. - */ - onKeyRejected(memberId: string, reason: FfiKeyRejection): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_keyrejectedlistener_on_key_rejected( - uniffiTypeKeyRejectedListenerImplObjectFactory.clonePointer(this), - FfiConverterString.lower(memberId, nativeModule().rustbuffer_alloc), - FfiConverterTypeFfiKeyRejection.lower(reason, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeKeyRejectedListenerImplObjectFactory.pointer(this); - uniffiTypeKeyRejectedListenerImplObjectFactory.freePointer(pointer); - uniffiTypeKeyRejectedListenerImplObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is KeyRejectedListenerImpl { - return uniffiTypeKeyRejectedListenerImplObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeKeyRejectedListenerImplObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeKeyRejectedListenerImplObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): KeyRejectedListener { - const instance = Object.create(KeyRejectedListenerImpl.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "KeyRejectedListenerImpl"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: KeyRejectedListener): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: KeyRejectedListener): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_keyrejectedlistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_keyrejectedlistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is KeyRejectedListener { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "KeyRejectedListenerImpl"; - }, -}})(); -const FfiConverterTypeKeyRejectedListener = new FfiConverterObjectWithCallbacks(uniffiTypeKeyRejectedListenerImplObjectFactory); - -// Add a vtable for the callbacks that go in KeyRejectedListener. - -// Put the implementation in a struct so we don't pollute the top-level namespace -const uniffiCallbackInterfaceKeyRejectedListener: { vtable: any; register: () => void; } = { - // Create the VTable using a series of closures. - // ts automatically converts these into C callback functions. - vtable: { - on_key_rejected: ( - uniffiHandle: bigint, - memberId: Uint8Array, - reason: Uint8Array,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeKeyRejectedListener.lift(uniffiHandle); - return jsCallback.onKeyRejected( - FfiConverterString.lift(memberId), - FfiConverterTypeFfiKeyRejection.lift(reason) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - uniffi_free: (uniffiHandle: UniffiHandle): void => { - // this will throw a stale handle error if the handle isn't found. - FfiConverterTypeKeyRejectedListener.drop(uniffiHandle); - }, - uniffi_clone: (uniffiHandle: UniffiHandle): UniffiHandle => { - return FfiConverterTypeKeyRejectedListener.clone(uniffiHandle); - } - }, - register: () => {nativeModule().ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_keyrejectedlistener( - uniffiCallbackInterfaceKeyRejectedListener.vtable - ); - }, -}; - -export interface MembershipsListener { - -/** - * One tile per membership; use the connections output to acquire each - * tile's media (`membership.connections` -> LK room, - * `membership.transport_identity` -> participant). - */ - onMembershipsChange(memberships: Array): void; -} - - -export class MembershipsListenerImpl extends UniffiAbstractObject implements MembershipsListener { - - readonly [uniffiTypeNameSymbol] = "MembershipsListenerImpl"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeMembershipsListenerImplObjectFactory.bless(pointer); -} - - - - -/** - * One tile per membership; use the connections output to acquire each - * tile's media (`membership.connections` -> LK room, - * `membership.transport_identity` -> participant). - */ - onMembershipsChange(memberships: Array): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_membershipslistener_on_memberships_change( - uniffiTypeMembershipsListenerImplObjectFactory.clonePointer(this), - FfiConverterSequenceTypeFfiMembership.lower(memberships, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeMembershipsListenerImplObjectFactory.pointer(this); - uniffiTypeMembershipsListenerImplObjectFactory.freePointer(pointer); - uniffiTypeMembershipsListenerImplObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is MembershipsListenerImpl { - return uniffiTypeMembershipsListenerImplObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeMembershipsListenerImplObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeMembershipsListenerImplObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): MembershipsListener { - const instance = Object.create(MembershipsListenerImpl.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "MembershipsListenerImpl"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: MembershipsListener): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: MembershipsListener): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_membershipslistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_membershipslistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is MembershipsListener { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "MembershipsListenerImpl"; - }, -}})(); -const FfiConverterTypeMembershipsListener = new FfiConverterObjectWithCallbacks(uniffiTypeMembershipsListenerImplObjectFactory); - -// Add a vtable for the callbacks that go in MembershipsListener. - -// Put the implementation in a struct so we don't pollute the top-level namespace -const uniffiCallbackInterfaceMembershipsListener: { vtable: any; register: () => void; } = { - // Create the VTable using a series of closures. - // ts automatically converts these into C callback functions. - vtable: { - on_memberships_change: ( - uniffiHandle: bigint, - memberships: Uint8Array,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeMembershipsListener.lift(uniffiHandle); - return jsCallback.onMembershipsChange( - FfiConverterSequenceTypeFfiMembership.lift(memberships) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - uniffi_free: (uniffiHandle: UniffiHandle): void => { - // this will throw a stale handle error if the handle isn't found. - FfiConverterTypeMembershipsListener.drop(uniffiHandle); - }, - uniffi_clone: (uniffiHandle: UniffiHandle): UniffiHandle => { - return FfiConverterTypeMembershipsListener.clone(uniffiHandle); - } - }, - register: () => {nativeModule().ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_membershipslistener( - uniffiCallbackInterfaceMembershipsListener.vtable - ); - }, -}; - -export interface SessionListener { - -/** - * The room's view of the session changed (seed done, slot opened or - * closed, roster moved): what `session()` answers now. - */ - onSessionChange(session: FfiSessionSnapshot): void; -} - - -export class SessionListenerImpl extends UniffiAbstractObject implements SessionListener { - - readonly [uniffiTypeNameSymbol] = "SessionListenerImpl"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeSessionListenerImplObjectFactory.bless(pointer); -} - - - - -/** - * The room's view of the session changed (seed done, slot opened or - * closed, roster moved): what `session()` answers now. - */ - onSessionChange(session: FfiSessionSnapshot): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_sessionlistener_on_session_change( - uniffiTypeSessionListenerImplObjectFactory.clonePointer(this), - FfiConverterTypeFfiSessionSnapshot.lower(session, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeSessionListenerImplObjectFactory.pointer(this); - uniffiTypeSessionListenerImplObjectFactory.freePointer(pointer); - uniffiTypeSessionListenerImplObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is SessionListenerImpl { - return uniffiTypeSessionListenerImplObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeSessionListenerImplObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeSessionListenerImplObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): SessionListener { - const instance = Object.create(SessionListenerImpl.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "SessionListenerImpl"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: SessionListener): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: SessionListener): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_sessionlistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_sessionlistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is SessionListener { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "SessionListenerImpl"; - }, -}})(); -const FfiConverterTypeSessionListener = new FfiConverterObjectWithCallbacks(uniffiTypeSessionListenerImplObjectFactory); - -// Add a vtable for the callbacks that go in SessionListener. - -// Put the implementation in a struct so we don't pollute the top-level namespace -const uniffiCallbackInterfaceSessionListener: { vtable: any; register: () => void; } = { - // Create the VTable using a series of closures. - // ts automatically converts these into C callback functions. - vtable: { - on_session_change: ( - uniffiHandle: bigint, - session: Uint8Array,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeSessionListener.lift(uniffiHandle); - return jsCallback.onSessionChange( - FfiConverterTypeFfiSessionSnapshot.lift(session) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - uniffi_free: (uniffiHandle: UniffiHandle): void => { - // this will throw a stale handle error if the handle isn't found. - FfiConverterTypeSessionListener.drop(uniffiHandle); - }, - uniffi_clone: (uniffiHandle: UniffiHandle): UniffiHandle => { - return FfiConverterTypeSessionListener.clone(uniffiHandle); - } - }, - register: () => {nativeModule().ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_sessionlistener( - uniffiCallbackInterfaceSessionListener.vtable - ); - }, -}; - -export interface StatusListener { - - onStatusChange(status: FfiStatus): void; -} - - -export class StatusListenerImpl extends UniffiAbstractObject implements StatusListener { - - readonly [uniffiTypeNameSymbol] = "StatusListenerImpl"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeStatusListenerImplObjectFactory.bless(pointer); -} - - - - - onStatusChange(status: FfiStatus): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_statuslistener_on_status_change( - uniffiTypeStatusListenerImplObjectFactory.clonePointer(this), - FfiConverterTypeFfiStatus.lower(status, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeStatusListenerImplObjectFactory.pointer(this); - uniffiTypeStatusListenerImplObjectFactory.freePointer(pointer); - uniffiTypeStatusListenerImplObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is StatusListenerImpl { - return uniffiTypeStatusListenerImplObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeStatusListenerImplObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeStatusListenerImplObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): StatusListener { - const instance = Object.create(StatusListenerImpl.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "StatusListenerImpl"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: StatusListener): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: StatusListener): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_statuslistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_statuslistener(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is StatusListener { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "StatusListenerImpl"; - }, -}})(); -const FfiConverterTypeStatusListener = new FfiConverterObjectWithCallbacks(uniffiTypeStatusListenerImplObjectFactory); - -// Add a vtable for the callbacks that go in StatusListener. - -// Put the implementation in a struct so we don't pollute the top-level namespace -const uniffiCallbackInterfaceStatusListener: { vtable: any; register: () => void; } = { - // Create the VTable using a series of closures. - // ts automatically converts these into C callback functions. - vtable: { - on_status_change: ( - uniffiHandle: bigint, - status: Uint8Array,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeStatusListener.lift(uniffiHandle); - return jsCallback.onStatusChange( - FfiConverterTypeFfiStatus.lift(status) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - uniffi_free: (uniffiHandle: UniffiHandle): void => { - // this will throw a stale handle error if the handle isn't found. - FfiConverterTypeStatusListener.drop(uniffiHandle); - }, - uniffi_clone: (uniffiHandle: UniffiHandle): UniffiHandle => { - return FfiConverterTypeStatusListener.clone(uniffiHandle); - } - }, - register: () => {nativeModule().ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_statuslistener( - uniffiCallbackInterfaceStatusListener.vtable - ); - }, -}; - -/** - * FFI wrapper around [`ParticipationManager`]. - */ -export interface FfiParticipationManagerLike { - - closeSlot(asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; -/** - * Wanted connections the host cannot currently use, with the members - * whose media is affected. Empty is the healthy case. - */ - connectionProblems(): Array; - connections(): Array; -/** - * Diagnostics JSON: an unversioned dump for bug reports, **not** a UI - * contract. Everything a UI needs is typed on `status()`, - * `session()`, `memberships()` and `connection_problems()`. - */ - debugSnapshot(): string; -/** - * Whether the driver currently reports the homeserver reachable. Inside a - * participation the same fact is `FfiImpairment::HomeserverUnreachable` - * in the status; this covers the lobby and the post-call screen. - */ - isHomeserverConnected(): boolean; - join(intent: FfiTransportIntent, params: FfiJoinParams, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; - keyMap(): Array; -/** - * `code` defaults to MSC4143's plain `leave`. - */ - leave(code: string | undefined, reason: string | undefined, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; -/** - * The session's joined projection plus left members still holding our - * keys (see [`FfiMembershipState`]). - */ - memberships(): Array; - openSlot(applicationType: string, encrypted: boolean, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; -/** - * Open this manager's slot (`m.per_member` encryption when `encrypted`). - * Our member id for this participation; `None` while not joined. - * - * Every self-referential check needs it — am I in the roster - * (`session().excluded_candidates`), which LiveKit participant is me - * (`own_membership().transport_identity`). Matching on - * `(user_id, device_id)` is not a substitute: one device may hold - * several RTC members, and a rejoin mints a fresh id. - */ - ownMemberId(): string | undefined; -/** - * Our own entry in `memberships()`, when the session projects it. - */ - ownMembership(): FfiMembership | undefined; -/** - * Our LiveKit participant identity, known from the moment `join()` - * starts (before our membership echo). `None` while not joined. - */ - ownTransportIdentity(): string | undefined; -/** - * The live session snapshot (slot open?, encrypted?, members, start - * time) — the same record `compute_sessions_from_events` returns. - */ - session(): FfiSessionSnapshot; - setConnectionsListener(listener: ConnectionsListener): void; - setKeyMapListener(listener: KeyMapListener): void; - setKeyRejectedListener(listener: KeyRejectedListener): void; - setMembershipsListener(listener: MembershipsListener): void; - setSessionListener(listener: SessionListener): void; - setStatusListener(listener: StatusListener): void; - status(): FfiStatus; -/** - * Change `application["m.call.intent"]` (e.g. `"audio"` / `"video"`) - * while joined: the membership is re-published with it. `None` removes - * the intent. Rejects with `NotJoined` outside a participation. - */ - updateApplication(intent: string | undefined, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; -} -/** - * @deprecated Use `FfiParticipationManagerLike` instead. - */ -export type FfiParticipationManagerInterface = FfiParticipationManagerLike; - - -/** - * FFI wrapper around [`ParticipationManager`]. - */ -export class FfiParticipationManager extends UniffiAbstractObject implements FfiParticipationManagerLike { - - readonly [uniffiTypeNameSymbol] = "FfiParticipationManager"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; -/** - * One manager per `(room, slot)`; `user_id`/`device_id` are who we - * publish as. Any number of managers may share one driver. - */ - constructor(roomId: string, slotId: string, userId: string, deviceId: string, driver: FfiMatrixDriverLike, config: FfiParticipationConfig) { - super(); - const pointer = - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_constructor_ffiparticipationmanager_new( - FfiConverterString.lower(roomId, nativeModule().rustbuffer_alloc), - FfiConverterString.lower(slotId, nativeModule().rustbuffer_alloc), - FfiConverterString.lower(userId, nativeModule().rustbuffer_alloc), - FfiConverterString.lower(deviceId, nativeModule().rustbuffer_alloc), - FfiConverterTypeFfiMatrixDriver.lower(driver, nativeModule().rustbuffer_alloc), - FfiConverterTypeFfiParticipationConfig.lower(config, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeFfiParticipationManagerObjectFactory.bless(pointer); - } - - - - - async closeSlot(asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_close_slot( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_void, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_void, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_void, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_void, - /*liftFunc:*/ (_v) => {}, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * Wanted connections the host cannot currently use, with the members - * whose media is affected. Empty is the healthy case. - */ - connectionProblems(): Array { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_connection_problems( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterSequenceTypeFfiConnectionProblem.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - - connections(): Array { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_connections( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterSequenceTypeFfiConnectionWithMembers.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - -/** - * Diagnostics JSON: an unversioned dump for bug reports, **not** a UI - * contract. Everything a UI needs is typed on `status()`, - * `session()`, `memberships()` and `connection_problems()`. - */ - debugSnapshot(): string { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_debug_snapshot( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterString.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - -/** - * Whether the driver currently reports the homeserver reachable. Inside a - * participation the same fact is `FfiImpairment::HomeserverUnreachable` - * in the status; this covers the lobby and the post-call screen. - */ - isHomeserverConnected(): boolean { - return FfiConverterBool.lift(uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_is_homeserver_connected( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - )); - } - - async join(intent: FfiTransportIntent, params: FfiJoinParams, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_join( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this),FfiConverterTypeFfiTransportIntent.lower(intent, nativeModule().rustbuffer_alloc),FfiConverterTypeFfiJoinParams.lower(params, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_void, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_void, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_void, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_void, - /*liftFunc:*/ (_v) => {}, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - - keyMap(): Array { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_key_map( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterSequenceTypeFfiMediaKey.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - -/** - * `code` defaults to MSC4143's plain `leave`. - */ - async leave(code: string | undefined, reason: string | undefined, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_leave( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this),FfiConverterOptionalString.lower(code, nativeModule().rustbuffer_alloc),FfiConverterOptionalString.lower(reason, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_void, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_void, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_void, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_void, - /*liftFunc:*/ (_v) => {}, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * The session's joined projection plus left members still holding our - * keys (see [`FfiMembershipState`]). - */ - memberships(): Array { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_memberships( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterSequenceTypeFfiMembership.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - - async openSlot(applicationType: string, encrypted: boolean, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_open_slot( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this),FfiConverterString.lower(applicationType, nativeModule().rustbuffer_alloc),FfiConverterBool.lower(encrypted, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_void, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_void, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_void, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_void, - /*liftFunc:*/ (_v) => {}, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * Open this manager's slot (`m.per_member` encryption when `encrypted`). - * Our member id for this participation; `None` while not joined. - * - * Every self-referential check needs it — am I in the roster - * (`session().excluded_candidates`), which LiveKit participant is me - * (`own_membership().transport_identity`). Matching on - * `(user_id, device_id)` is not a substitute: one device may hold - * several RTC members, and a rejoin mints a fresh id. - */ - ownMemberId(): string | undefined { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_own_member_id( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterOptionalString.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - -/** - * Our own entry in `memberships()`, when the session projects it. - */ - ownMembership(): FfiMembership | undefined { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_own_membership( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterOptionalTypeFfiMembership.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - -/** - * Our LiveKit participant identity, known from the moment `join()` - * starts (before our membership echo). `None` while not joined. - */ - ownTransportIdentity(): string | undefined { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_own_transport_identity( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterOptionalString.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - -/** - * The live session snapshot (slot open?, encrypted?, members, start - * time) — the same record `compute_sessions_from_events` returns. - */ - session(): FfiSessionSnapshot { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_session( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterTypeFfiSessionSnapshot.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - - setConnectionsListener(listener: ConnectionsListener): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_connections_listener( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - FfiConverterTypeConnectionsListener.lower(listener, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - setKeyMapListener(listener: KeyMapListener): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_key_map_listener( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - FfiConverterTypeKeyMapListener.lower(listener, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - setKeyRejectedListener(listener: KeyRejectedListener): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_key_rejected_listener( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - FfiConverterTypeKeyRejectedListener.lower(listener, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - setMembershipsListener(listener: MembershipsListener): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_memberships_listener( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - FfiConverterTypeMembershipsListener.lower(listener, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - setSessionListener(listener: SessionListener): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_session_listener( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - FfiConverterTypeSessionListener.lower(listener, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - setStatusListener(listener: StatusListener): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_status_listener( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - FfiConverterTypeStatusListener.lower(listener, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - status(): FfiStatus { - const __rb: Uint8Array = uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_status( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - try { - return FfiConverterTypeFfiStatus.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - } - -/** - * Change `application["m.call.intent"]` (e.g. `"audio"` / `"video"`) - * while joined: the membership is re-published with it. `None` removes - * the intent. Rejects with `NotJoined` outside a participation. - */ - async updateApplication(intent: string | undefined, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_update_application( - uniffiTypeFfiParticipationManagerObjectFactory.clonePointer(this),FfiConverterOptionalString.lower(intent, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_void, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_void, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_void, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_void, - /*liftFunc:*/ (_v) => {}, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeFfiParticipationManagerObjectFactory.pointer(this); - uniffiTypeFfiParticipationManagerObjectFactory.freePointer(pointer); - uniffiTypeFfiParticipationManagerObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is FfiParticipationManager { - return uniffiTypeFfiParticipationManagerObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeFfiParticipationManagerObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeFfiParticipationManagerObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): FfiParticipationManagerLike { - const instance = Object.create(FfiParticipationManager.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "FfiParticipationManager"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: FfiParticipationManagerLike): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: FfiParticipationManagerLike): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_ffiparticipationmanager(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_ffiparticipationmanager(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is FfiParticipationManagerLike { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "FfiParticipationManager"; - }, -}})(); -const FfiConverterTypeFfiParticipationManager = new FfiConverterObject(uniffiTypeFfiParticipationManagerObjectFactory); - -/** - * Where the crate's log lines go. Nothing is logged until a host installs - * one with [`set_log_sink`]: the crate speaks through the `log` facade and - * has no output of its own, so that its lines land in the host's log (and - * its rageshakes) rather than on a console the host does not read. - * - * `target` is the Rust module path (`matrix_rtc::own_membership::machine`), - * `message` the formatted line. Called synchronously from wherever the - * crate logs; keep it cheap and never call back into the crate from it. - */ -export interface LogSink { - - log(level: FfiLogLevel, target: string, message: string): void; -} - - -/** - * Where the crate's log lines go. Nothing is logged until a host installs - * one with [`set_log_sink`]: the crate speaks through the `log` facade and - * has no output of its own, so that its lines land in the host's log (and - * its rageshakes) rather than on a console the host does not read. - * - * `target` is the Rust module path (`matrix_rtc::own_membership::machine`), - * `message` the formatted line. Called synchronously from wherever the - * crate logs; keep it cheap and never call back into the crate from it. - */ -export class LogSinkImpl extends UniffiAbstractObject implements LogSink { - - readonly [uniffiTypeNameSymbol] = "LogSinkImpl"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeLogSinkImplObjectFactory.bless(pointer); -} - - - - - log(level: FfiLogLevel, target: string, message: string): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_logsink_log( - uniffiTypeLogSinkImplObjectFactory.clonePointer(this), - FfiConverterTypeFfiLogLevel.lower(level, nativeModule().rustbuffer_alloc), - FfiConverterString.lower(target, nativeModule().rustbuffer_alloc), - FfiConverterString.lower(message, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeLogSinkImplObjectFactory.pointer(this); - uniffiTypeLogSinkImplObjectFactory.freePointer(pointer); - uniffiTypeLogSinkImplObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is LogSinkImpl { - return uniffiTypeLogSinkImplObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeLogSinkImplObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeLogSinkImplObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): LogSink { - const instance = Object.create(LogSinkImpl.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "LogSinkImpl"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: LogSink): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: LogSink): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_logsink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_logsink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is LogSink { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "LogSinkImpl"; - }, -}})(); -const FfiConverterTypeLogSink = new FfiConverterObjectWithCallbacks(uniffiTypeLogSinkImplObjectFactory); - -// Add a vtable for the callbacks that go in LogSink. - -// Put the implementation in a struct so we don't pollute the top-level namespace -const uniffiCallbackInterfaceLogSink: { vtable: any; register: () => void; } = { - // Create the VTable using a series of closures. - // ts automatically converts these into C callback functions. - vtable: { - log: ( - uniffiHandle: bigint, - level: Uint8Array, - target: Uint8Array, - message: Uint8Array,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeLogSink.lift(uniffiHandle); - return jsCallback.log( - FfiConverterTypeFfiLogLevel.lift(level), - FfiConverterString.lift(target), - FfiConverterString.lift(message) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - uniffi_free: (uniffiHandle: UniffiHandle): void => { - // this will throw a stale handle error if the handle isn't found. - FfiConverterTypeLogSink.drop(uniffiHandle); - }, - uniffi_clone: (uniffiHandle: UniffiHandle): UniffiHandle => { - return FfiConverterTypeLogSink.clone(uniffiHandle); - } - }, - register: () => {nativeModule().ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_logsink( - uniffiCallbackInterfaceLogSink.vtable - ); - }, -}; - -/** - * One end of a driver event stream: Rust-exported objects handed to the - * foreign driver through the `subscribe_*` methods. The host calls `emit` - * from its own event handlers (e.g. matrix-js-sdk listeners); `false` means - * the Rust side dropped the stream — unhook the handler (this plays the - * role of matrix-rust-sdk's `EventHandlerDropGuard`). - */ -export interface RoomEventSinkLike { - -/** - * Any room event — sticky or state; the session dispatches on type. - * `event_json` is the full event object (see `session::dispatch`), the - * *decrypted* one for encrypted events, with `origin` carrying the - * decryption metadata. Returns `false` once no consumer is left. - */ - emit(eventJson: string, origin: FfiEventOrigin): boolean; -} -/** - * @deprecated Use `RoomEventSinkLike` instead. - */ -export type RoomEventSinkInterface = RoomEventSinkLike; - - -/** - * One end of a driver event stream: Rust-exported objects handed to the - * foreign driver through the `subscribe_*` methods. The host calls `emit` - * from its own event handlers (e.g. matrix-js-sdk listeners); `false` means - * the Rust side dropped the stream — unhook the handler (this plays the - * role of matrix-rust-sdk's `EventHandlerDropGuard`). - */ -export class RoomEventSink extends UniffiAbstractObject implements RoomEventSinkLike { - - readonly [uniffiTypeNameSymbol] = "RoomEventSink"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeRoomEventSinkObjectFactory.bless(pointer); -} - - - - -/** - * Any room event — sticky or state; the session dispatches on type. - * `event_json` is the full event object (see `session::dispatch`), the - * *decrypted* one for encrypted events, with `origin` carrying the - * decryption metadata. Returns `false` once no consumer is left. - */ - emit(eventJson: string, origin: FfiEventOrigin): boolean { - return FfiConverterBool.lift(uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_roomeventsink_emit( - uniffiTypeRoomEventSinkObjectFactory.clonePointer(this), - FfiConverterString.lower(eventJson, nativeModule().rustbuffer_alloc), - FfiConverterTypeFfiEventOrigin.lower(origin, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - )); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeRoomEventSinkObjectFactory.pointer(this); - uniffiTypeRoomEventSinkObjectFactory.freePointer(pointer); - uniffiTypeRoomEventSinkObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is RoomEventSink { - return uniffiTypeRoomEventSinkObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeRoomEventSinkObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeRoomEventSinkObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): RoomEventSinkLike { - const instance = Object.create(RoomEventSink.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "RoomEventSink"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: RoomEventSinkLike): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: RoomEventSinkLike): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_roomeventsink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_roomeventsink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is RoomEventSinkLike { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "RoomEventSink"; - }, -}})(); -const FfiConverterTypeRoomEventSink = new FfiConverterObject(uniffiTypeRoomEventSinkObjectFactory); - -export interface ToDeviceSinkLike { - -/** - * A decrypted to-device message with its origin metadata. - * `sender_cross_signed` is the MSC4153 verdict on the sending device - * (`None` = the host cannot tell, treated as not signed: media keys - * from such devices are rejected unless configured otherwise). - */ - emit(eventType: string, sender: string, contentJson: string, origin: FfiEventOrigin, senderCrossSigned: boolean | undefined): boolean; -} -/** - * @deprecated Use `ToDeviceSinkLike` instead. - */ -export type ToDeviceSinkInterface = ToDeviceSinkLike; - - -export class ToDeviceSink extends UniffiAbstractObject implements ToDeviceSinkLike { - - readonly [uniffiTypeNameSymbol] = "ToDeviceSink"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeToDeviceSinkObjectFactory.bless(pointer); -} - - - - -/** - * A decrypted to-device message with its origin metadata. - * `sender_cross_signed` is the MSC4153 verdict on the sending device - * (`None` = the host cannot tell, treated as not signed: media keys - * from such devices are rejected unless configured otherwise). - */ - emit(eventType: string, sender: string, contentJson: string, origin: FfiEventOrigin, senderCrossSigned: boolean | undefined): boolean { - return FfiConverterBool.lift(uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_todevicesink_emit( - uniffiTypeToDeviceSinkObjectFactory.clonePointer(this), - FfiConverterString.lower(eventType, nativeModule().rustbuffer_alloc), - FfiConverterString.lower(sender, nativeModule().rustbuffer_alloc), - FfiConverterString.lower(contentJson, nativeModule().rustbuffer_alloc), - FfiConverterTypeFfiEventOrigin.lower(origin, nativeModule().rustbuffer_alloc), - FfiConverterOptionalBoolean.lower(senderCrossSigned, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - )); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeToDeviceSinkObjectFactory.pointer(this); - uniffiTypeToDeviceSinkObjectFactory.freePointer(pointer); - uniffiTypeToDeviceSinkObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is ToDeviceSink { - return uniffiTypeToDeviceSinkObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeToDeviceSinkObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeToDeviceSinkObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): ToDeviceSinkLike { - const instance = Object.create(ToDeviceSink.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "ToDeviceSink"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: ToDeviceSinkLike): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: ToDeviceSinkLike): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_todevicesink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_todevicesink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is ToDeviceSinkLike { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "ToDeviceSink"; - }, -}})(); -const FfiConverterTypeToDeviceSink = new FfiConverterObject(uniffiTypeToDeviceSinkObjectFactory); - -export interface StateUpdateSinkLike { - -/** - * A batch of changed room-state events (applied atomically by the - * session: one snapshot per batch). State events are never encrypted, - * so their origin is `Cleartext`. - */ - emit(eventsJson: Array): boolean; -} -/** - * @deprecated Use `StateUpdateSinkLike` instead. - */ -export type StateUpdateSinkInterface = StateUpdateSinkLike; - - -export class StateUpdateSink extends UniffiAbstractObject implements StateUpdateSinkLike { - - readonly [uniffiTypeNameSymbol] = "StateUpdateSink"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeStateUpdateSinkObjectFactory.bless(pointer); -} - - - - -/** - * A batch of changed room-state events (applied atomically by the - * session: one snapshot per batch). State events are never encrypted, - * so their origin is `Cleartext`. - */ - emit(eventsJson: Array): boolean { - return FfiConverterBool.lift(uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_stateupdatesink_emit( - uniffiTypeStateUpdateSinkObjectFactory.clonePointer(this), - FfiConverterSequenceString.lower(eventsJson, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - )); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeStateUpdateSinkObjectFactory.pointer(this); - uniffiTypeStateUpdateSinkObjectFactory.freePointer(pointer); - uniffiTypeStateUpdateSinkObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is StateUpdateSink { - return uniffiTypeStateUpdateSinkObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeStateUpdateSinkObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeStateUpdateSinkObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): StateUpdateSinkLike { - const instance = Object.create(StateUpdateSink.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "StateUpdateSink"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: StateUpdateSinkLike): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: StateUpdateSinkLike): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_stateupdatesink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_stateupdatesink(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is StateUpdateSinkLike { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "StateUpdateSink"; - }, -}})(); -const FfiConverterTypeStateUpdateSink = new FfiConverterObject(uniffiTypeStateUpdateSinkObjectFactory); - -/** - * The host-implemented Matrix driver: the same seam as - * [`crate::driver::MatrixDriver`], flattened for FFI. matrix-rust-sdk hosts - * adapt their `MatrixDriver`; a matrix-js-sdk host implements this directly. - * - * Inbound events are a driver job too: the `subscribe_*` methods hand the - * host a sink to emit into. Each is called synchronously, **exactly once**, - * during [`FfiMatrixDriver`] construction — store the sink and hook the - * actual event handlers whenever convenient afterwards. Single-sink - * semantics: fan-out to multiple managers happens on the Rust side. - * - * (`async_trait` must sit *under* the uniffi attribute: uniffi parses the - * original `async fn` tokens.) - */ -export interface MatrixDriverCallback { - - sendStickyEvent(roomId: string, eventType: string, contentJson: string, durationMs: bigint, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; - sendStateEvent(roomId: string, eventType: string, stateKey: string, contentJson: string, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; -/** - * Returns the MSC4140 delay id (not an event id). `sticky_duration_ms` - * makes it a delayed *sticky* event (MSC4354 + MSC4140); ignore it if - * the host SDK cannot express both yet. - */ - sendDelayedEvent(roomId: string, eventType: string, contentJson: string, delayMs: bigint, stickyDurationMs: bigint | undefined, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; -/** - * Delayed state event — compat only (`StateEvents`). - */ - sendDelayedStateEvent(roomId: string, eventType: string, stateKey: string, contentJson: string, delayMs: bigint, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; - restartDelayedEvent(roomId: string, delayId: string, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; - cancelDelayedEvent(roomId: string, delayId: string, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; -/** - * MSC4195: hand the delayed leave to the SFU. `livekit_service_url` is - * the transport we publish on (`None` for a receive-only member) and - * `delay_ms` the armed delay — what an adapter that delegates through - * the authorisation service's token endpoint needs. - * MSC4195 via the homeserver: one authenticated - * `POST /_matrix/client/unstable/io.element.msc4195/rtc/livekit/delegate_delayed_leave` - * with `{ url, room_id, slot_id, member, delay_id, delay_timeout }` (see - * `FfiHomeserverDelegationRequest`). A client that cannot make - * authenticated homeserver calls (a widget) throws `Unsupported`; the - * crate then tries the authorisation service. - */ - delegateDelayedLeaveViaHomeserver(request: FfiHomeserverDelegationRequest, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; -/** - * MSC4195 via the authorisation service: the `get_token` (or, with - * `legacy_sfu_get`, `sfu/get`) request the adapter already makes, with - * `delay_id`, `delay_timeout` (= `delay_timeout_ms`) and the adapter's - * own CS API URL (`delay_cs_api_url`) added. Discard the token. - */ - delegateDelayedLeaveViaTransport(request: FfiTransportDelegationRequest, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; - sendToDevice(recipients: Array, eventType: string, contentJson: string, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise>; -/** - * `GET /_matrix/client/v1/rtc/transports`, with well-known fallback. - */ - getRtcTransports(asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise>; -/** - * MSC4195 token exchange, OpenID token included (see - * [`FfiLivekitTokenRequest`]). - */ - getLivekitToken(request: FfiLivekitTokenRequest, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise; -/** - * Latest `limit` timeline events of `event_type`, as JSON strings. - */ - readEvents(eventType: string, stateKey: string | undefined, limit: number, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise>; -/** - * Current state entries of `event_type` (`state_key: None` = any). - */ - readState(eventType: string, stateKey: string | undefined, asyncOpts_?: { signal: AbortSignal }) /*throws*/: Promise>; -/** - * Live room events (sticky member events, slot/state changes). Store - * the sink; call `emit` from the host SDK's event handlers. - */ - subscribeRoomEvents(sink: RoomEventSinkLike): void; -/** - * Decrypted inbound to-device events with origin metadata. - */ - subscribeToDeviceEvents(sink: ToDeviceSinkLike): void; -/** - * Room-state update batches (what notices a slot closing promptly). - */ - subscribeStateUpdates(sink: StateUpdateSinkLike): void; -/** - * Whether the homeserver is reachable right now (a syncing client: its - * sync loop is running). - */ - isHomeserverConnected(): boolean; -/** - * Live connectivity verdicts. Store the sink; `emit` the new value from - * the host SDK's sync-state handler. - */ - subscribeConnectivity(sink: ConnectivitySinkLike): void; -} - - -/** - * The host-implemented Matrix driver: the same seam as - * [`crate::driver::MatrixDriver`], flattened for FFI. matrix-rust-sdk hosts - * adapt their `MatrixDriver`; a matrix-js-sdk host implements this directly. - * - * Inbound events are a driver job too: the `subscribe_*` methods hand the - * host a sink to emit into. Each is called synchronously, **exactly once**, - * during [`FfiMatrixDriver`] construction — store the sink and hook the - * actual event handlers whenever convenient afterwards. Single-sink - * semantics: fan-out to multiple managers happens on the Rust side. - * - * (`async_trait` must sit *under* the uniffi attribute: uniffi parses the - * original `async fn` tokens.) - */ -export class MatrixDriverCallbackImpl extends UniffiAbstractObject implements MatrixDriverCallback { - - readonly [uniffiTypeNameSymbol] = "MatrixDriverCallbackImpl"; - readonly [destructorGuardSymbol]: UniffiGcObject; - readonly [pointerLiteralSymbol]: UniffiHandle; - // No primary constructor declared for this class. -private constructor(pointer: UniffiHandle) { - super(); - this[pointerLiteralSymbol] = pointer; - this[destructorGuardSymbol] = uniffiTypeMatrixDriverCallbackImplObjectFactory.bless(pointer); -} - - - - - async sendStickyEvent(roomId: string, eventType: string, contentJson: string, durationMs: bigint, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_sticky_event( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterString.lower(roomId, nativeModule().rustbuffer_alloc),FfiConverterString.lower(eventType, nativeModule().rustbuffer_alloc),FfiConverterString.lower(contentJson, nativeModule().rustbuffer_alloc),FfiConverterUInt64.lower(durationMs, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer, - // Async returns always go through the JS-side converter: the - // FFI symbol returns the future handle (u64), and the user-level - // RustBuffer comes back via the shared `rust_future_complete_*` - // export. The bytes the runtime hands back must be deserialized - // here using the per-callable return-type converter. - // Borrowed view over foreign memory: the call site owns the free, - // as on the sync paths. Unconditional — a no-op where buffers are - // already JS-owned. - /*liftFunc:*/ (__rb) => { - try { - return FfiConverterTypeFfiSendEventResponse.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - - async sendStateEvent(roomId: string, eventType: string, stateKey: string, contentJson: string, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_state_event( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterString.lower(roomId, nativeModule().rustbuffer_alloc),FfiConverterString.lower(eventType, nativeModule().rustbuffer_alloc),FfiConverterString.lower(stateKey, nativeModule().rustbuffer_alloc),FfiConverterString.lower(contentJson, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer, - // Async returns always go through the JS-side converter: the - // FFI symbol returns the future handle (u64), and the user-level - // RustBuffer comes back via the shared `rust_future_complete_*` - // export. The bytes the runtime hands back must be deserialized - // here using the per-callable return-type converter. - // Borrowed view over foreign memory: the call site owns the free, - // as on the sync paths. Unconditional — a no-op where buffers are - // already JS-owned. - /*liftFunc:*/ (__rb) => { - try { - return FfiConverterTypeFfiSendEventResponse.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * Returns the MSC4140 delay id (not an event id). `sticky_duration_ms` - * makes it a delayed *sticky* event (MSC4354 + MSC4140); ignore it if - * the host SDK cannot express both yet. - */ - async sendDelayedEvent(roomId: string, eventType: string, contentJson: string, delayMs: bigint, stickyDurationMs: bigint | undefined, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_delayed_event( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterString.lower(roomId, nativeModule().rustbuffer_alloc),FfiConverterString.lower(eventType, nativeModule().rustbuffer_alloc),FfiConverterString.lower(contentJson, nativeModule().rustbuffer_alloc),FfiConverterUInt64.lower(delayMs, nativeModule().rustbuffer_alloc),FfiConverterOptionalUInt64.lower(stickyDurationMs, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer, - // Async returns always go through the JS-side converter: the - // FFI symbol returns the future handle (u64), and the user-level - // RustBuffer comes back via the shared `rust_future_complete_*` - // export. The bytes the runtime hands back must be deserialized - // here using the per-callable return-type converter. - // Borrowed view over foreign memory: the call site owns the free, - // as on the sync paths. Unconditional — a no-op where buffers are - // already JS-owned. - /*liftFunc:*/ (__rb) => { - try { - return FfiConverterString.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * Delayed state event — compat only (`StateEvents`). - */ - async sendDelayedStateEvent(roomId: string, eventType: string, stateKey: string, contentJson: string, delayMs: bigint, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_delayed_state_event( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterString.lower(roomId, nativeModule().rustbuffer_alloc),FfiConverterString.lower(eventType, nativeModule().rustbuffer_alloc),FfiConverterString.lower(stateKey, nativeModule().rustbuffer_alloc),FfiConverterString.lower(contentJson, nativeModule().rustbuffer_alloc),FfiConverterUInt64.lower(delayMs, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer, - // Async returns always go through the JS-side converter: the - // FFI symbol returns the future handle (u64), and the user-level - // RustBuffer comes back via the shared `rust_future_complete_*` - // export. The bytes the runtime hands back must be deserialized - // here using the per-callable return-type converter. - // Borrowed view over foreign memory: the call site owns the free, - // as on the sync paths. Unconditional — a no-op where buffers are - // already JS-owned. - /*liftFunc:*/ (__rb) => { - try { - return FfiConverterString.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - - async restartDelayedEvent(roomId: string, delayId: string, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_restart_delayed_event( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterString.lower(roomId, nativeModule().rustbuffer_alloc),FfiConverterString.lower(delayId, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_void, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_void, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_void, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_void, - /*liftFunc:*/ (_v) => {}, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - - async cancelDelayedEvent(roomId: string, delayId: string, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_cancel_delayed_event( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterString.lower(roomId, nativeModule().rustbuffer_alloc),FfiConverterString.lower(delayId, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_void, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_void, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_void, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_void, - /*liftFunc:*/ (_v) => {}, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * MSC4195: hand the delayed leave to the SFU. `livekit_service_url` is - * the transport we publish on (`None` for a receive-only member) and - * `delay_ms` the armed delay — what an adapter that delegates through - * the authorisation service's token endpoint needs. - * MSC4195 via the homeserver: one authenticated - * `POST /_matrix/client/unstable/io.element.msc4195/rtc/livekit/delegate_delayed_leave` - * with `{ url, room_id, slot_id, member, delay_id, delay_timeout }` (see - * `FfiHomeserverDelegationRequest`). A client that cannot make - * authenticated homeserver calls (a widget) throws `Unsupported`; the - * crate then tries the authorisation service. - */ - async delegateDelayedLeaveViaHomeserver(request: FfiHomeserverDelegationRequest, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_delegate_delayed_leave_via_homeserver( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterTypeFfiHomeserverDelegationRequest.lower(request, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_void, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_void, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_void, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_void, - /*liftFunc:*/ (_v) => {}, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * MSC4195 via the authorisation service: the `get_token` (or, with - * `legacy_sfu_get`, `sfu/get`) request the adapter already makes, with - * `delay_id`, `delay_timeout` (= `delay_timeout_ms`) and the adapter's - * own CS API URL (`delay_cs_api_url`) added. Discard the token. - */ - async delegateDelayedLeaveViaTransport(request: FfiTransportDelegationRequest, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_delegate_delayed_leave_via_transport( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterTypeFfiTransportDelegationRequest.lower(request, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_void, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_void, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_void, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_void, - /*liftFunc:*/ (_v) => {}, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - - async sendToDevice(recipients: Array, eventType: string, contentJson: string, asyncOpts_?: { signal: AbortSignal }): Promise> /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_to_device( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterSequenceTypeFfiToDeviceRecipient.lower(recipients, nativeModule().rustbuffer_alloc),FfiConverterString.lower(eventType, nativeModule().rustbuffer_alloc),FfiConverterString.lower(contentJson, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer, - // Async returns always go through the JS-side converter: the - // FFI symbol returns the future handle (u64), and the user-level - // RustBuffer comes back via the shared `rust_future_complete_*` - // export. The bytes the runtime hands back must be deserialized - // here using the per-callable return-type converter. - // Borrowed view over foreign memory: the call site owns the free, - // as on the sync paths. Unconditional — a no-op where buffers are - // already JS-owned. - /*liftFunc:*/ (__rb) => { - try { - return FfiConverterSequenceTypeFfiToDeviceDelivery.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * `GET /_matrix/client/v1/rtc/transports`, with well-known fallback. - */ - async getRtcTransports(asyncOpts_?: { signal: AbortSignal }): Promise> /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_get_rtc_transports( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer, - // Async returns always go through the JS-side converter: the - // FFI symbol returns the future handle (u64), and the user-level - // RustBuffer comes back via the shared `rust_future_complete_*` - // export. The bytes the runtime hands back must be deserialized - // here using the per-callable return-type converter. - // Borrowed view over foreign memory: the call site owns the free, - // as on the sync paths. Unconditional — a no-op where buffers are - // already JS-owned. - /*liftFunc:*/ (__rb) => { - try { - return FfiConverterSequenceTypeFfiRtcTransport.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * MSC4195 token exchange, OpenID token included (see - * [`FfiLivekitTokenRequest`]). - */ - async getLivekitToken(request: FfiLivekitTokenRequest, asyncOpts_?: { signal: AbortSignal }): Promise /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_get_livekit_token( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterTypeFfiLivekitTokenRequest.lower(request, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer, - // Async returns always go through the JS-side converter: the - // FFI symbol returns the future handle (u64), and the user-level - // RustBuffer comes back via the shared `rust_future_complete_*` - // export. The bytes the runtime hands back must be deserialized - // here using the per-callable return-type converter. - // Borrowed view over foreign memory: the call site owns the free, - // as on the sync paths. Unconditional — a no-op where buffers are - // already JS-owned. - /*liftFunc:*/ (__rb) => { - try { - return FfiConverterTypeFfiLivekitToken.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * Latest `limit` timeline events of `event_type`, as JSON strings. - */ - async readEvents(eventType: string, stateKey: string | undefined, limit: number, asyncOpts_?: { signal: AbortSignal }): Promise> /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_read_events( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterString.lower(eventType, nativeModule().rustbuffer_alloc),FfiConverterOptionalString.lower(stateKey, nativeModule().rustbuffer_alloc),FfiConverterUInt32.lower(limit, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer, - // Async returns always go through the JS-side converter: the - // FFI symbol returns the future handle (u64), and the user-level - // RustBuffer comes back via the shared `rust_future_complete_*` - // export. The bytes the runtime hands back must be deserialized - // here using the per-callable return-type converter. - // Borrowed view over foreign memory: the call site owns the free, - // as on the sync paths. Unconditional — a no-op where buffers are - // already JS-owned. - /*liftFunc:*/ (__rb) => { - try { - return FfiConverterSequenceString.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * Current state entries of `event_type` (`state_key: None` = any). - */ - async readState(eventType: string, stateKey: string | undefined, asyncOpts_?: { signal: AbortSignal }): Promise> /*throws*/ { - return await uniffiRustCallAsync( - /*rustCaller:*/ uniffiCaller, - /*rustFutureFunc:*/ () => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_read_state( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this),FfiConverterString.lower(eventType, nativeModule().rustbuffer_alloc),FfiConverterOptionalString.lower(stateKey, nativeModule().rustbuffer_alloc) - ); - }, - /*pollFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer, - /*cancelFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer, - /*completeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer, - /*freeFunc:*/ nativeModule().ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer, - // Async returns always go through the JS-side converter: the - // FFI symbol returns the future handle (u64), and the user-level - // RustBuffer comes back via the shared `rust_future_complete_*` - // export. The bytes the runtime hands back must be deserialized - // here using the per-callable return-type converter. - // Borrowed view over foreign memory: the call site owns the free, - // as on the sync paths. Unconditional — a no-op where buffers are - // already JS-owned. - /*liftFunc:*/ (__rb) => { - try { - return FfiConverterSequenceString.lift(__rb); - } finally { - nativeModule().rustbuffer_free(__rb); - } - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - /*asyncOpts:*/ asyncOpts_, - /*errorHandler:*/ FfiConverterTypeRtcError.lift.bind(FfiConverterTypeRtcError) - ); - } - -/** - * Live room events (sticky member events, slot/state changes). Store - * the sink; call `emit` from the host SDK's event handlers. - */ - subscribeRoomEvents(sink: RoomEventSinkLike): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_room_events( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this), - FfiConverterTypeRoomEventSink.lower(sink, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - -/** - * Decrypted inbound to-device events with origin metadata. - */ - subscribeToDeviceEvents(sink: ToDeviceSinkLike): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_to_device_events( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this), - FfiConverterTypeToDeviceSink.lower(sink, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - -/** - * Room-state update batches (what notices a slot closing promptly). - */ - subscribeStateUpdates(sink: StateUpdateSinkLike): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_state_updates( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this), - FfiConverterTypeStateUpdateSink.lower(sink, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - -/** - * Whether the homeserver is reachable right now (a syncing client: its - * sync loop is running). - */ - isHomeserverConnected(): boolean { - return FfiConverterBool.lift(uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { - return nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_is_homeserver_connected( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - )); - } - -/** - * Live connectivity verdicts. Store the sink; `emit` the new value from - * the host SDK's sync-state handler. - */ - subscribeConnectivity(sink: ConnectivitySinkLike): void {uniffiCaller.rustCall( - /*caller:*/ (callStatus) => { nativeModule().ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_connectivity( - uniffiTypeMatrixDriverCallbackImplObjectFactory.clonePointer(this), - FfiConverterTypeConnectivitySink.lower(sink, nativeModule().rustbuffer_alloc), - callStatus); - }, - /*liftString:*/ FfiConverterString.lift.bind(FfiConverterString), - ); - } - - - uniffiDestroy(): void { - const ptr = (this as any)[destructorGuardSymbol]; - if (ptr !== undefined) { - const pointer = uniffiTypeMatrixDriverCallbackImplObjectFactory.pointer(this); - uniffiTypeMatrixDriverCallbackImplObjectFactory.freePointer(pointer); - uniffiTypeMatrixDriverCallbackImplObjectFactory.unbless(ptr); - delete (this as any)[destructorGuardSymbol]; - } - } - - static instanceOf(obj_: any): obj_ is MatrixDriverCallbackImpl { - return uniffiTypeMatrixDriverCallbackImplObjectFactory.isConcreteType(obj_); - } - - -} - -const uniffiTypeMatrixDriverCallbackImplObjectFactory: UniffiObjectFactory = (() => { - - /// - const registry = typeof FinalizationRegistry !== 'undefined' ? new FinalizationRegistry((heldValue: UniffiHandle) => { - uniffiTypeMatrixDriverCallbackImplObjectFactory.freePointer(heldValue); - }) : null; - - return { - create(pointer: UniffiHandle): MatrixDriverCallback { - const instance = Object.create(MatrixDriverCallbackImpl.prototype); - instance[pointerLiteralSymbol] = pointer; - instance[destructorGuardSymbol] = this.bless(pointer); - instance[uniffiTypeNameSymbol] = "MatrixDriverCallbackImpl"; - return instance; - }, - - - bless(p: UniffiHandle): UniffiGcObject { - const ptr = { - p, // make sure this object doesn't get optimized away. - markDestroyed: () => undefined, - }; - if (registry) { - registry.register(ptr, p, ptr); - } - return ptr; - }, - - unbless(ptr_: UniffiGcObject) { - if (registry) { - registry.unregister(ptr_); - } - }, - - pointer(obj_: MatrixDriverCallback): UniffiHandle { - if ((obj_ as any)[destructorGuardSymbol] === undefined) { - throw new UniffiInternalError.UnexpectedNullPointer(); - } - return (obj_ as any)[pointerLiteralSymbol]; - }, - - clonePointer(obj_: MatrixDriverCallback): UniffiHandle { - const pointer = this.pointer(obj_); - return uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_clone_matrixdrivercallback(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - freePointer(pointer: UniffiHandle): void { - uniffiCaller.rustCall( - /*caller:*/ (callStatus) => nativeModule().ubrn_uniffi_matrix_rtc_fn_free_matrixdrivercallback(pointer, callStatus), - /*liftString:*/ FfiConverterString.lift - ); - }, - - isConcreteType(obj_: any): obj_ is MatrixDriverCallback { - return obj_[destructorGuardSymbol] && obj_[uniffiTypeNameSymbol] === "MatrixDriverCallbackImpl"; - }, -}})(); -const FfiConverterTypeMatrixDriverCallback = new FfiConverterObjectWithCallbacks(uniffiTypeMatrixDriverCallbackImplObjectFactory); - -// Add a vtable for the callbacks that go in MatrixDriverCallback. - -// Put the implementation in a struct so we don't pollute the top-level namespace -const uniffiCallbackInterfaceMatrixDriverCallback: { vtable: any; register: () => void; } = { - // Create the VTable using a series of closures. - // ts automatically converts these into C callback functions. - vtable: { - send_sticky_event: ( - uniffiHandle: bigint, - roomId: Uint8Array, - eventType: Uint8Array, - contentJson: Uint8Array, - durationMs: bigint, - uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.sendStickyEvent( - FfiConverterString.lift(roomId), - FfiConverterString.lift(eventType), - FfiConverterString.lift(contentJson), - FfiConverterUInt64.lift(durationMs), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: FfiSendEventResponse) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: FfiConverterTypeFfiSendEventResponse.lower(returnValue, nativeModule().rustbuffer_alloc), - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: /*empty*/ new Uint8Array(0), - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - send_state_event: ( - uniffiHandle: bigint, - roomId: Uint8Array, - eventType: Uint8Array, - stateKey: Uint8Array, - contentJson: Uint8Array, - uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.sendStateEvent( - FfiConverterString.lift(roomId), - FfiConverterString.lift(eventType), - FfiConverterString.lift(stateKey), - FfiConverterString.lift(contentJson), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: FfiSendEventResponse) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: FfiConverterTypeFfiSendEventResponse.lower(returnValue, nativeModule().rustbuffer_alloc), - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: /*empty*/ new Uint8Array(0), - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - send_delayed_event: ( - uniffiHandle: bigint, - roomId: Uint8Array, - eventType: Uint8Array, - contentJson: Uint8Array, - delayMs: bigint, - stickyDurationMs: Uint8Array, - uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.sendDelayedEvent( - FfiConverterString.lift(roomId), - FfiConverterString.lift(eventType), - FfiConverterString.lift(contentJson), - FfiConverterUInt64.lift(delayMs), - FfiConverterOptionalUInt64.lift(stickyDurationMs), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: string) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: FfiConverterString.lower(returnValue, nativeModule().rustbuffer_alloc), - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: /*empty*/ new Uint8Array(0), - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - send_delayed_state_event: ( - uniffiHandle: bigint, - roomId: Uint8Array, - eventType: Uint8Array, - stateKey: Uint8Array, - contentJson: Uint8Array, - delayMs: bigint, - uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.sendDelayedStateEvent( - FfiConverterString.lift(roomId), - FfiConverterString.lift(eventType), - FfiConverterString.lift(stateKey), - FfiConverterString.lift(contentJson), - FfiConverterUInt64.lift(delayMs), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: string) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: FfiConverterString.lower(returnValue, nativeModule().rustbuffer_alloc), - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: /*empty*/ new Uint8Array(0), - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - restart_delayed_event: ( - uniffiHandle: bigint, - roomId: Uint8Array, - delayId: Uint8Array, - uniffiFutureCallback: UniffiForeignFutureCompletevoid, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.restartDelayedEvent( - FfiConverterString.lift(roomId), - FfiConverterString.lift(delayId), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: void) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultVoid */{ - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultVoid */{ - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - cancel_delayed_event: ( - uniffiHandle: bigint, - roomId: Uint8Array, - delayId: Uint8Array, - uniffiFutureCallback: UniffiForeignFutureCompletevoid, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.cancelDelayedEvent( - FfiConverterString.lift(roomId), - FfiConverterString.lift(delayId), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: void) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultVoid */{ - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultVoid */{ - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - delegate_delayed_leave_via_homeserver: ( - uniffiHandle: bigint, - request: Uint8Array, - uniffiFutureCallback: UniffiForeignFutureCompletevoid, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.delegateDelayedLeaveViaHomeserver( - FfiConverterTypeFfiHomeserverDelegationRequest.lift(request), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: void) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultVoid */{ - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultVoid */{ - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - delegate_delayed_leave_via_transport: ( - uniffiHandle: bigint, - request: Uint8Array, - uniffiFutureCallback: UniffiForeignFutureCompletevoid, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.delegateDelayedLeaveViaTransport( - FfiConverterTypeFfiTransportDelegationRequest.lift(request), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: void) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultVoid */{ - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultVoid */{ - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - send_to_device: ( - uniffiHandle: bigint, - recipients: Uint8Array, - eventType: Uint8Array, - contentJson: Uint8Array, - uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise> => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.sendToDevice( - FfiConverterSequenceTypeFfiToDeviceRecipient.lift(recipients), - FfiConverterString.lift(eventType), - FfiConverterString.lift(contentJson), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: Array) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: FfiConverterSequenceTypeFfiToDeviceDelivery.lower(returnValue, nativeModule().rustbuffer_alloc), - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: /*empty*/ new Uint8Array(0), - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - get_rtc_transports: ( - uniffiHandle: bigint, - uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise> => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.getRtcTransports({ signal } - ) - }; - const uniffiHandleSuccess = (returnValue: Array) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: FfiConverterSequenceTypeFfiRtcTransport.lower(returnValue, nativeModule().rustbuffer_alloc), - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: /*empty*/ new Uint8Array(0), - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - get_livekit_token: ( - uniffiHandle: bigint, - request: Uint8Array, - uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.getLivekitToken( - FfiConverterTypeFfiLivekitTokenRequest.lift(request), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: FfiLivekitToken) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: FfiConverterTypeFfiLivekitToken.lower(returnValue, nativeModule().rustbuffer_alloc), - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: /*empty*/ new Uint8Array(0), - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - read_events: ( - uniffiHandle: bigint, - eventType: Uint8Array, - stateKey: Uint8Array, - limit: number, - uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise> => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.readEvents( - FfiConverterString.lift(eventType), - FfiConverterOptionalString.lift(stateKey), - FfiConverterUInt32.lift(limit), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: Array) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: FfiConverterSequenceString.lower(returnValue, nativeModule().rustbuffer_alloc), - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: /*empty*/ new Uint8Array(0), - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - read_state: ( - uniffiHandle: bigint, - eventType: Uint8Array, - stateKey: Uint8Array, - uniffiFutureCallback: UniffiForeignFutureCompleterustBuffer, - uniffiCallbackData: bigint) => { - const uniffiMakeCall = - async (signal: AbortSignal) - : Promise> => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return await jsCallback.readState( - FfiConverterString.lift(eventType), - FfiConverterOptionalString.lift(stateKey), { signal } - ) - }; - const uniffiHandleSuccess = (returnValue: Array) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: FfiConverterSequenceString.lower(returnValue, nativeModule().rustbuffer_alloc), - call_status: uniffiCaller.createCallStatus() - } - ); - }; - const uniffiHandleError = (code: number, errorBuf: UniffiByteArray) => { - uniffiFutureCallback.call( - uniffiFutureCallback, - uniffiCallbackData, - /* UniffiForeignFutureResultRustBuffer */{ - return_value: /*empty*/ new Uint8Array(0), - // TODO create callstatus with error. - call_status: uniffiCaller.createErrorStatus(code, errorBuf), - } - ); - }; - const uniffiForeignFuture = uniffiTraitInterfaceCallAsyncWithError( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*isErrorType:*/ RtcError.instanceOf, - /*lowerError:*/ FfiConverterTypeRtcError.lower.bind(FfiConverterTypeRtcError), - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ); - return uniffiForeignFuture; - }, - subscribe_room_events: ( - uniffiHandle: bigint, - sink: bigint,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return jsCallback.subscribeRoomEvents( - FfiConverterTypeRoomEventSink.lift(sink) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - subscribe_to_device_events: ( - uniffiHandle: bigint, - sink: bigint,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return jsCallback.subscribeToDeviceEvents( - FfiConverterTypeToDeviceSink.lift(sink) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - subscribe_state_updates: ( - uniffiHandle: bigint, - sink: bigint,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return jsCallback.subscribeStateUpdates( - FfiConverterTypeStateUpdateSink.lift(sink) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - is_homeserver_connected: ( - uniffiHandle: bigint,) => { - const uniffiMakeCall = - () - : boolean => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return jsCallback.isHomeserverConnected( - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => { - UniffiResult.writeSuccess(uniffiResult, FfiConverterBool.lower(obj, nativeModule().rustbuffer_alloc)); - }; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - subscribe_connectivity: ( - uniffiHandle: bigint, - sink: bigint,) => { - const uniffiMakeCall = - () - : void => { - const jsCallback = FfiConverterTypeMatrixDriverCallback.lift(uniffiHandle); - return jsCallback.subscribeConnectivity( - FfiConverterTypeConnectivitySink.lift(sink) - ) - }; - const uniffiResult = UniffiResult.ready(); - const uniffiHandleSuccess = (obj: any) => {}; - const uniffiHandleError = (code: number, errBuf: UniffiByteArray) => { - UniffiResult.writeError(uniffiResult, code, errBuf); - }; - uniffiTraitInterfaceCall( - /*makeCall:*/ uniffiMakeCall, - /*handleSuccess:*/ uniffiHandleSuccess, - /*handleError:*/ uniffiHandleError, - /*lowerString:*/ FfiConverterString.lower.bind(FfiConverterString), - /*alloc:*/ nativeModule().rustbuffer_alloc, - ) - return uniffiResult; - }, - uniffi_free: (uniffiHandle: UniffiHandle): void => { - // this will throw a stale handle error if the handle isn't found. - FfiConverterTypeMatrixDriverCallback.drop(uniffiHandle); - }, - uniffi_clone: (uniffiHandle: UniffiHandle): UniffiHandle => { - return FfiConverterTypeMatrixDriverCallback.clone(uniffiHandle); - } - }, - register: () => {nativeModule().ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_matrixdrivercallback( - uniffiCallbackInterfaceMatrixDriverCallback.vtable - ); - }, -}; - -// FfiConverter for bigint | undefined -const FfiConverterOptionalUInt64 = new FfiConverterOptional(FfiConverterUInt64); - -// FfiConverter for Array -const FfiConverterSequenceString = new FfiConverterArray(FfiConverterString); - -// FfiConverter for string | undefined -const FfiConverterOptionalString = new FfiConverterOptional(FfiConverterString); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiRtcTransport = new FfiConverterArray(FfiConverterTypeFfiRtcTransport); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiMember = new FfiConverterArray(FfiConverterTypeFfiMember); - -// FfiConverter for FfiKeyRejection | undefined -const FfiConverterOptionalTypeFfiKeyRejection = new FfiConverterOptional(FfiConverterTypeFfiKeyRejection); - -// FfiConverter for boolean | undefined -const FfiConverterOptionalBoolean = new FfiConverterOptional(FfiConverterBool); - -// FfiConverter for FfiMediaKeyState | undefined -const FfiConverterOptionalTypeFfiMediaKeyState = new FfiConverterOptional(FfiConverterTypeFfiMediaKeyState); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiSessionRead = new FfiConverterArray(FfiConverterTypeFfiSessionRead); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiExcludedCandidate = new FfiConverterArray(FfiConverterTypeFfiExcludedCandidate); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiImpairment = new FfiConverterArray(FfiConverterTypeFfiImpairment); - -// FfiConverter for FfiDelayedLeaveOutcome | undefined -const FfiConverterOptionalTypeFfiDelayedLeaveOutcome = new FfiConverterOptional(FfiConverterTypeFfiDelayedLeaveOutcome); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiConnectionWithMembers = new FfiConverterArray(FfiConverterTypeFfiConnectionWithMembers); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiConnectionProblem = new FfiConverterArray(FfiConverterTypeFfiConnectionProblem); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiMediaKey = new FfiConverterArray(FfiConverterTypeFfiMediaKey); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiMembership = new FfiConverterArray(FfiConverterTypeFfiMembership); - -// FfiConverter for FfiMembership | undefined -const FfiConverterOptionalTypeFfiMembership = new FfiConverterOptional(FfiConverterTypeFfiMembership); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiToDeviceRecipient = new FfiConverterArray(FfiConverterTypeFfiToDeviceRecipient); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiToDeviceDelivery = new FfiConverterArray(FfiConverterTypeFfiToDeviceDelivery); - -// FfiConverter for Array -const FfiConverterSequenceTypeFfiSessionSnapshot = new FfiConverterArray(FfiConverterTypeFfiSessionSnapshot); - - -/** - * This should be called before anything else. - * - * It is likely that this is being done for you by the library's `index.ts`. - * - * It checks versions of uniffi between when the Rust scaffolding was generated - * and when the bindings were generated. - * - * It also initializes the machinery to enable Rust to talk back to Javascript. - */ -function uniffiEnsureInitialized() { - // Get the bindings contract version from our ComponentInterface - const bindingsContractVersion = 30; - // Get the scaffolding contract version by calling the into the dylib - const scaffoldingContractVersion = nativeModule().ubrn_ffi_matrix_rtc_uniffi_contract_version(); - if (bindingsContractVersion !== scaffoldingContractVersion) { - throw new UniffiInternalError.ContractVersionMismatch(scaffoldingContractVersion, bindingsContractVersion); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_func_compute_sessions_from_events() !== 27010) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_func_compute_sessions_from_events"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_func_impairment_severity() !== 9139) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_func_impairment_severity"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_func_set_log_sink() !== 7798) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_func_set_log_sink"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_connectionslistener_on_connections_change() !== 24219) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_connectionslistener_on_connections_change"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_connectivitysink_emit() !== 45059) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_connectivitysink_emit"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_constructor_ffimatrixdriver_new() !== 16380) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_constructor_ffimatrixdriver_new"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_constructor_ffiparticipationmanager_new() !== 2422) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_constructor_ffiparticipationmanager_new"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_close_slot() !== 63268) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_close_slot"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_connection_problems() !== 17464) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_connection_problems"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_connections() !== 38871) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_connections"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_debug_snapshot() !== 11860) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_debug_snapshot"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_is_homeserver_connected() !== 218) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_is_homeserver_connected"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_join() !== 18117) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_join"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_key_map() !== 32581) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_key_map"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_leave() !== 35402) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_leave"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_memberships() !== 15145) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_memberships"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_open_slot() !== 28952) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_open_slot"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_member_id() !== 453) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_member_id"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_membership() !== 25006) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_membership"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_transport_identity() !== 34101) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_transport_identity"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_session() !== 13049) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_session"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_connections_listener() !== 33842) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_connections_listener"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_key_map_listener() !== 53147) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_key_map_listener"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_key_rejected_listener() !== 1468) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_key_rejected_listener"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_memberships_listener() !== 46727) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_memberships_listener"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_session_listener() !== 784) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_session_listener"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_status_listener() !== 8439) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_status_listener"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_status() !== 23619) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_status"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_update_application() !== 28805) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_update_application"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_keymaplistener_on_key_map_change() !== 2308) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_keymaplistener_on_key_map_change"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_keyrejectedlistener_on_key_rejected() !== 53044) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_keyrejectedlistener_on_key_rejected"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_logsink_log() !== 15220) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_logsink_log"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_sticky_event() !== 39725) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_sticky_event"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_state_event() !== 11746) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_state_event"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_delayed_event() !== 9018) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_delayed_event"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_delayed_state_event() !== 29945) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_delayed_state_event"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_restart_delayed_event() !== 2361) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_restart_delayed_event"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_cancel_delayed_event() !== 48021) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_cancel_delayed_event"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_delegate_delayed_leave_via_homeserver() !== 43539) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_delegate_delayed_leave_via_homeserver"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_delegate_delayed_leave_via_transport() !== 6420) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_delegate_delayed_leave_via_transport"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_to_device() !== 43316) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_to_device"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_get_rtc_transports() !== 33640) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_get_rtc_transports"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_get_livekit_token() !== 25518) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_get_livekit_token"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_read_events() !== 28203) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_read_events"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_read_state() !== 63481) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_read_state"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_room_events() !== 8803) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_room_events"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_to_device_events() !== 45060) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_to_device_events"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_state_updates() !== 58784) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_state_updates"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_is_homeserver_connected() !== 56819) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_is_homeserver_connected"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_connectivity() !== 55109) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_connectivity"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_membershipslistener_on_memberships_change() !== 29319) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_membershipslistener_on_memberships_change"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_roomeventsink_emit() !== 34604) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_roomeventsink_emit"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_sessionlistener_on_session_change() !== 30825) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_sessionlistener_on_session_change"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_stateupdatesink_emit() !== 7988) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_stateupdatesink_emit"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_statuslistener_on_status_change() !== 45246) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_statuslistener_on_status_change"); - } - if (nativeModule().ubrn_uniffi_matrix_rtc_checksum_method_todevicesink_emit() !== 57061) { - throw new UniffiInternalError.ApiChecksumMismatch("uniffi_matrix_rtc_checksum_method_todevicesink_emit"); - } - - uniffiCallbackInterfaceConnectionsListener.register(); - uniffiCallbackInterfaceKeyMapListener.register(); - uniffiCallbackInterfaceKeyRejectedListener.register(); - uniffiCallbackInterfaceMembershipsListener.register(); - uniffiCallbackInterfaceSessionListener.register(); - uniffiCallbackInterfaceStatusListener.register(); - uniffiCallbackInterfaceLogSink.register(); - uniffiCallbackInterfaceMatrixDriverCallback.register(); - } - -export default Object.freeze({ - initialize: uniffiEnsureInitialized, - converters: { - FfiConverterTypeConnectionsListener, - FfiConverterTypeConnectivitySink, - FfiConverterTypeFfiComponent, - FfiConverterTypeFfiConnectionData, - FfiConverterTypeFfiConnectionProblem, - FfiConverterTypeFfiConnectionProblemKind, - FfiConverterTypeFfiConnectionWithMembers, - FfiConverterTypeFfiDelayedLeaveOutcome, - FfiConverterTypeFfiDelegationRoute, - FfiConverterTypeFfiDeviceAttribution, - FfiConverterTypeFfiDisconnectCause, - FfiConverterTypeFfiElementCallCompat, - FfiConverterTypeFfiEncryptionStatus, - FfiConverterTypeFfiEventOrigin, - FfiConverterTypeFfiExcludedCandidate, - FfiConverterTypeFfiHomeserverDelegationRequest, - FfiConverterTypeFfiImpairment, - FfiConverterTypeFfiJoinError, - FfiConverterTypeFfiJoinExclusionReason, - FfiConverterTypeFfiJoinParams, - FfiConverterTypeFfiJoinProgress, - FfiConverterTypeFfiKeepAlive, - FfiConverterTypeFfiKeyRejection, - FfiConverterTypeFfiLivekitToken, - FfiConverterTypeFfiLivekitTokenRequest, - FfiConverterTypeFfiLogLevel, - FfiConverterTypeFfiMatrixDriver, - FfiConverterTypeFfiMediaKey, - FfiConverterTypeFfiMediaKeyState, - FfiConverterTypeFfiMember, - FfiConverterTypeFfiMembership, - FfiConverterTypeFfiMembershipPublication, - FfiConverterTypeFfiMembershipState, - FfiConverterTypeFfiParticipationConfig, - FfiConverterTypeFfiParticipationManager, - FfiConverterTypeFfiRosterPresence, - FfiConverterTypeFfiRtcTransport, - FfiConverterTypeFfiSendEventResponse, - FfiConverterTypeFfiSessionRead, - FfiConverterTypeFfiSessionSnapshot, - FfiConverterTypeFfiSeverity, - FfiConverterTypeFfiStatus, - FfiConverterTypeFfiToDeviceDelivery, - FfiConverterTypeFfiToDeviceRecipient, - FfiConverterTypeFfiTransportDelegationRequest, - FfiConverterTypeFfiTransportIntent, - FfiConverterTypeKeyMapListener, - FfiConverterTypeKeyRejectedListener, - FfiConverterTypeLogSink, - FfiConverterTypeMatrixDriverCallback, - FfiConverterTypeMembershipsListener, - FfiConverterTypeRoomEventSink, - FfiConverterTypeRtcError, - FfiConverterTypeSessionListener, - FfiConverterTypeStateUpdateSink, - FfiConverterTypeStatusListener, - FfiConverterTypeToDeviceSink, - } -}); \ No newline at end of file diff --git a/src/matrix-rtc-sdk/generated/wasm-bindgen/index.d.ts b/src/matrix-rtc-sdk/generated/wasm-bindgen/index.d.ts deleted file mode 100644 index 204a74eea..000000000 --- a/src/matrix-rtc-sdk/generated/wasm-bindgen/index.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* -Copyright 2026 Element Creations Ltd. - -SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial -Please see LICENSE in the repository root for full details. -*/ - -// Hand-written declaration for the wasm-bindgen glue next to it, which ubrn -// emits as plain JavaScript. Only the loading entry points are declared; the -// exported `ubrn_*` FFI functions are reached through matrix_rtc.ts alone. -// Kept out of the sync script's way: it is not generated. - -/** What wasm-bindgen's loader accepts as the module to instantiate. */ -export type InitInput = - | RequestInfo - | URL - | Response - | BufferSource - | WebAssembly.Module; - -export default function initAsync( - moduleOrPath?: - | { module_or_path?: InitInput | Promise } - | InitInput - | Promise, -): Promise; - -export function initSync( - module: { module: BufferSource | WebAssembly.Module } | BufferSource | WebAssembly.Module, -): unknown; diff --git a/src/matrix-rtc-sdk/generated/wasm-bindgen/index.js b/src/matrix-rtc-sdk/generated/wasm-bindgen/index.js deleted file mode 100644 index fd45f635d..000000000 --- a/src/matrix-rtc-sdk/generated/wasm-bindgen/index.js +++ /dev/null @@ -1,3250 +0,0 @@ -let wasm; - -let cachedUint8ArrayMemory0 = null; - -function getUint8ArrayMemory0() { - if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { - cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); - } - return cachedUint8ArrayMemory0; -} - -function getArrayU8FromWasm0(ptr, len) { - ptr = ptr >>> 0; - return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len); -} - -function addToExternrefTable0(obj) { - const idx = wasm.__externref_table_alloc(); - wasm.__wbindgen_export_3.set(idx, obj); - return idx; -} - -function handleError(f, args) { - try { - return f.apply(this, args); - } catch (e) { - const idx = addToExternrefTable0(e); - wasm.__wbindgen_exn_store(idx); - } -} - -function _assertClass(instance, klass) { - if (!(instance instanceof klass)) { - throw new Error(`expected instance of ${klass.name}`); - } -} - -let WASM_VECTOR_LEN = 0; - -function passArray8ToWasm0(arg, malloc) { - const ptr = malloc(arg.length * 1, 1) >>> 0; - getUint8ArrayMemory0().set(arg, ptr / 1); - WASM_VECTOR_LEN = arg.length; - return ptr; -} - -function isLikeNone(x) { - return x === undefined || x === null; -} - -let cachedDataViewMemory0 = null; - -function getDataViewMemory0() { - if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { - cachedDataViewMemory0 = new DataView(wasm.memory.buffer); - } - return cachedDataViewMemory0; -} - -const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); - -if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; - -function getStringFromWasm0(ptr, len) { - ptr = ptr >>> 0; - return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); -} - -const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(state => { - wasm.__wbindgen_export_5.get(state.dtor)(state.a, state.b) -}); - -function makeMutClosure(arg0, arg1, dtor, f) { - const state = { a: arg0, b: arg1, cnt: 1, dtor }; - const real = (...args) => { - // First up with a closure we increment the internal reference - // count. This ensures that the Rust closure environment won't - // be deallocated while we're invoking it. - state.cnt++; - const a = state.a; - state.a = 0; - try { - return f(a, state.b, ...args); - } finally { - if (--state.cnt === 0) { - wasm.__wbindgen_export_5.get(state.dtor)(a, state.b); - CLOSURE_DTORS.unregister(state); - } else { - state.a = a; - } - } - }; - real.original = state; - CLOSURE_DTORS.register(real, state, state); - return real; -} -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_connectionslistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_connectionslistener(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_memberships(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_memberships(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} application_type - * @param {number} encrypted - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_open_slot(ptr, application_type, encrypted) { - const ptr0 = passArray8ToWasm0(application_type, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_open_slot(ptr, ptr0, len0, encrypted); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_own_member_id(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_own_member_id(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_status(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_status(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} intent - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_update_application(ptr, intent) { - const ptr0 = passArray8ToWasm0(intent, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_update_application(ptr, ptr0, len0); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_keymaplistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_keymaplistener(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_keymaplistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_keymaplistener(handle, f_status_.__wbg_ptr); -} - -/** - * @param {any} vtable - */ -export function ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_keymaplistener(vtable) { - wasm.ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_keymaplistener(vtable); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} key_map - * @param {Uint8Array} change - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_keymaplistener_on_key_map_change(ptr, key_map, change, f_status_) { - const ptr0 = passArray8ToWasm0(key_map, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(change, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_keymaplistener_on_key_map_change(ptr, ptr0, len0, ptr1, len1, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_keyrejectedlistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_keyrejectedlistener(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_keyrejectedlistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_keyrejectedlistener(handle, f_status_.__wbg_ptr); -} - -/** - * @param {any} vtable - */ -export function ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_keyrejectedlistener(vtable) { - wasm.ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_keyrejectedlistener(vtable); -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_own_membership(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_own_membership(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_own_transport_identity(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_own_transport_identity(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_session(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_session(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {bigint} listener - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_connections_listener(ptr, listener, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_connections_listener(ptr, listener, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {bigint} listener - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_key_map_listener(ptr, listener, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_key_map_listener(ptr, listener, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {bigint} listener - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_key_rejected_listener(ptr, listener, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_key_rejected_listener(ptr, listener, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {bigint} listener - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_memberships_listener(ptr, listener, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_memberships_listener(ptr, listener, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {bigint} listener - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_session_listener(ptr, listener, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_session_listener(ptr, listener, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {bigint} listener - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_status_listener(ptr, listener, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_set_status_listener(ptr, listener, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} member_id - * @param {Uint8Array} reason - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_keyrejectedlistener_on_key_rejected(ptr, member_id, reason, f_status_) { - const ptr0 = passArray8ToWasm0(member_id, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(reason, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_keyrejectedlistener_on_key_rejected(ptr, ptr0, len0, ptr1, len1, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_logsink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_logsink(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_logsink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_logsink(handle, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} room_id - * @param {Uint8Array} delay_id - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_restart_delayed_event(ptr, room_id, delay_id) { - const ptr0 = passArray8ToWasm0(room_id, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(delay_id, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_restart_delayed_event(ptr, ptr0, len0, ptr1, len1); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} room_id - * @param {Uint8Array} delay_id - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_cancel_delayed_event(ptr, room_id, delay_id) { - const ptr0 = passArray8ToWasm0(room_id, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(delay_id, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_cancel_delayed_event(ptr, ptr0, len0, ptr1, len1); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} request - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_delegate_delayed_leave_via_homeserver(ptr, request) { - const ptr0 = passArray8ToWasm0(request, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_delegate_delayed_leave_via_homeserver(ptr, ptr0, len0); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} request - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_delegate_delayed_leave_via_transport(ptr, request) { - const ptr0 = passArray8ToWasm0(request, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_delegate_delayed_leave_via_transport(ptr, ptr0, len0); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} recipients - * @param {Uint8Array} event_type - * @param {Uint8Array} content_json - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_to_device(ptr, recipients, event_type, content_json) { - const ptr0 = passArray8ToWasm0(recipients, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(event_type, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(content_json, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_to_device(ptr, ptr0, len0, ptr1, len1, ptr2, len2); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_get_rtc_transports(ptr) { - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_get_rtc_transports(ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} request - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_get_livekit_token(ptr, request) { - const ptr0 = passArray8ToWasm0(request, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_get_livekit_token(ptr, ptr0, len0); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} event_type - * @param {Uint8Array} state_key - * @param {number} limit - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_read_events(ptr, event_type, state_key, limit) { - const ptr0 = passArray8ToWasm0(event_type, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(state_key, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_read_events(ptr, ptr0, len0, ptr1, len1, limit); - return BigInt.asUintN(64, ret); -} - -/** - * @param {any} vtable - */ -export function ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_logsink(vtable) { - wasm.ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_logsink(vtable); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} level - * @param {Uint8Array} target - * @param {Uint8Array} message - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_logsink_log(ptr, level, target, message, f_status_) { - const ptr0 = passArray8ToWasm0(level, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(target, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(message, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_logsink_log(ptr, ptr0, len0, ptr1, len1, ptr2, len2, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_matrixdrivercallback(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_matrixdrivercallback(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_matrixdrivercallback(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_matrixdrivercallback(handle, f_status_.__wbg_ptr); -} - -/** - * @param {any} vtable - */ -export function ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_matrixdrivercallback(vtable) { - wasm.ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_matrixdrivercallback(vtable); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} room_id - * @param {Uint8Array} event_type - * @param {Uint8Array} content_json - * @param {bigint} duration_ms - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_sticky_event(ptr, room_id, event_type, content_json, duration_ms) { - const ptr0 = passArray8ToWasm0(room_id, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(event_type, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(content_json, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_sticky_event(ptr, ptr0, len0, ptr1, len1, ptr2, len2, duration_ms); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} room_id - * @param {Uint8Array} event_type - * @param {Uint8Array} state_key - * @param {Uint8Array} content_json - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_state_event(ptr, room_id, event_type, state_key, content_json) { - const ptr0 = passArray8ToWasm0(room_id, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(event_type, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(state_key, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ptr3 = passArray8ToWasm0(content_json, wasm.__wbindgen_malloc); - const len3 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_state_event(ptr, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} room_id - * @param {Uint8Array} event_type - * @param {Uint8Array} content_json - * @param {bigint} delay_ms - * @param {Uint8Array} sticky_duration_ms - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_delayed_event(ptr, room_id, event_type, content_json, delay_ms, sticky_duration_ms) { - const ptr0 = passArray8ToWasm0(room_id, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(event_type, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(content_json, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ptr3 = passArray8ToWasm0(sticky_duration_ms, wasm.__wbindgen_malloc); - const len3 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_delayed_event(ptr, ptr0, len0, ptr1, len1, ptr2, len2, delay_ms, ptr3, len3); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} room_id - * @param {Uint8Array} event_type - * @param {Uint8Array} state_key - * @param {Uint8Array} content_json - * @param {bigint} delay_ms - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_delayed_state_event(ptr, room_id, event_type, state_key, content_json, delay_ms) { - const ptr0 = passArray8ToWasm0(room_id, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(event_type, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(state_key, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ptr3 = passArray8ToWasm0(content_json, wasm.__wbindgen_malloc); - const len3 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_send_delayed_state_event(ptr, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, delay_ms); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} event_type - * @param {Uint8Array} state_key - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_read_state(ptr, event_type, state_key) { - const ptr0 = passArray8ToWasm0(event_type, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(state_key, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_read_state(ptr, ptr0, len0, ptr1, len1); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {bigint} sink - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_room_events(ptr, sink, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_room_events(ptr, sink, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {bigint} sink - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_to_device_events(ptr, sink, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_to_device_events(ptr, sink, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {bigint} sink - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_state_updates(ptr, sink, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_state_updates(ptr, sink, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} event_json - * @param {Uint8Array} origin - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_roomeventsink_emit(ptr, event_json, origin, f_status_) { - const ptr0 = passArray8ToWasm0(event_json, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(origin, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_roomeventsink_emit(ptr, ptr0, len0, ptr1, len1, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_sessionlistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_sessionlistener(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_sessionlistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_sessionlistener(handle, f_status_.__wbg_ptr); -} - -/** - * @param {any} vtable - */ -export function ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_sessionlistener(vtable) { - wasm.ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_sessionlistener(vtable); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} session - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_sessionlistener_on_session_change(ptr, session, f_status_) { - const ptr0 = passArray8ToWasm0(session, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_sessionlistener_on_session_change(ptr, ptr0, len0, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_stateupdatesink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_stateupdatesink(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_stateupdatesink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_stateupdatesink(handle, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} events_json - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_stateupdatesink_emit(ptr, events_json, f_status_) { - const ptr0 = passArray8ToWasm0(events_json, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_stateupdatesink_emit(ptr, ptr0, len0, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_statuslistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_statuslistener(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_connectionslistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_connectionslistener(handle, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_is_homeserver_connected(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_is_homeserver_connected(ptr, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} ptr - * @param {bigint} sink - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_connectivity(ptr, sink, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_matrixdrivercallback_subscribe_connectivity(ptr, sink, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_membershipslistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_membershipslistener(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_membershipslistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_membershipslistener(handle, f_status_.__wbg_ptr); -} - -/** - * @param {any} vtable - */ -export function ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_membershipslistener(vtable) { - wasm.ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_membershipslistener(vtable); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} memberships - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_membershipslistener_on_memberships_change(ptr, memberships, f_status_) { - const ptr0 = passArray8ToWasm0(memberships, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_membershipslistener_on_memberships_change(ptr, ptr0, len0, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_roomeventsink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_roomeventsink(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_roomeventsink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_roomeventsink(handle, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_statuslistener(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_statuslistener(handle, f_status_.__wbg_ptr); -} - -/** - * @param {any} vtable - */ -export function ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_statuslistener(vtable) { - wasm.ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_statuslistener(vtable); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} status - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_statuslistener_on_status_change(ptr, status, f_status_) { - const ptr0 = passArray8ToWasm0(status, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_statuslistener_on_status_change(ptr, ptr0, len0, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_u8(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_u8(handle, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_i8(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_i8(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_i8(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_i8(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_i8(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_i8(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_i8(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_i8(handle, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_u16(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_u16(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_u16(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_u16(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_u16(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_u16(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_u16(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_u16(handle, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_todevicesink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_todevicesink(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_todevicesink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_todevicesink(handle, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} event_type - * @param {Uint8Array} sender - * @param {Uint8Array} content_json - * @param {Uint8Array} origin - * @param {Uint8Array} sender_cross_signed - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_todevicesink_emit(ptr, event_type, sender, content_json, origin, sender_cross_signed, f_status_) { - const ptr0 = passArray8ToWasm0(event_type, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(sender, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(content_json, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ptr3 = passArray8ToWasm0(origin, wasm.__wbindgen_malloc); - const len3 = WASM_VECTOR_LEN; - const ptr4 = passArray8ToWasm0(sender_cross_signed, wasm.__wbindgen_malloc); - const len4 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_todevicesink_emit(ptr, ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, ptr4, len4, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {Uint8Array} events_json - * @param {Uint8Array} compat - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_func_compute_sessions_from_events(events_json, compat, f_status_) { - const ptr0 = passArray8ToWasm0(events_json, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(compat, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_func_compute_sessions_from_events(ptr0, len0, ptr1, len1, f_status_.__wbg_ptr); - var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v3; -} - -/** - * @param {Uint8Array} impairment - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_func_impairment_severity(impairment, f_status_) { - const ptr0 = passArray8ToWasm0(impairment, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_func_impairment_severity(ptr0, len0, f_status_.__wbg_ptr); - var v2 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v2; -} - -/** - * @param {bigint} sink - * @param {Uint8Array} max_level - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_func_set_log_sink(sink, max_level, f_status_) { - const ptr0 = passArray8ToWasm0(max_level, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_func_set_log_sink(sink, ptr0, len0, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_u8(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_u8(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_u8(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_u8(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_u8(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_u8(handle); -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_i16(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_i16(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_i16(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_i16(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_i16(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_i16(handle); -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_u64(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_u64(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_u64(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_u64(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_u64(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_u64(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_u64(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_u64(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_i64(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_i64(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_i64(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_i64(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_i64(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_i64(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_i64(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_i64(handle, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_i16(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_i16(handle, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_u32(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_u32(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_u32(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_u32(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_u32(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_u32(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_u32(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_u32(handle, f_status_.__wbg_ptr); - return ret >>> 0; -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_i32(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_i32(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_i32(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_i32(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_i32(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_i32(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_i32(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_i32(handle, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_f32(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_f32(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_f32(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_f32(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_f32(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_f32(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_f32(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_f32(handle, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_void(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_void(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_void(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_void(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_void(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_void(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_void(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_ffi_matrix_rtc_rust_future_complete_void(handle, f_status_.__wbg_ptr); -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_func_compute_sessions_from_events() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_func_compute_sessions_from_events(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_func_impairment_severity() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_func_impairment_severity(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_func_set_log_sink() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_func_set_log_sink(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_connectionslistener_on_connections_change() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_connectionslistener_on_connections_change(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_connectivitysink_emit() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_connectivitysink_emit(); - return ret; -} - -/** - * @param {any} vtable - */ -export function ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_connectionslistener(vtable) { - wasm.ubrn_uniffi_matrix_rtc_fn_init_callback_vtable_connectionslistener(vtable); -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_f64(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_f64(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_f64(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_f64(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_f64(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_f64(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_f64(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_f64(handle, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {any} callback - * @param {bigint} callback_data - */ -export function ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer(handle, callback, callback_data) { - wasm.ubrn_ffi_matrix_rtc_rust_future_poll_rust_buffer(handle, callback, callback_data); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_cancel_rust_buffer(handle); -} - -/** - * @param {bigint} handle - */ -export function ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer(handle) { - wasm.ubrn_ffi_matrix_rtc_rust_future_free_rust_buffer(handle); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_ffi_matrix_rtc_rust_future_complete_rust_buffer(handle, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_close_slot() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_close_slot(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_connection_problems() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_connection_problems(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_connections() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_connections(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_transport_identity() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_transport_identity(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_session() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_session(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_connections_listener() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_connections_listener(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_key_map_listener() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_key_map_listener(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_key_rejected_listener() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_key_rejected_listener(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_memberships_listener() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_memberships_listener(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_session_listener() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_session_listener(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_status_listener() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_set_status_listener(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_status() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_status(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_debug_snapshot() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_debug_snapshot(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_is_homeserver_connected() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_is_homeserver_connected(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_join() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_join(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_key_map() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_key_map(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_leave() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_leave(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_memberships() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_memberships(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_open_slot() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_open_slot(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_member_id() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_member_id(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_membership() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_own_membership(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_update_application() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_ffiparticipationmanager_update_application(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_keymaplistener_on_key_map_change() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_keymaplistener_on_key_map_change(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_keyrejectedlistener_on_key_rejected() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_keyrejectedlistener_on_key_rejected(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_to_device() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_to_device(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_get_rtc_transports() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_get_rtc_transports(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_get_livekit_token() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_get_livekit_token(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_read_events() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_read_events(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_read_state() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_read_state(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_room_events() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_room_events(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_to_device_events() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_to_device_events(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_state_updates() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_state_updates(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_logsink_log() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_logsink_log(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_sticky_event() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_sticky_event(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_state_event() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_state_event(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_delayed_event() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_delayed_event(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_delayed_state_event() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_send_delayed_state_event(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_restart_delayed_event() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_restart_delayed_event(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_cancel_delayed_event() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_cancel_delayed_event(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_delegate_delayed_leave_via_homeserver() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_delegate_delayed_leave_via_homeserver(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_delegate_delayed_leave_via_transport() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_delegate_delayed_leave_via_transport(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_is_homeserver_connected() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_is_homeserver_connected(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_connectivity() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_matrixdrivercallback_subscribe_connectivity(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_membershipslistener_on_memberships_change() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_membershipslistener_on_memberships_change(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_roomeventsink_emit() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_roomeventsink_emit(); - return ret; -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} connections - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_method_connectionslistener_on_connections_change(ptr, connections, f_status_) { - const ptr0 = passArray8ToWasm0(connections, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_method_connectionslistener_on_connections_change(ptr, ptr0, len0, f_status_.__wbg_ptr); -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_sessionlistener_on_session_change() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_sessionlistener_on_session_change(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_stateupdatesink_emit() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_stateupdatesink_emit(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_statuslistener_on_status_change() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_statuslistener_on_status_change(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_method_todevicesink_emit() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_method_todevicesink_emit(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_constructor_ffimatrixdriver_new() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_constructor_ffimatrixdriver_new(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_checksum_constructor_ffiparticipationmanager_new() { - const ret = wasm.ubrn_uniffi_matrix_rtc_checksum_constructor_ffiparticipationmanager_new(); - return ret; -} - -/** - * @returns {number} - */ -export function ubrn_ffi_matrix_rtc_uniffi_contract_version() { - const ret = wasm.ubrn_ffi_matrix_rtc_uniffi_contract_version(); - return ret >>> 0; -} - -/** - * @param {Uint8Array} room_id - * @param {Uint8Array} slot_id - * @param {Uint8Array} user_id - * @param {Uint8Array} device_id - * @param {bigint} driver - * @param {Uint8Array} config - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_constructor_ffiparticipationmanager_new(room_id, slot_id, user_id, device_id, driver, config, f_status_) { - const ptr0 = passArray8ToWasm0(room_id, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(slot_id, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ptr2 = passArray8ToWasm0(user_id, wasm.__wbindgen_malloc); - const len2 = WASM_VECTOR_LEN; - const ptr3 = passArray8ToWasm0(device_id, wasm.__wbindgen_malloc); - const len3 = WASM_VECTOR_LEN; - const ptr4 = passArray8ToWasm0(config, wasm.__wbindgen_malloc); - const len4 = WASM_VECTOR_LEN; - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_constructor_ffiparticipationmanager_new(ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3, driver, ptr4, len4, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_close_slot(ptr) { - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_close_slot(ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_connection_problems(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_connection_problems(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_connections(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_connections(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_debug_snapshot(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_debug_snapshot(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_is_homeserver_connected(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_is_homeserver_connected(ptr, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} intent - * @param {Uint8Array} params - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_join(ptr, intent, params) { - const ptr0 = passArray8ToWasm0(intent, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(params, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_join(ptr, ptr0, len0, ptr1, len1); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} ptr - * @param {RustCallStatus} f_status_ - * @returns {Uint8Array} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_key_map(ptr, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_key_map(ptr, f_status_.__wbg_ptr); - var v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - return v1; -} - -/** - * @param {bigint} ptr - * @param {Uint8Array} code - * @param {Uint8Array} reason - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_leave(ptr, code, reason) { - const ptr0 = passArray8ToWasm0(code, wasm.__wbindgen_malloc); - const len0 = WASM_VECTOR_LEN; - const ptr1 = passArray8ToWasm0(reason, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_ffiparticipationmanager_leave(ptr, ptr0, len0, ptr1, len1); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_connectivitysink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_connectivitysink(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_connectivitysink(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_connectivitysink(handle, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} ptr - * @param {number} connected - * @param {RustCallStatus} f_status_ - * @returns {number} - */ -export function ubrn_uniffi_matrix_rtc_fn_method_connectivitysink_emit(ptr, connected, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_method_connectivitysink_emit(ptr, connected, f_status_.__wbg_ptr); - return ret; -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_ffimatrixdriver(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_ffimatrixdriver(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_ffimatrixdriver(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_ffimatrixdriver(handle, f_status_.__wbg_ptr); -} - -/** - * @param {bigint} callback - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_constructor_ffimatrixdriver_new(callback, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_constructor_ffimatrixdriver_new(callback, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - * @returns {bigint} - */ -export function ubrn_uniffi_matrix_rtc_fn_clone_ffiparticipationmanager(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - const ret = wasm.ubrn_uniffi_matrix_rtc_fn_clone_ffiparticipationmanager(handle, f_status_.__wbg_ptr); - return BigInt.asUintN(64, ret); -} - -/** - * @param {bigint} handle - * @param {RustCallStatus} f_status_ - */ -export function ubrn_uniffi_matrix_rtc_fn_free_ffiparticipationmanager(handle, f_status_) { - _assertClass(f_status_, RustCallStatus); - wasm.ubrn_uniffi_matrix_rtc_fn_free_ffiparticipationmanager(handle, f_status_.__wbg_ptr); -} - -function __wbg_adapter_24(arg0, arg1) { - wasm._dyn_core_e48f7a02345547b9___ops__function__FnMut_____Output______as_wasm_bindgen_65e498d0bf4959ae___closure__WasmClosure___describe__invoke______(arg0, arg1); -} - -function __wbg_adapter_27(arg0, arg1, arg2) { - wasm.closure572_externref_shim(arg0, arg1, arg2); -} - -const ForeignFutureCompleteF32Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompletef32_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteF32 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteF32Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompletef32_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteF32} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteF32); - wasm.foreignfuturecompletef32_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteF64Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompletef64_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteF64 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteF64Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompletef64_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteF64} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteF64); - wasm.foreignfuturecompletef64_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteI16Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompletei16_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteI16 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteI16Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompletei16_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteI16} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteI16); - wasm.foreignfuturecompletei16_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteI32Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompletei32_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteI32 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteI32Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompletei32_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteI32} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteI32); - wasm.foreignfuturecompletei32_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteI64Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompletei64_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteI64 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteI64Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompletei64_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteI64} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteI64); - wasm.foreignfuturecompletei64_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteI8Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompletei8_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteI8 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteI8Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompletei8_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteI8} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteI8); - wasm.foreignfuturecompletei8_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteRustBufferFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompleterustbuffer_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteRustBuffer { - - static __wrap(ptr) { - ptr = ptr >>> 0; - const obj = Object.create(ForeignFutureCompleteRustBuffer.prototype); - obj.__wbg_ptr = ptr; - ForeignFutureCompleteRustBufferFinalization.register(obj, obj.__wbg_ptr, obj); - return obj; - } - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteRustBufferFinalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompleterustbuffer_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteRustBuffer} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteRustBuffer); - wasm.foreignfuturecompleterustbuffer_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteU16Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompleteu16_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteU16 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteU16Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompleteu16_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteU16} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteU16); - wasm.foreignfuturecompleteu16_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteU32Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompleteu32_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteU32 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteU32Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompleteu32_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteU32} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteU32); - wasm.foreignfuturecompleteu32_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteU64Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompleteu64_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteU64 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteU64Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompleteu64_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteU64} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteU64); - wasm.foreignfuturecompleteu64_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteU8Finalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompleteu8_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteU8 { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteU8Finalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompleteu8_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteU8} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteU8); - wasm.foreignfuturecompleteu8_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const ForeignFutureCompleteVoidFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_foreignfuturecompletevoid_free(ptr >>> 0, 1)); - -export class ForeignFutureCompleteVoid { - - static __wrap(ptr) { - ptr = ptr >>> 0; - const obj = Object.create(ForeignFutureCompleteVoid.prototype); - obj.__wbg_ptr = ptr; - ForeignFutureCompleteVoidFinalization.register(obj, obj.__wbg_ptr, obj); - return obj; - } - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - ForeignFutureCompleteVoidFinalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_foreignfuturecompletevoid_free(ptr, 0); - } - /** - * @param {ForeignFutureCompleteVoid} _ctx - * @param {bigint} callback_data - * @param {any} result - */ - call(_ctx, callback_data, result) { - _assertClass(_ctx, ForeignFutureCompleteVoid); - wasm.foreignfuturecompletevoid_call(this.__wbg_ptr, _ctx.__wbg_ptr, callback_data, result); - } -} - -const RustCallStatusFinalization = (typeof FinalizationRegistry === 'undefined') - ? { register: () => {}, unregister: () => {} } - : new FinalizationRegistry(ptr => wasm.__wbg_rustcallstatus_free(ptr >>> 0, 1)); - -export class RustCallStatus { - - __destroy_into_raw() { - const ptr = this.__wbg_ptr; - this.__wbg_ptr = 0; - RustCallStatusFinalization.unregister(this); - return ptr; - } - - free() { - const ptr = this.__destroy_into_raw(); - wasm.__wbg_rustcallstatus_free(ptr, 0); - } - /** - * @returns {number} - */ - get code() { - const ret = wasm.__wbg_get_rustcallstatus_code(this.__wbg_ptr); - return ret; - } - /** - * @param {number} arg0 - */ - set code(arg0) { - wasm.__wbg_set_rustcallstatus_code(this.__wbg_ptr, arg0); - } - /** - * @param {Uint8Array | null} [bytes] - */ - set errorBuf(bytes) { - var ptr0 = isLikeNone(bytes) ? 0 : passArray8ToWasm0(bytes, wasm.__wbindgen_malloc); - var len0 = WASM_VECTOR_LEN; - wasm.rustcallstatus_set_error_buf(this.__wbg_ptr, ptr0, len0); - } - constructor() { - const ret = wasm.rustcallstatus_new(); - this.__wbg_ptr = ret >>> 0; - RustCallStatusFinalization.register(this, this.__wbg_ptr, this); - return this; - } - /** - * @returns {Uint8Array | undefined} - */ - get errorBuf() { - const ptr = this.__destroy_into_raw(); - const ret = wasm.rustcallstatus_error_buf(ptr); - let v1; - if (ret[0] !== 0) { - v1 = getArrayU8FromWasm0(ret[0], ret[1]).slice(); - wasm.__wbindgen_free(ret[0], ret[1] * 1, 1); - } - return v1; - } -} - -async function __wbg_load(module, imports) { - if (typeof Response === 'function' && module instanceof Response) { - if (typeof WebAssembly.instantiateStreaming === 'function') { - try { - return await WebAssembly.instantiateStreaming(module, imports); - - } catch (e) { - if (module.headers.get('Content-Type') != 'application/wasm') { - console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); - - } else { - throw e; - } - } - } - - const bytes = await module.arrayBuffer(); - return await WebAssembly.instantiate(bytes, imports); - - } else { - const instance = await WebAssembly.instantiate(module, imports); - - if (instance instanceof WebAssembly.Instance) { - return { instance, module }; - - } else { - return instance; - } - } -} - -function __wbg_get_imports() { - const imports = {}; - imports.wbg = {}; - imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) { - const ret = arg0.buffer; - return ret; - }; - imports.wbg.__wbg_call_0056921d632def66 = function(arg0, arg1, arg2) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2)); - return ret; - }; - imports.wbg.__wbg_call_00ed0f3262ca10fc = function(arg0, arg1, arg2) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2)); - return ret; - }; - imports.wbg.__wbg_call_02529374d31ad97c = function(arg0, arg1, arg2) { - arg0.call(arg1, BigInt.asUintN(64, arg2)); - }; - imports.wbg.__wbg_call_03c16dfcbc9e20c2 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, ForeignFutureCompleteRustBuffer.__wrap(arg5), BigInt.asUintN(64, arg6)); - return ret; - }; - imports.wbg.__wbg_call_0433755a93443d6e = function(arg0, arg1, arg2, arg3) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), BigInt.asUintN(64, arg3)); - return ret; - }; - imports.wbg.__wbg_call_21960420ca81bc05 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - var v2 = getArrayU8FromWasm0(arg7, arg8).slice(); - wasm.__wbindgen_free(arg7, arg8 * 1, 1); - var v3 = getArrayU8FromWasm0(arg9, arg10).slice(); - wasm.__wbindgen_free(arg9, arg10 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, v2, v3, ForeignFutureCompleteRustBuffer.__wrap(arg11), BigInt.asUintN(64, arg12)); - return ret; - }; - imports.wbg.__wbg_call_2317578a4ec85f27 = function(arg0, arg1, arg2) { - arg0.call(arg1, BigInt.asUintN(64, arg2)); - }; - imports.wbg.__wbg_call_2798409ff618ef7d = function(arg0, arg1, arg2) { - arg0.call(arg1, BigInt.asUintN(64, arg2)); - }; - imports.wbg.__wbg_call_2f24f710f0dd8d10 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1); - return ret; - }; - imports.wbg.__wbg_call_4022622bc30aaf84 = function(arg0, arg1, arg2) { - arg0.call(arg1, BigInt.asUintN(64, arg2)); - }; - imports.wbg.__wbg_call_45ca295cb4469524 = function(arg0, arg1, arg2, arg3) { - arg0.call(arg1, BigInt.asUintN(64, arg2), arg3); - }; - imports.wbg.__wbg_call_4614c0a573de577f = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - var v2 = getArrayU8FromWasm0(arg7, arg8).slice(); - wasm.__wbindgen_free(arg7, arg8 * 1, 1); - var v3 = getArrayU8FromWasm0(arg9, arg10).slice(); - wasm.__wbindgen_free(arg9, arg10 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, v2, v3, BigInt.asUintN(64, arg11), ForeignFutureCompleteRustBuffer.__wrap(arg12), BigInt.asUintN(64, arg13)); - return ret; - }; - imports.wbg.__wbg_call_5718592162c98368 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - var v2 = getArrayU8FromWasm0(arg7, arg8).slice(); - wasm.__wbindgen_free(arg7, arg8 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, v2, ForeignFutureCompleteRustBuffer.__wrap(arg9), BigInt.asUintN(64, arg10)); - return ret; - }; - imports.wbg.__wbg_call_63c160b52f6d962d = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - var v2 = getArrayU8FromWasm0(arg7, arg8).slice(); - wasm.__wbindgen_free(arg7, arg8 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, v2); - return ret; - }; - imports.wbg.__wbg_call_65360e4d1b0f41fa = function(arg0, arg1, arg2) { - arg0.call(arg1, BigInt.asUintN(64, arg2)); - }; - imports.wbg.__wbg_call_672a4d21634d4a24 = function() { return handleError(function (arg0, arg1) { - const ret = arg0.call(arg1); - return ret; - }, arguments) }; - imports.wbg.__wbg_call_6791e83bb1bb6601 = function(arg0, arg1, arg2) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2)); - return ret; - }; - imports.wbg.__wbg_call_67bcb4b184601516 = function(arg0, arg1, arg2) { - arg0.call(arg1, BigInt.asUintN(64, arg2)); - }; - imports.wbg.__wbg_call_79e16370d6861b4f = function(arg0, arg1, arg2, arg3, arg4) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0); - return ret; - }; - imports.wbg.__wbg_call_7cccdd69e0791ae2 = function() { return handleError(function (arg0, arg1, arg2) { - const ret = arg0.call(arg1, arg2); - return ret; - }, arguments) }; - imports.wbg.__wbg_call_87edfa0175375a83 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, ForeignFutureCompleteRustBuffer.__wrap(arg7), BigInt.asUintN(64, arg8)); - return ret; - }; - imports.wbg.__wbg_call_9108746ed497928f = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, arg7 >>> 0, ForeignFutureCompleteRustBuffer.__wrap(arg8), BigInt.asUintN(64, arg9)); - return ret; - }; - imports.wbg.__wbg_call_94b3adcf4a0499cf = function(arg0, arg1, arg2) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2)); - return ret; - }; - imports.wbg.__wbg_call_98882f14cac8324a = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, ForeignFutureCompleteVoid.__wrap(arg5), BigInt.asUintN(64, arg6)); - return ret; - }; - imports.wbg.__wbg_call_9a894f10d06a53c9 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, ForeignFutureCompleteVoid.__wrap(arg7), BigInt.asUintN(64, arg8)); - return ret; - }; - imports.wbg.__wbg_call_9f7a841426436a44 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, ForeignFutureCompleteVoid.__wrap(arg7), BigInt.asUintN(64, arg8)); - return ret; - }; - imports.wbg.__wbg_call_a6145cafbb6c59f0 = function(arg0, arg1, arg2) { - arg0.call(arg1, BigInt.asUintN(64, arg2)); - }; - imports.wbg.__wbg_call_a79f116fab0f1a0a = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1); - return ret; - }; - imports.wbg.__wbg_call_abeb9928262c69b8 = function(arg0, arg1, arg2, arg3, arg4) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0); - return ret; - }; - imports.wbg.__wbg_call_ac8db65a5eb7c738 = function(arg0, arg1, arg2, arg3, arg4) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), ForeignFutureCompleteRustBuffer.__wrap(arg3), BigInt.asUintN(64, arg4)); - return ret; - }; - imports.wbg.__wbg_call_b66d526ecf55c81d = function(arg0, arg1, arg2) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2)); - return ret; - }; - imports.wbg.__wbg_call_b9d1054c432bc102 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, ForeignFutureCompleteVoid.__wrap(arg5), BigInt.asUintN(64, arg6)); - return ret; - }; - imports.wbg.__wbg_call_bd656bf95b67af57 = function(arg0, arg1, arg2, arg3, arg4) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0); - return ret; - }; - imports.wbg.__wbg_call_c7fa2ece3851d664 = function(arg0, arg1, arg2) { - arg0.call(arg1, BigInt.asUintN(64, arg2)); - }; - imports.wbg.__wbg_call_c9c4e766b640b52d = function(arg0, arg1, arg2, arg3) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), BigInt.asUintN(64, arg3)); - return ret; - }; - imports.wbg.__wbg_call_ca06027b14b17766 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - var v2 = getArrayU8FromWasm0(arg7, arg8).slice(); - wasm.__wbindgen_free(arg7, arg8 * 1, 1); - var v3 = getArrayU8FromWasm0(arg10, arg11).slice(); - wasm.__wbindgen_free(arg10, arg11 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, v2, BigInt.asUintN(64, arg9), v3, ForeignFutureCompleteRustBuffer.__wrap(arg12), BigInt.asUintN(64, arg13)); - return ret; - }; - imports.wbg.__wbg_call_db19d6a7a08fbd37 = function(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - var v1 = getArrayU8FromWasm0(arg5, arg6).slice(); - wasm.__wbindgen_free(arg5, arg6 * 1, 1); - var v2 = getArrayU8FromWasm0(arg7, arg8).slice(); - wasm.__wbindgen_free(arg7, arg8 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0, v1, v2, BigInt.asUintN(64, arg9), ForeignFutureCompleteRustBuffer.__wrap(arg10), BigInt.asUintN(64, arg11)); - return ret; - }; - imports.wbg.__wbg_call_df53672c5883e9e7 = function(arg0, arg1, arg2, arg3, arg4) { - var v0 = getArrayU8FromWasm0(arg3, arg4).slice(); - wasm.__wbindgen_free(arg3, arg4 * 1, 1); - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), v0); - return ret; - }; - imports.wbg.__wbg_call_e1d35efce0e1a1e6 = function(arg0, arg1, arg2) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2)); - return ret; - }; - imports.wbg.__wbg_call_e561c9090f51461d = function(arg0, arg1, arg2, arg3) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), BigInt.asUintN(64, arg3)); - return ret; - }; - imports.wbg.__wbg_call_f95ee156aae25631 = function(arg0, arg1, arg2) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2)); - return ret; - }; - imports.wbg.__wbg_call_fb7f89f8d567b160 = function(arg0, arg1, arg2) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2)); - return ret; - }; - imports.wbg.__wbg_call_fedc2bfb0eb6df90 = function(arg0, arg1, arg2) { - arg0.call(arg1, BigInt.asUintN(64, arg2)); - }; - imports.wbg.__wbg_call_ff7e7c3b656ecebf = function(arg0, arg1, arg2) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2)); - return ret; - }; - imports.wbg.__wbg_call_ffd94e4913c24a7a = function(arg0, arg1, arg2, arg3) { - const ret = arg0.call(arg1, BigInt.asUintN(64, arg2), BigInt.asUintN(64, arg3)); - return ret; - }; - imports.wbg.__wbg_callstatus_ab813cdd9fb59b5c = function(arg0) { - const ret = arg0.call_status; - _assertClass(ret, RustCallStatus); - var ptr1 = ret.__destroy_into_raw(); - return ptr1; - }; - imports.wbg.__wbg_canceldelayedevent_f1442079ae4bb697 = function(arg0) { - const ret = arg0.cancel_delayed_event; - return ret; - }; - imports.wbg.__wbg_clearTimeout_5a54f8841c30079a = function(arg0) { - const ret = clearTimeout(arg0); - return ret; - }; - imports.wbg.__wbg_code_a1790f546af56cdc = function(arg0) { - const ret = arg0.code; - return ret; - }; - imports.wbg.__wbg_code_b18c52258a7d4327 = function(arg0) { - const ret = arg0.code; - return ret; - }; - imports.wbg.__wbg_crypto_86f2631e91b51511 = function(arg0) { - const ret = arg0.crypto; - return ret; - }; - imports.wbg.__wbg_delegatedelayedleaveviahomeserver_d871a6b6bc347229 = function(arg0) { - const ret = arg0.delegate_delayed_leave_via_homeserver; - return ret; - }; - imports.wbg.__wbg_delegatedelayedleaveviatransport_aa4b046ef4e220a1 = function(arg0) { - const ret = arg0.delegate_delayed_leave_via_transport; - return ret; - }; - imports.wbg.__wbg_errorbuf_59fafcd45c02f900 = function(arg0, arg1) { - const ret = arg1.errorBuf; - var ptr1 = isLikeNone(ret) ? 0 : passArray8ToWasm0(ret, wasm.__wbindgen_malloc); - var len1 = WASM_VECTOR_LEN; - getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); - getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); - }; - imports.wbg.__wbg_errorbuf_9e8687be915296d2 = function(arg0, arg1) { - const ret = arg1.errorBuf; - var ptr1 = isLikeNone(ret) ? 0 : passArray8ToWasm0(ret, wasm.__wbindgen_malloc); - var len1 = WASM_VECTOR_LEN; - getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); - getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); - }; - imports.wbg.__wbg_free_b85a6024660bd07c = function(arg0) { - const ret = arg0.free; - return ret; - }; - imports.wbg.__wbg_getRandomValues_b3f15fcbfabb0f8b = function() { return handleError(function (arg0, arg1) { - arg0.getRandomValues(arg1); - }, arguments) }; - imports.wbg.__wbg_getlivekittoken_5f81591c0acaddc6 = function(arg0) { - const ret = arg0.get_livekit_token; - return ret; - }; - imports.wbg.__wbg_getrtctransports_3911836191336767 = function(arg0) { - const ret = arg0.get_rtc_transports; - return ret; - }; - imports.wbg.__wbg_handle_c2870606e589531b = function(arg0) { - const ret = arg0.handle; - return ret; - }; - imports.wbg.__wbg_ishomeserverconnected_751e70b3c02b3223 = function(arg0) { - const ret = arg0.is_homeserver_connected; - return ret; - }; - imports.wbg.__wbg_log_f27a8f2ebe07bb7c = function(arg0) { - const ret = arg0.log; - return ret; - }; - imports.wbg.__wbg_msCrypto_d562bbe83e0d4b91 = function(arg0) { - const ret = arg0.msCrypto; - return ret; - }; - imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) { - const ret = new Uint8Array(arg0); - return ret; - }; - imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) { - const ret = new Function(getStringFromWasm0(arg0, arg1)); - return ret; - }; - imports.wbg.__wbg_newwithbyteoffsetandlength_d97e637ebe145a9a = function(arg0, arg1, arg2) { - const ret = new Uint8Array(arg0, arg1 >>> 0, arg2 >>> 0); - return ret; - }; - imports.wbg.__wbg_newwithlength_a381634e90c276d4 = function(arg0) { - const ret = new Uint8Array(arg0 >>> 0); - return ret; - }; - imports.wbg.__wbg_node_e1f24f89a7336c2e = function(arg0) { - const ret = arg0.node; - return ret; - }; - imports.wbg.__wbg_now_807e54c39636c349 = function() { - const ret = Date.now(); - return ret; - }; - imports.wbg.__wbg_onconnectionschange_cb540732b536bde5 = function(arg0) { - const ret = arg0.on_connections_change; - return ret; - }; - imports.wbg.__wbg_onkeymapchange_7af99be63015699f = function(arg0) { - const ret = arg0.on_key_map_change; - return ret; - }; - imports.wbg.__wbg_onkeyrejected_0811c486ecda07ea = function(arg0) { - const ret = arg0.on_key_rejected; - return ret; - }; - imports.wbg.__wbg_onmembershipschange_72a01e47629908a2 = function(arg0) { - const ret = arg0.on_memberships_change; - return ret; - }; - imports.wbg.__wbg_onsessionchange_799b89dbe5987804 = function(arg0) { - const ret = arg0.on_session_change; - return ret; - }; - imports.wbg.__wbg_onstatuschange_926e83644f91f32d = function(arg0) { - const ret = arg0.on_status_change; - return ret; - }; - imports.wbg.__wbg_pointee_26637032edb8983c = function(arg0) { - const ret = arg0.pointee; - return isLikeNone(ret) ? 0xFFFFFF : ret; - }; - imports.wbg.__wbg_process_3975fd6c72f520aa = function(arg0) { - const ret = arg0.process; - return ret; - }; - imports.wbg.__wbg_queueMicrotask_97d92b4fcc8a61c5 = function(arg0) { - queueMicrotask(arg0); - }; - imports.wbg.__wbg_queueMicrotask_d3219def82552485 = function(arg0) { - const ret = arg0.queueMicrotask; - return ret; - }; - imports.wbg.__wbg_randomFillSync_f8c153b79f285817 = function() { return handleError(function (arg0, arg1) { - arg0.randomFillSync(arg1); - }, arguments) }; - imports.wbg.__wbg_readevents_73801c97c6d3e238 = function(arg0) { - const ret = arg0.read_events; - return ret; - }; - imports.wbg.__wbg_readstate_98bb4b03f7217a30 = function(arg0) { - const ret = arg0.read_state; - return ret; - }; - imports.wbg.__wbg_require_b74f47fc2d022fd6 = function() { return handleError(function () { - const ret = module.require; - return ret; - }, arguments) }; - imports.wbg.__wbg_resolve_4851785c9c5f573d = function(arg0) { - const ret = Promise.resolve(arg0); - return ret; - }; - imports.wbg.__wbg_restartdelayedevent_0d0c2a4a4627841f = function(arg0) { - const ret = arg0.restart_delayed_event; - return ret; - }; - imports.wbg.__wbg_returnvalue_03774948f0205329 = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_returnvalue_21195623004109c3 = function(arg0, arg1) { - const ret = arg1.return_value; - const ptr1 = passArray8ToWasm0(ret, wasm.__wbindgen_malloc); - const len1 = WASM_VECTOR_LEN; - getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); - getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); - }; - imports.wbg.__wbg_returnvalue_2620087eeddb8b84 = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_returnvalue_38e0584d82a3ca2e = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_returnvalue_3e9d3c06adc527d8 = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_returnvalue_6e396db732507afb = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_returnvalue_7debfc20c2457c0f = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_returnvalue_92b4f6af41751b5a = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_returnvalue_a10e08181b6e3347 = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_returnvalue_b2583433f7d5bc58 = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_returnvalue_fe6442da8edb6e26 = function(arg0) { - const ret = arg0.return_value; - return ret; - }; - imports.wbg.__wbg_senddelayedevent_1a17e9af52ac70ce = function(arg0) { - const ret = arg0.send_delayed_event; - return ret; - }; - imports.wbg.__wbg_senddelayedstateevent_7310e92bccc3dd9a = function(arg0) { - const ret = arg0.send_delayed_state_event; - return ret; - }; - imports.wbg.__wbg_sendstateevent_b46311c2c989f673 = function(arg0) { - const ret = arg0.send_state_event; - return ret; - }; - imports.wbg.__wbg_sendstickyevent_ae6f44183a0c7825 = function(arg0) { - const ret = arg0.send_sticky_event; - return ret; - }; - imports.wbg.__wbg_sendtodevice_7aac4e0ebd535903 = function(arg0) { - const ret = arg0.send_to_device; - return ret; - }; - imports.wbg.__wbg_setTimeout_db2dbaeefb6f39c7 = function() { return handleError(function (arg0, arg1) { - const ret = setTimeout(arg0, arg1); - return ret; - }, arguments) }; - imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) { - arg0.set(arg1, arg2 >>> 0); - }; - imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() { - const ret = typeof global === 'undefined' ? null : global; - return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); - }; - imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() { - const ret = typeof globalThis === 'undefined' ? null : globalThis; - return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); - }; - imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() { - const ret = typeof self === 'undefined' ? null : self; - return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); - }; - imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() { - const ret = typeof window === 'undefined' ? null : window; - return isLikeNone(ret) ? 0 : addToExternrefTable0(ret); - }; - imports.wbg.__wbg_subarray_aa9065fa9dc5df96 = function(arg0, arg1, arg2) { - const ret = arg0.subarray(arg1 >>> 0, arg2 >>> 0); - return ret; - }; - imports.wbg.__wbg_subscribeconnectivity_8fdd26bf00625517 = function(arg0) { - const ret = arg0.subscribe_connectivity; - return ret; - }; - imports.wbg.__wbg_subscriberoomevents_d547d19b370bf4a1 = function(arg0) { - const ret = arg0.subscribe_room_events; - return ret; - }; - imports.wbg.__wbg_subscribestateupdates_376ee2dec3ce8226 = function(arg0) { - const ret = arg0.subscribe_state_updates; - return ret; - }; - imports.wbg.__wbg_subscribetodeviceevents_a2b80a0df19c8813 = function(arg0) { - const ret = arg0.subscribe_to_device_events; - return ret; - }; - imports.wbg.__wbg_then_44b73946d2fb3e7d = function(arg0, arg1) { - const ret = arg0.then(arg1); - return ret; - }; - imports.wbg.__wbg_unifficlone_25a64f9a81fb5b28 = function(arg0) { - const ret = arg0.uniffi_clone; - return ret; - }; - imports.wbg.__wbg_unifficlone_6471a1309ee8fc26 = function(arg0) { - const ret = arg0.uniffi_clone; - return ret; - }; - imports.wbg.__wbg_unifficlone_6b800bc71dff8203 = function(arg0) { - const ret = arg0.uniffi_clone; - return ret; - }; - imports.wbg.__wbg_unifficlone_95a28cf009142cf6 = function(arg0) { - const ret = arg0.uniffi_clone; - return ret; - }; - imports.wbg.__wbg_unifficlone_9de5c992227b473d = function(arg0) { - const ret = arg0.uniffi_clone; - return ret; - }; - imports.wbg.__wbg_unifficlone_f4e9653dc2b93c0c = function(arg0) { - const ret = arg0.uniffi_clone; - return ret; - }; - imports.wbg.__wbg_unifficlone_f8d7fe966d3a99d9 = function(arg0) { - const ret = arg0.uniffi_clone; - return ret; - }; - imports.wbg.__wbg_unifficlone_fe0240768db0e3d6 = function(arg0) { - const ret = arg0.uniffi_clone; - return ret; - }; - imports.wbg.__wbg_uniffifree_00c9e670fc140d79 = function(arg0) { - const ret = arg0.uniffi_free; - return ret; - }; - imports.wbg.__wbg_uniffifree_2b26526e84ac127f = function(arg0) { - const ret = arg0.uniffi_free; - return ret; - }; - imports.wbg.__wbg_uniffifree_313a3d469f2be86d = function(arg0) { - const ret = arg0.uniffi_free; - return ret; - }; - imports.wbg.__wbg_uniffifree_7f877a9bb1d1f761 = function(arg0) { - const ret = arg0.uniffi_free; - return ret; - }; - imports.wbg.__wbg_uniffifree_8bebc19643df1faf = function(arg0) { - const ret = arg0.uniffi_free; - return ret; - }; - imports.wbg.__wbg_uniffifree_af6c094a1e08186f = function(arg0) { - const ret = arg0.uniffi_free; - return ret; - }; - imports.wbg.__wbg_uniffifree_b48fc51f60f5be76 = function(arg0) { - const ret = arg0.uniffi_free; - return ret; - }; - imports.wbg.__wbg_uniffifree_c315e1fbfd7f9e6a = function(arg0) { - const ret = arg0.uniffi_free; - return ret; - }; - imports.wbg.__wbg_versions_4e31226f5e8dc909 = function(arg0) { - const ret = arg0.versions; - return ret; - }; - imports.wbg.__wbindgen_cb_drop = function(arg0) { - const obj = arg0.original; - if (obj.cnt-- == 1) { - obj.a = 0; - return true; - } - const ret = false; - return ret; - }; - imports.wbg.__wbindgen_closure_wrapper2297 = function(arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 561, __wbg_adapter_24); - return ret; - }; - imports.wbg.__wbindgen_closure_wrapper2321 = function(arg0, arg1, arg2) { - const ret = makeMutClosure(arg0, arg1, 573, __wbg_adapter_27); - return ret; - }; - imports.wbg.__wbindgen_init_externref_table = function() { - const table = wasm.__wbindgen_export_3; - const offset = table.grow(4); - table.set(0, undefined); - table.set(offset + 0, undefined); - table.set(offset + 1, null); - table.set(offset + 2, true); - table.set(offset + 3, false); - ; - }; - imports.wbg.__wbindgen_is_function = function(arg0) { - const ret = typeof(arg0) === 'function'; - return ret; - }; - imports.wbg.__wbindgen_is_object = function(arg0) { - const val = arg0; - const ret = typeof(val) === 'object' && val !== null; - return ret; - }; - imports.wbg.__wbindgen_is_string = function(arg0) { - const ret = typeof(arg0) === 'string'; - return ret; - }; - imports.wbg.__wbindgen_is_undefined = function(arg0) { - const ret = arg0 === undefined; - return ret; - }; - imports.wbg.__wbindgen_memory = function() { - const ret = wasm.memory; - return ret; - }; - imports.wbg.__wbindgen_string_new = function(arg0, arg1) { - const ret = getStringFromWasm0(arg0, arg1); - return ret; - }; - imports.wbg.__wbindgen_throw = function(arg0, arg1) { - throw new Error(getStringFromWasm0(arg0, arg1)); - }; - - return imports; -} - -function __wbg_init_memory(imports, memory) { - -} - -function __wbg_finalize_init(instance, module) { - wasm = instance.exports; - __wbg_init.__wbindgen_wasm_module = module; - cachedDataViewMemory0 = null; - cachedUint8ArrayMemory0 = null; - - - wasm.__wbindgen_start(); - return wasm; -} - -function initSync(module) { - if (wasm !== undefined) return wasm; - - - if (typeof module !== 'undefined') { - if (Object.getPrototypeOf(module) === Object.prototype) { - ({module} = module) - } else { - console.warn('using deprecated parameters for `initSync()`; pass a single object instead') - } - } - - const imports = __wbg_get_imports(); - - __wbg_init_memory(imports); - - if (!(module instanceof WebAssembly.Module)) { - module = new WebAssembly.Module(module); - } - - const instance = new WebAssembly.Instance(module, imports); - - return __wbg_finalize_init(instance, module); -} - -async function __wbg_init(module_or_path) { - if (wasm !== undefined) return wasm; - - - if (typeof module_or_path !== 'undefined') { - if (Object.getPrototypeOf(module_or_path) === Object.prototype) { - ({module_or_path} = module_or_path) - } else { - console.warn('using deprecated parameters for the initialization function; pass a single object instead') - } - } - - - const imports = __wbg_get_imports(); - - if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { - module_or_path = fetch(module_or_path); - } - - __wbg_init_memory(imports); - - const { instance, module } = await __wbg_load(await module_or_path, imports); - - return __wbg_finalize_init(instance, module); -} - -export { initSync }; -export default __wbg_init; diff --git a/src/matrix-rtc-sdk/generated/wasm-bindgen/index_bg.wasm b/src/matrix-rtc-sdk/generated/wasm-bindgen/index_bg.wasm deleted file mode 100644 index 24fdf7b662213247fad432f1d3123f622235f70b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1609348 zcmdpf34Bvk+V{=YEjP(clctn4tvCat%p_@6X679NR7BaP)MegxzBgpmR%o#;F5l~D zRZvt^6i`%D6ja=C$90M;Dk|={
i%P8*O|2gO0ByDeU)7J0z`+i^0oOACz=XuU~ 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 z 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

m-5n2?9XSDC#Ld+4@^yRE1hB0c6+odC&Zhx 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 RlbweOB>R-oCSH6c|P#e=e0M)Y~6HO7feYlEdZ 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

#l(swazVSq&nRq34nsi&MWxX7l)oO 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

SR84{XeRsk)J$dVx4U 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�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

BeAct+^bzZG%={MmPNKkHm@aSEdp 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 diff --git a/src/matrix-rtc-sdk/index.ts b/src/matrix-rtc-sdk/index.ts index f14e4255a..92d924197 100644 --- a/src/matrix-rtc-sdk/index.ts +++ b/src/matrix-rtc-sdk/index.ts @@ -7,17 +7,18 @@ Please see LICENSE in the repository root for full details. /** * The MatrixRTC SDK: the Rust `matrix-rtc` crate through its uniffi web - * bindings. Everything Element Call needs to *participate* in a MatrixRTC - * session — the session projection, our own membership with its keep-alive, - * transport tokens and the media key exchange — lives in the crate; this - * module loads it and re-exports the surface Element Call uses. + * bindings, shipped as the `@element-hq/matrix-rtc` npm package. Everything + * Element Call needs to *participate* in a MatrixRTC session — the session + * projection, our own membership with its keep-alive, transport tokens and + * the media key exchange — lives in the crate; this module loads it and + * re-exports the surface Element Call uses. * - * The bindings under `generated/` are vendored by - * `scripts/sync-matrix-rtc-sdk.sh` and never edited by hand. + * Nothing else imports the package directly: the boot below is the one place + * the wasm is loaded and the crate's logging is wired up, so a caller cannot + * end up with a silent or half-initialised SDK. */ -import initAsync, { type InitInput } from "./generated/wasm-bindgen/index.js"; -import bindings from "./generated/matrix_rtc"; +import { initAsync, type WasmSource } from "@element-hq/matrix-rtc"; import { installMatrixRtcLogSink } from "./logSink"; export { @@ -38,7 +39,7 @@ export { FfiTransportIntent, RtcError, computeSessionsFromEvents, -} from "./generated/matrix_rtc"; +} from "@element-hq/matrix-rtc"; export type { FfiConnectionData, FfiConnectionWithMembers, @@ -62,14 +63,14 @@ export type { RoomEventSinkLike, StateUpdateSinkLike, ToDeviceSinkLike, -} from "./generated/matrix_rtc"; +} from "@element-hq/matrix-rtc"; /** * Where to load the wasm from. A URL (or anything `fetch` accepts) in a * browser; bytes or a compiled module where there is nothing to fetch from, * such as tests. */ -export type MatrixRtcWasmSource = InitInput; +export type MatrixRtcWasmSource = WasmSource; let loading: Promise | null = null; @@ -77,25 +78,28 @@ let loading: Promise | null = null; * Loads and initialises the SDK. Idempotent: the first call decides the * source, later calls await the same load. * - * Without a `source`, the wasm is the one bundled next to this module (an - * asset URL in the app builds). A host that serves the file from somewhere - * else, or a test runner with no server, passes its own. + * Without a `source`, the wasm is the package's own copy as the bundler + * placed it (an asset URL in the app builds). A host that serves the file + * from somewhere else, or a test runner with no server, passes its own. */ export async function initMatrixRtcSdk( source?: MatrixRtcWasmSource, ): Promise { loading ??= (async (): Promise => { - await initAsync({ module_or_path: source ?? (await bundledWasm()) }); - bindings.initialize(); + await initAsync(source ?? (await bundledWasm())); // The crate is silent until told where to log. installMatrixRtcLogSink(); })(); await loading; } -/** The wasm as the bundler placed it, resolved lazily so nothing is fetched until needed. */ +/** + * The wasm as the bundler placed it, resolved lazily so nothing is fetched + * until needed. Asked for explicitly, rather than leaving the package to its + * `import.meta.url` default, so that the dev server's dependency + * pre-bundling, which rewrites module URLs, cannot lose track of it. + */ async function bundledWasm(): Promise { - const { default: url } = - await import("./generated/wasm-bindgen/index_bg.wasm?url"); + const { default: url } = await import("@element-hq/matrix-rtc/wasm?url"); return url; } diff --git a/src/matrix-rtc-sdk/logSink.ts b/src/matrix-rtc-sdk/logSink.ts index c93fcf83a..4465dc08c 100644 --- a/src/matrix-rtc-sdk/logSink.ts +++ b/src/matrix-rtc-sdk/logSink.ts @@ -7,7 +7,7 @@ Please see LICENSE in the repository root for full details. import { type Logger, logger as rootLogger } from "matrix-js-sdk/lib/logger"; -import { FfiLogLevel, type LogSink, setLogSink } from "./generated/matrix_rtc"; +import { FfiLogLevel, type LogSink, setLogSink } from "@element-hq/matrix-rtc"; /** * A {@link LogSink} that writes the crate's lines to a matrix-js-sdk logger, diff --git a/src/utils/test-matrix-rtc.ts b/src/utils/test-matrix-rtc.ts index 09e2ed4bd..6f857f17b 100644 --- a/src/utils/test-matrix-rtc.ts +++ b/src/utils/test-matrix-rtc.ts @@ -6,26 +6,25 @@ Please see LICENSE in the repository root for full details. */ import { readFileSync } from "node:fs"; -import { resolve } from "node:path"; +import { createRequire } from "node:module"; +import { join } from "node:path"; import { initMatrixRtcSdk } from "../matrix-rtc-sdk"; /** * Loads the MatrixRTC SDK for a unit test. The browser builds fetch the wasm - * by URL; under vitest there is no server, so the bytes come from disk. + * by URL; under vitest there is no server, so the bytes come from disk: the + * `.wasm` the installed package exports as `@element-hq/matrix-rtc/wasm`. * * Only suites that construct a participation manager need this; do not put * it in the global setup, where every test file would pay for the boot. */ export async function initMatrixRtcSdkForTests(): Promise { - // Relative to this file: under the jsdom environment `import.meta.url` is - // not a file URL and `process.cwd()` is not the repository, but vitest - // still provides `__dirname`. - const wasm = readFileSync( - resolve( - __dirname, - "../matrix-rtc-sdk/generated/wasm-bindgen/index_bg.wasm", - ), + // Resolved from this file's directory: under the jsdom environment + // `import.meta.url` is not a file URL and `process.cwd()` is not the + // repository, but vitest still provides `__dirname`. + const wasm = createRequire(join(__dirname, "test-matrix-rtc.ts")).resolve( + "@element-hq/matrix-rtc/wasm", ); - await initMatrixRtcSdk(wasm); + await initMatrixRtcSdk(readFileSync(wasm)); } diff --git a/vitest.config.ts b/vitest.config.ts index 0a5b6511c..50fbc8c0e 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -59,7 +59,6 @@ export default defineConfig((configEnv) => "src/utils/test-fixtures.ts", "src/utils/test-matrix-rtc.ts", "src/utils/test-participation.ts", - "src/matrix-rtc-sdk/generated/**", "playwright/**", ], },