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.
Herramienta gratis
Genere controladores de webhook de Node o Python con verificación de firma para eventos unlimitedcodex.
Estrategia de la 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.
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.
Un artefacto inicial copiable que el comprador puede adaptar a la clave URL, la clave API y los ID de modelo entregados.
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
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.
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.
// 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 });
}Herramientas relacionadas
Generador de migración
Genere o transforme fragmentos de OpenAI SDK en unlimitedcodex base URL, claves y alcances.
Abrir herramientaConfigurador de alcance
Seleccione cargas de trabajo y genere alcances con privilegios mínimos,.env.example y una lista de verificación de rotación.
Abrir herramientaGenerador de solicitudes
Cree la finalización del chat JSON visualmente y exporte fragmentos de cURL, JavaScript o Python.
Abrir herramientaElija 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.