import {z} from 'zod' export type GetApiOdataAssetsServiceSearchLocationIdLocationIdCodeCodeArgs = {code: string, locationId: number, $expand?: string | undefined, $select?: string | undefined, $filter?: string | undefined, $orderby?: string | undefined, $top?: number | undefined, $skip?: number | undefined, $count?: boolean | undefined}; export type GetApiOdataAssetsServiceSearchLocationIdLocationIdCodeCodeOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const serviceChannelServicesMessagingAssetsWarrantyProvider = z.object({Type: z.enum(["Fixed", "PrimaryRanked", "FixedRanked"]).optional(), Value: z.number().int().optional(), ProviderName: z.string().optional()}); export const serviceChannelServicesMessagingAssetsWarrantyExpiration = z.object({Type: z.enum(["FromPurchaseDate", "FromInstallDate"]).optional(), Period: z.number().int().optional()}); export const serviceChannelServicesMessagingAssetsWarranty = z.object({ExpirationDate: z.string().optional(), ProviderId: z.number().int().optional(), NTE: z.number().optional(), Priority: z.string().optional(), PriorityId: z.number().int().optional(), Category: z.string().optional(), CategoryId: z.number().int().optional(), Provider: serviceChannelServicesMessagingAssetsWarrantyProvider.optional(), Expiration: serviceChannelServicesMessagingAssetsWarrantyExpiration.optional()}); export const serviceChannelServicesMessagingRefrigerantTrackingAssetRefrigerant = z.object({Id: z.number().int().optional(), AssetId: z.number().int().optional(), RefrigerantUsageType: z.number().int().optional(), RackId: z.string().optional(), RackEntityId: z.number().int().optional(), CarbID: z.string().optional(), IsCarbReporting: z.boolean().optional(), SystemLocation: z.string().optional(), OperationalStatus: z.string().optional(), RefrigerantPartNumber: z.string().optional(), PartNumberId: z.number().int().optional(), RackTypeId: z.number().int().optional(), CurrentCharge: z.number().optional(), CurrentChargeMetrics: z.number().optional(), CurrentChargeOunces: z.number().optional(), ChargeDescriptionId: z.number().int().optional(), ChargeProviderName: z.string().optional(), EffectiveChargeDate: z.string().optional(), RefrigerantChargeOptionId: z.number().int().optional(), RackTypeName: z.string().optional(), UserId: z.number().int().optional(), TagId: z.string().optional(), AssetTypeId: z.number().int().optional(), RefrigerantPurposeId: z.number().int().optional(), RefrigerantPurposeName: z.string().optional(), ParentId: z.number().int().optional(), CreateOperationalStatusHistory: z.boolean().optional(), OperationStatusDate: z.string().optional(), HasLeakDetector: z.boolean().optional(), AssetLeakDetectorId: z.number().int().optional(), InitialCharge: z.boolean().optional(), RackType: z.string().optional(), NeedsRetrofitRetirement: z.boolean().optional(), RequiresAutomaticLeakDetector: z.boolean().optional(), ConnectedRackId: z.number().int().optional(), PreviousConnectedRackId: z.number().int().optional(), UpdatedDate: z.string().optional()}); export const serviceChannelServicesMessagingAssetsAssetAttributesMap = z.object({StandardAttributesMap: z.number().int().optional(), ViewableForProvidersAttributesMap: z.number().int().optional(), EditableForProvidersAttributesMap: z.number().int().optional(), RequiredStandardAttributesMap: z.number().int().optional()}); export const systemObject = z.object({}); export const serviceChannelServicesMessagingEquipmentsEquipmentAttributeDescription = z.object({EquipmentAttributeId: z.number().int().optional(), EquipmentTypeAttributeId: z.number().int().optional(), ValueType: z.number().int().optional(), EquipmentId: z.number().int().optional(), Value: systemObject.optional(), ValueText: z.string().optional(), SelectedOptionsText: z.string().optional(), Visible: z.boolean().optional(), Editable: z.boolean().optional(), Required: z.boolean().optional(), Name: z.string().optional(), Custom: z.boolean().optional()}); export const serviceChannelServicesMessagingAssetsAssetResponse = z.object({Id: z.number().int().optional(), Tag: z.string().optional(), Manufacturer: z.string().optional(), ModelNo: z.string().optional(), SerialNo: z.string().optional(), LocationId: z.number().int().optional(), Area: z.string().optional(), WorkOrderArea: z.string().optional(), StoreId: z.string().optional(), Trade: z.string().optional(), TradeId: z.number().int().optional(), Type: z.string().optional(), AssetTypeId: z.number().int().optional(), BrandId: z.number().int().optional(), InstallDate: z.string().optional(), InstallDateVal: z.string().optional(), ManufacturerDate: z.string().optional(), ManufacturerDateStr: z.string().optional(), PurchaseDate: z.string().optional(), UsesRefrigerant: z.number().int().optional(), Active: z.boolean().optional(), IsLeased: z.boolean().optional(), LifeExpectancy: z.number().int().optional(), OriginalValue: z.number().optional(), LeaseDate: z.string().optional(), LeasePeriod: z.number().int().optional(), Condition: z.number().int().optional(), ConditionString: z.string().optional(), EnergyEfficiency: z.string().optional(), Capacity: z.string().optional(), HasLeakDetector: z.boolean().optional(), AssetLeakDetectorConnectionId: z.number().int().optional(), Location: z.string().optional(), Warranty: serviceChannelServicesMessagingAssetsWarranty.optional(), IsReplaceEquipment: z.boolean().optional(), HasTagged: z.boolean().optional(), LastModifiedUseDate: z.string().optional(), LastModifiedUserName: z.string().optional(), SubName: z.string().optional(), AssetRefrigerant: serviceChannelServicesMessagingRefrigerantTrackingAssetRefrigerant.optional(), AssetAttributesMap: serviceChannelServicesMessagingAssetsAssetAttributesMap.optional(), AssetTag: z.string().optional(), ImportedFrom: z.number().int().optional(), ParentId: z.number().int().optional(), Description: z.string().optional(), HasComponents: z.boolean().optional(), HasCircuits: z.boolean().optional(), IsCircuit: z.boolean().optional(), SubscriberId: z.number().int().optional(), AssetValidated: z.boolean().optional(), ValidationRequired: z.boolean().optional(), IsLeakDetector: z.boolean().optional(), AssetStatus: z.string().optional(), AssetUpdatesStatus: z.string().optional(), AdditionalTradesNames: z.string().optional(), AdditionalTradeIds: z.array(z.number().int()).optional(), CreatedDate: z.string().optional(), ModifiedDate: z.string().optional(), AssetTypeGroupId: z.number().int().optional(), Spend: z.number().optional(), IsCarbReporting: z.boolean().optional(), AssetValidationStatus: z.number().int().optional(), UnableToScanReason: z.string().optional(), UnableToScanReasonCustomText: z.string().optional(), UnableToScanReasonId: z.number().int().optional(), CustomAttributes: z.array(serviceChannelServicesMessagingEquipmentsEquipmentAttributeDescription).optional(), HasChilds: z.boolean().optional(), Currency: z.number().int().optional(), ModifiedDateDto: z.string().optional(), RetiredDate: z.string().optional()}); export const getApiOdataAssetsServiceSearchLocationIdLocationIdCodeCodeResponse = z.array(serviceChannelServicesMessagingAssetsAssetResponse); 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 assets by `locationId` and `code` * * GET /odata/assets/Service.Search(locationId={locationId},code={code}) */ export const getApiOdataAssetsServiceSearchLocationIdLocationIdCodeCode = async (args: GetApiOdataAssetsServiceSearchLocationIdLocationIdCodeCodeArgs, options?: GetApiOdataAssetsServiceSearchLocationIdLocationIdCodeCodeOptions) => { 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 (args.$expand != null) query.append("$expand", String(args.$expand)) if (args.$select != null) query.append("$select", String(args.$select)) if (args.$filter != null) query.append("$filter", String(args.$filter)) if (args.$orderby != null) query.append("$orderby", String(args.$orderby)) if (args.$top != null) query.append("$top", String(args.$top)) if (args.$skip != null) query.append("$skip", String(args.$skip)) if (args.$count != null) query.append("$count", String(args.$count)) if (oauth2 !== undefined) headers.set('authorization', `Bearer ${oauth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/odata/assets/Service.Search(locationId=${encodeURIComponent(String(args.locationId))},code=${encodeURIComponent(String(args.code))})${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(getApiOdataAssetsServiceSearchLocationIdLocationIdCodeCodeResponse, await res.json()) };