import {z} from 'zod' export type CreateApiDeleteCFOTArgs = {body: {data: {typedId: string}}}; export type CreateApiDeleteCFOTOptions = {baseUrl?: string | undefined, basic?: {username: string, password: string} | undefined, fetch?: typeof fetch | undefined}; export const labelTranslations = z.object({additionalProperties: z.string().optional(), """": z.string(), fr: z.string().optional(), en: z.string().optional()}); export const filter: z.ZodType = z.union([z.object({criteria: z.array(z.lazy(() => filter)), operator: z.enum(["and", "or", "not"]), _constructor: z.literal("AdvancedCriteria").optional()}), z.object({fieldName: z.string(), operator: z.enum([""equals"", ""notEqual"", ""iEquals"", ""iNotEqual"", ""greaterThan"", ""lessThan"", ""greaterOrEqual"", ""lessOrEqual"", ""isNull"", ""notNull"", ""iBetween"", ""iBetweenInclusive"", ""between"", ""betweenInclusive"", ""inSet"", ""notInSet"", ""contains"", ""notContains"", ""iContains"", ""iNotContains"", ""containsPattern"", ""iContainsPattern"", ""startsWith"", ""notStartsWith"", ""iStartsWith"", ""iNotStartsWith"", ""endsWith"", ""notEndsWith"", ""iEndsWith"", ""iNotEndsWith""]), value: z.string().optional(), _constructor: z.literal("AdvancedCriteria").optional()})]); export const icon = z.enum(["angle-double-left", "angle-down", "angle-down-b", "angle-right", "arrow-down", "arrow-right", "arrow-up", "bars", "bell", "blue", "brackets-curly", "calculator", "calculator-alt", "calendar-alt", "chart-line", "check", "check-circle", "circle", "clipboard-notes", "cog", "comment-alt-message", "comparison", "compress-arrows", "constructor", "copy", "corner-up-left", "corner-up-right", "critical", "crosshair", "dashboard", "database", "ellipsis-h", "equal-circle", "exclamation-octagon", "exclamation-octagon-solid", "exclamation-triangle", "exclamation-triangle-solid", "external-link-alt", "eye", "file", "file-check-alt", "file-copy-alt", "file-edit-alt", "file-info-alt", "file-plus-alt", "filter", "folder", "folder-medical", "folder-open", "fullscreen-exit", "green", "import", "info-circle", "key", "layer-group", "layer-group-slash", "link-broken", "link-h", "message", "minus", "minus-circle", "minus-square", "multiply", "pause", "pen", "play", "plus", "plus-circle", "plus-square", "process", "puzzle-piece", "question", "question-circle", "red", "redo", "retweet", "search", "search-minus", "sliders-v-alt", "sync", "times", "times-circle", "trash-alt", "upload", "user", "wrench", "yellow"]); export const tab = z.object({name: z.string(), labelTranslations: labelTranslations.optional(), translationKey: z.string().optional(), userGroupViewDetails: z.string().optional(), userGroupEdit: z.string().optional(), icon: icon.optional(), type: z.enum(["header", "items", "attachments", "actions", "notes", "customForms", "workflow", "workflowHistory", "messages", "dashboard", "details", "documents", "configurationWizards", "externalApp"]), typeReference: z.string().optional(), disableCheck: filter.optional(), hiddenCheck: filter.optional(), parameters: z.object({}).optional(), parameterMapping: z.object({additionalProperties: z.string().optional()}).and(z.record(z.string(), z.string())).optional()}); export const step = z.object({name: z.string().optional(), labelTranslations: labelTranslations.optional(), translationKey: z.string().optional(), userGroupViewDetails: z.string().optional(), userGroupEdit: z.string().optional(), disableCheck: filter.optional(), hiddenCheck: filter.optional(), icon: icon.optional(), tabs: z.array(tab).optional()}); export const configuration = z.object({name: z.string().optional(), layout: z.enum(["auto", "stepper", "tabs", "menu", "wizard"]).optional(), steps: z.array(step).optional(), tabs: z.array(tab).optional()}); export const customFormType = z.object({typedId: z.string().optional(), configuration: configuration.optional(), lastUpdateDate: z.string().optional(), module: z.enum(["PRICESETTING", "QUOTING", "ANALYTICS", "ADMIN", "WORKFLOW", "REBATES", "AGREEMENTSPROMOTIONS", "OPTIMIZATION", "CHANNELMANAGEMENT", "MASTERDATA", "CONFIGURATION", "DASHBOARDS", "PROCESSES", "SALESCOMPENSATION", "CUSTOM_FORM"]).max(255).nullable().optional(), label: z.string().max(255).optional(), version: z.number().int().optional(), uniqueName: z.string().max(255).optional(), supportedParentTypeCodes: z.array(z.string().nullable()).nullable().optional(), createdBy: z.number().int().optional(), headerFormulaName: z.string().max(255).optional(), userGroupEdit: z.string().max(255).nullable().optional(), userGroupViewDetails: z.string().max(255).nullable().optional(), embedded: z.boolean().optional(), workflowFormulaName: z.string().max(255).nullable().optional(), createDate: z.string().optional(), lastUpdateBy: z.number().int().optional()}); export const createApiDeleteCFOTResponse = z.object({response: z.object({node: z.string().min(1).optional(), data: customFormType.optional(), status: z.number().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 }; /** * Delete a Custom Form Type * * POST /delete/CFOT * * Also accepts auth: X-PriceFx-jwt */ export const createApiDeleteCFOT = async (args: CreateApiDeleteCFOTArgs, options?: CreateApiDeleteCFOTOptions) => { const {baseUrl = "https://companynode.pricefx.com/pricefx/companypartition", fetch: fetchFn = fetch, basic} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (basic !== undefined) headers.set('authorization', `Basic ${btoa(`${basic.username}:${basic.password}`)}`) const url = `${baseUrl.replace(/\/+$/, '')}/delete/CFOT${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(createApiDeleteCFOTResponse, await res.json()) };