UNPKG

@oxheberg/whmcs-api

Version:

A fully featured and type-safe TypeScript client for the WHMCS API. Includes all official endpoints, modular design, helpful errors, and built with modern developer experience in mind.

1,599 lines (1,589 loc) 104 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/index.ts var index_exports = {}; __export(index_exports, { WhmcsApiError: () => WhmcsApiError, WhmcsClient: () => WhmcsClient, WhmcsError: () => WhmcsError, WhmcsNetworkError: () => WhmcsNetworkError }); module.exports = __toCommonJS(index_exports); // src/modules/addons.ts var createAddonsModule = (callApi) => ({ /** * Updates a client addon with new status, dates, or other properties. * * @param params - Addon ID and properties to update including status, dates, and notes * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.addons.updateClientAddon({ * id: 1, * status: 'Active', * nextduedate: '2024-12-01', * notes: 'Updated addon configuration' * }); * ``` * * @see https://developers.whmcs.com/api-reference/updateclientaddon/ */ updateClientAddon: (params) => callApi("UpdateClientAddon", params) }); // src/modules/affiliates.ts function createAffiliatesModule(callApi) { return { /** * Activate affiliate referrals for a specified client * * @param params - Parameters for activating affiliate * @param params.userid - The client ID to activate affiliate status for * @returns Promise resolving to success response * * @example * ```typescript * const result = await client.affiliates.activateAffiliate({ * userid: 1 * }); * console.log(result.result); // 'success' * ``` * * @see https://developers.whmcs.com/api-reference/affiliateactivate/ */ activateAffiliate: (params) => callApi("AffiliateActivate", params), /** * Retrieve a list of affiliates * * @param params - Optional parameters for filtering affiliates * @param params.limitstart - The offset for the returned affiliate data (default: 0) * @param params.limitnum - The number of records to return (default: 25) * @param params.userid - Obtain affiliate data for a specific client account * @param params.visitors - Provide affiliates that match a specific visitor count * @param params.paytype - Provide affiliates matching the paytype provided * @param params.payamount - Provide affiliates matching a specific overridden payout amount * @param params.onetime - Provide affiliates configured to receive one time affiliates * @param params.balance - Provide affiliates that have this balance * @param params.withdrawn - Provide affiliates that have withdrawn this amount * @returns Promise resolving to affiliates data * * @example * ```typescript * // Get all affiliates * const affiliates = await client.affiliates.getAffiliates(); * * // Get affiliates for specific client * const clientAffiliates = await client.affiliates.getAffiliates({ * userid: 1 * }); * * // Get affiliates with pagination * const paginatedAffiliates = await client.affiliates.getAffiliates({ * limitstart: 0, * limitnum: 10 * }); * ``` * * @see https://developers.whmcs.com/api-reference/getaffiliates/ */ getAffiliates: (params = {}) => callApi("GetAffiliates", params) }; } // src/modules/authentication.ts var createAuthenticationModule = (callApi) => ({ /** * Creates a new OAuth credential for API access or single sign-on. * * @param params - Grant type, scope, and optional configuration for the OAuth credential * @returns Promise resolving to new credential details including client ID and secret * * @example * ```typescript * const response = await client.authentication.createOAuthCredential({ * grantType: 'single_sign_on', * scope: 'clientarea:sso clientarea:billing_info', * serviceId: 1, * description: 'SSO for billing portal' * }); * console.log(response.clientIdentifier, response.clientSecret); * ``` * * @see https://developers.whmcs.com/api-reference/createoauthcredential/ */ createOAuthCredential: (params) => callApi("CreateOAuthCredential", params), /** * Creates a single-use SSO token for client or user authentication. * * @param params - Optional client/user ID, destination, and service context * @returns Promise resolving to access token and redirect URL * * @example * ```typescript * const response = await client.authentication.createSsoToken({ * client_id: 123, * destination: 'clientarea:product_details', * service_id: 1 * }); * console.log(response.access_token, response.redirect_url); * ``` * * @see https://developers.whmcs.com/api-reference/createssotoken/ */ createSsoToken: (params = {}) => callApi("CreateSsoToken", params), /** * Permanently deletes an OAuth credential record. * * @param params - Credential ID to delete * @returns Promise resolving to confirmation with deleted credential ID * * @example * ```typescript * const response = await client.authentication.deleteOAuthCredential({ * credentialId: 1 * }); * console.log('Deleted credential:', response.credentialId); * ``` * * @see https://developers.whmcs.com/api-reference/deleteoauthcredential/ */ deleteOAuthCredential: (params) => callApi("DeleteOAuthCredential", params), /** * Retrieves a list of OAuth credentials matching specified criteria. * * @param params - Optional filtering, sorting, and pagination parameters * @returns Promise resolving to list of OAuth credentials with details * * @example * ```typescript * const response = await client.authentication.listOAuthCredentials({ * grantType: 'single_sign_on', * limit: 10 * }); * console.log(response.clients); * ``` * * @see https://developers.whmcs.com/api-reference/listoauthcredentials/ */ listOAuthCredentials: (params = {}) => callApi("ListOAuthCredentials", params), /** * Updates an existing OAuth credential configuration. * * @param params - Credential ID/identifier and properties to update * @returns Promise resolving to updated credential details * * @example * ```typescript * const response = await client.authentication.updateOAuthCredential({ * credentialId: 1, * name: 'Updated Credential Name', * resetSecret: true * }); * console.log('New secret:', response.newClientSecret); * ``` * * @see https://developers.whmcs.com/api-reference/updateoauthcredential/ */ updateOAuthCredential: (params) => callApi("UpdateOAuthCredential", params), /** * Validates user login credentials and creates an authentication session. * * @param params - Email address and password to validate * @returns Promise resolving to user ID, password hash, and 2FA status * * @example * ```typescript * const response = await client.authentication.validateLogin({ * email: 'user@example.com', * password2: 'userpassword' * }); * console.log('User ID:', response.userid); * if (response.passwordhash) { * console.log('Session token:', response.passwordhash); * } * ``` * * @see https://developers.whmcs.com/api-reference/validatelogin/ */ validateLogin: (params) => callApi("ValidateLogin", params) }); // src/modules/billing.ts var createBillingModule = (callApi) => ({ /** * Accept a quote and convert it to an invoice * * @param params - The parameters for accepting a quote * @returns Promise that resolves when the quote is accepted * * @example * ```typescript * await client.billing.acceptQuote({ * quoteid: 123 * }); * ``` * * @see https://developers.whmcs.com/api-reference/acceptquote */ acceptQuote: (params) => callApi("AcceptQuote", params), /** * Add a billable item to a client's account * * @param params - The parameters for adding a billable item * @returns Promise that resolves when the billable item is added * * @example * ```typescript * await client.billing.addBillableItem({ * clientid: 1, * description: 'Additional Service', * amount: 50.00, * invoiceaction: 'nextinvoice', * duedate: '2024-12-31' * }); * ``` * * @see https://developers.whmcs.com/api-reference/addbillableitem */ addBillableItem: (params) => callApi("AddBillableItem", params), /** * Add credit to a client's account * * @param params - The parameters for adding credit * @returns Promise that resolves with the new credit balance * * @example * ```typescript * const result = await client.billing.addCredit({ * clientid: 1, * description: 'Refund for overpayment', * amount: 25.00, * type: 'add' * }); * console.log(`New balance: ${result.newbalance}`); * ``` * * @see https://developers.whmcs.com/api-reference/addcredit */ addCredit: (params) => callApi("AddCredit", params), /** * Add a payment to an invoice * * @param params - The parameters for adding a payment * @returns Promise that resolves when the payment is added * * @example * ```typescript * await client.billing.addInvoicePayment({ * invoiceid: 123, * transid: 'TXN_123456', * gateway: 'paypal', * date: '2024-01-15 14:30:00', * amount: 100.00, * fees: 3.50 * }); * ``` * * @see https://developers.whmcs.com/api-reference/addinvoicepayment */ addInvoicePayment: (params) => callApi("AddInvoicePayment", params), /** * Add a payment method to a client's account * * @param params - The parameters for adding a payment method * @returns Promise that resolves when the payment method is added * * @example * ```typescript * await client.billing.addPayMethod({ * clientid: 1, * type: 'bankaccount', * description: 'Primary Bank Account', * bank_name: 'Example Bank', * account_number: '123456789', * routing_number: '987654321', * set_as_default: true * }); * ``` * * @see https://developers.whmcs.com/api-reference/addpaymethod */ addPayMethod: (params) => callApi("AddPayMethod", params), /** * Add a transaction record * * @param params - The parameters for adding a transaction * @returns Promise that resolves when the transaction is added * * @example * ```typescript * await client.billing.addTransaction({ * gateway: 'paypal', * date: '2024-01-15 14:30:00', * description: 'Payment for Invoice #123', * amountin: 100.00, * fees: 3.50, * transid: 'TXN_123456', * invoiceid: 123 * }); * ``` * * @see https://developers.whmcs.com/api-reference/addtransaction */ addTransaction: (params) => callApi("AddTransaction", params), /** * Apply credit to an invoice * * @param params - The parameters for applying credit * @returns Promise that resolves with credit application details * * @example * ```typescript * const result = await client.billing.applyCredit({ * invoiceid: 123, * amount: 50.00, * noemail: false * }); * console.log(`Applied ${result.amount} credit to invoice ${result.invoiceid}`); * ``` * * @see https://developers.whmcs.com/api-reference/applycredit */ applyCredit: (params) => callApi("ApplyCredit", params), /** * Capture payment for an invoice * * @param params - The parameters for capturing payment * @returns Promise that resolves when payment is captured * * @example * ```typescript * await client.billing.capturePayment({ * invoiceid: 123 * }); * ``` * * @see https://developers.whmcs.com/api-reference/capturepayment */ capturePayment: (params) => callApi("CapturePayment", params), /** * Create a new invoice * * @param params - The parameters for creating an invoice * @returns Promise that resolves with the new invoice ID * * @example * ```typescript * const result = await client.billing.createInvoice({ * userid: 1, * date: '2024-01-15', * duedate: '2024-02-15', * itemdescription1: 'Web Hosting Service', * itemamount1: 50.00, * itemtaxed1: true, * sendinvoice: true * }); * console.log(`Invoice created with ID: ${result.invoiceid}`); * ``` * * @see https://developers.whmcs.com/api-reference/createinvoice */ createInvoice: (params) => callApi("CreateInvoice", params), /** * Create a new quote * * @param params - The parameters for creating a quote * @returns Promise that resolves with the new quote ID * * @example * ```typescript * const result = await client.billing.createQuote({ * userid: 1, * subject: 'Website Development Quote', * stage: 'Draft', * validuntil: '2024-03-15', * lineitems: [ * { * description: 'Web Design', * qty: 1, * up: 1500.00, * taxable: true * }, * { * description: 'Domain Registration', * qty: 1, * up: 15.00, * taxable: false * } * ] * }); * console.log(`Quote created with ID: ${result.quoteid}`); * ``` * * @see https://developers.whmcs.com/api-reference/createquote */ createQuote: (params) => callApi("CreateQuote", params), /** * Delete a payment method * * @param params - The parameters for deleting a payment method * @returns Promise that resolves when the payment method is deleted * * @example * ```typescript * await client.billing.deletePayMethod({ * paymethodid: 123 * }); * ``` * * @see https://developers.whmcs.com/api-reference/deletepaymethod */ deletePayMethod: (params) => callApi("DeletePayMethod", params), /** * Delete a quote * * @param params - The parameters for deleting a quote * @returns Promise that resolves when the quote is deleted * * @example * ```typescript * await client.billing.deleteQuote({ * quoteid: 123 * }); * ``` * * @see https://developers.whmcs.com/api-reference/deletequote */ deleteQuote: (params) => callApi("DeleteQuote", params), /** * Generate invoices for recurring services * * @param params - Optional parameters for invoice generation * @returns Promise that resolves with the number of invoices created * * @example * ```typescript * const result = await client.billing.genInvoices({ * noemail: false, * clientid: 1 * }); * console.log(`Generated ${result.numcreated} invoices`); * ``` * * @see https://developers.whmcs.com/api-reference/geninvoices */ genInvoices: (params = {}) => callApi("GenInvoices", params), /** * Retrieve credit entries * * @param params - Optional parameters for filtering credits * @returns Promise that resolves with the list of credits * * @example * ```typescript * const result = await client.billing.getCredits({ * clientid: 1, * limitstart: 0, * limitnum: 25 * }); * console.log(`Found ${result.totalresults} credit entries`); * ``` * * @see https://developers.whmcs.com/api-reference/getcredits */ getCredits: (params = {}) => callApi("GetCredits", params), /** * Retrieve details of a specific invoice * * @param params - The parameters for retrieving an invoice * @returns Promise that resolves with the invoice details * * @example * ```typescript * const result = await client.billing.getInvoice({ * invoiceid: 123 * }); * console.log(`Invoice #${result.invoicenum} - Total: ${result.total}`); * ``` * * @see https://developers.whmcs.com/api-reference/getinvoice */ getInvoice: (params) => callApi("GetInvoice", params), /** * Retrieve a list of invoices * * @param params - Optional parameters for filtering invoices * @returns Promise that resolves with the list of invoices * * @example * ```typescript * const result = await client.billing.getInvoices({ * limitstart: 0, * limitnum: 25, * userid: 1, * status: 'Unpaid' * }); * console.log(`Found ${result.totalresults} invoices`); * ``` * * @see https://developers.whmcs.com/api-reference/getinvoices */ getInvoices: (params = {}) => callApi("GetInvoices", params), /** * Retrieve payment methods for a client * * @param params - The parameters for retrieving payment methods * @returns Promise that resolves with the list of payment methods * * @example * ```typescript * const result = await client.billing.getPayMethods({ * clientid: 1 * }); * result.paymethods.paymethod.forEach(method => { * console.log(`${method.description} (${method.payment_type})`); * }); * ``` * * @see https://developers.whmcs.com/api-reference/getpaymethods */ getPayMethods: (params) => callApi("GetPayMethods", params), /** * Retrieve a list of quotes * * @param params - Optional parameters for filtering quotes * @returns Promise that resolves with the list of quotes * * @example * ```typescript * const result = await client.billing.getQuotes({ * limitstart: 0, * limitnum: 25, * userid: 1, * stage: 'Sent' * }); * console.log(`Found ${result.totalresults} quotes`); * ``` * * @see https://developers.whmcs.com/api-reference/getquotes */ getQuotes: (params = {}) => callApi("GetQuotes", params), /** * Retrieve transaction records * * @param params - Optional parameters for filtering transactions * @returns Promise that resolves with the list of transactions * * @example * ```typescript * const result = await client.billing.getTransactions({ * clientid: 1, * limitstart: 0, * limitnum: 25 * }); * console.log(`Found ${result.totalresults} transactions`); * ``` * * @see https://developers.whmcs.com/api-reference/gettransactions */ getTransactions: (params = {}) => callApi("GetTransactions", params), /** * Send a quote to the client * * @param params - The parameters for sending a quote * @returns Promise that resolves when the quote is sent * * @example * ```typescript * await client.billing.sendQuote({ * quoteid: 123 * }); * ``` * * @see https://developers.whmcs.com/api-reference/sendquote */ sendQuote: (params) => callApi("SendQuote", params), /** * Update an existing invoice * * @param params - The parameters for updating an invoice * @returns Promise that resolves when the invoice is updated * * @example * ```typescript * await client.billing.updateInvoice({ * invoiceid: 123, * itemdescription: ['Updated Service Description'], * itemamount: [75.00], * itemtaxed: [true], * duedate: '2024-03-15', * notes: 'Updated invoice terms' * }); * ``` * * @see https://developers.whmcs.com/api-reference/updateinvoice */ updateInvoice: (params) => callApi("UpdateInvoice", params), /** * Update a payment method * * @param params - The parameters for updating a payment method * @returns Promise that resolves when the payment method is updated * * @example * ```typescript * await client.billing.updatePayMethod({ * paymethodid: 123, * description: 'Updated Payment Method', * set_as_default: true * }); * ``` * * @see https://developers.whmcs.com/api-reference/updatepaymethod */ updatePayMethod: (params) => callApi("UpdatePayMethod", params), /** * Update an existing quote * * @param params - The parameters for updating a quote * @returns Promise that resolves when the quote is updated * * @example * ```typescript * await client.billing.updateQuote({ * quoteid: 123, * subject: 'Updated Quote Subject', * stage: 'Sent', * validuntil: '2024-04-15', * lineitems: [ * { * id: 1, * description: 'Updated Service', * qty: 2, * up: 100.00 * } * ] * }); * ``` * * @see https://developers.whmcs.com/api-reference/updatequote */ updateQuote: (params) => callApi("UpdateQuote", params), /** * Update a transaction record * * @param params - The parameters for updating a transaction * @returns Promise that resolves when the transaction is updated * * @example * ```typescript * await client.billing.updateTransaction({ * transactionid: 123, * description: 'Updated Payment Description', * amountin: 110.00, * fees: 4.00 * }); * ``` * * @see https://developers.whmcs.com/api-reference/updatetransaction */ updateTransaction: (params) => callApi("UpdateTransaction", params) }); // src/modules/client.ts var createClientModule = (callApi) => ({ /** * Add a new client to the system * * @param params - The parameters for creating a client * @returns Promise that resolves with the new client ID * * @example * ```typescript * const result = await client.client.addClient({ * firstname: 'John', * lastname: 'Doe', * email: 'john.doe@example.com', * address1: '123 Main Street', * city: 'New York', * state: 'NY', * postcode: '10001', * country: 'US', * phonenumber: '+1-555-123-4567', * password2: 'securepassword123', * currency: 1, * notes: 'VIP client - requires priority support' * }); * console.log(`Client created with ID: ${result.clientid}`); * ``` * * @see https://developers.whmcs.com/api-reference/addclient */ addClient: (params) => callApi("AddClient", params), /** * Add a contact to an existing client * * @param params - The parameters for creating a contact * @returns Promise that resolves with the new contact ID * * @example * ```typescript * const result = await client.client.addContact({ * clientid: 1, * firstname: 'Jane', * lastname: 'Doe', * email: 'jane.doe@example.com', * address1: '123 Main Street', * city: 'New York', * state: 'NY', * postcode: '10001', * country: 'US', * phonenumber: '+1-555-123-4568', * permissions: 'profile,contacts,products,tickets' * }); * console.log(`Contact created with ID: ${result.contactid}`); * ``` * * @see https://developers.whmcs.com/api-reference/addcontact */ addContact: (params) => callApi("AddContact", params), /** * Close a client account * * @param params - The parameters for closing a client * @returns Promise that resolves when the client is closed * * @example * ```typescript * await client.client.closeClient({ * clientid: 123 * }); * ``` * * @see https://developers.whmcs.com/api-reference/closeclient */ closeClient: (params) => callApi("CloseClient", params), /** * Delete a client from the system * * @param params - The parameters for deleting a client * @returns Promise that resolves when the client is deleted * * @example * ```typescript * await client.client.deleteClient({ * clientid: 123, * deleteusers: true, * deletetransactions: false * }); * ``` * * @see https://developers.whmcs.com/api-reference/deleteclient */ deleteClient: (params) => callApi("DeleteClient", params), /** * Delete a contact from a client * * @param params - The parameters for deleting a contact * @returns Promise that resolves when the contact is deleted * * @example * ```typescript * await client.client.deleteContact({ * contactid: 123 * }); * ``` * * @see https://developers.whmcs.com/api-reference/deletecontact */ deleteContact: (params) => callApi("DeleteContact", params), /** * Retrieve cancelled packages for clients * * @param params - Optional parameters for filtering cancelled packages * @returns Promise that resolves with the list of cancelled packages * * @example * ```typescript * const result = await client.client.getCancelledPackages({ * limitstart: 0, * limitnum: 25, * clientid: 1 * }); * console.log(`Found ${result.totalresults} cancelled packages`); * ``` * * @see https://developers.whmcs.com/api-reference/getcancelledpackages */ getCancelledPackages: (params = {}) => callApi("GetCancelledPackages", params), /** * Retrieve client groups * * @param params - Optional parameters for filtering client groups * @returns Promise that resolves with the list of client groups * * @example * ```typescript * const result = await client.client.getClientGroups({ * limitstart: 0, * limitnum: 25 * }); * console.log(`Found ${result.totalresults} client groups`); * ``` * * @see https://developers.whmcs.com/api-reference/getclientgroups */ getClientGroups: (params = {}) => callApi("GetClientGroups", params), /** * Retrieve a client's password * * @param params - The parameters for retrieving client password * @returns Promise that resolves with the client password * * @example * ```typescript * const result = await client.client.getClientPassword({ * userid: 1 * }); * console.log(`Client password: ${result.password}`); * ``` * * @see https://developers.whmcs.com/api-reference/getclientpassword */ getClientPassword: (params) => callApi("GetClientPassword", params), /** * Retrieve a list of clients * * @param params - Optional parameters for filtering clients * @returns Promise that resolves with the list of clients * * @example * ```typescript * const result = await client.client.getClients({ * limitstart: 0, * limitnum: 25, * search: 'john', * status: 'Active' * }); * console.log(`Found ${result.totalresults} clients`); * ``` * * @see https://developers.whmcs.com/api-reference/getclients */ getClients: (params = {}) => callApi("GetClients", params), /** * Retrieve addons for a client * * @param params - The parameters for retrieving client addons * @returns Promise that resolves with the list of client addons * * @example * ```typescript * const result = await client.client.getClientsAddons({ * clientid: 1, * limitstart: 0, * limitnum: 25 * }); * console.log(`Found ${result.totalresults} addons`); * ``` * * @see https://developers.whmcs.com/api-reference/getclientsaddons */ getClientsAddons: (params) => callApi("GetClientsAddons", params), /** * Retrieve detailed information about a client * * @param params - The parameters for retrieving client details * @returns Promise that resolves with the client details * * @example * ```typescript * const result = await client.client.getClientsDetails({ * clientid: 1, * stats: true * }); * console.log(`Client: ${result.client.firstname} ${result.client.lastname} (${result.client.email})`); * ``` * * @see https://developers.whmcs.com/api-reference/getclientsdetails */ getClientsDetails: async (params) => { const response = await callApi("GetClientsDetails", params); return { result: response.result, client: { id: response.client.id, owner_user_id: response.client.owner_user_id, uuid: response.client.uuid, firstname: response.client.firstname, lastname: response.client.lastname, fullname: response.client.fullname, companyname: response.client.companyname, email: response.client.email, address1: response.client.address1, address2: response.client.address2, city: response.client.city, state: response.client.state, postcode: response.client.postcode, countrycode: response.client.countrycode, country: response.client.country, phonenumber: response.client.phonenumber, tax_id: response.client.tax_id, email_preferences: { general: Boolean(response.client.email_preferences.general), invoice: Boolean(response.client.email_preferences.invoice), support: Boolean(response.client.email_preferences.support), product: Boolean(response.client.email_preferences.product), domain: Boolean(response.client.email_preferences.domain), affiliate: Boolean(response.client.email_preferences.affiliate) }, countryname: response.client.countryname, phonecc: response.client.phonecc, phonenumberformatted: response.client.phonenumberformatted, billingcid: response.client.billingcid, notes: response.client.notes, currency: response.client.currency, currency_code: response.client.currency_code, defaultgateway: response.client.defaultgateway, groupid: response.client.groupid, status: response.client.status, credit: response.client.credit, taxexempt: response.client.taxexempt, latefeeoveride: response.client.latefeeoveride, overideduenotices: response.client.overideduenotices, separateinvoices: response.client.separateinvoices, disableautocc: response.client.disableautocc, emailoptout: response.client.emailoptout, marketing_emails_opt_in: response.client.marketing_emails_opt_in, overrideautoclose: response.client.overrideautoclose, allowSingleSignOn: Boolean(response.client.allowSingleSignOn), email_verified: response.client.email_verified, language: response.client.language, tax_state: response.client.tax_state, tax_countrycode: response.client.tax_countrycode, lastlogin: response.client.lastlogin, customfields: response.client.customfields }, users: response.users.user, stats: response.stats }; }, /** * Retrieve domains for a client * * @param params - The parameters for retrieving client domains * @returns Promise that resolves with the list of client domains * * @example * ```typescript * const result = await client.client.getClientsDomains({ * clientid: 1, * limitstart: 0, * limitnum: 25, * status: 'Active' * }); * console.log(`Found ${result.totalresults} domains`); * ``` * * @see https://developers.whmcs.com/api-reference/getclientsdomains */ getClientsDomains: (params) => callApi("GetClientsDomains", params), /** * Retrieve products/services for a client * * @param params - The parameters for retrieving client products * @returns Promise that resolves with the list of client products * * @example * ```typescript * const result = await client.client.getClientsProducts({ * clientid: 1, * limitstart: 0, * limitnum: 25, * status: 'Active', * productid: 5 * }); * console.log(`Found ${result.totalresults} products`); * ``` * * @see https://developers.whmcs.com/api-reference/getclientsproducts */ getClientsProducts: (params) => callApi("GetClientsProducts", params), /** * Retrieve contacts for a client * * @param params - The parameters for retrieving contacts * @returns Promise that resolves with the list of contacts * * @example * ```typescript * const result = await client.client.getContacts({ * limitstart: 0, * limitnum: 25, * userid: 1, * firstname: 'John' * }); * console.log(`Found ${result.totalresults} contacts`); * ``` * * @see https://developers.whmcs.com/api-reference/getcontacts */ getContacts: (params = {}) => callApi("GetContacts", params), /** * Retrieve emails sent to clients * * @param params - The parameters for retrieving emails * @returns Promise that resolves with the list of emails * * @example * ```typescript * const result = await client.client.getEmails({ * limitstart: 0, * limitnum: 25, * clientid: 1, * subject: 'Invoice' * }); * console.log(`Found ${result.totalresults} emails`); * ``` * * @see https://developers.whmcs.com/api-reference/getemails */ getEmails: (params = {}) => callApi("GetEmails", params), /** * Update an existing client * * @param params - The parameters for updating a client * @returns Promise that resolves with the updated client ID * * @example * ```typescript * const result = await client.client.updateClient({ * clientid: 1, * firstname: 'Jane', * lastname: 'Smith', * email: 'jane.smith@example.com', * phonenumber: '+1-555-987-6543', * notes: 'Updated contact information' * }); * console.log(`Updated client with ID: ${result.clientid}`); * ``` * * @see https://developers.whmcs.com/api-reference/updateclient */ updateClient: (params) => callApi("UpdateClient", params), /** * Update an existing contact * * @param params - The parameters for updating a contact * @returns Promise that resolves with the updated contact ID * * @example * ```typescript * const result = await client.client.updateContact({ * contactid: 123, * firstname: 'Jane', * lastname: 'Smith', * email: 'jane.smith@example.com', * phonenumber: '+1-555-987-6543', * permissions: 'profile,contacts,products,domains,tickets' * }); * console.log(`Updated contact with ID: ${result.contactid}`); * ``` * * @see https://developers.whmcs.com/api-reference/updatecontact */ updateContact: (params) => callApi("UpdateContact", params) }); // src/modules/domains.ts var createDomainsModule = (callApi) => ({ /** * Creates or updates a Top-Level Domain (TLD) configuration with pricing. * * @param params - TLD extension and configuration including pricing, features, and registrar settings * @returns Promise resolving to TLD configuration and pricing details * * @example * ```typescript * const response = await client.domains.createOrUpdateTLD({ * extension: '.com', * id_protection: true, * dns_management: true, * auto_registrar: 'enom', * register: { 1: 10.00, 2: 20.00 } * }); * console.log(response.extension); * ``` * * @see https://developers.whmcs.com/api-reference/createorupdatetld/ */ createOrUpdateTLD: (params) => callApi("CreateOrUpdateTLD", params), /** * Retrieves the current locking status of a domain from the registrar. * * @param params - Domain ID to check locking status for * @returns Promise resolving to current lock status * * @example * ```typescript * const response = await client.domains.domainGetLockingStatus({ * domainid: 123 * }); * console.log(response.lockstatus); * ``` * * @see https://developers.whmcs.com/api-reference/domaingetlockingstatus/ */ domainGetLockingStatus: (params) => callApi("DomainGetLockingStatus", params), /** * Retrieves the current nameservers for a domain from the registrar. * * @param params - Domain ID to get nameservers for * @returns Promise resolving to current nameserver configuration * * @example * ```typescript * const response = await client.domains.domainGetNameservers({ * domainid: 123 * }); * console.log(response.ns1, response.ns2); * ``` * * @see https://developers.whmcs.com/api-reference/domaingetnameservers/ */ domainGetNameservers: (params) => callApi("DomainGetNameservers", params), /** * Retrieves WHOIS information for a domain from the registrar. * * @param params - Domain ID to get WHOIS information for * @returns Promise resolving to WHOIS data * * @example * ```typescript * const response = await client.domains.domainGetWhoisInfo({ * domainid: 123 * }); * console.log(response.whois); * ``` * * @see https://developers.whmcs.com/api-reference/domaingetwhoisinfo/ */ domainGetWhoisInfo: (params) => callApi("DomainGetWhoisInfo", params), /** * Sends a registration command to the registrar for a domain. * * @param params - Domain ID and optional registrar specification * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.domains.domainRegister({ * domainid: 123, * registrar: 'enom' * }); * ``` * * @see https://developers.whmcs.com/api-reference/domainregister/ */ domainRegister: (params) => callApi("DomainRegister", params), /** * Releases a domain to a new tag/registrar (UK domains). * * @param params - Domain ID and new tag for release * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.domains.domainRelease({ * domainid: 123, * newtag: 'NEWTAG' * }); * ``` * * @see https://developers.whmcs.com/api-reference/domainrelease/ */ domainRelease: (params) => callApi("DomainRelease", params), /** * Sends a renewal command to the registrar for a domain. * * @param params - Domain ID and optional registration period * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.domains.domainRenew({ * domainid: 123, * regperiod: 1 * }); * ``` * * @see https://developers.whmcs.com/api-reference/domainrenew/ */ domainRenew: (params) => callApi("DomainRenew", params), /** * Requests the EPP (auth) code for a domain from the registrar. * * @param params - Domain ID to request EPP code for * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.domains.domainRequestEPP({ * domainid: 123 * }); * ``` * * @see https://developers.whmcs.com/api-reference/domainrequestepp/ */ domainRequestEPP: (params) => callApi("DomainRequestEPP", params), /** * Toggles ID protection (privacy) for a domain at the registrar. * * @param params - Domain ID and optional protection enable/disable flag * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.domains.domainToggleIdProtect({ * domainid: 123, * protectenable: true * }); * ``` * * @see https://developers.whmcs.com/api-reference/domaintoggleidprotect/ */ domainToggleIdProtect: (params) => callApi("DomainToggleIdProtect", params), /** * Initiates a domain transfer command at the registrar. * * @param params - Domain ID, transfer secret, and optional registrar * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.domains.domainTransfer({ * domainid: 123, * transfersecret: 'EPP_CODE_HERE', * registrar: 'enom' * }); * ``` * * @see https://developers.whmcs.com/api-reference/domaintransfer/ */ domainTransfer: (params) => callApi("DomainTransfer", params), /** * Updates the locking status of a domain at the registrar. * * @param params - Domain ID and optional lock status flag * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.domains.domainUpdateLockingStatus({ * domainid: 123, * lockstatus: true * }); * ``` * * @see https://developers.whmcs.com/api-reference/domainupdatelockingstatus/ */ domainUpdateLockingStatus: (params) => callApi("DomainUpdateLockingStatus", params), /** * Updates the nameservers for a domain at the registrar. * * @param params - Domain ID/name and nameserver configuration (ns1, ns2 required) * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.domains.domainUpdateNameservers({ * domainid: 123, * ns1: 'ns1.example.com', * ns2: 'ns2.example.com' * }); * ``` * * @see https://developers.whmcs.com/api-reference/domainupdatenameservers/ */ domainUpdateNameservers: (params) => callApi("DomainUpdateNameservers", params), /** * Updates WHOIS contact information for a domain at the registrar. * * @param params - Domain ID and contact information to update * @returns Promise resolving to success confirmation * * @example * ```typescript * await client.domains.domainUpdateWhoisInfo({ * domainid: 123, * firstname: 'John', * lastname: 'Doe', * email: 'john@example.com' * }); * ``` * * @see https://developers.whmcs.com/api-reference/domainupdatewhoisinfo/ */ domainUpdateWhoisInfo: (params) => callApi("DomainUpdateWhoisInfo", params), /** * Performs a WHOIS lookup for any domain name. * * @param params - Domain name to perform WHOIS lookup on * @returns Promise resolving to WHOIS information and status * * @example * ```typescript * const response = await client.domains.domainWhois({ * domain: 'example.com' * }); * console.log(response.whois, response.status); * ``` * * @see https://developers.whmcs.com/api-reference/domainwhois/ */ domainWhois: (params) => callApi("DomainWhois", params), /** * Retrieves a list of active registrars configured in WHMCS. * * @returns Promise resolving to list of available registrars * * @example * ```typescript * const response = await client.domains.getRegistrars(); * console.log(response.registrars); * ``` * * @see https://developers.whmcs.com/api-reference/getregistrars/ */ getRegistrars: () => callApi("GetRegistrars"), /** * Retrieves TLD pricing information for registration, transfer, and renewal. * * @param params - Optional client ID and currency ID for pricing context * @returns Promise resolving to comprehensive TLD pricing data * * @example * ```typescript * const response = await client.domains.getTLDPricing({ * clientid: 123, * currencyid: 1 * }); * console.log(response.pricing); * ``` * * @see https://developers.whmcs.com/api-reference/gettldpricing/ */ getTLDPricing: (params = {}) => callApi("GetTLDPricing", params), /** * Updates client domain properties including status, dates, and configuration. * * @param params - Domain ID and properties to update * @returns Promise resolving to updated domain ID * * @example * ```typescript * const response = await client.domains.updateClientDomain({ * domainid: 123, * status: 'Active', * nextduedate: '2024-12-01', * dnsmanagement: true * }); * console.log(response.domainid); * ``` * * @see https://developers.whmcs.com/api-reference/updateclientdomain/ */ updateClientDomain: (params) => callApi("UpdateClientDomain", params) }); // src/modules/modules.ts function createModulesModule(callApi) { return { /** * Activate a WHMCS module * * @param params - Parameters for activating module * @param params.moduleType - The module type to be activated * @param params.moduleName - The module name to be activated * @param params.parameters - An array of configuration parameters to set for the given module * @returns Promise resolving to success response * * @example * ```typescript * // Activate a payment gateway * await client.modules.activateModule({ * moduleType: 'gateway', * moduleName: 'paypal', * parameters: { * email: 'merchant@example.com', * forcesubscriptions: true * } * }); * * // Activate a provisioning module * await client.modules.activateModule({ * moduleType: 'server', * moduleName: 'cpanel' * }); * ``` * * @see https://developers.whmcs.com/api-reference/activatemodule/ */ activateModule: (params) => callApi("ActivateModule", params), /** * Deactivate a WHMCS module * * @param params - Parameters for deactivating module * @param params.moduleType - The module type to be deactivated * @param params.moduleName - The module name to be deactivated * @param params.newGateway - The Gateway to switch respective entities to when deactivating a Gateway Module * @returns Promise resolving to success response * * @example * ```typescript * // Deactivate a payment gateway * await client.modules.deactivateModule({ * moduleType: 'gateway', * moduleName: 'paypal' * }); * * // Deactivate gateway and switch to another * await client.modules.deactivateModule({ * moduleType: 'gateway', * moduleName: 'paypal', * newGateway: 'stripe' * }); * ``` * * @see https://developers.whmcs.com/api-reference/deactivatemodule/ */ deactivateModule: (params) => callApi("DeactivateModule", params), /** * Get configuration parameters for a module * * @param params - Parameters for getting module configuration * @param params.moduleType - The module type to get parameters for * @param params.moduleName - The module name to get parameters for * @returns Promise resolving to module configuration parameters * * @example * ```typescript * // Get PayPal gateway configuration parameters * const config = await client.modules.getModuleConfigurationParameters({ * moduleType: 'gateway', * moduleName: 'paypal' * }); * * console.log('Available parameters:', config.parameters); * // Use parameters for activation * await client.modules.activateModule({ * moduleType: 'gateway', * moduleName: 'paypal', * parameters: { * email: 'merchant@example.com' * } * }); * ``` * * @see https://developers.whmcs.com/api-reference/getmoduleconfigurationparameters/ */ getModuleConfigurationParameters: (params) => callApi("GetModuleConfigurationParameters", params), /** * Get module queue for incomplete failed actions * * @param params - Optional parameters for filtering module queue * @param params.relatedId - The id of the service to load. Used in conjunction with serviceType * @param params.serviceType - The type of service to load ('domain', 'service', 'addon' or '') * @param params.moduleName - The module name to obtain the queue for in system format * @param params.moduleAction - The module action to obtain the queue for * @param params.since - The date/time since to obtain the items. Format Y-m-d Can include H:i:s * @returns Promise resolving to module queue data * * @example * ```typescript * // Get all queue items * const queue = await client.modules.getModuleQueue(); * * // Get queue for specific service * const serviceQueue = await client.modules.getModuleQueue({ * relatedId: 1, * serviceType: 'service' * }); * * // Get queue for specific module * const moduleQueue = await client.modules.getModuleQueue({ * moduleName: 'cpanel', * moduleAction: 'CreateAccount' * }); * ``` * * @see https://developers.whmcs.com/api-reference/getmodulequeue/ */ getModuleQueue: (params = {}) => callApi("GetModuleQueue", params), /** * Update configuration for an already activated module * * @param params - Parameters for updating module configuration * @param params.moduleType - The module type to be updated * @param params.moduleName - The module name to be updated * @param params.parameters - An array of configuration parameters to set for the given module * @returns Promise resolving to success response * * @example * ```typescript * // Update PayPal gateway configuration * await client.modules.updateModuleConfiguration({ * moduleType: 'gateway', * moduleName: 'paypal', * parameters: { * email: 'newemail@example.com', * sandbox: false * } * }); * ``` * * @see https://developers.whmcs.com/api-reference/updatemoduleconfiguration/ */ updateModuleConfiguration: (params) => callApi("UpdateModuleConfiguration", params) }; } // src/modules/orders.ts var createOrdersModule = (callApi) => ({ /** * Accept a pending order * * @param params - The parameters for accepting an order * @returns Promise that resolves when the order is accepted * * @example * ```typescript * await client.orders.acceptOrder({ * orderid: 123, * serverid: 1, * serviceusername: 'user123', * servicepassword: 'password123', * sendregistrar: true, * autosetup: true, * sendemail: true * }); * ``` * * @see https://developers.whmcs.com/api-reference/acceptorder */ acceptOrder: (params) => callApi("AcceptOrder", params), /** * Add a new order to the system * * @param params - The parameters for creating an order * @returns Promise that resolves with the new order details