59 $ im ersten MonatPlaene
Alle kostenlosen Tools

Kostenloses Tool

Webhook-Receiver-Starter-Generator

Generieren Sie Node- oder Python-Webhook-Handler mit Signaturüberprüfung für unlimitedcodex-Ereignisse.

Tool-Strategie

War dieses Tool liefert

Generieren Sie Node- oder Python-Webhook-Handler mit Signaturüberprüfung für unlimitedcodex-Ereignisse. Das Tool ist vor dem Bezahlen nützlich, da es Käufern hilft, eine bestimmte OpenAI-kompatible API-Zugriffsentscheidung zu treffen, ohne privat Geheimnisse preiszugeben.

Beste Eignung

Implementierungsvorbereitung, wenn der Käufer eine verwendbare Konfiguration, ein Snippet, eine Nutzlast, einen Umfangsplan oder ein Empfängergerüst benötigt.

Ausgabe

Ein kopierbares Starter-Artefakt, das der Käufer an die gelieferten Basis-URL, API und Modell-IDs anpassen kann.

Naechster Schritt

Wenden Sie das generierte Artefakt an, überprüfen Sie es anhand der relevanten Dokumente und fordern Sie dann die Bereitstellung der Einrichtung über ein kostenpflichtiges Paket an.

Tool-Zitationspaket

Intent, Eingaben und Output-Anwendungsfaelle

Erstellen Sie OpenAI-kompatible Snippets, Bereiche, Anforderungsnutzlasten, Webhook-Handler oder Umgebungsdateien. Spezifisches Tool: Generieren Sie Node- oder Python-Webhook-Handler mit Signaturüberprüfung für unlimitedcodex-Ereignisse.

Suchintention

  • Webhook-Receiver-Starter-Generator
  • kostenloser Webhook-Generator
  • Webhook-Generator für OpenAI-kompatibles API

Eingabegrenze

Verwenden Sie nur nicht geheime Planungsvorgaben. Fügen Sie keine rohen API-Schlüssel, Inhabertokens, vollständige Authentifizierungsheader, privat Protokolle, Kundendaten oder Abrechnungs-Screenshots ein. Generierte Snippets sollten Platzhalter für BASE_URL, API_KEY, Modell-IDs, Webhook-Geheimnisse und Umgebungsvariablen verwenden.

Ergebnis-Anwendungsfaelle

  • Erstellen Sie Starterkonfigurations-, Anforderungs-, Webhook-, Bereichs- oder Migrationsartefakte.
  • Verwenden Sie Platzhalter, die durch die bereitgestellten Basis-URL, API und Modell-IDs ersetzt werden können.
  • Geben Sie Implementierungsteams einen konkreten nächsten Schritt, ohne private Anmeldeinformationen preiszugeben.
// 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 Anfrage Textkoerper als text vor JSON parsing — signature verification must Nutzung exact bytes erhalten.
  • Verify x-ucx-signature header nutzend HMAC SHA-256 over `${timestamp}.${rawBody}` mit Ihr whsec_ucx_* signing Geheimnis.
  • Reject signatures older than 300 seconds to limit replay windows.
  • Vergleichen v1 digest mit a constant-time equality check (timingSafeEqual in Node, hmac.compare_digest in Python).
  • Return 2xx nur nach persisting event.id — handlers must stay idempotent because deliveries kann repeat.
  • Store UCX_WEBHOOK_SECRET in a Geheimnis manager; niemals log Geheimnis, API-Schluessels, oder vollstaendig customer Nutzdaten.

Bereit fuer ChatGPT 5.5 Ultra und Codex API-Zugang?

Wählen Sie „Unbegrenzt wöchentlich“ oder „Unbegrenzt monatlich“, schließen Sie den Stripe-Kaufvorgang ab und erhalten Sie die manuelle Einrichtung in 10 Minuten bis 5 Stunden. Der vollständige API-Schlüssel kommt per E-Mail, während das Kontrollbereich die Lieferdetails sicher anzeigt.

Webhook-Receiver-Starter-Generator | unlimitedcodex