cloudflare/cloudflare-typescript

Public

mirrored fromhttps://github.com/cloudflare/cloudflare-typescriptAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
jacobbednarz-patch-1

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/index.ts

492lines · modepreview

// File generated from our OpenAPI spec by Stainless.

import * as Core from './core';
import * as Errors from './error';
import { type Agent } from './_shims/index';
import * as Uploads from './uploads';
import * as qs from 'qs';
import * as API from 'cloudflare/resources/index';

export interface ClientOptions {
  /**
   * Defaults to process.env['CLOUDFLARE_API_KEY'].
   */
  apiKey?: string | undefined;

  /**
   * Defaults to process.env['CLOUDFLARE_EMAIL'].
   */
  apiEmail?: string | undefined;

  /**
   * Defaults to process.env['CLOUDFLARE_API_TOKEN'].
   */
  apiToken?: string | undefined;

  userServiceKey: string;

  /**
   * Override the default base URL for the API, e.g., "https://api.example.com/v2/"
   *
   * Defaults to process.env['CLOUDFLARE_BASE_URL'].
   */
  baseURL?: string | null | undefined;

  /**
   * The maximum amount of time (in milliseconds) that the client should wait for a response
   * from the server before timing out a single request.
   *
   * Note that request timeouts are retried by default, so in a worst-case scenario you may wait
   * much longer than this timeout before the promise succeeds or fails.
   */
  timeout?: number;

  /**
   * An HTTP agent used to manage HTTP(S) connections.
   *
   * If not provided, an agent will be constructed by default in the Node.js environment,
   * otherwise no agent is used.
   */
  httpAgent?: Agent;

  /**
   * Specify a custom `fetch` function implementation.
   *
   * If not provided, we use `node-fetch` on Node.js and otherwise expect that `fetch` is
   * defined globally.
   */
  fetch?: Core.Fetch | undefined;

  /**
   * The maximum number of times that the client will retry a request in case of a
   * temporary failure, like a network error or a 5XX error from the server.
   *
   * @default 2
   */
  maxRetries?: number;

  /**
   * Default headers to include with every request to the API.
   *
   * These can be removed in individual requests by explicitly setting the
   * header to `undefined` or `null` in request options.
   */
  defaultHeaders?: Core.Headers;

  /**
   * Default query parameters to include with every request to the API.
   *
   * These can be removed in individual requests by explicitly setting the
   * param to `undefined` in request options.
   */
  defaultQuery?: Core.DefaultQuery;
}

/** API Client for interfacing with the Cloudflare API. */
export class Cloudflare extends Core.APIClient {
  apiKey: string;
  apiEmail: string;
  apiToken: string;
  userServiceKey: string;

  private _options: ClientOptions;

