dat2ai 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dat2ai.min.js +2 -0
- package/dist/dat2ai.min.js.map +1 -0
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.umd.js +2 -0
- package/dist/index.umd.js.map +1 -0
- package/dist/shield.min.js +2 -0
- package/dist/shield.min.js.map +1 -0
- package/dist/types/consent.d.ts +21 -0
- package/dist/types/detector.d.ts +8 -0
- package/dist/types/enabler.d.ts +21 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/interceptor.d.ts +34 -0
- package/dist/types/logger.d.ts +17 -0
- package/dist/types/rate-limiter.d.ts +16 -0
- package/dist/types/reporter.d.ts +17 -0
- package/dist/types/shield.d.ts +28 -0
- package/dist/types/types.d.ts +106 -0
- package/package.json +36 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var Dat2AI=function(t){"use strict";const e="[dat2ai]";class n{constructor(t=!1){this.events=[],this.debugMode=t}debug(t,...n){this.debugMode&&console.debug(e,t,...n)}info(t,...n){console.info(e,t,...n)}warn(t,...n){console.warn(e,t,...n)}error(t,...n){console.error(e,t,...n)}addEvent(t){this.events.push(t),this.debug("Event recorded:",t.eventType,t.toolName)}getEvents(){return[...this.events]}clearEvents(){this.events=[]}}class o{constructor(t){this.tools=[],this.observer=null,this.logger=t}enable(t){this.tools=t;for(const e of t)this.applyTool(e);this.observeDom()}addTool(t){this.tools.push(t),this.applyTool(t)}applyTool(t){const e=document.querySelectorAll(t.formSelector);0!==e.length?e.forEach(e=>this.applyToForm(e,t)):this.logger.debug(`No form found for selector: ${t.formSelector}`)}applyToForm(t,e){if(t.hasAttribute("toolname"))this.logger.debug(`Form already has toolname, skipping: ${e.formSelector}`);else{if(t.setAttribute("toolname",e.toolName),t.setAttribute("tooldescription",e.toolDescription),e.autoSubmit&&t.setAttribute("toolautosubmit","true"),e.fields)for(const n of e.fields){const o=t.querySelector(n.fieldSelector);o?(o.setAttribute("toolparamtitle",n.paramTitle),o.setAttribute("toolparamdescription",n.paramDescription)):this.logger.debug(`Field not found: ${n.fieldSelector} in ${e.formSelector}`)}this.logger.debug(`Enabled tool "${e.toolName}" on ${e.formSelector}`)}}observeDom(){this.observer||"undefined"==typeof MutationObserver||(this.observer=new MutationObserver(t=>{for(const e of t)for(const t of e.addedNodes){if(!(t instanceof HTMLElement))continue;const e="FORM"===t.tagName?[t]:Array.from(t.querySelectorAll("form"));for(const t of e)for(const e of this.tools)t.matches(e.formSelector)&&this.applyToForm(t,e)}}),this.observer.observe(document.body,{childList:!0,subtree:!0}))}destroy(){this.observer&&(this.observer.disconnect(),this.observer=null),this.tools=[]}}const i=[[/Gemini/i,"extension"],[/Google-Extended/i,"browser_agent"],[/ChatGPT/i,"extension"],[/Claude/i,"extension"],[/Copilot/i,"extension"],[/HeadlessChrome/i,"automated"],[/Puppeteer/i,"automated"],[/Playwright/i,"automated"],[/Selenium/i,"automated"]];function s(t){if(t&&"agentInvoked"in t&&!0===t.agentInvoked)return{agentType:"browser_agent",userAgent:navigator.userAgent};const e=navigator.userAgent;for(const[t,n]of i)if(t.test(e))return{agentType:n,userAgent:e};return{agentType:"unknown",userAgent:e}}class r{constructor(t,e,n,o){this.handlers=new Map,this.siteKey=t,this.logger=e,this.consent=n,this.rateLimiter=o,this.boundSubmitHandler=this.handleSubmit.bind(this),this.boundToolActivated=this.handleToolActivated.bind(this),this.boundToolCancel=this.handleToolCancel.bind(this)}start(){document.addEventListener("submit",this.boundSubmitHandler,!0),document.addEventListener("toolactivated",this.boundToolActivated,!0),document.addEventListener("toolcancel",this.boundToolCancel,!0),this.logger.debug("Interceptor started")}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set),this.handlers.get(t).add(e)}off(t,e){this.handlers.get(t)?.delete(e)}handleSubmit(t){const e=t.target;if(!e||!e.hasAttribute("toolname"))return;if(!("unknown"!==s(t).agentType||"agentInvoked"in t&&!0===t.agentInvoked))return;const n=e.getAttribute("toolname")||"unknown";if(this.consent&&this.consent.config.required&&!this.consent.hasConsent()){const n=this.createEvent(e,"consent_denied",t);return n.consentGiven=!1,this.logger.addEvent(n),this.emit("consentDenied",n),this.consent.requestConsent(),void t.preventDefault()}if(this.rateLimiter){const o=this.rateLimiter.checkLimit(n);if("ok"!==o){const n=this.createEvent(e,"rate_limited",t);return n.rateLimitStatus=o,this.logger.addEvent(n),this.emit("rateLimited",n),void t.preventDefault()}}const o=this.createEvent(e,"invocation",t);o.consentGiven=!!this.consent&&this.consent.hasConsent(),o.rateLimitStatus="ok",this.logger.addEvent(o),this.emit("invocation",o)}handleToolActivated(t){const e=t.target;e&&e.hasAttribute("toolname")&&this.logger.debug("Tool activated:",e.getAttribute("toolname"))}handleToolCancel(t){const e=t.target;if(!e||!e.hasAttribute("toolname"))return;const n=this.createEvent(e,"cancel",t);this.logger.addEvent(n),this.emit("cancel",n)}createEvent(t,e,n){const o=t.getAttribute("toolname")||"unknown",i=s(n),r=t.id?`#${t.id}`:t.getAttribute("name")?`form[name="${t.getAttribute("name")}"]`:t.className?`form.${t.className.split(" ")[0]}`:"form";return{id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),timestamp:(new Date).toISOString(),siteKey:this.siteKey,toolName:o,formSelector:r,eventType:e,agentInfo:i,consentGiven:!1,rateLimitStatus:"ok"}}emit(t,e){const n=this.handlers.get(t);if(n)for(const t of n)try{t(e)}catch(t){this.logger.error("Event handler error:",t)}}destroy(){document.removeEventListener("submit",this.boundSubmitHandler,!0),document.removeEventListener("toolactivated",this.boundToolActivated,!0),document.removeEventListener("toolcancel",this.boundToolCancel,!0),this.handlers.clear(),this.logger.debug("Interceptor destroyed")}}class a{constructor(t){this.bannerEl=null,this.pendingPromise=null,this.config=t,this.storageKey=t.storageKey||"dat2ai_consent"}hasConsent(){try{return"granted"===localStorage.getItem(this.storageKey)}catch{return!1}}requestConsent(){return this.bannerEl?new Promise(t=>{this.pendingPromise={resolve:t}}):new Promise(t=>{this.pendingPromise={resolve:t},this.bannerEl=this.buildBanner(),document.body.appendChild(this.bannerEl)})}revokeConsent(){try{localStorage.removeItem(this.storageKey)}catch{}}getStorageKey(){return this.storageKey}destroy(){this.bannerEl&&this.bannerEl.parentNode&&this.bannerEl.parentNode.removeChild(this.bannerEl),this.bannerEl=null,this.pendingPromise=null}handleDecision(t){try{localStorage.setItem(this.storageKey,t?"granted":"denied")}catch{}this.bannerEl&&this.bannerEl.parentNode&&this.bannerEl.parentNode.removeChild(this.bannerEl),this.bannerEl=null,this.pendingPromise&&(this.pendingPromise.resolve(t),this.pendingPromise=null)}buildBanner(){const t=document,e=t.createElement("div");e.id="dat2ai-consent-banner",e.setAttribute("role","dialog"),e.setAttribute("aria-label","AI Agent Consent"),e.style.cssText="position:fixed;bottom:0;left:0;right:0;padding:16px;background:var(--dat2ai-banner-bg,#1a1a2e);color:var(--dat2ai-banner-text,#fff);font:14px/1.4 system-ui,sans-serif;z-index:999999;display:flex;align-items:center;gap:12px";const n=t.createElement("p");n.style.cssText="margin:0;flex:1",n.textContent=this.config.bannerText||"This site allows AI agents to interact with forms.",e.appendChild(n);const o="padding:8px 16px;border:none;border-radius:4px;cursor:pointer;font:inherit;font-weight:600",i=t.createElement("button");i.textContent="Accept",i.setAttribute("aria-label","Accept AI agent interactions"),i.style.cssText=o+";background:var(--dat2ai-btn-accept-bg,#4CAF50);color:var(--dat2ai-btn-accept-text,#fff)",i.addEventListener("click",()=>this.handleDecision(!0)),e.appendChild(i);const s=t.createElement("button");if(s.textContent="Reject",s.setAttribute("aria-label","Reject AI agent interactions"),s.style.cssText=o+";background:var(--dat2ai-btn-reject-bg,#666);color:var(--dat2ai-btn-reject-text,#fff)",s.addEventListener("click",()=>this.handleDecision(!1)),e.appendChild(s),this.config.policyUrl){const n=t.createElement("a");n.href=this.config.policyUrl,n.target="_blank",n.rel="noopener",n.textContent="More info",n.style.cssText="color:var(--dat2ai-link-color,#90CAF9);text-decoration:underline",e.appendChild(n)}return e}}class l{constructor(t){this.globalWindow=[],this.toolWindows=new Map,this.cooldownUntil=0,this.config=t}checkLimit(t){const e=Date.now();if(e<this.cooldownUntil)return"blocked";if(this.globalWindow=this.globalWindow.filter(t=>e-t<6e4),this.globalWindow.length>=this.config.maxInvocationsPerMinute)return this.cooldownUntil=e+1e3*(this.config.cooldownSeconds??60),"limited";if(this.config.maxPerTool){this.toolWindows.has(t)||this.toolWindows.set(t,[]);const n=this.toolWindows.get(t).filter(t=>e-t<6e4);if(this.toolWindows.set(t,n),n.length>=this.config.maxPerTool)return"limited";n.push(e)}return this.globalWindow.push(e),"ok"}reset(){this.globalWindow=[],this.toolWindows.clear(),this.cooldownUntil=0}}const d="dat2ai_retry_queue";class c{constructor(t,e,n){this.intervalId=null,this.apiEndpoint=t,this.siteKey=e,this.logger=n,this.boundBeforeUnload=this.onBeforeUnload.bind(this)}start(){this.intervalId=setInterval(()=>{this.flush()},5e3),window.addEventListener("beforeunload",this.boundBeforeUnload)}async flush(){const t=this.logger.getEvents();let e=[];try{const t=sessionStorage.getItem(d);t&&(e=JSON.parse(t))}catch{}const n=[...e,...t];if(0!==n.length)try{if(!(await fetch(this.apiEndpoint+"/api/events",{method:"POST",headers:{"Content-Type":"application/json","X-Site-Key":this.siteKey},body:JSON.stringify(n)})).ok)throw new Error("Non-2xx");this.logger.clearEvents();try{sessionStorage.removeItem(d)}catch{}}catch{const t=n.slice(-100);try{sessionStorage.setItem(d,JSON.stringify(t))}catch{}this.logger.clearEvents()}}destroy(){null!==this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),window.removeEventListener("beforeunload",this.boundBeforeUnload),this.onBeforeUnload()}onBeforeUnload(){const t=this.logger.getEvents();if(0===t.length)return;const e=this.apiEndpoint+"/api/events?siteKey="+encodeURIComponent(this.siteKey),n=new Blob([JSON.stringify(t)],{type:"application/json"});if("undefined"!=typeof navigator&&navigator.sendBeacon)navigator.sendBeacon(e,n);else try{fetch(e,{method:"POST",body:n,keepalive:!0})}catch{}this.logger.clearEvents()}}class h{constructor(t){this.config=t,this.logger=new n(t.debug??!1),t.consent&&(this.consent=new a(t.consent)),t.rateLimiting&&(this.rateLimiter=new l(t.rateLimiting)),this.enabler=new o(this.logger),this.interceptor=new r(t.siteKey,this.logger,this.consent,this.rateLimiter),this.logger.info(`Initialized for site: ${t.siteKey}`),t.enabler?.tools?.length&&this.enabler.enable(t.enabler.tools),this.interceptor.start(),!t.offline&&t.apiEndpoint&&(this.reporter=new c(t.apiEndpoint,t.siteKey,this.logger),this.reporter.start())}static init(t){return new h(t)}enableTool(t){this.enabler.addTool(t),this.logger.debug(`Tool added: ${t.toolName}`)}on(t,e){this.interceptor.on(t,e)}off(t,e){this.interceptor.off(t,e)}getEvents(){return this.logger.getEvents()}getConfig(){return{...this.config}}hasConsent(){return this.consent?.hasConsent()??!1}destroy(){this.reporter?.destroy(),this.consent?.destroy(),this.enabler.destroy(),this.interceptor.destroy(),this.logger.info("Destroyed")}}return"undefined"!=typeof window&&window.Dat2AIConfig&&(window.Dat2AIInstance=h.init(window.Dat2AIConfig)),t.ConsentManager=a,t.Dat2AI=h,t.RateLimiter=l,t.Reporter=c,t}({});
|
|
2
|
+
//# sourceMappingURL=dat2ai.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dat2ai.min.js","sources":["../src/logger.ts","../src/enabler.ts","../src/detector.ts","../src/interceptor.ts","../src/consent.ts","../src/rate-limiter.ts","../src/reporter.ts","../src/shield.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["PREFIX","Logger","constructor","debug","this","events","debugMode","msg","args","console","info","warn","error","addEvent","event","push","eventType","toolName","getEvents","clearEvents","Enabler","logger","tools","observer","enable","tool","applyTool","observeDom","addTool","forms","document","querySelectorAll","formSelector","length","forEach","form","applyToForm","hasAttribute","setAttribute","toolDescription","autoSubmit","fields","field","el","querySelector","fieldSelector","paramTitle","paramDescription","MutationObserver","mutations","mutation","node","addedNodes","HTMLElement","tagName","Array","from","matches","observe","body","childList","subtree","destroy","disconnect","AGENT_PATTERNS","detectAgent","agentInvoked","agentType","userAgent","navigator","ua","pattern","type","test","Interceptor","siteKey","consent","rateLimiter","handlers","Map","boundSubmitHandler","handleSubmit","bind","boundToolActivated","handleToolActivated","boundToolCancel","handleToolCancel","start","addEventListener","on","handler","has","set","Set","get","add","off","delete","e","target","getAttribute","config","required","hasConsent","createEvent","consentGiven","emit","requestConsent","preventDefault","status","checkLimit","rateLimitStatus","originalEvent","agentInfo","id","className","split","Date","now","toString","Math","random","slice","timestamp","toISOString","name","err","removeEventListener","clear","ConsentManager","bannerEl","pendingPromise","storageKey","localStorage","getItem","Promise","resolve","buildBanner","appendChild","revokeConsent","removeItem","getStorageKey","parentNode","removeChild","handleDecision","granted","setItem","d","banner","createElement","style","cssText","text","textContent","bannerText","btnCss","accept","reject","policyUrl","link","href","rel","RateLimiter","globalWindow","toolWindows","cooldownUntil","filter","t","maxInvocationsPerMinute","cooldownSeconds","maxPerTool","pruned","reset","RETRY_KEY","Reporter","apiEndpoint","intervalId","boundBeforeUnload","onBeforeUnload","setInterval","flush","window","retryQueue","stored","sessionStorage","JSON","parse","all","fetch","method","headers","stringify","ok","Error","toStore","clearInterval","url","encodeURIComponent","blob","Blob","sendBeacon","keepalive","Dat2AI","rateLimiting","enabler","interceptor","offline","reporter","init","enableTool","getConfig","Dat2AIConfig","Dat2AIInstance","_Shield"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const t="[dat2ai]";class e{constructor(t=!1){this.events=[],this.debugMode=t}debug(e,...n){this.debugMode&&console.debug(t,e,...n)}info(e,...n){console.info(t,e,...n)}warn(e,...n){console.warn(t,e,...n)}error(e,...n){console.error(t,e,...n)}addEvent(t){this.events.push(t),this.debug("Event recorded:",t.eventType,t.toolName)}getEvents(){return[...this.events]}clearEvents(){this.events=[]}}class n{constructor(t){this.tools=[],this.observer=null,this.logger=t}enable(t){this.tools=t;for(const e of t)this.applyTool(e);this.observeDom()}addTool(t){this.tools.push(t),this.applyTool(t)}applyTool(t){const e=document.querySelectorAll(t.formSelector);0!==e.length?e.forEach(e=>this.applyToForm(e,t)):this.logger.debug(`No form found for selector: ${t.formSelector}`)}applyToForm(t,e){if(t.hasAttribute("toolname"))this.logger.debug(`Form already has toolname, skipping: ${e.formSelector}`);else{if(t.setAttribute("toolname",e.toolName),t.setAttribute("tooldescription",e.toolDescription),e.autoSubmit&&t.setAttribute("toolautosubmit","true"),e.fields)for(const n of e.fields){const o=t.querySelector(n.fieldSelector);o?(o.setAttribute("toolparamtitle",n.paramTitle),o.setAttribute("toolparamdescription",n.paramDescription)):this.logger.debug(`Field not found: ${n.fieldSelector} in ${e.formSelector}`)}this.logger.debug(`Enabled tool "${e.toolName}" on ${e.formSelector}`)}}observeDom(){this.observer||"undefined"==typeof MutationObserver||(this.observer=new MutationObserver(t=>{for(const e of t)for(const t of e.addedNodes){if(!(t instanceof HTMLElement))continue;const e="FORM"===t.tagName?[t]:Array.from(t.querySelectorAll("form"));for(const t of e)for(const e of this.tools)t.matches(e.formSelector)&&this.applyToForm(t,e)}}),this.observer.observe(document.body,{childList:!0,subtree:!0}))}destroy(){this.observer&&(this.observer.disconnect(),this.observer=null),this.tools=[]}}const o=[[/Gemini/i,"extension"],[/Google-Extended/i,"browser_agent"],[/ChatGPT/i,"extension"],[/Claude/i,"extension"],[/Copilot/i,"extension"],[/HeadlessChrome/i,"automated"],[/Puppeteer/i,"automated"],[/Playwright/i,"automated"],[/Selenium/i,"automated"]];function i(t){if(t&&"agentInvoked"in t&&!0===t.agentInvoked)return{agentType:"browser_agent",userAgent:navigator.userAgent};const e=navigator.userAgent;for(const[t,n]of o)if(t.test(e))return{agentType:n,userAgent:e};return{agentType:"unknown",userAgent:e}}class s{constructor(t,e,n,o){this.handlers=new Map,this.siteKey=t,this.logger=e,this.consent=n,this.rateLimiter=o,this.boundSubmitHandler=this.handleSubmit.bind(this),this.boundToolActivated=this.handleToolActivated.bind(this),this.boundToolCancel=this.handleToolCancel.bind(this)}start(){document.addEventListener("submit",this.boundSubmitHandler,!0),document.addEventListener("toolactivated",this.boundToolActivated,!0),document.addEventListener("toolcancel",this.boundToolCancel,!0),this.logger.debug("Interceptor started")}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set),this.handlers.get(t).add(e)}off(t,e){this.handlers.get(t)?.delete(e)}handleSubmit(t){const e=t.target;if(!e||!e.hasAttribute("toolname"))return;if(!("unknown"!==i(t).agentType||"agentInvoked"in t&&!0===t.agentInvoked))return;const n=e.getAttribute("toolname")||"unknown";if(this.consent&&this.consent.config.required&&!this.consent.hasConsent()){const n=this.createEvent(e,"consent_denied",t);return n.consentGiven=!1,this.logger.addEvent(n),this.emit("consentDenied",n),this.consent.requestConsent(),void t.preventDefault()}if(this.rateLimiter){const o=this.rateLimiter.checkLimit(n);if("ok"!==o){const n=this.createEvent(e,"rate_limited",t);return n.rateLimitStatus=o,this.logger.addEvent(n),this.emit("rateLimited",n),void t.preventDefault()}}const o=this.createEvent(e,"invocation",t);o.consentGiven=!!this.consent&&this.consent.hasConsent(),o.rateLimitStatus="ok",this.logger.addEvent(o),this.emit("invocation",o)}handleToolActivated(t){const e=t.target;e&&e.hasAttribute("toolname")&&this.logger.debug("Tool activated:",e.getAttribute("toolname"))}handleToolCancel(t){const e=t.target;if(!e||!e.hasAttribute("toolname"))return;const n=this.createEvent(e,"cancel",t);this.logger.addEvent(n),this.emit("cancel",n)}createEvent(t,e,n){const o=t.getAttribute("toolname")||"unknown",s=i(n),r=t.id?`#${t.id}`:t.getAttribute("name")?`form[name="${t.getAttribute("name")}"]`:t.className?`form.${t.className.split(" ")[0]}`:"form";return{id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),timestamp:(new Date).toISOString(),siteKey:this.siteKey,toolName:o,formSelector:r,eventType:e,agentInfo:s,consentGiven:!1,rateLimitStatus:"ok"}}emit(t,e){const n=this.handlers.get(t);if(n)for(const t of n)try{t(e)}catch(t){this.logger.error("Event handler error:",t)}}destroy(){document.removeEventListener("submit",this.boundSubmitHandler,!0),document.removeEventListener("toolactivated",this.boundToolActivated,!0),document.removeEventListener("toolcancel",this.boundToolCancel,!0),this.handlers.clear(),this.logger.debug("Interceptor destroyed")}}class r{constructor(t){this.bannerEl=null,this.pendingPromise=null,this.config=t,this.storageKey=t.storageKey||"dat2ai_consent"}hasConsent(){try{return"granted"===localStorage.getItem(this.storageKey)}catch{return!1}}requestConsent(){return this.bannerEl?new Promise(t=>{this.pendingPromise={resolve:t}}):new Promise(t=>{this.pendingPromise={resolve:t},this.bannerEl=this.buildBanner(),document.body.appendChild(this.bannerEl)})}revokeConsent(){try{localStorage.removeItem(this.storageKey)}catch{}}getStorageKey(){return this.storageKey}destroy(){this.bannerEl&&this.bannerEl.parentNode&&this.bannerEl.parentNode.removeChild(this.bannerEl),this.bannerEl=null,this.pendingPromise=null}handleDecision(t){try{localStorage.setItem(this.storageKey,t?"granted":"denied")}catch{}this.bannerEl&&this.bannerEl.parentNode&&this.bannerEl.parentNode.removeChild(this.bannerEl),this.bannerEl=null,this.pendingPromise&&(this.pendingPromise.resolve(t),this.pendingPromise=null)}buildBanner(){const t=document,e=t.createElement("div");e.id="dat2ai-consent-banner",e.setAttribute("role","dialog"),e.setAttribute("aria-label","AI Agent Consent"),e.style.cssText="position:fixed;bottom:0;left:0;right:0;padding:16px;background:var(--dat2ai-banner-bg,#1a1a2e);color:var(--dat2ai-banner-text,#fff);font:14px/1.4 system-ui,sans-serif;z-index:999999;display:flex;align-items:center;gap:12px";const n=t.createElement("p");n.style.cssText="margin:0;flex:1",n.textContent=this.config.bannerText||"This site allows AI agents to interact with forms.",e.appendChild(n);const o="padding:8px 16px;border:none;border-radius:4px;cursor:pointer;font:inherit;font-weight:600",i=t.createElement("button");i.textContent="Accept",i.setAttribute("aria-label","Accept AI agent interactions"),i.style.cssText=o+";background:var(--dat2ai-btn-accept-bg,#4CAF50);color:var(--dat2ai-btn-accept-text,#fff)",i.addEventListener("click",()=>this.handleDecision(!0)),e.appendChild(i);const s=t.createElement("button");if(s.textContent="Reject",s.setAttribute("aria-label","Reject AI agent interactions"),s.style.cssText=o+";background:var(--dat2ai-btn-reject-bg,#666);color:var(--dat2ai-btn-reject-text,#fff)",s.addEventListener("click",()=>this.handleDecision(!1)),e.appendChild(s),this.config.policyUrl){const n=t.createElement("a");n.href=this.config.policyUrl,n.target="_blank",n.rel="noopener",n.textContent="More info",n.style.cssText="color:var(--dat2ai-link-color,#90CAF9);text-decoration:underline",e.appendChild(n)}return e}}class a{constructor(t){this.globalWindow=[],this.toolWindows=new Map,this.cooldownUntil=0,this.config=t}checkLimit(t){const e=Date.now();if(e<this.cooldownUntil)return"blocked";if(this.globalWindow=this.globalWindow.filter(t=>e-t<6e4),this.globalWindow.length>=this.config.maxInvocationsPerMinute)return this.cooldownUntil=e+1e3*(this.config.cooldownSeconds??60),"limited";if(this.config.maxPerTool){this.toolWindows.has(t)||this.toolWindows.set(t,[]);const n=this.toolWindows.get(t).filter(t=>e-t<6e4);if(this.toolWindows.set(t,n),n.length>=this.config.maxPerTool)return"limited";n.push(e)}return this.globalWindow.push(e),"ok"}reset(){this.globalWindow=[],this.toolWindows.clear(),this.cooldownUntil=0}}const l="dat2ai_retry_queue";class d{constructor(t,e,n){this.intervalId=null,this.apiEndpoint=t,this.siteKey=e,this.logger=n,this.boundBeforeUnload=this.onBeforeUnload.bind(this)}start(){this.intervalId=setInterval(()=>{this.flush()},5e3),window.addEventListener("beforeunload",this.boundBeforeUnload)}async flush(){const t=this.logger.getEvents();let e=[];try{const t=sessionStorage.getItem(l);t&&(e=JSON.parse(t))}catch{}const n=[...e,...t];if(0!==n.length)try{if(!(await fetch(this.apiEndpoint+"/api/events",{method:"POST",headers:{"Content-Type":"application/json","X-Site-Key":this.siteKey},body:JSON.stringify(n)})).ok)throw new Error("Non-2xx");this.logger.clearEvents();try{sessionStorage.removeItem(l)}catch{}}catch{const t=n.slice(-100);try{sessionStorage.setItem(l,JSON.stringify(t))}catch{}this.logger.clearEvents()}}destroy(){null!==this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),window.removeEventListener("beforeunload",this.boundBeforeUnload),this.onBeforeUnload()}onBeforeUnload(){const t=this.logger.getEvents();if(0===t.length)return;const e=this.apiEndpoint+"/api/events?siteKey="+encodeURIComponent(this.siteKey),n=new Blob([JSON.stringify(t)],{type:"application/json"});if("undefined"!=typeof navigator&&navigator.sendBeacon)navigator.sendBeacon(e,n);else try{fetch(e,{method:"POST",body:n,keepalive:!0})}catch{}this.logger.clearEvents()}}class c{constructor(t){this.config=t,this.logger=new e(t.debug??!1),t.consent&&(this.consent=new r(t.consent)),t.rateLimiting&&(this.rateLimiter=new a(t.rateLimiting)),this.enabler=new n(this.logger),this.interceptor=new s(t.siteKey,this.logger,this.consent,this.rateLimiter),this.logger.info(`Initialized for site: ${t.siteKey}`),t.enabler?.tools?.length&&this.enabler.enable(t.enabler.tools),this.interceptor.start(),!t.offline&&t.apiEndpoint&&(this.reporter=new d(t.apiEndpoint,t.siteKey,this.logger),this.reporter.start())}static init(t){return new c(t)}enableTool(t){this.enabler.addTool(t),this.logger.debug(`Tool added: ${t.toolName}`)}on(t,e){this.interceptor.on(t,e)}off(t,e){this.interceptor.off(t,e)}getEvents(){return this.logger.getEvents()}getConfig(){return{...this.config}}hasConsent(){return this.consent?.hasConsent()??!1}destroy(){this.reporter?.destroy(),this.consent?.destroy(),this.enabler.destroy(),this.interceptor.destroy(),this.logger.info("Destroyed")}}"undefined"!=typeof window&&window.Dat2AIConfig&&(window.Dat2AIInstance=c.init(window.Dat2AIConfig));export{r as ConsentManager,c as Dat2AI,a as RateLimiter,d as Reporter};
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/logger.ts","../src/enabler.ts","../src/detector.ts","../src/interceptor.ts","../src/consent.ts","../src/rate-limiter.ts","../src/reporter.ts","../src/shield.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["PREFIX","Logger","constructor","debug","this","events","debugMode","msg","args","console","info","warn","error","addEvent","event","push","eventType","toolName","getEvents","clearEvents","Enabler","logger","tools","observer","enable","tool","applyTool","observeDom","addTool","forms","document","querySelectorAll","formSelector","length","forEach","form","applyToForm","hasAttribute","setAttribute","toolDescription","autoSubmit","fields","field","el","querySelector","fieldSelector","paramTitle","paramDescription","MutationObserver","mutations","mutation","node","addedNodes","HTMLElement","tagName","Array","from","matches","observe","body","childList","subtree","destroy","disconnect","AGENT_PATTERNS","detectAgent","agentInvoked","agentType","userAgent","navigator","ua","pattern","type","test","Interceptor","siteKey","consent","rateLimiter","handlers","Map","boundSubmitHandler","handleSubmit","bind","boundToolActivated","handleToolActivated","boundToolCancel","handleToolCancel","start","addEventListener","on","handler","has","set","Set","get","add","off","delete","e","target","getAttribute","config","required","hasConsent","createEvent","consentGiven","emit","requestConsent","preventDefault","status","checkLimit","rateLimitStatus","originalEvent","agentInfo","id","className","split","Date","now","toString","Math","random","slice","timestamp","toISOString","name","err","removeEventListener","clear","ConsentManager","bannerEl","pendingPromise","storageKey","localStorage","getItem","Promise","resolve","buildBanner","appendChild","revokeConsent","removeItem","getStorageKey","parentNode","removeChild","handleDecision","granted","setItem","d","banner","createElement","style","cssText","text","textContent","bannerText","btnCss","accept","reject","policyUrl","link","href","rel","RateLimiter","globalWindow","toolWindows","cooldownUntil","filter","t","maxInvocationsPerMinute","cooldownSeconds","maxPerTool","pruned","reset","RETRY_KEY","Reporter","apiEndpoint","intervalId","boundBeforeUnload","onBeforeUnload","setInterval","flush","window","retryQueue","stored","sessionStorage","JSON","parse","all","fetch","method","headers","stringify","ok","Error","toStore","clearInterval","url","encodeURIComponent","blob","Blob","sendBeacon","keepalive","Dat2AI","rateLimiting","enabler","interceptor","offline","reporter","init","enableTool","getConfig","Dat2AIConfig","Dat2AIInstance","_Shield"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).Dat2AI={})}(this,function(t){"use strict";const e="[dat2ai]";class n{constructor(t=!1){this.events=[],this.debugMode=t}debug(t,...n){this.debugMode&&console.debug(e,t,...n)}info(t,...n){console.info(e,t,...n)}warn(t,...n){console.warn(e,t,...n)}error(t,...n){console.error(e,t,...n)}addEvent(t){this.events.push(t),this.debug("Event recorded:",t.eventType,t.toolName)}getEvents(){return[...this.events]}clearEvents(){this.events=[]}}class o{constructor(t){this.tools=[],this.observer=null,this.logger=t}enable(t){this.tools=t;for(const e of t)this.applyTool(e);this.observeDom()}addTool(t){this.tools.push(t),this.applyTool(t)}applyTool(t){const e=document.querySelectorAll(t.formSelector);0!==e.length?e.forEach(e=>this.applyToForm(e,t)):this.logger.debug(`No form found for selector: ${t.formSelector}`)}applyToForm(t,e){if(t.hasAttribute("toolname"))this.logger.debug(`Form already has toolname, skipping: ${e.formSelector}`);else{if(t.setAttribute("toolname",e.toolName),t.setAttribute("tooldescription",e.toolDescription),e.autoSubmit&&t.setAttribute("toolautosubmit","true"),e.fields)for(const n of e.fields){const o=t.querySelector(n.fieldSelector);o?(o.setAttribute("toolparamtitle",n.paramTitle),o.setAttribute("toolparamdescription",n.paramDescription)):this.logger.debug(`Field not found: ${n.fieldSelector} in ${e.formSelector}`)}this.logger.debug(`Enabled tool "${e.toolName}" on ${e.formSelector}`)}}observeDom(){this.observer||"undefined"==typeof MutationObserver||(this.observer=new MutationObserver(t=>{for(const e of t)for(const t of e.addedNodes){if(!(t instanceof HTMLElement))continue;const e="FORM"===t.tagName?[t]:Array.from(t.querySelectorAll("form"));for(const t of e)for(const e of this.tools)t.matches(e.formSelector)&&this.applyToForm(t,e)}}),this.observer.observe(document.body,{childList:!0,subtree:!0}))}destroy(){this.observer&&(this.observer.disconnect(),this.observer=null),this.tools=[]}}const i=[[/Gemini/i,"extension"],[/Google-Extended/i,"browser_agent"],[/ChatGPT/i,"extension"],[/Claude/i,"extension"],[/Copilot/i,"extension"],[/HeadlessChrome/i,"automated"],[/Puppeteer/i,"automated"],[/Playwright/i,"automated"],[/Selenium/i,"automated"]];function s(t){if(t&&"agentInvoked"in t&&!0===t.agentInvoked)return{agentType:"browser_agent",userAgent:navigator.userAgent};const e=navigator.userAgent;for(const[t,n]of i)if(t.test(e))return{agentType:n,userAgent:e};return{agentType:"unknown",userAgent:e}}class r{constructor(t,e,n,o){this.handlers=new Map,this.siteKey=t,this.logger=e,this.consent=n,this.rateLimiter=o,this.boundSubmitHandler=this.handleSubmit.bind(this),this.boundToolActivated=this.handleToolActivated.bind(this),this.boundToolCancel=this.handleToolCancel.bind(this)}start(){document.addEventListener("submit",this.boundSubmitHandler,!0),document.addEventListener("toolactivated",this.boundToolActivated,!0),document.addEventListener("toolcancel",this.boundToolCancel,!0),this.logger.debug("Interceptor started")}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set),this.handlers.get(t).add(e)}off(t,e){this.handlers.get(t)?.delete(e)}handleSubmit(t){const e=t.target;if(!e||!e.hasAttribute("toolname"))return;if(!("unknown"!==s(t).agentType||"agentInvoked"in t&&!0===t.agentInvoked))return;const n=e.getAttribute("toolname")||"unknown";if(this.consent&&this.consent.config.required&&!this.consent.hasConsent()){const n=this.createEvent(e,"consent_denied",t);return n.consentGiven=!1,this.logger.addEvent(n),this.emit("consentDenied",n),this.consent.requestConsent(),void t.preventDefault()}if(this.rateLimiter){const o=this.rateLimiter.checkLimit(n);if("ok"!==o){const n=this.createEvent(e,"rate_limited",t);return n.rateLimitStatus=o,this.logger.addEvent(n),this.emit("rateLimited",n),void t.preventDefault()}}const o=this.createEvent(e,"invocation",t);o.consentGiven=!!this.consent&&this.consent.hasConsent(),o.rateLimitStatus="ok",this.logger.addEvent(o),this.emit("invocation",o)}handleToolActivated(t){const e=t.target;e&&e.hasAttribute("toolname")&&this.logger.debug("Tool activated:",e.getAttribute("toolname"))}handleToolCancel(t){const e=t.target;if(!e||!e.hasAttribute("toolname"))return;const n=this.createEvent(e,"cancel",t);this.logger.addEvent(n),this.emit("cancel",n)}createEvent(t,e,n){const o=t.getAttribute("toolname")||"unknown",i=s(n),r=t.id?`#${t.id}`:t.getAttribute("name")?`form[name="${t.getAttribute("name")}"]`:t.className?`form.${t.className.split(" ")[0]}`:"form";return{id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),timestamp:(new Date).toISOString(),siteKey:this.siteKey,toolName:o,formSelector:r,eventType:e,agentInfo:i,consentGiven:!1,rateLimitStatus:"ok"}}emit(t,e){const n=this.handlers.get(t);if(n)for(const t of n)try{t(e)}catch(t){this.logger.error("Event handler error:",t)}}destroy(){document.removeEventListener("submit",this.boundSubmitHandler,!0),document.removeEventListener("toolactivated",this.boundToolActivated,!0),document.removeEventListener("toolcancel",this.boundToolCancel,!0),this.handlers.clear(),this.logger.debug("Interceptor destroyed")}}class a{constructor(t){this.bannerEl=null,this.pendingPromise=null,this.config=t,this.storageKey=t.storageKey||"dat2ai_consent"}hasConsent(){try{return"granted"===localStorage.getItem(this.storageKey)}catch{return!1}}requestConsent(){return this.bannerEl?new Promise(t=>{this.pendingPromise={resolve:t}}):new Promise(t=>{this.pendingPromise={resolve:t},this.bannerEl=this.buildBanner(),document.body.appendChild(this.bannerEl)})}revokeConsent(){try{localStorage.removeItem(this.storageKey)}catch{}}getStorageKey(){return this.storageKey}destroy(){this.bannerEl&&this.bannerEl.parentNode&&this.bannerEl.parentNode.removeChild(this.bannerEl),this.bannerEl=null,this.pendingPromise=null}handleDecision(t){try{localStorage.setItem(this.storageKey,t?"granted":"denied")}catch{}this.bannerEl&&this.bannerEl.parentNode&&this.bannerEl.parentNode.removeChild(this.bannerEl),this.bannerEl=null,this.pendingPromise&&(this.pendingPromise.resolve(t),this.pendingPromise=null)}buildBanner(){const t=document,e=t.createElement("div");e.id="dat2ai-consent-banner",e.setAttribute("role","dialog"),e.setAttribute("aria-label","AI Agent Consent"),e.style.cssText="position:fixed;bottom:0;left:0;right:0;padding:16px;background:var(--dat2ai-banner-bg,#1a1a2e);color:var(--dat2ai-banner-text,#fff);font:14px/1.4 system-ui,sans-serif;z-index:999999;display:flex;align-items:center;gap:12px";const n=t.createElement("p");n.style.cssText="margin:0;flex:1",n.textContent=this.config.bannerText||"This site allows AI agents to interact with forms.",e.appendChild(n);const o="padding:8px 16px;border:none;border-radius:4px;cursor:pointer;font:inherit;font-weight:600",i=t.createElement("button");i.textContent="Accept",i.setAttribute("aria-label","Accept AI agent interactions"),i.style.cssText=o+";background:var(--dat2ai-btn-accept-bg,#4CAF50);color:var(--dat2ai-btn-accept-text,#fff)",i.addEventListener("click",()=>this.handleDecision(!0)),e.appendChild(i);const s=t.createElement("button");if(s.textContent="Reject",s.setAttribute("aria-label","Reject AI agent interactions"),s.style.cssText=o+";background:var(--dat2ai-btn-reject-bg,#666);color:var(--dat2ai-btn-reject-text,#fff)",s.addEventListener("click",()=>this.handleDecision(!1)),e.appendChild(s),this.config.policyUrl){const n=t.createElement("a");n.href=this.config.policyUrl,n.target="_blank",n.rel="noopener",n.textContent="More info",n.style.cssText="color:var(--dat2ai-link-color,#90CAF9);text-decoration:underline",e.appendChild(n)}return e}}class l{constructor(t){this.globalWindow=[],this.toolWindows=new Map,this.cooldownUntil=0,this.config=t}checkLimit(t){const e=Date.now();if(e<this.cooldownUntil)return"blocked";if(this.globalWindow=this.globalWindow.filter(t=>e-t<6e4),this.globalWindow.length>=this.config.maxInvocationsPerMinute)return this.cooldownUntil=e+1e3*(this.config.cooldownSeconds??60),"limited";if(this.config.maxPerTool){this.toolWindows.has(t)||this.toolWindows.set(t,[]);const n=this.toolWindows.get(t).filter(t=>e-t<6e4);if(this.toolWindows.set(t,n),n.length>=this.config.maxPerTool)return"limited";n.push(e)}return this.globalWindow.push(e),"ok"}reset(){this.globalWindow=[],this.toolWindows.clear(),this.cooldownUntil=0}}const d="dat2ai_retry_queue";class c{constructor(t,e,n){this.intervalId=null,this.apiEndpoint=t,this.siteKey=e,this.logger=n,this.boundBeforeUnload=this.onBeforeUnload.bind(this)}start(){this.intervalId=setInterval(()=>{this.flush()},5e3),window.addEventListener("beforeunload",this.boundBeforeUnload)}async flush(){const t=this.logger.getEvents();let e=[];try{const t=sessionStorage.getItem(d);t&&(e=JSON.parse(t))}catch{}const n=[...e,...t];if(0!==n.length)try{if(!(await fetch(this.apiEndpoint+"/api/events",{method:"POST",headers:{"Content-Type":"application/json","X-Site-Key":this.siteKey},body:JSON.stringify(n)})).ok)throw new Error("Non-2xx");this.logger.clearEvents();try{sessionStorage.removeItem(d)}catch{}}catch{const t=n.slice(-100);try{sessionStorage.setItem(d,JSON.stringify(t))}catch{}this.logger.clearEvents()}}destroy(){null!==this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),window.removeEventListener("beforeunload",this.boundBeforeUnload),this.onBeforeUnload()}onBeforeUnload(){const t=this.logger.getEvents();if(0===t.length)return;const e=this.apiEndpoint+"/api/events?siteKey="+encodeURIComponent(this.siteKey),n=new Blob([JSON.stringify(t)],{type:"application/json"});if("undefined"!=typeof navigator&&navigator.sendBeacon)navigator.sendBeacon(e,n);else try{fetch(e,{method:"POST",body:n,keepalive:!0})}catch{}this.logger.clearEvents()}}class h{constructor(t){this.config=t,this.logger=new n(t.debug??!1),t.consent&&(this.consent=new a(t.consent)),t.rateLimiting&&(this.rateLimiter=new l(t.rateLimiting)),this.enabler=new o(this.logger),this.interceptor=new r(t.siteKey,this.logger,this.consent,this.rateLimiter),this.logger.info(`Initialized for site: ${t.siteKey}`),t.enabler?.tools?.length&&this.enabler.enable(t.enabler.tools),this.interceptor.start(),!t.offline&&t.apiEndpoint&&(this.reporter=new c(t.apiEndpoint,t.siteKey,this.logger),this.reporter.start())}static init(t){return new h(t)}enableTool(t){this.enabler.addTool(t),this.logger.debug(`Tool added: ${t.toolName}`)}on(t,e){this.interceptor.on(t,e)}off(t,e){this.interceptor.off(t,e)}getEvents(){return this.logger.getEvents()}getConfig(){return{...this.config}}hasConsent(){return this.consent?.hasConsent()??!1}destroy(){this.reporter?.destroy(),this.consent?.destroy(),this.enabler.destroy(),this.interceptor.destroy(),this.logger.info("Destroyed")}}"undefined"!=typeof window&&window.Dat2AIConfig&&(window.Dat2AIInstance=h.init(window.Dat2AIConfig)),t.ConsentManager=a,t.Dat2AI=h,t.RateLimiter=l,t.Reporter=c});
|
|
2
|
+
//# sourceMappingURL=index.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../src/logger.ts","../src/enabler.ts","../src/detector.ts","../src/interceptor.ts","../src/consent.ts","../src/rate-limiter.ts","../src/reporter.ts","../src/shield.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["PREFIX","Logger","constructor","debug","this","events","debugMode","msg","args","console","info","warn","error","addEvent","event","push","eventType","toolName","getEvents","clearEvents","Enabler","logger","tools","observer","enable","tool","applyTool","observeDom","addTool","forms","document","querySelectorAll","formSelector","length","forEach","form","applyToForm","hasAttribute","setAttribute","toolDescription","autoSubmit","fields","field","el","querySelector","fieldSelector","paramTitle","paramDescription","MutationObserver","mutations","mutation","node","addedNodes","HTMLElement","tagName","Array","from","matches","observe","body","childList","subtree","destroy","disconnect","AGENT_PATTERNS","detectAgent","agentInvoked","agentType","userAgent","navigator","ua","pattern","type","test","Interceptor","siteKey","consent","rateLimiter","handlers","Map","boundSubmitHandler","handleSubmit","bind","boundToolActivated","handleToolActivated","boundToolCancel","handleToolCancel","start","addEventListener","on","handler","has","set","Set","get","add","off","delete","e","target","getAttribute","config","required","hasConsent","createEvent","consentGiven","emit","requestConsent","preventDefault","status","checkLimit","rateLimitStatus","originalEvent","agentInfo","id","className","split","Date","now","toString","Math","random","slice","timestamp","toISOString","name","err","removeEventListener","clear","ConsentManager","bannerEl","pendingPromise","storageKey","localStorage","getItem","Promise","resolve","buildBanner","appendChild","revokeConsent","removeItem","getStorageKey","parentNode","removeChild","handleDecision","granted","setItem","d","banner","createElement","style","cssText","text","textContent","bannerText","btnCss","accept","reject","policyUrl","link","href","rel","RateLimiter","globalWindow","toolWindows","cooldownUntil","filter","t","maxInvocationsPerMinute","cooldownSeconds","maxPerTool","pruned","reset","RETRY_KEY","Reporter","apiEndpoint","intervalId","boundBeforeUnload","onBeforeUnload","setInterval","flush","window","retryQueue","stored","sessionStorage","JSON","parse","all","fetch","method","headers","stringify","ok","Error","toStore","clearInterval","url","encodeURIComponent","blob","Blob","sendBeacon","keepalive","Dat2AI","rateLimiting","enabler","interceptor","offline","reporter","init","enableTool","getConfig","Dat2AIConfig","Dat2AIInstance","_Shield"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var Dat2AI=function(t){"use strict";const e="[dat2ai]";class n{constructor(t=!1){this.events=[],this.debugMode=t}debug(t,...n){this.debugMode&&console.debug(e,t,...n)}info(t,...n){console.info(e,t,...n)}warn(t,...n){console.warn(e,t,...n)}error(t,...n){console.error(e,t,...n)}addEvent(t){this.events.push(t),this.debug("Event recorded:",t.eventType,t.toolName)}getEvents(){return[...this.events]}clearEvents(){this.events=[]}}class o{constructor(t){this.tools=[],this.observer=null,this.logger=t}enable(t){this.tools=t;for(const e of t)this.applyTool(e);this.observeDom()}addTool(t){this.tools.push(t),this.applyTool(t)}applyTool(t){const e=document.querySelectorAll(t.formSelector);0!==e.length?e.forEach(e=>this.applyToForm(e,t)):this.logger.debug(`No form found for selector: ${t.formSelector}`)}applyToForm(t,e){if(t.hasAttribute("toolname"))this.logger.debug(`Form already has toolname, skipping: ${e.formSelector}`);else{if(t.setAttribute("toolname",e.toolName),t.setAttribute("tooldescription",e.toolDescription),e.autoSubmit&&t.setAttribute("toolautosubmit","true"),e.fields)for(const n of e.fields){const o=t.querySelector(n.fieldSelector);o?(o.setAttribute("toolparamtitle",n.paramTitle),o.setAttribute("toolparamdescription",n.paramDescription)):this.logger.debug(`Field not found: ${n.fieldSelector} in ${e.formSelector}`)}this.logger.debug(`Enabled tool "${e.toolName}" on ${e.formSelector}`)}}observeDom(){this.observer||"undefined"==typeof MutationObserver||(this.observer=new MutationObserver(t=>{for(const e of t)for(const t of e.addedNodes){if(!(t instanceof HTMLElement))continue;const e="FORM"===t.tagName?[t]:Array.from(t.querySelectorAll("form"));for(const t of e)for(const e of this.tools)t.matches(e.formSelector)&&this.applyToForm(t,e)}}),this.observer.observe(document.body,{childList:!0,subtree:!0}))}destroy(){this.observer&&(this.observer.disconnect(),this.observer=null),this.tools=[]}}const i=[[/Gemini/i,"extension"],[/Google-Extended/i,"browser_agent"],[/ChatGPT/i,"extension"],[/Claude/i,"extension"],[/Copilot/i,"extension"],[/HeadlessChrome/i,"automated"],[/Puppeteer/i,"automated"],[/Playwright/i,"automated"],[/Selenium/i,"automated"]];function s(t){if(t&&"agentInvoked"in t&&!0===t.agentInvoked)return{agentType:"browser_agent",userAgent:navigator.userAgent};const e=navigator.userAgent;for(const[t,n]of i)if(t.test(e))return{agentType:n,userAgent:e};return{agentType:"unknown",userAgent:e}}class r{constructor(t,e,n,o){this.handlers=new Map,this.siteKey=t,this.logger=e,this.consent=n,this.rateLimiter=o,this.boundSubmitHandler=this.handleSubmit.bind(this),this.boundToolActivated=this.handleToolActivated.bind(this),this.boundToolCancel=this.handleToolCancel.bind(this)}start(){document.addEventListener("submit",this.boundSubmitHandler,!0),document.addEventListener("toolactivated",this.boundToolActivated,!0),document.addEventListener("toolcancel",this.boundToolCancel,!0),this.logger.debug("Interceptor started")}on(t,e){this.handlers.has(t)||this.handlers.set(t,new Set),this.handlers.get(t).add(e)}off(t,e){this.handlers.get(t)?.delete(e)}handleSubmit(t){const e=t.target;if(!e||!e.hasAttribute("toolname"))return;if(!("unknown"!==s(t).agentType||"agentInvoked"in t&&!0===t.agentInvoked))return;const n=e.getAttribute("toolname")||"unknown";if(this.consent&&this.consent.config.required&&!this.consent.hasConsent()){const n=this.createEvent(e,"consent_denied",t);return n.consentGiven=!1,this.logger.addEvent(n),this.emit("consentDenied",n),this.consent.requestConsent(),void t.preventDefault()}if(this.rateLimiter){const o=this.rateLimiter.checkLimit(n);if("ok"!==o){const n=this.createEvent(e,"rate_limited",t);return n.rateLimitStatus=o,this.logger.addEvent(n),this.emit("rateLimited",n),void t.preventDefault()}}const o=this.createEvent(e,"invocation",t);o.consentGiven=!!this.consent&&this.consent.hasConsent(),o.rateLimitStatus="ok",this.logger.addEvent(o),this.emit("invocation",o)}handleToolActivated(t){const e=t.target;e&&e.hasAttribute("toolname")&&this.logger.debug("Tool activated:",e.getAttribute("toolname"))}handleToolCancel(t){const e=t.target;if(!e||!e.hasAttribute("toolname"))return;const n=this.createEvent(e,"cancel",t);this.logger.addEvent(n),this.emit("cancel",n)}createEvent(t,e,n){const o=t.getAttribute("toolname")||"unknown",i=s(n),r=t.id?`#${t.id}`:t.getAttribute("name")?`form[name="${t.getAttribute("name")}"]`:t.className?`form.${t.className.split(" ")[0]}`:"form";return{id:Date.now().toString(36)+Math.random().toString(36).slice(2,10),timestamp:(new Date).toISOString(),siteKey:this.siteKey,toolName:o,formSelector:r,eventType:e,agentInfo:i,consentGiven:!1,rateLimitStatus:"ok"}}emit(t,e){const n=this.handlers.get(t);if(n)for(const t of n)try{t(e)}catch(t){this.logger.error("Event handler error:",t)}}destroy(){document.removeEventListener("submit",this.boundSubmitHandler,!0),document.removeEventListener("toolactivated",this.boundToolActivated,!0),document.removeEventListener("toolcancel",this.boundToolCancel,!0),this.handlers.clear(),this.logger.debug("Interceptor destroyed")}}class a{constructor(t){this.bannerEl=null,this.pendingPromise=null,this.config=t,this.storageKey=t.storageKey||"webmcp_consent"}hasConsent(){try{return"granted"===localStorage.getItem(this.storageKey)}catch{return!1}}requestConsent(){return this.bannerEl?new Promise(t=>{this.pendingPromise={resolve:t}}):new Promise(t=>{this.pendingPromise={resolve:t},this.bannerEl=this.buildBanner(),document.body.appendChild(this.bannerEl)})}revokeConsent(){try{localStorage.removeItem(this.storageKey)}catch{}}getStorageKey(){return this.storageKey}destroy(){this.bannerEl&&this.bannerEl.parentNode&&this.bannerEl.parentNode.removeChild(this.bannerEl),this.bannerEl=null,this.pendingPromise=null}handleDecision(t){try{localStorage.setItem(this.storageKey,t?"granted":"denied")}catch{}this.bannerEl&&this.bannerEl.parentNode&&this.bannerEl.parentNode.removeChild(this.bannerEl),this.bannerEl=null,this.pendingPromise&&(this.pendingPromise.resolve(t),this.pendingPromise=null)}buildBanner(){const t=document,e=t.createElement("div");e.id="webmcp-consent-banner",e.setAttribute("role","dialog"),e.setAttribute("aria-label","AI Agent Consent"),e.style.cssText="position:fixed;bottom:0;left:0;right:0;padding:16px;background:var(--webmcp-banner-bg,#1a1a2e);color:var(--webmcp-banner-text,#fff);font:14px/1.4 system-ui,sans-serif;z-index:999999;display:flex;align-items:center;gap:12px";const n=t.createElement("p");n.style.cssText="margin:0;flex:1",n.textContent=this.config.bannerText||"This site allows AI agents to interact with forms.",e.appendChild(n);const o="padding:8px 16px;border:none;border-radius:4px;cursor:pointer;font:inherit;font-weight:600",i=t.createElement("button");i.textContent="Accept",i.setAttribute("aria-label","Accept AI agent interactions"),i.style.cssText=o+";background:var(--webmcp-btn-accept-bg,#4CAF50);color:var(--webmcp-btn-accept-text,#fff)",i.addEventListener("click",()=>this.handleDecision(!0)),e.appendChild(i);const s=t.createElement("button");if(s.textContent="Reject",s.setAttribute("aria-label","Reject AI agent interactions"),s.style.cssText=o+";background:var(--webmcp-btn-reject-bg,#666);color:var(--webmcp-btn-reject-text,#fff)",s.addEventListener("click",()=>this.handleDecision(!1)),e.appendChild(s),this.config.policyUrl){const n=t.createElement("a");n.href=this.config.policyUrl,n.target="_blank",n.rel="noopener",n.textContent="More info",n.style.cssText="color:var(--webmcp-link-color,#90CAF9);text-decoration:underline",e.appendChild(n)}return e}}class l{constructor(t){this.globalWindow=[],this.toolWindows=new Map,this.cooldownUntil=0,this.config=t}checkLimit(t){const e=Date.now();if(e<this.cooldownUntil)return"blocked";if(this.globalWindow=this.globalWindow.filter(t=>e-t<6e4),this.globalWindow.length>=this.config.maxInvocationsPerMinute)return this.cooldownUntil=e+1e3*(this.config.cooldownSeconds??60),"limited";if(this.config.maxPerTool){this.toolWindows.has(t)||this.toolWindows.set(t,[]);const n=this.toolWindows.get(t).filter(t=>e-t<6e4);if(this.toolWindows.set(t,n),n.length>=this.config.maxPerTool)return"limited";n.push(e)}return this.globalWindow.push(e),"ok"}reset(){this.globalWindow=[],this.toolWindows.clear(),this.cooldownUntil=0}}const c="webmcp_retry_queue";class d{constructor(t,e,n){this.intervalId=null,this.apiEndpoint=t,this.siteKey=e,this.logger=n,this.boundBeforeUnload=this.onBeforeUnload.bind(this)}start(){this.intervalId=setInterval(()=>{this.flush()},5e3),window.addEventListener("beforeunload",this.boundBeforeUnload)}async flush(){const t=this.logger.getEvents();let e=[];try{const t=sessionStorage.getItem(c);t&&(e=JSON.parse(t))}catch{}const n=[...e,...t];if(0!==n.length)try{if(!(await fetch(this.apiEndpoint+"/api/events",{method:"POST",headers:{"Content-Type":"application/json","X-Site-Key":this.siteKey},body:JSON.stringify(n)})).ok)throw new Error("Non-2xx");this.logger.clearEvents();try{sessionStorage.removeItem(c)}catch{}}catch{const t=n.slice(-100);try{sessionStorage.setItem(c,JSON.stringify(t))}catch{}this.logger.clearEvents()}}destroy(){null!==this.intervalId&&(clearInterval(this.intervalId),this.intervalId=null),window.removeEventListener("beforeunload",this.boundBeforeUnload),this.onBeforeUnload()}onBeforeUnload(){const t=this.logger.getEvents();if(0===t.length)return;const e=this.apiEndpoint+"/api/events?siteKey="+encodeURIComponent(this.siteKey),n=new Blob([JSON.stringify(t)],{type:"application/json"});if("undefined"!=typeof navigator&&navigator.sendBeacon)navigator.sendBeacon(e,n);else try{fetch(e,{method:"POST",body:n,keepalive:!0})}catch{}this.logger.clearEvents()}}class h{constructor(t){this.config=t,this.logger=new n(t.debug??!1),t.consent&&(this.consent=new a(t.consent)),t.rateLimiting&&(this.rateLimiter=new l(t.rateLimiting)),this.enabler=new o(this.logger),this.interceptor=new r(t.siteKey,this.logger,this.consent,this.rateLimiter),this.logger.info(`Initialized for site: ${t.siteKey}`),t.enabler?.tools?.length&&this.enabler.enable(t.enabler.tools),this.interceptor.start(),!t.offline&&t.apiEndpoint&&(this.reporter=new d(t.apiEndpoint,t.siteKey,this.logger),this.reporter.start())}static init(t){return new h(t)}enableTool(t){this.enabler.addTool(t),this.logger.debug(`Tool added: ${t.toolName}`)}on(t,e){this.interceptor.on(t,e)}off(t,e){this.interceptor.off(t,e)}getEvents(){return this.logger.getEvents()}getConfig(){return{...this.config}}hasConsent(){return this.consent?.hasConsent()??!1}destroy(){this.reporter?.destroy(),this.consent?.destroy(),this.enabler.destroy(),this.interceptor.destroy(),this.logger.info("Destroyed")}}return"undefined"!=typeof window&&window.Dat2AIConfig&&(window.Dat2AIInstance=h.init(window.Dat2AIConfig)),t.ConsentManager=a,t.Dat2AI=h,t.RateLimiter=l,t.Reporter=d,t}({});
|
|
2
|
+
//# sourceMappingURL=shield.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shield.min.js","sources":["../src/logger.ts","../src/enabler.ts","../src/detector.ts","../src/interceptor.ts","../src/consent.ts","../src/rate-limiter.ts","../src/reporter.ts","../src/shield.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["PREFIX","Logger","constructor","debug","this","events","debugMode","msg","args","console","info","warn","error","addEvent","event","push","eventType","toolName","getEvents","clearEvents","Enabler","logger","tools","observer","enable","tool","applyTool","observeDom","addTool","forms","document","querySelectorAll","formSelector","length","forEach","form","applyToForm","hasAttribute","setAttribute","toolDescription","autoSubmit","fields","field","el","querySelector","fieldSelector","paramTitle","paramDescription","MutationObserver","mutations","mutation","node","addedNodes","HTMLElement","tagName","Array","from","matches","observe","body","childList","subtree","destroy","disconnect","AGENT_PATTERNS","detectAgent","agentInvoked","agentType","userAgent","navigator","ua","pattern","type","test","Interceptor","siteKey","consent","rateLimiter","handlers","Map","boundSubmitHandler","handleSubmit","bind","boundToolActivated","handleToolActivated","boundToolCancel","handleToolCancel","start","addEventListener","on","handler","has","set","Set","get","add","off","delete","e","target","getAttribute","config","required","hasConsent","createEvent","consentGiven","emit","requestConsent","preventDefault","status","checkLimit","rateLimitStatus","originalEvent","agentInfo","id","className","split","Date","now","toString","Math","random","slice","timestamp","toISOString","name","err","removeEventListener","clear","ConsentManager","bannerEl","pendingPromise","storageKey","localStorage","getItem","Promise","resolve","buildBanner","appendChild","revokeConsent","removeItem","getStorageKey","parentNode","removeChild","handleDecision","granted","setItem","d","banner","createElement","style","cssText","text","textContent","bannerText","btnCss","accept","reject","policyUrl","link","href","rel","RateLimiter","globalWindow","toolWindows","cooldownUntil","filter","t","maxInvocationsPerMinute","cooldownSeconds","maxPerTool","pruned","reset","RETRY_KEY","Reporter","apiEndpoint","intervalId","boundBeforeUnload","onBeforeUnload","setInterval","flush","window","retryQueue","stored","sessionStorage","JSON","parse","all","fetch","method","headers","stringify","ok","Error","toStore","clearInterval","url","encodeURIComponent","blob","Blob","sendBeacon","keepalive","Dat2AI","rateLimiting","enabler","interceptor","offline","reporter","init","enableTool","getConfig","Dat2AIConfig","Dat2AIInstance","_Shield"],"mappings":"oCAEA,MAAMA,EAAS,iBAGFC,EAIX,WAAAC,CAAYC,GAAQ,GAFZC,KAAAC,OAAwB,GAG9BD,KAAKE,UAAYH,CACnB,CAEA,KAAAA,CAAMI,KAAgBC,GAChBJ,KAAKE,WACPG,QAAQN,MAAMH,EAAQO,KAAQC,EAElC,CAEA,IAAAE,CAAKH,KAAgBC,GACnBC,QAAQC,KAAKV,EAAQO,KAAQC,EAC/B,CAEA,IAAAG,CAAKJ,KAAgBC,GACnBC,QAAQE,KAAKX,EAAQO,KAAQC,EAC/B,CAEA,KAAAI,CAAML,KAAgBC,GACpBC,QAAQG,MAAMZ,EAAQO,KAAQC,EAChC,CAGA,QAAAK,CAASC,GACPV,KAAKC,OAAOU,KAAKD,GACjBV,KAAKD,MAAM,kBAAmBW,EAAME,UAAWF,EAAMG,SACvD,CAGA,SAAAC,GACE,MAAO,IAAId,KAAKC,OAClB,CAGA,WAAAc,GACEf,KAAKC,OAAS,EAChB,QCzCWe,EAKX,WAAAlB,CAAYmB,GAJJjB,KAAAkB,MAA0B,GAC1BlB,KAAAmB,SAAoC,KAI1CnB,KAAKiB,OAASA,CAChB,CAGA,MAAAG,CAAOF,GACLlB,KAAKkB,MAAQA,EACb,IAAK,MAAMG,KAAQH,EACjBlB,KAAKsB,UAAUD,GAEjBrB,KAAKuB,YACP,CAGA,OAAAC,CAAQH,GACNrB,KAAKkB,MAAMP,KAAKU,GAChBrB,KAAKsB,UAAUD,EACjB,CAGQ,SAAAC,CAAUD,GAChB,MAAMI,EAAQC,SAASC,iBAAkCN,EAAKO,cACzC,IAAjBH,EAAMI,OAKVJ,EAAMK,QAASC,GAAS/B,KAAKgC,YAAYD,EAAMV,IAJ7CrB,KAAKiB,OAAOlB,MAAM,+BAA+BsB,EAAKO,eAK1D,CAGQ,WAAAI,CAAYD,EAAuBV,GAEzC,GAAIU,EAAKE,aAAa,YACpBjC,KAAKiB,OAAOlB,MAAM,wCAAwCsB,EAAKO,oBADjE,CAYA,GAPAG,EAAKG,aAAa,WAAYb,EAAKR,UACnCkB,EAAKG,aAAa,kBAAmBb,EAAKc,iBAEtCd,EAAKe,YACPL,EAAKG,aAAa,iBAAkB,QAGlCb,EAAKgB,OACP,IAAK,MAAMC,KAASjB,EAAKgB,OAAQ,CAC/B,MAAME,EAAKR,EAAKS,cAAcF,EAAMG,eAChCF,GACFA,EAAGL,aAAa,iBAAkBI,EAAMI,YACxCH,EAAGL,aAAa,uBAAwBI,EAAMK,mBAE9C3C,KAAKiB,OAAOlB,MAAM,oBAAoBuC,EAAMG,oBAAoBpB,EAAKO,eAEzE,CAGF5B,KAAKiB,OAAOlB,MAAM,iBAAiBsB,EAAKR,gBAAgBQ,EAAKO,eArB7D,CAsBF,CAGQ,UAAAL,GACFvB,KAAKmB,UAAwC,oBAArByB,mBAE5B5C,KAAKmB,SAAW,IAAIyB,iBAAkBC,IACpC,IAAK,MAAMC,KAAYD,EACrB,IAAK,MAAME,KAAQD,EAASE,WAAY,CACtC,KAAMD,aAAgBE,aAAc,SAGpC,MAAMxB,EAAyB,SAAjBsB,EAAKG,QACf,CAACH,GACDI,MAAMC,KAAKL,EAAKpB,iBAAkC,SAEtD,IAAK,MAAMI,KAAQN,EACjB,IAAK,MAAMJ,KAAQrB,KAAKkB,MAClBa,EAAKsB,QAAQhC,EAAKO,eACpB5B,KAAKgC,YAAYD,EAAMV,EAI/B,IAIJrB,KAAKmB,SAASmC,QAAQ5B,SAAS6B,KAAM,CAAEC,WAAW,EAAMC,SAAS,IACnE,CAGA,OAAAC,GACM1D,KAAKmB,WACPnB,KAAKmB,SAASwC,aACd3D,KAAKmB,SAAW,MAElBnB,KAAKkB,MAAQ,EACf,ECrGF,MAAM0C,EAAwC,CAC5C,CAAC,UAAW,aACZ,CAAC,mBAAoB,iBACrB,CAAC,WAAY,aACb,CAAC,UAAW,aACZ,CAAC,WAAY,aACb,CAAC,kBAAmB,aACpB,CAAC,aAAc,aACf,CAAC,cAAe,aAChB,CAAC,YAAa,cAIV,SAAUC,EAAYnD,GAE1B,GAAIA,GAAS,iBAAkBA,IAAyC,IAA/BA,EAAcoD,aACrD,MAAO,CAAEC,UAAW,gBAAiBC,UAAWC,UAAUD,WAI5D,MAAME,EAAKD,UAAUD,UACrB,IAAK,MAAOG,EAASC,KAASR,EAC5B,GAAIO,EAAQE,KAAKH,GACf,MAAO,CAAEH,UAAWK,EAAMJ,UAAWE,GAIzC,MAAO,CAAEH,UAAW,UAAWC,UAAWE,EAC5C,OCnBaI,EAUX,WAAAxE,CACEyE,EACAtD,EACAuD,EACAC,GATMzE,KAAA0E,SAA0D,IAAIC,IAWpE3E,KAAKuE,QAAUA,EACfvE,KAAKiB,OAASA,EACdjB,KAAKwE,QAAUA,EACfxE,KAAKyE,YAAcA,EAEnBzE,KAAK4E,mBAAqB5E,KAAK6E,aAAaC,KAAK9E,MACjDA,KAAK+E,mBAAqB/E,KAAKgF,oBAAoBF,KAAK9E,MACxDA,KAAKiF,gBAAkBjF,KAAKkF,iBAAiBJ,KAAK9E,KACpD,CAGA,KAAAmF,GACEzD,SAAS0D,iBAAiB,SAAUpF,KAAK4E,oBAAoB,GAC7DlD,SAAS0D,iBAAiB,gBAAiBpF,KAAK+E,oBAAoB,GACpErD,SAAS0D,iBAAiB,aAAcpF,KAAKiF,iBAAiB,GAC9DjF,KAAKiB,OAAOlB,MAAM,sBACpB,CAGA,EAAAsF,CAAG3E,EAAwB4E,GACpBtF,KAAK0E,SAASa,IAAI7E,IACrBV,KAAK0E,SAASc,IAAI9E,EAAO,IAAI+E,KAE/BzF,KAAK0E,SAASgB,IAAIhF,GAAQiF,IAAIL,EAChC,CAGA,GAAAM,CAAIlF,EAAwB4E,GAC1BtF,KAAK0E,SAASgB,IAAIhF,IAAQmF,OAAOP,EACnC,CAGQ,YAAAT,CAAaiB,GACnB,MAAM/D,EAAO+D,EAAEC,OACf,IAAKhE,IAASA,EAAKE,aAAa,YAAa,OAQ7C,KAHwC,YAHtB4B,EAAYiC,GAGJ/B,WACvB,iBAAkB+B,IAAiC,IAA3BA,EAAUhC,cAEvB,OAEd,MAAMjD,EAAWkB,EAAKiE,aAAa,aAAe,UAGlD,GAAIhG,KAAKwE,SAAWxE,KAAKwE,QAAQyB,OAAOC,WAAalG,KAAKwE,QAAQ2B,aAAc,CAC9E,MAAMzF,EAAQV,KAAKoG,YAAYrE,EAAM,iBAAkB+D,GAMvD,OALApF,EAAM2F,cAAe,EACrBrG,KAAKiB,OAAOR,SAASC,GACrBV,KAAKsG,KAAK,gBAAiB5F,GAC3BV,KAAKwE,QAAQ+B,sBACbT,EAAEU,gBAEJ,CAGA,GAAIxG,KAAKyE,YAAa,CACpB,MAAMgC,EAASzG,KAAKyE,YAAYiC,WAAW7F,GAC3C,GAAe,OAAX4F,EAAiB,CACnB,MAAM/F,EAAQV,KAAKoG,YAAYrE,EAAM,eAAgB+D,GAKrD,OAJApF,EAAMiG,gBAAkBF,EACxBzG,KAAKiB,OAAOR,SAASC,GACrBV,KAAKsG,KAAK,cAAe5F,QACzBoF,EAAEU,gBAEJ,CACF,CAGA,MAAM9F,EAAQV,KAAKoG,YAAYrE,EAAM,aAAc+D,GACnDpF,EAAM2F,eAAerG,KAAKwE,SAAUxE,KAAKwE,QAAQ2B,aACjDzF,EAAMiG,gBAAkB,KACxB3G,KAAKiB,OAAOR,SAASC,GACrBV,KAAKsG,KAAK,aAAc5F,EAC1B,CAGQ,mBAAAsE,CAAoBc,GAC1B,MAAM/D,EAAO+D,EAAEC,OACVhE,GAASA,EAAKE,aAAa,aAEhCjC,KAAKiB,OAAOlB,MAAM,kBAAmBgC,EAAKiE,aAAa,YACzD,CAGQ,gBAAAd,CAAiBY,GACvB,MAAM/D,EAAO+D,EAAEC,OACf,IAAKhE,IAASA,EAAKE,aAAa,YAAa,OAE7C,MAAMvB,EAAQV,KAAKoG,YAAYrE,EAAM,SAAU+D,GAC/C9F,KAAKiB,OAAOR,SAASC,GACrBV,KAAKsG,KAAK,SAAU5F,EACtB,CAGQ,WAAA0F,CAAYrE,EAAuBnB,EAAqCgG,GAC9E,MAAM/F,EAAWkB,EAAKiE,aAAa,aAAe,UAC5Ca,EAAYhD,EAAY+C,GAGxBhF,EAAeG,EAAK+E,GACtB,IAAI/E,EAAK+E,KACT/E,EAAKiE,aAAa,QAChB,cAAcjE,EAAKiE,aAAa,YAChCjE,EAAKgF,UACH,QAAQhF,EAAKgF,UAAUC,MAAM,KAAK,KAClC,OAER,MAAO,CACLF,GAnIGG,KAAKC,MAAMC,SAAS,IAAMC,KAAKC,SAASF,SAAS,IAAIG,MAAM,EAAG,IAoIjEC,WAAW,IAAIN,MAAOO,cACtBjD,QAASvE,KAAKuE,QACd1D,WACAe,eACAhB,YACAiG,YACAR,cAAc,EACdM,gBAAiB,KAErB,CAGQ,IAAAL,CAAKmB,EAAuB/G,GAClC,MAAMgE,EAAW1E,KAAK0E,SAASgB,IAAI+B,GACnC,GAAI/C,EACF,IAAK,MAAMY,KAAWZ,EACpB,IACEY,EAAQ5E,EACV,CAAE,MAAOgH,GACP1H,KAAKiB,OAAOT,MAAM,uBAAwBkH,EAC5C,CAGN,CAGA,OAAAhE,GACEhC,SAASiG,oBAAoB,SAAU3H,KAAK4E,oBAAoB,GAChElD,SAASiG,oBAAoB,gBAAiB3H,KAAK+E,oBAAoB,GACvErD,SAASiG,oBAAoB,aAAc3H,KAAKiF,iBAAiB,GACjEjF,KAAK0E,SAASkD,QACd5H,KAAKiB,OAAOlB,MAAM,wBACpB,QCrKW8H,EAMX,WAAA/H,CAAYmG,GAHJjG,KAAA8H,SAA+B,KAC/B9H,KAAA+H,eAA2D,KAGjE/H,KAAKiG,OAASA,EACdjG,KAAKgI,WAAa/B,EAAO+B,YAXT,gBAYlB,CAGA,UAAA7B,GACE,IACE,MAAiD,YAA1C8B,aAAaC,QAAQlI,KAAKgI,WACnC,CAAE,MACA,OAAO,CACT,CACF,CAGA,cAAAzB,GAEE,OAAIvG,KAAK8H,SACA,IAAIK,QAAQC,IAAapI,KAAK+H,eAAiB,CAAEK,aAGnD,IAAID,QAAQC,IACjBpI,KAAK+H,eAAiB,CAAEK,WACxBpI,KAAK8H,SAAW9H,KAAKqI,cACrB3G,SAAS6B,KAAK+E,YAAYtI,KAAK8H,WAEnC,CAGA,aAAAS,GACE,IACEN,aAAaO,WAAWxI,KAAKgI,WAC/B,CAAE,MAAqB,CACzB,CAGA,aAAAS,GACE,OAAOzI,KAAKgI,UACd,CAGA,OAAAtE,GACM1D,KAAK8H,UAAY9H,KAAK8H,SAASY,YACjC1I,KAAK8H,SAASY,WAAWC,YAAY3I,KAAK8H,UAE5C9H,KAAK8H,SAAW,KAChB9H,KAAK+H,eAAiB,IACxB,CAEQ,cAAAa,CAAeC,GACrB,IACEZ,aAAaa,QAAQ9I,KAAKgI,WAAYa,EAAU,UAAY,SAC9D,CAAE,MAAqB,CAEnB7I,KAAK8H,UAAY9H,KAAK8H,SAASY,YACjC1I,KAAK8H,SAASY,WAAWC,YAAY3I,KAAK8H,UAE5C9H,KAAK8H,SAAW,KAEZ9H,KAAK+H,iBACP/H,KAAK+H,eAAeK,QAAQS,GAC5B7I,KAAK+H,eAAiB,KAE1B,CAEQ,WAAAM,GACN,MAAMU,EAAIrH,SACJsH,EAASD,EAAEE,cAAc,OAC/BD,EAAOlC,GA/EO,wBAgFdkC,EAAO9G,aAAa,OAAQ,UAC5B8G,EAAO9G,aAAa,aAAc,oBAClC8G,EAAOE,MAAMC,QACX,iOAMF,MAAMC,EAAOL,EAAEE,cAAc,KAC7BG,EAAKF,MAAMC,QAAU,kBACrBC,EAAKC,YAAcrJ,KAAKiG,OAAOqD,YA1Fd,qDA2FjBN,EAAOV,YAAYc,GAEnB,MAAMG,EACJ,6FAEIC,EAAST,EAAEE,cAAc,UAC/BO,EAAOH,YAAc,SACrBG,EAAOtH,aAAa,aAAc,gCAClCsH,EAAON,MAAMC,QAAUI,EACrB,2FACFC,EAAOpE,iBAAiB,QAAS,IAAMpF,KAAK4I,gBAAe,IAC3DI,EAAOV,YAAYkB,GAEnB,MAAMC,EAASV,EAAEE,cAAc,UAQ/B,GAPAQ,EAAOJ,YAAc,SACrBI,EAAOvH,aAAa,aAAc,gCAClCuH,EAAOP,MAAMC,QAAUI,EACrB,wFACFE,EAAOrE,iBAAiB,QAAS,IAAMpF,KAAK4I,gBAAe,IAC3DI,EAAOV,YAAYmB,GAEfzJ,KAAKiG,OAAOyD,UAAW,CACzB,MAAMC,EAAOZ,EAAEE,cAAc,KAC7BU,EAAKC,KAAO5J,KAAKiG,OAAOyD,UACxBC,EAAK5D,OAAS,SACd4D,EAAKE,IAAM,WACXF,EAAKN,YAAc,YACnBM,EAAKT,MAAMC,QAAU,mEACrBH,EAAOV,YAAYqB,EACrB,CAEA,OAAOX,CACT,QC3HWc,EAMX,WAAAhK,CAAYmG,GAJJjG,KAAA+J,aAAyB,GACzB/J,KAAAgK,YAAqC,IAAIrF,IACzC3E,KAAAiK,cAAgB,EAGtBjK,KAAKiG,OAASA,CAChB,CAMA,UAAAS,CAAW7F,GACT,MAAMqG,EAAMD,KAAKC,MAIjB,GAAIA,EAAMlH,KAAKiK,cAAe,MAAO,UAMrC,GAHAjK,KAAK+J,aAAe/J,KAAK+J,aAAaG,OAAOC,GAAKjD,EAAMiD,EANvC,KASbnK,KAAK+J,aAAalI,QAAU7B,KAAKiG,OAAOmE,wBAE1C,OADApK,KAAKiK,cAAgB/C,EAA4C,KAArClH,KAAKiG,OAAOoE,iBAAmB,IACpD,UAIT,GAAIrK,KAAKiG,OAAOqE,WAAY,CACrBtK,KAAKgK,YAAYzE,IAAI1E,IACxBb,KAAKgK,YAAYxE,IAAI3E,EAAU,IAEjC,MACM0J,EADavK,KAAKgK,YAAYtE,IAAI7E,GACdqJ,OAAOC,GAAKjD,EAAMiD,EApB7B,KAuBf,GAFAnK,KAAKgK,YAAYxE,IAAI3E,EAAU0J,GAE3BA,EAAO1I,QAAU7B,KAAKiG,OAAOqE,WAC/B,MAAO,UAETC,EAAO5J,KAAKuG,EACd,CAGA,OADAlH,KAAK+J,aAAapJ,KAAKuG,GAChB,IACT,CAGA,KAAAsD,GACExK,KAAK+J,aAAe,GACpB/J,KAAKgK,YAAYpC,QACjB5H,KAAKiK,cAAgB,CACvB,ECvDF,MAAMQ,EAAY,2BAKLC,EAOX,WAAA5K,CAAY6K,EAAqBpG,EAAiBtD,GAH1CjB,KAAA4K,WAAoD,KAI1D5K,KAAK2K,YAAcA,EACnB3K,KAAKuE,QAAUA,EACfvE,KAAKiB,OAASA,EACdjB,KAAK6K,kBAAoB7K,KAAK8K,eAAehG,KAAK9E,KACpD,CAGA,KAAAmF,GACEnF,KAAK4K,WAAaG,YAAY,KAAQ/K,KAAKgL,SAnBxB,KAoBnBC,OAAO7F,iBAAiB,eAAgBpF,KAAK6K,kBAC/C,CAGA,WAAMG,GACJ,MAAM/K,EAASD,KAAKiB,OAAOH,YAG3B,IAAIoK,EAAwB,GAC5B,IACE,MAAMC,EAASC,eAAelD,QAAQuC,GAClCU,IAAQD,EAAaG,KAAKC,MAAMH,GACtC,CAAE,MAAqB,CAEvB,MAAMI,EAAM,IAAIL,KAAejL,GAC/B,GAAmB,IAAfsL,EAAI1J,OAER,IAUE,WATkB2J,MAAMxL,KAAK2K,YAAc,cAAe,CACxDc,OAAQ,OACRC,QAAS,CACP,eAAgB,mBAChB,aAAc1L,KAAKuE,SAErBhB,KAAM8H,KAAKM,UAAUJ,MAGfK,GAIN,MAAM,IAAIC,MAAM,WAHhB7L,KAAKiB,OAAOF,cACZ,IAAMqK,eAAe5C,WAAWiC,EAAY,CAAE,MAAqB,CAIvE,CAAE,MAEA,MAAMqB,EAAUP,EAAIjE,YACpB,IACE8D,eAAetC,QAAQ2B,EAAWY,KAAKM,UAAUG,GACnD,CAAE,MAA2B,CAC7B9L,KAAKiB,OAAOF,aACd,CACF,CAGA,OAAA2C,GAC0B,OAApB1D,KAAK4K,aACPmB,cAAc/L,KAAK4K,YACnB5K,KAAK4K,WAAa,MAEpBK,OAAOtD,oBAAoB,eAAgB3H,KAAK6K,mBAEhD7K,KAAK8K,gBACP,CAEQ,cAAAA,GACN,MAAM7K,EAASD,KAAKiB,OAAOH,YAC3B,GAAsB,IAAlBb,EAAO4B,OAAc,OAEzB,MAAMmK,EAAMhM,KAAK2K,YAAc,uBAAyBsB,mBAAmBjM,KAAKuE,SAC1E2H,EAAO,IAAIC,KAAK,CAACd,KAAKM,UAAU1L,IAAU,CAAEmE,KAAM,qBAExD,GAAyB,oBAAdH,WAA6BA,UAAUmI,WAChDnI,UAAUmI,WAAWJ,EAAKE,QAG1B,IACEV,MAAMQ,EAAK,CAAEP,OAAQ,OAAQlI,KAAM2I,EAAMG,WAAW,GACtD,CAAE,MAA0B,CAG9BrM,KAAKiB,OAAOF,aACd,QChFWuL,EASX,WAAAxM,CAAYmG,GACVjG,KAAKiG,OAASA,EACdjG,KAAKiB,OAAS,IAAIpB,EAAOoG,EAAOlG,QAAS,GAGrCkG,EAAOzB,UACTxE,KAAKwE,QAAU,IAAIqD,EAAe5B,EAAOzB,UAIvCyB,EAAOsG,eACTvM,KAAKyE,YAAc,IAAIqF,EAAY7D,EAAOsG,eAG5CvM,KAAKwM,QAAU,IAAIxL,EAAQhB,KAAKiB,QAChCjB,KAAKyM,YAAc,IAAInI,EACrB2B,EAAO1B,QACPvE,KAAKiB,OACLjB,KAAKwE,QACLxE,KAAKyE,aAGPzE,KAAKiB,OAAOX,KAAK,yBAAyB2F,EAAO1B,WAG7C0B,EAAOuG,SAAStL,OAAOW,QACzB7B,KAAKwM,QAAQpL,OAAO6E,EAAOuG,QAAQtL,OAIrClB,KAAKyM,YAAYtH,SAGZc,EAAOyG,SAAWzG,EAAO0E,cAC5B3K,KAAK2M,SAAW,IAAIjC,EAASzE,EAAO0E,YAAa1E,EAAO1B,QAASvE,KAAKiB,QACtEjB,KAAK2M,SAASxH,QAElB,CAGA,WAAOyH,CAAK3G,GACV,OAAO,IAAIqG,EAAOrG,EACpB,CAGA,UAAA4G,CAAWxL,GACTrB,KAAKwM,QAAQhL,QAAQH,GACrBrB,KAAKiB,OAAOlB,MAAM,eAAesB,EAAKR,WACxC,CAGA,EAAAwE,CAAG3E,EAAwB4E,GACzBtF,KAAKyM,YAAYpH,GAAG3E,EAAO4E,EAC7B,CAGA,GAAAM,CAAIlF,EAAwB4E,GAC1BtF,KAAKyM,YAAY7G,IAAIlF,EAAO4E,EAC9B,CAGA,SAAAxE,GACE,OAAOd,KAAKiB,OAAOH,WACrB,CAGA,SAAAgM,GACE,MAAO,IAAK9M,KAAKiG,OACnB,CAGA,UAAAE,GACE,OAAOnG,KAAKwE,SAAS2B,eAAgB,CACvC,CAGA,OAAAzC,GACE1D,KAAK2M,UAAUjJ,UACf1D,KAAKwE,SAASd,UACd1D,KAAKwM,QAAQ9I,UACb1D,KAAKyM,YAAY/I,UACjB1D,KAAKiB,OAAOX,KAAK,YACnB,QCpFoB,oBAAX2K,QAA2BA,OAAe8B,eAClD9B,OAAe+B,eAAiBC,EAAQL,KAAM3B,OAAe8B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ConsentConfig } from './types';
|
|
2
|
+
/** Manages user consent for AI agent interactions. */
|
|
3
|
+
export declare class ConsentManager {
|
|
4
|
+
readonly config: ConsentConfig;
|
|
5
|
+
private storageKey;
|
|
6
|
+
private bannerEl;
|
|
7
|
+
private pendingPromise;
|
|
8
|
+
constructor(config: ConsentConfig);
|
|
9
|
+
/** Returns true if user has previously granted consent. */
|
|
10
|
+
hasConsent(): boolean;
|
|
11
|
+
/** Show consent banner. Resolves to true (accepted) or false (rejected). */
|
|
12
|
+
requestConsent(): Promise<boolean>;
|
|
13
|
+
/** Revoke consent and remove from localStorage. */
|
|
14
|
+
revokeConsent(): void;
|
|
15
|
+
/** Get the localStorage key used. */
|
|
16
|
+
getStorageKey(): string;
|
|
17
|
+
/** Remove banner DOM if present. */
|
|
18
|
+
destroy(): void;
|
|
19
|
+
private handleDecision;
|
|
20
|
+
private buildBanner;
|
|
21
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AgentInfo } from './types';
|
|
2
|
+
/** Detect agent type from a SubmitEvent and context. */
|
|
3
|
+
export declare function detectAgent(event?: Event): AgentInfo;
|
|
4
|
+
/**
|
|
5
|
+
* Check if an interaction shows automated timing patterns.
|
|
6
|
+
* Returns true if the time between interactions is inhumanly fast (< 100ms).
|
|
7
|
+
*/
|
|
8
|
+
export declare function isAutomatedTiming(timestamps: number[]): boolean;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ToolDefinition } from './types';
|
|
2
|
+
import type { Logger } from './logger';
|
|
3
|
+
/** Injects WebMCP attributes into HTML forms. */
|
|
4
|
+
export declare class Enabler {
|
|
5
|
+
private tools;
|
|
6
|
+
private observer;
|
|
7
|
+
private logger;
|
|
8
|
+
constructor(logger: Logger);
|
|
9
|
+
/** Enable tools by injecting WebMCP attributes into matching forms. */
|
|
10
|
+
enable(tools: ToolDefinition[]): void;
|
|
11
|
+
/** Add and apply a single tool definition. */
|
|
12
|
+
addTool(tool: ToolDefinition): void;
|
|
13
|
+
/** Apply WebMCP attributes to a form matching the tool definition. */
|
|
14
|
+
private applyTool;
|
|
15
|
+
/** Inject attributes into a single form element. */
|
|
16
|
+
private applyToForm;
|
|
17
|
+
/** Watch for dynamically added forms (SPAs, lazy-loaded content). */
|
|
18
|
+
private observeDom;
|
|
19
|
+
/** Disconnect the MutationObserver and clean up. */
|
|
20
|
+
destroy(): void;
|
|
21
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { Dat2AI } from './shield';
|
|
2
|
+
export { ConsentManager } from './consent';
|
|
3
|
+
export { RateLimiter } from './rate-limiter';
|
|
4
|
+
export { Reporter } from './reporter';
|
|
5
|
+
export type { ShieldConfig, EnablerConfig, ToolDefinition, FieldMapping, ConsentConfig, RateLimitConfig, ShieldEvent, ShieldEventName, ShieldEventHandler, AgentInfo, AgentType, EventType, } from './types';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ShieldEventName, ShieldEventHandler } from './types';
|
|
2
|
+
import type { Logger } from './logger';
|
|
3
|
+
import type { ConsentManager } from './consent';
|
|
4
|
+
import type { RateLimiter } from './rate-limiter';
|
|
5
|
+
/** Intercepts agent invocations on WebMCP-enabled forms. */
|
|
6
|
+
export declare class Interceptor {
|
|
7
|
+
private siteKey;
|
|
8
|
+
private logger;
|
|
9
|
+
private consent?;
|
|
10
|
+
private rateLimiter?;
|
|
11
|
+
private handlers;
|
|
12
|
+
private boundSubmitHandler;
|
|
13
|
+
private boundToolActivated;
|
|
14
|
+
private boundToolCancel;
|
|
15
|
+
constructor(siteKey: string, logger: Logger, consent?: ConsentManager, rateLimiter?: RateLimiter);
|
|
16
|
+
/** Start listening for agent invocations on the document. */
|
|
17
|
+
start(): void;
|
|
18
|
+
/** Register an event handler. */
|
|
19
|
+
on(event: ShieldEventName, handler: ShieldEventHandler): void;
|
|
20
|
+
/** Unregister an event handler. */
|
|
21
|
+
off(event: ShieldEventName, handler: ShieldEventHandler): void;
|
|
22
|
+
/** Handle form submit events. */
|
|
23
|
+
private handleSubmit;
|
|
24
|
+
/** Handle toolactivated events (WebMCP standard). */
|
|
25
|
+
private handleToolActivated;
|
|
26
|
+
/** Handle toolcancel events (WebMCP standard). */
|
|
27
|
+
private handleToolCancel;
|
|
28
|
+
/** Create a ShieldEvent from a form interaction. */
|
|
29
|
+
private createEvent;
|
|
30
|
+
/** Emit an event to registered handlers. */
|
|
31
|
+
private emit;
|
|
32
|
+
/** Stop listening and clean up. */
|
|
33
|
+
destroy(): void;
|
|
34
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ShieldEvent } from './types';
|
|
2
|
+
/** Internal logger with in-memory event store. */
|
|
3
|
+
export declare class Logger {
|
|
4
|
+
private debugMode;
|
|
5
|
+
private events;
|
|
6
|
+
constructor(debug?: boolean);
|
|
7
|
+
debug(msg: string, ...args: unknown[]): void;
|
|
8
|
+
info(msg: string, ...args: unknown[]): void;
|
|
9
|
+
warn(msg: string, ...args: unknown[]): void;
|
|
10
|
+
error(msg: string, ...args: unknown[]): void;
|
|
11
|
+
/** Store an event in memory for batch reporting. */
|
|
12
|
+
addEvent(event: ShieldEvent): void;
|
|
13
|
+
/** Get all stored events. */
|
|
14
|
+
getEvents(): ShieldEvent[];
|
|
15
|
+
/** Clear stored events (after successful batch send). */
|
|
16
|
+
clearEvents(): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { RateLimitConfig } from './types';
|
|
2
|
+
/** In-memory sliding window rate limiter for agent invocations. */
|
|
3
|
+
export declare class RateLimiter {
|
|
4
|
+
private config;
|
|
5
|
+
private globalWindow;
|
|
6
|
+
private toolWindows;
|
|
7
|
+
private cooldownUntil;
|
|
8
|
+
constructor(config: RateLimitConfig);
|
|
9
|
+
/**
|
|
10
|
+
* Check if an invocation is allowed for the given tool.
|
|
11
|
+
* Records the timestamp if allowed.
|
|
12
|
+
*/
|
|
13
|
+
checkLimit(toolName: string): 'ok' | 'limited' | 'blocked';
|
|
14
|
+
/** Clear all tracked invocations and cooldown. */
|
|
15
|
+
reset(): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Logger } from './logger';
|
|
2
|
+
/** Batches ShieldEvents and sends them to the dashboard API. */
|
|
3
|
+
export declare class Reporter {
|
|
4
|
+
private apiEndpoint;
|
|
5
|
+
private siteKey;
|
|
6
|
+
private logger;
|
|
7
|
+
private intervalId;
|
|
8
|
+
private boundBeforeUnload;
|
|
9
|
+
constructor(apiEndpoint: string, siteKey: string, logger: Logger);
|
|
10
|
+
/** Start the periodic flush timer and beforeunload listener. */
|
|
11
|
+
start(): void;
|
|
12
|
+
/** Flush pending events to the dashboard API. */
|
|
13
|
+
flush(): Promise<void>;
|
|
14
|
+
/** Stop the timer, flush remaining, clean up. */
|
|
15
|
+
destroy(): void;
|
|
16
|
+
private onBeforeUnload;
|
|
17
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ShieldConfig, ShieldEvent, ShieldEventName, ShieldEventHandler, ToolDefinition } from './types';
|
|
2
|
+
/** dat2ai — AI Agent Governance for the Web. */
|
|
3
|
+
export declare class Dat2AI {
|
|
4
|
+
private config;
|
|
5
|
+
private logger;
|
|
6
|
+
private enabler;
|
|
7
|
+
private interceptor;
|
|
8
|
+
private consent?;
|
|
9
|
+
private rateLimiter?;
|
|
10
|
+
private reporter?;
|
|
11
|
+
constructor(config: ShieldConfig);
|
|
12
|
+
/** Factory method for script tag / IIFE usage. */
|
|
13
|
+
static init(config: ShieldConfig): Dat2AI;
|
|
14
|
+
/** Add and enable a tool dynamically. */
|
|
15
|
+
enableTool(tool: ToolDefinition): void;
|
|
16
|
+
/** Register an event handler. */
|
|
17
|
+
on(event: ShieldEventName, handler: ShieldEventHandler): void;
|
|
18
|
+
/** Unregister an event handler. */
|
|
19
|
+
off(event: ShieldEventName, handler: ShieldEventHandler): void;
|
|
20
|
+
/** Get all recorded events. */
|
|
21
|
+
getEvents(): ShieldEvent[];
|
|
22
|
+
/** Get the current configuration. */
|
|
23
|
+
getConfig(): ShieldConfig;
|
|
24
|
+
/** Check if consent has been granted. */
|
|
25
|
+
hasConsent(): boolean;
|
|
26
|
+
/** Tear down all modules and clean up. */
|
|
27
|
+
destroy(): void;
|
|
28
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/** Configuration for dat2ai initialization. */
|
|
2
|
+
export interface ShieldConfig {
|
|
3
|
+
/** Unique site identifier from the dashboard. */
|
|
4
|
+
siteKey: string;
|
|
5
|
+
/** Dashboard SaaS API endpoint. */
|
|
6
|
+
apiEndpoint?: string;
|
|
7
|
+
/** Enabler configuration for tool injection. */
|
|
8
|
+
enabler?: EnablerConfig;
|
|
9
|
+
/** Consent management configuration. */
|
|
10
|
+
consent?: ConsentConfig;
|
|
11
|
+
/** Rate limiting configuration. */
|
|
12
|
+
rateLimiting?: RateLimitConfig;
|
|
13
|
+
/** Offline mode — log locally only, don't send to dashboard. */
|
|
14
|
+
offline?: boolean;
|
|
15
|
+
/** Enable debug logging to console. */
|
|
16
|
+
debug?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Configuration for the enabler module. */
|
|
19
|
+
export interface EnablerConfig {
|
|
20
|
+
/** Tool definitions to inject into forms. */
|
|
21
|
+
tools: ToolDefinition[];
|
|
22
|
+
/** Auto-detect forms without WebMCP attributes and report them. */
|
|
23
|
+
autoDetect?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Definition of a tool mapped to an HTML form. */
|
|
26
|
+
export interface ToolDefinition {
|
|
27
|
+
/** CSS selector for the target form element. */
|
|
28
|
+
formSelector: string;
|
|
29
|
+
/** Value for the `toolname` attribute. */
|
|
30
|
+
toolName: string;
|
|
31
|
+
/** Value for the `tooldescription` attribute. */
|
|
32
|
+
toolDescription: string;
|
|
33
|
+
/** Whether agents can auto-submit this form. */
|
|
34
|
+
autoSubmit?: boolean;
|
|
35
|
+
/** Field mappings for tool parameters. */
|
|
36
|
+
fields?: FieldMapping[];
|
|
37
|
+
}
|
|
38
|
+
/** Mapping of a form field to a tool parameter. */
|
|
39
|
+
export interface FieldMapping {
|
|
40
|
+
/** CSS selector for the form field. */
|
|
41
|
+
fieldSelector: string;
|
|
42
|
+
/** Value for the `toolparamtitle` attribute. */
|
|
43
|
+
paramTitle: string;
|
|
44
|
+
/** Value for the `toolparamdescription` attribute. */
|
|
45
|
+
paramDescription: string;
|
|
46
|
+
}
|
|
47
|
+
/** Consent management configuration. */
|
|
48
|
+
export interface ConsentConfig {
|
|
49
|
+
/** Whether consent is required before allowing agent invocations. */
|
|
50
|
+
required: boolean;
|
|
51
|
+
/** Custom text for the consent banner. */
|
|
52
|
+
bannerText?: string;
|
|
53
|
+
/** URL to the agent interaction policy. */
|
|
54
|
+
policyUrl?: string;
|
|
55
|
+
/** localStorage key for storing consent state. */
|
|
56
|
+
storageKey?: string;
|
|
57
|
+
}
|
|
58
|
+
/** Rate limiting configuration. */
|
|
59
|
+
export interface RateLimitConfig {
|
|
60
|
+
/** Global max invocations per minute. */
|
|
61
|
+
maxInvocationsPerMinute: number;
|
|
62
|
+
/** Max invocations per individual tool per minute. */
|
|
63
|
+
maxPerTool?: number;
|
|
64
|
+
/** Cooldown in seconds after exceeding the limit. */
|
|
65
|
+
cooldownSeconds?: number;
|
|
66
|
+
}
|
|
67
|
+
/** Type of AI agent detected. */
|
|
68
|
+
export type AgentType = 'browser_agent' | 'extension' | 'automated' | 'unknown';
|
|
69
|
+
/** Type of shield event. */
|
|
70
|
+
export type EventType = 'invocation' | 'cancel' | 'rate_limited' | 'consent_given' | 'consent_denied';
|
|
71
|
+
/** Agent information detected during an invocation. */
|
|
72
|
+
export interface AgentInfo {
|
|
73
|
+
/** Raw user-agent string if available. */
|
|
74
|
+
userAgent?: string;
|
|
75
|
+
/** Classified agent type. */
|
|
76
|
+
agentType: AgentType;
|
|
77
|
+
}
|
|
78
|
+
/** Event generated by dat2ai when an agent interacts with a form. */
|
|
79
|
+
export interface ShieldEvent {
|
|
80
|
+
/** Unique event identifier. */
|
|
81
|
+
id: string;
|
|
82
|
+
/** ISO 8601 timestamp. */
|
|
83
|
+
timestamp: string;
|
|
84
|
+
/** Site key this event belongs to. */
|
|
85
|
+
siteKey: string;
|
|
86
|
+
/** Name of the tool invoked. */
|
|
87
|
+
toolName: string;
|
|
88
|
+
/** CSS selector of the form. */
|
|
89
|
+
formSelector: string;
|
|
90
|
+
/** Type of event. */
|
|
91
|
+
eventType: EventType;
|
|
92
|
+
/** Detected agent information. */
|
|
93
|
+
agentInfo: AgentInfo;
|
|
94
|
+
/** Form field data (only captured if consent allows and field is not sensitive). */
|
|
95
|
+
fieldData?: Record<string, string>;
|
|
96
|
+
/** Whether user consent was given. */
|
|
97
|
+
consentGiven: boolean;
|
|
98
|
+
/** Rate limit status at time of event. */
|
|
99
|
+
rateLimitStatus: 'ok' | 'limited' | 'blocked';
|
|
100
|
+
/** Additional metadata. */
|
|
101
|
+
metadata?: Record<string, unknown>;
|
|
102
|
+
}
|
|
103
|
+
/** Shield event names that can be listened to. */
|
|
104
|
+
export type ShieldEventName = 'invocation' | 'cancel' | 'rateLimited' | 'consentGiven' | 'consentDenied' | 'error';
|
|
105
|
+
/** Callback handler for shield events. */
|
|
106
|
+
export type ShieldEventHandler = (event: ShieldEvent) => void;
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "dat2ai",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "dat2ai - AI Agent Governance for the Web",
|
|
6
|
+
"main": "dist/index.umd.js",
|
|
7
|
+
"module": "dist/index.esm.js",
|
|
8
|
+
"browser": "dist/dat2ai.min.js",
|
|
9
|
+
"types": "dist/types/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"import": "./dist/index.esm.js",
|
|
16
|
+
"require": "./dist/index.umd.js",
|
|
17
|
+
"types": "./dist/types/index.d.ts"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "node ../../node_modules/rollup/dist/bin/rollup -c",
|
|
22
|
+
"test": "vitest run",
|
|
23
|
+
"test:watch": "vitest"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@rollup/plugin-terser": "^0.4.4",
|
|
27
|
+
"@rollup/plugin-typescript": "^12.1.0",
|
|
28
|
+
"jsdom": "^25.0.0",
|
|
29
|
+
"rollup": "^4.28.0",
|
|
30
|
+
"tslib": "^2.8.0",
|
|
31
|
+
"typescript": "^5.7.0",
|
|
32
|
+
"vitest": "^2.1.0"
|
|
33
|
+
},
|
|
34
|
+
"sideEffects": false,
|
|
35
|
+
"license": "MIT"
|
|
36
|
+
}
|