policy pagfe

This commit is contained in:
Admin 2025-08-25 08:44:40 +07:00
parent 8d463b0fc9
commit 57d6bf1b4e
30 changed files with 582 additions and 38 deletions

View File

@ -1 +1 @@
import{R as c,j as s,Q as u,q as l,P as d}from"./popup-BMz864nQ.js";import"./base64-BbJB1hmJ.js";import"./product-api.service-PLptzR9s.js";import"./app-C7VSS-q9.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))i(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c.createRoot(document.getElementById("root")).render(s.jsx(u,{client:l,children:s.jsx(d,{})}));
import{R as c,j as s,Q as u,q as l,P as d}from"./popup-D--aKLqS.js";import"./base64-BbJB1hmJ.js";import"./product-api.service-DR0CE0o9.js";import"./app-C7VSS-q9.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))i(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c.createRoot(document.getElementById("root")).render(s.jsx(u,{client:l,children:s.jsx(d,{})}));

File diff suppressed because one or more lines are too long

View File

@ -7,9 +7,9 @@
<title>Vite + React + TS</title>
<script type="module" crossorigin src="/assets/popup.js"></script>
<link rel="modulepreload" crossorigin href="/assets/base64-BbJB1hmJ.js">
<link rel="modulepreload" crossorigin href="/assets/product-api.service-PLptzR9s.js">
<link rel="modulepreload" crossorigin href="/assets/product-api.service-DR0CE0o9.js">
<link rel="modulepreload" crossorigin href="/assets/app-C7VSS-q9.js">
<link rel="modulepreload" crossorigin href="/assets/popup-BMz864nQ.js">
<link rel="modulepreload" crossorigin href="/assets/popup-D--aKLqS.js">
<link rel="stylesheet" crossorigin href="/assets/style.css">
</head>
<body>

View File

@ -3,7 +3,12 @@
"name": "Auto post facebook extensions",
"version": "1.0",
"action": {
"default_popup": "index.html"
"default_popup": "index.html",
"default_icon": {
"16": "icons/16.png",
"32": "icons/32.png",
"128": "icons/128.png"
}
},
"background": {
"service_worker": "background/background.js",
@ -23,5 +28,10 @@
"matches": ["https://www.facebook.com/*"]
}
],
"permissions": ["storage", "tabs", "activeTab", "scripting"]
"permissions": ["storage", "tabs", "activeTab", "scripting"],
"icons": {
"16": "icons/16.png",
"32": "icons/32.png",
"128": "icons/128.png"
}
}

View File

@ -1,9 +1,14 @@
{
"manifest_version": 3,
"name": "Auto post facebook extensions",
"version": "1.0",
"version": "1.2",
"action": {
"default_popup": "index.html"
"default_popup": "index.html",
"default_icon": {
"16": "icons/16.png",
"32": "icons/32.png",
"128": "icons/128.png"
}
},
"background": {
"service_worker": "background/background.js",
@ -23,5 +28,10 @@
"matches": ["https://www.facebook.com/*"]
}
],
"permissions": ["storage", "tabs", "activeTab", "scripting"]
"permissions": ["tabs", "activeTab", "scripting"],
"icons": {
"16": "icons/16.png",
"32": "icons/32.png",
"128": "icons/128.png"
}
}

View File

@ -1 +1 @@
import{R as c,j as s,Q as u,q as l,P as d}from"./popup-BMz864nQ.js";import"./base64-BbJB1hmJ.js";import"./product-api.service-PLptzR9s.js";import"./app-C7VSS-q9.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))i(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c.createRoot(document.getElementById("root")).render(s.jsx(u,{client:l,children:s.jsx(d,{})}));
import{R as c,j as s,Q as u,q as l,P as d}from"./popup-D--aKLqS.js";import"./base64-BbJB1hmJ.js";import"./product-api.service-DR0CE0o9.js";import"./app-C7VSS-q9.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))i(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c.createRoot(document.getElementById("root")).render(s.jsx(u,{client:l,children:s.jsx(d,{})}));

File diff suppressed because one or more lines are too long

View File

