Commit f55888b0 authored by Vũ Hoàng Anh's avatar Vũ Hoàng Anh

chore: force include built extension in repository

parent 2e29f846
Pipeline #3441 canceled with stages
{
"../../../@crx/manifest": {
"file": "assets/crx-manifest.js-SqlU4S0k.js",
"name": "crx-manifest.js",
"src": "../../../@crx/manifest",
"isEntry": true
},
"_api-client-DVp22mKG.js": {
"file": "assets/api-client-DVp22mKG.js",
"name": "api-client"
},
"src/background/service-worker.ts": {
"file": "assets/service-worker.ts-Co6uxu3b.js",
"name": "service-worker.ts",
"src": "src/background/service-worker.ts",
"isEntry": true,
"imports": [
"_api-client-DVp22mKG.js"
]
},
"src/content/content-script.ts": {
"file": "assets/content-script.ts-CFoIDPlU.js",
"name": "content-script.ts",
"src": "src/content/content-script.ts",
"isEntry": true
},
"src/popup/popup.html": {
"file": "assets/popup-r4Xxxxmr.js",
"name": "popup",
"src": "src/popup/popup.html",
"isEntry": true,
"imports": [
"_api-client-DVp22mKG.js"
],
"css": [
"assets/popup-dYtSf2jU.css"
]
}
}
\ No newline at end of file
const l="http://160.191.50.138:3001";async function r(){return`${(await chrome.storage.local.get(["apiBaseUrl"])).apiBaseUrl||l}/api/v1`}async function h(){const e=await chrome.storage.local.get(["clerkSessionToken","authToken"]);return e.clerkSessionToken?e.clerkSessionToken:e.authToken||null}const y=45e3;async function f(){try{const s=(await chrome.storage.local.get(["clerkTokenSyncedAt"])).clerkTokenSyncedAt||0,n=Date.now()-s;if(n>y){console.log("[CuCu API] Token stale, refreshing...",{age:Math.round(n/1e3)+"s"});const t=await new Promise(a=>{chrome.runtime.sendMessage({type:"REFRESH_TOKEN"},o=>{a(o)})});t?.success&&t?.token?(await chrome.storage.local.set({clerkSessionToken:t.token,clerkTokenSyncedAt:Date.now()}),console.log("[CuCu API] ✅ Token refreshed",t.token.length,"chars")):console.log("[CuCu API] ⚠️ Token refresh failed:",t?.reason||"unknown")}}catch(e){console.log("[CuCu API] ❌ Token refresh error:",e?.message)}}async function c(){await f();const e=await h(),s={"Content-Type":"application/json"};return e&&(s.Authorization=`Bearer ${e}`),s}async function g(e){const s=await r(),n=await c(),t=await fetch(`${s}/memos`,{method:"POST",headers:n,body:JSON.stringify({content:e.content,tags:e.tags||[],visibility:e.visibility||"PRIVATE"})});if(!t.ok)throw await t.text(),new Error(`Failed to create memo (${t.status})`);return await t.json()}async function w(e,s){const n=await r(),t=await fetch(`${n}/memos`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify({content:s.content,tags:s.tags||[],visibility:s.visibility||"PRIVATE"})});if(!t.ok){const a=await t.text();throw new Error(`Failed to save (${t.status}): ${a.substring(0,100)}`)}return await t.json()}async function d(e){try{const s=await c(),t=await fetch("http://172.16.2.210:5230/api/v1/memos",{method:"POST",headers:s,body:JSON.stringify({content:e.content,tags:e.tags||[],visibility:e.visibility||"PRIVATE"})});t.ok?console.log("[CuCu API] ✅ Successfully synced to secondary backend"):console.warn("[CuCu API] Secondary sync returned status:",t.status)}catch(s){console.warn("[CuCu API] ⚠️ Failed to sync to secondary backend:",s)}}async function k(){try{const e=await r(),s=await c(),n=await fetch(`${e}/memos`,{headers:s});if(!n.ok)return[];const t=await n.json(),a=new Set;for(const o of t){Array.isArray(o.tags)&&o.tags.forEach(i=>a.add(i));const u=(o.content||"").match(/#([a-zA-Z0-9_\u00C0-\u024F\u1E00-\u1EFF]+)/g);u&&u.forEach(i=>a.add(i.slice(1)))}return Array.from(a).sort()}catch{return[]}}async function T(){try{const e=await r(),s=await c(),n=await fetch(`${e}/shortcuts`,{headers:s});if(!n.ok)return[];const t=await n.json();return(Array.isArray(t)?t:t.shortcuts||[]).map(o=>({id:o.id,title:o.title||o.name||`Workspace ${o.id}`,filter:o.filter||""}))}catch{return[]}}async function m(){return(await chrome.storage.local.get(["recentTags"])).recentTags||[]}async function p(e){const s=[...new Set(e)].slice(0,20);await chrome.storage.local.set({recentTags:s})}export{T as a,g as b,w as c,d,k as f,m as g,p as s};
(function(){let i="",u="",d="";async function l(){for(let o=0;o<5;o++){try{const n=window.Clerk;if(n&&!n.user)return null;if(n?.session?.getToken){const s=await n.session.getToken();if(s)return s}}catch{}o<4&&await new Promise(n=>setTimeout(n,800))}return null}async function h(){const e=window.location.hostname;if(!(e==="160.191.50.138"||e==="localhost"||e.includes("opennotion")||e.includes("cucunote")||e.includes("cucu-note")))return;const o=await l();o&&chrome.runtime.sendMessage({type:"SYNC_AUTH",data:{clerkSessionToken:o}})}h();chrome.runtime.onMessage.addListener((e,t,o)=>{if(e.type==="GET_CLERK_TOKEN")return l().then(n=>{o({token:n})}),!0});document.addEventListener("mouseup",m);document.addEventListener("keydown",async e=>{if((e.key===" "||e.key==="Enter")&&i.length>0){const t=e.target;if(!t||t.tagName!=="INPUT"&&t.tagName!=="TEXTAREA"&&!t.isContentEditable){e.preventDefault(),e.stopPropagation(),await y();return}}});document.addEventListener("keyup",m);function m(){try{setTimeout(()=>{const e=window.getSelection();if(!e||e.rangeCount===0){i="",c();return}const t=e.toString().trim();if(t.length===0){i="",c();return}i=t,u=window.location.href,d=document.title,f()},50)}catch{}}async function y(){if(i)try{a("Đang lưu...","loading"),chrome.runtime.sendMessage({type:"SAVE_NOTE",data:{text:i,url:u,title:d}},e=>{if(chrome.runtime.lastError){a(`❌ Lỗi: ${chrome.runtime.lastError.message||"Extension error"}`,"error");return}if(e?.success)a("✅ Đã lưu vào CuCu Note!","success"),window.getSelection()?.removeAllRanges(),i="",c();else{const t=e?.error||"Không thể lưu note";a(`❌ ${t}`,"error")}})}catch(e){a(`❌ ${e?.message||"Lỗi khi lưu note"}`,"error")}}function f(){c();const e=document.createElement("div");if(e.id="cucu-quick-hint",e.textContent="💡 Nhấn Space hoặc Enter để lưu nhanh",e.style.cssText=`
position: fixed;
bottom: 20px;
right: 20px;
background: linear-gradient(135deg, #a0845c 0%, #8b6914 100%);
color: white;
padding: 12px 20px;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
z-index: 999999;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
animation: cucuSlideUp 0.3s ease-out;
pointer-events: none;
`,!document.getElementById("cucu-hint-style")){const t=document.createElement("style");t.id="cucu-hint-style",t.textContent=`
@keyframes cucuSlideUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
`,document.head.appendChild(t)}try{document.body.appendChild(e)}catch{document.documentElement.appendChild(e)}setTimeout(()=>{c()},3e3)}function c(){const e=document.getElementById("cucu-quick-hint");if(e)try{e.remove()}catch{}}function a(e,t="success"){const o=document.getElementById("cucu-toast");if(o)try{o.remove()}catch{}const n=document.createElement("div");n.id="cucu-toast",n.textContent=e;const s={success:"linear-gradient(135deg, #10b981 0%, #059669 100%)",error:"linear-gradient(135deg, #ef4444 0%, #dc2626 100%)",loading:"linear-gradient(135deg, #a0845c 0%, #8b6914 100%)"};if(n.style.cssText=`
position: fixed;
top: 20px;
right: 20px;
background: ${s[t]};
color: white;
padding: 16px 24px;
border-radius: 12px;
font-size: 15px;
font-weight: 500;
box-shadow: 0 8px 24px rgba(0,0,0,0.2);
z-index: 999999;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
animation: cucuToastSlide 0.4s ease-out;
max-width: 350px;
word-wrap: break-word;
`,!document.getElementById("cucu-toast-style")){const r=document.createElement("style");r.id="cucu-toast-style",r.textContent=`
@keyframes cucuToastSlide {
from {
opacity: 0;
transform: translateX(100%);
}
to {
opacity: 1;
transform: translateX(0);
}
}
`;try{document.head.appendChild(r)}catch{}}try{document.body.appendChild(n)}catch{try{document.documentElement.appendChild(n)}catch{return}}t!=="loading"&&setTimeout(()=>{n.parentNode&&(n.style.animation="cucuToastSlide 0.3s ease-out reverse",setTimeout(()=>{try{n.remove()}catch{}},300))},3e3)}
})()
:root{--background: oklch(.95 .015 75);--foreground: oklch(.25 .02 65);--card: oklch(.98 .008 80);--card-foreground: oklch(.22 .015 68);--popover: oklch(.98 .008 80);--popover-foreground: oklch(.25 .02 65);--primary: oklch(.45 .08 45);--primary-foreground: oklch(.98 .008 80);--secondary: oklch(.92 .025 70);--secondary-foreground: oklch(.35 .03 60);--muted: oklch(.9 .025 75);--muted-foreground: oklch(.5 .02 68);--accent: oklch(.88 .035 55);--accent-foreground: oklch(.25 .02 65);--destructive: oklch(.48 .15 25);--border: oklch(.88 .018 72);--input: oklch(.8 .03 75);--ring: oklch(.45 .08 45);--radius: 12px;--success: oklch(.6 .15 145);--warning: oklch(.7 .12 75);--shadow-sm: 0 1px 2px oklch(0 0 0 / .04);--shadow-md: 0 4px 12px oklch(0 0 0 / .06);--shadow-lg: 0 8px 24px oklch(0 0 0 / .08);--font-sans: "Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif}[data-theme=dark]{--background: oklch(.16 .008 60);--foreground: oklch(.9 .012 75);--card: oklch(.2 .01 62);--card-foreground: oklch(.9 .012 75);--popover: oklch(.2 .01 62);--popover-foreground: oklch(.88 .01 72);--primary: oklch(.65 .1 45);--primary-foreground: oklch(.15 .008 60);--secondary: oklch(.26 .012 65);--secondary-foreground: oklch(.85 .01 72);--muted: oklch(.23 .01 62);--muted-foreground: oklch(.6 .015 70);--accent: oklch(.28 .015 55);--accent-foreground: oklch(.82 .012 68);--destructive: oklch(.55 .1 25);--border: oklch(.3 .012 62);--input: oklch(.35 .015 65);--ring: oklch(.65 .1 45);--success: oklch(.65 .15 145);--warning: oklch(.75 .12 75);--shadow-sm: 0 1px 2px oklch(0 0 0 / .15);--shadow-md: 0 4px 12px oklch(0 0 0 / .2);--shadow-lg: 0 8px 24px oklch(0 0 0 / .25)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-sans);background:var(--background);color:var(--foreground);font-size:13px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:380px;min-height:200px;overflow-x:hidden}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes glow{0%,to{box-shadow:0 0 4px #3a97424d}50%{box-shadow:0 0 10px #3a974280}}@keyframes successPop{0%{transform:scale(.9);opacity:0}50%{transform:scale(1.02)}to{transform:scale(1);opacity:1}}.popup-container{display:flex;flex-direction:column;min-height:100%;animation:fadeIn .2s ease-out}.header{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;background:var(--card);border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.header-brand{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;color:var(--foreground);letter-spacing:-.01em}.header-brand-icon{font-size:20px;filter:drop-shadow(0 1px 2px oklch(0 0 0 / .1))}.header-status{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:500;color:var(--muted-foreground)}.status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.status-dot.status-connected{background:var(--success);animation:glow 2s ease-in-out infinite}.status-dot.status-offline{background:var(--destructive)}.status-text{font-size:11px}.content{padding:16px 18px;animation:fadeIn .3s ease-out}.note-form{display:flex;flex-direction:column;animation:slideUp .25s ease-out}.note-textarea{display:block;width:100%;min-height:100px;max-height:200px;resize:vertical;border:1.5px solid var(--border);border-radius:var(--radius);background:var(--background);color:var(--foreground);padding:12px 14px;font-size:14px;font-family:inherit;line-height:1.6;transition:border-color .2s ease,box-shadow .2s ease}.note-textarea::placeholder{color:var(--muted-foreground);font-style:italic}.note-textarea:focus{outline:none;border-color:var(--ring);box-shadow:0 0 0 3px #7a462e1a}.source-info{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--muted-foreground);padding:8px 12px;background:var(--muted);border-radius:calc(var(--radius) - 2px);margin-top:10px;border:1px solid var(--border)}.label{display:block;font-size:11px;font-weight:600;margin-bottom:8px;color:var(--muted-foreground);text-transform:uppercase;letter-spacing:.05em}.tag-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.tag-chip{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border-radius:100px;font-size:12px;font-weight:500;cursor:pointer;transition:all .2s cubic-bezier(.4,0,.2,1);border:1.5px solid var(--border);background:var(--card);color:var(--muted-foreground);font-family:inherit;-webkit-user-select:none;user-select:none}.tag-chip:hover{border-color:var(--primary);color:var(--primary);background:#7a462e0f;transform:translateY(-1px);box-shadow:var(--shadow-sm)}.tag-chip.selected{background:var(--primary);color:var(--primary-foreground);border-color:var(--primary);box-shadow:0 2px 6px #7a462e33}.tag-chip.selected:hover{filter:brightness(1.1);background:var(--primary);color:var(--primary-foreground);transform:translateY(-1px)}.tag-input-inline{display:inline-flex;align-items:center;gap:4px;padding:5px 12px;border-radius:100px;font-size:12px;border:1.5px dashed var(--border);background:transparent;color:var(--muted-foreground);cursor:pointer;transition:all .2s ease;font-family:inherit}.tag-input-inline:hover{border-color:var(--primary);color:var(--primary)}.tag-input-field{border:none;outline:none;background:transparent;font-size:12px;font-family:inherit;color:var(--foreground);width:80px}.form-group{margin-bottom:14px}.select{display:block;width:100%;border-radius:calc(var(--radius) - 2px);border:1.5px solid var(--border);background:var(--background);color:var(--foreground);padding:10px 36px 10px 14px;font-size:13px;font-family:inherit;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;transition:border-color .2s ease,box-shadow .2s ease}.select:focus{outline:none;border-color:var(--ring);box-shadow:0 0 0 3px #7a462e1a}.visibility-selector{display:inline-flex;align-items:center;gap:5px;padding:6px 14px;border-radius:100px;font-size:12px;font-weight:500;border:1.5px solid var(--border);background:var(--card);color:var(--muted-foreground);cursor:pointer;transition:all .2s ease;font-family:inherit}.visibility-selector:hover{border-color:var(--primary);color:var(--primary)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;border-radius:calc(var(--radius) - 2px);font-size:13px;font-weight:600;font-family:inherit;cursor:pointer;border:none;padding:9px 18px;transition:all .2s cubic-bezier(.4,0,.2,1)}.btn:active{transform:scale(.96)}.btn-primary{background:linear-gradient(135deg,var(--primary),oklch(.5 .1 50));color:var(--primary-foreground);box-shadow:0 2px 8px #7a462e40}.btn-primary:hover{filter:brightness(1.08);box-shadow:0 4px 14px #7a462e59;transform:translateY(-1px)}.btn-secondary{background:var(--secondary);color:var(--secondary-foreground);border:1.5px solid var(--border)}.btn-secondary:hover{background:var(--muted);transform:translateY(-1px)}.btn-ghost{background:transparent;color:var(--muted-foreground);padding:6px 12px}.btn-ghost:hover{background:var(--muted);color:var(--foreground)}.btn-sm{padding:6px 14px;font-size:12px;border-radius:calc(var(--radius) - 4px)}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important;filter:none!important}.action-bar{display:flex;align-items:center;justify-content:space-between;padding:12px 18px 14px;border-top:1px solid var(--border);background:var(--card)}.action-bar-left{display:flex;align-items:center;gap:6px}.action-bar-right{display:flex;align-items:center;gap:8px}.badge{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:100px;font-size:12px;font-weight:600}.badge-success{background:#3a97421f;color:var(--success);border:1px solid oklch(.6 .15 145 / .2);animation:successPop .3s ease-out}.error{padding:10px 14px;margin-top:10px;background:#b9464214;color:var(--destructive);border-radius:calc(var(--radius) - 2px);font-size:12px;border:1px solid oklch(.55 .15 25 / .15);animation:fadeIn .2s ease-out}.success{padding:10px 14px;margin-bottom:12px;background:#3a974214;color:var(--success);border-radius:calc(var(--radius) - 2px);font-size:12px;border:1px solid oklch(.6 .15 145 / .15)}.spinner{display:inline-block;width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--primary);border-radius:50%;animation:spin .6s linear infinite;vertical-align:middle}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border);border-radius:100px}::-webkit-scrollbar-thumb:hover{background:var(--muted-foreground)}*,*:before,*:after{transition-property:background-color,color,border-color,box-shadow,opacity;transition-duration:.2s;transition-timing-function:ease}.spinner,.spinner *,[class*=animate-]{transition:none!important}
This source diff could not be displayed because it is too large. You can view the blob instead.
import{b as i,d as l}from"./api-client-DVp22mKG.js";async function h(){try{const s=(await chrome.tabs.query({})).filter(e=>{const t=e.url||"";return t.includes("160.191.50.138")||t.includes("localhost:3001")||t.includes("opennotion")||t.includes("cucunote")});for(const e of s)if(e.id)try{const o=(await chrome.scripting.executeScript({target:{tabId:e.id},world:"MAIN",func:async()=>{try{const n=window.Clerk;if(n?.session?.getToken)return await n.session.getToken()}catch{}return null}}))[0]?.result;if(o)return await chrome.storage.local.set({clerkSessionToken:o,clerkTokenSyncedAt:Date.now()}),console.log("[CuCu BG] ✅ Fresh token from tab",e.id,`(${o.length} chars)`),o}catch{}}catch{}return null}chrome.runtime.onMessage.addListener((c,s,e)=>{if(c.type==="SYNC_AUTH"){const{clerkSessionToken:t}=c.data||{};return t&&(chrome.storage.local.set({clerkSessionToken:t,clerkTokenSyncedAt:Date.now()}),console.log("[CuCu BG] ✅ Clerk token auto-synced from content script")),e({success:!0}),!1}if(c.type==="REFRESH_TOKEN")return h().then(t=>{e(t?{success:!0,token:t}:{success:!1,reason:"no_opennotion_tab"})}).catch(t=>{console.log("[CuCu BG] ❌ Token refresh failed:",t?.message),e({success:!1,reason:t?.message})}),!0;if(c.type==="SHOW_NOTE_FORM")chrome.action.openPopup(),chrome.storage.local.set({pendingNote:c.data}),e({success:!0});else if(c.type==="SAVE_NOTE"){const{text:t,url:o,title:n}=c.data,u=[new URL(o).hostname.replace("www.",""),"web-highlight"],a={content:`${t}
---
Source: [${n}](${o})`,tags:u,visibility:"PRIVATE"};return i(a).then(r=>{e({success:!0,memo:r})}).catch(r=>{e({success:!1,error:r.message})}),l(a),!0}return!0});
{
"manifest_version": 3,
"name": "CuCu Note",
"version": "1.0.0",
"description": "Quick note-taking extension - Highlight text and save to CuCu Note",
"permissions": [
"activeTab",
"storage",
"scripting",
"tabs"
],
"host_permissions": [
"http://*/*",
"https://*/*"
],
"background": {
"service_worker": "service-worker-loader.js",
"type": "module"
},
"content_scripts": [
{
"js": [
"assets/content-script.ts-CFoIDPlU.js"
],
"matches": [
"<all_urls>"
],
"run_at": "document_idle",
"all_frames": false
}
],
"action": {
"default_popup": "src/popup/popup.html",
"default_icon": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
}
},
"icons": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
},
"web_accessible_resources": [
{
"matches": [
"<all_urls>"
],
"resources": [
"assets/content-script.ts-CFoIDPlU.js"
],
"use_dynamic_url": false
}
]
}
import './assets/service-worker.ts-Co6uxu3b.js';
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CuCu Note</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<style>
body {
margin: 0;
padding: 0;
width: 380px;
min-height: 420px;
max-height: 560px;
overflow-y: auto;
}
</style>
<script type="module" crossorigin src="/assets/popup-r4Xxxxmr.js"></script>
<link rel="modulepreload" crossorigin href="/assets/api-client-DVp22mKG.js">
<link rel="stylesheet" crossorigin href="/assets/popup-dYtSf2jU.css">
</head>
<body>
<div id="popup-root"></div>
</body>
</html>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment