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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
🛡️
+
Page Blocked
+
ShieldAI detected a potential threat
+
+
+
+
+
+
+
+
+
+
+
+
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',