@ -7,9 +7,9 @@
<title>Vite + React + TS</title>
<script type="module" crossorigin src="/assets/popup.js"></script>
<link rel="modulepreload" crossorigin href="/assets/base64-BbJB1hmJ.js">
<link rel="modulepreload" crossorigin href="/assets/product-api.service-PLptzR9s.js">
<link rel="modulepreload" crossorigin href="/assets/product-api.service-DR0CE0o9.js">
<link rel="modulepreload" crossorigin href="/assets/app-C7VSS-q9.js">
<link rel="modulepreload" crossorigin href="/assets/popup-BMz864nQ.js">
<link rel="modulepreload" crossorigin href="/assets/popup-D--aKLqS.js">
<link rel="stylesheet" crossorigin href="/assets/style.css">
</head>
<body>

View File

@ -3,7 +3,12 @@
"name": "Auto post facebook extensions",
"version": "1.0",
"action": {
"default_popup": "index.html"
"default_popup": "index.html",
"default_icon": {
"16": "icons/16.png",
"32": "icons/32.png",
"128": "icons/128.png"
}
},
"background": {
"service_worker": "background/background.js",
@ -23,5 +28,10 @@
"matches": ["https://www.facebook.com/*"]
}
],
"permissions": ["storage", "tabs", "activeTab", "scripting"]
"permissions": ["storage", "tabs", "activeTab", "scripting"],
"icons": {
"16": "icons/16.png",
"32": "icons/32.png",
"128": "icons/128.png"
}
}

Binary file not shown.

View File

@ -0,0 +1 @@
function a(e,r=[]){return Object.entries(e).reduce((t,[n,o])=>((o||r.includes(n))&&(t[n]=o),t),{})}function u(e){return new Promise(r=>setTimeout(r,e))}function s(e,r){const t=Math.floor(Math.random()*(r-e+1))+e;return u(t)}export{u as a,s as d,a as r};

View File

@ -0,0 +1 @@
function a(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}async function l(e){return fetch(e).then(o=>o.blob()).then(o=>new Promise((n,r)=>{const t=new FileReader;t.onloadend=()=>{typeof t.result=="string"?n(t.result):r("Failed to convert blob to base64")},t.onerror=r,t.readAsDataURL(o)}))}export{a as g,l as u};

View File

@ -0,0 +1 @@
class s{static ID_EXTENSION="ex-root"}export{s as C};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{R as c,j as s,Q as u,q as l,P as d}from"./popup-D--aKLqS.js";import"./base64-BbJB1hmJ.js";import"./product-api.service-DR0CE0o9.js";import"./app-C7VSS-q9.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))i(e);new MutationObserver(e=>{for(const r of e)if(r.type==="childList")for(const o of r.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function n(e){const r={};return e.integrity&&(r.integrity=e.integrity),e.referrerPolicy&&(r.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?r.credentials="include":e.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(e){if(e.ep)return;e.ep=!0;const r=n(e);fetch(e.href,r)}})();c.createRoot(document.getElementById("root")).render(s.jsx(u,{client:l,children:s.jsx(d,{})}));

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
import{R as r,j as t,Q as i,q as o,P as n}from"../assets/popup-D--aKLqS.js";import{C as s}from"../assets/contants-Cf0CQNSY.js";import"../assets/base64-BbJB1hmJ.js";import"../assets/product-api.service-DR0CE0o9.js";import"../assets/app-C7VSS-q9.js";const e=document.getElementById(s.ID_EXTENSION);e&&r.createRoot(e).render(t.jsx(t.Fragment,{children:t.jsx(i,{client:o,children:t.jsx("div",{className:"fixed bottom-20 right-6",children:t.jsx(n,{})})})}));

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 566 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,18 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React + TS</title>
<script type="module" crossorigin src="/assets/popup.js"></script>
<link rel="modulepreload" crossorigin href="/assets/base64-BbJB1hmJ.js">
<link rel="modulepreload" crossorigin href="/assets/product-api.service-DR0CE0o9.js">
<link rel="modulepreload" crossorigin href="/assets/app-C7VSS-q9.js">
<link rel="modulepreload" crossorigin href="/assets/popup-D--aKLqS.js">
<link rel="stylesheet" crossorigin href="/assets/style.css">
</head>
<body>
<div id="root"></div>
</body>
</html>

