Guia NPM / SDK
Instala dat2ai como paquete npm para control total sobre configuracion, manejo de eventos y soporte TypeScript en tu aplicacion JavaScript.
Instalacion
Instala el paquete dat2ai desde npm:
npm install dat2ai
O con Yarn:
yarn add dat2ai
Configuracion Basica
Importa e inicializa dat2ai con tu clave de sitio. La funcion init devuelve una instancia shield que puedes usar para escuchar eventos y gestionar el ciclo de vida.
import { Dat2AI } from 'dat2ai';
const shield = Dat2AI.init({
siteKey: 'YOUR_SITE_KEY',
apiEndpoint: 'https://dat2ai.com',
});Reemplaza YOUR_SITE_KEY con la clave de tu panel de dat2ai (Sitios > [Tu Sitio] > Clave de Sitio).
Opciones de Configuracion
El objeto ShieldConfig acepta las siguientes opciones al llamar a Dat2AI.init():
siteKeyrequeridostringTu clave de sitio del panel de dat2ai. Es una clave publica (como una publishable key de Stripe), segura para incluir en codigo del lado del cliente.
apiEndpointstringLa URL del endpoint API para reportar eventos. Por defecto https://dat2ai.com. Solo cambialo si tienes hosting propio.
captureFieldDatabooleanCuando es true, los valores de campos de formulario se capturan y envian con los eventos. Los datos se encriptan con AES-256-GCM antes de almacenarse. Los campos sensibles siempre se excluyen.
debugbooleanActiva logging detallado en consola para desarrollo. Muestra estado de inicializacion, deteccion de formularios y despacho de eventos. Desactivar en produccion.
offlinebooleanCuando es true, desactiva todo el reporte a la API. Los eventos aun se emiten localmente via la API de listeners. Util para desarrollo y pruebas locales.
Configuracion de Tools
Define que formularios de tu pagina deben exponerse como tools WebMCP para agentes de IA. Cada tool mapea un formulario a una accion nombrada con parametros tipados.
const shield = Dat2AI.init({
siteKey: 'YOUR_SITE_KEY',
enabler: {
tools: [
{
formSelector: '#contact-form',
toolName: 'submit_contact_form',
toolDescription: 'Submit a contact form with name, email, and message',
autoSubmit: true,
fields: [
{
selector: '#name',
paramTitle: 'full_name',
paramDescription: 'The full name of the person'
},
{
selector: '#email',
paramTitle: 'email_address',
paramDescription: 'A valid email address'
},
{
selector: '#message',
paramTitle: 'message',
paramDescription: 'The message body'
}
]
}
]
}
});Si un formulario ya tiene atributos HTML toolname y tooldescription configurados manualmente, dat2ai no los sobreescribira. La configuracion manual tiene prioridad.
Configuracion de Consentimiento
Requiere consentimiento del usuario antes de que los agentes de IA interactuen con tus formularios. Cuando esta activo, se muestra un banner de consentimiento y la decision del usuario se persiste en localStorage.
const shield = Dat2AI.init({
siteKey: 'YOUR_SITE_KEY',
consent: {
required: true,
bannerText: 'This site uses AI agents that may interact with forms on your behalf. Do you consent?',
policyUrl: 'https://example.com/ai-policy',
storageKey: 'dat2ai_consent'
}
});La decision de consentimiento se almacena en localStorage bajo la storageKey configurada. Los usuarios pueden revocar el consentimiento limpiando su almacenamiento del navegador o a traves de tu pagina de ajustes de privacidad.
Rate Limiting
Configura rate limiting del lado del cliente para prevenir abuso. Estos limites se aplican localmente ademas de cualquier limite del servidor configurado en tu panel.
const shield = Dat2AI.init({
siteKey: 'YOUR_SITE_KEY',
rateLimiting: {
maxInvocationsPerMinute: 10,
maxPerTool: {
'submit_contact_form': 3,
'search_products': 20
},
cooldownSeconds: 60
}
});Los limites del lado del cliente usan un algoritmo de ventana deslizante. Cuando se alcanza un limite, las invocaciones siguientes se bloquean y se emite un evento rate_limited. Los limites del servidor tambien se aplican independientemente.
Listeners de Eventos
Suscribete a eventos del shield para logging personalizado, analiticas o feedback de UI. La API de listeners funciona incluso en modo offline.
const shield = Dat2AI.init({ siteKey: 'YOUR_SITE_KEY' });
// Listen for all events
shield.on('event', (event) => {
console.log('Event:', event.type, event.toolName);
});
// Listen for specific event types
shield.on('invocation', (event) => {
console.log('Tool invoked:', event.toolName, 'by', event.agentType);
});
shield.on('consent', (event) => {
console.log('Consent decision:', event.decision);
});
shield.on('rate_limited', (event) => {
console.log('Rate limited:', event.toolName);
});Manejo de Limites del Servidor
Maneja rate limits y limites de plan del servidor con el callback onServerLimit. Se dispara cuando la API de dat2ai responde con estado 429 (rate limit) o 402 (limite de plan).
const shield = Dat2AI.init({
siteKey: 'YOUR_SITE_KEY',
onServerLimit: (info) => {
if (info.type === 'rate_limit') {
console.warn('Rate limited by server. Retry after:', info.retryAfter);
}
if (info.type === 'plan_limit') {
console.warn('Plan limit reached:', info.message);
// Show upgrade prompt to site owner
}
}
});Tipos de Limite
rate_limit— Demasiadas solicitudes en la ventana de tiempo actual. El campo retryAfter indica cuantos segundos esperar.plan_limit— El sitio ha excedido la cuota mensual de eventos de su plan. Actualiza el plan en el panel para reanudar la recoleccion de eventos.
Soporte TypeScript
dat2ai incluye declaraciones TypeScript completas. Todos los objetos de configuracion, tipos de eventos y la instancia shield estan completamente tipados. No se necesita paquete @types.
import { Dat2AI, ShieldConfig, ShieldEvent } from 'dat2ai';
import type { ToolConfig, ConsentConfig, RateLimitConfig } from 'dat2ai';
const config: ShieldConfig = {
siteKey: 'YOUR_SITE_KEY',
debug: true,
};
const shield = Dat2AI.init(config);
shield.on('event', (event: ShieldEvent) => {
console.log(event.type, event.toolName);
});Ejemplos de Frameworks
React
Inicializa dat2ai dentro de un hook useEffect y limpia al desmontar para evitar fugas de memoria en aplicaciones de una sola pagina.
import { useEffect } from 'react';
import { Dat2AI } from 'dat2ai';
function App() {
useEffect(() => {
const shield = Dat2AI.init({
siteKey: 'YOUR_SITE_KEY',
});
return () => {
shield.destroy();
};
}, []);
return <div>{/* your app */}</div>;
}Vue
Usa los hooks de ciclo de vida onMounted y onUnmounted para gestionar la instancia del shield de dat2ai en Vue 3 Composition API.
<script setup>
import { onMounted, onUnmounted } from 'vue';
import { Dat2AI } from 'dat2ai';
let shield;
onMounted(() => {
shield = Dat2AI.init({
siteKey: 'YOUR_SITE_KEY',
});
});
onUnmounted(() => {
shield?.destroy();
});
</script>