  /**
   * API Client for interfacing with the Cloudflare API.
   *
   * @param {string | undefined} [opts.apiKey=process.env['CLOUDFLARE_API_KEY'] ?? undefined]
   * @param {string | undefined} [opts.apiEmail=process.env['CLOUDFLARE_EMAIL'] ?? undefined]
   * @param {string | undefined} [opts.apiToken=process.env['CLOUDFLARE_API_TOKEN'] ?? undefined]
   * @param {string} opts.userServiceKey
   * @param {string} [opts.baseURL=process.env['CLOUDFLARE_BASE_URL'] ?? https://api.cloudflare.com/client/v4] - Override the default base URL for the API.
   * @param {number} [opts.timeout=1 minute] - The maximum amount of time (in milliseconds) the client will wait for a response before timing out.
   * @param {number} [opts.httpAgent] - An HTTP agent used to manage HTTP(s) connections.
   * @param {Core.Fetch} [opts.fetch] - Specify a custom `fetch` function implementation.
   * @param {number} [opts.maxRetries=2] - The maximum number of times the client will retry a request.
   * @param {Core.Headers} opts.defaultHeaders - Default headers to include with every request to the API.
   * @param {Core.DefaultQuery} opts.defaultQuery - Default query parameters to include with every request to the API.
   */
  constructor({
    baseURL = Core.readEnv('CLOUDFLARE_BASE_URL'),
    apiKey = Core.readEnv('CLOUDFLARE_API_KEY'),
    apiEmail = Core.readEnv('CLOUDFLARE_EMAIL'),
    apiToken = Core.readEnv('CLOUDFLARE_API_TOKEN'),
    userServiceKey,
    ...opts
  }: ClientOptions) {
    if (apiKey === undefined) {
      throw new Errors.CloudflareError(
        "The CLOUDFLARE_API_KEY environment variable is missing or empty; either provide it, or instantiate the Cloudflare client with an apiKey option, like new Cloudflare({ apiKey: '144c9defac04969c7bfad8efaa8ea194' }).",
      );
    }
    if (apiEmail === undefined) {
      throw new Errors.CloudflareError(
        "The CLOUDFLARE_EMAIL environment variable is missing or empty; either provide it, or instantiate the Cloudflare client with an apiEmail option, like new Cloudflare({ apiEmail: 'dev@cloudflare.com' }).",
      );
    }
    if (apiToken === undefined) {
      throw new Errors.CloudflareError(
        "The CLOUDFLARE_API_TOKEN environment variable is missing or empty; either provide it, or instantiate the Cloudflare client with an apiToken option, like new Cloudflare({ apiToken: 'Sn3lZJTBX6kkg7OdcBUAxOO963GEIyGQqnFTOFYY' }).",
      );
    }
    if (userServiceKey === undefined) {
      throw new Errors.CloudflareError(
        "Missing required client option userServiceKey; you need to instantiate the Cloudflare client with an userServiceKey option, like new Cloudflare({ userServiceKey: 'My User Service Key' }).",
      );
    }

    const options: ClientOptions = {
      apiKey,
      apiEmail,
      apiToken,
      userServiceKey,
      ...opts,
      baseURL: baseURL || `https://api.cloudflare.com/client/v4`,
    };

    super({
      baseURL: options.baseURL!,
      timeout: options.timeout ?? 60000 /* 1 minute */,
      httpAgent: options.httpAgent,
      maxRetries: options.maxRetries,
      fetch: options.fetch,
    });
    this._options = options;

    this.apiKey = apiKey;
    this.apiEmail = apiEmail;
    this.apiToken = apiToken;
    this.userServiceKey = userServiceKey;
  }

  accounts: API.Accounts = new API.Accounts(this);
  ips: API.IPs = new API.IPs(this);
  zones: API.Zones = new API.Zones(this);
  ai: API.AI = new API.AI(this);
  loadBalancers: API.LoadBalancers = new API.LoadBalancers(this);
  access: API.Access = new API.Access(this);
  dnsRecords: API.DNSRecords = new API.DNSRecords(this);
  emails: API.Emails = new API.Emails(this);
  accountMembers: API.AccountMembers = new API.AccountMembers(this);
  tunnels: API.Tunnels = new API.Tunnels(this);
  d1: API.D1 = new API.D1(this);
  dex: API.Dex = new API.Dex(this);
  r2: API.R2 = new API.R2(this);
  stream: API.Stream = new API.Stream(this);
  teamnet: API.Teamnet = new API.Teamnet(this);
  warpConnector: API.WarpConnector = new API.WarpConnector(this);
  dispatchers: API.Dispatchers = new API.Dispatchers(this);
  workersForPlatforms: API.WorkersForPlatforms = new API.WorkersForPlatforms(this);
  workerDomains: API.WorkerDomains = new API.WorkerDomains(this);
  workerScripts: API.WorkerScripts = new API.WorkerScripts(this);
  zerotrust: API.Zerotrust = new API.Zerotrust(this);
  addressing: API.Addressing = new API.Addressing(this);
  challenges: API.Challenges = new API.Challenges(this);
  hyperdrive: API.Hyperdrive = new API.Hyperdrive(this);
  intel: API.Intel = new API.Intel(this);
  rum: API.Rum = new API.Rum(this);
  vectorize: API.Vectorize = new API.Vectorize(this);
  vectorizeIndexes: API.VectorizeIndexes = new API.VectorizeIndexes(this);
  urlScanner: API.URLScanner = new API.URLScanner(this);
  radar: API.Radar = new API.Radar(this);
  botManagements: API.BotManagements = new API.BotManagements(this);
  cacheReserves: API.CacheReserves = new API.CacheReserves(this);
  originPostQuantumEncryptions: API.OriginPostQuantumEncryptions = new API.OriginPostQuantumEncryptions(this);
  cache: API.Cache = new API.Cache(this);
  firewall: API.Firewall = new API.Firewall(this);
  zaraz: API.Zaraz = new API.Zaraz(this);
  speedAPI: API.SpeedAPI = new API.SpeedAPI(this);
  dcvDelegation: API.DcvDelegation = new API.DcvDelegation(this);
  hostnames: API.Hostnames = new API.Hostnames(this);
  logpush: API.Logpush = new API.Logpush(this);
  hold: API.Hold = new API.Hold(this);
  pageShield: API.PageShield = new API.PageShield(this);
  fontSettings: API.FontSettings = new API.FontSettings(this);
  snippets: API.Snippets = new API.Snippets(this);
  dlp: API.Dlp = new API.Dlp(this);
  gateway: API.Gateway = new API.Gateway(this);
  accessTags: API.AccessTags = new API.AccessTags(this);

