@coinbase/onchaintestkit
Version:
End-to-end testing toolkit for blockchain applications, powered by Playwright
47 lines (46 loc) • 1.97 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getExtensionId = getExtensionId;
/**
* Get extension ID from browser context using Chrome management API
* Simple implementation without retry logic or caching
*/
async function getExtensionId(context, extensionName) {
const page = await context.newPage();
try {
// Navigate to chrome://extensions to get access to the management API
await page.goto("chrome://extensions/");
const extensions = await page.evaluate(() => {
return new Promise((resolve, reject) => {
if (!window.chrome?.management?.getAll) {
reject(new Error("Chrome management API not available"));
return;
}
window.chrome.management.getAll((extensions) => {
if (window.chrome?.runtime?.lastError) {
reject(new Error(`Chrome management API error: ${window.chrome.runtime.lastError.message}`));
return;
}
const extensionData = extensions
.filter((ext) => ext.type === "extension")
.map((ext) => ({
id: ext.id,
name: ext.name,
enabled: ext.enabled,
}));
resolve(extensionData);
});
});
});
// Find extension by name (case-insensitive contains match)
const extension = extensions.find(ext => ext.name.toLowerCase().includes(extensionName.toLowerCase()));
if (!extension) {
const availableNames = extensions.map(ext => ext.name).join(", ");
throw new Error(`Extension "${extensionName}" not found. Available extensions: ${availableNames}`);
}
return extension.id;
}
finally {
await page.close();
}
}