From 3dbf791621cbb011e4681ddca58adbb334842af0 Mon Sep 17 00:00:00 2001 From: jared Date: Mon, 19 Jan 2026 23:23:15 -0500 Subject: [PATCH] Initial commit Add Chrome extension for Read It Later functionality with background script, manifest, and icons. Co-Authored-By: Claude Opus 4.5 --- .gitignore | 1 + background.js | 123 +++++++++++++++++++++++++++++++++++++++++++ how-to-add-token.txt | 9 ++++ icon128.png | Bin 0 -> 13226 bytes icon16.png | Bin 0 -> 1664 bytes icon48.png | Bin 0 -> 3915 bytes manifest.json | 14 +++++ 7 files changed, 147 insertions(+) create mode 100644 .gitignore create mode 100644 background.js create mode 100644 how-to-add-token.txt create mode 100644 icon128.png create mode 100644 icon16.png create mode 100644 icon48.png create mode 100644 manifest.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8d865be --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +token diff --git a/background.js b/background.js new file mode 100644 index 0000000..36705c1 --- /dev/null +++ b/background.js @@ -0,0 +1,123 @@ +const API_URL = "https://www.jaredlog.com/readitlater/api/v1/capture"; + +async function getToken() { + return new Promise((resolve) => { + chrome.storage.sync.get(["READITLATER_TOKEN"], (res) => resolve(res.READITLATER_TOKEN || "")); + }); +} + +async function injectBanner(tabId, text, ok = true) { + try { + await chrome.scripting.executeScript({ + target: { tabId }, + world: "MAIN", // we want to touch the page DOM + func: (text, ok) => { + // Create a host and shadow root so site CSS can't break us + const host = document.createElement("div"); + host.setAttribute("id", "readitlater-toast-host"); + host.style.all = "initial"; // reduce leakage in some edge cases + const shadow = host.attachShadow({ mode: "closed" }); + + // Styles + const style = document.createElement("style"); + style.textContent = ` + @keyframes slideDown { + from { transform: translateY(-110%); opacity: 0; } + to { transform: translateY(0); opacity: 1; } + } + @keyframes fadeOut { + to { opacity: 0; transform: translateY(-110%); } + } + .toast { + position: fixed; + top: 0; left: 50%; + transform: translateX(-50%); + z-index: 2147483647; + margin: 12px auto 0; + padding: 10px 14px; + border-radius: 8px; + font: 14px/1.2 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; + color: #0b1f0b; + background: ${ok ? "#c7f9cc" : "#ffd6d6"}; + border: 1px solid ${ok ? "#94d7a2" : "#ffabab"}; + box-shadow: 0 10px 20px rgba(0,0,0,.12), 0 2px 6px rgba(0,0,0,.08); + animation: slideDown 180ms ease-out; + pointer-events: none; /* don't block page */ + max-width: 90vw; + text-align: center; + } + .toast .text { + white-space: pre-wrap; + } + @media (prefers-reduced-motion: reduce) { + .toast { animation: none; } + } + `; + + // Container + const toast = document.createElement("div"); + toast.className = "toast"; + toast.setAttribute("role", "status"); + toast.setAttribute("aria-live", "polite"); + toast.innerHTML = `${text}`; + + shadow.append(style, toast); + document.documentElement.appendChild(host); + + // Auto-remove after 2 seconds (fade for 200ms) + const remove = () => host.remove(); + setTimeout(() => { + toast.style.animation = "fadeOut 200ms ease-in forwards"; + setTimeout(remove, 220); + }, 2000); + }, + args: [text, ok], + }); + } catch (e) { + // Non-fatal if injection fails (e.g., restricted pages) + console.warn("readitlater: banner inject failed", e); + } +} + +chrome.action.onClicked.addListener(async (tab) => { + if (!tab?.id) return; + + const [result] = await chrome.scripting.executeScript({ + target: { tabId: tab.id }, + func: () => ({ + url: window.location.href, + title: document.title, + html: "" + document.documentElement.outerHTML + }), + }); + + const payload = result?.result || null; + if (!payload) return; + + const token = await getToken(); + + try { + const resp = await fetch(API_URL, { + method: "POST", + headers: { + "Content-Type": "application/json", + "Authorization": "Bearer " + token + }, + body: JSON.stringify(payload), + }); + + if (resp.ok) { + // Success banner + await injectBanner(tab.id, "Link saved.", true); + } else { + console.error("Capture failed:", resp.status, await resp.text()); + await injectBanner(tab.id, "Save failed.", false); + } + } catch (e) { + console.error("readitlater: network error", e); + await injectBanner(tab.id, "Network error.", false); + } +}); + +// One-time: set your token in DevTools console on any page: +// chrome.storage.sync.set({ READITLATER_TOKEN: "YOUR_HEX_TOKEN" }); diff --git a/how-to-add-token.txt b/how-to-add-token.txt new file mode 100644 index 0000000..9db89f0 --- /dev/null +++ b/how-to-add-token.txt @@ -0,0 +1,9 @@ +How to add the hex token: +Use the extension’s background page (preferred) +Go to chrome://extensions/. +Enable Developer mode (toggle top right). +Find your readitlater extension. +Click “service worker” link under “Inspect views”. This opens a DevTools console for the extension background. + +Now paste: +chrome.storage.sync.set({ READITLATER_TOKEN: "2cb9f5b875af65b4de7ff7736e384ae9d33e1bf2176c45afac24a713804ef6d4" }); diff --git a/icon128.png b/icon128.png new file mode 100644 index 0000000000000000000000000000000000000000..31f3b142270be4644346702cdc4e707ea9804eb3 GIT binary patch literal 13226 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 R{^y4kDKUA`YGH%G{{ypz9eDr% literal 0 HcmV?d00001 diff --git a/icon16.png b/icon16.png new file mode 100644 index 0000000000000000000000000000000000000000..107ecec8aa5efc3732dc8da29886335150394dda GIT binary patch literal 1664 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBDAAG{;hE;^%b*2hb1<+n z3NbJPS&Tr)z$nE4G7ZRL@M4sPvx68lplX;H7}_%#SfFa6fHVkr05M1pgl1mAh%j*h z6I`{x0%imor0saV%ts)_S>O>_%)r1c48n{Iv*t)JFfg6U42dX-@b$4u&d=3LOvz75 z)vL%Y0O?||sjvbvb5lza6)JLb@`|l0Y?Z(&tblBgu)dN4SV>8?tx|+H?jfSfFg)+ zA4CH}eP~{0i5*M}nlQSq2!uSs8e~Cq4gN)$slb2)yUP&jEMzex^&sC_1!PvF=0vz; z=BDNqgZyG>WMQL^RR&$BbAC>KQE)+Ga;hEBBCr-DA#~MXdm?e#gCqmhX`>H{ZKT+T zBrUKgFm2g!+33U5sU4Sj^^ax5J2+6}-@96U-&rj)wy3P+Gh5<% z+e>89K}VxkQmnCCj(R%&;XWd^Fls}0-XaYRtH|kYGF(<=XBCv9Vix&kB$*hVeQ#2G zz4)DXw9>qX`@WyEe!lyDd0mH-)!KhCevUo0Tr=fpn`3Y>i|LAD3+I zd#m5IVXhu?fnbDU=KC6Nu&ue}<1?TC;MGvA-7U%@P5KirDC(^JnjvXa#gcK;ftg{E z{z1oG%`30ity9uEnF+E1_*^bH&wVg+g2aRajXBm+xwft7nEJK!@7fg+(cAME z{{6w(^TTt&IcA3(%^C)WYK^7gs~6V1wc>D5nQOb5@!P7@ zn>-SCZR9R;?vJy%zVTg#$iHy?i@*QyaMH|+b*Qa=4)kD-3ZcE*Pb4e$S1`&Vbe&Qm8OLbfF^i{4un z`t_X65ydD^_O-^!@4tQdm8Ej-k!bm?PcwAiH>{fSFh1r`{DhRxZ<7PoI)lnpPgg&e IbxsLQ0C+P+GXMYp literal 0 HcmV?d00001 diff --git a/icon48.png b/icon48.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6e45d13b1dad58f8982b375dc946a89f6a6653 GIT binary patch literal 3915 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 LF|y>eUD*Et>cP3| literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..324b451 --- /dev/null +++ b/manifest.json @@ -0,0 +1,14 @@ +{ + "manifest_version": 3, + "name": "readitlater — Save Page", + "version": "0.1.0", + "action": { "default_title": "Save to readitlater" }, + "permissions": ["activeTab", "scripting", "storage"], + "host_permissions": ["https://www.jaredlog.com/*"], + "background": { "service_worker": "background.js" }, + "icons": { + "16": "icon16.png", + "48": "icon48.png", + "128": "icon128.png" + } +}