  protected override defaultQuery(): Core.DefaultQuery | undefined {
    return this._options.defaultQuery;
  }

  protected override defaultHeaders(opts: Core.FinalRequestOptions): Core.Headers {
    return {
      ...super.defaultHeaders(opts),
      'x-auth-email': this.apiEmail,
      ...this._options.defaultHeaders,
    };
  }

  protected override authHeaders(opts: Core.FinalRequestOptions): Core.Headers {
    const apiEmailAuth = this.apiEmailAuth(opts);
    const apiKeyAuth = this.apiKeyAuth(opts);
    const apiTokenAuth = this.apiTokenAuth(opts);
    const userServiceKeyAuth = this.userServiceKeyAuth(opts);
    return {};
  }

  protected apiEmailAuth(opts: Core.FinalRequestOptions): Core.Headers {
    return { 'X-Auth-Email': this.apiEmail };
  }

  protected apiKeyAuth(opts: Core.FinalRequestOptions): Core.Headers {
    return { 'X-Auth-Key': this.apiKey };
  }

  protected apiTokenAuth(opts: Core.FinalRequestOptions): Core.Headers {
    return { Authorization: `Bearer ${this.apiToken}` };
  }

  protected userServiceKeyAuth(opts: Core.FinalRequestOptions): Core.Headers {
    return { 'X-Auth-User-Service-Key': this.userServiceKey };
  }

  protected override stringifyQuery(query: Record<string, unknown>): string {
    return qs.stringify(query, { arrayFormat: 'comma' });
  }

  static Cloudflare = this;

  static CloudflareError = Errors.CloudflareError;
  static APIError = Errors.APIError;
  static APIConnectionError = Errors.APIConnectionError;
  static APIConnectionTimeoutError = Errors.APIConnectionTimeoutError;
  static APIUserAbortError = Errors.APIUserAbortError;
  static NotFoundError = Errors.NotFoundError;
  static ConflictError = Errors.ConflictError;
  static RateLimitError = Errors.RateLimitError;
  static BadRequestError = Errors.BadRequestError;
  static AuthenticationError = Errors.AuthenticationError;
  static InternalServerError = Errors.InternalServerError;
  static PermissionDeniedError = Errors.PermissionDeniedError;
  static UnprocessableEntityError = Errors.UnprocessableEntityError;
}

export const {
  CloudflareError,
  APIError,
  APIConnectionError,
  APIConnectionTimeoutError,
  APIUserAbortError,
  NotFoundError,
  ConflictError,
  RateLimitError,
  BadRequestError,
  AuthenticationError,
  InternalServerError,
  PermissionDeniedError,
  UnprocessableEntityError,
} = Errors;

