import {z} from 'zod' export type GetCommentsRequest = {siteId?: (string | null) | undefined, reviewId?: (string | null) | undefined, contactId?: (string | null) | undefined, limit?: (number | null) | undefined, paginationToken?: (string | null) | undefined, rd?: boolean | undefined}; export type CreateApiApiReviewCommentsListArgs = {body: GetCommentsRequest}; export type CreateApiApiReviewCommentsListOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const commentData = z.object({identifier: z.string().nullable().optional(), reviewId: z.string().nullable().optional(), commentId: z.string().nullable().optional(), contactId: z.string().nullable().optional(), name: z.string().nullable().optional(), locale: z.string().nullable().optional(), commentText: z.string().nullable().optional(), commentDate: z.string().nullable().optional(), isOwn: z.boolean().optional()}); export const widgetFlow = z.object({Session: z.string().nullable().optional(), Timestamp: z.string().nullable().optional(), Role: z.string().nullable().optional(), Flow: z.string().nullable().optional(), Deal: z.string().nullable().optional(), API: z.string().nullable().optional(), Click: z.string().nullable().optional(), Channel: z.string().nullable().optional(), Impression: z.string().nullable().optional(), User: z.string().nullable().optional(), Device: z.string().nullable().optional(), FlowStep: z.string().nullable().optional(), data: z.string().nullable().optional(), Latitude: z.number().optional(), Longitude: z.number().optional(), DeviceType: z.string().nullable().optional(), Resolution: z.string().nullable().optional(), OS: z.string().nullable().optional(), UserLanguage: z.string().nullable().optional(), BrowserType: z.string().nullable().optional(), Revenue: z.number().optional(), Total: z.number().optional(), DenyReason: z.string().nullable().optional(), Identity: z.string().nullable().optional(), OptIn: z.string().nullable().optional(), Site: z.string().nullable().optional(), currency: z.string().nullable().optional(), Company: z.string().nullable().optional(), contact: z.string().nullable().optional(), ImpressionType: z.string().nullable().optional(), code: z.string().nullable().optional(), referer: z.string().nullable().optional(), email: z.string().nullable().optional(), Agent: z.string().nullable().optional(), flowtype: z.string().nullable().optional(), ip: z.string().nullable().optional(), delay: z.number().int().optional(), trigger: z.string().nullable().optional(), emailaddrsha256: z.string().nullable().optional(), country: z.string().nullable().optional(), region: z.string().nullable().optional(), domain: z.string().nullable().optional(), path: z.string().nullable().optional(), sitecurrency: z.string().nullable().optional(), siteconversionrate: z.number().optional(), companycurrency: z.string().nullable().optional(), companyconversionrate: z.number().optional(), apiversion: z.string().nullable().optional(), scriptversion: z.string().nullable().optional(), tenant: z.string().nullable().optional(), salesforce: z.string().nullable().optional(), new_accepts_sms: z.boolean().optional(), new_accepts_email: z.boolean().optional(), new_accepts_postal: z.boolean().optional(), Item: z.string().nullable().optional(), NPS: z.number().optional()}); export const getCommentsResponse = z.object({success: z.boolean().optional(), message: z.string().nullable().optional(), totalCount: z.number().int().optional(), comments: z.array(commentData).nullable().optional(), lastEvaluatedKey: z.string().nullable().optional(), wf: z.array(widgetFlow).nullable().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 }; /** * POST /api/Review/comments/list */ export const createApiApiReviewCommentsList = async (args: CreateApiApiReviewCommentsListArgs, options: CreateApiApiReviewCommentsListOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/api/Review/comments/list${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(getCommentsResponse, await res.json()) };