# StyloBot Release Series: Behaviour-Aware TypeScript UI

*La detección del boto no debe detenerse a permitir/block. Este post muestra cómo el resultado de la clasificación de StyloBotM SK2 se convierte en la lógica de aplicación en TypeScript : mediador de servidor para Express y Fastify M SK4 ayudantes de plantilla para las barreras de manutención*

[<img src="/articleimages/stylobot-logo.svg" alt="StyloBot" width="120" />](https://www.stylobot.net)

> **El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `@stylobot/core` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `@stylobot/node` Los paquetes npm serán publicados en breve.** Los fragmentos siguientes describen la superficie que expondrán.

> **StyloBot Release Series**
> 
> 1. [**El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.**](/blog/stylobot-fingerprint): por qué StyloBot modela a los clientes de forma behavioural
> 2. [**El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la protección de los derechos humanos y las libertades fundamentales de todos los trabajadores migratorios y de sus familiares.**](/blog/behaviour-aware-ux): el servidor-la superficie entregada para las aplicaciones .NET
> 3. [**El Comité recomienda al Estado Parte que incluya en su próximo informe periódico datos desglosados por sexo, edad y origen étnico sobre las medidas adoptadas para eliminar la discriminación contra la mujer.**](/blog/stylobot-release-reliability): la disciplina de fiabilidad que mantiene el motor aburrido en la producción
> 4. **El Grupo de Trabajo tal vez desee tomar nota del informe del Secretario General sobre la aplicación de las recomendaciones contenidas en el documento A/CN.9/WG.VI/WP.39, que figura a continuación:**El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
> 5. [**El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.**](/blog/sidecar-architecture): cómo se conecta el motor de detección a las pilas NET que no sean -.
> 6. [**Por consiguiente, el Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo.**](/blog/stylobot-release-learning)El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
> 7. [**En el párrafo 6 de su resolución 57/270 B, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación del Programa de Acción para prevenir, combatir y eliminar el tráfico ilícito de armas pequeñas y ligeras en todos sus aspectos.**](/blog/stylobot-release-nondeterministic-testing): la disciplina de verificación : un fichero BDF conduce a regresiónM SK2 carga, y calibración
> 8. [**StyloExtract - un programa local de aprendizaje HTML para convertir Markdown**](/blog/stylobot-release-styloextract): el HTMLM SK1Layer de marcaje que se combina con el detector, la walker bug lucidVIEW capturada , y el circuito dogfood que lo hizo honesto

StyloBot' su motor de detección está escrito en ASPM SK1NET Core: un marco de alto rendimientoMNK3 con excelentes primitivos asincosMRK4 subMMK5millisecondes calientesMEK6 latencia de rutas , y veinte años de pedigree de producción detrás de élMSC8 El TypeScript SDK es la superficie que lleva el motorMK9 su salida al NodeMKK10 aplicaciones js y navegadores sin necesidad de saber nada sobre lo que ocurrió debajo deMZK11 MGK12La latencia del camino calienteMTK13 viene del sistema de aprendizaje adaptativo cubierto en [Por consiguiente, el Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo.](/blog/stylobot-release-learning): una vez que se ha visto una huella de dedo con suficiente confianza , el archivo del veredicto salta del paquete completo del detector y responde en microsegundos .)

<!--category-- TypeScript, Node.js, StyloBot, Bot Detection, Security -->
<datetime class="hidden">2026-06-01T10:30</datetime>

# El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

La mayoría de la detección del robot disponible en el ecosistema de TypeScript le da una de las dos cosas: una huella del navegador que te dice si *El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.* looks automated, or a regex over the UserM SK1Agent string that catches only the bots that announce themselves.

No es útil en la capa de aplicación.

[El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.](https://github.com/fingerprintjs/BotD) running in the browser and has no view of request headers, Fingerprints TLSMSC1 Session behaviour, or IP reputationM SK3 Un Chromium sin cabeza y un Googlebot parecen idénticos a élMST4 Paquetes de compatibilidad UA puros Mst5`is-bot`, `isbot`) capturar sólo lo que opta para ser capturadoM SK1 Redacción-Productos de la capa (Mantenimiento del bot CloudflareM Sk4DataDomeM sk5 bloquear en el borde pero no poder personalizarlo en la capa de aplicaciónM k6 Aprender que una petición fue bloqueadaM sk7 nunca que una solicitud que llegó a su aplicación tenía una Sk8 probabilidad de bot y una banda de riesgo medioM Sk9 por tanto, su página de facturación podría haber mostrado un paso de fricción y sus análisis podrían haberlo excluidoM sc10 todo sin código de errorMsc11

Lo que StyloBot le da a su aplicación TypeScript es un veredicto: un resultado escrito con una puntuación de probabilidad continua del botM SK1 una clasificación (`AiBot`, `Scraper`, `GoodBot`, `MaliciousBot`El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Este artículo pasa por una muestra de storefront y muestra cómo ese veredicto se convierte en el comportamiento de la aplicación en cada capa: server middleware , template helpers, and browser componentsM SK3

[TOC]

# El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Antes de nada, esto es lo que llega:

```ts
// @stylobot/core
interface Verdict {
  isBot: boolean;
  botProbability: number;        // 0.0–1.0 - not binary, a continuous score
  confidence: number;            // certainty in that score
  botType: BotType | null;       // 'AiBot' | 'Scraper' | 'GoodBot' | 'MaliciousBot' | ...
  botName: string | null;        // 'GPTBot', 'Googlebot', 'curl/8.9.1', ...
  riskBand: RiskBand;            // 'VeryLow' | 'Low' | 'Elevated' | 'Medium' | 'High' | 'VeryHigh'
  recommendedAction: RecommendedAction;  // 'Allow' | 'Throttle' | 'Challenge' | 'Block'
  threatScore: number;           // elevated when CVE probes or credential stuffing detected
  threatBand: ThreatBand;        // 'None' | 'Low' | 'Elevated' | 'High' | 'Critical'
}
```

El Comité recomienda al Estado Parte que incluya en su próximo informe periódico información detallada sobre la situación de los derechos humanos y las libertades fundamentales de todos los trabajadores migratorios y de sus familiares. `Medium` . Una API puede excluir el riesgo en lugar de bloquearlo `AiBot` La Comisión Consultiva en Asuntos Administrativos y de Presupuesto examinó el proyecto de presupuesto por programas para el bienio 2002-2003 (A/60/6 (Sect. `Elevated` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `Low` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

El Comité recomienda al Estado Parte que incluya en su próximo informe periódico datos estadísticos desglosados por sexo, edad y origen étnico. `VeryLow`, `Low`, `Elevated`, `Medium`, `High`, `VeryHigh`, `Verified`.

# El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la protección de los derechos humanos y las libertades fundamentales, incluidos los derechos económicos, sociales y culturales.

```bash
npm install @stylobot/core @stylobot/node

# only needed for grpc mode
npm install @grpc/grpc-js @grpc/proto-loader
```

`@stylobot/core` tiene nueve dependencias de tiempo de ejecución. Conta con las definiciones de tipo, el cliente RESTM SK2 el parador de encabezamientosMska3 y M Ska4optionalmenteM ska5 el client gRPCMske6 Funciona en NodeMSKA7 DenoMskai8 y Bun sin modificaciónMsai9

`@stylobot/node` proporciona Express middleware, un plugin Fastify, utilidades de ayuda para plantillasM SK2 y el injetor de verdicto . depende de `@stylobot/core` y nada más en tiempo de ejecución.

# La superficie del servidor

## Como el veredicto llega a su medioware

El medioware tiene tres modos. Todos los tres producen el mismo `req.stylobot` forma. El que usted usa depende de dónde se ejecuta la detección de su infraestructura

```mermaid
graph LR
    classDef input fill:none,stroke:#3b82f6,stroke-width:2px
    classDef good fill:none,stroke:#22c55e,stroke-width:2px
    classDef async fill:none,stroke:#a855f7,stroke-width:2px

    subgraph H ["headers mode - zero added latency"]
        GW[Gateway / Caddy / YARP]:::input -->|"X-StyloBot-* headers"| A[Express / Fastify]:::good
    end

    subgraph G ["grpc mode - HTTP/2, no JSON overhead"]
        B[Express / Fastify]:::good -->|"gRPC Detect RPC"| SC[StyloBot Sidecar :5090]:::async
    end

    subgraph R ["api mode - REST, full signal set"]
        C[Express / Fastify]:::good -->|"POST /api/v1/detect"| SC2[StyloBot Sidecar :5091]:::async
    end
```

**`headers` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.**: la detección se llevó a cabo en dirección superior en la puerta ; el medioware lee los encabezamientos inyectados sin llamada de red МSK2 Este es el modelo de producción cuando una puerta Caddy o YARP se encuentra delante de ella

**`grpc` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.**: el middleware llama directamente al sidecar a través de HTTP/2. La menor latencia , no es necesario JSON overhead `@grpc/grpc-js`. Los detalles de la interfaz gRPC y del despliegue de la autopista lateral se encuentran en el [Artículo sobre la arquitectura de la autopista lateral](/blog/sidecar-architecture).

**`api` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.**El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso. `POST /api/v1/detect` a través de HTTP/1.1. También regresa `reasons` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `signals` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

El medioware siempre falla a abrir. Si el coche lateral es inadecuado o no se puede llegar a él, `req.stylobot` se ajusta a un verdicto vacío permisivo y la solicitud continúa.

## El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

**El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.**

```ts
import express from 'express';
import { styloBotMiddleware } from '@stylobot/node';

const app = express();
app.use(styloBotMiddleware({ mode: 'headers' }));
// or:
app.use(styloBotMiddleware({ mode: 'grpc', endpoint: 'localhost:5090', timeout: 100 }));
```

**El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.**

```ts
import Fastify from 'fastify';
import { styloBotPlugin } from '@stylobot/node';

const fastify = Fastify();
await fastify.register(styloBotPlugin, { mode: 'headers' });
```

Add a type declaration if you want typed access on Fastify requests:

```ts
// types.d.ts
import type { StyloBotResult } from '@stylobot/node';
declare module 'fastify' {
  interface FastifyRequest { stylobot: StyloBotResult; }
}
```

# En el párrafo 2 de la resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación del Programa de Acción para prevenir, combatir y eliminar el tráfico ilícito de armas pequeñas y ligeras en todos sus aspectos.

En el párrafo 2 de la parte dispositiva del proyecto de resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo noveno período de sesiones un informe sobre los progresos realizados en la aplicación de las recomendaciones formuladas por la Comisión Consultiva en Asuntos Administrativos y de Presupuesto. [El artículo ASP.NET](/blog/behaviour-aware-ux), página de productoM SK1 facturación, entrada en la página de correos electrónicos , boletín de noticiasMST4 pero en TypeScriptMSC5 El resultado de detección es el mismoMSSK6 lo que cambia es cómo la superficie lo exponeMSP7

## página 1: La página del producto

Los escaneadores de precios comienzan aquí. quieren los nombres de productos, los precios , y niveles de existenciasM SK3 quieren que el catálogo sea indexable por los motores de búsqueda y útil para los seres humanos sin entregar las señales comerciales a la recolección sistemáticaMSC4

*El Grupo de Trabajo tal vez desee tomar nota del informe del Secretario General sobre la aplicación de las recomendaciones contenidas en el párrafo 6 supra. `/products/:id`. No se ve ningún código de descuentoM SK1 no se agrega-a -cart buttonMSC4 y no hay señal de compra válida que actúe sobreMST5*

La Comisión Consultiva en Asuntos Administrativos y de Presupuesto recomienda a la Asamblea General que apruebe el siguiente proyecto de resolución:

```ts
app.get('/products/:id', (req, res) => {
  const { verdict } = req.stylobot;
  const product = getProduct(req.params.id);

  res.render('product', {
    product,
    sbVerdict: verdict,
    showDiscount:   verdict.riskBand === 'VeryLow' || verdict.riskBand === 'Low',
    showBuyButton:  !verdict.isBot,
    showCartWarning: verdict.recommendedAction === 'Challenge',
    isSearchBot:    verdict.botType === 'SearchEngine' || verdict.botType === 'VerifiedBot',
  });
});
```

La plantilla (Handlebars):

```handlebars
{{! verified crawlers get structured metadata instead of commercial UI }}
{{#if isSearchBot}}
  <meta name="description" content="{{product.name}} -{{product.category}}." />
  <p>{{product.description}}</p>
{{else}}

  {{! discount only for low-risk human visitors }}
  {{#if showDiscount}}
    <div class="alert alert-success">
      Member price: use code <strong>LOYAL10</strong> for 10% off.
    </div>
  {{/if}}

  {{! add-to-cart only for non-bot traffic }}
  {{#if showBuyButton}}
    <form method="post" action="/cart/add">
      <input type="hidden" name="productId" value="{{product.id}}" />
      {{#if showCartWarning}}
        <p class="text-warning">Additional verification may be required at checkout.</p>
      {{/if}}
      <button type="submit" class="btn btn-primary">Add to Cart</button>
    </form>
  {{else}}
    <p class="text-muted">Purchase available to human visitors.</p>
  {{/if}}

{{/if}}
```

En el párrafo 2 de la parte dispositiva del proyecto de resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación de las recomendaciones formuladas por la Comisión Consultiva en Asuntos Administrativos y de Presupuesto. `SearchEngine` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `VerifiedBot` getting structured metadata without commercial signals, which is what they actually need. Discount targetingM SK2 a loyalty code shown only to low `Challenge` es una advertencia, no un bloqueoM SK1 Secciones sospechosas todavía pueden comprar.

## El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

Automatización de la Frauda, Testadores de tarjetas, voucher brute -forcersM SK3 y retribuciones escritas todos convergen en el checkoutMSC4 El objetivo es la defensa en profundidad sin un CAPTCHAMST5la primera experiencia para todosMst6

*Scenario: un bote- hitos del bot de prueba `/checkout`. Ve un muertoM SK1 mensaje final, envía una botella de miel - formulario rellenadoMSC4 y recibe una confirmación silenciosa sin incentivos para volver a probarMST5*

```mermaid
flowchart TD
    classDef input fill:none,stroke:#3b82f6,stroke-width:2px
    classDef good fill:none,stroke:#22c55e,stroke-width:2px
    classDef problem fill:none,stroke:#ef4444,stroke-width:2px

    A([Visitor reaches /checkout]):::input --> B{bot?}
    B -->|yes| C[Dead-end message - no form]:::problem
    B -->|no| D{risk band}
    D -->|Low| E[Express checkout CTA]:::good
    D -->|Elevated| F[Standard checkout CTA]:::good
    D -->|High+| G[Phone number - no online path]:::problem
    E & F --> H[POST /checkout/order]
    H --> I{honeypot triggered?}
    I -->|yes| J[Silent fake confirmation]:::problem
    I -->|no| K[Process real order]:::good
```

El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

```ts
app.get('/checkout', (req, res) => {
  const { verdict } = req.stylobot;
  res.render('checkout', {
    sbVerdict: verdict,
    showForm:     !verdict.isBot,
    showExpress:  verdict.riskBand === 'VeryLow' || verdict.riskBand === 'Low',
    showStandard: ['VeryLow','Low','Elevated'].includes(verdict.riskBand),
    showPhone:    ['High','VeryHigh'].includes(verdict.riskBand),
  });
});

app.post('/checkout/order', (req, res) => {
  // honeypot fields are invisible to humans; bots fill everything
  if (req.body.hp_name || req.body.hp_email) {
    return res.redirect('/checkout/confirmed');  // silent fake - no retry incentive
  }
  return processRealOrder(req, res);
});
```

El Presidente (habla en inglés): De conformidad con el entendimiento alcanzado en las consultas previas del Consejo, consideraré que la Asamblea General desea concluir su examen de este tema del programa.

```handlebars
{{#if showForm}}
  <form method="post" action="/checkout/order">

    {{! invisible honeypot trap - humans leave blank, bots fill everything }}
    <div style="position:absolute;left:-9999px;opacity:0" aria-hidden="true">
      <input type="text" name="hp_name" tabindex="-1" autocomplete="off" />
      <input type="email" name="hp_email" tabindex="-1" autocomplete="off" />
    </div>

    {{#if showExpress}}
      <button type="submit" name="express" value="true" class="btn btn-success btn-lg">
        Express Checkout
      </button>
    {{/if}}

    {{#if showStandard}}
      <button type="submit" class="btn btn-primary">Proceed to Payment</button>
    {{/if}}

    {{#if showPhone}}
      <p>Please call us to complete your order: <strong>0800 123 456</strong></p>
    {{/if}}

  </form>
{{else}}
  <p class="text-muted">Checkout is available to human visitors only.</p>
{{/if}}
```

El rechazo de la hoja de miel es la técnica clave aquí. El feedback de error enseña a los atacantes a repetir; una falsa confirmación silenciosa desperdicia su tiempo , y la página de confirmación parece idéntica si el pedido era real o rechazadoM SK3 La facturación Express como beneficio de confianza MSC4 no es un parámetro predeterminadoMST5 significa que sólo las sesiones que lo han ganado obtienen el camino más cortoM ST6 En la producciónM st7 factor del vaso de miel `<div>` wrapper en una barra de mandos compartida parcial (`{{> honeypot}}`El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

## En la misma sesión, el Consejo aprobó el proyecto de resolución A/C.3/60/L.20 sin someterlo a votación (véase párr.

En el párrafo 2 de la resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación del Programa de Acción para prevenir, combatir y eliminar el tráfico ilícito de armas pequeñas y ligeras en todos sus aspectos.

*El Grupo de Trabajo tal vez desee tomar nota del informe del Secretario General sobre la aplicación de las recomendaciones contenidas en el párrafo 6 supra. `/login`. Ve un mensaje de dissuasiónM SK1 llena el vaso de miel, y se encoge a `/login/denied` before any authentication runs.*

```ts
app.get('/login', (req, res) => {
  const { verdict } = req.stylobot;
  res.render('login', {
    sbVerdict: verdict,
    showWarning: verdict.isBot,
    showRisk:    ['High','VeryHigh'].includes(verdict.riskBand),
  });
});

app.post('/login', async (req, res) => {
  if (req.body.hp_user || req.body.hp_pass) {
    return res.redirect('/login/denied');
  }
  if (req.stylobot.verdict.isBot) {
    return res.redirect('/login/denied');
  }
  return authenticate(req, res);
});
```

```handlebars
{{#if showRisk}}
  <div class="alert alert-danger">
    High-risk signals detected. Login attempts are logged.
  </div>
{{/if}}

{{#if showWarning}}
  <div class="alert alert-warning">
    Automated login attempts are detected and blocked.
  </div>
{{/if}}

<form method="post" action="/login">
  <div style="position:absolute;left:-9999px;opacity:0" aria-hidden="true">
    <input type="text" name="hp_user" tabindex="-1" autocomplete="off" />
    <input type="password" name="hp_pass" tabindex="-1" autocomplete="off" />
  </div>
  <div class="form-group">
    <label for="email">Email</label>
    <input type="email" id="email" name="email" autocomplete="email" />
  </div>
  <div class="form-group">
    <label for="password">Password</label>
    <input type="password" id="password" name="password" autocomplete="current-password" />
  </div>
  <button type="submit" class="btn btn-primary">Sign In</button>
</form>
```

El robot ve el disuasivo antes de enviarlo. Si lo hace en cualquier casoM SK1 la caja de miel lo captura . Si de alguna manera evita la cajanta de miel, `verdict.isBot` es el servidor final-verificación lateral antes de que se ejecute ninguna lógica de autenticación

## Informe de la Comisión Consultiva en Asuntos Administrativos y de Presupuesto

Los crawlers de AI son un problema diferente. No están tratando de brutar-Forzar cuentas o precios de cosecha ; Están ingestiendo contenido para la formación de modelosM SK3 Frecuentemente son honestos con respecto a la identidadMSC4 lo que significa que la respuesta correcta es comercial en lugar de adversarial.

*El Grupo de Trabajo tal vez desee tomar nota del informe del Secretario General sobre la aplicación de las recomendaciones contenidas en el párrafo 6 supra. `/newsletter`. Ve un mensaje de licencia de datos en lugar de un nivel de subscripciónM SK1 Su submisión se descarta silenciosamente.*

```ts
app.get('/newsletter', (req, res) => {
  const { verdict } = req.stylobot;
  res.render('newsletter', {
    sbVerdict:     verdict,
    isHuman:       !verdict.isBot,
    isAiBot:       verdict.botType === 'AiBot',
    isOtherBot:    verdict.isBot && verdict.botType !== 'AiBot',
  });
});

app.post('/newsletter/subscribe', (req, res) => {
  if (req.body.hp_email2 || req.stylobot.verdict.isBot) {
    return res.redirect('/newsletter/thanks');  // silent discard
  }
  mailingList.subscribe(req.body.email);
  return res.redirect('/newsletter/thanks');
});
```

```handlebars
{{#if isHuman}}
  <p>Get exclusive deals delivered to your inbox. Unsubscribe any time.</p>
{{/if}}

{{#if isAiBot}}
  <div class="alert alert-info">
    This subscription endpoint is for human readers.
    For data licensing enquiries, <a href="/contact">contact us directly</a>.
  </div>
{{/if}}

{{#if isOtherBot}}
  <div class="alert alert-warning">
    Automated subscription attempts are discarded.
  </div>
{{/if}}

<form method="post" action="/newsletter/subscribe">
  <div style="position:absolute;left:-9999px;opacity:0" aria-hidden="true">
    <input type="email" name="hp_email2" tabindex="-1" autocomplete="off" />
  </div>
  <div class="form-group">
    <input type="email" name="email" placeholder="your@email.com" autocomplete="email" />
  </div>
  <button type="submit" class="btn btn-success">Subscribe</button>
</form>
```

`AiBot` a) En el párrafo 2 de la parte dispositiva del proyecto de resolución A/C.3/60/L.32, titulado “Aplicación de los resultados de la Cumbre Mundial sobre Desarrollo Social y del vigésimo cuarto período extraordinario de sesiones de la Asamblea General”, la Comisión pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre la aplicación de las recomendaciones formuladas por la Conferencia Internacional sobre la Financiación para el Desarrollo;

# El Comité recomienda al Estado Parte que incluya en su próximo informe periódico información detallada sobre las medidas adoptadas por el Estado parte para combatir la discriminación racial.

## El Comité recomienda al Estado Parte que incluya en su próximo informe periódico datos estadísticos desglosados por sexo, edad y origen étnico.

`sbVerdictInjector` ejecuta después del medio de detección y pone el veredicto en `res.locals`:

```ts
import { sbVerdictInjector } from '@stylobot/node';

app.use(styloBotMiddleware({ mode: 'headers' }));
app.use(sbVerdictInjector({ mode: 'gateway' }));
// or for direct sidecar calls (REST port, not the gRPC port):
app.use(sbVerdictInjector({ mode: 'sidecar', endpoint: 'http://localhost:5091' }));
```

`res.locals.sbVerdict` Es disponible en cada plantilla. `res.locals.sbVerdictScript` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `<script>` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `window.__sb` para los componentes del navegador.

## El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la asignación de recursos suficientes a la educación y la formación profesional. `RISK_ORDER` Una vez en el campo de aplicación del módulo ( los ayudantes Nunjucks y EJS de abajo utilizan el mismo mapa):

```ts
import type { Verdict, RiskBand } from '@stylobot/core';

const RISK_ORDER: Record<string, number> = {
  Unknown: 0, VeryLow: 1, Low: 2, Elevated: 3, Medium: 4, High: 5, VeryHigh: 6, Verified: 7,
};

// register on your Handlebars engine instance
hbs.engine({
  helpers: {
    // {{#sbGate sbVerdict "Low"}}...{{else}}...{{/sbGate}}
    sbGate(verdict: Verdict | null, maxRisk: string, options: any) {
      if (!verdict) return options.fn(this);
      return RISK_ORDER[verdict.riskBand] <= RISK_ORDER[maxRisk]
        ? options.fn(this)
        : options.inverse(this);
    },

    // {{#sbIsBot sbVerdict}}...{{else}}...{{/sbIsBot}}
    sbIsBot(verdict: Verdict | null, options: any) {
      return verdict?.isBot ? options.fn(this) : options.inverse(this);
    },

    // {{#sbBotType sbVerdict "AiBot"}}...{{/sbBotType}}
    sbBotType(verdict: Verdict | null, type: string, options: any) {
      return verdict?.botType === type ? options.fn(this) : options.inverse(this);
    },

    // {{#sbMinRisk sbVerdict "High"}}...{{/sbMinRisk}}
    sbMinRisk(verdict: Verdict | null, minRisk: string, options: any) {
      if (!verdict) return options.inverse(this);
      return RISK_ORDER[verdict.riskBand] >= RISK_ORDER[minRisk]
        ? options.fn(this)
        : options.inverse(this);
    },
  },
});
```

En el párrafo 2 de la parte dispositiva, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación del Programa de Acción para prevenir, combatir y eliminar todas las formas de discriminación contra la mujer.

```handlebars
{{#sbGate sbVerdict "Low"}}
  <a href="/checkout/express" class="btn btn-success">Express Checkout</a>
{{else}}
  <a href="/checkout" class="btn btn-secondary">Checkout</a>
{{/sbGate}}

{{#sbBotType sbVerdict "AiBot"}}
  <div class="alert alert-info">AI crawler detected. Data licensing info above.</div>
{{/sbBotType}}

{{#sbMinRisk sbVerdict "High"}}
  <div class="alert alert-danger">High-risk session. Some features restricted.</div>
{{/sbMinRisk}}
```

## El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

```ts
import nunjucks from 'nunjucks';

// RISK_ORDER - same map defined in the Handlebars section above

class SbGateExtension {
  tags = ['sbgate'];
  parse(parser: any, nodes: any, lexer: any) {
    const tok = parser.nextToken();
    const args = parser.parseSignature(null, true);
    parser.advanceAfterBlockEnd(tok.value);
    const body = parser.parseUntilBlocks('else', 'endsbgate');
    let elseBody = null;
    if (parser.skipSymbol('else')) {
      parser.skip(lexer.TOKEN_BLOCK_END);
      elseBody = parser.parseUntilBlocks('endsbgate');
    }
    parser.advanceAfterBlockEnd();
    return new nodes.CallExtension(this, 'run', args, [body, elseBody]);
  }
  run(context: any, maxRisk: string, body: any, elseBody: any) {
    const v = context.ctx.sbVerdict;
    const fits = !v || RISK_ORDER[v.riskBand] <= RISK_ORDER[maxRisk];
    return fits ? body() : (elseBody?.() ?? '');
  }
}
env.addExtension('SbGateExtension', new SbGateExtension());
```

```nunjucks
{% sbgate "Low" %}
  <a href="/checkout/express">Express checkout</a>
{% else %}
  <a href="/checkout">Checkout</a>
{% endsbgate %}
```

## El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

EJS no tiene ayudantes bloqueados, pero las funciones locales cubren la mayoría de los casos de forma limpia:

```ts
// RISK_ORDER - same map defined in the Handlebars section above

app.use((req, res, next) => {
  const v = res.locals.sbVerdict ?? null;
  res.locals.sbBelowRisk = (max: string) =>
    !v || RISK_ORDER[v.riskBand] <= RISK_ORDER[max];
  res.locals.sbAboveRisk = (min: string) =>
    v && RISK_ORDER[v.riskBand] >= RISK_ORDER[min];
  res.locals.sbIsBot  = () => v?.isBot ?? false;
  res.locals.sbBotIs  = (type: string) => v?.botType === type;
  next();
});
```

```ejs
<% if (sbBelowRisk('Low')) { %>
  <a href="/checkout/express" class="btn btn-success">Express Checkout</a>
<% } else { %>
  <a href="/checkout" class="btn btn-secondary">Checkout</a>
<% } %>

<% if (sbBotIs('AiBot')) { %>
  <div class="alert alert-info">AI crawler. Data licensing enquiries via /contact.</div>
<% } %>
```

# La superficie del navegador

## El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `{{{sbVerdictScript}}}` a su cabeza de layout. Rende como:

```html
<script>window.__sb = {"isBot":false,"botProbability":0.12,"riskBand":"Low","recommendedAction":"Allow",...}</script>
```

Después cargar el paquete de elementos:

```handlebars
<head>
  {{{sbVerdictScript}}}
  <script type="module" src="/js/sb-elements.js"></script>
</head>
```

## `<sb-gate>`El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

```html
<!-- only shown when riskBand <= 'low' -->
<sb-gate max-risk="low">
  <a href="/checkout/express" class="btn btn-success">Express Checkout</a>
</sb-gate>

<!-- only shown when riskBand >= 'elevated' -->
<sb-gate min-risk="elevated">
  <div class="alert alert-warning">Unusual activity detected on your session.</div>
</sb-gate>
```

## `<sb-adapt>`El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

```html
<sb-adapt>
  <sb-case max-risk="low">
    Standard checkout - enter your card details below.
  </sb-case>
  <sb-case max-risk="medium">
    Additional verification is required before we can process your order.
  </sb-case>
  <sb-case>
    Automated checkout access is not permitted.
  </sb-case>
</sb-adapt>
```

`<sb-adapt>` La Comisión Consultiva en Asuntos Administrativos y de Presupuesto recomienda a la Asamblea General que apruebe el siguiente proyecto de resolución: `<sb-case>` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `max-risk` . El final `<sb-case>` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `max-risk` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `<sb-gate>` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `<sb-adapt>` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `sb:verdict` event y re-evaluar si el veredicto cambia después de la primera pinturaM SK1

## `<sb-widget>`El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación de todas las formas de discriminación contra la mujer.

`<sb-gate>` oculta el cliente de contenido-side. Si necesita un bot para recibir un markup diferenteM SK2 no markup ocultado , necesita que el fragmento sea reproducido en el servidor con el contexto de detección disponible para la plantillaMSC4

`<sb-widget>` El Grupo de Trabajo tal vez desee tomar nota del informe del Secretario General sobre la aplicación de las recomendaciones contenidas en el párrafo 6 supra. `<template>` element, agrupa todas las peticiones de widgets en la página en una sola rondaM SK1trip, y se sustituye por el HTML devuelto :

```html
<sb-widget data-sb-widget="checkout-cta">
  <template>
    {% if recommendedAction == 'Block' %}
      <p class="text-danger">Automated checkout is blocked.</p>
    {% elsif botType == 'AiBot' %}
      <p>AI crawlers cannot complete purchases. <a href="/contact">Data licensing enquiries</a>.</p>
    {% elsif isBot %}
      <p class="text-muted">Checkout is available to human visitors.</p>
    {% else %}
      <a href="/checkout/express" class="btn btn-success">Express Checkout</a>
    {% endif %}
  </template>
</sb-widget>
```

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `isBot`, `botProbability`, `confidence`, `botType`, `botName`, `riskBand`, `recommendedAction`, `threatScore`, `threatBand`El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `vars` usted pasa desde el servidor-side cuando se llama `RenderWidget` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `<sb-widget>` Elementos que se conectan en el mismo tick de microtask son batchados en una sola solicitud. Una página con cinco widgets hace una rondaM SK1trip:

```mermaid
sequenceDiagram
    participant B as Browser
    participant C as Coordinator
    participant S as /_stylobot/partials/render
    participant L as Fluid / Liquid

    B->>C: sb-widget#checkout-cta registers
    B->>C: sb-widget#promo-banner registers
    B->>C: sb-widget#nav-links registers
    Note over C: queueMicrotask - one batch
    C->>S: POST { widgets: { checkout-cta: "...", promo-banner: "...", nav-links: "..." } }
    S->>L: render each template with verdict context
    L-->>S: rendered HTML fragments
    S-->>C: <div data-sb-widget="checkout-cta">...</div> ...
    C-->>B: each sb-widget replaced in DOM
```

# El Comité recomienda al Estado Parte que incluya en su próximo informe periódico datos estadísticos desglosados por sexo, edad y origen étnico.

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.
|---|---|---|
| `styloBotMiddleware` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la adopción de medidas legislativas, administrativas, judiciales y de otra índole. `req.stylobot` Por medio de los encabezamientos / gRPC / REST |
| `styloBotPlugin` | Fastify | La misma , como plugin de Fastify con `decorateRequest` |
| `sbVerdictInjector` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso. `res.locals.sbVerdict` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `sbVerdictScript` |
| Ayudadores de las barras de manutención | Templates del servidor | `sbGate`, `sbIsBot`, `sbBotType`, `sbMinRisk` Los miembros del Consejo tienen ante sí el informe de la Comisión Consultiva en Asuntos Administrativos y de Presupuesto.
| Extensión de Nunjucks | plantillas de servidores | `{% sbgate "Low" %}...{% endsbgate %}` |
| Locales de EJS | Templates del servidor | `sbBelowRisk()`, `sbAboveRisk()`, `sbIsBot()`, `sbBotIs()` |
| `<sb-gate>` | navegador | mostrarM SK2 ocultar contenido por banda de riesgos, escucha para `sb:verdict` |
| `<sb-adapt>` | navegador | Seleccione el primer caso que coincida con una lista SSK2
| `<sb-widget>` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.
| `StyloBotGrpcClient` | Nodo / Bun | | Deno | | | Cliente gRPC directo para uso no | - | medioware |

A continuación en la serie de lanzamiento: [**El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.**](/blog/sidecar-architecture), cómo se conecta el motor de detección a los stacks no -.NET, el Go SDKM SK3 el plugin CaddyMSC4 y la interfaz gRPC que lo vincula a sí mismoMST5

Si llegas aquí desde el lado .NET, [El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la protección de los derechos humanos y las libertades fundamentales de todos los trabajadores migratorios y de sus familiares.](/blog/behaviour-aware-ux) cubre los mismos patrones de storefront con ayudadores de etiquetas y filtros de acción; el reprocesamiento de fiabilidad que mantiene la memoria del motor-estable bajo un tráfico sostenido está en [El Comité recomienda al Estado Parte que incluya en su próximo informe periódico datos desglosados por sexo, edad y origen étnico sobre las medidas adoptadas para eliminar la discriminación contra la mujer.](/blog/stylobot-release-reliability)El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. [El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la adopción de medidas legislativas, administrativas y de otra índole.](https://www.stylobot.net).