Beste Eignung
Implementierungsvorbereitung, wenn der Käufer eine verwendbare Konfiguration, ein Snippet, eine Nutzlast, einen Umfangsplan oder ein Empfängergerüst benötigt.
Kostenloses Tool
Generieren Sie Node- oder Python-Webhook-Handler mit Signaturüberprüfung für unlimitedcodex-Ereignisse.
Tool-Strategie
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.
Implementierungsvorbereitung, wenn der Käufer eine verwendbare Konfiguration, ein Snippet, eine Nutzlast, einen Umfangsplan oder ein Empfängergerüst benötigt.
Ein kopierbares Starter-Artefakt, das der Käufer an die gelieferten Basis-URL, API und Modell-IDs anpassen kann.
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
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.
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.
// 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 });
}Verwandte Tools
Migrationsgenerator
Generieren oder transformieren Sie OpenAI SDK-Snippets in unlimitedcodex Basis-URL, Schlüssel und Bereiche.
Werkzeug öffnenScope-Konfigurator
Wählen Sie Workloads und Ausgabebereiche mit den geringsten Rechten,.env.example und eine Rotationscheckliste aus.
Werkzeug öffnenAnfrage Entwickler
Erstellen Sie den Chat-Abschluss JSON visuell und exportieren Sie cURL-, JavaScript- oder Python-Snippets.
Werkzeug öffnenWä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.