import {z} from 'zod' export type GetApiRefrigeranttrackingTrackingNumberLeakRecordArgs = {trackingNumber: number}; export type GetApiRefrigeranttrackingTrackingNumberLeakRecordOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const serviceChannelServicesMessagingRefrigerantTrackingLeakImmeasurableNote = z.object({ID: z.number().int().optional(), LeakImmeasurableId: z.number().int().optional(), Note: z.string().optional(), CreateDate: z.string().optional(), CreateDateFormated: z.string().optional(), UserId: z.number().int().optional(), AutoGenerated: z.boolean().optional(), CreatedByUserName: z.string().optional()}); export const serviceChannelServicesWebApiModelsResponseRefrigerantTrackingLeakImmeasurableApiResponse = z.object({Id: z.number().int().optional(), AssetId: z.number().int().optional(), AssetTagId: z.string().optional(), RecId: z.number().int().optional(), RepairDate: z.string().optional(), RepairDateFormatted: z.string().optional(), RepairDateStr: z.string().optional(), InitialVerificationDate: z.string().optional(), InitialVerificationDateFormatted: z.string().optional(), InitialVerificationDateStr: z.string().optional(), InitialVerificationMethod: z.number().int().optional(), InitialVerificationMethodName: z.string().optional(), FollowUpVerificationDate: z.string().optional(), FollowUpVerificationDateFormatted: z.string().optional(), FollowUpVerificationStr: z.string().optional(), FollowUpVerificationMethod: z.number().int().optional(), FollowUpVerificationMethodName: z.string().optional(), ActionCodeId: z.number().int().optional(), ActionCode: z.string().optional(), FaultCodeId: z.number().int().optional(), FaultCode: z.string().optional(), LeakEventId: z.number().int().optional(), LeakLocationId: z.number().int().optional(), LeakAreaId: z.number().int().optional(), LeakLocationName: z.string().optional(), LeakAreaName: z.string().optional(), ModifiedBy: z.number().int().optional(), ModifiedByUserId: z.string().optional(), ModifiedByUserName: z.string().optional(), LeakNotes: z.array(z.string()).optional(), Actor: z.string().optional(), LeakLocation: z.string().optional(), LeakStatusStr: z.string().optional(), NotesTotalCount: z.number().int().optional(), LeakImmeasurableNotes: z.array(serviceChannelServicesMessagingRefrigerantTrackingLeakImmeasurableNote).optional(), OriginalTrackingNumber: z.number().int().optional(), LeakStatus: z.boolean().optional(), InitialVerificationPassed: z.boolean().optional(), FollowUpVerificationPassed: z.boolean().optional(), LeakDetectionDate: z.string().optional(), LeakDetectionDateFormatted: z.string().optional(), LeakDetectionDateStr: z.string().optional()}); export const serviceChannelServicesWebApiModelsResponseRefrigerantTrackingLeakEventApiResponse = z.object({Id: z.number().int().optional(), AssetId: z.number().int().optional(), RecId: z.number().int().optional(), TriggerDate: z.string().optional(), RepairDate: z.string().optional(), TriggerDateStr: z.string().optional(), InitialVerificationDate: z.string().optional(), FollowUpDate: z.string().optional(), InitialVerificationMethod: z.number().int().optional(), CalculationMethod: z.string().optional(), FollowUpMethod: z.number().int().optional(), LeakStatus: z.string().optional(), LeakRate: z.number().optional(), Charge: z.number().optional(), ChargeMetrics: z.number().optional(), TriggerQty: z.number().optional(), TriggerQtyMetrics: z.number().optional(), LeakAreaId: z.number().int().optional(), LeakLocationId: z.number().int().optional(), Step: z.string().optional(), FaultCodeId: z.number().int().optional(), ActionCodeId: z.number().int().optional(), FaultCodeName: z.string().optional(), ActionCodeName: z.string().optional(), GeneratedDate: z.string().optional(), LeakImmeasurableList: z.array(serviceChannelServicesWebApiModelsResponseRefrigerantTrackingLeakImmeasurableApiResponse).optional(), CompletedDate: z.string().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 leak events by `workorderID` * * GET /refrigeranttracking/{trackingNumber}/leakRecord */ export const getApiRefrigeranttrackingTrackingNumberLeakRecord = async (args: GetApiRefrigeranttrackingTrackingNumberLeakRecordArgs, options?: GetApiRefrigeranttrackingTrackingNumberLeakRecordOptions) => { const {baseUrl = "https://sb2api.servicechannel.com/v3", fetch: fetchFn = fetch, oauth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (oauth2 !== undefined) headers.set('authorization', `Bearer ${oauth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/refrigeranttracking/${encodeURIComponent(String(args.trackingNumber))}/leakRecord${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(serviceChannelServicesWebApiModelsResponseRefrigerantTrackingLeakEventApiResponse, await res.json()) };