Skip to content

Commit 3fbed97

Browse files
Jules was unable to complete the task in time. Please review the work done so far and provide feedback for Jules to continue.
1 parent 0b5e7a4 commit 3fbed97

File tree

3 files changed

+67
-48
lines changed

3 files changed

+67
-48
lines changed

.eslintrc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
"env": {
33
"browser": true,
44
"es2021": true,
5-
"webextensions": true
5+
"webextensions": true,
6+
"node": true
67
},
78
"extends": ["eslint:recommended", "plugin:react/recommended"],
89
"overrides": [],

src/background/index.mjs

Lines changed: 47 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -86,27 +86,50 @@ function redactSensitiveFields(obj, recursionDepth = 0, maxDepth = 5, seen = new
8686
}
8787
seen.add(obj);
8888

89-
const redactedObj = Array.isArray(obj) ? [] : {};
90-
for (const key in obj) {
91-
if (Object.prototype.hasOwnProperty.call(obj, key)) {
92-
const lowerKey = key.toLowerCase();
93-
let isSensitive = false;
94-
for (const keyword of SENSITIVE_KEYWORDS) {
95-
if (lowerKey.includes(keyword)) {
96-
isSensitive = true;
97-
break;
89+
if (Array.isArray(obj)) {
90+
const redactedArray = [];
91+
for (let i = 0; i < obj.length; i++) {
92+
const item = obj[i];
93+
if (item !== null && typeof item === 'object') {
94+
redactedArray[i] = redactSensitiveFields(item, recursionDepth + 1, maxDepth, seen);
95+
} else if (typeof item === 'string') {
96+
let isItemSensitive = false;
97+
const lowerItem = item.toLowerCase();
98+
for (const keyword of SENSITIVE_KEYWORDS) {
99+
if (lowerItem.includes(keyword)) {
100+
isItemSensitive = true;
101+
break;
102+
}
98103
}
99-
}
100-
if (isSensitive) {
101-
redactedObj[key] = 'REDACTED';
102-
} else if (obj[key] !== null && typeof obj[key] === 'object') { // Added obj[key] !== null check
103-
redactedObj[key] = redactSensitiveFields(obj[key], recursionDepth + 1, maxDepth, seen);
104+
redactedArray[i] = isItemSensitive ? 'REDACTED' : item;
104105
} else {
105-
redactedObj[key] = obj[key];
106+
redactedArray[i] = item;
107+
}
108+
}
109+
return redactedArray;
110+
} else {
111+
const redactedObj = {};
112+
for (const key in obj) {
113+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
114+
const lowerKey = key.toLowerCase();
115+
let isKeySensitive = false;
116+
for (const keyword of SENSITIVE_KEYWORDS) {
117+
if (lowerKey.includes(keyword)) {
118+
isKeySensitive = true;
119+
break;
120+
}
121+
}
122+
if (isKeySensitive) {
123+
redactedObj[key] = 'REDACTED';
124+
} else if (obj[key] !== null && typeof obj[key] === 'object') {
125+
redactedObj[key] = redactSensitiveFields(obj[key], recursionDepth + 1, maxDepth, seen);
126+
} else {
127+
redactedObj[key] = obj[key];
128+
}
106129
}
107130
}
131+
return redactedObj;
108132
}
109-
return redactedObj;
110133
}
111134

112135
function setPortProxy(port, proxyTabId) {
@@ -139,7 +162,7 @@ function setPortProxy(port, proxyTabId) {
139162
port.proxy.postMessage(msg)
140163
} catch (e) {
141164
console.error('[background] Error posting message to proxy tab in _portOnMessage:', e, msg);
142-
try { // Attempt to notify the original sender about the failure
165+
try {
143166
port.postMessage({ error: 'Failed to forward message to target tab. Tab might be closed or an extension error occurred.' });
144167
} catch (notifyError) {
145168
console.error('[background] Error sending forwarding failure notification back to original sender:', notifyError);
@@ -174,11 +197,11 @@ function setPortProxy(port, proxyTabId) {
174197
try { port.onMessage.removeListener(port._portOnMessage); }
175198
catch(e) { console.warn("[background] Error removing _portOnMessage on max retries:", e); }
176199
}
177-
if (port._portOnDisconnect) { // Cleanup _portOnDisconnect as well
200+
if (port._portOnDisconnect) {
178201
try { port.onDisconnect.removeListener(port._portOnDisconnect); }
179-
catch(e) { console.warn("[background] Error removing _portOnDisconnect on max retries:", e); }
202+
catch(e) { console.warn("[background] Error removing _portOnDisconnect from main port on max retries:", e); }
180203
}
181-
try { // Notify user about final connection failure
204+
try {
182205
port.postMessage({ error: `Connection to ChatGPT tab lost after ${RECONNECT_CONFIG.MAX_ATTEMPTS} attempts. Please refresh the page.` });
183206
} catch(e) {
184207
console.warn("[background] Error sending final error message on max retries:", e);
@@ -248,7 +271,6 @@ async function executeApi(session, port, config) {
248271
try {
249272
if (isUsingCustomModel(session)) {
250273
console.debug('[background] Using Custom Model API')
251-
// ... (rest of the logic for custom model remains the same)
252274
if (!session.apiMode)
253275
await generateAnswersWithCustomApi(
254276
port,
@@ -314,7 +336,7 @@ async function executeApi(session, port, config) {
314336
const accessToken = await getChatGptAccessToken()
315337
await generateAnswersWithChatgptWebApi(port, session.question, session, accessToken)
316338
}
317-
} else if (isUsingClaudeWebModel(session)) { // ... other models
339+
} else if (isUsingClaudeWebModel(session)) {
318340
console.debug('[background] Using Claude Web Model')
319341
const sessionKey = await getClaudeSessionKey()
320342
await generateAnswersWithClaudeWebApi(port, session.question, session, sessionKey)
@@ -466,7 +488,7 @@ Browser.runtime.onMessage.addListener(async (message, sender) => {
466488
try {
467489
const response = await fetch(message.data.input, message.data.init)
468490
const text = await response.text()
469-
if (!response.ok) { // Added check for HTTP error statuses
491+
if (!response.ok) {
470492
console.warn(`[background] FETCH received error status: ${response.status} for ${message.data.input}`);
471493
}
472494
console.debug(
@@ -475,7 +497,7 @@ Browser.runtime.onMessage.addListener(async (message, sender) => {
475497
return [
476498
{
477499
body: text,
478-
ok: response.ok, // Added ok status
500+
ok: response.ok,
479501
status: response.status,
480502
statusText: response.statusText,
481503
headers: Object.fromEntries(response.headers),
@@ -531,7 +553,7 @@ try {
531553
) {
532554
console.log('[background] Capturing Arkose public_key request:', details.url)
533555
let formData = new URLSearchParams()
534-
if (details.requestBody && details.requestBody.formData) {
556+
if (details.requestBody?.formData) { // Optional chaining
535557
for (const k in details.requestBody.formData) {
536558
formData.append(k, details.requestBody.formData[k])
537559
}

src/content-script/index.jsx

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,6 @@ async function mountComponent(siteConfig) {
169169
}
170170
}
171171

172-
/**
173-
* @param {string[]|function} inputQuery
174-
* @returns {Promise<string>}
175-
*/
176172
async function getInput(inputQuery) {
177173
console.debug('[content] getInput called with query:', inputQuery)
178174
try {
@@ -209,10 +205,10 @@ async function getInput(inputQuery) {
209205
}
210206
}
211207
console.debug('[content] No input found from selector or element empty.')
212-
return undefined // Explicitly return undefined if no input found
208+
return undefined
213209
} catch (error) {
214210
console.error('[content] Error in getInput:', error)
215-
return undefined // Explicitly return undefined on error
211+
return undefined
216212
}
217213
}
218214

@@ -222,7 +218,7 @@ const deleteToolbar = () => {
222218
if (toolbarContainer && toolbarContainer.className === 'chatgptbox-toolbar-container') {
223219
console.debug('[content] Deleting toolbar:', toolbarContainer)
224220
toolbarContainer.remove()
225-
toolbarContainer = null // Clear reference
221+
toolbarContainer = null
226222
}
227223
} catch (error) {
228224
console.error('[content] Error in deleteToolbar:', error)
@@ -526,7 +522,7 @@ async function prepareForStaticCard() {
526522
let initSuccess = true
527523
if (siteName in siteConfig) {
528524
const siteAdapterAction = siteConfig[siteName].action
529-
if (siteAdapterAction && siteAdapterAction.init) {
525+
if (siteAdapterAction?.init) {
530526
console.debug(`[content] Initializing site adapter action for ${siteName}.`)
531527
initSuccess = await siteAdapterAction.init(
532528
location.hostname,
@@ -577,7 +573,7 @@ async function overwriteAccessToken() {
577573
if (location.pathname === '/api/auth/session') {
578574
console.debug('[content] On /api/auth/session page.')
579575
const preElement = document.querySelector('pre')
580-
if (preElement?.textContent) { // Applied optional chaining
576+
if (preElement?.textContent) {
581577
const response = preElement.textContent
582578
try {
583579
data = JSON.parse(response)
@@ -606,7 +602,7 @@ async function overwriteAccessToken() {
606602
}
607603
}
608604

609-
if (data?.accessToken) { // Applied optional chaining
605+
if (data?.accessToken) {
610606
await setAccessToken(data.accessToken)
611607
console.log('[content] ChatGPT Access token has been set successfully from page data.')
612608
} else {
@@ -679,12 +675,12 @@ async function prepareForJumpBackNotification() {
679675
}
680676
} catch (err) {
681677
console.error('[content] Error polling for Claude session key:', err)
682-
// Example for Qodo: Stop on specific error
683-
// if (err.message.includes('NetworkError') && !promiseSettled) {
684-
// promiseSettled = true;
685-
// cleanup();
686-
// reject(new Error(`Failed to get Claude session key: ${err.message}`));
687-
// }
678+
const errMsg = err.message.toLowerCase();
679+
if ((errMsg.includes('network') || errMsg.includes('permission')) && !promiseSettled) {
680+
promiseSettled = true;
681+
cleanup();
682+
reject(new Error(`Failed to get Claude session key due to: ${err.message}`));
683+
}
688684
}
689685
}, 500)
690686

@@ -751,12 +747,12 @@ async function prepareForJumpBackNotification() {
751747
}
752748
} catch (err_set) {
753749
console.error('[content] Error setting Kimi refresh token from polling:', err_set)
754-
// Example for Qodo: Stop on specific error
755-
// if (err_set.message.includes('SomeError') && !promiseSettled) {
756-
// promiseSettled = true;
757-
// cleanup();
758-
// reject(new Error(`Failed to process Kimi token: ${err_set.message}`));
759-
// }
750+
const errMsg = err_set.message.toLowerCase();
751+
if ((errMsg.includes('network') || errMsg.includes('storage')) && !promiseSettled) { // Example error check
752+
promiseSettled = true;
753+
cleanup();
754+
reject(new Error(`Failed to process Kimi token: ${err_set.message}`));
755+
}
760756
}
761757
}, 500)
762758

0 commit comments

Comments
 (0)