import {z} from 'zod' export type GetApiRolesFeedRolesOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const systemCollectionsGenericKeyValuePairSystemInt32SystemString = z.object({Key: z.number().int().optional(), Value: z.string().optional()}); export const serviceChannelServicesMessagingPrimaryRolesPrimaryRolesInfo = z.object({Id: z.number().int().optional(), SubscriberID: z.number().int().optional(), RoleTitle: z.string().optional(), DashboardTitle: z.string().optional(), ServiceRequestDashboard: z.boolean().optional(), ServiceClick: z.boolean().optional(), SupplyClick: z.boolean().optional(), EquipmentModule: z.boolean().optional(), PreventiveMaintenancetModule: z.boolean().optional(), FixxbookLink: z.boolean().optional(), PlaceServiceRequest: z.boolean().optional(), InvoiceFullControl: z.boolean().optional(), InvoiceReadAll: z.boolean().optional(), InvoiceCreate: z.boolean().optional(), InvoiceProcess: z.boolean().optional(), InvoiceReadApprPaid: z.boolean().optional(), ProposalFullControl: z.boolean().optional(), ProposalRead: z.boolean().optional(), ProposalCreate: z.boolean().optional(), ProposalProcess: z.boolean().optional(), ReportsReadEdit: z.boolean().optional(), ReportsRead: z.boolean().optional(), LocationsRead: z.boolean().optional(), EquipmentRead: z.boolean().optional(), ServiceProviderFullControl: z.boolean().optional(), ServiceProviderRead: z.boolean().optional(), ServiceProviderReadEdit: z.boolean().optional(), ServiceProviderRequestFor: z.boolean().optional(), TrackWoPoReadEdit: z.boolean().optional(), TrackWoPoRead: z.boolean().optional(), PowerUser: z.boolean().optional(), AdminUser: z.boolean().optional(), SuperUser: z.boolean().optional(), SiteAuditSetup: z.boolean().optional(), SiteAuditReporter: z.boolean().optional(), ProviewAdmin: z.boolean().optional(), FinancialManager: z.boolean().optional(), FinancialManagerAdmin: z.boolean().optional(), DashboardExpert: z.boolean().optional(), PowerUserLite: z.boolean().optional(), InventoryManager: z.boolean().optional(), DecisionEngineUser: z.boolean().optional(), ProjectManager: z.boolean().optional(), RefrigerantTrackingAdmin: z.boolean().optional(), SiteAccessAdmin: z.boolean().optional(), DashboardAdminUser: z.boolean().optional(), PrivateNetworkAccess: z.boolean().optional(), AdditionalSetupNames: z.string().optional(), SiteAuditAuditor: z.boolean().optional(), PowerInvoiceUser: z.boolean().optional(), InvoiceAdmin: z.boolean().optional(), EulaSignoff: z.boolean().optional(), WikiEditor: z.boolean().optional(), SiteAccessMobile: z.boolean().optional(), ProgramManager: z.boolean().optional(), LocationAdmin: z.boolean().optional(), PlannedMaintenanceAdmin: z.boolean().optional(), ApprovalCodeEditor: z.boolean().optional(), ProviderAssignmentsEditor: z.boolean().optional(), ProviderAdmin: z.boolean().optional(), SpacesAdmin: z.boolean().optional(), SpacesExternal: z.boolean().optional(), SpacesPlotter: z.boolean().optional(), SpacesMaker: z.boolean().optional(), AssetInventory: z.boolean().optional(), PreventLogin: z.boolean().optional(), SiteAuditEditor: z.boolean().optional(), AddLabels: z.boolean().optional(), EmailNotificationInvoice: z.boolean().optional(), EmailNotificationProposal: z.boolean().optional(), EmailNotificationWOAssignment: z.boolean().optional(), EmailNotificationWONotes: z.boolean().optional(), EmailNotificationProposalMLP: z.boolean().optional(), EmailNotificationFollowingWo: z.boolean().optional(), CompliancePMManager: z.boolean().optional(), NetsuiteBillingAdmin: z.boolean().optional(), EmbedAnalyticsUser: z.boolean().optional(), ImpersonateUsers: z.boolean().optional(), Trades: z.array(systemCollectionsGenericKeyValuePairSystemInt32SystemString).optional(), FTMAccountAccess: z.boolean().optional(), BudgetInsightsReporter: z.boolean().optional(), AIActionHubAdmin: z.boolean().optional(), AIActionHubUser: z.boolean().optional(), AssignThirdParty: z.boolean().optional(), OutOfOfficeAdmin: z.boolean().optional()}); export const getApiRolesFeedRolesResponse = z.array(serviceChannelServicesMessagingPrimaryRolesPrimaryRolesInfo); 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 /roles/FeedRoles */ export const getApiRolesFeedRoles = async (options?: GetApiRolesFeedRolesOptions) => { 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(/\/+$/, '')}/roles/FeedRoles${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(getApiRolesFeedRolesResponse, await res.json()) };