import {z} from 'zod' export type GetApiV0OrganizationsOrganizationIdWorkflowsArgs = {sort?: ('-created-at' | 'created-at') | undefined, 'page[size]'?: number | undefined, 'page[after]'?: string | undefined, 'page[before]'?: string | undefined, 'organization-id': string}; export type GetApiV0OrganizationsOrganizationIdWorkflowsOptions = {baseUrl?: string | undefined, apiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const getApiV0OrganizationsOrganizationIdWorkflowsResponse = z.object({workflows: z.array(z.object({"workflow-url": z.string(), "display-name": z.string().min(1), description: z.string(), "legal-person-type": z.enum(["individual", "corporation"]), "created-at": z.string(), "disabled?": z.boolean(), "required-claim-types": z.record(z.string(), z.array(z.enum(["mobile-number", "properties-origins-of-deposits", "individual-identity", "sole-trader", "property-types", "commercial-property-industries", "uk-company-register", "individual-income", "business-website", "initial-deposit", "international-payments-countries", "company-telephone-number", "managed-properties", "business-size", "entity-address", "person-with-significant-control", "business-industry", "tax-residencies", "tenant-cash-payments", "verified-bank-account", "company-email-address", "tax-residency", "uk-financial-services-register", "non-tenant-balance", "business-description", "hmrc-register", "external-risk-rating", "nfe-classification", "vat-registration", "entity-name", "hmo-license", "business-email-address", "client-money-protection-scheme", "fca-mutuals-register", "individual-sources-of-funds", "nominal-person-with-significant-control", "hmo-verification", "commercial-property-ratio", "governing-body-member", "business-address", "employment", "annual-turnover", "purposes-of-account", "sic-codes", "international-operations-countries", "balance-sheet-size", "us-citizen", "role-titles", "sources-of-funds", "senior-manager-function-holder", "business-owner", "business-telephone-number", "individual-email-address", "tax-identification-numbers-by-country", "business-start-date", "contact-details", "reliance-verification", "ultimate-beneficial-owner", "aeoi-entity-classification", "business-name", "individual-purposes-of-account", "nationality", "trading-name", "number-of-employees", "social-media", "trading-address", "company-website", "director", "complex-business-structure", "alternative-number", "cash-payments", "fca-fs-register-firm", "tax-identification-number", "fca-fs-register-individual", "individual-residence", "business-type"]))).optional(), "workflow-rules": z.array(z.enum(["allow-zero-directors", "allow-missing-directors"])).optional()})), links: z.object({prev: z.string().nullable(), next: z.string().nullable()}), meta: z.object({page: z.object({total: z.number().int().gte(0).optional(), "estimated-total": z.object({"at-least": z.literal(10000).optional()}).optional()}).optional()}).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 organization workflows * * GET /v0/organizations/{organization-id}/workflows */ export const getApiV0OrganizationsOrganizationIdWorkflows = async (args: GetApiV0OrganizationsOrganizationIdWorkflowsArgs, options?: GetApiV0OrganizationsOrganizationIdWorkflowsOptions) => { const {baseUrl = "https://api.griffin.com", fetch: fetchFn = fetch, apiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.sort != null) query.append("sort", String(args.sort)) if (args['page[size]'] != null) query.append("page[size]", String(args['page[size]'])) if (args['page[after]'] != null) query.append("page[after]", String(args['page[after]'])) if (args['page[before]'] != null) query.append("page[before]", String(args['page[before]'])) if (apiKeyAuth !== undefined) headers.set("Authorization", apiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/v0/organizations/${encodeURIComponent(String(args['organization-id']))}/workflows${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(getApiV0OrganizationsOrganizationIdWorkflowsResponse, await res.json()) };