import {z} from 'zod' export type ClientContactRequest = {first_name?: string | undefined, last_name?: string | undefined, phone?: string | undefined, custom_value1?: string | undefined, custom_value2?: string | undefined, custom_value3?: string | undefined, custom_value4?: string | undefined, email?: string | undefined, password?: string | undefined, send_email?: boolean | undefined, cc_only?: boolean | undefined, can_sign?: boolean | undefined}; export type CountryType = number; export type ClientSettings = {currency_id: string, timezone_id?: string | undefined, date_format_id?: string | undefined, military_time?: boolean | undefined, language_id?: string | undefined, show_currency_code?: boolean | undefined, payment_terms?: number | undefined, company_gateway_ids?: string | undefined, custom_value1?: string | undefined, custom_value2?: string | undefined, custom_value3?: string | undefined, custom_value4?: string | undefined, default_task_rate?: number | undefined, send_reminders?: boolean | undefined, enable_client_portal_tasks?: boolean | undefined, email_style?: string | undefined, reply_to_email?: string | undefined, bcc_email?: string | undefined, pdf_email_attachment?: boolean | undefined, ubl_email_attachment?: boolean | undefined, email_style_custom?: string | undefined, counter_number_applied?: string | undefined, quote_number_applied?: string | undefined, custom_message_dashboard?: string | undefined, custom_message_unpaid_invoice?: string | undefined, custom_message_paid_invoice?: string | undefined, custom_message_unapproved_quote?: string | undefined, lock_invoices?: boolean | undefined, auto_archive_invoice?: boolean | undefined, auto_archive_quote?: boolean | undefined, auto_convert_quote?: boolean | undefined, inclusive_taxes?: boolean | undefined, task_number_pattern?: string | undefined, task_number_counter?: number | undefined, reminder_send_time?: number | undefined, expense_number_pattern?: string | undefined, expense_number_counter?: number | undefined, vendor_number_pattern?: string | undefined, vendor_number_counter?: number | undefined, ticket_number_pattern?: string | undefined, ticket_number_counter?: number | undefined, payment_number_pattern?: string | undefined, payment_number_counter?: number | undefined, invoice_number_pattern?: string | undefined, invoice_number_counter?: number | undefined, quote_number_pattern?: string | undefined, quote_number_counter?: number | undefined, client_number_pattern?: string | undefined, client_number_counter?: number | undefined, credit_number_pattern?: string | undefined, credit_number_counter?: number | undefined, recurring_invoice_number_prefix?: string | undefined, reset_counter_frequency_id?: number | undefined, reset_counter_date?: string | undefined, counter_padding?: number | undefined, shared_invoice_quote_counter?: boolean | undefined, update_products?: boolean | undefined, convert_products?: boolean | undefined, fill_products?: boolean | undefined, invoice_terms?: string | undefined, quote_terms?: string | undefined, invoice_taxes?: number | undefined, invoice_design_id?: string | undefined, quote_design_id?: string | undefined, invoice_footer?: string | undefined, invoice_labels?: string | undefined, tax_rate1?: number | undefined, tax_name1?: string | undefined, tax_rate2?: number | undefined, tax_name2?: string | undefined, tax_rate3?: number | undefined, tax_name3?: string | undefined, payment_type_id?: string | undefined, custom_fields?: string | undefined, email_footer?: string | undefined, email_sending_method?: string | undefined, gmail_sending_user_id?: string | undefined, email_subject_invoice?: string | undefined, email_subject_quote?: string | undefined, email_subject_payment?: string | undefined, email_template_invoice?: string | undefined, email_template_quote?: string | undefined, email_template_payment?: string | undefined, email_subject_reminder1?: string | undefined, email_subject_reminder2?: string | undefined, email_subject_reminder3?: string | undefined, email_subject_reminder_endless?: string | undefined, email_template_reminder1?: string | undefined, email_template_reminder2?: string | undefined, email_template_reminder3?: string | undefined, email_template_reminder_endless?: string | undefined, enable_portal_password?: boolean | undefined, show_accept_invoice_terms?: boolean | undefined, show_accept_quote_terms?: boolean | undefined, require_invoice_signature?: boolean | undefined, require_quote_signature?: boolean | undefined, name?: string | undefined, company_logo?: Record | undefined, website?: string | undefined, address1?: string | undefined, address2?: string | undefined, city?: string | undefined, state?: string | undefined, postal_code?: string | undefined, phone?: string | undefined, email?: string | undefined, country_id?: string | undefined, vat_number?: string | undefined, page_size?: string | undefined, font_size?: number | undefined, primary_font?: string | undefined, secondary_font?: string | undefined, hide_paid_to_date?: boolean | undefined, embed_documents?: boolean | undefined, all_pages_header?: boolean | undefined, all_pages_footer?: boolean | undefined, document_email_attachment?: boolean | undefined, enable_client_portal_password?: boolean | undefined, enable_email_markup?: boolean | undefined, enable_client_portal_dashboard?: boolean | undefined, enable_client_portal?: boolean | undefined, email_template_statement?: string | undefined, email_subject_statement?: string | undefined, signature_on_pdf?: boolean | undefined, quote_footer?: string | undefined, email_subject_custom1?: string | undefined, email_subject_custom2?: string | undefined, email_subject_custom3?: string | undefined, email_template_custom1?: string | undefined, email_template_custom2?: string | undefined, email_template_custom3?: string | undefined, enable_reminder1?: boolean | undefined, enable_reminder2?: boolean | undefined, enable_reminder3?: boolean | undefined, num_days_reminder1?: number | undefined, num_days_reminder2?: number | undefined, num_days_reminder3?: number | undefined, schedule_reminder1?: string | undefined, schedule_reminder2?: string | undefined, schedule_reminder3?: string | undefined, late_fee_amount1?: number | undefined, late_fee_amount2?: number | undefined, late_fee_amount3?: number | undefined, endless_reminder_frequency_id?: string | undefined, client_online_payment_notification?: boolean | undefined, client_manual_payment_notification?: boolean | undefined, enable_e_invoice?: boolean | undefined, default_expense_payment_type_id?: string | undefined, e_invoice_type?: string | undefined, mailgun_endpoint?: string | undefined, client_initiated_payments?: boolean | undefined, client_initiated_payments_minimum?: number | undefined, sync_invoice_quote_columns?: boolean | undefined, show_task_item_description?: boolean | undefined, allow_billable_task_items?: boolean | undefined, accept_client_input_quote_approval?: boolean | undefined, custom_sending_email?: string | undefined, show_paid_stamp?: boolean | undefined, show_shipping_address?: boolean | undefined, company_logo_size?: number | undefined, show_email_footer?: boolean | undefined, email_alignment?: string | undefined, auto_bill_standard_invoices?: boolean | undefined, postmark_secret?: string | undefined, mailgun_secret?: string | undefined, mailgun_domain?: string | undefined, send_email_on_mark_paid?: boolean | undefined, vendor_portal_enable_uploads?: boolean | undefined, besr_id?: string | undefined, qr_iban?: string | undefined, email_subject_purchase_order?: string | undefined, email_template_purchase_order?: string | undefined, require_purchase_order_signature?: boolean | undefined, purchase_order_public_notes?: string | undefined, purchase_order_terms?: string | undefined, purchase_order_footer?: string | undefined, purchase_order_design_id?: string | undefined, purchase_order_number_pattern?: string | undefined, purchase_order_number_counter?: number | undefined, page_numbering_alignment?: string | undefined, page_numbering?: boolean | undefined, auto_archive_invoice_cancelled?: boolean | undefined, email_from_name?: string | undefined, show_all_tasks_client_portal?: boolean | undefined, entity_send_time?: number | undefined, shared_invoice_credit_counter?: boolean | undefined, reply_to_name?: string | undefined, hide_empty_columns_on_pdf?: boolean | undefined, enable_reminder_endless?: boolean | undefined, use_credits_payment?: boolean | undefined, recurring_invoice_number_pattern?: string | undefined, recurring_invoice_number_counter?: number | undefined, client_portal_under_payment_minimum?: number | undefined, auto_bill_date?: string | undefined, primary_color?: string | undefined, secondary_color?: string | undefined, client_portal_allow_under_payment?: boolean | undefined, client_portal_allow_over_payment?: boolean | undefined, auto_bill?: string | undefined, client_portal_terms?: string | undefined, client_portal_privacy_policy?: string | undefined, client_can_register?: boolean | undefined, portal_design_id?: string | undefined, late_fee_endless_percent?: number | undefined, late_fee_endless_amount?: number | undefined, auto_email_invoice?: boolean | undefined, email_signature?: string | undefined}; export type ClientRequest = {id?: string | undefined, contacts: Array, name?: string | undefined, website?: string | undefined, private_notes?: string | undefined, industry_id?: number | undefined, size_id?: number | undefined, address1?: string | undefined, address2?: string | undefined, city?: string | undefined, state?: string | undefined, postal_code?: string | undefined, phone?: string | undefined, country_id: CountryType, custom_value1?: string | undefined, custom_value2?: string | undefined, custom_value3?: string | undefined, custom_value4?: string | undefined, vat_number?: string | undefined, id_number?: string | undefined, number?: string | undefined, shipping_address1?: string | undefined, shipping_address2?: string | undefined, shipping_city?: string | undefined, shipping_state?: string | undefined, shipping_postal_code?: string | undefined, shipping_country_id?: number | undefined, is_deleted?: boolean | undefined, group_settings_id?: string | undefined, routing_id?: string | undefined, is_tax_exempt?: boolean | undefined, has_valid_vat_number?: boolean | undefined, classification?: string | undefined, settings?: ClientSettings | undefined}; export type CreateApiApiV1ClientsArgs = {'X-API-TOKEN': string, 'X-Requested-With': string, index?: string | undefined, include?: string | undefined, body: ClientRequest}; export type CreateApiApiV1ClientsOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const clientContact = z.object({id: z.string().optional(), user_id: z.string().optional(), client_id: z.string().optional(), first_name: z.string().optional(), last_name: z.string().optional(), phone: z.string().optional(), custom_value1: z.string().optional(), custom_value2: z.string().optional(), custom_value3: z.string().optional(), custom_value4: z.string().optional(), email: z.string().optional(), accepted_terms_version: z.string().optional(), password: z.string().optional(), confirmation_code: z.string().optional(), token: z.string().optional(), contact_key: z.string().optional(), is_primary: z.boolean().optional(), confirmed: z.boolean().optional(), is_locked: z.boolean().optional(), send_email: z.boolean().optional(), cc_only: z.boolean().optional(), can_sign: z.boolean().optional(), failed_logins: z.number().optional(), email_verified_at: z.number().optional(), last_login: z.number().optional(), created_at: z.number().optional(), updated_at: z.number().optional(), deleted_at: z.number().optional()}); export const countryType = z.number().int(); export const clientSettings = z.object({currency_id: z.string(), timezone_id: z.string().optional(), date_format_id: z.string().optional(), military_time: z.boolean().optional(), language_id: z.string().optional(), show_currency_code: z.boolean().optional(), payment_terms: z.number().int().optional(), company_gateway_ids: z.string().optional(), custom_value1: z.string().optional(), custom_value2: z.string().optional(), custom_value3: z.string().optional(), custom_value4: z.string().optional(), default_task_rate: z.number().optional(), send_reminders: z.boolean().optional(), enable_client_portal_tasks: z.boolean().optional(), email_style: z.string().optional(), reply_to_email: z.string().optional(), bcc_email: z.string().optional(), pdf_email_attachment: z.boolean().optional(), ubl_email_attachment: z.boolean().optional(), email_style_custom: z.string().optional(), counter_number_applied: z.string().optional(), quote_number_applied: z.string().optional(), custom_message_dashboard: z.string().optional(), custom_message_unpaid_invoice: z.string().optional(), custom_message_paid_invoice: z.string().optional(), custom_message_unapproved_quote: z.string().optional(), lock_invoices: z.boolean().optional(), auto_archive_invoice: z.boolean().optional(), auto_archive_quote: z.boolean().optional(), auto_convert_quote: z.boolean().optional(), inclusive_taxes: z.boolean().optional(), task_number_pattern: z.string().optional(), task_number_counter: z.number().int().optional(), reminder_send_time: z.number().int().optional(), expense_number_pattern: z.string().optional(), expense_number_counter: z.number().int().optional(), vendor_number_pattern: z.string().optional(), vendor_number_counter: z.number().int().optional(), ticket_number_pattern: z.string().optional(), ticket_number_counter: z.number().int().optional(), payment_number_pattern: z.string().optional(), payment_number_counter: z.number().int().optional(), invoice_number_pattern: z.string().optional(), invoice_number_counter: z.number().int().optional(), quote_number_pattern: z.string().optional(), quote_number_counter: z.number().int().optional(), client_number_pattern: z.string().optional(), client_number_counter: z.number().int().optional(), credit_number_pattern: z.string().optional(), credit_number_counter: z.number().int().optional(), recurring_invoice_number_prefix: z.string().optional(), reset_counter_frequency_id: z.number().int().optional(), reset_counter_date: z.string().optional(), counter_padding: z.number().int().optional(), shared_invoice_quote_counter: z.boolean().optional(), update_products: z.boolean().optional(), convert_products: z.boolean().optional(), fill_products: z.boolean().optional(), invoice_terms: z.string().optional(), quote_terms: z.string().optional(), invoice_taxes: z.number().optional(), invoice_design_id: z.string().optional(), quote_design_id: z.string().optional(), invoice_footer: z.string().optional(), invoice_labels: z.string().optional(), tax_rate1: z.number().optional(), tax_name1: z.string().optional(), tax_rate2: z.number().optional(), tax_name2: z.string().optional(), tax_rate3: z.number().optional(), tax_name3: z.string().optional(), payment_type_id: z.string().optional(), custom_fields: z.string().optional(), email_footer: z.string().optional(), email_sending_method: z.string().optional(), gmail_sending_user_id: z.string().optional(), email_subject_invoice: z.string().optional(), email_subject_quote: z.string().optional(), email_subject_payment: z.string().optional(), email_template_invoice: z.string().optional(), email_template_quote: z.string().optional(), email_template_payment: z.string().optional(), email_subject_reminder1: z.string().optional(), email_subject_reminder2: z.string().optional(), email_subject_reminder3: z.string().optional(), email_subject_reminder_endless: z.string().optional(), email_template_reminder1: z.string().optional(), email_template_reminder2: z.string().optional(), email_template_reminder3: z.string().optional(), email_template_reminder_endless: z.string().optional(), enable_portal_password: z.boolean().optional(), show_accept_invoice_terms: z.boolean().optional(), show_accept_quote_terms: z.boolean().optional(), require_invoice_signature: z.boolean().optional(), require_quote_signature: z.boolean().optional(), name: z.string().optional(), company_logo: z.object({}).optional(), website: z.string().optional(), address1: z.string().optional(), address2: z.string().optional(), city: z.string().optional(), state: z.string().optional(), postal_code: z.string().optional(), phone: z.string().optional(), email: z.string().optional(), country_id: z.string().optional(), vat_number: z.string().optional(), page_size: z.string().optional(), font_size: z.number().optional(), primary_font: z.string().optional(), secondary_font: z.string().optional(), hide_paid_to_date: z.boolean().optional(), embed_documents: z.boolean().optional(), all_pages_header: z.boolean().optional(), all_pages_footer: z.boolean().optional(), document_email_attachment: z.boolean().optional(), enable_client_portal_password: z.boolean().optional(), enable_email_markup: z.boolean().optional(), enable_client_portal_dashboard: z.boolean().optional(), enable_client_portal: z.boolean().optional(), email_template_statement: z.string().optional(), email_subject_statement: z.string().optional(), signature_on_pdf: z.boolean().optional(), quote_footer: z.string().optional(), email_subject_custom1: z.string().optional(), email_subject_custom2: z.string().optional(), email_subject_custom3: z.string().optional(), email_template_custom1: z.string().optional(), email_template_custom2: z.string().optional(), email_template_custom3: z.string().optional(), enable_reminder1: z.boolean().optional(), enable_reminder2: z.boolean().optional(), enable_reminder3: z.boolean().optional(), num_days_reminder1: z.number().optional(), num_days_reminder2: z.number().optional(), num_days_reminder3: z.number().optional(), schedule_reminder1: z.string().optional(), schedule_reminder2: z.string().optional(), schedule_reminder3: z.string().optional(), late_fee_amount1: z.number().optional(), late_fee_amount2: z.number().optional(), late_fee_amount3: z.number().optional(), endless_reminder_frequency_id: z.string().optional(), client_online_payment_notification: z.boolean().optional(), client_manual_payment_notification: z.boolean().optional(), enable_e_invoice: z.boolean().optional(), default_expense_payment_type_id: z.string().optional(), e_invoice_type: z.string().optional(), mailgun_endpoint: z.string().optional(), client_initiated_payments: z.boolean().optional(), client_initiated_payments_minimum: z.number().optional(), sync_invoice_quote_columns: z.boolean().optional(), show_task_item_description: z.boolean().optional(), allow_billable_task_items: z.boolean().optional(), accept_client_input_quote_approval: z.boolean().optional(), custom_sending_email: z.string().optional(), show_paid_stamp: z.boolean().optional(), show_shipping_address: z.boolean().optional(), company_logo_size: z.number().optional(), show_email_footer: z.boolean().optional(), email_alignment: z.string().optional(), auto_bill_standard_invoices: z.boolean().optional(), postmark_secret: z.string().optional(), mailgun_secret: z.string().optional(), mailgun_domain: z.string().optional(), send_email_on_mark_paid: z.boolean().optional(), vendor_portal_enable_uploads: z.boolean().optional(), besr_id: z.string().optional(), qr_iban: z.string().optional(), email_subject_purchase_order: z.string().optional(), email_template_purchase_order: z.string().optional(), require_purchase_order_signature: z.boolean().optional(), purchase_order_public_notes: z.string().optional(), purchase_order_terms: z.string().optional(), purchase_order_footer: z.string().optional(), purchase_order_design_id: z.string().optional(), purchase_order_number_pattern: z.string().optional(), purchase_order_number_counter: z.number().optional(), page_numbering_alignment: z.string().optional(), page_numbering: z.boolean().optional(), auto_archive_invoice_cancelled: z.boolean().optional(), email_from_name: z.string().optional(), show_all_tasks_client_portal: z.boolean().optional(), entity_send_time: z.number().int().optional(), shared_invoice_credit_counter: z.boolean().optional(), reply_to_name: z.string().optional(), hide_empty_columns_on_pdf: z.boolean().optional(), enable_reminder_endless: z.boolean().optional(), use_credits_payment: z.boolean().optional(), recurring_invoice_number_pattern: z.string().optional(), recurring_invoice_number_counter: z.number().optional(), client_portal_under_payment_minimum: z.number().optional(), auto_bill_date: z.string().optional(), primary_color: z.string().optional(), secondary_color: z.string().optional(), client_portal_allow_under_payment: z.boolean().optional(), client_portal_allow_over_payment: z.boolean().optional(), auto_bill: z.string().optional(), client_portal_terms: z.string().optional(), client_portal_privacy_policy: z.string().optional(), client_can_register: z.boolean().optional(), portal_design_id: z.string().optional(), late_fee_endless_percent: z.number().optional(), late_fee_endless_amount: z.number().optional(), auto_email_invoice: z.boolean().optional(), email_signature: z.string().optional()}); export const client = z.object({id: z.string().optional(), contacts: z.array(clientContact).optional(), user_id: z.string().optional(), assigned_user_id: z.string().optional(), name: z.string().optional(), website: z.string().optional(), private_notes: z.string().optional(), client_hash: z.string().optional(), industry_id: z.number().optional(), size_id: z.number().optional(), address1: z.string().optional(), address2: z.string().optional(), city: z.string().optional(), state: z.string().optional(), postal_code: z.string().optional(), phone: z.string().optional(), country_id: countryType.optional(), custom_value1: z.string().optional(), custom_value2: z.string().optional(), custom_value3: z.string().optional(), custom_value4: z.string().optional(), vat_number: z.string().optional(), id_number: z.string().optional(), number: z.string().optional(), shipping_address1: z.string().optional(), shipping_address2: z.string().optional(), shipping_city: z.string().optional(), shipping_state: z.string().optional(), shipping_postal_code: z.string().optional(), shipping_country_id: z.number().optional(), is_deleted: z.boolean().optional(), balance: z.number().optional(), paid_to_date: z.number().optional(), credit_balance: z.number().optional(), last_login: z.number().optional(), created_at: z.number().optional(), updated_at: z.number().optional(), group_settings_id: z.string().optional(), routing_id: z.string().optional(), is_tax_exempt: z.boolean().optional(), has_valid_vat_number: z.boolean().optional(), payment_balance: z.number().optional(), settings: clientSettings.optional(), classification: z.string().optional(), public_notes: z.string().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Create client * * POST /api/v1/clients */ export const createApiApiV1Clients = async (args: CreateApiApiV1ClientsArgs, options?: CreateApiApiV1ClientsOptions) => { const {baseUrl = "https://demo.invoiceninja.com", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args['X-API-TOKEN'] != null) headers.set("X-API-TOKEN", String(args['X-API-TOKEN'])) if (args['X-Requested-With'] != null) headers.set("X-Requested-With", String(args['X-Requested-With'])) if (args.index != null) query.append("index", String(args.index)) if (args.include != null) query.append("include", String(args.include)) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/clients${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(client, await res.json()) };