cloudflare
Version:
The official TypeScript library for the Cloudflare API
570 lines (441 loc) • 19.3 kB
text/typescript
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
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 Pagination from "./pagination";
import * as API from "./resources/index";
export interface ClientOptions {
/**
* Defaults to process.env['CLOUDFLARE_API_TOKEN'].
*/
apiToken?: string | null | undefined;
/**
* Defaults to process.env['CLOUDFLARE_API_KEY'].
*/
apiKey?: string | null | undefined;
/**
* Defaults to process.env['CLOUDFLARE_EMAIL'].
*/
apiEmail?: string | null | undefined;
/**
* Defaults to process.env['CLOUDFLARE_API_USER_SERVICE_KEY'].
*/
userServiceKey?: string | null | undefined;
/**
* 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 {
apiToken: string | null;
apiKey: string | null;
apiEmail: string | null;
userServiceKey: string | null;
private _options: ClientOptions;
/**
* API Client for interfacing with the Cloudflare API.
*
* @param {string | null | undefined} [opts.apiToken=process.env['CLOUDFLARE_API_TOKEN'] ?? null]
* @param {string | null | undefined} [opts.apiKey=process.env['CLOUDFLARE_API_KEY'] ?? null]
* @param {string | null | undefined} [opts.apiEmail=process.env['CLOUDFLARE_EMAIL'] ?? null]
* @param {string | null | undefined} [opts.userServiceKey=process.env['CLOUDFLARE_API_USER_SERVICE_KEY'] ?? null]
* @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'),
apiToken = Core.readEnv('CLOUDFLARE_API_TOKEN') ?? null,
apiKey = Core.readEnv('CLOUDFLARE_API_KEY') ?? null,
apiEmail = Core.readEnv('CLOUDFLARE_EMAIL') ?? null,
userServiceKey = Core.readEnv('CLOUDFLARE_API_USER_SERVICE_KEY') ?? null,
...opts
}: ClientOptions = {}) {
const options: ClientOptions = {
apiToken,
apiKey,
apiEmail,
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.apiToken = apiToken;
this.apiKey = apiKey;
this.apiEmail = apiEmail;
this.userServiceKey = userServiceKey;
}
accounts: API.Accounts = new API.Accounts(this);
originCACertificates: API.OriginCACertificates = new API.OriginCACertificates(this);
ips: API.IPs = new API.IPs(this);
memberships: API.Memberships = new API.Memberships(this);
user: API.User = new API.User(this);
zones: API.Zones = new API.Zones(this);
loadBalancers: API.LoadBalancers = new API.LoadBalancers(this);
cache: API.Cache = new API.Cache(this);
ssl: API.SSL = new API.SSL(this);
subscriptions: API.Subscriptions = new API.Subscriptions(this);
acm: API.ACM = new API.ACM(this);
argo: API.Argo = new API.Argo(this);
plans: API.Plans = new API.Plans(this);
ratePlans: API.RatePlans = new API.RatePlans(this);
certificateAuthorities: API.CertificateAuthorities = new API.CertificateAuthorities(this);
clientCertificates: API.ClientCertificates = new API.ClientCertificates(this);
customCertificates: API.CustomCertificates = new API.CustomCertificates(this);
customHostnames: API.CustomHostnames = new API.CustomHostnames(this);
customNameservers: API.CustomNameservers = new API.CustomNameservers(this);
dns: API.DNS = new API.DNS(this);
dnssec: API.DNSSECResource = new API.DNSSECResource(this);
emailRouting: API.EmailRouting = new API.EmailRouting(this);
filters: API.Filters = new API.Filters(this);
firewall: API.Firewall = new API.Firewall(this);
healthchecks: API.Healthchecks = new API.Healthchecks(this);
keylessCertificates: API.KeylessCertificates = new API.KeylessCertificates(this);
logpush: API.Logpush = new API.Logpush(this);
logs: API.Logs = new API.Logs(this);
originTLSClientAuth: API.OriginTLSClientAuth = new API.OriginTLSClientAuth(this);
pagerules: API.Pagerules = new API.Pagerules(this);
rateLimits: API.RateLimits = new API.RateLimits(this);
secondaryDNS: API.SecondaryDNS = new API.SecondaryDNS(this);
waitingRooms: API.WaitingRooms = new API.WaitingRooms(this);
web3: API.Web3 = new API.Web3(this);
workers: API.Workers = new API.Workers(this);
kv: API.KV = new API.KV(this);
durableObjects: API.DurableObjects = new API.DurableObjects(this);
queues: API.Queues = new API.Queues(this);
managedHeaders: API.ManagedHeaders = new API.ManagedHeaders(this);
pageShield: API.PageShield = new API.PageShield(this);
rulesets: API.Rulesets = new API.Rulesets(this);
urlNormalization: API.URLNormalization = new API.URLNormalization(this);
spectrum: API.Spectrum = new API.Spectrum(this);
addressing: API.Addressing = new API.Addressing(this);
auditLogs: API.AuditLogs = new API.AuditLogs(this);
billing: API.Billing = new API.Billing(this);
brandProtection: API.BrandProtection = new API.BrandProtection(this);
diagnostics: API.Diagnostics = new API.Diagnostics(this);
images: API.Images = new API.Images(this);
intel: API.Intel = new API.Intel(this);
magicTransit: API.MagicTransit = new API.MagicTransit(this);
magicNetworkMonitoring: API.MagicNetworkMonitoring = new API.MagicNetworkMonitoring(this);
mtlsCertificates: API.MTLSCertificates = new API.MTLSCertificates(this);
pages: API.Pages = new API.Pages(this);
pcaps: API.PCAPs = new API.PCAPs(this);
registrar: API.Registrar = new API.Registrar(this);
requestTracers: API.RequestTracers = new API.RequestTracers(this);
rules: API.Rules = new API.Rules(this);
storage: API.Storage = new API.Storage(this);
stream: API.Stream = new API.Stream(this);
alerting: API.Alerting = new API.Alerting(this);
d1: API.D1Resource = new API.D1Resource(this);
r2: API.R2 = new API.R2(this);
warpConnector: API.WARPConnector = new API.WARPConnector(this);
workersForPlatforms: API.WorkersForPlatforms = new API.WorkersForPlatforms(this);
zeroTrust: API.ZeroTrust = new API.ZeroTrust(this);
challenges: API.Challenges = new API.Challenges(this);
hyperdrive: API.HyperdriveResource = new API.HyperdriveResource(this);
rum: API.RUM = new API.RUM(this);
vectorize: API.Vectorize = new API.Vectorize(this);
urlScanner: API.URLScanner = new API.URLScanner(this);
radar: API.Radar = new API.Radar(this);
botManagement: API.BotManagement = new API.BotManagement(this);
originPostQuantumEncryption: API.OriginPostQuantumEncryption = new API.OriginPostQuantumEncryption(this);
speed: API.Speed = new API.Speed(this);
dcvDelegation: API.DCVDelegation = new API.DCVDelegation(this);
hostnames: API.Hostnames = new API.Hostnames(this);
snippets: API.Snippets = new API.Snippets(this);
calls: API.Calls = new API.Calls(this);
cloudforceOne: API.CloudforceOne = new API.CloudforceOne(this);
eventNotifications: API.EventNotifications = new API.EventNotifications(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-Key': this.apiKey,
'X-Auth-Email': this.apiEmail,
...this._options.defaultHeaders,
};
}
protected override validateHeaders(headers: Core.Headers, customHeaders: Core.Headers) {
if (this.apiEmail && headers['x-auth-email']) {
return;
}
if (customHeaders['x-auth-email'] === null) {
return;
}
if (this.apiKey && headers['x-auth-key']) {
return;
}
if (customHeaders['x-auth-key'] === null) {
return;
}
if (this.apiToken && headers['authorization']) {
return;
}
if (customHeaders['authorization'] === null) {
return;
}
if (this.userServiceKey && headers['x-auth-user-service-key']) {
return;
}
if (customHeaders['x-auth-user-service-key'] === null) {
return;
}
throw new Error(
'Could not resolve authentication method. Expected one of apiEmail, apiKey, apiToken or userServiceKey to be set. Or for one of the "X-Auth-Email", "X-Auth-Key", "Authorization" or "X-Auth-User-Service-Key" headers to be explicitly omitted',
);
}
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);
if (
apiEmailAuth != null &&
!Core.isEmptyObj(apiEmailAuth) &&
apiKeyAuth != null &&
!Core.isEmptyObj(apiKeyAuth)
) {
return { ...apiEmailAuth, ...apiKeyAuth };
}
if (apiTokenAuth != null && !Core.isEmptyObj(apiTokenAuth)) {
return apiTokenAuth;
}
if (userServiceKeyAuth != null && !Core.isEmptyObj(userServiceKeyAuth)) {
return userServiceKeyAuth;
}
return {};
}
protected apiEmailAuth(opts: Core.FinalRequestOptions): Core.Headers {
if (this.apiEmail == null) {
return {};
}
return { 'X-Auth-Email': this.apiEmail };
}
protected apiKeyAuth(opts: Core.FinalRequestOptions): Core.Headers {
if (this.apiKey == null) {
return {};
}
return { 'X-Auth-Key': this.apiKey };
}
protected apiTokenAuth(opts: Core.FinalRequestOptions): Core.Headers {
if (this.apiToken == null) {
return {};
}
return { Authorization: `Bearer ${this.apiToken}` };
}
protected userServiceKeyAuth(opts: Core.FinalRequestOptions): Core.Headers {
if (this.userServiceKey == null) {
return {};
}
return { 'X-Auth-User-Service-Key': this.userServiceKey };
}
protected override stringifyQuery(query: Record<string, unknown>): string {
return qs.stringify(query, { arrayFormat: 'repeat' });
}
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;
static toFile = Uploads.toFile;
static fileFromPath = Uploads.fileFromPath;
}
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 {
export import RequestOptions = Core.RequestOptions;
export import V4PagePagination = Pagination.V4PagePagination;
export import V4PagePaginationParams = Pagination.V4PagePaginationParams;
export import V4PagePaginationResponse = Pagination.V4PagePaginationResponse;
export import V4PagePaginationArray = Pagination.V4PagePaginationArray;
export import V4PagePaginationArrayParams = Pagination.V4PagePaginationArrayParams;
export import V4PagePaginationArrayResponse = Pagination.V4PagePaginationArrayResponse;
export import CursorPagination = Pagination.CursorPagination;
export import CursorPaginationParams = Pagination.CursorPaginationParams;
export import CursorPaginationResponse = Pagination.CursorPaginationResponse;
export import CursorLimitPagination = Pagination.CursorLimitPagination;
export import CursorLimitPaginationParams = Pagination.CursorLimitPaginationParams;
export import CursorLimitPaginationResponse = Pagination.CursorLimitPaginationResponse;
export import SinglePage = Pagination.SinglePage;
export import SinglePageResponse = Pagination.SinglePageResponse;
export import Accounts = API.Accounts;
export import OriginCACertificates = API.OriginCACertificates;
export import IPs = API.IPs;
export import Memberships = API.Memberships;
export import User = API.User;
export import Zones = API.Zones;
export import LoadBalancers = API.LoadBalancers;
export import Cache = API.Cache;
export import SSL = API.SSL;
export import Subscriptions = API.Subscriptions;
export import ACM = API.ACM;
export import Argo = API.Argo;
export import Plans = API.Plans;
export import RatePlans = API.RatePlans;
export import CertificateAuthorities = API.CertificateAuthorities;
export import ClientCertificates = API.ClientCertificates;
export import CustomCertificates = API.CustomCertificates;
export import CustomHostnames = API.CustomHostnames;
export import CustomNameservers = API.CustomNameservers;
export import DNS = API.DNS;
export import DNSSECResource = API.DNSSECResource;
export import EmailRouting = API.EmailRouting;
export import Filters = API.Filters;
export import Firewall = API.Firewall;
export import Healthchecks = API.Healthchecks;
export import KeylessCertificates = API.KeylessCertificates;
export import Logpush = API.Logpush;
export import Logs = API.Logs;
export import OriginTLSClientAuth = API.OriginTLSClientAuth;
export import Pagerules = API.Pagerules;
export import RateLimits = API.RateLimits;
export import SecondaryDNS = API.SecondaryDNS;
export import WaitingRooms = API.WaitingRooms;
export import Web3 = API.Web3;
export import Workers = API.Workers;
export import KV = API.KV;
export import DurableObjects = API.DurableObjects;
export import Queues = API.Queues;
export import ManagedHeaders = API.ManagedHeaders;
export import PageShield = API.PageShield;
export import Rulesets = API.Rulesets;
export import URLNormalization = API.URLNormalization;
export import Spectrum = API.Spectrum;
export import Addressing = API.Addressing;
export import AuditLogs = API.AuditLogs;
export import Billing = API.Billing;
export import BrandProtection = API.BrandProtection;
export import Diagnostics = API.Diagnostics;
export import Images = API.Images;
export import Intel = API.Intel;
export import MagicTransit = API.MagicTransit;
export import MagicNetworkMonitoring = API.MagicNetworkMonitoring;
export import MTLSCertificates = API.MTLSCertificates;
export import Pages = API.Pages;
export import PCAPs = API.PCAPs;
export import Registrar = API.Registrar;
export import RequestTracers = API.RequestTracers;
export import Rules = API.Rules;
export import Storage = API.Storage;
export import Stream = API.Stream;
export import Alerting = API.Alerting;
export import D1Resource = API.D1Resource;
export import R2 = API.R2;
export import WARPConnector = API.WARPConnector;
export import WorkersForPlatforms = API.WorkersForPlatforms;
export import ZeroTrust = API.ZeroTrust;
export import Challenges = API.Challenges;
export import HyperdriveResource = API.HyperdriveResource;
export import RUM = API.RUM;
export import Vectorize = API.Vectorize;
export import URLScanner = API.URLScanner;
export import Radar = API.Radar;
export import BotManagement = API.BotManagement;
export import OriginPostQuantumEncryption = API.OriginPostQuantumEncryption;
export import Speed = API.Speed;
export import DCVDelegation = API.DCVDelegation;
export import Hostnames = API.Hostnames;
export import Snippets = API.Snippets;
export import Calls = API.Calls;
export import CloudforceOne = API.CloudforceOne;
export import EventNotifications = API.EventNotifications;
export import ASN = API.ASN;
export import AuditLog = API.AuditLog;
export import CloudflareTunnel = API.CloudflareTunnel;
export import ErrorData = API.ErrorData;
export import Identifier = API.Identifier;
export import LoadBalancerPreview = API.LoadBalancerPreview;
export import Member = API.Member;
export import PaginationInfo = API.PaginationInfo;
export import Permission = API.Permission;
export import PermissionGrant = API.PermissionGrant;
export import ResponseInfo = API.ResponseInfo;
export import Result = API.Result;
export import Role = API.Role;
}
export default Cloudflare;