export import toFile = Uploads.toFile;
export import fileFromPath = Uploads.fileFromPath;

export namespace Cloudflare {
  // Helper functions
  export import toFile = Uploads.toFile;
  export import fileFromPath = Uploads.fileFromPath;

  export import RequestOptions = Core.RequestOptions;

  export import Accounts = API.Accounts;
  export import AccountListResponse = API.AccountListResponse;
  export import AccountListParams = API.AccountListParams;

  export import IPs = API.IPs;
  export import IPListResponse = API.IPListResponse;
  export import IPListParams = API.IPListParams;

  export import Zones = API.Zones;
  export import ZoneCreateResponse = API.ZoneCreateResponse;
  export import ZoneListResponse = API.ZoneListResponse;
  export import ZoneCreateParams = API.ZoneCreateParams;
  export import ZoneListParams = API.ZoneListParams;

  export import AI = API.AI;
  export import AIRunModelResponse = API.AIRunModelResponse;
  export import AIRunModelParams = API.AIRunModelParams;

  export import LoadBalancers = API.LoadBalancers;
  export import LoadBalancerCreateResponse = API.LoadBalancerCreateResponse;
  export import LoadBalancerRetrieveResponse = API.LoadBalancerRetrieveResponse;
  export import LoadBalancerUpdateResponse = API.LoadBalancerUpdateResponse;
  export import LoadBalancerListResponse = API.LoadBalancerListResponse;
  export import LoadBalancerDeleteResponse = API.LoadBalancerDeleteResponse;
  export import LoadBalancerCreateParams = API.LoadBalancerCreateParams;
  export import LoadBalancerUpdateParams = API.LoadBalancerUpdateParams;

  export import Access = API.Access;

  export import DNSRecords = API.DNSRecords;
  export import DNSRecordRetrieveResponse = API.DNSRecordRetrieveResponse;
  export import DNSRecordUpdateResponse = API.DNSRecordUpdateResponse;
  export import DNSRecordDeleteResponse = API.DNSRecordDeleteResponse;
  export import DNSRecordDNSRecordsForAZoneCreateDNSRecordResponse = API.DNSRecordDNSRecordsForAZoneCreateDNSRecordResponse;
  export import DNSRecordDNSRecordsForAZoneListDNSRecordsResponse = API.DNSRecordDNSRecordsForAZoneListDNSRecordsResponse;
  export import DNSRecordUpdateParams = API.DNSRecordUpdateParams;
  export import DNSRecordDNSRecordsForAZoneCreateDNSRecordParams = API.DNSRecordDNSRecordsForAZoneCreateDNSRecordParams;
  export import DNSRecordDNSRecordsForAZoneListDNSRecordsParams = API.DNSRecordDNSRecordsForAZoneListDNSRecordsParams;

  export import Emails = API.Emails;

  export import AccountMembers = API.AccountMembers;

  export import Tunnels = API.Tunnels;
  export import TunnelRetrieveResponse = API.TunnelRetrieveResponse;
  export import TunnelDeleteResponse = API.TunnelDeleteResponse;
  export import TunnelArgoTunnelCreateAnArgoTunnelResponse = API.TunnelArgoTunnelCreateAnArgoTunnelResponse;
  export import TunnelArgoTunnelListArgoTunnelsResponse = API.TunnelArgoTunnelListArgoTunnelsResponse;
  export import TunnelDeleteParams = API.TunnelDeleteParams;
  export import TunnelArgoTunnelCreateAnArgoTunnelParams = API.TunnelArgoTunnelCreateAnArgoTunnelParams;
  export import TunnelArgoTunnelListArgoTunnelsParams = API.TunnelArgoTunnelListArgoTunnelsParams;

  export import D1 = API.D1;

  export import Dex = API.Dex;

  export import R2 = API.R2;

  export import Stream = API.Stream;

  export import Teamnet = API.Teamnet;

