From c854a0dbe181f2166ee26ef439d099cd1e25bfd2 Mon Sep 17 00:00:00 2001 From: Tony Date: Mon, 14 Apr 2025 08:42:44 +0800 Subject: [PATCH 1/6] Use `Headers` in `sendIpcMessage` --- crates/tauri/scripts/ipc-protocol.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/crates/tauri/scripts/ipc-protocol.js b/crates/tauri/scripts/ipc-protocol.js index 7bab6d9ee8cf..eb26eeb4e27c 100644 --- a/crates/tauri/scripts/ipc-protocol.js +++ b/crates/tauri/scripts/ipc-protocol.js @@ -27,16 +27,25 @@ && (canUseCustomProtocol || cmd === fetchChannelDataCommand) ) { const { contentType, data } = processIpcMessage(payload) + const headers = new Headers({ + 'Content-Type': contentType, + 'Tauri-Callback': callback, + 'Tauri-Error': error, + 'Tauri-Invoke-Key': __TAURI_INVOKE_KEY__ + }) + if (options?.headers) { + const overrideHeaders = + options.headers instanceof Headers + ? options.headers.entries() + : Object.entries(options.headers) + for (const [key, value] of overrideHeaders) { + headers.set(key, value) + } + } fetch(window.__TAURI_INTERNALS__.convertFileSrc(cmd, 'ipc'), { method: 'POST', body: data, - headers: { - 'Content-Type': contentType, - 'Tauri-Callback': callback, - 'Tauri-Error': error, - 'Tauri-Invoke-Key': __TAURI_INVOKE_KEY__, - ...((options && options.headers) || {}) - } + headers }) .then((response) => { const cb = From 857e50f024ee3ffbca6ba1a40f198a43c7f2b14d Mon Sep 17 00:00:00 2001 From: Tony Date: Mon, 14 Apr 2025 08:43:52 +0800 Subject: [PATCH 2/6] Add change file --- .changes/channel-never-cleaned-up copy.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changes/channel-never-cleaned-up copy.md diff --git a/.changes/channel-never-cleaned-up copy.md b/.changes/channel-never-cleaned-up copy.md new file mode 100644 index 000000000000..e134a92794a6 --- /dev/null +++ b/.changes/channel-never-cleaned-up copy.md @@ -0,0 +1,5 @@ +--- +"tauri": patch:bug +--- + +Fix `invoke` ignores the headers option if it's an `Headers` From 3913be838872cd47bd694f660c4dfc790c55d941 Mon Sep 17 00:00:00 2001 From: Tony Date: Mon, 14 Apr 2025 08:49:25 +0800 Subject: [PATCH 3/6] Change files --- .changes/invoke-headers-non-ascii.md | 5 +++++ .../{channel-never-cleaned-up copy.md => invoke-headers.md} | 0 2 files changed, 5 insertions(+) create mode 100644 .changes/invoke-headers-non-ascii.md rename .changes/{channel-never-cleaned-up copy.md => invoke-headers.md} (100%) diff --git a/.changes/invoke-headers-non-ascii.md b/.changes/invoke-headers-non-ascii.md new file mode 100644 index 000000000000..7b3ca3a507e5 --- /dev/null +++ b/.changes/invoke-headers-non-ascii.md @@ -0,0 +1,5 @@ +--- +"tauri": patch:bug +--- + +`invoke` will now properly throw when `options.headers` contains non-ascii characters instead of silently replacing them diff --git a/.changes/channel-never-cleaned-up copy.md b/.changes/invoke-headers.md similarity index 100% rename from .changes/channel-never-cleaned-up copy.md rename to .changes/invoke-headers.md From 70ebd74534a44abb5484ee5de69873cdb1ae7a87 Mon Sep 17 00:00:00 2001 From: Tony Date: Mon, 14 Apr 2025 13:41:32 +0800 Subject: [PATCH 4/6] Don't use optional chaining Seems like we have changed it in #9530 deliberately, so preserving it in this change --- crates/tauri/scripts/ipc-protocol.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/tauri/scripts/ipc-protocol.js b/crates/tauri/scripts/ipc-protocol.js index eb26eeb4e27c..f6fa8785e9bc 100644 --- a/crates/tauri/scripts/ipc-protocol.js +++ b/crates/tauri/scripts/ipc-protocol.js @@ -33,7 +33,7 @@ 'Tauri-Error': error, 'Tauri-Invoke-Key': __TAURI_INVOKE_KEY__ }) - if (options?.headers) { + if (options && options.headers) { const overrideHeaders = options.headers instanceof Headers ? options.headers.entries() From cc38360aefad341cf18a432a557e5d477804992d Mon Sep 17 00:00:00 2001 From: Lucas Nogueira Date: Mon, 14 Apr 2025 17:20:23 -0300 Subject: [PATCH 5/6] do not let the tauri headers to be overwritten Co-authored-by: Sean Wang <126865849+WSH032@users.noreply.github.com> --- crates/tauri/scripts/ipc-protocol.js | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/crates/tauri/scripts/ipc-protocol.js b/crates/tauri/scripts/ipc-protocol.js index f6fa8785e9bc..a3f5b4eb93ca 100644 --- a/crates/tauri/scripts/ipc-protocol.js +++ b/crates/tauri/scripts/ipc-protocol.js @@ -27,21 +27,13 @@ && (canUseCustomProtocol || cmd === fetchChannelDataCommand) ) { const { contentType, data } = processIpcMessage(payload) - const headers = new Headers({ - 'Content-Type': contentType, - 'Tauri-Callback': callback, - 'Tauri-Error': error, - 'Tauri-Invoke-Key': __TAURI_INVOKE_KEY__ - }) - if (options && options.headers) { - const overrideHeaders = - options.headers instanceof Headers - ? options.headers.entries() - : Object.entries(options.headers) - for (const [key, value] of overrideHeaders) { - headers.set(key, value) - } - } + + const headers = new Headers((options && options.headers) || {}) + headers.set('Content-Type', contentType) + headers.set('Tauri-Callback', callback) + headers.set('Tauri-Error', error) + headers.set('Tauri-Invoke-Key', __TAURI_INVOKE_KEY__) + fetch(window.__TAURI_INTERNALS__.convertFileSrc(cmd, 'ipc'), { method: 'POST', body: data, From 8448fd25ff35b51f8ada09861fbb614a0c96ba49 Mon Sep 17 00:00:00 2001 From: Lucas Nogueira Date: Mon, 14 Apr 2025 17:21:37 -0300 Subject: [PATCH 6/6] use HeadersInit on the type definition --- packages/api/src/core.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/api/src/core.ts b/packages/api/src/core.ts index 334ffe1d395b..dbe3b27fd4e6 100644 --- a/packages/api/src/core.ts +++ b/packages/api/src/core.ts @@ -220,7 +220,7 @@ type InvokeArgs = Record | number[] | ArrayBuffer | Uint8Array * @since 2.0.0 */ interface InvokeOptions { - headers: Headers | Record + headers: HeadersInit } /**