59$ в первый месяцПланы
Все бесплатные инструменты

Бесплатный инструмент

Генератор стартового webhook приемник

Создайте обработчики веб-перехватчиков Node или Python с проверкой подписи для событий unlimitedcodex.

Стратегия инструмента

Что дает этот инструмент

Создайте обработчики веб-перехватчиков Node или Python с проверкой подписи для событий unlimitedcodex. Этот инструмент полезен перед оформлением заказа, поскольку помогает покупателям принять одно конкретное OpenAI-совместимое решение о доступе к API, не разглашая при этом личные секреты.

Лучше всего подходит

Подготовка к внедрению, когда покупателю нужна полезная конфигурация, фрагмент, полезная нагрузка, план объема или каркас приемника.

Выход

Копируемый стартовый артефакт, который покупатель может адаптировать к поставляемому базовому ключу URL, ключу API и идентификаторам модели.

Следующий шаг

Примените сгенерированный артефакт, сверьте его с соответствующими документами, а затем запросите доставку установки через платный пакет.

Пакет источников инструмента

Намерение, входные данные и сценарии результата

Создавайте фрагменты, области, полезные данные запросов, обработчики веб-перехватчиков или файлы среды, совместимые с OpenAI. Специальный инструмент: создание обработчиков веб-перехватчиков Node или Python с проверкой подписи для событий unlimitedcodex.

Поисковый интент

  • Генератор стартового webhook приемник
  • бесплатный генератор вебхуков
  • генератор веб-перехватчиков для OpenAI-совместимого API

Граница ввода

Используйте только несекретные исходные данные для планирования. Не вставляйте необработанные ключи API, токены на предъявителя, полные заголовки аутентификации, частные журналы, данные клиентов или скриншоты счетов. В созданных фрагментах должны использоваться заполнители для BASE_URL, API_KEY, идентификаторов моделей, секретов веб-перехватчика и переменных среды.

Сценарии результата

  • Создайте начальную конфигурацию, запрос, веб-перехватчик, область или артефакты миграции.
  • Используйте заполнители, которые можно заменить поставляемыми базовыми ключами URL, API и идентификаторами моделей.
  • Предоставьте группам внедрения конкретный следующий шаг, не раскрывая конфиденциальные учетные данные.
// 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 запрос тело как text до JSON parsing — signature verification must использование exact bytes получил.
  • Verify x-ucx-signature header используя HMAC SHA-256 over `${timestamp}.${rawBody}` с ваш whsec_ucx_* signing секрет.
  • Reject signatures older than 300 seconds to limit replay windows.
  • Сравнить v1 digest с a constant-time equality check (timingSafeEqual в Node, hmac.compare_digest в Python).
  • Возвращайте 2xx только после сохранения event.id — обработчики должны оставаться идемпотентными, потому что доставки могут повторяться.
  • Store UCX_WEBHOOK_SECRET в a секрет manager; никогда log секрет, API ключs, или полный customer полезные нагрузки.

Готовы к доступу ChatGPT 5.5 Ultra и Codex API?

Выберите «Безлимитно еженедельно» или «Безлимитно ежемесячно», завершите оформление заказа Stripe и получите ручную настройку в течение 10 минут–5 часов. Полный ключ API приходит по электронной почте, а на информационной панели безопасно отображаются сведения о доставке.

Генератор стартового webhook receiver | unlimitedcodex