blob: 96cab7e0dfbdaf5c2916ab6fa5d23c3d85307db6 (
plain) (
blame)
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
|
// Define message types
export type MessageType =
| {
type: "SAVE_PAGE";
payload: {
html: string;
url: string;
spaces: string[];
description: string;
prefetched: {
contentToVectorize: string;
contentToSave: string;
title: string;
type: string;
};
};
}
| { type: "GET_SPACES"; payload: undefined }
| { type: "EXPORT_TWITTER_BOOKMARKS"; payload: undefined }
| { type: "ACTIVATE_CONTENT"; payload: undefined }
| { type: "SYNC_CHROME_BOOKMARKS"; payload: undefined }
| { type: "IMPORT_CHROME_BOOKMARKS"; payload: undefined };
// Add more message types as needed
// Type for message handlers
export type MessageHandler<T extends MessageType> = (
message: T,
sender: chrome.runtime.MessageSender,
sendResponse: (response?: any) => void
) => void | Promise<void>;
// Message handlers registry
export const messageHandlers = new Map<
MessageType["type"],
MessageHandler<MessageType>
>();
// Register message handlers
export function registerMessageHandler<T extends MessageType>(
type: T["type"],
handler: MessageHandler<T>
) {
messageHandlers.set(type, handler as MessageHandler<MessageType>);
}
// Main message listener
export const messageListener = (
message: MessageType,
sender: chrome.runtime.MessageSender,
sendResponse: (response?: any) => void
) => {
const handler = messageHandlers.get(message.type);
if (handler) {
const result = handler(message, sender, sendResponse);
if (result instanceof Promise) {
result.catch(console.error);
return true; // Keep message channel open for async response
}
} else {
console.warn(`No handler registered for message type: ${message.type}`);
}
return false;
};
chrome.runtime.onMessage.addListener(messageListener);
|