1import{j as e}from"./vendor-radix-D95_QOwI.js";import{r as j}from"./vendor-react-D8kazXLH.js";import{s as w}from"./setPageSEO-BSSz1gWY.js";import{c as k,u as C,M as P,o as S,C as i,b as l,d as n,k as p,e as c,V as y,B as o,a0 as d,l as R,a7 as E,a3 as D,m as g}from"./index-C8HR-Dmp.js";import{W as L}from"./webhook-DhHa7Y2k.js";import{C as u}from"./copy-DjLO4bY2.js";import{F as G}from"./file-text-BHuf7mbe.js";import{E as A}from"./external-link-Bttje3sd.js";import"./vendor-shopify-BAYZQhWM.js";import"./vendor-data-DTxAkKxM.js";import"./vendor-charts-Bku11YKm.js";/** 2 * @license lucide-react v0.462.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const q=k("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]),t="https://www.magic-geo.tech",a="https://www.magic-geo.tech/api/webhooks";function V(){const{t:T,i18n:N}=C(),m=(N.language||"en").toLowerCase().startsWith("fr"),[h,f]=j.useState(null);j.useEffect(()=>{w({title:m?"Conformité & Webhooks Shopify â MagicGEO":"Compliance & Shopify Webhooks â MagicGEO",description:m?"Statut de conformité MagicGEO : webhooks RGPD Shopify, effacement des données, sécurité et endpoints publics vérifiables.":"MagicGEO compliance status: Shopify GDPR webhooks, data erasure, security posture and publicly verifiable endpoints.",path:"/compliance"})},[m]);const v=[{name:"Customer Data Request",description:"GDPR: Returns customer data when requested",url:a,required:!0},{name:"Customer Data Erasure",description:"GDPR: Deletes customer data from our systems",url:a,required:!0},{name:"Shop Data Erasure",description:"GDPR: Deletes all shop data 48h after uninstall",url:a,required:!0},{name:"App Uninstalled",description:"Marks store as inactive when app is uninstalled",url:a,required:!1}],x=async(s,r)=>{try{await navigator.clipboard.writeText(s),f(s),g.success(`${r} URL copied!`),setTimeout(()=>f(null),2e3)}catch{g.error("Failed to copy")}},b=[{item:"GDPR Webhooks",status:"configured",detail:"All 3 mandatory webhooks point to shopify-webhooks function"},{item:"HMAC Verification",status:"enabled",detail:"All webhooks verified with SHA-256 signature"},{item:"TLS Certificate",status:"valid",detail:"HTTPS enforced via Supabase Edge Functions"},{item:"Privacy Policy",status:"published",detail:`Available at ${t}/privacy`},{item:"OAuth Flow",status:"implemented",detail:"Shopify OAuth via shopify-oauth Edge Function"}];return e.jsx(P,{children:e.jsxs("div",{className:"max-w-4xl mx-auto space-y-8 animate-fade-in-up",children:[e.jsxs("div",{className:"text-center",children:[e.jsxs("div",{className:"flex items-center justify-center gap-3 mb-4",children:[e.jsx(S,{className:"h-10 w-10 text-primary"}),e.jsx("h1",{className:"text-3xl font-bold",children:"Shopify Partner Compliance"})]}),e.jsx("p",{className:"text-muted-foreground",children:"Configuration URLs and status for Shopify Partner verification"})]}),e.jsxs(i,{variant:"glass",className:"border-primary/20",children:[e.jsxs(l,{children:[e.jsxs(n,{className:"flex items-center gap-2",children:[e.jsx(L,{className:"h-5 w-5"}),"Webhook Endpoint (Use for ALL GDPR webhooks)"]}),e.jsx(p,{children:"Copy this single URL and paste it for all three GDPR webhook fields in Shopify Partners"})]}),e.jsxs(c,{children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx(y,{value:a,readOnly:!0,className:"font-mono text-sm"}),e.jsx(o,{variant:"default",onClick:()=>x(a,"Webhook"),children:h===a?e.jsx(d,{className:"h-4 w-4"}):e.jsx(u,{className:"h-4 w-4"})})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-2",children:"This endpoint handles: customers/data_request, customers/redact, shop/redact"})]})]}),e.jsxs(i,{variant:"glass",className:"border-green-500/20",children:[e.jsxs(l,{children:[e.jsxs(n,{className:"flex items-center gap-2",children:[e.jsx(G,{className:"h-5 w-5 text-green-500"}),"Privacy Policy URL"]}),e.jsx(p,{children:"Public privacy policy page required by Shopify Partner Program"})]}),e.jsx(c,{children:e.jsxs("div",{className:"flex gap-2",children:[e.jsx(y,{value:`${t}/privacy`,readOnly:!0,className:"font-mono text-sm"}),e.jsx(o,{variant:"outline",onClick:()=>x(`${t}/privacy`,"Privacy Policy"),children:h===`${t}/privacy`?e.jsx(d,{className:"h-4 w-4"}):e.jsx(u,{className:"h-4 w-4"})}),e.jsx(o,{variant:"outline",asChild:!0,children:e.jsx("a",{href:`${t}/privacy`,target:"_blank",rel:"noopener noreferrer",children:e.jsx(A,{className:"h-4 w-4"})})})]})})]}),e.jsxs(i,{variant:"glass",children:[e.jsx(l,{children:e.jsxs(n,{className:"flex items-center gap-2",children:[e.jsx(q,{className:"h-5 w-5"}),"Webhook Endpoints Detail"]})}),e.jsx(c,{className:"space-y-4",children:v.map((s,r)=>e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between p-4 rounded-lg bg-secondary/20 ga
6p-3",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:s.name}),s.required&&e.jsx(R,{variant:"destructive",className:"text-[10px]",children:"Required"})]}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:s.description})]}),e.jsx(o,{variant:"ghost",size:"sm",onClick:()=>x(s.url,s.name),className:"shrink-0",children:h===s.url?e.jsx(d,{className:"h-4 w-4 text-green-500"}):e.jsx(u,{className:"h-4 w-4"})})]},r))})]}),e.jsxs(i,{variant:"glass",children:[e.jsxs(l,{children:[e.jsxs(n,{className:"flex items-center gap-2",children:[e.jsx(E,{className:"h-5 w-5"}),"Compliance Checklist"]}),e.jsx(p,{children:"Current status of Shopify Partner requirements"})]}),e.jsx(c,{className:"space-y-3",children:b.map((s,r)=>e.jsxs("div",{className:"flex items-start gap-3 p-3 rounded-lg bg-secondary/10",children:[e.jsx("div",{className:`flex h-6 w-6 items-center justify-center rounded-full shrink-0 ${s.status==="configured"||s.status==="enabled"||s.status==="valid"||s.status==="published"||s.status==="implemented"?"bg-green-500/20 text-green-500":"bg-yellow-500/20 text-yellow-500"}`,children:e.jsx(d,{className:"h-4 w-4"})}),e.jsxs("div",{children:[e.jsx("p",{className:"font-medium text-sm",children:s.item}),e.jsx("p",{className:"text-xs text-muted-foreground",children:s.detail})]})]},r))})]}),e.jsxs(i,{variant:"glass",className:"border-blue-500/20",children:[e.jsx(l,{children:e.jsxs(n,{className:"flex items-center gap-2",children:[e.jsx(D,{className:"h-5 w-5 text-blue-500"}),"Shopify Partners Setup Instructions"]})}),e.jsxs(c,{className:"space-y-4 text-sm",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"font-medium",children:"1. Go to Shopify Partners â Apps â Your App â Configuration"}),e.jsx("p",{className:"text-muted-foreground pl-4",children:"Navigate to the GDPR mandatory webhooks section"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"font-medium",children:"2. For ALL THREE GDPR webhook fields, paste:"}),e.jsx("code",{className:"block pl-4 p-2 bg-secondary/50 rounded text-xs font-mono break-all",children:a})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"font-medium",children:"3. For Privacy Policy URL, paste:"}),e.jsxs("code",{className:"block pl-4 p-2 bg-secondary/50 rounded text-xs font-mono",children:[t,"/privacy"]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"font-medium",children:"4. Save and run the automated verification"}),e.jsx("p",{className:"text-muted-foreground pl-4",children:"The system will verify HMAC signatures, TLS, and privacy policy accessibility"})]})]})]})]})})}export{V as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.