/**
 * Generated by orval v7.21.0 🍺
 * Do not edit manually.
 * Coinbase Developer Platform APIs
 * The Coinbase Developer Platform APIs - leading the world's transition onchain.
 * OpenAPI spec version: 2.0.0
 */
import type {
  ListWebhookSubscriptionEventsParams,
  ListWebhookSubscriptionsParams,
  WebhookEventListResponse,
  WebhookSubscriptionListResponse,
  WebhookSubscriptionRequest,
  WebhookSubscriptionResponse,
  WebhookSubscriptionUpdateRequest,
} from "../coinbaseDeveloperPlatformAPIs.schemas.js";

import { cdpApiClient } from "../../cdpApiClient.js";

type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];

/**
 * Retrieve a paginated list of webhook subscriptions for the authenticated project.
Returns subscriptions for all CDP product events (onchain, onramp/offramp, wallet, etc.)
in descending order by creation time.

### Use Cases
- Monitor all active webhook subscriptions across CDP products
- Audit webhook configurations
- Manage subscription lifecycle

 * @summary List webhook subscriptions
 */
export const listWebhookSubscriptions = (
  params?: ListWebhookSubscriptionsParams,
  options?: SecondParameter<typeof cdpApiClient<WebhookSubscriptionListResponse>>,
) => {
  return cdpApiClient<WebhookSubscriptionListResponse>(
    { url: `/v2/data/webhooks/subscriptions`, method: "GET", params },
    options,
  );
};
/**
 * Subscribe to real-time events across CDP products. A webhook subscription provides a `targetURL` and other relevant endpoint configuration to enable receiving webhooks when events occur.

An entity can have up to 100 webhook subscriptions. Once this limit is reached, new webhook subscription creation requests return a `400` error with `errorType: subscription_limit_exceeded`.

### Webhook Signature Verification

All webhooks include an HMAC-SHA256 signed header for security. The signature is signed with the secret that is returned in the `secret` field when creating a subscription.

Do not lose the secret, as you will not be able to recreate it. If you lose the secret, you will need to create a new subscription.

See the [verification guide](https://docs.cdp.coinbase.com/onramp-&-offramp/webhooks#webhook-signature-verification) for implementation details.

 * @summary Create webhook subscription
 */
export const createWebhookSubscription = (
  webhookSubscriptionRequest: WebhookSubscriptionRequest,
  options?: SecondParameter<typeof cdpApiClient<WebhookSubscriptionResponse>>,
) => {
  return cdpApiClient<WebhookSubscriptionResponse>(
    {
      url: `/v2/data/webhooks/subscriptions`,
      method: "POST",
      headers: { "Content-Type": "application/json" },
      data: webhookSubscriptionRequest,
    },
    options,
  );
};
/**
 * Retrieve detailed information about a specific webhook subscription including
configuration, status, creation timestamp, and webhook signature secret.

### Response Includes
- Subscription configuration and filters
- Target URL and custom headers
- Webhook signature secret for verification
- Creation timestamp and status

 * @summary Get webhook subscription
 */
export const getWebhookSubscription = (
  subscriptionId: string,
  options?: SecondParameter<typeof cdpApiClient<WebhookSubscriptionResponse>>,
) => {
  return cdpApiClient<WebhookSubscriptionResponse>(
    { url: `/v2/data/webhooks/subscriptions/${subscriptionId}`, method: "GET" },
    options,
  );
};
/**
 * Update an existing webhook subscription's configuration including
event types, target URL, filtering criteria, and enabled status.
All required fields must be provided, even if they are not being changed.

### Common Updates
- Change target URL or headers
- Add/remove event type filters
- Update multi-label filtering criteria
- Enable/disable subscription

 * @summary Update webhook subscription
 */
export const updateWebhookSubscription = (
  subscriptionId: string,
  webhookSubscriptionUpdateRequest: WebhookSubscriptionUpdateRequest,
  options?: SecondParameter<typeof cdpApiClient<WebhookSubscriptionResponse>>,
) => {
  return cdpApiClient<WebhookSubscriptionResponse>(
    {
      url: `/v2/data/webhooks/subscriptions/${subscriptionId}`,
      method: "PUT",
      headers: { "Content-Type": "application/json" },
      data: webhookSubscriptionUpdateRequest,
    },
    options,
  );
};
/**
 * Permanently delete a webhook subscription and stop all event deliveries.
This action cannot be undone.

### Important Notes
- All webhook deliveries will cease immediately
- Subscription cannot be recovered after deletion
- Consider disabling instead of deleting for temporary pauses

 * @summary Delete webhook subscription
 */
export const deleteWebhookSubscription = (
  subscriptionId: string,
  options?: SecondParameter<typeof cdpApiClient<void>>,
) => {
  return cdpApiClient<void>(
    { url: `/v2/data/webhooks/subscriptions/${subscriptionId}`, method: "DELETE" },
    options,
  );
};
/**
 * Retrieve webhook event delivery attempts for a specific subscription.
Returns event deliveries in descending order by creation time (newest first),
including delivery status, retry count, and response details.

### Use Cases
- Debug webhook delivery failures and inspect response codes
- Monitor delivery status and retry counts
- Audit event delivery history for a subscription
- Verify that expected events were sent to webhook URLs

### Filtering
Use optional query parameters to narrow results:
- `eventId` — find a specific event by ID
- `minCreatedAt` / `maxCreatedAt` — filter by time range
- `eventTypeNames` — filter by event type (comma-separated)

**Note:** Results are limited to the 50 most recent events (newest first). No pagination is supported.

 * @summary List webhook subscription events
 */
export const listWebhookSubscriptionEvents = (
  subscriptionId: string,
  params?: ListWebhookSubscriptionEventsParams,
  options?: SecondParameter<typeof cdpApiClient<WebhookEventListResponse>>,
) => {
  return cdpApiClient<WebhookEventListResponse>(
    { url: `/v2/data/webhooks/subscriptions/${subscriptionId}/events`, method: "GET", params },
    options,
  );
};
export type ListWebhookSubscriptionsResult = NonNullable<
  Awaited<ReturnType<typeof listWebhookSubscriptions>>
>;
export type CreateWebhookSubscriptionResult = NonNullable<
  Awaited<ReturnType<typeof createWebhookSubscription>>
>;
export type GetWebhookSubscriptionResult = NonNullable<
  Awaited<ReturnType<typeof getWebhookSubscription>>
>;
export type UpdateWebhookSubscriptionResult = NonNullable<
  Awaited<ReturnType<typeof updateWebhookSubscription>>
>;
export type DeleteWebhookSubscriptionResult = NonNullable<
  Awaited<ReturnType<typeof deleteWebhookSubscription>>
>;
export type ListWebhookSubscriptionEventsResult = NonNullable<
  Awaited<ReturnType<typeof listWebhookSubscriptionEvents>>
>;
