-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackground.js
More file actions
84 lines (70 loc) · 2.24 KB
/
Copy pathbackground.js
File metadata and controls
84 lines (70 loc) · 2.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// CRMChat Translator - Service Worker (Background)
// Routes outbound translation requests through the Cloudflare Worker proxy
const TRANSLATE_API = 'https://crmchat-translate.crmchat-translate.workers.dev/translate';
// Default settings
const DEFAULT_SETTINGS = {
outboundLanguage: 'ru',
enabled: true,
};
async function getSettings() {
return chrome.storage.sync.get(DEFAULT_SETTINGS);
}
async function translateText(text, targetLang) {
if (!text || !text.trim()) {
return { translatedText: text, detectedLanguage: '' };
}
const response = await fetch(TRANSLATE_API, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ text, targetLanguage: targetLang }),
});
if (!response.ok) {
const error = await response.json().catch(() => ({}));
throw new Error(error?.error || `Translation error: ${response.status}`);
}
return response.json();
}
// Handle messages from content scripts
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.type === 'translate') {
handleTranslate(message, sendResponse);
return true;
}
if (message.type === 'getSettings') {
getSettings().then(sendResponse);
return true;
}
if (message.type === 'saveSettings') {
chrome.storage.sync.set(message.settings).then(() => {
sendResponse({ success: true });
chrome.tabs.query({}, (tabs) => {
for (const tab of tabs) {
chrome.tabs.sendMessage(tab.id, {
type: 'settingsUpdated',
settings: message.settings,
}).catch(() => {});
}
});
});
return true;
}
});
async function handleTranslate(message, sendResponse) {
try {
const settings = await getSettings();
if (!settings.enabled) {
sendResponse({ error: 'Translation is disabled' });
return;
}
const result = await translateText(message.text, settings.outboundLanguage);
sendResponse(result);
} catch (err) {
sendResponse({ error: err.message });
}
}
// On install, open popup so user can configure language preferences
chrome.runtime.onInstalled.addListener((details) => {
if (details.reason === 'install') {
chrome.tabs.create({ url: chrome.runtime.getURL('popup.html') });
}
});