import {z} from 'zod' export type EntityCheckingAccountProduct = 'grasshopper' | 'crb'; export type SimulateApplicationApprovalRequest = {banking_account_product_type?: EntityCheckingAccountProduct | undefined}; export type CreateApiSimulationsEntitiesEntityIdApplicationApprovalArgs = {entity_id: string, body: SimulateApplicationApprovalRequest | null}; export type CreateApiSimulationsEntitiesEntityIdApplicationApprovalOptions = {baseUrl?: string | undefined, apiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const onboardingApplicationStatus = z.enum(["pending_document_upload", "pending_user_action", "submitted", "under_review", "approved", "rejected"]); export const timestamp = z.string(); export const publicKybProofType = z.enum(["accredited", "address", "articles_of_organization", "bank_statement", "client_contract", "client_invoice", "beneficial_owner_address", "beneficial_owner_id", "beneficial_owner_id_back", "beneficial_ownership_register", "bylaws", "certificate_of_good_standing", "corporate_resolution", "drivers_license", "due_diligence", "ein", "final_edd_report", "periodic_review_report", "government_issued_business_license", "hemp_cultivator_state_license", "incorporation", "industry_related_license", "lease_agreement", "llc_resolution", "money_service_business_license", "money_transmitter_registration", "mortgage_statement", "national_id", "org_chart", "partnership_agreement", "partnership_agreement_due_diligence", "partnership_resolution", "personal_address", "remote_employees_due_diligence", "signed_ss4", "tax_exemption_certificate", "uk_officer_passport", "officer_registry", "uk_registry", "shareholder_registry", "uk_w8_en", "utility_bill", "us_based_office_proof_of_address_due_diligence", "pitch_deck", "active_business_registration", "proof_of_ownership_or_banking_authorization", "non_profit_bylaws", "operating_agreement", "flow_of_funds", "aml_sanction", "registration_or_license", "sec_filing", "legal_opinion", "certificate_of_formation_master_llc", "series_operating_agreement", "share_subscription_agreement", "fund_subscription_agreement", "safe_agreement", "convertible_note_agreement", "loan_promissory_note", "token_purchase_agreement", "saft_agreement", "deal_memo_hybrid_agreement", "issuer_due_diligence_report", "protocol_ecosystem_questionnaire", "investment_company_due_diligence_form", "us_based_operations_due_diligence_form", "register_of_directors", "articles_of_association", "memorandum_of_association", "non_profit_status", "ofac_sanctions_screening_policy", "aml_kyc_policy", "w8_bene", "corporate_structure_chart", "custody_safeguarding_agreement", "reserve_attestation", "sanctions_vendor_service_agreement", "contractual_fund_flow_agreements"]); export const onboardingDocumentStatus = z.object({proof_type: publicKybProofType, file_name: z.string().nullable(), representative_id: z.string().nullable().optional()}); export const onboardingKycStatus = z.enum(["not_started", "pending", "action_required", "approved", "rejected"]); export const publicOnboardingType = z.enum(["api", "smb", "mcp", "partner"]); export const publicOnboardingStep = z.enum(["gather_business_context", "collect_user_info", "collect_business_addresses", "collect_business_details", "collect_additional_details", "complete_due_diligence", "upload_documents", "manage_representatives", "complete_identity_verification", "accept_terms", "submit_application", "monitor_review", "resolve_info_requests", "onboarding_complete"]); export const onboardingPhase = z.enum(["business_info", "ready_to_submit", "submitted"]); export const publicOutstandingItemKind = z.enum(["document", "answers", "tin"]); export const publicOutstandingItem = z.object({kind: publicOutstandingItemKind, proof_type: publicKybProofType.nullable().optional(), detail: z.string()}); export const onboardingInfoRequest = z.object({request_id: z.string(), required_proof_types: z.array(publicKybProofType), questions_pending: z.boolean(), outstanding: z.array(publicOutstandingItem), note: z.string().nullable(), expires_at: timestamp.nullable()}); export const onboardingNextStep = z.object({step: publicOnboardingStep, phase: onboardingPhase, missing: z.array(z.string()), required_proof_types: z.array(publicKybProofType).optional(), can_submit: z.boolean(), info_requests: z.array(onboardingInfoRequest).optional()}); export const onboardingKycFailedCheck = z.enum(["accept_tos", "verify_sms", "kyc_check", "documentary_verification", "selfie_check", "watchlist_screening", "risk_check"]); export const onboardingRepresentativeKyc = z.object({representative_id: z.string(), first_name: z.string().nullable(), last_name: z.string().nullable(), email: z.string(), is_primary: z.boolean(), is_beneficial_owner: z.boolean(), percent_ownership: z.string().nullable(), kyc_status: onboardingKycStatus, failed_checks: z.array(onboardingKycFailedCheck)}); export const onboardingConsentStatus = z.enum(["pending", "viewed", "completed"]); export const agenticOnboardingConsentType = z.enum(["patriot_act", "application_attestation", "stripe_connected_account", "stripe_issuing_accountholder", "lead_bank_prepaid_card", "lead_bank_privacy", "meow_privacy_policy", "meow_terms_of_service", "grasshopper_terms_of_service", "grasshopper_ics_deposit_placement"]); export const onboardingConsentState = z.object({status: onboardingConsentStatus, consented_items: z.array(agenticOnboardingConsentType), remaining_items: z.array(agenticOnboardingConsentType), viewed_at: timestamp.nullable(), completed_at: timestamp.nullable()}); export const entityOnboardingStatusResponse = z.object({entity_id: z.string(), status: onboardingApplicationStatus, business_name: z.string().nullable(), created_at: timestamp, updated_at: timestamp, documents: z.array(onboardingDocumentStatus), kyc_status: onboardingKycStatus, onboarding_type: publicOnboardingType, next_step: onboardingNextStep, representatives: z.array(onboardingRepresentativeKyc), consent_url: z.string().nullable(), consent: onboardingConsentState.nullable()}); 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 }; /** * Simulate Application Approval * * POST /simulations/entities/{entity_id}/application_approval */ export const createApiSimulationsEntitiesEntityIdApplicationApproval = async (args: CreateApiSimulationsEntitiesEntityIdApplicationApprovalArgs, options?: CreateApiSimulationsEntitiesEntityIdApplicationApprovalOptions) => { const {baseUrl = "https://api.meow.com/v1", fetch: fetchFn = fetch, apiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (apiKeyAuth !== undefined) headers.set("x-api-key", apiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/simulations/entities/${encodeURIComponent(String(args.entity_id))}/application_approval${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(entityOnboardingStatusResponse, await res.json()) };