import {z} from 'zod' export type ServiceChannelNotificationsObjectsWorkorderStatusDescriptor = {Primary?: string | undefined, Extended?: string | undefined}; export type ServiceChannelNotificationsObjectsUser = {Id?: number | undefined, AuthUserId?: number | undefined, UserName?: string | undefined, FullName?: string | undefined, Email?: string | undefined, LoginType?: ('Credentials' | 'Pin') | undefined, SubscriberId?: number | undefined, ProviderId?: number | undefined}; export type ServiceChannelNotificationsObjectsActionResolveDetails = {ResolvedByUserId?: number | undefined, ResolvedDate?: string | undefined, IsResolved?: boolean | undefined}; export type ServiceChannelNotificationsObjectsNote = {Id?: number | undefined, NoteType?: ('SystemNote' | 'UsersNote') | undefined, Number?: number | undefined, NoteData?: string | undefined, DateCreated?: string | undefined, ScheduledDate?: string | undefined, FollowUpDate?: string | undefined, ActionRequired?: boolean | undefined, MailedTo?: string | undefined, CreatedBy?: string | undefined, CreatedByUser?: ServiceChannelNotificationsObjectsUser | undefined, Visibility?: number | undefined, DateCreated_DTO?: string | undefined, ActionResolveDetails?: ServiceChannelNotificationsObjectsActionResolveDetails | undefined, DocumentId?: string | undefined, AttachmentIds?: Array | undefined}; export type ServiceChannelNotificationsObjectsAttachment = {Id?: number | undefined, Description?: string | undefined, Name?: string | undefined, Date?: string | undefined, Uri?: string | undefined, CreatedBy?: ServiceChannelNotificationsObjectsUser | undefined, Visibility?: number | undefined, Type?: ('Undefined' | 'WorkOrder' | 'Invoice' | 'Rfp' | 'Proposal' | 'Asset') | undefined}; export type ServiceChannelNotificationsObjectsLabel = {Id?: number | undefined, Text?: string | undefined}; export type ServiceChannelNotificationsObjectsResolutionCodesAndRootCause = {Id?: number | undefined, Text?: string | undefined, AssetCategoryId?: number | undefined}; export type ServiceChannelNotificationsObjectsAssetWarrantyProvider = {Type?: ('Fixed' | 'PrimaryRanked' | 'FixedRanked') | undefined, Value?: number | undefined, ProviderName?: string | undefined}; export type ServiceChannelNotificationsObjectsAssetWarrantyExpiration = {Type?: ('FromPurchaseDate' | 'FromInstallDate') | undefined, Period?: number | undefined}; export type ServiceChannelNotificationsObjectsAssetWarranty = {ExpirationDate?: string | undefined, ProviderId?: number | undefined, NTE?: number | undefined, Priority?: string | undefined, Category?: string | undefined, Provider?: ServiceChannelNotificationsObjectsAssetWarrantyProvider | undefined, Expiration?: ServiceChannelNotificationsObjectsAssetWarrantyExpiration | undefined}; export type ServiceChannelNotificationsObjectsAssetAttributesMap = {StandardAttributesMap?: number | undefined, ViewableForProvidersAttributesMap?: number | undefined, EditableForProvidersAttributesMap?: number | undefined, RequiredStandardAttributesMap?: number | undefined}; export type ServiceChannelNotificationsObjectsAssetTagScanAuditRecord = {AssetTagStatus?: string | undefined, ManuallyEntered?: boolean | undefined, AssetTagNotScannedReason?: string | undefined, UnableToValidateReasonId?: number | undefined, OtherReason?: string | undefined}; export type ServiceChannelNotificationsObjectsAssetAttachment = {IsPrimary?: boolean | undefined, ThumbnailUri?: string | undefined, Id?: number | undefined, Description?: string | undefined, Name?: string | undefined, Date?: string | undefined, Uri?: string | undefined, CreatedBy?: ServiceChannelNotificationsObjectsUser | undefined, Visibility?: number | undefined, Type?: ('Undefined' | 'WorkOrder' | 'Invoice' | 'Rfp' | 'Proposal' | 'Asset') | undefined}; export type ServiceChannelNotificationsObjectsAsset = {Manufacturer?: string | undefined, ModelNo?: string | undefined, SerialNo?: string | undefined, Area?: string | undefined, WorkOrderArea?: string | undefined, StoreId?: string | undefined, Trade?: string | undefined, Type?: string | undefined, InstallDate?: string | undefined, ManufacturerDate?: string | undefined, PurchaseDate?: string | undefined, UsesRefrigerant?: number | undefined, IsLeased?: boolean | undefined, LifeExpectancy?: number | undefined, OriginalValue?: number | undefined, LeaseDate?: string | undefined, LeasePeriod?: number | undefined, Condition?: number | undefined, EnergyEfficiency?: string | undefined, Capacity?: string | undefined, HasLeakDetector?: boolean | undefined, Location?: string | undefined, Warranty?: ServiceChannelNotificationsObjectsAssetWarranty | undefined, IsReplaceEquipment?: boolean | undefined, HasTagged?: boolean | undefined, LastModifiedUseDate?: string | undefined, LastModifiedUserName?: string | undefined, SubName?: string | undefined, AssetAttributesMap?: ServiceChannelNotificationsObjectsAssetAttributesMap | undefined, ImportedFrom?: number | undefined, ParentId?: number | undefined, Description?: string | undefined, HasComponents?: boolean | undefined, HasCircuits?: boolean | undefined, IsCircuit?: boolean | undefined, SubscriberId?: number | undefined, AssetValidated?: boolean | undefined, ValidationRequired?: boolean | undefined, IsLeakDetector?: boolean | undefined, AdditionalTradesNames?: string | undefined, CreatedDate?: string | undefined, ModifiedDate?: string | undefined, AssetTypeGroupId?: number | undefined, AssetTagScanAuditRecord?: ServiceChannelNotificationsObjectsAssetTagScanAuditRecord | undefined, Id?: number | undefined, Tag?: string | undefined, AssetTypeId?: number | undefined, AssetType?: string | undefined, TradeId?: number | undefined, BrandId?: number | undefined, Active?: boolean | undefined, AssetTag?: string | undefined, AssetStatus?: string | undefined, LocationId?: number | undefined, UpdatedFieldNames?: number | undefined, UpdatedDateDTO?: string | undefined, Attachments?: Array | undefined}; export type ServiceChannelNotificationsObjectsTechnician = {Id?: number | undefined, AuthUserId?: number | undefined, CertificateId?: string | undefined, NumericCertificateId?: number | undefined}; export type ServiceChannelNotificationsObjectsIssueChoice = {SetupId?: number | undefined, AreaId?: number | undefined, AreaName?: string | undefined, ProblemType?: string | undefined, EquipmentType?: string | undefined, ProblemCode?: string | undefined}; export type SystemObject = Record; export type ServiceChannelNotificationsObjectsWorkOrder = {Id?: number | undefined, Number?: string | undefined, PurchaseNumber?: string | undefined, SubscriberId?: number | undefined, ProviderId?: number | undefined, ProviderName?: string | undefined, LocationId?: number | undefined, LocationName?: string | undefined, LocationStoreId?: string | undefined, Status?: ServiceChannelNotificationsObjectsWorkorderStatusDescriptor | undefined, Caller?: string | undefined, CreatedBy?: string | undefined, UpdatedBy?: ServiceChannelNotificationsObjectsUser | undefined, AssigneeUserId?: number | undefined, CallDate?: string | undefined, CallDate_DTO?: string | undefined, ReassignDate?: string | undefined, Priority?: string | undefined, Trade?: string | undefined, ScheduledDate?: string | undefined, AreaId?: number | undefined, AssetType?: string | undefined, ProblemType?: string | undefined, CreatedDate_DTO?: string | undefined, UpdatedDate?: string | undefined, UpdatedDate_DTO?: string | undefined, ScheduledDate_DTO?: string | undefined, RescheduleReason?: string | undefined, CompletedDate?: string | undefined, CompletedDate_DTO?: string | undefined, ExpirationDate?: string | undefined, ExpirationDate_DTO?: string | undefined, ProjectedCompletionDate?: string | undefined, Description?: string | undefined, Category?: string | undefined, Nte?: number | undefined, Subtotal?: number | undefined, Tax?: number | undefined, Tax2Type?: string | undefined, Tax2?: number | undefined, CurrencyAlphabeticalCode?: string | undefined, ProblemCode?: string | undefined, Resolution?: string | undefined, AssetId?: number | undefined, Source?: string | undefined, RecallWorkOrder?: number | undefined, Notes?: Array | undefined, Attachments?: Array | undefined, ProjectId?: number | undefined, Labels?: Array | undefined, ResolutionCodes?: Array | undefined, ResolutionCodesIds?: Array | undefined, RootCauses?: Array | undefined, LinkedWorOrderIds?: Array | undefined, Assets?: Array | undefined, RefrigerantWasUsed?: number | undefined, WeatherEventId?: number | undefined, PriorityId?: number | undefined, TradeId?: number | undefined, CategoryId?: number | undefined, ContractId?: number | undefined, InvoiceId?: number | undefined, HasVerbalApproval?: boolean | undefined, MoeNumber?: string | undefined, ServiceNowId?: string | undefined, GlCode?: string | undefined, AdditionalApprovalCodes?: Array | undefined, AreaTypeId?: number | undefined, SpaceId?: number | undefined, LocationPath?: string | undefined, LocationPathFormatted?: string | undefined, Technician?: ServiceChannelNotificationsObjectsTechnician | undefined, IssueChoice?: ServiceChannelNotificationsObjectsIssueChoice | undefined, ExtraData?: {[key: string]: SystemObject} | undefined}; export type ServiceChannelServicesMessagingWorkordersWorkorderNotificationObject = {Object?: ServiceChannelNotificationsObjectsWorkOrder | undefined, Type?: string | undefined, Action?: string | undefined, EventType?: string | undefined}; export type CreateApiScConnectorSyncAssetsArgs = {body: ServiceChannelServicesMessagingWorkordersWorkorderNotificationObject}; export type CreateApiScConnectorSyncAssetsOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const systemObject = z.object({}); 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 }; /** * Connector sync asset process * * POST /ScConnector/SyncAssets */ export const createApiScConnectorSyncAssets = async (args: CreateApiScConnectorSyncAssetsArgs, options?: CreateApiScConnectorSyncAssetsOptions) => { const {baseUrl = "https://sb2api.servicechannel.com/v3", fetch: fetchFn = fetch, oauth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (oauth2 !== undefined) headers.set('authorization', `Bearer ${oauth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/ScConnector/SyncAssets${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(systemObject, await res.json()) };