feat(core): Update dependencies, enhance documentation, and improve error handling with clearer API usage examples
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import * as plugins from './cloudflare.plugins.js';
|
||||
import { logger } from './cloudflare.logger.js';
|
||||
import * as interfaces from './interfaces/index.js';
|
||||
import type { CloudflareAccount } from './cloudflare.classes.account.js';
|
||||
|
||||
export class CloudflareZone {
|
||||
// Zone properties
|
||||
@@ -23,7 +24,7 @@ export class CloudflareZone {
|
||||
public permissions: string[];
|
||||
public plan: interfaces.ICflareZone['plan'];
|
||||
|
||||
private cfAccount: any; // Will be set when created through a manager
|
||||
private cfAccount?: CloudflareAccount; // Will be set when created through a manager
|
||||
|
||||
/**
|
||||
* Create a CloudflareZone instance from an API object
|
||||
@@ -33,7 +34,7 @@ export class CloudflareZone {
|
||||
*/
|
||||
public static createFromApiObject(
|
||||
apiObject: plugins.ICloudflareTypes['Zone'],
|
||||
cfAccount?: any
|
||||
cfAccount?: CloudflareAccount
|
||||
): CloudflareZone {
|
||||
const cloudflareZone = new CloudflareZone();
|
||||
Object.assign(cloudflareZone, apiObject);
|
||||
@@ -60,7 +61,7 @@ export class CloudflareZone {
|
||||
* @returns Updated zone
|
||||
*/
|
||||
public async enableDevelopmentMode(
|
||||
cfAccount?: any,
|
||||
cfAccount?: CloudflareAccount,
|
||||
duration: number = 10800
|
||||
): Promise<CloudflareZone> {
|
||||
const account = cfAccount || this.cfAccount;
|
||||
@@ -70,13 +71,20 @@ export class CloudflareZone {
|
||||
|
||||
logger.log('info', `Enabling development mode for zone ${this.name}`);
|
||||
|
||||
const response = await account.request('PATCH', `/zones/${this.id}/settings/development_mode`, {
|
||||
value: 'on',
|
||||
time: duration
|
||||
});
|
||||
|
||||
this.development_mode = duration;
|
||||
return this;
|
||||
try {
|
||||
// The official client doesn't have a direct method for development mode
|
||||
// We'll use the request method for this specific case
|
||||
await account.request('PATCH', `/zones/${this.id}/settings/development_mode`, {
|
||||
value: 'on',
|
||||
time: duration
|
||||
});
|
||||
|
||||
this.development_mode = duration;
|
||||
return this;
|
||||
} catch (error) {
|
||||
logger.log('error', `Failed to enable development mode: ${error.message}`);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -84,7 +92,7 @@ export class CloudflareZone {
|
||||
* @param cfAccount Cloudflare account to use if not already set
|
||||
* @returns Updated zone
|
||||
*/
|
||||
public async disableDevelopmentMode(cfAccount?: any): Promise<CloudflareZone> {
|
||||
public async disableDevelopmentMode(cfAccount?: CloudflareAccount): Promise<CloudflareZone> {
|
||||
const account = cfAccount || this.cfAccount;
|
||||
if (!account) {
|
||||
throw new Error('CloudflareAccount is required to disable development mode');
|
||||
@@ -92,12 +100,19 @@ export class CloudflareZone {
|
||||
|
||||
logger.log('info', `Disabling development mode for zone ${this.name}`);
|
||||
|
||||
const response = await account.request('PATCH', `/zones/${this.id}/settings/development_mode`, {
|
||||
value: 'off'
|
||||
});
|
||||
|
||||
this.development_mode = 0;
|
||||
return this;
|
||||
try {
|
||||
// The official client doesn't have a direct method for development mode
|
||||
// We'll use the request method for this specific case
|
||||
await account.request('PATCH', `/zones/${this.id}/settings/development_mode`, {
|
||||
value: 'off'
|
||||
});
|
||||
|
||||
this.development_mode = 0;
|
||||
return this;
|
||||
} catch (error) {
|
||||
logger.log('error', `Failed to disable development mode: ${error.message}`);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -105,7 +120,7 @@ export class CloudflareZone {
|
||||
* @param cfAccount Cloudflare account to use if not already set
|
||||
* @returns True if successful
|
||||
*/
|
||||
public async purgeCache(cfAccount?: any): Promise<boolean> {
|
||||
public async purgeCache(cfAccount?: CloudflareAccount): Promise<boolean> {
|
||||
const account = cfAccount || this.cfAccount;
|
||||
if (!account) {
|
||||
throw new Error('CloudflareAccount is required to purge cache');
|
||||
@@ -114,7 +129,8 @@ export class CloudflareZone {
|
||||
logger.log('info', `Purging all cache for zone ${this.name}`);
|
||||
|
||||
try {
|
||||
await account.request('POST', `/zones/${this.id}/purge_cache`, {
|
||||
await account.apiAccount.cache.purge({
|
||||
zone_id: this.id,
|
||||
purge_everything: true
|
||||
});
|
||||
return true;
|
||||
@@ -130,7 +146,7 @@ export class CloudflareZone {
|
||||
* @param cfAccount Cloudflare account to use if not already set
|
||||
* @returns True if successful
|
||||
*/
|
||||
public async purgeUrls(urls: string[], cfAccount?: any): Promise<boolean> {
|
||||
public async purgeUrls(urls: string[], cfAccount?: CloudflareAccount): Promise<boolean> {
|
||||
const account = cfAccount || this.cfAccount;
|
||||
if (!account) {
|
||||
throw new Error('CloudflareAccount is required to purge URLs');
|
||||
@@ -143,7 +159,8 @@ export class CloudflareZone {
|
||||
logger.log('info', `Purging ${urls.length} URLs from cache for zone ${this.name}`);
|
||||
|
||||
try {
|
||||
await account.request('POST', `/zones/${this.id}/purge_cache`, {
|
||||
await account.apiAccount.cache.purge({
|
||||
zone_id: this.id,
|
||||
files: urls
|
||||
});
|
||||
return true;
|
||||
@@ -174,4 +191,42 @@ export class CloudflareZone {
|
||||
// If they're different, and current nameservers are Cloudflare's
|
||||
return this.name_servers.some(ns => ns.includes('cloudflare'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update zone settings
|
||||
* @param settings Settings to update
|
||||
* @param cfAccount Cloudflare account to use if not already set
|
||||
* @returns Updated zone
|
||||
*/
|
||||
public async updateSettings(
|
||||
settings: Partial<{
|
||||
paused: boolean;
|
||||
plan: { id: string };
|
||||
vanity_name_servers: string[];
|
||||
type: 'full' | 'partial' | 'secondary';
|
||||
}>,
|
||||
cfAccount?: CloudflareAccount
|
||||
): Promise<CloudflareZone> {
|
||||
const account = cfAccount || this.cfAccount;
|
||||
if (!account) {
|
||||
throw new Error('CloudflareAccount is required to update zone settings');
|
||||
}
|
||||
|
||||
logger.log('info', `Updating settings for zone ${this.name}`);
|
||||
|
||||
try {
|
||||
// Use the request method instead of zones.edit to avoid type issues
|
||||
const response: { result: interfaces.ICflareZone } = await account.request(
|
||||
'PATCH',
|
||||
`/zones/${this.id}`,
|
||||
settings
|
||||
);
|
||||
|
||||
Object.assign(this, response.result);
|
||||
return this;
|
||||
} catch (error) {
|
||||
logger.log('error', `Failed to update zone settings: ${error.message}`);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user