/**
 * notifications/webhook-adapter.ts
 *
 * The NotificationChannelAdapter for `type: "webhook"`. Resolves a channel's
 * logical name to a real URL from the runner environment (URLs never live in
 * the Content Lake — D0045 / spec Path 1), guards egress, builds the signed
 * envelope, and POSTs. An unregistered logical name is a `skipped` outcome, not
 * a failure, so an unwired subscription is operationally visible.
 */
import { type ChannelDelivery, type DeliveryOutcome, type NotificationChannelAdapter, type NotificationContent } from "../_vendor/ailf-core/index.d.ts";
import type { EgressGuardOptions } from "./egress-guard.js";
/**
 * Env key for a logical webhook name: `groq-ci-relay` → `AILF_WEBHOOK_URL__GROQ_CI_RELAY`.
 * The normalization is many-to-one (`a.b` and `a-b` both map to `A_B`), so operators
 * must choose distinct logical names that differ after uppercasing and non-alphanumeric collapse.
 */
export declare function webhookEnvKey(logicalName: string): string;
/** Resolve a logical name to a URL from an env map (defaults to process.env). */
export declare function resolveWebhookUrl(logicalName: string, env?: NodeJS.ProcessEnv): string | undefined;
export interface WebhookAdapterOptions extends EgressGuardOptions {
    signingSecret: string;
    env?: NodeJS.ProcessEnv;
}
export declare class WebhookNotificationAdapter implements NotificationChannelAdapter {
    private readonly opts;
    readonly type: "webhook";
    constructor(opts: WebhookAdapterOptions);
    deliver(target: ChannelDelivery, content: NotificationContent): Promise<DeliveryOutcome>;
}
