diff --git a/.github/workflows/release-app.yml b/.github/workflows/release-app.yml index 68cdab8d..2f0d626a 100644 --- a/.github/workflows/release-app.yml +++ b/.github/workflows/release-app.yml @@ -26,19 +26,19 @@ jobs: os: "macos" runtime: "wry" targets: "x86_64-apple-darwin" - - platform: "ubuntu-22.04" + - platform: "ubuntu-24.04" args: '--config ./tauri.release.conf.json --config ''{"build":{"features":["updater","license","wry"]}}''' yaak_arch: "x64" os: "ubuntu" runtime: "wry" targets: "" - - platform: "ubuntu-22.04-arm" + - platform: "ubuntu-24.04-arm" args: '--config ./tauri.release.conf.json --config ''{"build":{"features":["updater","license","wry"]}}''' yaak_arch: "arm64" os: "ubuntu" runtime: "wry" targets: "" - - platform: "ubuntu-22.04" + - platform: "ubuntu-24.04" args: >- --bundles deb --config ./tauri.release.conf.json @@ -47,7 +47,7 @@ jobs: os: "ubuntu" runtime: "cef" targets: "" - - platform: "ubuntu-22.04-arm" + - platform: "ubuntu-24.04-arm" args: >- --bundles deb --config ./tauri.release.conf.json diff --git a/crates/yaak-web/pkg/yaak_web.d.ts b/crates/yaak-web/pkg/yaak_web.d.ts index 71d0a9f4..35416d74 100644 --- a/crates/yaak-web/pkg/yaak_web.d.ts +++ b/crates/yaak-web/pkg/yaak_web.d.ts @@ -29,8 +29,23 @@ export function boot(): Promise; * Run one command as `label` (the calling tab's identity, which stands in for * the desktop's window label on every write it makes). * - * The payload shapes match the `Cmd*Req` types in `yaak-rpc-schema` — that - * crate itself pulls the git, gRPC and plugin crates for their response types - * and cannot come to wasm, so the handful needed here are declared locally. + * The payload shapes match the `Cmd*Req` types in `yaak-rpc-schema`, but are + * declared locally and dispatched by name, which is the one place this host + * does not share the desktop's guarantees: the desktop builds its router from + * the schema, so every command has a handler by construction. Here a renamed + * command would surface as a runtime "not a command this host answers". + * + * The fix is `yaak-commands` (the `Host` trait), not more machinery here — + * its `models::*` handlers are already this file, typed. Three things have to + * give before a wasm host can register them: + * + * 1. `Host: Send + Sync`, which a browser cannot satisfy: there is one thread + * and the connection pool is an `Rc`. + * 2. `models_delete` reaches for `spawn_blocking`; there is nothing to spawn + * onto here. + * 3. `yaak-commands` depends on `yaak` and `yaak-plugins`, which pull the HTTP + * stack and the Node sidecar and do not build for wasm32. + * + * None of those are hard; they are just not this PR. */ export function rpc(cmd: string, payload: any, label: string): any; diff --git a/crates/yaak-web/pkg/yaak_web_bg.js b/crates/yaak-web/pkg/yaak_web_bg.js index d99559f5..c87d81b1 100644 --- a/crates/yaak-web/pkg/yaak_web_bg.js +++ b/crates/yaak-web/pkg/yaak_web_bg.js @@ -66,9 +66,24 @@ export function boot() { * Run one command as `label` (the calling tab's identity, which stands in for * the desktop's window label on every write it makes). * - * The payload shapes match the `Cmd*Req` types in `yaak-rpc-schema` — that - * crate itself pulls the git, gRPC and plugin crates for their response types - * and cannot come to wasm, so the handful needed here are declared locally. + * The payload shapes match the `Cmd*Req` types in `yaak-rpc-schema`, but are + * declared locally and dispatched by name, which is the one place this host + * does not share the desktop's guarantees: the desktop builds its router from + * the schema, so every command has a handler by construction. Here a renamed + * command would surface as a runtime "not a command this host answers". + * + * The fix is `yaak-commands` (the `Host` trait), not more machinery here — + * its `models::*` handlers are already this file, typed. Three things have to + * give before a wasm host can register them: + * + * 1. `Host: Send + Sync`, which a browser cannot satisfy: there is one thread + * and the connection pool is an `Rc`. + * 2. `models_delete` reaches for `spawn_blocking`; there is nothing to spawn + * onto here. + * 3. `yaak-commands` depends on `yaak` and `yaak-plugins`, which pull the HTTP + * stack and the Node sidecar and do not build for wasm32. + * + * None of those are hard; they are just not this PR. * @param {string} cmd * @param {any} payload * @param {string} label @@ -674,7 +689,7 @@ export function __wbindgen_cast_0000000000000002(arg0, arg1) { } export function __wbindgen_cast_0000000000000003(arg0, arg1) { // Cast intrinsic for `Closure(Closure { owned: true, function: Function { arguments: [NamedExternref("IDBVersionChangeEvent")], shim_idx: 180, ret: Result(Unit), inner_ret: Some(Result(Unit)) }, mutable: true }) -> Externref`. - const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__ha579407f9663b071); + const ret = makeMutClosure(arg0, arg1, wasm_bindgen__convert__closures_____invoke__h7e53e249a4dc4aa9); return ret; } export function __wbindgen_cast_0000000000000004(arg0, arg1) { @@ -731,8 +746,8 @@ function wasm_bindgen__convert__closures_____invoke__hf84d53817e0238b4(arg0, arg } } -function wasm_bindgen__convert__closures_____invoke__ha579407f9663b071(arg0, arg1, arg2) { - const ret = wasm.wasm_bindgen__convert__closures_____invoke__ha579407f9663b071(arg0, arg1, arg2); +function wasm_bindgen__convert__closures_____invoke__h7e53e249a4dc4aa9(arg0, arg1, arg2) { + const ret = wasm.wasm_bindgen__convert__closures_____invoke__h7e53e249a4dc4aa9(arg0, arg1, arg2); if (ret[1]) { throw takeFromExternrefTable0(ret[0]); } diff --git a/crates/yaak-web/pkg/yaak_web_bg.wasm b/crates/yaak-web/pkg/yaak_web_bg.wasm index 347a3236..c14a70bc 100644 Binary files a/crates/yaak-web/pkg/yaak_web_bg.wasm and b/crates/yaak-web/pkg/yaak_web_bg.wasm differ diff --git a/crates/yaak-web/pkg/yaak_web_bg.wasm.d.ts b/crates/yaak-web/pkg/yaak_web_bg.wasm.d.ts index f86bcd3d..6a4067a4 100644 --- a/crates/yaak-web/pkg/yaak_web_bg.wasm.d.ts +++ b/crates/yaak-web/pkg/yaak_web_bg.wasm.d.ts @@ -17,7 +17,7 @@ export const rust_sqlite_wasm_realloc: (a: number, b: number) => number; export const sqlite3_os_end: () => number; export const sqlite3_os_init: () => number; export const wasm_bindgen__convert__closures_____invoke__hf84d53817e0238b4: (a: number, b: number, c: any) => [number, number]; -export const wasm_bindgen__convert__closures_____invoke__ha579407f9663b071: (a: number, b: number, c: any) => [number, number]; +export const wasm_bindgen__convert__closures_____invoke__h7e53e249a4dc4aa9: (a: number, b: number, c: any) => [number, number]; export const wasm_bindgen__convert__closures_____invoke__h2c72ca09e851b7f3: (a: number, b: number, c: any, d: any) => void; export const wasm_bindgen__convert__closures_____invoke__h7e06bb925b918fbb: (a: number, b: number, c: any) => void; export const wasm_bindgen__convert__closures_____invoke__h87640adb2bbfa2fc: (a: number, b: number) => void;