From c21eb9170ac932390335caee306b69c47c76897e Mon Sep 17 00:00:00 2001 From: 4NK CI Bot Date: Thu, 18 Sep 2025 16:14:25 +0000 Subject: [PATCH] fix(ihm_client): fallback IndexedDB direct si Service Worker indisponible (iframe) --- src/services/database.service.ts | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/services/database.service.ts b/src/services/database.service.ts index 1dd7556..a0e9034 100755 --- a/src/services/database.service.ts +++ b/src/services/database.service.ts @@ -287,6 +287,25 @@ export class Database { public addObject(payload: { storeName: string; object: any; key: any }): Promise { return new Promise(async (resolve, reject) => { + // Fallback: si Service Worker indisponible (ex: iframe tiers), écriture directe IndexedDB + if (!('serviceWorker' in navigator)) { + try { + const db = await this.getDb(); + const tx = (db as any).transaction(payload.storeName, 'readwrite'); + const store = tx.objectStore(payload.storeName); + if (payload.key) { + await store.put(payload.object, payload.key); + } else { + await store.put(payload.object); + } + resolve(); + return; + } catch (error: any) { + reject(new Error(error?.message || 'IndexedDB write failed')); + return; + } + } + // Check if the service worker is active if (!this.serviceWorkerRegistration) { // console.warn('Service worker registration is not ready. Waiting...'); @@ -325,6 +344,27 @@ export class Database { public batchWriting(payload: { storeName: string; objects: { key: any; object: any }[] }): Promise { return new Promise(async (resolve, reject) => { + // Fallback direct IndexedDB si Service Worker indisponible + if (!('serviceWorker' in navigator)) { + try { + const db = await this.getDb(); + const tx = (db as any).transaction(payload.storeName, 'readwrite'); + const store = tx.objectStore(payload.storeName); + for (const { key, object } of payload.objects) { + if (key) { + await store.put(object, key); + } else { + await store.put(object); + } + } + resolve(); + return; + } catch (error: any) { + reject(new Error(error?.message || 'IndexedDB batch write failed')); + return; + } + } + if (!this.serviceWorkerRegistration) { this.serviceWorkerRegistration = await navigator.serviceWorker.ready; }