import {z} from 'zod' export type GetApiV01AppsOwnerNameAppNameCrashGroupsArgs = {last_occurrence_from?: string | undefined, last_occurrence_to?: string | undefined, app_version?: string | undefined, group_type?: ('GroupType1' | 'GroupType2') | undefined, group_status?: ('open' | 'closed' | 'ignored') | undefined, group_text_search?: string | undefined, $orderby?: ('last_occurrence asc' | 'last_occurrence desc' | 'count asc' | 'count desc' | 'display_id asc' | 'display_id desc' | 'impacted_users asc' | 'impacted_users desc') | undefined, continuation_token?: string | undefined, owner_name: string, app_name: string}; export type GetApiV01AppsOwnerNameAppNameCrashGroupsOptions = {baseUrl?: string | undefined, APIToken?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV01AppsOwnerNameAppNameCrashGroupsResponse = z.object({limited_result_set: z.boolean(), continuation_token: z.string().optional(), crash_groups: z.array(z.object({crash_group_id: z.string(), new_crash_group_id: z.string(), display_id: z.string(), app_version: z.string(), build: z.string(), status: z.enum(["open", "closed", "ignored"]), count: z.number().int(), impacted_users: z.number().int().optional(), first_occurrence: z.string(), last_occurrence: z.string(), exception: z.string().optional(), crash_reason: z.string(), reason_frame: z.object({class_name: z.string().optional(), method: z.string().optional(), class_method: z.boolean().optional(), file: z.string().optional(), line: z.number().int().optional(), app_code: z.boolean().optional(), framework_name: z.string().optional(), code_formatted: z.string().optional(), code_raw: z.string().optional(), language: z.enum(["JavaScript", "CSharp", "Objective-C", "Objective-Cpp", "Cpp", "C", "Swift", "Java", "Unknown"]).optional(), method_params: z.string().optional(), exception_type: z.string().optional(), os_exception_type: z.string().optional()}).optional(), fatal: z.boolean(), annotation: z.string()}))}); 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 }; /** * Gets a list of crash groups and whether the list contains all available groups. * * GET /v0.1/apps/{owner_name}/{app_name}/crash_groups */ export const getApiV01AppsOwnerNameAppNameCrashGroups = async (args: GetApiV01AppsOwnerNameAppNameCrashGroupsArgs, options?: GetApiV01AppsOwnerNameAppNameCrashGroupsOptions) => { const {baseUrl = "https://api.appcenter.ms", fetch: fetchFn = fetch, APIToken} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.last_occurrence_from != null) query.append("last_occurrence_from", String(args.last_occurrence_from)) if (args.last_occurrence_to != null) query.append("last_occurrence_to", String(args.last_occurrence_to)) if (args.app_version != null) query.append("app_version", String(args.app_version)) if (args.group_type != null) query.append("group_type", String(args.group_type)) if (args.group_status != null) query.append("group_status", String(args.group_status)) if (args.group_text_search != null) query.append("group_text_search", String(args.group_text_search)) if (args.$orderby != null) query.append("$orderby", String(args.$orderby)) if (args.continuation_token != null) query.append("continuation_token", String(args.continuation_token)) if (APIToken !== undefined) headers.set("X-API-Token", APIToken) const url = `${baseUrl.replace(/\/+$/, '')}/v0.1/apps/${encodeURIComponent(String(args.owner_name))}/${encodeURIComponent(String(args.app_name))}/crash_groups${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(getApiV01AppsOwnerNameAppNameCrashGroupsResponse, await res.json()) };