@fairfox/polly 0.61.0 → 0.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/background/index.js +114 -69
- package/dist/src/background/index.js.map +5 -4
- package/dist/src/background/message-router.js +114 -69
- package/dist/src/background/message-router.js.map +5 -4
- package/dist/src/index.js +115 -69
- package/dist/src/index.js.map +5 -4
- package/dist/src/mesh.js +111 -101
- package/dist/src/mesh.js.map +5 -4
- package/dist/src/shared/adapters/index.js +114 -69
- package/dist/src/shared/adapters/index.js.map +5 -4
- package/dist/src/shared/lib/blob-cache.d.ts +1 -6
- package/dist/src/shared/lib/context-helpers.js +114 -69
- package/dist/src/shared/lib/context-helpers.js.map +5 -4
- package/dist/src/shared/lib/idb-helpers.d.ts +38 -0
- package/dist/src/shared/lib/message-bus.js +114 -69
- package/dist/src/shared/lib/message-bus.js.map +5 -4
- package/dist/src/shared/lib/resource.js +109 -65
- package/dist/src/shared/lib/resource.js.map +5 -4
- package/dist/src/shared/lib/state.js +109 -65
- package/dist/src/shared/lib/state.js.map +5 -4
- package/dist/src/shared/lib/storage-adapter.d.ts +3 -3
- package/dist/src/shared/state/app-state.js +109 -65
- package/dist/src/shared/state/app-state.js.map +5 -4
- package/package.json +1 -1
|
@@ -69,6 +69,90 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
69
69
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
70
70
|
});
|
|
71
71
|
|
|
72
|
+
// src/shared/lib/idb-helpers.ts
|
|
73
|
+
function openIDB(options) {
|
|
74
|
+
return new Promise((resolve, reject) => {
|
|
75
|
+
const start = Date.now();
|
|
76
|
+
const request = indexedDB.open(options.name, options.version);
|
|
77
|
+
let settled = false;
|
|
78
|
+
const timer = setTimeout(() => {
|
|
79
|
+
if (settled)
|
|
80
|
+
return;
|
|
81
|
+
settled = true;
|
|
82
|
+
const elapsedMs = Date.now() - start;
|
|
83
|
+
reject(new Error(`Polly IndexedDB open of '${options.name}' timed out after ${elapsedMs}ms (cross-tab lock or zombie connection?)`));
|
|
84
|
+
}, IDB_OPEN_TIMEOUT_MS);
|
|
85
|
+
request.onerror = () => {
|
|
86
|
+
if (settled)
|
|
87
|
+
return;
|
|
88
|
+
settled = true;
|
|
89
|
+
clearTimeout(timer);
|
|
90
|
+
reject(request.error);
|
|
91
|
+
};
|
|
92
|
+
request.onsuccess = () => {
|
|
93
|
+
if (settled)
|
|
94
|
+
return;
|
|
95
|
+
settled = true;
|
|
96
|
+
clearTimeout(timer);
|
|
97
|
+
resolve(request.result);
|
|
98
|
+
};
|
|
99
|
+
request.onupgradeneeded = (event) => {
|
|
100
|
+
const db = event.target.result;
|
|
101
|
+
options.upgrade(db, event);
|
|
102
|
+
};
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
function cachedOpen(ref, options) {
|
|
106
|
+
if (ref.promise)
|
|
107
|
+
return ref.promise;
|
|
108
|
+
const pending = openIDB(options);
|
|
109
|
+
pending.catch(() => {
|
|
110
|
+
if (ref.promise === pending)
|
|
111
|
+
ref.promise = null;
|
|
112
|
+
});
|
|
113
|
+
ref.promise = pending;
|
|
114
|
+
return pending;
|
|
115
|
+
}
|
|
116
|
+
function runRequest(request) {
|
|
117
|
+
return new Promise((resolve, reject) => {
|
|
118
|
+
request.onsuccess = () => resolve(request.result);
|
|
119
|
+
request.onerror = () => reject(request.error);
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
function runTx(db, storeName, mode, fn) {
|
|
123
|
+
return new Promise((resolve, reject) => {
|
|
124
|
+
const tx = db.transaction(storeName, mode);
|
|
125
|
+
const store = tx.objectStore(storeName);
|
|
126
|
+
tx.oncomplete = () => resolve();
|
|
127
|
+
tx.onerror = () => reject(tx.error);
|
|
128
|
+
tx.onabort = () => reject(tx.error);
|
|
129
|
+
try {
|
|
130
|
+
fn(store);
|
|
131
|
+
} catch (err) {
|
|
132
|
+
try {
|
|
133
|
+
tx.abort();
|
|
134
|
+
} catch {}
|
|
135
|
+
reject(err);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
function iterateCursor(db, storeName, visit) {
|
|
140
|
+
return new Promise((resolve, reject) => {
|
|
141
|
+
const tx = db.transaction(storeName, "readonly");
|
|
142
|
+
const store = tx.objectStore(storeName);
|
|
143
|
+
const request = store.openCursor();
|
|
144
|
+
request.onsuccess = () => {
|
|
145
|
+
const cursor = request.result;
|
|
146
|
+
if (!cursor)
|
|
147
|
+
return resolve();
|
|
148
|
+
visit(cursor.key, cursor.value);
|
|
149
|
+
cursor.continue();
|
|
150
|
+
};
|
|
151
|
+
request.onerror = () => reject(request.error);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
var IDB_OPEN_TIMEOUT_MS = 5000;
|
|
155
|
+
|
|
72
156
|
// src/shared/lib/storage-adapter.ts
|
|
73
157
|
var exports_storage_adapter = {};
|
|
74
158
|
__export(exports_storage_adapter, {
|
|
@@ -81,68 +165,32 @@ __export(exports_storage_adapter, {
|
|
|
81
165
|
class IndexedDBAdapter {
|
|
82
166
|
dbName;
|
|
83
167
|
storeName = "state";
|
|
84
|
-
|
|
168
|
+
dbRef = { promise: null };
|
|
85
169
|
constructor(dbName = "polly-state") {
|
|
86
170
|
this.dbName = dbName;
|
|
87
171
|
}
|
|
88
172
|
getDB() {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
const request = indexedDB.open(this.dbName, 1);
|
|
94
|
-
let settled = false;
|
|
95
|
-
const timer = setTimeout(() => {
|
|
96
|
-
if (settled)
|
|
97
|
-
return;
|
|
98
|
-
settled = true;
|
|
99
|
-
const elapsedMs = Date.now() - start;
|
|
100
|
-
reject(new Error(`Polly IndexedDB open of '${this.dbName}' timed out after ${elapsedMs}ms (cross-tab lock or zombie connection?)`));
|
|
101
|
-
}, IDB_OPEN_TIMEOUT_MS);
|
|
102
|
-
request.onerror = () => {
|
|
103
|
-
if (settled)
|
|
104
|
-
return;
|
|
105
|
-
settled = true;
|
|
106
|
-
clearTimeout(timer);
|
|
107
|
-
reject(request.error);
|
|
108
|
-
};
|
|
109
|
-
request.onsuccess = () => {
|
|
110
|
-
if (settled)
|
|
111
|
-
return;
|
|
112
|
-
settled = true;
|
|
113
|
-
clearTimeout(timer);
|
|
114
|
-
resolve(request.result);
|
|
115
|
-
};
|
|
116
|
-
request.onupgradeneeded = (event) => {
|
|
117
|
-
const db = event.target.result;
|
|
173
|
+
return cachedOpen(this.dbRef, {
|
|
174
|
+
name: this.dbName,
|
|
175
|
+
version: 1,
|
|
176
|
+
upgrade: (db) => {
|
|
118
177
|
if (!db.objectStoreNames.contains(this.storeName)) {
|
|
119
178
|
db.createObjectStore(this.storeName);
|
|
120
179
|
}
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
pending.catch(() => {
|
|
124
|
-
if (this.dbPromise === pending)
|
|
125
|
-
this.dbPromise = null;
|
|
180
|
+
}
|
|
126
181
|
});
|
|
127
|
-
this.dbPromise = pending;
|
|
128
|
-
return pending;
|
|
129
182
|
}
|
|
130
183
|
async get(keys) {
|
|
131
184
|
try {
|
|
132
185
|
const db = await this.getDB();
|
|
186
|
+
const tx = db.transaction(this.storeName, "readonly");
|
|
187
|
+
const store = tx.objectStore(this.storeName);
|
|
188
|
+
const pairs = await Promise.all(keys.map(async (key) => [key, await runRequest(store.get(key))]));
|
|
133
189
|
const result = {};
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
request.onerror = () => reject(request.error);
|
|
139
|
-
request.onsuccess = () => {
|
|
140
|
-
if (request.result !== undefined) {
|
|
141
|
-
result[key] = request.result;
|
|
142
|
-
}
|
|
143
|
-
resolve();
|
|
144
|
-
};
|
|
145
|
-
})));
|
|
190
|
+
for (const [key, value] of pairs) {
|
|
191
|
+
if (value !== undefined)
|
|
192
|
+
result[key] = value;
|
|
193
|
+
}
|
|
146
194
|
return result;
|
|
147
195
|
} catch (error) {
|
|
148
196
|
console.warn("[Polly] IndexedDB get failed:", error);
|
|
@@ -152,13 +200,11 @@ class IndexedDBAdapter {
|
|
|
152
200
|
async set(items) {
|
|
153
201
|
try {
|
|
154
202
|
const db = await this.getDB();
|
|
155
|
-
await
|
|
156
|
-
const
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
request.onsuccess = () => resolve();
|
|
161
|
-
})));
|
|
203
|
+
await runTx(db, this.storeName, "readwrite", (store) => {
|
|
204
|
+
for (const [key, value] of Object.entries(items)) {
|
|
205
|
+
store.put(value, key);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
162
208
|
} catch (error) {
|
|
163
209
|
console.warn("[Polly] IndexedDB set failed:", error);
|
|
164
210
|
}
|
|
@@ -166,13 +212,10 @@ class IndexedDBAdapter {
|
|
|
166
212
|
async remove(keys) {
|
|
167
213
|
try {
|
|
168
214
|
const db = await this.getDB();
|
|
169
|
-
await
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
request.onerror = () => reject(request.error);
|
|
174
|
-
request.onsuccess = () => resolve();
|
|
175
|
-
})));
|
|
215
|
+
await runTx(db, this.storeName, "readwrite", (store) => {
|
|
216
|
+
for (const key of keys)
|
|
217
|
+
store.delete(key);
|
|
218
|
+
});
|
|
176
219
|
} catch (error) {
|
|
177
220
|
console.warn("[Polly] IndexedDB remove failed:", error);
|
|
178
221
|
}
|
|
@@ -245,7 +288,7 @@ function createStorageAdapter() {
|
|
|
245
288
|
}
|
|
246
289
|
return new MemoryStorageAdapter;
|
|
247
290
|
}
|
|
248
|
-
var
|
|
291
|
+
var init_storage_adapter = () => {};
|
|
249
292
|
|
|
250
293
|
// src/shared/lib/sync-adapter.ts
|
|
251
294
|
var exports_sync_adapter = {};
|
|
@@ -665,6 +708,7 @@ class MessageLoggerAdapter {
|
|
|
665
708
|
}
|
|
666
709
|
|
|
667
710
|
// src/shared/lib/adapter-factory.ts
|
|
711
|
+
init_storage_adapter();
|
|
668
712
|
function createStateAdapters(options = {}) {
|
|
669
713
|
if (options.storage && options.sync) {
|
|
670
714
|
return {
|
|
@@ -685,7 +729,7 @@ function createStateAdapters(options = {}) {
|
|
|
685
729
|
return { storage, sync };
|
|
686
730
|
}
|
|
687
731
|
function createChromeAdapters() {
|
|
688
|
-
const { ChromeStorageAdapter: ChromeStorageAdapter3 } = __toCommonJS(exports_storage_adapter);
|
|
732
|
+
const { ChromeStorageAdapter: ChromeStorageAdapter3 } = (init_storage_adapter(), __toCommonJS(exports_storage_adapter));
|
|
689
733
|
const { ChromeRuntimeSyncAdapter: ChromeRuntimeSyncAdapter2 } = __toCommonJS(exports_sync_adapter);
|
|
690
734
|
return {
|
|
691
735
|
storage: new ChromeStorageAdapter3,
|
|
@@ -693,14 +737,14 @@ function createChromeAdapters() {
|
|
|
693
737
|
};
|
|
694
738
|
}
|
|
695
739
|
function createWebAdapters(options = {}) {
|
|
696
|
-
const { IndexedDBAdapter: IndexedDBAdapter2 } = __toCommonJS(exports_storage_adapter);
|
|
740
|
+
const { IndexedDBAdapter: IndexedDBAdapter2 } = (init_storage_adapter(), __toCommonJS(exports_storage_adapter));
|
|
697
741
|
const { BroadcastChannelSyncAdapter: BroadcastChannelSyncAdapter2, NoOpSyncAdapter: NoOpSyncAdapter2 } = __toCommonJS(exports_sync_adapter);
|
|
698
742
|
const storage = new IndexedDBAdapter2(options.dbName);
|
|
699
743
|
const sync = options.singleTab ? new NoOpSyncAdapter2 : new BroadcastChannelSyncAdapter2(options.channelName);
|
|
700
744
|
return { storage, sync };
|
|
701
745
|
}
|
|
702
746
|
function createNodeAdapters() {
|
|
703
|
-
const { MemoryStorageAdapter: MemoryStorageAdapter2 } = __toCommonJS(exports_storage_adapter);
|
|
747
|
+
const { MemoryStorageAdapter: MemoryStorageAdapter2 } = (init_storage_adapter(), __toCommonJS(exports_storage_adapter));
|
|
704
748
|
const { NoOpSyncAdapter: NoOpSyncAdapter2 } = __toCommonJS(exports_sync_adapter);
|
|
705
749
|
return {
|
|
706
750
|
storage: new MemoryStorageAdapter2,
|
|
@@ -708,7 +752,7 @@ function createNodeAdapters() {
|
|
|
708
752
|
};
|
|
709
753
|
}
|
|
710
754
|
function createMockAdapters() {
|
|
711
|
-
const { MemoryStorageAdapter: MemoryStorageAdapter2 } = __toCommonJS(exports_storage_adapter);
|
|
755
|
+
const { MemoryStorageAdapter: MemoryStorageAdapter2 } = (init_storage_adapter(), __toCommonJS(exports_storage_adapter));
|
|
712
756
|
const { NoOpSyncAdapter: NoOpSyncAdapter2 } = __toCommonJS(exports_sync_adapter);
|
|
713
757
|
return {
|
|
714
758
|
storage: new MemoryStorageAdapter2,
|
|
@@ -717,6 +761,7 @@ function createMockAdapters() {
|
|
|
717
761
|
}
|
|
718
762
|
|
|
719
763
|
// src/shared/adapters/index.ts
|
|
764
|
+
init_storage_adapter();
|
|
720
765
|
function createChromeAdapters2(context, options) {
|
|
721
766
|
const runtime2 = new ChromeRuntimeAdapter;
|
|
722
767
|
return {
|
|
@@ -752,4 +797,4 @@ export {
|
|
|
752
797
|
BroadcastChannelSyncAdapter
|
|
753
798
|
};
|
|
754
799
|
|
|
755
|
-
//# debugId=
|
|
800
|
+
//# debugId=2F84A479B7DC971364756E2164756E21
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/shared/lib/storage-adapter.ts", "../src/shared/lib/sync-adapter.ts", "../src/shared/adapters/chrome/context-menus.chrome.ts", "../src/shared/adapters/chrome/offscreen.chrome.ts", "../src/shared/adapters/chrome/runtime.chrome.ts", "../src/shared/adapters/chrome/storage.chrome.ts", "../src/shared/adapters/chrome/tabs.chrome.ts", "../src/shared/adapters/chrome/window.chrome.ts", "../src/shared/adapters/fetch.adapter.ts", "../src/shared/adapters/logger.adapter.ts", "../src/shared/lib/adapter-factory.ts", "../src/shared/adapters/index.ts"],
|
|
3
|
+
"sources": ["../src/shared/lib/idb-helpers.ts", "../src/shared/lib/storage-adapter.ts", "../src/shared/lib/sync-adapter.ts", "../src/shared/adapters/chrome/context-menus.chrome.ts", "../src/shared/adapters/chrome/offscreen.chrome.ts", "../src/shared/adapters/chrome/runtime.chrome.ts", "../src/shared/adapters/chrome/storage.chrome.ts", "../src/shared/adapters/chrome/tabs.chrome.ts", "../src/shared/adapters/chrome/window.chrome.ts", "../src/shared/adapters/fetch.adapter.ts", "../src/shared/adapters/logger.adapter.ts", "../src/shared/lib/adapter-factory.ts", "../src/shared/adapters/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"
|
|
5
|
+
"/**\n * Tiny internal helpers around the raw IndexedDB API.\n *\n * Wraps the patterns that `storage-adapter.ts` and `blob-cache.ts` both\n * re-implement: timed open with retry-on-failure caching, request→promise\n * wrapping, transaction-to-completion, and cursor iteration. Not exported\n * from the public package — internal to `src/shared/lib`.\n */\n\n/** Polly#107 post-v0.60: hard timeout on `indexedDB.open()`. Healthy\n * opens land in microseconds; the v0.60.0 fingerprint surfaced a zombie\n * cross-tab connection that left an open request firing no events at all.\n * 5s is two orders of magnitude beyond the normal upper bound and short\n * enough that the operator gets a named failure instead of a hung page\n * when the storage layer wedges. */\nexport const IDB_OPEN_TIMEOUT_MS = 5000;\n\nexport interface OpenIDBOptions {\n name: string;\n version: number;\n /** Invoked inside `onupgradeneeded`. Create object stores here. */\n upgrade: (db: IDBDatabase, event: IDBVersionChangeEvent) => void;\n}\n\n/** Open an IndexedDB database with the Polly#107 timeout guard. */\nexport function openIDB(options: OpenIDBOptions): Promise<IDBDatabase> {\n return new Promise<IDBDatabase>((resolve, reject) => {\n const start = Date.now();\n const request = indexedDB.open(options.name, options.version);\n let settled = false;\n const timer = setTimeout(() => {\n if (settled) return;\n settled = true;\n const elapsedMs = Date.now() - start;\n reject(\n new Error(\n `Polly IndexedDB open of '${options.name}' timed out after ${elapsedMs}ms (cross-tab lock or zombie connection?)`\n )\n );\n }, IDB_OPEN_TIMEOUT_MS);\n\n request.onerror = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n reject(request.error);\n };\n request.onsuccess = () => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n resolve(request.result);\n };\n request.onupgradeneeded = (event) => {\n const db = (event.target as unknown as IDBOpenDBRequest).result;\n options.upgrade(db, event);\n };\n });\n}\n\n/** One-shot open caching with retry-on-failure. Caller owns a `{ promise }`\n * cell; first call opens, subsequent calls return the cached promise, and\n * a rejected open clears the cache so the next call can retry instead of\n * being poisoned by one transient failure. */\nexport function cachedOpen(\n ref: { promise: Promise<IDBDatabase> | null },\n options: OpenIDBOptions\n): Promise<IDBDatabase> {\n if (ref.promise) return ref.promise;\n const pending = openIDB(options);\n pending.catch(() => {\n if (ref.promise === pending) ref.promise = null;\n });\n ref.promise = pending;\n return pending;\n}\n\n/** Promise-wrap a single `IDBRequest` (`get`, `put`, `count`, `delete`…). */\nexport function runRequest<T>(request: IDBRequest<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\n/** Run a transaction to completion. Resolves on `tx.oncomplete` (write\n * durability), not on individual request success. Throws inside `fn`\n * abort the transaction and reject. */\nexport function runTx(\n db: IDBDatabase,\n storeName: string,\n mode: IDBTransactionMode,\n fn: (store: IDBObjectStore) => void\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, mode);\n const store = tx.objectStore(storeName);\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n tx.onabort = () => reject(tx.error);\n try {\n fn(store);\n } catch (err) {\n try {\n tx.abort();\n } catch {\n /* already aborted */\n }\n reject(err);\n }\n });\n}\n\n/** Walk every record in a store. */\nexport function iterateCursor<V>(\n db: IDBDatabase,\n storeName: string,\n visit: (key: IDBValidKey, value: V) => void\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const tx = db.transaction(storeName, \"readonly\");\n const store = tx.objectStore(storeName);\n const request = store.openCursor();\n request.onsuccess = () => {\n const cursor = request.result;\n if (!cursor) return resolve();\n visit(cursor.key, cursor.value as V);\n cursor.continue();\n };\n request.onerror = () => reject(request.error);\n });\n}\n",
|
|
6
|
+
"// Storage adapters for different execution contexts\n// Automatically chooses the right storage mechanism based on environment\n\nimport { cachedOpen, runRequest, runTx } from \"./idb-helpers\";\n\n/**\n * Universal storage adapter interface\n */\nexport interface StorageAdapter {\n get<T = unknown>(keys: string[]): Promise<Record<string, T>>;\n set(items: Record<string, unknown>): Promise<void>;\n remove(keys: string[]): Promise<void>;\n}\n\n/**\n * IndexedDB adapter for web apps\n */\nexport class IndexedDBAdapter implements StorageAdapter {\n private readonly dbName: string;\n private readonly storeName = \"state\";\n private readonly dbRef: { promise: Promise<IDBDatabase> | null } = { promise: null };\n\n constructor(dbName = \"polly-state\") {\n this.dbName = dbName;\n }\n\n private getDB(): Promise<IDBDatabase> {\n return cachedOpen(this.dbRef, {\n name: this.dbName,\n version: 1,\n upgrade: (db) => {\n if (!db.objectStoreNames.contains(this.storeName)) {\n db.createObjectStore(this.storeName);\n }\n },\n });\n }\n\n async get<T = unknown>(keys: string[]): Promise<Record<string, T>> {\n try {\n const db = await this.getDB();\n const tx = db.transaction(this.storeName, \"readonly\");\n const store = tx.objectStore(this.storeName);\n const pairs = await Promise.all(\n keys.map(async (key) => [key, await runRequest(store.get(key))] as const)\n );\n const result: Record<string, T> = {};\n for (const [key, value] of pairs) {\n if (value !== undefined) result[key] = value as T;\n }\n return result;\n } catch (error) {\n console.warn(\"[Polly] IndexedDB get failed:\", error);\n return {};\n }\n }\n\n async set(items: Record<string, unknown>): Promise<void> {\n try {\n const db = await this.getDB();\n await runTx(db, this.storeName, \"readwrite\", (store) => {\n for (const [key, value] of Object.entries(items)) {\n store.put(value, key);\n }\n });\n } catch (error) {\n console.warn(\"[Polly] IndexedDB set failed:\", error);\n }\n }\n\n async remove(keys: string[]): Promise<void> {\n try {\n const db = await this.getDB();\n await runTx(db, this.storeName, \"readwrite\", (store) => {\n for (const key of keys) store.delete(key);\n });\n } catch (error) {\n console.warn(\"[Polly] IndexedDB remove failed:\", error);\n }\n }\n}\n\n/**\n * Chrome storage adapter for extensions\n */\nexport class ChromeStorageAdapter implements StorageAdapter {\n async get<T = unknown>(keys: string[]): Promise<Record<string, T>> {\n if (typeof chrome === \"undefined\" || !chrome.storage) {\n return {};\n }\n\n try {\n return (await chrome.storage.local.get(keys)) as unknown as Record<string, T>;\n } catch (error) {\n console.warn(\"[Polly] Chrome storage get failed:\", error);\n return {};\n }\n }\n\n async set(items: Record<string, unknown>): Promise<void> {\n if (typeof chrome === \"undefined\" || !chrome.storage) {\n return;\n }\n\n try {\n await chrome.storage.local.set(items);\n } catch (error) {\n console.warn(\"[Polly] Chrome storage set failed:\", error);\n }\n }\n\n async remove(keys: string[]): Promise<void> {\n if (typeof chrome === \"undefined\" || !chrome.storage) {\n return;\n }\n\n try {\n await chrome.storage.local.remove(keys);\n } catch (error) {\n console.warn(\"[Polly] Chrome storage remove failed:\", error);\n }\n }\n}\n\n/**\n * In-memory adapter (no persistence) for testing or server contexts\n */\nexport class MemoryStorageAdapter implements StorageAdapter {\n private storage = new Map<string, unknown>();\n\n async get<T = unknown>(keys: string[]): Promise<Record<string, T>> {\n const result: Record<string, T> = {};\n for (const key of keys) {\n const value = this.storage.get(key);\n if (value !== undefined) {\n result[key] = value as unknown as T;\n }\n }\n return result;\n }\n\n async set(items: Record<string, unknown>): Promise<void> {\n for (const [key, value] of Object.entries(items)) {\n this.storage.set(key, value);\n }\n }\n\n async remove(keys: string[]): Promise<void> {\n for (const key of keys) {\n this.storage.delete(key);\n }\n }\n}\n\n/**\n * Detect execution context and return appropriate storage adapter\n */\nexport function createStorageAdapter(): StorageAdapter {\n // Chrome extension context\n if (typeof chrome !== \"undefined\" && chrome.storage && chrome.runtime) {\n return new ChromeStorageAdapter();\n }\n\n // Web app context (has IndexedDB)\n if (typeof indexedDB !== \"undefined\") {\n return new IndexedDBAdapter();\n }\n\n // Server/test context (no persistent storage available)\n return new MemoryStorageAdapter();\n}\n",
|
|
6
7
|
"// Sync adapter interface for cross-context state synchronization\n// Abstracts the transport mechanism (chrome.runtime, BroadcastChannel, etc.)\n//\n// Architecture Decision: BroadcastChannel vs SharedWorker\n// We currently use BroadcastChannel for web app sync because:\n// - Simpler API with no lifecycle management complexity\n// - Decentralized (aligns with local-first/offline-first architecture)\n// - Better browser support (especially Safari and mobile)\n// - Perfect for message-passing with Lamport clock conflict resolution\n// - No single point of failure\n//\n// Future Consideration: SharedWorker Support\n// SharedWorker could be added as an optional adapter for use cases requiring:\n// - Central coordination point for complex multi-tab workflows\n// - Shared WebSocket connections (one connection for all tabs)\n// - Heavy computation done once and shared across tabs\n// - Persistent background work when tabs are closed\n// - Transaction coordination across tabs\n//\n// For most Polly use cases, BroadcastChannel's peer-to-peer model is preferred,\n// but SharedWorker support could be valuable for advanced scenarios.\n\n/**\n * Message format for state synchronization\n */\nexport interface StateSyncMessage<T = unknown> {\n key: string;\n value: T;\n clock: number;\n}\n\n/**\n * Sync adapter interface - abstracts the transport mechanism for state sync\n *\n * Different contexts use different transports:\n * - Chrome extensions: chrome.runtime messaging\n * - Web apps (multi-tab): BroadcastChannel\n * - PWAs: BroadcastChannel + Service Worker messaging\n * - Single-context: NoOp (no sync needed)\n */\nexport interface SyncAdapter {\n /**\n * Broadcast a state update to other contexts\n */\n broadcast<T>(message: StateSyncMessage<T>): void;\n\n /**\n * Register a callback for incoming state updates\n */\n onMessage<T>(callback: (message: StateSyncMessage<T>) => void): () => void;\n\n /**\n * Optional: Connect to the sync mechanism\n * Some transports require explicit connection setup\n */\n connect?(): Promise<void>;\n\n /**\n * Optional: Disconnect from the sync mechanism\n */\n disconnect?(): void;\n\n /**\n * Optional: Check if connected\n */\n isConnected?(): boolean;\n}\n\n/**\n * NoOp sync adapter for single-context scenarios (no sync needed)\n */\nexport class NoOpSyncAdapter implements SyncAdapter {\n broadcast<T>(_message: StateSyncMessage<T>): void {\n // No-op: single context, no need to sync\n }\n\n onMessage<T>(_callback: (message: StateSyncMessage<T>) => void): () => void {\n // No-op: no messages will ever arrive\n return () => {\n // Empty cleanup function - nothing to clean up for null adapter\n };\n }\n}\n\n/**\n * Chrome runtime sync adapter for Chrome extensions\n * Uses chrome.runtime.sendMessage for cross-context messaging\n */\nexport class ChromeRuntimeSyncAdapter implements SyncAdapter {\n private listeners: Array<(message: StateSyncMessage<unknown>) => void> = [];\n private port: chrome.runtime.Port | null = null;\n\n constructor() {\n // Set up listener for incoming messages\n if (typeof chrome !== \"undefined\" && chrome.runtime) {\n chrome.runtime.onMessage.addListener((message, _sender, _sendResponse) => {\n if (message.type === \"STATE_SYNC\") {\n this.listeners.forEach((listener) => {\n listener(message);\n });\n }\n });\n }\n }\n\n broadcast<T>(message: StateSyncMessage<T>): void {\n if (typeof chrome === \"undefined\" || !chrome.runtime) {\n console.warn(\"[SyncAdapter] chrome.runtime not available\");\n return;\n }\n\n try {\n chrome.runtime.sendMessage({\n type: \"STATE_SYNC\",\n key: message.key,\n value: message.value,\n clock: message.clock,\n });\n } catch (error) {\n console.warn(\"[SyncAdapter] Failed to broadcast state update:\", error);\n }\n }\n\n onMessage<T>(callback: (message: StateSyncMessage<T>) => void): () => void {\n this.listeners.push(callback as unknown as (message: StateSyncMessage<unknown>) => void);\n\n // Return cleanup function\n return () => {\n const index = this.listeners.indexOf(\n callback as unknown as (message: StateSyncMessage<unknown>) => void\n );\n if (index > -1) {\n this.listeners.splice(index, 1);\n }\n };\n }\n\n connect(): Promise<void> {\n // Chrome runtime is always connected\n return Promise.resolve();\n }\n\n disconnect(): void {\n this.listeners = [];\n if (this.port) {\n this.port.disconnect();\n this.port = null;\n }\n }\n\n isConnected(): boolean {\n return typeof chrome !== \"undefined\" && !!chrome.runtime;\n }\n}\n\n/**\n * BroadcastChannel sync adapter for web apps (multi-tab)\n * Uses BroadcastChannel API for cross-tab messaging\n */\nexport class BroadcastChannelSyncAdapter implements SyncAdapter {\n private channel: BroadcastChannel | null = null;\n private listeners: Array<(message: StateSyncMessage<unknown>) => void> = [];\n\n constructor(channelName = \"polly-sync\") {\n if (typeof BroadcastChannel === \"undefined\") {\n console.warn(\"[SyncAdapter] BroadcastChannel not available\");\n } else {\n this.channel = new BroadcastChannel(channelName);\n\n this.channel.onmessage = (event) => {\n if (event.data.type === \"STATE_SYNC\") {\n this.listeners.forEach((listener) => {\n listener(event.data);\n });\n }\n };\n }\n }\n\n broadcast<T>(message: StateSyncMessage<T>): void {\n if (!this.channel) {\n console.warn(\"[SyncAdapter] BroadcastChannel not initialized\");\n return;\n }\n\n try {\n this.channel.postMessage({\n type: \"STATE_SYNC\",\n key: message.key,\n value: message.value,\n clock: message.clock,\n });\n } catch (error) {\n console.warn(\"[SyncAdapter] Failed to broadcast state update:\", error);\n }\n }\n\n onMessage<T>(callback: (message: StateSyncMessage<T>) => void): () => void {\n this.listeners.push(callback as unknown as (message: StateSyncMessage<unknown>) => void);\n\n // Return cleanup function\n return () => {\n const index = this.listeners.indexOf(\n callback as unknown as (message: StateSyncMessage<unknown>) => void\n );\n if (index > -1) {\n this.listeners.splice(index, 1);\n }\n };\n }\n\n connect(): Promise<void> {\n // BroadcastChannel connects immediately on construction\n return Promise.resolve();\n }\n\n disconnect(): void {\n this.listeners = [];\n if (this.channel) {\n this.channel.close();\n this.channel = null;\n }\n }\n\n isConnected(): boolean {\n return this.channel !== null;\n }\n}\n\n/**\n * Detect available sync mechanisms and create appropriate adapter\n */\nexport function createSyncAdapter(): SyncAdapter {\n // Chrome extension context - use chrome.runtime\n if (typeof chrome !== \"undefined\" && chrome.runtime) {\n return new ChromeRuntimeSyncAdapter();\n }\n\n // Web app with multi-tab support - use BroadcastChannel\n if (typeof BroadcastChannel !== \"undefined\") {\n return new BroadcastChannelSyncAdapter();\n }\n\n // Single context or no sync available - use NoOp\n return new NoOpSyncAdapter();\n}\n",
|
|
7
8
|
"// Chrome context menus adapter implementation\n\nimport type { ContextMenusAdapter } from \"../context-menus.adapter\";\n\nexport class ChromeContextMenusAdapter implements ContextMenusAdapter {\n async create(createProperties: chrome.contextMenus.CreateProperties): Promise<void> {\n return new Promise((resolve, reject) => {\n chrome.contextMenus.create(createProperties, () => {\n if (chrome.runtime.lastError) {\n reject(new Error(chrome.runtime.lastError.message));\n } else {\n resolve();\n }\n });\n });\n }\n\n async update(\n id: string,\n updateProperties: Omit<chrome.contextMenus.CreateProperties, \"id\">\n ): Promise<void> {\n await chrome.contextMenus.update(id, updateProperties);\n }\n\n async remove(id: string): Promise<void> {\n await chrome.contextMenus.remove(id);\n }\n\n async removeAll(): Promise<void> {\n await chrome.contextMenus.removeAll();\n }\n\n onClicked(\n callback: (info: chrome.contextMenus.OnClickData, tab?: chrome.tabs.Tab) => void\n ): void {\n chrome.contextMenus.onClicked.addListener(callback);\n }\n}\n",
|
|
8
9
|
"// Chrome offscreen adapter implementation\n\nimport type { CreateOffscreenDocumentParameters, OffscreenAdapter } from \"../offscreen.adapter\";\n\nexport class ChromeOffscreenAdapter implements OffscreenAdapter {\n async createDocument(parameters: CreateOffscreenDocumentParameters): Promise<void> {\n await chrome.offscreen.createDocument({\n url: parameters.url,\n reasons: parameters.reasons as unknown as chrome.offscreen.Reason[],\n justification: parameters.justification,\n });\n }\n\n async closeDocument(): Promise<void> {\n await chrome.offscreen.closeDocument();\n }\n\n async hasDocument(): Promise<boolean> {\n // Chrome doesn't provide a direct API, so we query for offscreen contexts\n const existingContexts = await chrome.runtime.getContexts({\n contextTypes: [\"OFFSCREEN_DOCUMENT\" as unknown as chrome.runtime.ContextType],\n });\n return existingContexts.length > 0;\n }\n}\n",
|
|
@@ -15,7 +16,7 @@
|
|
|
15
16
|
"// Adapter factory for automatically creating storage and sync adapters\n\nimport { createStorageAdapter, type StorageAdapter } from \"./storage-adapter\";\nimport { createSyncAdapter, type SyncAdapter } from \"./sync-adapter\";\n\n/**\n * Combined adapters for state management\n */\nexport interface StateAdapters {\n storage: StorageAdapter;\n sync: SyncAdapter;\n}\n\n/**\n * Options for adapter creation\n */\nexport interface AdapterOptions {\n /**\n * Force a specific context (bypasses auto-detection)\n */\n context?: \"chrome-extension\" | \"web-app\" | \"node\" | \"test\";\n\n /**\n * Custom storage adapter\n */\n storage?: StorageAdapter;\n\n /**\n * Custom sync adapter\n */\n sync?: SyncAdapter;\n\n /**\n * For web apps: force single-tab mode (no sync)\n */\n singleTab?: boolean;\n\n /**\n * Custom BroadcastChannel name for web app sync\n */\n channelName?: string;\n}\n\n/**\n * Automatically create appropriate storage and sync adapters\n * based on the execution context\n *\n * Detection order:\n * 1. Chrome extension → ChromeStorage + ChromeRuntime sync\n * 2. Web app (multi-tab) → IndexedDB + BroadcastChannel sync\n * 3. Web app (single-tab) → IndexedDB + NoOp sync\n * 4. Node.js/test → Memory storage + NoOp sync\n *\n * @example\n * ```typescript\n * // Automatic detection\n * const adapters = createStateAdapters();\n *\n * // Force single-tab mode\n * const adapters = createStateAdapters({ singleTab: true });\n *\n * // Custom adapters\n * const adapters = createStateAdapters({\n * storage: new CustomStorageAdapter(),\n * sync: new CustomSyncAdapter()\n * });\n * ```\n */\nexport function createStateAdapters(options: AdapterOptions = {}): StateAdapters {\n // Use custom adapters if provided\n if (options.storage && options.sync) {\n return {\n storage: options.storage,\n sync: options.sync,\n };\n }\n\n // Create storage adapter\n const storage = options.storage || createStorageAdapter();\n\n // Create sync adapter\n let sync: SyncAdapter;\n\n if (options.sync) {\n sync = options.sync;\n } else if (options.singleTab) {\n // Force no sync for single-tab mode\n const { NoOpSyncAdapter } = require(\"./sync-adapter\");\n sync = new NoOpSyncAdapter();\n } else {\n // Auto-detect sync mechanism\n sync = createSyncAdapter();\n }\n\n return { storage, sync };\n}\n\n/**\n * Create adapters for Chrome extension contexts\n */\nexport function createChromeAdapters(): StateAdapters {\n const { ChromeStorageAdapter } = require(\"./storage-adapter\");\n const { ChromeRuntimeSyncAdapter } = require(\"./sync-adapter\");\n\n return {\n storage: new ChromeStorageAdapter(),\n sync: new ChromeRuntimeSyncAdapter(),\n };\n}\n\n/**\n * Create adapters for web apps / PWAs\n */\nexport function createWebAdapters(\n options: { singleTab?: boolean; channelName?: string; dbName?: string } = {}\n): StateAdapters {\n const { IndexedDBAdapter } = require(\"./storage-adapter\");\n const { BroadcastChannelSyncAdapter, NoOpSyncAdapter } = require(\"./sync-adapter\");\n\n const storage = new IndexedDBAdapter(options.dbName);\n\n const sync = options.singleTab\n ? new NoOpSyncAdapter()\n : new BroadcastChannelSyncAdapter(options.channelName);\n\n return { storage, sync };\n}\n\n/**\n * Create adapters for Node.js / server contexts\n */\nexport function createNodeAdapters(): StateAdapters {\n const { MemoryStorageAdapter } = require(\"./storage-adapter\");\n const { NoOpSyncAdapter } = require(\"./sync-adapter\");\n\n return {\n storage: new MemoryStorageAdapter(),\n sync: new NoOpSyncAdapter(),\n };\n}\n\n/**\n * Create adapters for testing\n */\nexport function createMockAdapters(): StateAdapters {\n const { MemoryStorageAdapter } = require(\"./storage-adapter\");\n const { NoOpSyncAdapter } = require(\"./sync-adapter\");\n\n return {\n storage: new MemoryStorageAdapter(),\n sync: new NoOpSyncAdapter(),\n };\n}\n",
|
|
16
17
|
"// Adapter factory and exports\n\nimport type { Context } from \"../types/messages\";\nimport { ChromeContextMenusAdapter } from \"./chrome/context-menus.chrome\";\nimport { ChromeOffscreenAdapter } from \"./chrome/offscreen.chrome\";\nimport { ChromeRuntimeAdapter } from \"./chrome/runtime.chrome\";\nimport { ChromeStorageAdapter } from \"./chrome/storage.chrome\";\nimport { ChromeTabsAdapter } from \"./chrome/tabs.chrome\";\nimport { ChromeWindowAdapter } from \"./chrome/window.chrome\";\nimport type { ContextMenusAdapter } from \"./context-menus.adapter\";\nimport type { FetchAdapter } from \"./fetch.adapter\";\nimport { BrowserFetchAdapter } from \"./fetch.adapter\";\nimport type { LoggerAdapter } from \"./logger.adapter\";\nimport { MessageLoggerAdapter } from \"./logger.adapter\";\nimport type { OffscreenAdapter } from \"./offscreen.adapter\";\nimport type { RuntimeAdapter } from \"./runtime.adapter\";\nimport type { StorageAdapter } from \"./storage.adapter\";\nimport type { TabsAdapter } from \"./tabs.adapter\";\nimport type { WindowAdapter } from \"./window.adapter\";\n\nexport interface ExtensionAdapters {\n runtime: RuntimeAdapter;\n storage: StorageAdapter;\n tabs: TabsAdapter;\n window: WindowAdapter;\n offscreen: OffscreenAdapter;\n contextMenus: ContextMenusAdapter;\n fetch: FetchAdapter;\n logger: LoggerAdapter;\n}\n\nexport interface CreateChromeAdaptersOptions {\n consoleMirror?: boolean; // Mirror logs to console for development\n}\n\n/**\n * Create Chrome-specific adapters with context\n */\nexport function createChromeAdapters(\n context: Context,\n options?: CreateChromeAdaptersOptions\n): ExtensionAdapters {\n const runtime = new ChromeRuntimeAdapter();\n\n return {\n runtime,\n storage: new ChromeStorageAdapter(),\n tabs: new ChromeTabsAdapter(),\n window: new ChromeWindowAdapter(),\n offscreen: new ChromeOffscreenAdapter(),\n contextMenus: new ChromeContextMenusAdapter(),\n fetch: new BrowserFetchAdapter(),\n logger: new MessageLoggerAdapter(runtime, context, {\n ...(options?.consoleMirror !== undefined && { consoleMirror: options.consoleMirror }),\n fallbackToConsole: true,\n }),\n };\n}\n\nexport {\n type AdapterOptions,\n createChromeAdapters as createChromeStateAdapters,\n createMockAdapters,\n createNodeAdapters,\n createStateAdapters,\n createWebAdapters,\n type StateAdapters,\n} from \"../lib/adapter-factory\";\n// Re-export state management adapters\n// Avoid duplicate StorageAdapter export - use named exports to prevent conflicts\nexport {\n ChromeStorageAdapter as UniversalChromeStorageAdapter,\n createStorageAdapter,\n IndexedDBAdapter,\n MemoryStorageAdapter,\n type StorageAdapter as UniversalStorageAdapter,\n} from \"../lib/storage-adapter\";\nexport {\n BroadcastChannelSyncAdapter,\n ChromeRuntimeSyncAdapter,\n createSyncAdapter,\n NoOpSyncAdapter,\n type StateSyncMessage,\n type SyncAdapter,\n} from \"../lib/sync-adapter\";\nexport * from \"./context-menus.adapter\";\nexport * from \"./fetch.adapter\";\nexport * from \"./logger.adapter\";\nexport * from \"./offscreen.adapter\";\n// Re-export types\nexport * from \"./runtime.adapter\";\nexport * from \"./storage.adapter\";\nexport * from \"./tabs.adapter\";\nexport * from \"./window.adapter\";\n"
|
|
17
18
|
],
|
|
18
|
-
"mappings": "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",
|
|
19
|
-
"debugId": "
|
|
19
|
+
"mappings": "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",
|
|
20
|
+
"debugId": "2F84A479B7DC971364756E2164756E21",
|
|
20
21
|
"names": []
|
|
21
22
|
}
|
|
@@ -40,13 +40,8 @@ export declare class IndexedDBBlobCache implements BlobCache {
|
|
|
40
40
|
private static readonly DB_NAME;
|
|
41
41
|
private static readonly DB_VERSION;
|
|
42
42
|
private static readonly STORE_NAME;
|
|
43
|
-
private
|
|
43
|
+
private readonly dbRef;
|
|
44
44
|
private readonly urls;
|
|
45
|
-
/** Polly#107 post-v0.60: hard timeout on `indexedDB.open()`. See
|
|
46
|
-
* the matching note in `storage-adapter.ts` — healthy opens are
|
|
47
|
-
* sub-millisecond, the v0.60.0 fingerprint surfaced a zombie
|
|
48
|
-
* cross-tab connection firing no events at all. */
|
|
49
|
-
private static readonly OPEN_TIMEOUT_MS;
|
|
50
45
|
private openDB;
|
|
51
46
|
private getRecord;
|
|
52
47
|
private putRecord;
|