import {z} from 'zod' export type JourneyAddressPayload = {type?: string | undefined, line_1?: string | undefined, line_2?: string | undefined, city?: string | undefined, state?: string | undefined, postal_code?: string | undefined, country_code?: string | undefined}; export type JourneyApplicationEntityCreate = {external_entity_id?: string | undefined, data: {name_first?: string | undefined, name_middle?: string | undefined, name_last?: string | undefined, birth_date?: string | undefined, document_ssn?: string | undefined, document_national_id?: string | undefined, document_id_card?: string | undefined, document_license?: string | undefined, document_passport?: string | undefined, email_address?: string | undefined, gender?: string | undefined, phone_number?: string | undefined, ip_address_v4?: string | undefined, addresses?: Array | undefined, meta?: Record | undefined}, entity_type?: ('person' | 'business') | undefined, branch_name?: string | undefined, entity_token?: string | undefined}; export type JourneyApplicationEntityUpdate = {entity_token?: string | undefined, external_entity_id?: string | undefined, entity_application_token?: string | undefined, data: {name_first?: string | undefined, name_middle?: string | undefined, name_last?: string | undefined, birth_date?: string | undefined, document_ssn?: string | undefined, document_national_id?: string | undefined, document_id_card?: string | undefined, document_license?: string | undefined, document_passport?: string | undefined, email_address?: string | undefined, gender?: string | undefined, phone_number?: string | undefined, ip_address_v4?: string | undefined, addresses?: Array | undefined, meta?: Record | undefined}}; export type JourneyApplicationEntityUpdateWithDocuments = {entity_token?: string | undefined, external_entity_id?: string | undefined, entity_application_token?: string | undefined, data: {document_token_selfie?: string | undefined, document_token_back?: string | undefined, document_token_front?: string | undefined, document_step?: ('front' | 'back' | 'final') | undefined}}; export type JourneyApplicationUpdatePayload = {has_finished_sending_additional_entities?: boolean | undefined, entities?: (Array) | undefined}; export type UpdateApiJourneysApplicationsExtExternalApplicationIdLatestArgs = {'alloy-journey-override-sync'?: boolean | undefined, body: JourneyApplicationUpdatePayload}; export type UpdateApiJourneysApplicationsExtExternalApplicationIdLatestOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; export const outputAttributeResponse = z.object({outcome_reasons: z.array(z.object({name: z.string().optional(), type: z.enum(["adverse_action", "null"]).nullable().optional()})).optional(), tags: z.array(z.string()).optional(), output_attributes: z.record(z.string(), z.union([z.string(), z.number()])).optional(), matrix_models: z.record(z.string(), z.object({matrix_model_public_version: z.number().int().optional(), matrix_model_token: z.string().optional(), name: z.string().optional(), result: z.number().nullable().optional(), status: z.enum(["executed", "not_executed"]).optional(), x_bucket: z.number().nullable().optional(), x_value: z.number().nullable().optional(), y_bucket: z.number().nullable().optional(), y_value: z.number().nullable().optional()})).optional()}); export const multiEnvironmentConfig = z.object({multi_environment_config_token: z.string().optional(), multi_environment_config_notes: z.string().optional(), created_at: z.string().optional(), journey_token: z.string().optional(), journey_name: z.string().optional(), journey_public_version: z.number().optional(), actions: z.array(z.object({journey_action_id: z.number().optional(), action_version: z.number().optional(), action_name: z.string().optional(), outcome: z.string().optional()})).optional(), workflows: z.array(z.object({workflow_name: z.string().optional(), workflow_node_type: z.string().optional(), workflow_token: z.string().optional(), workflow_public_version: z.number().optional(), outcome: z.string().optional(), configured_services: z.array(z.object({service_name: z.string().optional(), has_credentials: z.boolean().optional(), sandbox: z.boolean().optional(), credentials_description: z.string().optional()})).optional()})).optional()}); export const doAwaitAdditionalEntities = z.boolean(); export const investigationsResponse = z.array(z.object({investigation_token: z.string().optional(), investigation_state: z.enum(["alert_review", "alert_review_closed", "case_review", "case_review_closed", "open"]).optional()})); export const updateApiJourneysApplicationsExtExternalApplicationIdLatestResponse = z.union([z.object({journey_application_token: z.string().optional(), _links: z.object({self: z.object({href: z.string().optional()}).optional()}).optional()}), z.object({journey_application_token: z.string().optional(), status: z.enum(["completed", "data_request", "error", "expired", "pending_action", "pending_additional_entities", "pending_documents", "pending_journey_application_review", "pending_reconciliation", "pending_step_up", "pending_workflow_service", "running", "waiting_review"]).optional(), sandbox: z.boolean().optional(), created_at: z.number().int().optional(), updated_at: z.number().int().optional(), closed_at: z.number().int().optional(), complete_outcome: z.string().optional(), recent_outcome: z.string().optional(), is_shadow_app: z.boolean().optional(), is_part_of_shadow_test: z.boolean().optional(), journey_application_status: z.string().optional(), is_archived: z.boolean().optional(), external_group_id: z.string().optional(), external_application_id: z.string().optional(), is_rerun: z.boolean().optional(), archived_at: z.string().optional(), terminal_reconciliation_output: outputAttributeResponse.optional(), application_meta: z.object({}).optional(), _embedded: z.object({rerun: z.object({initiated_by: z.enum(["api", "dashboard"]).optional(), previous_journey_application_token: z.string().optional(), root_external_group_id: z.string().optional(), root_journey_application_token: z.string().optional()}).optional(), reruns: z.array(z.object({initiated_by: z.enum(["dashboard", "api"]).optional(), next_journey_application_token: z.string().optional(), created_at: z.number().int().optional()})).optional(), events: z.array(z.object({journey_application_event_token: z.string().optional(), journey_application_token: z.string().optional(), journey_type: z.enum(["alert", "application"]).optional(), type: z.enum(["application_archived", "application_expired", "application_unarchived", "completed_action", "completed_application", "completed_branch", "completed_evaluation", "completed_mid_journey_reconciliation", "completed_reconciliation", "completed_review", "completed_review_journey_application", "data_request_evaluation", "error", "executed_branch_change", "has_finished_sending_additional_entities", "journey_application_retriggered", "maximum_retries_reached", "pending_action", "pending_action_expired", "pending_documents", "pending_evaluation", "pending_review", "pending_step_up", "pending_step_up_expired", "pending_workflow_service", "queued_branch_change", "reached_application_outcome", "reached_auto_decision_node", "reached_mid_journey_reconciliation_node", "reached_retry_node", "started_application", "started_evaluation", "started_mid_journey_reconciliation", "started_reconciliation", "started_rerun_application", "started_review", "visited_node"]).optional(), external_partner_id: z.string().optional(), external_product_id: z.string().optional(), external_group_id: z.string().optional(), reason: z.string().optional(), reasons: z.array(z.string()).optional(), timestamp: z.number().int().optional(), outcome: z.string().optional(), evaluation_token: z.string().optional(), entity_token: z.string().optional(), entity_application_token: z.string().optional(), error_data: z.object({error: z.object({type: z.string().optional(), details: z.object({}).optional(), message: z.string().optional(), minor_code: z.number().int().optional(), error_token: z.string().optional()}).optional(), timestamp: z.number().int().optional(), status_code: z.number().int().optional(), entity_token: z.string().optional(), evaluation_token: z.string().optional(), application_token: z.string().optional(), application_version_id: z.number().int().optional()}).optional(), _embedded: z.object({node: z.object({name: z.string().optional(), id: z.string().optional(), type: z.enum(["action", "docv", "outcome", "reconciliation_workflow", "review", "step_up", "workflow"]).optional(), config: z.object({}).optional(), workflow_name: z.string().optional(), sdk_config: z.object({documents: z.array(z.string()).optional(), selfie: z.boolean().optional()}).optional()}).optional()}).optional(), _links: z.object({evaluation: z.object({href: z.string().optional()}).optional(), case: z.object({href: z.string().optional()}).optional()}).optional()})).optional(), journey: z.object({journey_name: z.string().optional(), journey_type: z.enum(["application", "alert"]).optional(), journey_token: z.string().optional(), journey_version_num: z.string().optional(), _links: z.object({self: z.object({href: z.string().optional()}).optional(), callback_by_entity_application_token: z.object({}).optional()}).optional()}).optional(), child_entities: z.array(z.object({external_entity_identifier: z.string().optional(), name: z.string().optional(), token: z.string().optional(), type: z.string().optional(), entity_application_token: z.string().optional(), entity_application_status: z.string().optional(), entity_application_outcome: z.string().optional(), entity_application_branch_name: z.string().optional(), created: z.string().optional(), sandbox_persona_name: z.string().optional(), external_entity_ids: z.array(z.object({external_entity_id: z.string().optional(), external_entity_id_type: z.string().nullable().optional()})).optional()})).optional(), entity_applications: z.array(z.object({entity_token: z.string().optional(), entity_application_token: z.string().optional(), entity_application_outcome: z.string().optional(), entity_application_status: z.string().optional(), sdk_link: z.string().optional(), external_entity_identifiers: z.array(z.object({external_entity_identifier: z.string().optional(), external_entity_identifier_type: z.string().nullable().optional()})).optional(), dimensions: z.array(z.object({dimension: z.string().optional(), dimension_type: z.string().optional()})).optional(), entity_application_status_details: z.object({required: z.array(z.object({key: z.string().optional(), type: z.string().optional(), regex: z.string().optional(), message: z.string().optional(), description: z.string().optional()})).optional(), or: z.string().optional(), optional: z.array(z.object({key: z.string().optional(), type: z.string().optional(), regex: z.string().optional(), description: z.string().optional()})).optional()}).optional(), output: outputAttributeResponse.optional()})).optional(), entity: z.object({external_entity_identifier: z.string().optional(), name: z.string().optional(), token: z.string().optional(), type: z.string().optional()}).optional(), entity_group: z.object({name: z.string().optional(), token: z.string().optional(), type: z.enum(["business", "joint_account", "membership", "merchant"]).optional()}).optional(), multi_environment_config: multiEnvironmentConfig.optional(), is_pending_additional_entities: doAwaitAdditionalEntities.optional(), investigations: investigationsResponse.optional()}).optional(), _links: z.object({self: z.object({href: z.string().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 }; /** * Update latest Journey Application by External Application ID * * PUT /journeys/applications/ext/{external_application_id}/latest * * Also accepts auth: basic */ export const updateApiJourneysApplicationsExtExternalApplicationIdLatest = async (args: UpdateApiJourneysApplicationsExtExternalApplicationIdLatestArgs, options?: UpdateApiJourneysApplicationsExtExternalApplicationIdLatestOptions) => { const {baseUrl = "https://sandbox.alloy.co/v1", fetch: fetchFn = fetch, oauth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args['alloy-journey-override-sync'] != null) headers.set("alloy-journey-override-sync", String(args['alloy-journey-override-sync'])) if (oauth2 !== undefined) headers.set('authorization', `Bearer ${oauth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/journeys/applications/ext/${encodeURIComponent(String(args.external_application_id))}/latest${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PUT", 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(updateApiJourneysApplicationsExtExternalApplicationIdLatestResponse, await res.json()) };