  export import WarpConnector = API.WarpConnector;
  export import WarpConnectorCreateResponse = API.WarpConnectorCreateResponse;
  export import WarpConnectorRetrieveResponse = API.WarpConnectorRetrieveResponse;
  export import WarpConnectorUpdateResponse = API.WarpConnectorUpdateResponse;
  export import WarpConnectorListResponse = API.WarpConnectorListResponse;
  export import WarpConnectorDeleteResponse = API.WarpConnectorDeleteResponse;
  export import WarpConnectorCreateParams = API.WarpConnectorCreateParams;
  export import WarpConnectorUpdateParams = API.WarpConnectorUpdateParams;
  export import WarpConnectorListParams = API.WarpConnectorListParams;
  export import WarpConnectorDeleteParams = API.WarpConnectorDeleteParams;

  export import Dispatchers = API.Dispatchers;

  export import WorkersForPlatforms = API.WorkersForPlatforms;

  export import WorkerDomains = API.WorkerDomains;
  export import WorkerDomainRetrieveResponse = API.WorkerDomainRetrieveResponse;

  export import WorkerScripts = API.WorkerScripts;

  export import Zerotrust = API.Zerotrust;

  export import Addressing = API.Addressing;

  export import Challenges = API.Challenges;

  export import Hyperdrive = API.Hyperdrive;

  export import Intel = API.Intel;

  export import Rum = API.Rum;

  export import Vectorize = API.Vectorize;

  export import VectorizeIndexes = API.VectorizeIndexes;
  export import VectorizeIndexCreateResponse = API.VectorizeIndexCreateResponse;
  export import VectorizeIndexRetrieveResponse = API.VectorizeIndexRetrieveResponse;
  export import VectorizeIndexUpdateResponse = API.VectorizeIndexUpdateResponse;
  export import VectorizeIndexDeleteResponse = API.VectorizeIndexDeleteResponse;
  export import VectorizeIndexDeleteByIDsResponse = API.VectorizeIndexDeleteByIDsResponse;
  export import VectorizeIndexGetByIDsResponse = API.VectorizeIndexGetByIDsResponse;
  export import VectorizeIndexInsertResponse = API.VectorizeIndexInsertResponse;
  export import VectorizeIndexQueryResponse = API.VectorizeIndexQueryResponse;
  export import VectorizeIndexUpsertResponse = API.VectorizeIndexUpsertResponse;
  export import VectorizeIndexCreateParams = API.VectorizeIndexCreateParams;
  export import VectorizeIndexUpdateParams = API.VectorizeIndexUpdateParams;
  export import VectorizeIndexDeleteByIDsParams = API.VectorizeIndexDeleteByIDsParams;
  export import VectorizeIndexGetByIDsParams = API.VectorizeIndexGetByIDsParams;
  export import VectorizeIndexInsertParams = API.VectorizeIndexInsertParams;
  export import VectorizeIndexQueryParams = API.VectorizeIndexQueryParams;
  export import VectorizeIndexUpsertParams = API.VectorizeIndexUpsertParams;

  export import URLScanner = API.URLScanner;
  export import URLScannerScanResponse = API.URLScannerScanResponse;
  export import URLScannerScanParams = API.URLScannerScanParams;

  export import Radar = API.Radar;

  export import BotManagements = API.BotManagements;
  export import BotManagementRetrieveResponse = API.BotManagementRetrieveResponse;
  export import BotManagementUpdateResponse = API.BotManagementUpdateResponse;
  export import BotManagementUpdateParams = API.BotManagementUpdateParams;

  export import CacheReserves = API.CacheReserves;
  export import CacheReserveCreateResponse = API.CacheReserveCreateResponse;
  export import CacheReserveClearResponse = API.CacheReserveClearResponse;

  export import OriginPostQuantumEncryptions = API.OriginPostQuantumEncryptions;
  export import OriginPostQuantumEncryptionRetrieveResponse = API.OriginPostQuantumEncryptionRetrieveResponse;
  export import OriginPostQuantumEncryptionUpdateResponse = API.OriginPostQuantumEncryptionUpdateResponse;
  export import OriginPostQuantumEncryptionUpdateParams = API.OriginPostQuantumEncryptionUpdateParams;

