import {z} from 'zod' export type GetApiV2BrandsTemplateFileOptions = {baseUrl?: string | undefined, Bearer?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV2BrandsTemplateFileResponse = z.object({title: z.string().optional(), resources: z.object({logo: z.object({url: z.string().optional()}).optional(), editor: z.object({fields: z.object({date: z.object({visibility: z.boolean().optional()}).optional(), text: z.object({visibility: z.boolean().optional()}).optional(), email: z.object({visibility: z.boolean().optional()}).optional(), stamp: z.object({visibility: z.boolean().optional()}).optional(), formula: z.object({visibility: z.boolean().optional()}).optional(), checkbox: z.object({visibility: z.boolean().optional()}).optional(), dropdown: z.object({visibility: z.boolean().optional()}).optional(), fullname: z.object({visibility: z.boolean().optional()}).optional(), initials: z.object({visibility: z.boolean().optional()}).optional(), hyperlink: z.object({visibility: z.boolean().optional()}).optional(), signature: z.object({visibility: z.boolean().optional()}).optional(), attachment: z.object({visibility: z.boolean().optional()}).optional(), radiobutton: z.object({visibility: z.boolean().optional()}).optional()}).optional(), sidebar: z.object({background: z.string().optional(), visibility: z.boolean().optional()}).optional(), toolbar: z.object({background: z.string().optional(), visibility: z.boolean().optional()}).optional(), settings: z.object({visibility: z.boolean().optional()}).optional(), "auth-page": z.object({"check-pin": z.object({phone: z.object({"body-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional()}).optional(), password: z.object({"body-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional()}).optional()}).optional(), "header-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional(), "request-pin": z.object({"body-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional()}).optional()}).optional(), navigation: z.object({visibility: z.boolean().optional()}).optional(), "sender-info": z.object({visibility: z.boolean().optional(), "contact-name": z.string().optional(), "contact-email": z.string().optional()}).optional(), "close-button": z.object({title: z.object({editor: z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional(), signing: z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional()}).optional(), visibility: z.boolean().optional()}).optional(), "progress-bar": z.object({"default-color": z.string().optional(), "completed-color": z.string().optional()}).optional(), "support-chat": z.object({visibility: z.boolean().optional()}).optional(), accessibility: z.object({color: z.string().optional(), border: z.string().optional(), enabled: z.boolean().optional(), background: z.string().optional(), visibility: z.boolean().optional(), "hover-color": z.string().optional(), "active-color": z.string().optional(), "hover-border": z.string().optional(), "active-border": z.string().optional(), "hover-background": z.string().optional(), "active-background": z.string().optional()}).optional(), "complete-page": z.object({decline: z.object({"body-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional(), "header-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional()}).optional(), success: z.object({"body-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional(), "header-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional()}).optional(), registration: z.object({visibility: z.boolean().optional()}).optional(), "button-download": z.object({visibility: z.boolean().optional()}).optional(), "button-to-signnow": z.object({visibility: z.boolean().optional()}).optional()}).optional(), "document-name": z.object({visibility: z.boolean().optional()}).optional(), "editing-tools": z.object({background: z.string().optional()}).optional(), "decline-button": z.object({visibility: z.boolean().optional()}).optional(), "default-fields": z.object({visibility: z.boolean().optional()}).optional(), "field-settings": z.object({visibility: z.boolean().optional()}).optional(), "page-dimension": z.object({percent: z.number().int().optional()}).optional(), "preview-button": z.object({visibility: z.boolean().optional()}).optional(), "complete-footer": z.object({visibility: z.boolean().optional(), "custom-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional()}).optional(), "continue-button": z.object({visibility: z.boolean().optional()}).optional(), "download-button": z.object({visibility: z.boolean().optional()}).optional(), "request-payment": z.object({visibility: z.boolean().optional()}).optional(), "signing-settings": z.object({"guide-signers-only-through-required-fields": z.boolean().optional(), "auto-apply-signatures-and-initials-to-document-fields": z.boolean().optional()}).optional(), "manage-recipients": z.object({visibility: z.boolean().optional()}).optional(), "step-progress-bar": z.object({visibility: z.boolean().optional()}).optional(), "thumbnails-button": z.object({visibility: z.boolean().optional()}).optional(), "decline-invite-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional()}).optional(), general: z.object({icons: z.object({color: z.string().optional(), border: z.string().optional(), background: z.string().optional(), "hover-color": z.string().optional(), "hover-border": z.string().optional(), "hover-background": z.string().optional()}).optional(), texts: z.object({color: z.string().optional()}).optional(), header: z.object({background: z.string().optional()}).optional(), buttons: z.object({default: z.object({color: z.string().optional(), border: z.string().optional(), background: z.string().optional(), "hover-color": z.string().optional(), "active-color": z.string().optional(), "hover-border": z.string().optional(), "active-border": z.string().optional(), "hover-background": z.string().optional(), "active-background": z.string().optional()}).optional(), primary: z.object({color: z.string().optional(), border: z.string().optional(), background: z.string().optional(), "hover-color": z.string().optional(), "active-color": z.string().optional(), "hover-border": z.string().optional(), "active-border": z.string().optional(), "hover-background": z.string().optional(), "active-background": z.string().optional()}).optional(), dropdown: z.object({color: z.string().optional(), border: z.string().optional(), background: z.string().optional(), "hover-color": z.string().optional(), "active-color": z.string().optional(), "hover-border": z.string().optional(), "active-border": z.string().optional(), "hover-background": z.string().optional(), "active-background": z.string().optional()}).optional(), secondary: z.object({color: z.string().optional(), border: z.string().optional(), background: z.string().optional(), "hover-color": z.string().optional(), "active-color": z.string().optional(), "hover-border": z.string().optional(), "active-border": z.string().optional(), "hover-background": z.string().optional(), "active-background": z.string().optional()}).optional()}).optional(), hyperlink: z.object({color: z.string().optional(), "hover-color": z.string().optional(), "active-color": z.string().optional()}).optional(), "help-center": z.object({visibility: z.boolean().optional()}).optional(), "consent-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional(), "main-background": z.string().optional(), "welcome-message": z.object({"body-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional(), visibility: z.boolean().optional(), "header-text": z.object({en: z.string().optional(), es: z.string().optional(), fr: z.string().optional()}).optional()}).optional()}).optional(), "email-logo": z.object({url: z.string().optional()}).optional(), "send-invite": z.object({from: z.object({visibility: z.boolean().optional()}).optional(), header: z.object({visibility: z.boolean().optional()}).optional(), settings: z.object({visibility: z.boolean().optional()}).optional(), "cc-recipients": z.object({visibility: z.boolean().optional()}).optional(), "preview-panel": z.object({background: z.string().optional(), visibility: z.boolean().optional()}).optional(), "settings-panel": z.object({background: z.string().optional()}).optional(), "request-payment": z.object({visibility: z.boolean().optional()}).optional(), "customize-message": z.object({visibility: z.boolean().optional()}).optional(), "actions-on-completion": z.object({visibility: z.boolean().optional()}).optional()}).optional(), "email-invite": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), expiration: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), expiration: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), expiration: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional()}).optional(), "email-general": z.object({ccd: z.object({visibility: z.boolean().optional()}).optional(), logo: z.object({position: z.string().optional()}).optional(), buttons: z.object({color: z.string().optional(), background: z.string().optional()}).optional(), sender_email: z.string().optional(), contact_sender: z.object({visibility: z.boolean().optional()}).optional(), secondary_buttons: z.object({color: z.string().optional(), background: z.string().optional()}).optional(), signnow_references: z.boolean().optional(), hide_download_image: z.boolean().optional()}).optional(), "email-cc-invite": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional()}).optional(), "email-invite-canceled": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional()}).optional(), "email-invite-reassign": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), expiration: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional(), forward_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), expiration: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional(), forward_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), expiration: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional(), forward_message: z.string().optional()}).optional()}).optional(), "email-invite-reminder": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), expiration: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), expiration: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), expiration: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional()}).optional(), "email-cc-invite-signed": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional()}).optional(), "email-invite-completed": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional()}).optional(), "email-cc-invite-reassign": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional()}).optional(), "email-cc-invite-completed": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional()}).optional(), "email-cc-invite-step-completed": z.object({en: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), es: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional(), fr: z.object({from: z.string().optional(), subject: z.string().optional(), body_header: z.string().optional(), ccd_message: z.string().optional(), body_message: z.string().optional(), footer_message: z.string().optional()}).optional()}).optional()}).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 }; /** * Get brand template file * * GET /v2/brands/template-file */ export const getApiV2BrandsTemplateFile = async (options?: GetApiV2BrandsTemplateFileOptions) => { const {baseUrl = "https://api.signnow.com", fetch: fetchFn = fetch, Bearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (Bearer !== undefined) headers.set('authorization', `Bearer ${Bearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/v2/brands/template-file${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(getApiV2BrandsTemplateFileResponse, await res.json()) };