Skip to content

Commit 0b1662f

Browse files
committed
fix: keep alive service worker
1 parent aa71ae0 commit 0b1662f

File tree

8 files changed

+57
-29
lines changed

8 files changed

+57
-29
lines changed

packages/adena-extension/src/background.ts

+16-3
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ chrome.alarms.onAlarm.addListener(async (alarm) => {
106106
chrome.tabs.onUpdated.addListener((tabId, changeInfo) => {
107107
// Check metadata when tab is updated
108108
if (changeInfo.status === 'complete') {
109-
chrome.tabs.sendMessage(tabId, CommandMessage.command('checkMetadata'));
109+
chrome.tabs.sendMessage(tabId, CommandMessage.command('checkMetadata')).catch(console.info);
110110
}
111111
});
112112

@@ -120,9 +120,22 @@ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
120120
});
121121

122122
function initAlarms(): void {
123-
SCHEDULE_ALARMS.map((alarm) => {
123+
SCHEDULE_ALARMS.map(initAlarmWithDelay);
124+
}
125+
126+
function initAlarmWithDelay(alarm: { key: string; periodInMinutes: number; delay: number }): void {
127+
if (alarm.delay === 0) {
124128
chrome.alarms.create(alarm.key, {
125129
periodInMinutes: alarm.periodInMinutes,
126130
});
127-
});
131+
return;
132+
}
133+
134+
setTimeout(
135+
() =>
136+
chrome.alarms.create(alarm.key, {
137+
periodInMinutes: alarm.periodInMinutes,
138+
}),
139+
alarm.delay,
140+
);
128141
}

packages/adena-extension/src/common/constants/alarm-key.constant.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ export enum AlarmKey {
55
WAKE_ALARM_DELAY_40S = 'WAKE_ALARM_DELAY_40S',
66
}
77

8-
export const SCHEDULE_ALARMS: { key: string; periodInMinutes: number }[] = [
9-
{ key: AlarmKey.EXPIRED_PASSWORD, periodInMinutes: 1 },
10-
{ key: AlarmKey.WAKE_ALARM, periodInMinutes: 1 },
11-
{ key: AlarmKey.WAKE_ALARM_DELAY_20S, periodInMinutes: 1 },
12-
{ key: AlarmKey.WAKE_ALARM_DELAY_40S, periodInMinutes: 1 },
8+
export const SCHEDULE_ALARMS: { key: string; periodInMinutes: number; delay: number }[] = [
9+
{ key: AlarmKey.EXPIRED_PASSWORD, periodInMinutes: 1, delay: 0 },
10+
{ key: AlarmKey.WAKE_ALARM, periodInMinutes: 1, delay: 0 },
11+
{ key: AlarmKey.WAKE_ALARM_DELAY_20S, periodInMinutes: 1, delay: 20_000 },
12+
{ key: AlarmKey.WAKE_ALARM_DELAY_40S, periodInMinutes: 1, delay: 40_000 },
1313
];

packages/adena-extension/src/common/utils/crypto-utils.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const encryptPassword = async (
1616
password: string,
1717
): Promise<{ encryptedKey: string; encryptedPassword: string }> => {
1818
const result = await sendMessage(CommandMessage.command('encryptPassword', { password }));
19-
if (result.code !== 200) {
19+
if (!result || result.code !== 200) {
2020
throw new Error('Encryption key not initialized.');
2121
}
2222

@@ -34,7 +34,7 @@ export const decryptPassword = async (iv: string, encryptedPassword: string): Pr
3434
encryptedPassword,
3535
}),
3636
);
37-
if (result?.code !== 200 || !result?.data?.password) {
37+
if (!result || result?.code !== 200 || !result?.data?.password) {
3838
throw new Error('Encryption key not initialized.');
3939
}
4040

@@ -45,8 +45,11 @@ export const clearInMemoryKey = async (): Promise<void> => {
4545
await sendMessage(CommandMessage.command('clearEncryptKey'));
4646
};
4747

48-
function sendMessage<T = any>(message: CommandMessageData): Promise<CommandMessageData<T>> {
49-
return new Promise((resolve) => {
48+
function sendMessage<T = any>(message: CommandMessageData): Promise<CommandMessageData<T> | null> {
49+
return new Promise<CommandMessageData<T> | null>((resolve) => {
5050
chrome.runtime.sendMessage(message, resolve);
51+
}).catch((error) => {
52+
console.warn(error);
53+
return null;
5154
});
5255
}

packages/adena-extension/src/components/pages/router/side-menu-layout/side-menu-container.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,13 @@ const SideMenuContainer: React.FC<SideMenuContainerProps> = ({ open, setOpen })
9797
setOpen(false);
9898
await walletService.lockWallet();
9999
await clearWallet();
100-
await chrome.runtime.sendMessage(CommandMessage.command('clearPopup'));
100+
101+
try {
102+
await chrome.runtime.sendMessage(CommandMessage.command('clearPopup'));
103+
} catch (error) {
104+
console.warn(error);
105+
}
106+
101107
await loadAccounts();
102108
navigate(RoutePath.Login, { replace: true });
103109
}, [walletService, navigate]);

packages/adena-extension/src/content.ts

+15-13
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,6 @@ import { EventMessageData } from '@inject/message';
33
import { CommandHandler } from '@inject/message/command-handler';
44
import { CommandMessageData } from '@inject/message/command-message';
55

6-
const sendMessage = (event: MessageEvent): void => {
7-
const message = event.data;
8-
9-
chrome.runtime.sendMessage(message, (response) => {
10-
Promise.resolve(response).then((result) => {
11-
event.source?.postMessage(result, {
12-
targetOrigin: event.origin,
13-
});
14-
});
15-
return true;
16-
});
17-
};
18-
196
const loadScript = (): void => {
207
const container = document.head || document.documentElement;
218
const scriptElement = document.createElement('script');
@@ -63,6 +50,21 @@ const initExtensionListener = (): void => {
6350
});
6451
};
6552

53+
const sendMessage = (event: MessageEvent): void => {
54+
const message = event.data;
55+
56+
chrome.runtime.sendMessage(message, (response) => {
57+
Promise.resolve(response)
58+
.then((result) => {
59+
event.source?.postMessage(result, {
60+
targetOrigin: event.origin,
61+
});
62+
})
63+
.catch(console.info);
64+
return true;
65+
});
66+
};
67+
6668
loadScript();
6769
initListener();
6870
initExtensionListener();

packages/adena-extension/src/hooks/use-event.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export const useEvent = (): UseEventReturn => {
1212
return;
1313
}
1414
const tabId = currentTab.id;
15-
chrome.tabs.sendMessage(tabId, message);
15+
chrome.tabs.sendMessage(tabId, message).catch(console.warn);
1616
});
1717
}
1818

packages/adena-extension/src/inject/executor/executor.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,11 @@ export class AdenaExecutor {
170170
key: this.eventKey,
171171
};
172172

173-
window.postMessage(this.eventMessage, window.location.origin);
173+
try {
174+
window.postMessage(this.eventMessage, window.location.origin);
175+
} catch (error) {
176+
console.warn(error);
177+
}
174178
this.messages[this.eventKey] = {
175179
request: this.eventMessage,
176180
response: undefined,

packages/adena-extension/src/inject/message/command-handler.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ export class CommandHandler {
7171
return;
7272
}
7373
} catch (error) {
74-
console.error(error);
74+
console.info(error);
7575
sendResponse(makeInternalErrorResponse(message));
7676
}
7777

0 commit comments

Comments
 (0)