import {z} from 'zod' export type GetApiApiServiceProvidersServiceProviderIdPersonsArgs = {email?: string | undefined, page?: number | undefined, serviceProviderId: string, size?: number | undefined, sorted?: boolean | undefined, unsorted?: boolean | undefined}; export type GetApiApiServiceProvidersServiceProviderIdPersonsOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const timestampRes = z.object({date: z.number().int().optional(), day: z.number().int().optional(), hours: z.number().int().optional(), minutes: z.number().int().optional(), month: z.number().int().optional(), nanos: z.number().int().optional(), seconds: z.number().int().optional(), time: z.number().int().optional(), timezoneOffset: z.number().int().optional(), year: z.number().int().optional()}); export const approval = z.object({createdDtm: timestampRes.optional(), id: z.string().optional(), provider: z.string().optional(), url: z.string().optional()}); export const approvalNotifiedAbout = z.object({emailDateTime: timestampRes.optional(), errorInfo: z.string().optional(), url: z.string().optional()}); export const attributePermission = z.object({createdDtm: timestampRes.optional(), decision: z.enum(["ALWAYS", "JUST_ONCE", "NEVER"]).optional(), providerId: z.string().optional(), providerType: z.enum(["CREDENTIAL_PROVIDER", "SERVICE_PROVIDER"]).optional(), requestedAttributeType: z.enum(["ANONYMOUS", "EMAIL", "ID_TOKEN", "NAME", "PHOTO", "SYSTEM_ID"]).optional(), updatedDtm: timestampRes.optional()}); export const credentialTypePermission = z.object({createdDtm: timestampRes.optional(), credentialTypeHref: z.string().optional(), decision: z.enum(["ALWAYS", "JUST_ONCE", "NEVER"]).optional(), providerId: z.string().optional(), providerType: z.enum(["CREDENTIAL_PROVIDER", "SERVICE_PROVIDER"]).optional(), updatedDtm: timestampRes.optional()}); export const serviceDetails = z.object({connectTimeout: z.number().int().optional(), contentType: z.string().optional(), headers: z.record(z.string(), z.string()).optional(), name: z.string().optional(), proxyHost: z.string().optional(), proxyPort: z.number().int().optional(), readTimeout: z.number().int().optional(), url: z.string().optional()}); export const tag = z.object({id: z.string().optional(), value: z.string().optional()}); export const personInfo = z.object({approvals: z.array(approval).optional(), approvalsNotifiedAbout: z.array(approvalNotifiedAbout).optional(), attributePermissions: z.array(attributePermission).optional(), credentialTypePermissions: z.array(credentialTypePermission).optional(), notificationEmailValidated: z.boolean().optional(), registeredApiMap: z.record(z.string(), z.array(serviceDetails)).optional(), tags: z.array(tag).optional()}); export const lockInfo = z.object({attemptsMade: z.number().int().optional(), attemptsRemaining: z.number().int().optional(), lockedUntil: timestampRes.optional(), subType: z.string().optional(), type: z.string().optional()}); export const region = z.object({approvals: z.record(z.string(), approval).optional(), createdDtm: timestampRes.optional(), description: z.string().optional(), href: z.string().optional(), id: z.string().optional(), locales: z.array(z.string()).optional(), name: z.string().optional(), permittedOperations: z.array(z.string()).optional(), status: z.enum(["ACTIVE", "ARCHIVED", "PENDING"]).optional()}); export const regChallenge = z.object({fidoRegRequest: z.string().optional(), fidoRegResponse: z.string().optional(), fidoResponseCode: z.number().int().optional(), fidoResponseMessage: z.string().optional(), id: z.string().optional(), status: z.enum(["ERROR", "FAILED", "PENDING", "SUCCESS"]).optional()}); export const sessionInfo = z.object({bearerToken: z.string().optional(), invitationCode: z.string().optional(), regChallenges: z.array(regChallenge).optional()}); export const idTokenInfo = z.object({audience: z.string().optional(), issuer: z.string().optional(), timeToLive: z.number().int().optional()}); export const tenantRes = z.object({archivedDtm: timestampRes.optional(), createdDtm: timestampRes.optional(), href: z.string().optional(), id: z.string().optional(), idTokenInfo: idTokenInfo.optional(), lastUpdatedDtm: timestampRes.optional(), name: z.string().optional(), notificationEmail: z.string().optional(), permittedOperations: z.array(z.string()).optional(), status: z.enum(["ACTIVE", "ARCHIVED", "BLOCKED", "PENDING"]).optional()}); export const person = z.object({aliases: z.record(z.string(), z.string()).optional(), archivedDtm: timestampRes.optional(), createdDtm: timestampRes.optional(), email: z.string().optional(), expiringDtm: z.string().optional(), extendedAttributes: z.object({}).optional(), firstName: z.string().optional(), href: z.string().optional(), id: z.string().optional(), idxId: z.string().optional(), idxInstanceId: z.string().optional(), idxTenant: z.string().optional(), idxUserId: z.string().optional(), info: personInfo.optional(), lastName: z.string().optional(), lastUpdatedDtm: timestampRes.optional(), lastUsedDtm: timestampRes.optional(), locks: z.array(lockInfo).optional(), permittedOperations: z.array(z.string()).optional(), region: region.optional(), sessionInfo: sessionInfo.optional(), status: z.enum(["ACTIVE", "ARCHIVED", "BLOCKED", "PENDING", "REREG_CONFIRMED"]).optional(), tenant: tenantRes.optional()}); export const sort = z.object({empty: z.boolean().optional(), sorted: z.boolean().optional(), unsorted: z.boolean().optional()}); export const pageable = z.object({offset: z.number().int().optional(), pageNumber: z.number().int().optional(), pageSize: z.number().int().optional(), paged: z.boolean().optional(), sort: sort.optional(), unpaged: z.boolean().optional()}); export const pagePerson = z.object({content: z.array(person).optional(), empty: z.boolean().optional(), first: z.boolean().optional(), last: z.boolean().optional(), number: z.number().int().optional(), numberOfElements: z.number().int().optional(), pageable: pageable.optional(), size: z.number().int().optional(), sort: sort.optional(), totalElements: z.number().int().optional(), totalPages: z.number().int().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 }; /** * List the associated persons for this service provider * * GET /api/serviceProviders/{serviceProviderId}/persons */ export const getApiApiServiceProvidersServiceProviderIdPersons = async (args: GetApiApiServiceProvidersServiceProviderIdPersonsArgs, options: GetApiApiServiceProvidersServiceProviderIdPersonsOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.email != null) query.append("email", String(args.email)) if (args.page != null) query.append("page", String(args.page)) if (args.size != null) query.append("size", String(args.size)) if (args.sorted != null) query.append("sorted", String(args.sorted)) if (args.unsorted != null) query.append("unsorted", String(args.unsorted)) const url = `${baseUrl.replace(/\/+$/, '')}/api/serviceProviders/${encodeURIComponent(String(args.serviceProviderId))}/persons${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(pagePerson, await res.json()) };