$59 primer mesPlanes
Todas las herramientas gratis

Herramienta gratis

Generador inicial de receptor webhook

Genere controladores de webhook de Node o Python con verificación de firma para eventos unlimitedcodex.

Estrategia de la herramienta

Qué te da esta herramienta

Genere controladores de webhook de Node o Python con verificación de firma para eventos unlimitedcodex. La herramienta es útil antes del pago porque ayuda a los compradores a tomar una decisión de acceso específica compatible con OpenAI API sin compartir secretos privados.

Mejor encaje

Preparación de la implementación cuando el comprador necesita una configuración, un fragmento, una carga útil, un plan de alcance o una estructura de receptor utilizables.

Salida

Un artefacto inicial copiable que el comprador puede adaptar a la clave URL, la clave API y los ID de modelo entregados.

Siguiente paso

Aplique el artefacto generado, verifíquelo con los documentos pertinentes y luego solicite la entrega de configuración a través de un paquete pago.

Paquete de citas de la herramienta

Intención, entradas y usos del resultado

Cree fragmentos, ámbitos, cargas útiles de solicitud, controladores de webhook o archivos de entorno compatibles con OpenAI. Herramienta específica: Generar controladores de webhook de Node o Python con verificación de firma para eventos unlimitedcodex.

Intención de búsqueda

  • Generador inicial de receptor webhook
  • generador de webhooks gratuito
  • Generador de webhooks para OpenAI compatible con API

Límite de entrada

Utilice únicamente datos de planificación no secretos. No pegue claves API sin procesar, tokens de portador, encabezados de autenticación completos, registros privados, datos de clientes ni capturas de pantalla de facturación. Los fragmentos generados deben usar marcadores de posición para BASE_URL, API_KEY, ID de modelo, secretos de webhook y variables de entorno.

Usos del resultado

  • Produzca configuración inicial, solicitud, webhook, alcance o artefactos de migración.
  • Utilice marcadores de posición que se puedan reemplazar con la clave URL, la clave API y los ID de modelo entregados.
  • Ofrezca a los equipos de implementación un siguiente paso concreto sin exponer credenciales privadas.
// unlimitedcodex webhook receiver — Node.js / Next.js App Router
// Signature verification notes:
// - Header: x-ucx-signature (format: t=<unix>,v1=<hex>)
// - Signed payload: `${timestamp}.${rawBody}`
// - Secret env var: UCX_WEBHOOK_SECRET (whsec_ucx_*)
// - Reject timestamps outside a 300s tolerance window.

import { createHmac, timingSafeEqual } from "crypto";

const SIGNATURE_TOLERANCE_SECONDS = 300;

function verifyWebhookSignature(rawBody: string, signatureHeader: string, secret: string) {
  const parts = Object.fromEntries(
    signatureHeader.split(",").map((part) => {
      const [key, value] = part.split("=");
      return [key, value];
    })
  );
  const timestamp = Number(parts.t);
  const signature = parts.v1;

  if (!Number.isInteger(timestamp) || !signature) {
    return false;
  }

  if (Math.abs(Math.floor(Date.now() / 1000) - timestamp) > SIGNATURE_TOLERANCE_SECONDS) {
    return false;
  }

  const signedPayload = `${timestamp}.${rawBody}`;
  const expected = createHmac("sha256", secret).update(signedPayload).digest("hex");
  const left = Buffer.from(expected, "hex");
  const right = Buffer.from(signature, "hex");

  return left.length === right.length && timingSafeEqual(left, right);
}

async function recordWebhookEvent(eventId: string, eventType: string) {
  // Persist event.id before side effects so retries stay idempotent.
  // Return false when this delivery was already processed.
  return true;
}

export async function POST(request: Request) {
  const rawBody = await request.text();
  const signature = request.headers.get("x-ucx-signature") ?? "";
  const secret = process.env.UCX_WEBHOOK_SECRET;

  if (!secret || !verifyWebhookSignature(rawBody, signature, secret)) {
    return new Response("Invalid signature", { status: 400 });
  }

  const event = JSON.parse(rawBody) as {
    id: string;
    type: string;
    created: string;
    data: Record<string, unknown>;
  };

  const isNew = await recordWebhookEvent(event.id, event.type);
  if (!isNew) {
    return Response.json({ received: true, duplicate: true });
  }

  switch (event.type) {
    case "usage.threshold_reached": {
      // Pause expensive jobs, notify account owners, or refresh quota dashboards.
      await handleUsageThreshold(event.data);
      break;
    }
    case "subscription.updated": {
      // Refresh local entitlements, package slug, and billing period metadata.
      await syncSubscriptionState(event.data);
      break;
    }
    case "api_key.revoked": {
      // Invalidate cached credentials and alert the owning team.
      await revokeCachedApiKey(event.data);
      break;
    }
    default:
      // Ignore unselected event types safely.
      break;
  }

  return Response.json({ received: true });
}
  • Read raw solicitud cuerpo como text antes JSON parsing — signature verification must uso exact bytes recibido.
  • Verify x-ucx-signature header usando HMAC SHA-256 over `${timestamp}.${rawBody}` con tu whsec_ucx_* signing secreto.
  • Reject signatures older than 300 seconds to limit replay windows.
  • Comparar v1 digest con a constant-time equality check (timingSafeEqual en Node, hmac.compare_digest en Python).
  • Return 2xx solo después persisting event.id — handlers must stay idempotent because deliveries puede repeat.
  • Store UCX_WEBHOOK_SECRET en a secreto manager; nunca log secreto, clave APIs, o completo customer cargas útiles.

¿Listo para acceso a ChatGPT 5.5 Ultra y Codex API?

Elija Ilimitado Semanal o Ilimitado Mensual, complete Stripe pago y reciba la configuración manual en 10 minutos a 5 horas. La clave API completa llega por correo electrónico, mientras que el panel muestra de forma segura los detalles de la entrega.

Generador inicial de receptor webhook | unlimitedcodex