import {z} from 'zod' export type GetApiSubscribersCurrentServicerequestInfoArgs = {areaName?: string | undefined, problemType?: string | undefined, equipmentType?: string | undefined, problemCode?: string | undefined, locationId?: number | undefined, setupId?: number | undefined, callDate?: string | undefined, version?: ('Undefined' | 'V1' | 'V2') | undefined}; export type GetApiSubscribersCurrentServicerequestInfoOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const serviceChannelServicesMessagingIssueListsDecisionModelResponse = z.object({OptionValue: z.string().optional(), NextQuestion: z.string().optional(), OriginalNextQuestion: z.string().optional(), TradeOverride: z.string().optional(), CategoryOverride: z.string().optional(), PriorityOverride: z.string().optional(), NTEOverride: z.string().optional(), ProviderRankOverride: z.string().optional(), WoLabelOverride: z.string().optional(), EtcOverride: z.string().optional()}); export const serviceChannelServicesMessagingIssueListsIssueFieldResponse = z.object({ProblemType: z.string().optional(), Item: z.string().optional(), Problem: z.string().optional(), For: z.string().optional(), Id: z.string().optional(), Header: z.string().optional(), ErrorText: z.string().optional(), AreaName: z.string().optional(), Exclude: z.string().optional(), Min: z.string().optional(), Max: z.string().optional(), Step: z.string().optional(), Helptip: z.string().optional(), Type: z.enum(["textbox", "select", "size", "label", "stop", "datepicker", "timepicker"]).optional(), Allow: z.enum(["numbers", "decimals", "all"]).optional(), ExpectedValue: z.string().optional(), Options: z.array(z.string()).optional(), Required: z.boolean().optional(), Decisions: z.array(serviceChannelServicesMessagingIssueListsDecisionModelResponse).optional(), LinkToMedia: z.string().optional(), DisableFilter: z.boolean().optional()}); export const serviceChannelServicesMessagingIssueListsGetIssueChoiceResponse = z.object({ProblemType: z.string().optional(), EquipmentType: z.string().optional(), ProblemCode: z.string().optional(), Trade: z.string().optional(), TradeId: z.number().int().optional(), IsTradeDeleted: z.boolean().optional(), Priority: z.string().optional(), AllowPriorityUpgrade: z.boolean().optional(), RequireAttachment: z.boolean().optional(), EquipmentId: z.string().optional(), EquipmentEntry: z.string().optional(), Category: z.string().optional(), Comments: z.string().optional(), TroubleshootingMessage: z.string().optional(), ProviderRank: z.number().int().optional(), LabelRanks: z.array(z.number().int()).optional(), Currency: z.string().optional(), ApprovalCode: z.string().optional(), LinkToMedia: z.string().optional(), AdditionalFields: z.array(serviceChannelServicesMessagingIssueListsIssueFieldResponse).optional(), AllAdditionalFields: z.array(serviceChannelServicesMessagingIssueListsIssueFieldResponse).optional(), IsNewIssueList: z.boolean().optional(), WoStatusId: z.number().int().optional(), Note: z.string().optional(), DashOverrideApplied: z.boolean().optional(), Nte: z.string().optional(), WoLabel: z.string().optional(), AttachmentName: z.string().optional(), PinWoNote: z.boolean().optional(), EtcMinutes: z.number().int().optional(), ProjComplDate: z.string().optional(), CategoryId: z.number().int().optional(), ContractService: z.string().optional(), ContractServiceId: z.number().int().optional()}); export const serviceChannelServicesMessagingProvidersServiceRequestProvider = z.object({Rank: z.number().int().optional(), Category: z.string().optional(), Priority: z.string().optional(), Nte: z.number().optional(), GeneralEmail: z.string().optional(), IsDefault: z.boolean().optional(), ServiceRequestEmails: z.string().optional(), Phone: z.string().optional(), FullName: z.string().optional(), Address1: z.string().optional(), Address2: z.string().optional(), City: z.string().optional(), State: z.string().optional(), Zip: z.string().optional(), Country: z.string().optional(), MainContact: z.string().optional(), DateCreated: z.string().optional(), LastUserDate: z.string().optional(), SuperUser: z.string().optional(), WebSite: z.string().optional(), Email: z.string().optional(), TaxId: z.string().optional(), Trade: z.string().optional(), ProcessingEmail: z.string().optional(), FaxNumber: z.string().optional(), SuiteFloor: z.string().optional(), MailInfo: z.string().optional(), ImageFile: z.string().optional(), ReturnMail: z.string().optional(), MailFrequency: z.number().int().optional(), FormId: z.number().int().optional(), Pager: z.string().optional(), NightRequest: z.number().int().optional(), ShortFormatEmail: z.string().optional(), LastTrainingDate: z.string().optional(), LastTrainingDateStr: z.string().optional(), IsInternal: z.boolean().optional(), IsOnOffShoreFeatureEnabled: z.boolean().optional(), Id: z.number().int().optional(), Name: z.string().optional(), DoNotDispatch: z.boolean().optional()}); 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 serviceChannelServicesMessagingAssetsAssetsInfoResponse = z.object({Assets: z.array(serviceChannelServicesMessagingAssetsAssetResponse).optional(), AssetRequired: z.boolean().optional(), AssetEntry: z.string().optional()}); export const serviceChannelServicesMessagingDashboardSettingsSetupRequestConfirmResponse = z.object({ChangeableCategory: z.boolean().optional(), ChangeablePriority: z.boolean().optional(), ChangeablePrioritySetDefault: z.boolean().optional(), ChangeableNte: z.boolean().optional(), AllowChangeableCurrency: z.boolean().optional(), ChangeableScheduledDate: z.boolean().optional(), ChangeableProvider: z.boolean().optional(), EnableAdditionalCodes: z.boolean().optional(), ChangeableGlCode: z.boolean().optional(), CreateLinkedRequest: z.boolean().optional(), AvoidDispatching: z.boolean().optional(), ShowRecipients: z.boolean().optional(), AddCopyRecipient: z.boolean().optional(), DeleteCopyRecipients: z.boolean().optional(), EmptyProviderEmailNotification: z.boolean().optional(), EnablePO: z.boolean().optional(), RequirePO: z.boolean().optional(), EnableWO: z.boolean().optional(), EnableLabels: z.boolean().optional(), LabelsAsSelectOnly: z.boolean().optional(), EditWeatherType: z.boolean().optional(), MaintainOrDecreasePriority: z.boolean().optional(), DisplayAssignedTechnician: z.boolean().optional(), ChangeableProjectedCompletionDate: z.boolean().optional()}); export const serviceChannelServicesMessagingDashboardSettingsSetupRequestResponse = z.object({SetupId: z.number().int().optional(), EnableRequestWizard: z.boolean().optional(), ShowPrivateStoreNotes: z.boolean().optional(), ShowProviderPhoneNumber: z.boolean().optional(), ShowLastServiceCall: z.boolean().optional(), SetOriginalVendorForRecalls: z.boolean().optional(), NteToZeroForRecalls: z.boolean().optional(), SendAlertToFM: z.boolean().optional(), TurnOffDescription: z.boolean().optional(), DaysOfHistoryToDisplay: z.number().int().optional(), ShowStoreWarrantyStr: z.string().optional(), StoreWarrantyMessage: z.string().optional(), ConfirmationMessage: z.string().optional(), ProviderNotFoundMessage: z.string().optional(), EnableEquipment: z.boolean().optional(), DuplicateFilters: z.array(z.string()).optional(), ExcludedCategoriesOpenDup: z.array(z.string()).optional(), ExcludedCategoriesClosedDup: z.array(z.string()).optional(), ExcludedStatuses: z.array(z.string()).optional(), ExcludedTradesOpenDup: z.array(z.string()).optional(), EnableEquipmentReplacementFlag: z.boolean().optional(), EnableRequestWizardMobile: z.boolean().optional(), EnableLocationNotes: z.boolean().optional(), AlwaysShowLocationNotes: z.boolean().optional(), SkipTroubleshootingStep: z.boolean().optional(), HidePriority: z.boolean().optional(), EnableIssueListKeywordSearch: z.boolean().optional(), HideGPSRadius: z.boolean().optional(), AssetFirstWorkOrderCreation: z.boolean().optional(), EnableEquipmentReplacement: z.boolean().optional(), AssetNotListedFlag: z.boolean().optional()}); export const serviceChannelServicesMessagingCategoryCategoryResponse = z.object({Id: z.number().int().optional(), SubscriberId: z.number().int().optional(), Name: z.string().optional(), HasDependency: z.boolean().optional(), PrimaryCategoryID: z.number().int().optional(), PrimaryCategoryName: z.string().optional()}); export const serviceChannelServicesMessagingPrioritiesPriorityResponse = z.object({Id: z.number().int().optional(), Name: z.string().optional(), SubscriberId: z.number().int().optional(), Eta: z.string().optional(), SkipNights: z.boolean().optional(), SkipWeekends: z.boolean().optional(), LocationId: z.number().int().optional(), Trade: z.string().optional(), ScheduledDate: z.string().optional(), ScheduledDate_DTO: z.string().optional(), ProjectComplDate: z.string().optional(), IsSelectable: z.boolean().optional()}); export const serviceChannelServicesMessagingDashboardSettingsSetupGeneralResponse = z.object({AllowAddingAttachments: z.boolean().optional()}); export const serviceChannelServicesMessagingDashboardSettingsUserSettingsResponse = z.object({MaximumNteAmount: z.number().optional()}); export const serviceChannelServicesMessagingCurrenciesCurrency = z.object({Id: z.number().int().optional(), AlphabeticalCode: z.string().optional(), DecimalCount: z.number().int().optional(), Entity: z.string().optional(), CurrencyName: z.string().optional(), NumericCode: z.string().optional(), Rate: z.number().optional()}); export const serviceChannelServicesMessagingWorkordersGetServiceRequestInfoResponse = z.object({IssueChoice: serviceChannelServicesMessagingIssueListsGetIssueChoiceResponse.optional(), Providers: z.array(serviceChannelServicesMessagingProvidersServiceRequestProvider).optional(), ProvidersNotFoundMessage: z.string().optional(), CallerName: z.string().optional(), ScheduledDateOffsetFromCallDate: z.number().int().optional(), AssetsInfo: serviceChannelServicesMessagingAssetsAssetsInfoResponse.optional(), SetupRequestConfirm: serviceChannelServicesMessagingDashboardSettingsSetupRequestConfirmResponse.optional(), SetupRequest: serviceChannelServicesMessagingDashboardSettingsSetupRequestResponse.optional(), Categories: z.array(serviceChannelServicesMessagingCategoryCategoryResponse).optional(), Priorities: z.array(serviceChannelServicesMessagingPrioritiesPriorityResponse).optional(), SetupGeneral: serviceChannelServicesMessagingDashboardSettingsSetupGeneralResponse.optional(), UserSettings: serviceChannelServicesMessagingDashboardSettingsUserSettingsResponse.optional(), Currency: serviceChannelServicesMessagingCurrenciesCurrency.optional(), AreaId: z.number().int().optional(), TradeId: z.number().int().optional(), CategoryId: z.number().int().optional(), SetupId: z.number().int().optional(), EasierAssetAttachmentEnabled: z.boolean().optional(), TradeExcluded: z.boolean().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 Service Request Info * * GET /subscribers/current/servicerequest/info */ export const getApiSubscribersCurrentServicerequestInfo = async (args: GetApiSubscribersCurrentServicerequestInfoArgs, options?: GetApiSubscribersCurrentServicerequestInfoOptions) => { 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.areaName != null) query.append("areaName", String(args.areaName)) if (args.problemType != null) query.append("problemType", String(args.problemType)) if (args.equipmentType != null) query.append("equipmentType", String(args.equipmentType)) if (args.problemCode != null) query.append("problemCode", String(args.problemCode)) if (args.locationId != null) query.append("locationId", String(args.locationId)) if (args.setupId != null) query.append("setupId", String(args.setupId)) if (args.callDate != null) query.append("callDate", String(args.callDate)) if (args.version != null) query.append("version", String(args.version)) if (oauth2 !== undefined) headers.set('authorization', `Bearer ${oauth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/subscribers/current/servicerequest/info${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(serviceChannelServicesMessagingWorkordersGetServiceRequestInfoResponse, await res.json()) };