web: fix file uploading not working in safari

This commit is contained in:
Abdullah Atta
2025-12-03 13:59:55 +05:00
parent db4d998705
commit c388045c68
2 changed files with 26 additions and 2 deletions

View File

@@ -20,8 +20,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import { INNCrypto } from "@notesnook/crypto";
import CryptoWorker from "./nncrypto.worker?worker";
import { wrap } from "comlink";
import { NNCrypto as NNCryptoSync } from "@notesnook/crypto";
import { isTransferableStreamsSupported } from "../utils/feature-check";
export const NNCrypto = wrap<INNCrypto>(new CryptoWorker()) as INNCrypto;
export const NNCrypto = isTransferableStreamsSupported()
? (wrap<INNCrypto>(new CryptoWorker()) as INNCrypto)
: new NNCryptoSync();
// TODO: disable until we fix the `pull failed` errors for good.
// IS_DESKTOP_APP && window.NativeNNCrypto
// ? new window.NativeNNCrypto()

View File

@@ -22,9 +22,28 @@ const FEATURE_CHECKS = {
cache: false,
indexedDB: false,
clonableCryptoKey: false,
applePaySupported: false
applePaySupported: false,
transferableStreams: false
};
export function isTransferableStreamsSupported() {
try {
const readable = new ReadableStream({
pull(controller) {
controller.enqueue(new Uint8Array([1, 2, 3]));
controller.close();
}
});
window.postMessage(readable, [readable]);
FEATURE_CHECKS.transferableStreams = true;
return true;
} catch {
console.log("Transferable streams not supported");
FEATURE_CHECKS.transferableStreams = false;
return false;
}
}
async function isApplePaySupported() {
try {
FEATURE_CHECKS.applePaySupported =
@@ -99,6 +118,7 @@ async function isCryptoKeyClonable() {
export async function initializeFeatureChecks() {
await Promise.allSettled([
isTransferableStreamsSupported(),
isOPFSSupported(),
isCacheSupported(),
isIndexedDBSupported(),