diff --git a/packages/extension/public/manifest.json b/packages/extension/public/manifest.json index 9bf9d6a..679f598 100644 --- a/packages/extension/public/manifest.json +++ b/packages/extension/public/manifest.json @@ -3,12 +3,16 @@ "name": "ShieldAI - Phishing & Spam Protection", "version": "0.1.0", "description": "Real-time phishing detection and spam protection powered by ShieldAI", + "background": { + "service_worker": "background.js" + }, "permissions": [ "activeTab", "storage", "tabs", "scripting", - "declarativeNetRequest" + "declarativeNetRequest", + "notifications" ], "host_permissions": [ "https://*/*", diff --git a/packages/extension/public/options.html b/packages/extension/public/options.html new file mode 100644 index 0000000..fbac82f --- /dev/null +++ b/packages/extension/public/options.html @@ -0,0 +1,189 @@ + + + + + + ShieldAI Options + + + +

🛡️ ShieldAI Options

+

Configure your phishing & spam protection

+ +
+
Connection
+
+ + +
+
+ + +
+
+ +
+
Protection Settings
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
Blocked Domains
+ +
+ + +
+
+ +
+
Allowed Domains (Whitelist)
+ +
+ + +
+
+ +
+ + +
+ +
Settings saved!
+ + + + diff --git a/packages/extension/public/popup.html b/packages/extension/public/popup.html new file mode 100644 index 0000000..29afc1e --- /dev/null +++ b/packages/extension/public/popup.html @@ -0,0 +1,271 @@ + + + + + + ShieldAI Protection + + + + + + + + + + diff --git a/packages/extension/src/background/index.ts b/packages/extension/src/background/index.ts index 1abe98d..b6eda8a 100644 --- a/packages/extension/src/background/index.ts +++ b/packages/extension/src/background/index.ts @@ -1,8 +1,8 @@ -import { UrlCheckResult, UrlVerdict, ThreatInfo, BackgroundMessage, MessageType, SubscriptionTier, PhishingReport } from '../types'; -import { urlCache, CACHE_TTL } from './cache'; -import { phishingDetector } from './phishing-detector'; -import { settingsManager } from './settings'; -import { shieldApiClient } from './api-client'; +import { UrlCheckResult, UrlVerdict, ThreatInfo, BackgroundMessage, MessageType, SubscriptionTier, PhishingReport, ExtensionSettings } from '../types'; +import { urlCache, CACHE_TTL } from '../lib/cache'; +import { phishingDetector } from '../lib/phishing-detector'; +import { settingsManager } from '../lib/settings'; +import { shieldApiClient } from '../lib/api-client'; let threatsBlockedToday = 0; let urlsCheckedToday = 0; @@ -140,17 +140,15 @@ async function showBlockedPage(tabId: number, url: string): Promise { await chrome.tabs.update(tabId, { url: blockedUrl }); } -function showWarningNotification(result: UrlCheckResult): void { - const showNotif = settingsManager.get().then(s => s.showNotifications); - Promise.resolve(showNotif).then((enabled) => { - if (!enabled) return; - chrome.notifications.create({ - type: 'basic', - iconUrl: 'icons/icon48.png', - title: 'ShieldAI Warning', - message: `${result.verdict.toUpperCase()}: ${result.domain}`, - priority: result.verdict === UrlVerdict.PHISHING ? 2 : 0, - }); +async function showWarningNotification(result: UrlCheckResult): Promise { + const settings = await settingsManager.get(); + if (!settings.showNotifications) return; + await chrome.notifications.create({ + type: 'basic', + iconUrl: 'icons/icon48.png', + title: 'ShieldAI Warning', + message: `${result.verdict.toUpperCase()}: ${result.domain}`, + priority: result.verdict === UrlVerdict.PHISHING ? 2 : 0, }); } diff --git a/packages/extension/src/lib/api-client.ts b/packages/extension/src/lib/api-client.ts index b694eca..c368bfc 100644 --- a/packages/extension/src/lib/api-client.ts +++ b/packages/extension/src/lib/api-client.ts @@ -88,7 +88,8 @@ export class ShieldApiClient { async authenticate(apiKey: string): Promise<{ userId: string; tier: SubscriptionTier } | null> { try { - const response = await fetch(`${settingsManager.get().then(s => s.apiBaseUrl)}/extension/auth`, { + const settings = await settingsManager.get(); + const response = await fetch(`${settings.apiBaseUrl}/extension/auth`, { method: 'POST', headers: { 'Content-Type': 'application/json',