feat(core): Update dependencies, enhance documentation, and improve error handling with clearer API usage examples

This commit is contained in:
2025-03-19 11:31:50 +00:00
parent d1788dc626
commit 2b51df90e6
12 changed files with 6073 additions and 2111 deletions

View File

@@ -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;
}
}
}