import {z} from 'zod' export type GetApiUsersCurrentMenuOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const serviceChannelServicesMessagingMenuItem: z.ZodType = z.object({Name: z.string().optional(), Url: z.string().optional(), Id: z.enum(["None", "Track_WOPO", "Console", "WorkOrders_WorkOrderList", "Proposals", "RFPsProposals_CreateProposal", "RFPsProposals_ViewProposals", "RFPsProposals_ViewProcessRFP", "RFPsProposals_ViewProcessBulkRFP", "RFPsProposals_MySavedProposalReports", "RFPsProposals_ViewProcessProposals", "RFPsProposals_CreateRFP", "Invoices", "PaymentManager", "ServiceHealth", "Home", "CreateServiceRequest_ServiceRequestDashboard", "CreateServiceRequest_ClassicServiceRequest", "WorkOrders_MySavedLiveReports", "WorkOrders_OpenCallsOnly", "WorkOrders_InProgressCallsOnly", "WorkOrders_OpenAndInProgress", "WorkOrders_OpenAndInProgressExcludingPartsOnOrder", "WorkOrders_OpenAndInProgressExcludingReferredToFM", "WorkOrders_OpenAndInProgressExcludingMaintenance", "WorkOrders_CompletedCallsOnly", "WorkOrders_InvoicedCallsOnly", "WorkOrders_AllCalls", "WorkOrders_AllCallsLongFormat", "WorkOrders_AllCallsUserAssignment", "WorkOrders_ArchiveReports_MySavedArchiveReports", "WorkOrders_ArchiveReports_CallHistory", "WorkOrders_ArchiveReports_AccrualReport", "WorkOrders_ArchiveReports_OriginalETAMmissed", "WorkOrders_ArchiveReports_ExcessiveCalls", "WorkOrders_AuditReports_DataExtract", "QuickView", "LocationsAndProviderAssignments", "PlannedMaintenance_PMServices", "PlannedMaintenance_PMLocations", "PlannedMaintenance_PMTemplates", "SitePlanningReports", "AssetsEquipment_Administration", "AssetsEquipment_Summary", "AssetsEquipment_ManageAssets", "AssetsEquipment_ManageAssetTypes", "AssetsEquipment_RefrigerantLeakEvents", "AssetsEquipment_ImportedAssets", "Inventory", "CompliancePrivateNetwork", "Admin_LocationSettings_LocationNoteHeaders", "Admin_LocationSettings_BusinessHours", "Admin_WOProperties_Categories", "Admin_WOProperties_Priorities", "Admin_WOProperties_Statuses", "Admin_WOProperties_TradesNTEs", "Admin_Accounting_AdditionalApprovalCodes", "Admin_Accounting_GLCodes", "Admin_Accounting_ImportGLCodeTemplate", "Admin_Invoices_General", "Admin_Invoices_MLIConfiguration", "Admin_Invoices_AutoApproval", "Admin_Proposals_MLPConfiguration", "Admin_Proposals_AutoApproval", "Admin_Proposals_General", "Admin_Proposals_ProposalApproveReasons", "Admin_Proposals_ProposalAssignReasons", "Admin_Permissions_Users", "Admin_Permissions_Mobile", "Admin_Permissions_Security", "Admin_Permissions_ImpersonateUser", "Admin_Permissions_APIIntegration", "Admin_Permissions_Webhooks", "Admin_Permissions_Notifications", "Admin_SiteAccessRules", "Admin_SitePlanningSetup", "Admin_Providers", "Admin_Subscribers", "Admin_Connector", "Admin_UserAccount", "Admin_Tools_Surveys", "Admin_Tools_CheckLists", "Admin_Tools_Announcements", "Admin_Tools_RemapProviders", "Admin_Tools_UploadTemplates", "Admin_Tools_SuppressionListRemoval", "Admin_Tools_QuickView", "Admin_QualitySurvey_SurveyQuestions", "Admin_QualitySurvey_SurveyReport", "Admin_Mobile_CIWO", "Admin_Mobile_GPS", "Admin_UserManagement", "Admin_Locations", "ServiceProviders", "AnalyticsProView", "Logout", "ReportAnIssue", "MobileAccessCode", "HelpLinkForSubscribers", "HelpLinkForProviders", "ProviderSearch", "Projects", "Admin_Projects_ApprovalConfiguration", "Admin_Projects_TypesAndCategories", "Admin_Projects_Config", "Admin_Spaces_SpacesManager", "Admin_Tools_UniversalConnectorSetup", "Spaces_Analytics", "Spaces_Dashboard", "Spaces_Manager", "Spaces_Plotter", "Spaces_Viewer", "Admin_UniversalConnectorConfig", "Admin_IssueListSetup", "Admin_DashboardSettings", "Admin_Proposals_NewMLPConfiguration", "Admin_BudgetInsights", "PartnerPortal", "Admin_PlatformIntelligence_AnomalyOverrides", "Admin_PlatformIntelligence_WoSummary", "Admin_PlatformIntelligence_WoNotes", "FtmBackToSubscriber", "Admin_AIActionHub_RuleBuilder", "Admin_AIActionHub_ActionLogs", "Admin_AIActionHub_Settings", "AIActionHub_Tasks", "ClientTraining"]).optional(), Items: z.array(z.lazy(() => serviceChannelServicesMessagingMenuItem)).optional(), IsAbsoluteUrl: z.boolean().optional()}); export const serviceChannelServicesMessagingMenuResponse = z.object({MainMenu: z.array(serviceChannelServicesMessagingMenuItem).optional(), AccountMenu: serviceChannelServicesMessagingMenuItem.optional(), LogoUrl: z.string().optional(), LogoHref: 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 /users/current/menu */ export const getApiUsersCurrentMenu = async (options?: GetApiUsersCurrentMenuOptions) => { 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(/\/+$/, '')}/users/current/menu${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(serviceChannelServicesMessagingMenuResponse, await res.json()) };