mirror of
https://github.com/primedigitaltech/azon_seeker.git
synced 2026-10-05 07:13:06 +08:00
72 lines
2.4 KiB
JavaScript
72 lines
2.4 KiB
JavaScript
const debugPort = process.env.CHROMIUM_DEBUG_PORT || '9225';
|
|
const targets = await fetch(`http://127.0.0.1:${debugPort}/json/list`).then((response) =>
|
|
response.json(),
|
|
);
|
|
const worker = targets.find(
|
|
(target) => target.type === 'service_worker' && target.url.endsWith('/dist/background/index.mjs'),
|
|
);
|
|
if (!worker) throw new Error('Azon Seeker background service worker was not found.');
|
|
|
|
const socket = new WebSocket(worker.webSocketDebuggerUrl);
|
|
const pending = new Map();
|
|
let nextId = 1;
|
|
|
|
socket.addEventListener('message', (event) => {
|
|
const message = JSON.parse(event.data);
|
|
if (!message.id || !pending.has(message.id)) return;
|
|
const { resolve, reject } = pending.get(message.id);
|
|
pending.delete(message.id);
|
|
message.error ? reject(new Error(message.error.message)) : resolve(message.result);
|
|
});
|
|
|
|
await new Promise((resolve, reject) => {
|
|
socket.addEventListener('open', resolve, { once: true });
|
|
socket.addEventListener('error', reject, { once: true });
|
|
});
|
|
|
|
function request(method, params = {}) {
|
|
return new Promise((resolve, reject) => {
|
|
const id = nextId++;
|
|
pending.set(id, { resolve, reject });
|
|
socket.send(JSON.stringify({ id, method, params }));
|
|
});
|
|
}
|
|
|
|
const evaluation = await request('Runtime.evaluate', {
|
|
expression: `(async () => ({
|
|
manifest: chrome.runtime.getManifest(),
|
|
alarm: await chrome.alarms.get('amazon-sync-retry'),
|
|
storage: await chrome.storage.local.get([
|
|
'amazon-sync-queue-v1',
|
|
'amazon-sync-state-v1'
|
|
])
|
|
}))()`,
|
|
awaitPromise: true,
|
|
returnByValue: true,
|
|
});
|
|
socket.close();
|
|
|
|
if (evaluation.exceptionDetails) {
|
|
throw new Error(evaluation.exceptionDetails.text || 'Extension evaluation failed.');
|
|
}
|
|
const runtime = evaluation.result.value;
|
|
if (runtime.manifest.version !== '0.7.13') throw new Error('Unexpected extension version.');
|
|
if (!runtime.manifest.permissions.includes('alarms')) throw new Error('Missing alarms permission.');
|
|
if (runtime.alarm?.name !== 'amazon-sync-retry') throw new Error('Retry alarm was not created.');
|
|
const state = JSON.parse(runtime.storage['amazon-sync-state-v1']);
|
|
if (state.pendingCount !== 0 || state.status !== 'synced') {
|
|
throw new Error(`Unexpected initial sync state: ${JSON.stringify(state)}`);
|
|
}
|
|
console.log(
|
|
JSON.stringify(
|
|
{
|
|
extensionId: new URL(worker.url).host,
|
|
version: runtime.manifest.version,
|
|
retryAlarm: runtime.alarm.name,
|
|
syncState: state,
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|