  export import Cache = API.Cache;
  export import CacheRegionalTieredCachesResponse = API.CacheRegionalTieredCachesResponse;
  export import CacheUpdateRegionalTieredCacheResponse = API.CacheUpdateRegionalTieredCacheResponse;
  export import CacheUpdateRegionalTieredCacheParams = API.CacheUpdateRegionalTieredCacheParams;

  export import Firewall = API.Firewall;

  export import Zaraz = API.Zaraz;
  export import ZarazWorkflowUpdateResponse = API.ZarazWorkflowUpdateResponse;
  export import ZarazWorkflowUpdateParams = API.ZarazWorkflowUpdateParams;

  export import SpeedAPI = API.SpeedAPI;
  export import SpeedAPIAvailabilitiesListResponse = API.SpeedAPIAvailabilitiesListResponse;
  export import SpeedAPIPagesListResponse = API.SpeedAPIPagesListResponse;
  export import SpeedAPIScheduleDeleteResponse = API.SpeedAPIScheduleDeleteResponse;
  export import SpeedAPIScheduleRetrieveResponse = API.SpeedAPIScheduleRetrieveResponse;
  export import SpeedAPITestsCreateResponse = API.SpeedAPITestsCreateResponse;
  export import SpeedAPITestsDeleteResponse = API.SpeedAPITestsDeleteResponse;
  export import SpeedAPITestsListResponse = API.SpeedAPITestsListResponse;
  export import SpeedAPITestsRetrieveResponse = API.SpeedAPITestsRetrieveResponse;
  export import SpeedAPITrendsListResponse = API.SpeedAPITrendsListResponse;
  export import SpeedAPIScheduleDeleteParams = API.SpeedAPIScheduleDeleteParams;
  export import SpeedAPIScheduleRetrieveParams = API.SpeedAPIScheduleRetrieveParams;
  export import SpeedAPITestsCreateParams = API.SpeedAPITestsCreateParams;
  export import SpeedAPITestsDeleteParams = API.SpeedAPITestsDeleteParams;
  export import SpeedAPITestsListParams = API.SpeedAPITestsListParams;
  export import SpeedAPITrendsListParams = API.SpeedAPITrendsListParams;

  export import DcvDelegation = API.DcvDelegation;

  export import Hostnames = API.Hostnames;

  export import Logpush = API.Logpush;

  export import Hold = API.Hold;
  export import HoldRetrieveResponse = API.HoldRetrieveResponse;
  export import HoldEnforceResponse = API.HoldEnforceResponse;
  export import HoldRemoveResponse = API.HoldRemoveResponse;
  export import HoldEnforceParams = API.HoldEnforceParams;
  export import HoldRemoveParams = API.HoldRemoveParams;

  export import PageShield = API.PageShield;

  export import FontSettings = API.FontSettings;

  export import Snippets = API.Snippets;
  export import SnippetRetrieveResponse = API.SnippetRetrieveResponse;
  export import SnippetUpdateResponse = API.SnippetUpdateResponse;
  export import SnippetListResponse = API.SnippetListResponse;
  export import SnippetDeleteResponse = API.SnippetDeleteResponse;
  export import SnippetUpdateParams = API.SnippetUpdateParams;

  export import Dlp = API.Dlp;

  export import Gateway = API.Gateway;

  export import AccessTags = API.AccessTags;
  export import AccessTagCreateResponse = API.AccessTagCreateResponse;
  export import AccessTagRetrieveResponse = API.AccessTagRetrieveResponse;
  export import AccessTagUpdateResponse = API.AccessTagUpdateResponse;
  export import AccessTagDeleteResponse = API.AccessTagDeleteResponse;
  export import AccessTagCreateParams = API.AccessTagCreateParams;
  export import AccessTagUpdateParams = API.AccessTagUpdateParams;
}

export default Cloudflare;