mirror of
https://github.com/supermemoryai/supermemory.git
synced 2026-05-17 21:11:04 +00:00
- Mobile responsive - new toast design - web document render issue fix - posthog analytics - ui improvements
129 lines
2.8 KiB
TypeScript
129 lines
2.8 KiB
TypeScript
import { MESSAGE_TYPES } from "../../utils/constants"
|
|
import { bearerToken, userData } from "../../utils/storage"
|
|
import { DOMUtils } from "../../utils/ui-components"
|
|
import { default as TurndownService } from "turndown"
|
|
|
|
export async function saveMemory() {
|
|
try {
|
|
DOMUtils.showToast("loading")
|
|
|
|
const highlightedText = window.getSelection()?.toString() || ""
|
|
const url = window.location.href
|
|
|
|
const ogImage =
|
|
document
|
|
.querySelector('meta[property="og:image"]')
|
|
?.getAttribute("content") ||
|
|
document
|
|
.querySelector('meta[name="og:image"]')
|
|
?.getAttribute("content") ||
|
|
undefined
|
|
|
|
const title =
|
|
document
|
|
.querySelector('meta[property="og:title"]')
|
|
?.getAttribute("content") ||
|
|
document
|
|
.querySelector('meta[name="og:title"]')
|
|
?.getAttribute("content") ||
|
|
document.title ||
|
|
undefined
|
|
|
|
const data: {
|
|
html?: string
|
|
markdown?: string
|
|
highlightedText?: string
|
|
url: string
|
|
ogImage?: string
|
|
title?: string
|
|
} = {
|
|
url,
|
|
}
|
|
|
|
if (ogImage) {
|
|
data.ogImage = ogImage
|
|
}
|
|
|
|
if (title) {
|
|
data.title = title
|
|
}
|
|
|
|
if (highlightedText) {
|
|
data.highlightedText = highlightedText
|
|
} else {
|
|
const bodyClone = document.body.cloneNode(true) as HTMLElement
|
|
const scripts = bodyClone.querySelectorAll("script")
|
|
for (const script of scripts) {
|
|
script.remove()
|
|
}
|
|
const html = bodyClone.innerHTML
|
|
|
|
// Convert HTML to markdown
|
|
const turndownService = new TurndownService()
|
|
const markdown = turndownService.turndown(html)
|
|
data.markdown = markdown
|
|
}
|
|
|
|
const response = await browser.runtime.sendMessage({
|
|
action: MESSAGE_TYPES.SAVE_MEMORY,
|
|
data,
|
|
actionSource: "context_menu",
|
|
})
|
|
|
|
console.log("Response from enxtension:", response)
|
|
if (response.success) {
|
|
DOMUtils.showToast("success")
|
|
} else {
|
|
DOMUtils.showToast("error")
|
|
}
|
|
} catch (error) {
|
|
console.error("Error saving memory:", error)
|
|
DOMUtils.showToast("error")
|
|
}
|
|
}
|
|
|
|
export function setupGlobalKeyboardShortcut() {
|
|
document.addEventListener("keydown", async (event) => {
|
|
if (
|
|
(event.ctrlKey || event.metaKey) &&
|
|
event.shiftKey &&
|
|
event.key === "m"
|
|
) {
|
|
event.preventDefault()
|
|
await saveMemory()
|
|
}
|
|
})
|
|
}
|
|
|
|
export function setupStorageListener() {
|
|
window.addEventListener("message", async (event) => {
|
|
if (event.source !== window) {
|
|
return
|
|
}
|
|
const token = event.data.token
|
|
const user = event.data.userData
|
|
if (token && user) {
|
|
if (
|
|
!(
|
|
window.location.hostname === "localhost" ||
|
|
window.location.hostname === "supermemory.ai" ||
|
|
window.location.hostname === "app.supermemory.ai"
|
|
)
|
|
) {
|
|
console.log(
|
|
"Bearer token and user data is only allowed to be used on localhost or supermemory.ai",
|
|
)
|
|
return
|
|
}
|
|
|
|
try {
|
|
await Promise.all([
|
|
bearerToken.setValue(token),
|
|
userData.setValue(user),
|
|
])
|
|
} catch {
|
|
// Do nothing
|
|
}
|
|
}
|
|
})
|
|
}
|