View File

@ -0,0 +1,37 @@
{
"manifest_version": 3,
"name": "Auto post facebook extensions",
"version": "1.2",
"action": {
"default_popup": "index.html",
"default_icon": {
"16": "icons/16.png",
"32": "icons/32.png",
"128": "icons/128.png"
}
},
"background": {
"service_worker": "background/background.js",
"type": "module"
},
"host_permissions": ["https://www.facebook.com/*"],
"content_scripts": [
{
"matches": ["https://www.facebook.com/*"],
"js": ["content/content.js"],
"type": "module"
}
],
"web_accessible_resources": [
{
"resources": ["content/inject-ui.js", "assets/*"],
"matches": ["https://www.facebook.com/*"]
}
],
"permissions": ["tabs", "activeTab", "scripting"],
"icons": {
"16": "icons/16.png",
"32": "icons/32.png",
"128": "icons/128.png"
}
}

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -177,6 +177,11 @@ app.post("/", async (req, res) => {
}
});
// Route trả về privacy policy
app.get("/policy", (req, res) => {
res.sendFile(path.join(process.cwd(), "views", "policy.html"));
});
app.listen(3000, () => {
console.log("Server chạy tại http://localhost:3000");
});

250
server/views/policy.html Normal file
View File

@ -0,0 +1,250 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Privacy Policy — Bid Extension</title>
<meta
name="description"
content="Privacy Policy for the Bid Extension Chrome extension."
/>
<style>
:root {
--bg: #0b1020;
--bg-soft: #0f152b;
--card: #111832;
--text: #e9eefb;
--muted: #a9b1c7;
--brand: #6aa6ff;
--ring: rgba(106, 166, 255, 0.4);
--border: rgba(255, 255, 255, 0.1);
--shadow: 0 10px 30px rgba(0, 0, 0, 0.35);
--radius-xl: 22px;
--radius-lg: 14px;
}
@media (prefers-color-scheme: light) {
:root {
--bg: #f6f8ff;
--bg-soft: #eef2ff;
--card: #ffffff;
--text: #0b1020;
--muted: #5b637a;
--brand: #3b82f6;
--ring: rgba(59, 130, 246, 0.25);
--border: rgba(12, 18, 38, 0.08);
--shadow: 0 10px 30px rgba(20, 30, 60, 0.08);
}
}
* {
box-sizing: border-box;
}
html,
body {
height: 100%;
}
body {
margin: 0;
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto,
Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji";
color: var(--text);
background: radial-gradient(
1200px 800px at 80% -10%,
rgba(106, 166, 255, 0.18),
transparent 60%
),
radial-gradient(
900px 600px at -10% 20%,
rgba(90, 219, 216, 0.16),
transparent 60%
),
var(--bg);
line-height: 1.65;
letter-spacing: 0.2px;
}
.wrap {
max-width: 920px;
margin: 56px auto;
padding: 0 20px 56px;
}
.header {
position: relative;
border: 1px solid var(--border);
background: linear-gradient(180deg, var(--bg-soft), var(--card));
border-radius: var(--radius-xl);
padding: 32px 28px 28px 28px;
box-shadow: var(--shadow);
overflow: hidden;
}
.header::after {
content: "";
position: absolute;
inset: -1px;
border-radius: inherit;
pointer-events: none;
box-shadow: 0 0 0 1px var(--ring) inset;
opacity: 0.5;
}
.badge {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
background: rgba(106, 166, 255, 0.12);
color: var(--text);
border: 1px solid var(--border);
border-radius: 999px;
font-size: 12px;
letter-spacing: 0.3px;
text-transform: uppercase;
}
.title {
margin: 14px 0 8px;
font-size: 34px;
line-height: 1.2;
letter-spacing: 0.2px;
}
.subtitle {
margin: 0 0 10px;
color: var(--muted);
font-size: 16px;
}
.meta {
display: flex;
flex-wrap: wrap;
gap: 10px;
align-items: center;
color: var(--muted);
font-size: 14px;
}
.meta strong {
color: var(--text);
}
.card {
margin-top: 22px;
border: 1px solid var(--border);
background: var(--card);
border-radius: var(--radius-lg);
padding: 22px 22px;
box-shadow: var(--shadow);
}
h2 {
font-size: 20px;
margin: 0 0 10px;
}
p {
margin: 0 0 14px;
}
ul {
margin: 0 0 14px 18px;
}
.footer {
margin-top: 26px;
color: var(--muted);
font-size: 14px;
}
.row {
display: grid;
gap: 16px;
grid-template-columns: 1fr;
}
@media (min-width: 720px) {
.row {
grid-template-columns: 1fr 1fr;
}
}
.kbd {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
"Liberation Mono", "Courier New", monospace;
background: rgba(255, 255, 255, 0.06);
border: 1px solid var(--border);
border-bottom-width: 2px;
padding: 2px 6px;
border-radius: 8px;
font-size: 12px;
}
a {
color: var(--brand);
text-underline-offset: 2px;
}
</style>
</head>
<body>
<main class="wrap" aria-labelledby="doc-title">
<header class="header">
<span class="badge" aria-label="Document type">
<!-- lock icon -->
<svg
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
aria-hidden="true"
>
<path
d="M17 11V8a5 5 0 1 0-10 0v3"
stroke="currentColor"
stroke-width="1.5"
stroke-linecap="round"
/>
</svg>
Privacy Policy
</span>
<h1 id="doc-title" class="title">Bid Extension — Privacy Policy</h1>
<p class="subtitle">
How the Bid Extension Chrome extension handles your data.
</p>
<div class="meta" role="contentinfo">
<div>
<strong>Effective Date:</strong>
<time datetime="2025-08-25">August 25, 2025</time>
</div>
<div></div>
<div><span class="kbd">Version 1.2</span></div>
</div>
</header>
<section class="card" aria-labelledby="info-collection">
<h2 id="info-collection">1. Information Collection</h2>
<p>
The Bid Extension does not collect or transmit any personal or
sensitive user data.
</p>
<p>
The extension uses the <span class="kbd">storage</span> permission
solely to save settings and preferences
<strong>locally in your browser</strong>. This data does not leave
your device.
</p>
</section>
<section class="card" aria-labelledby="third-parties">
<h2 id="third-parties">2. No Thirdparty Sharing</h2>
<p>
We do not share any user data with third parties. We do not use
analytics, advertising, or tracking technologies.
</p>
</section>
<section class="card" aria-labelledby="changes">
<h2 id="changes">3. Changes to this Policy</h2>
<p>
If we update this privacy policy, we will revise this page and update
the effective date above.
</p>
</section>
<section class="card" aria-labelledby="contact">
<h2 id="contact">4. Contact</h2>
<p>
If you have questions about this policy, contact us at
<a href="mailto:support@example.com">apactech65@gmail.com</a>.
</p>
</section>
</main>
</body>
</html>

View File

@ -230,14 +230,13 @@ window.addEventListener("message", async (event) => {
});
(async () => {
// Call to inject modal
await delayRD(800, 1000);
// Sử dụng
thiefService
.waitForElement('[aria-label="Collection of your Marketplace items"]')
.then(async (el) => {
if (window.location.href.includes(facebookService.sellingPath)) {
try {
const el = await thiefService.waitForElement(
'[aria-label="Collection of your Marketplace items"]'
);
console.log("Element đã xuất hiện:", el);
await facebookService.waitForPageReady(
@ -246,15 +245,17 @@ window.addEventListener("message", async (event) => {
);
await delayRD(800, 1000);
const products = await facebookService.getProducts();
const products = await facebookService.getProducts();
console.log({ products });
productApi.sync(products);
injectApp();
})
.catch((err) => {
await productApi.sync(products);
} catch (err) {
console.error(err);
});
} finally {
injectApp();
}
} else {
injectApp();
}
})();