@apiclient.xyz/cloudflare
An elegant, class-based TypeScript client for the Cloudflare API that makes managing your Cloudflare resources simple and type-safe.
readme.md for @apiclient.xyz/cloudflare
π A modern, elegant TypeScript client for the Cloudflare API with clean manager-based architecture
Stop fighting with the Cloudflare API. This library gives you an intuitive, type-safe way to manage zones, DNS records, and Workersβall with clean, predictable method names and excellent IDE support.
β¨ Why This Library?
- π― Logical & Consistent: Manager-based architecture with predictable method naming (
listZones(),listRecords(),listWorkers()) - πͺ Strongly Typed: Full TypeScript support with excellent autocompletion
- π Framework Integration: Built-in
IConvenientDnsProvideradapter for third-party modules - β‘ Modern: Uses async/await, ES modules, and the official Cloudflare SDK
- π‘οΈ Reliable: Comprehensive error handling and detailed logging
- π¦ Zero Config: Works out of the box with just your API token
π Quick Start
npm install @apiclient.xyz/cloudflare
import { CloudflareAccount } from '@apiclient.xyz/cloudflare';
const cf = new CloudflareAccount('your-api-token');
// Manage DNS records with ease
await cf.recordManager.createRecord('api.example.com', 'A', '192.0.2.1');
await cf.recordManager.updateRecord('api.example.com', 'A', '203.0.113.1');
// Work with zones
const zones = await cf.zoneManager.listZones();
await cf.zoneManager.purgeZone('example.com');
// Deploy workers
const worker = await cf.workerManager.createWorker('my-api', workerScript);
await worker.setRoutes([{ zoneName: 'example.com', pattern: 'api.example.com/*' }]);
π Core Concepts
Managers: Your Gateway to Cloudflare
The library is organized around managersβspecialized classes that handle specific Cloudflare resources:
recordManager- DNS record operationszoneManager- Zone (domain) managementworkerManager- Cloudflare Workers deployment
Each manager provides consistent, predictable methods that feel natural to use.
π Complete Guide
Account Setup
import { CloudflareAccount } from '@apiclient.xyz/cloudflare';
const cf = new CloudflareAccount(process.env.CLOUDFLARE_API_TOKEN);
// If you have multiple accounts, select one
await cf.preselectAccountByName('Production Account');
π Zone Management
Zones are your domains in Cloudflare.
// List all zones
const zones = await cf.zoneManager.listZones();
// Find a specific zone
const zone = await cf.zoneManager.getZoneByName('example.com');
// Get zone ID for API calls
const zoneId = await cf.zoneManager.getZoneId('example.com');
// Create a new zone
await cf.zoneManager.createZone('newdomain.com');
// Purge entire zone cache
await cf.zoneManager.purgeZone('example.com');
// Work with zone objects
if (await zone.isActive()) {
await zone.purgeCache();
await zone.purgeUrls(['https://example.com/css/app.css']);
// Development mode (bypasses cache for 3 hours)
await zone.enableDevelopmentMode();
await zone.disableDevelopmentMode();
}
π DNS Records
The recordManager gives you complete control over DNS records.
// List all records for a domain
const records = await cf.recordManager.listRecords('example.com');
// Create different record types
await cf.recordManager.createRecord('www.example.com', 'CNAME', 'example.com', 3600);
await cf.recordManager.createRecord('api.example.com', 'A', '192.0.2.1', 300);
await cf.recordManager.createRecord('_dmarc.example.com', 'TXT', 'v=DMARC1; p=reject', 3600);
// Get a specific record
const record = await cf.recordManager.getRecord('api.example.com', 'A');
console.log(record.content); // "192.0.2.1"
// Update or create (upsert behavior)
await cf.recordManager.updateRecord('api.example.com', 'A', '203.0.113.1');
// Delete a record
await cf.recordManager.deleteRecord('old.example.com', 'A');
// Clean up all records of a type (useful for wildcard cleanup)
await cf.recordManager.cleanRecords('example.com', 'TXT');
βοΈ Cloudflare Workers
Deploy and manage serverless functions at the edge.
// Worker code
const workerScript = `
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
return new Response('Hello from the edge!', {
headers: { 'content-type': 'text/plain' }
});
}
`;
// Create/update a worker
const worker = await cf.workerManager.createWorker('my-api-worker', workerScript);
// List all workers
const workers = await cf.workerManager.listWorkers();
// Get existing worker
const existingWorker = await cf.workerManager.getWorker('my-api-worker');
// Set up routes
await worker.setRoutes([
{ zoneName: 'example.com', pattern: 'api.example.com/*' },
{ zoneName: 'example.com', pattern: 'example.com/api/*' }
]);
// Check worker routes
await worker.listRoutes();
console.log(worker.routes); // Array of routes
// Update worker script
await worker.updateScript(updatedWorkerScript);
// Delete worker
await worker.delete();
// or
await cf.workerManager.deleteWorker('my-api-worker');
π ACME DNS Challenges (Let's Encrypt)
Use the ConvenientDnsProvider adapter for certificate automation.
const dnsProvider = cf.getConvenientDnsProvider();
// Set DNS challenge
await dnsProvider.acmeSetDnsChallenge({
hostName: '_acme-challenge.example.com',
challenge: 'your-validation-token'
});
// Remove challenge after validation
await dnsProvider.acmeRemoveDnsChallenge({
hostName: '_acme-challenge.example.com',
challenge: 'your-validation-token'
});
π Third-Party Module Integration
If you're using a framework or library that expects IConvenientDnsProvider, use the adapter:
import { CloudflareAccount } from '@apiclient.xyz/cloudflare';
const cf = new CloudflareAccount(process.env.CLOUDFLARE_API_TOKEN);
const dnsProvider = cf.getConvenientDnsProvider();
// Now pass this to any library expecting IConvenientDnsProvider
await someFramework.setDnsProvider(dnsProvider);
π― Real-World Example
Here's a complete example showing a typical deployment workflow:
import { CloudflareAccount } from '@apiclient.xyz/cloudflare';
async function deployApplication() {
const cf = new CloudflareAccount(process.env.CLOUDFLARE_API_TOKEN);
await cf.preselectAccountByName('Production');
// 1. Set up DNS
console.log('π Configuring DNS...');
await cf.recordManager.createRecord('app.example.com', 'A', '192.0.2.10');
await cf.recordManager.createRecord('www.example.com', 'CNAME', 'example.com');
// 2. Deploy API worker
console.log('βοΈ Deploying API worker...');
const apiWorker = await cf.workerManager.createWorker('api-handler', `
addEventListener('fetch', event => {
const response = new Response(JSON.stringify({ status: 'ok' }), {
headers: { 'content-type': 'application/json' }
});
event.respondWith(response);
});
`);
await apiWorker.setRoutes([
{ zoneName: 'example.com', pattern: 'api.example.com/*' }
]);
// 3. Configure security headers worker
console.log('π‘οΈ Setting up security...');
const securityWorker = await cf.workerManager.createWorker('security-headers', `
addEventListener('fetch', event => {
event.respondWith(addSecurityHeaders(event.request));
});
async function addSecurityHeaders(request) {
const response = await fetch(request);
const newHeaders = new Headers(response.headers);
newHeaders.set('X-Frame-Options', 'DENY');
newHeaders.set('X-Content-Type-Options', 'nosniff');
return new Response(response.body, {
status: response.status,
headers: newHeaders
});
}
`);
await securityWorker.setRoutes([
{ zoneName: 'example.com', pattern: 'example.com/*' }
]);
// 4. Verify and purge cache
console.log('π Purging cache...');
const zone = await cf.zoneManager.getZoneByName('example.com');
await zone.purgeCache();
console.log('β
Deployment complete!');
}
deployApplication().catch(console.error);
π API Reference
CloudflareAccount
Main entry point for all operations.
class CloudflareAccount {
constructor(apiToken: string)
// Managers
readonly recordManager: RecordManager
readonly zoneManager: ZoneManager
readonly workerManager: WorkerManager
// Methods
async preselectAccountByName(name: string): Promise<void>
getConvenientDnsProvider(): ConvenientDnsProvider
// Official Cloudflare SDK client (for advanced use)
readonly apiAccount: Cloudflare
}
RecordManager
DNS record management with clean, predictable methods.
class RecordManager {
async listRecords(domain: string): Promise<CloudflareRecord[]>
async getRecord(domain: string, type: string): Promise<CloudflareRecord | undefined>
async createRecord(domain: string, type: string, content: string, ttl?: number): Promise<CloudflareRecord>
async updateRecord(domain: string, type: string, content: string, ttl?: number): Promise<CloudflareRecord>
async deleteRecord(domain: string, type: string): Promise<void>
async cleanRecords(domain: string, type: string): Promise<void>
}
ZoneManager
Zone (domain) management operations.
class ZoneManager {
async listZones(name?: string): Promise<CloudflareZone[]>
async getZoneById(id: string): Promise<CloudflareZone | undefined>
async getZoneByName(name: string): Promise<CloudflareZone | undefined>
async getZoneId(domain: string): Promise<string>
async createZone(name: string): Promise<CloudflareZone | undefined>
async deleteZone(id: string): Promise<boolean>
async purgeZone(domain: string): Promise<void>
}
CloudflareZone
Zone instance with convenience methods.
class CloudflareZone {
readonly id: string
readonly name: string
readonly status: string
async purgeCache(): Promise<void>
async purgeUrls(urls: string[]): Promise<void>
async isActive(): Promise<boolean>
async isUsingCloudflareNameservers(): Promise<boolean>
async enableDevelopmentMode(): Promise<void>
async disableDevelopmentMode(): Promise<void>
}
WorkerManager
Cloudflare Workers deployment and management.
class WorkerManager {
async listWorkers(): Promise<WorkerScript[]>
async getWorker(name: string): Promise<CloudflareWorker | undefined>
async createWorker(name: string, script: string): Promise<CloudflareWorker>
async deleteWorker(name: string): Promise<boolean>
}
CloudflareWorker
Worker instance for route management and updates.
class CloudflareWorker {
readonly id: string
readonly script: string
readonly routes: WorkerRoute[]
async listRoutes(): Promise<void>
async setRoutes(routes: WorkerRouteDefinition[]): Promise<void>
async updateScript(script: string): Promise<CloudflareWorker>
async delete(): Promise<boolean>
}
interface WorkerRouteDefinition {
zoneName: string
pattern: string
}
ConvenientDnsProvider
Adapter for third-party modules requiring IConvenientDnsProvider.
class ConvenientDnsProvider implements IConvenientDnsProvider {
async createRecord(domain: string, type: string, content: string, ttl?: number): Promise<any>
async updateRecord(domain: string, type: string, content: string, ttl?: number): Promise<any>
async removeRecord(domain: string, type: string): Promise<any>
async getRecord(domain: string, type: string): Promise<any | undefined>
async listRecords(domain: string): Promise<any[]>
async cleanRecord(domain: string, type: string): Promise<void>
async isDomainSupported(domain: string): Promise<boolean>
async acmeSetDnsChallenge(challenge: DnsChallenge): Promise<void>
async acmeRemoveDnsChallenge(challenge: DnsChallenge): Promise<void>
}
π Migration from 6.x
Version 7.0 introduces a cleaner architecture while maintaining full backward compatibility.
What Changed
β
New manager-based API - Clean, logical organization
β
Consistent naming - All list operations use list*()
β
IConvenientDnsProvider support - Better third-party integration
β οΈ Deprecated convenience namespace - Still works, but use managers instead
Migration Examples
// β Old (deprecated but still works)
await cf.convenience.createRecord('example.com', 'A', '1.2.3.4');
await cf.convenience.listZones();
await cf.workerManager.listWorkerScripts();
await worker.getRoutes();
// β
New (recommended)
await cf.recordManager.createRecord('example.com', 'A', '1.2.3.4');
await cf.zoneManager.listZones();
await cf.workerManager.listWorkers();
await worker.listRoutes();
No Breaking Changes: Your existing code will continue to work. The old convenience namespace methods now show deprecation warnings in TypeScript with clear migration paths.
π οΈ Development
# Install dependencies
pnpm install
# Build
pnpm build
# Run tests
pnpm test
π TypeScript Configuration
This library is written in TypeScript and provides complete type definitions. No @types package needed!
import { CloudflareAccount, CloudflareZone, CloudflareRecord } from '@apiclient.xyz/cloudflare';
// Full type inference and autocompletion
const cf = new CloudflareAccount(token);
const zones: CloudflareZone[] = await cf.zoneManager.listZones();
const record: CloudflareRecord = await cf.recordManager.createRecord(/* ... */);
π€ FAQ
Q: Can I use this with the official Cloudflare SDK?
A: Yes! The library wraps the official SDK. You can access it directly via cfAccount.apiAccount for advanced operations.
Q: Does this support Cloudflare Workers KV, R2, D1? A: Currently focuses on zones, DNS, and Workers. Additional features coming in future releases.
Q: How do I handle errors? A: All methods throw descriptive errors. Wrap calls in try/catch for error handling.
try {
await cf.recordManager.createRecord('example.com', 'A', 'invalid-ip');
} catch (error) {
console.error('Failed to create record:', error.message);
}
Q: Is this production-ready? A: Absolutely! Used in production environments. Comprehensive error handling and logging built-in.
License and Legal Information
This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the license file within this repository.
Please note: The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
Trademarks
This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.
Company Information
Task Venture Capital GmbH Registered at District court Bremen HRB 35230 HB, Germany
For any legal inquiries or if you require further information, please contact us via email at hello@task.vc.
By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.
changelog.md for @apiclient.xyz/cloudflare
2025-11-18 - 7.1.0 - feat(cloudflare)
Release 7.0.0 β manager-based API, ConvenientDnsProvider, improved utils and worker/zone/record management
- Introduce manager-based architecture: ZoneManager, RecordManager, WorkerManager for clearer, consistent API surface
- Add ConvenientDnsProvider adapter implementing IConvenientDnsProvider for third-party integrations
- New CloudflareUtils helpers (domain validation, API token check, record type validation, URL/TTL formatting, pagination)
- Improved Worker support: create/update/delete scripts, route management, and robust listing with fallbacks
- Zone and record operations enhanced (create/update/delete/purge) with type-safe wrappers and CloudflareZone/CloudflareRecord models
- Deprecated old convenience namespace in favor of managers (kept for backward compatibility with migration guidance)
- Full TypeScript exports and typings, updated package metadata for v7.0.0
2025-11-18 - 7.0.0 - BREAKING CHANGE(core)
Introduce RecordManager and ConvenientDnsProvider; rename list/get methods for consistent API and deprecate convenience namespace
- Add RecordManager with listRecords, getRecord, createRecord, updateRecord, deleteRecord and cleanRecords to centralize DNS record operations
- Add ConvenientDnsProvider adapter and CloudflareAccount.getConvenientDnsProvider() to provide IConvenientDnsProvider compatibility for third-party modules
- Rename methods to consistent list* naming: worker.getRoutes -> worker.listRoutes, WorkerManager.listWorkerScripts -> WorkerManager.listWorkers, ZoneManager.getZones -> ZoneManager.listZones, convenience.listRecords -> recordManager.listRecords
- Add ZoneManager.getZoneId() and ZoneManager.purgeZone() (zone cache purge helper)
- Deprecate the legacy convenience.* methods (getZoneId, getRecord, createRecord, removeRecord, cleanRecord, updateRecord, listRecords, listZones, isDomainSupported, purgeZone, acmeSetDnsChallenge, acmeRemoveDnsChallenge) β kept for backward compatibility but marked deprecated
- Export RecordManager and ConvenientDnsProvider from ts/index.ts and expose cfAccount.recordManager on CloudflareAccount
- Update tests to use new method names (listWorkers) and extend test runner timeout; package.json test script updated
- Documentation (readme) updated to describe the new manager-based API and migration guide; prepares project for major version 7.0.0
2025-11-17 - 6.4.3 - fix(cloudflare.plugins)
Switch to smartrequest namespace export and improve request typing and JSON parsing
- Export smartrequest as a namespace from cloudflare.plugins (replaced named SmartRequest/CoreResponse exports)
- Use plugins.smartrequest.SmartRequest.create() when building HTTP requests
- Type response as InstanceType<typeof plugins.smartrequest.CoreResponse> to match the new smartrequest export shape
- Safer JSON parsing: cast result of response.json() to the expected generic instead of relying on a generic json<T>() call and provide a text fallback when parsing fails
- Adjust imports/usages to align with @push.rocks/smartrequest namespace usage
2025-11-17 - 6.4.2 - fix(core)
Switch to SmartRequest fluent API and improve Cloudflare API request handling
- Upgrade runtime dependencies: @push.rocks/smartlog -> ^3.1.10, @push.rocks/smartrequest -> ^5.0.1, @push.rocks/smartstring -> ^4.1.0, @tsclass/tsclass -> ^9.3.0, cloudflare -> ^5.2.0
- Upgrade devDependencies: @git.zone/tsbuild -> ^3.1.0, @git.zone/tsrun -> ^2.0.0, @git.zone/tstest -> ^2.8.2, @push.rocks/qenv -> ^6.1.3, openapi-typescript -> ^7.10.1
- Export SmartRequest and CoreResponse from cloudflare.plugins to align with smartrequest v5 API
- Refactor CloudflareAccount.request to use SmartRequest fluent builder, add detailed logging, default JSON Content-Type, support multipart/form-data via formData(), and use appropriate HTTP method helpers
- Improve response parsing: return a safe fallback when JSON parsing fails by reading response.text() and include a concise message; better HTTP error logging including response body text
- Update usages to rely on the new request behavior (zones/workers managers use account.request for endpoints not covered by the official client)
2025-04-30 - 6.4.1 - fix(ci)
Update CI workflows, repository URL, and apply minor code formatting fixes
- Add new Gitea workflows for both tagged and non-tagged push events with security, test, release, and metadata jobs
- Update repository URL in package.json from pushrocks/cflare to mojoio/cloudflare
- Refine .gitignore custom comments
- Apply minor formatting improvements in source code and documentation
2025-04-30 - 6.4.0 - feat(CloudflareAccount)
Bump dependency versions and add domain support check in CloudflareAccount
- Upgrade dependencies: @push.rocks/smartrequest, @tsclass/tsclass, @git.zone/tsbuild, @push.rocks/tapbundle, and @types/node
- Implement the isDomainSupported convenience method in CloudflareAccount for validating domain management
2025-04-26 - 6.3.2 - fix(worker)
Refactor worker script update and creation to use intermediate parameter objects
- Build updateParams in CloudflareWorker for proper multipart form handling when updating scripts
- Use contentParams in WorkerManager to improve clarity and consistency in worker creation
2025-04-26 - 6.3.1 - fix(core)
Improve nested DNS record management and worker script multipart handling
- Add tests for creating, updating, and removing nested subdomain A records
- Refine TXT record cleaning by filtering records with matching name and type
- Clarify multipart form data handling for worker script updates and creation
2025-04-26 - 6.3.0 - feat(core)
Release 6.2.0: Improved async iterator support, enhanced error handling and refined API interfaces for better type safety and consistent behavior.
- Bumped package version from 6.1.0 to 6.2.0
- Updated README with more precise information on async iterators and error handling
- Enhanced API request method to better parse response bodies and handle empty responses
- Refined async iterator usage in worker routes and zone listing
- Improved logging details for debugging API interactions
- Simplified and clarified method signatures and return types in documentation
2025-03-19 - 6.1.0 - feat(core)
Update dependencies, enhance documentation, and improve error handling with clearer API usage examples
- Bump dependency versions (@push.rocks/smartpromise, smartrequest, @tsclass/tsclass, cloudflare and devDependencies)
- Rewrite README with extended features, improved installation instructions, and comprehensive usage guides
- Refactor and add try/catch error handling in API request methods across core classes
- Enhance test suite with refined zone, DNS record, and worker management tests
2025-03-19 - 6.0.6 - fix(core)
Improve logging consistency, record update functionality, and API error handling in Cloudflare modules
- Replaced raw console.log calls with logger.log for unified logging across modules
- Implemented and documented the updateRecord method with proper parameters in CloudflareAccount
- Enhanced API request error handling and added detailed documentation in request methods
- Refactored CloudflareWorker and WorkerManager methods to improve clarity and maintainability
- Updated ZoneManager and CloudflareZone to improve error reporting and zone manipulation
2024-06-16 - 6.0.5 β no significant changes
No significant changes in this release.
2024-06-16 - 6.0.4 β miscellaneous
Several improvements and fixes:
- fix(start supporting workers again): update
- update license info
- update readme
- switch to official cloudflare api client while keeping class based approach
2024-06-15 - 6.0.3 β core
- fix(core): update
2023-06-13 - 6.0.2 β core
- fix(core): update
2023-06-13 - 6.0.1 β core
- fix(core): update
2022-09-27 - 6.0.0 β core
- fix(core): update
2022-09-27 - 5.0.10 β core
- BREAKING CHANGE(core): switch to esm
2022-09-27 - 5.0.9 β core
- fix(core): update
2021-01-22 - 5.0.8 β core
- fix(core): update
2021-01-22 - 5.0.7 β core
- fix(core): update
2021-01-22 - 5.0.6 β core
- fix(core): update
2020-06-10 - 5.0.5 β core
- fix(core): update
2020-06-10 - 5.0.4 β core
- fix(core): update
2020-02-28 - 5.0.3 β core
- fix(core): update
2020-02-28 - 5.0.2 β core
- fix(core): update
2020-02-28 - 5.0.1 β core
- fix(core): update
2020-02-28 - 5.0.0 β core
- fix(core): update
2020-02-19 - 4.0.5 β account
- BREAKING CHANGE(account): authorization now uses the new Account API
2020-02-19 - 4.0.4 β core
- fix(core): update
2020-02-19 - 4.0.3 β core
- fix(core): update
2020-02-10 - 4.0.2 β core
- fix(core): update
2020-02-10 - 4.0.1 β core
- fix(core): update
2020-02-10 - 4.0.0 β core
- fix(core): update
2020-02-09 - 3.0.7 β API
- BREAKING CHANGE(API): move to .convenience property
2020-02-09 - 3.0.6 β core
- fix(core): update
2020-02-09 - 3.0.5 β core
- fix(core): update
2019-07-19 - 3.0.4 β core
- fix(core): update
2019-07-18 - 3.0.3 β core
- fix(core): update
2019-07-18 - 3.0.2 β core
- fix(core): update
2019-07-18 - 3.0.1 β core
- fix(core): update
2019-07-18 - 3.0.0 β core
- fix(core): update
2019-07-18 - 2.0.1 β core
- fix(core): update
2019-07-18 - 2.0.0 β core
- fix(core): update
2019-07-18 - 2.0.2 β no significant changes
No significant changes in this release.
2018-08-13 - 1.0.5 β scope
- BREAKING CHANGE(scope): change scope, tools and package name
2017-06-11 - 1.0.4 β misc
- now using tsclass
2017-06-09 - 1.0.3 β misc
- update dependencies
2017-06-05 - 1.0.2 β misc
- now supports purging of assets
- improve test
2017-06-04 - 1.0.1 β misc
- add npmextra.json
2017-06-04 - 1.0.0 β misc
- add type TRecord, update ci
2017-06-04 - 0.0.20 β no significant changes
No significant changes in this release.
2017-06-04 - 0.0.19 β misc
- go async/await
- update brand link
2017-02-12 - 0.0.18 β misc
- update README
2017-01-29 - 0.0.17 β misc
- update README
2017-01-29 - 0.0.16 β misc
- fix tests to run in parallel
2017-01-29 - 0.0.15 β misc
- fixed bad request retry
2017-01-29 - 0.0.14 β misc
- fix testing timeouts
2017-01-29 - 0.0.13 β misc
- added random retry times
2017-01-29 - 0.0.12 β misc
- update to new ci
2017-01-29 - 0.0.11 β misc
- now using smartrequest
2017-01-22 - 0.0.10 β misc
- now reacting to rate limiting
2016-07-31 - 0.0.9 β misc
- update dependencies
2016-06-22 - 0.0.8 to 0.0.7 β no significant changes
No significant changes in these releases.
2016-06-22 - 0.0.6 β misc
- updated dependencies
2016-06-21 - 0.0.5 β misc
- fix stages
2016-06-21 - 0.0.4 β misc
- fix stages
2016-06-21 - 0.0.3 β misc
Multiple improvements:
- now works for most things
- update to latest dependencies
- update .gitlab.yml
- update
- add .gitlab-ci.yml
2016-05-25 - 0.0.2 β misc
Several changes:
- improve domain string handling
- update .getRecord
- improve .createRecord
- implemented .createRecord
- compile
- add functionality
- start with tests
- improved request method of cflare class
2016-04-27 - 0.0.1 β misc
- now returning promises
- add lossless badge
2016-04-27 - 0.0.0 β misc
- added travis and improved README
2016-04-10 - 0.0.0 β misc
- add package.json and README
2016-04-10 - unknown β misc
- Initial commit
Note: Versions that only contained version bump commits or minor housekeeping (6.0.5; 2.0.2; 0.0.20; 0.0.8 to 0.0.7) have been omitted from detailed entries and are summarized above.