Add initial project files for MTH Video Manifest Capture extension

This commit is contained in:
Minidu Thiranjaya
2025-03-05 15:20:26 +05:30
parent aa71fe6bb9
commit 823492346a
9 changed files with 722 additions and 0 deletions

75
background.js Normal file
View File

@@ -0,0 +1,75 @@
console.log('Background script loaded');
chrome.webRequest.onBeforeRequest.addListener(
(details) => {
try {
const originalUrl = details.url;
if (
(originalUrl.includes('/transform/videomanifest') && originalUrl.includes('format=dash')) ||
originalUrl.endsWith('.m3u8') ||
originalUrl.endsWith('.mpd')
) {
console.log('Video manifest detected:', originalUrl);
let cleanedUrl = originalUrl;
let type = 'unknown';
if (originalUrl.includes('/transform/videomanifest') && originalUrl.includes('format=dash')) {
const index = originalUrl.indexOf('format=dash');
cleanedUrl = originalUrl.substring(0, index + 'format=dash'.length);
type = 'dash';
} else if (originalUrl.endsWith('.mpd')) {
const index = originalUrl.indexOf('.mpd') + '.mpd'.length;
cleanedUrl = originalUrl.substring(0, index);
type = 'dash';
} else if (originalUrl.endsWith('.m3u8')) {
const index = originalUrl.indexOf('.m3u8') + '.m3u8'.length;
cleanedUrl = originalUrl.substring(0, index);
type = 'hls';
}
const manifestData = {
originalUrl: originalUrl,
cleanedUrl: cleanedUrl,
type: type
};
chrome.storage.local.set({ lastManifest: manifestData }, (result) => {
if (chrome.runtime.lastError) {
console.error('Error saving manifest:', chrome.runtime.lastError.message);
} else {
console.log('Manifest saved:', manifestData);
}
});
chrome.runtime.sendMessage({ type: 'manifestDetected', data: manifestData }, (response) => {
if (chrome.runtime.lastError) {
console.error('Error sending message:', chrome.runtime.lastError.message);
}
});
}
} catch (error) {
console.error('Error in webRequest listener:', error);
}
},
{ urls: ["<all_urls>"] },
["requestBody"]
);
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
console.log('Message received:', message);
if (message.type === 'getLastManifest') {
try {
chrome.storage.local.get('lastManifest', (result) => {
if (chrome.runtime.lastError) {
console.error('Error getting manifest:', chrome.runtime.lastError.message);
sendResponse({ data: null });
} else {
sendResponse({ data: result.lastManifest || null });
}
});
} catch (error) {
console.error('Error in message listener:', error);
sendResponse({ data: null });
}
return true; // Keep the channel open for async response
}
});