Switch to HTTP Basic Auth and improve PDF detection

- Replace token-based auth with HTTP Basic Authentication per Binect API v1 spec
- Improve PDF detection: check current tab first, then background service, fallback to recent downloads
- Add password visibility toggle in login form
- Add extensive debug logging throughout for troubleshooting
- Update manifest with alarms, activeTab permissions and <all_urls> host permission
- Add documentation files and development helper scripts
- Add Binect API specs for reference

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-14 16:50:57 +01:00
parent 0be7b56506
commit be4377253e
16 changed files with 5079 additions and 114 deletions

View File

@@ -13,11 +13,12 @@ let lastDetectedPDF: DetectedPDF | null = null;
* Initialize extension on install
*/
chrome.runtime.onInstalled.addListener((details) => {
console.log('[Service Worker] onInstalled event:', details.reason);
if (details.reason === 'install') {
console.log('BinectChrome installed');
console.log('[Service Worker] BinectChrome installed');
setupCredentialExpiryAlarm();
} else if (details.reason === 'update') {
console.log('BinectChrome updated');
console.log('[Service Worker] BinectChrome updated');
}
});
@@ -25,7 +26,7 @@ chrome.runtime.onInstalled.addListener((details) => {
* Handle extension startup
*/
chrome.runtime.onStartup.addListener(() => {
console.log('BinectChrome started');
console.log('[Service Worker] onStartup event - BinectChrome started');
setupCredentialExpiryAlarm();
});
@@ -60,37 +61,58 @@ async function checkAndDeleteExpiredCredentials() {
}
}
/**
* Initialize badge with default icon
*/
function initializeBadge() {
// Set a default badge to make extension visible
chrome.action.setBadgeText({ text: '•' });
chrome.action.setBadgeBackgroundColor({ color: '#4A90E2' }); // Binect Blue
console.log('[Service Worker] Default badge set');
}
// Initialize badge on load
initializeBadge();
/**
* Start PDF detection
*/
console.log('[Service Worker] Initializing PDF detection...');
startPDFDetection((pdf: DetectedPDF) => {
console.log('PDF detected:', pdf.filename);
console.log('[Service Worker] PDF DETECTED CALLBACK:', pdf.filename);
lastDetectedPDF = pdf;
// Update badge to indicate PDF detected
chrome.action.setBadgeText({ text: '1' });
chrome.action.setBadgeBackgroundColor({ color: '#4A90E2' }); // Binect Blue
console.log('[Service Worker] Badge updated, PDF stored in memory');
});
/**
* Handle messages from popup
*/
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
console.log('[Service Worker] Message received:', request.action);
if (request.action === 'getLastPDF') {
console.log('[Service Worker] Returning last PDF:', lastDetectedPDF ? lastDetectedPDF.filename : 'none');
sendResponse({ pdf: lastDetectedPDF });
return true;
}
if (request.action === 'clearLastPDF') {
console.log('[Service Worker] Clearing last PDF');
lastDetectedPDF = null;
chrome.action.setBadgeText({ text: '' });
chrome.action.setBadgeText({ text: '' }); // Reset to default badge
sendResponse({ success: true });
return true;
}
if (request.action === 'pdfSent') {
// Clear badge after successful send
chrome.action.setBadgeText({ text: '' });
console.log('[Service Worker] PDF sent, resetting badge');
// Reset badge after successful send
chrome.action.setBadgeText({ text: '•' }); // Reset to default badge
sendResponse({ success: true });
return true;
}
@@ -98,4 +120,5 @@ chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
return false;
});
console.log('BinectChrome service worker loaded');
console.log('[Service Worker] ===== BinectChrome service worker loaded =====');
console.log('[Service Worker] Timestamp:', new Date().toISOString());