import {z} from 'zod' export type GetApiApiV1CreditsArgs = {'X-API-TOKEN': string, 'X-Requested-With': string, include?: string | undefined, index?: string | undefined, per_page?: number | undefined, page?: number | undefined, sort?: Array | undefined}; export type GetApiApiV1CreditsOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const invoiceItem = z.object({quantity: z.number().optional(), cost: z.number().optional(), product_key: z.string().optional(), tags: z.string().optional(), product_cost: z.number().optional(), notes: z.string().optional(), discount: z.number().optional(), is_amount_discount: z.boolean().optional(), tax_name1: z.string().optional(), tax_rate1: z.number().optional(), tax_name2: z.string().optional(), tax_rate2: z.number().optional(), tax_name3: z.string().optional(), tax_rate3: z.number().optional(), sort_id: z.string().optional(), line_total: z.number().optional(), gross_line_total: z.number().optional(), tax_amount: z.number().optional(), custom_value1: z.string().optional(), custom_value2: z.string().optional(), custom_value3: z.string().optional(), custom_value4: z.string().optional(), type_id: z.string().optional(), tax_id: z.string().optional()}); export const creditInvitation = z.object({id: z.string().optional(), client_contact_id: z.string().optional(), key: z.string().optional(), link: z.string().optional(), sent_date: z.string().optional(), viewed_date: z.string().optional(), opened_date: z.string().optional(), updated_at: z.number().optional(), archived_at: z.number().optional(), email_error: z.string().optional(), email_status: z.string().optional(), can_sign: z.boolean().optional()}); export const companySettings = 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.enum(["plain", "light", "dark", "custom"]).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.enum(["when_saved", "when_sent", "when_paid"]).optional(), quote_number_applied: z.enum(["when_saved", "when_sent"]).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.enum(["off", "when_sent", "when_paid", "end_of_month"]).optional(), auto_archive_invoice: z.boolean().optional(), auto_archive_quote: z.boolean().optional(), auto_convert_quote: z.boolean().optional(), inclusive_taxes: z.boolean().optional(), translations: z.object({}).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().int().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.enum(["default", "gmail", "office365", "client_postmark", "client_mailgun", "mailgun", "client_brevo"]).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.string().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().int().optional(), num_days_reminder2: z.number().int().optional(), num_days_reminder3: z.number().int().optional(), schedule_reminder1: z.enum(["after_invoice_date", "before_due_date", "after_due_date"]).optional(), schedule_reminder2: z.enum(["after_invoice_date", "before_due_date", "after_due_date"]).optional(), schedule_reminder3: z.enum(["after_invoice_date", "before_due_date", "after_due_date"]).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.enum(["api.mailgun.net", "api.eu.mailgun.net"]).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().int().gte(0).lte(100).optional(), show_email_footer: z.boolean().optional(), email_alignment: z.enum(["left", "center", "right"]).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().int().optional(), page_numbering_alignment: z.enum(["left", "center", "right"]).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.enum(["all", "uninvoiced", "invoiced"]).optional(), entity_send_time: z.number().int().gte(1).lte(24).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().int().optional(), client_portal_under_payment_minimum: z.number().optional(), auto_bill_date: z.enum(["on_send_date", "on_due_date"]).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.enum(["off", "always", "optin", "optout"]).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(), classification: z.string().optional(), valid_until: z.string().optional(), credit_terms: z.string().optional(), credit_footer: z.string().optional()}); export const credit = z.object({id: z.string().optional(), user_id: z.string().optional(), assigned_user_id: z.string().optional(), client_id: z.string().optional(), status_id: z.string().optional(), invoice_id: z.string().optional(), number: z.string().optional(), po_number: z.string().optional(), terms: z.string().optional(), public_notes: z.string().optional(), private_notes: z.string().optional(), footer: z.string().optional(), custom_value1: z.string().optional(), custom_value2: z.string().optional(), custom_value3: z.string().optional(), custom_value4: z.string().optional(), tax_name1: z.string().optional(), tax_name2: z.string().optional(), tax_rate1: z.number().optional(), tax_rate2: z.number().optional(), tax_name3: z.string().optional(), tax_rate3: z.number().optional(), total_taxes: z.number().optional(), line_items: z.array(invoiceItem).optional(), invitations: z.array(creditInvitation).optional(), amount: z.number().optional(), balance: z.number().optional(), paid_to_date: z.number().optional(), discount: z.number().optional(), partial: z.number().optional(), is_amount_discount: z.boolean().optional(), is_deleted: z.boolean().optional(), uses_inclusive_taxes: z.boolean().optional(), date: z.string().optional(), last_sent_date: z.string().optional(), next_send_date: z.string().optional(), partial_due_date: z.string().optional(), due_date: z.string().optional(), settings: companySettings.optional(), last_viewed: z.number().optional(), updated_at: z.number().optional(), archived_at: z.number().optional(), custom_surcharge1: z.number().optional(), custom_surcharge2: z.number().optional(), custom_surcharge3: z.number().optional(), custom_surcharge4: z.number().optional(), custom_surcharge_tax1: z.boolean().optional(), custom_surcharge_tax2: z.boolean().optional(), custom_surcharge_tax3: z.boolean().optional(), custom_surcharge_tax4: z.boolean().optional(), location_id: z.string().optional(), design_id: z.string().optional(), exchange_rate: z.number().optional(), project_id: z.string().optional(), subscription_id: z.string().optional(), vendor_id: z.string().optional()}); export const pagination = z.object({total: z.number().int().optional(), count: z.number().int().optional(), per_page: z.number().int().optional(), current_page: z.number().int().optional(), total_pages: z.number().int().optional(), links: z.object({}).optional()}); export const meta = z.object({pagination: pagination.optional()}); export const getApiApiV1CreditsResponse = z.object({data: z.array(credit).optional(), meta: meta.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 }; /** * List credits * * GET /api/v1/credits */ export const getApiApiV1Credits = async (args: GetApiApiV1CreditsArgs, options?: GetApiApiV1CreditsOptions) => { const {baseUrl = "https://demo.invoiceninja.com", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() 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.include != null) query.append("include", String(args.include)) if (args.index != null) query.append("index", String(args.index)) if (args.per_page != null) query.append("per_page", String(args.per_page)) if (args.page != null) query.append("page", String(args.page)) for (const item of args.sort ?? []) query.append("sort", String(item)) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/credits${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiApiV1CreditsResponse, await res.json()) };