aboutsummaryrefslogtreecommitdiff
path: root/apps/extension/src/helpers.ts
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);