import {z} from 'zod' export type GetApiJourneysApplicationsExtExternalApplicationIdLatestArgs = {hideFields?: string | undefined}; export type GetApiJourneysApplicationsExtExternalApplicationIdLatestOptions = {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 getApiJourneysApplicationsExtExternalApplicationIdLatestResponse = z.union([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()}), z.object({journey_application_token: z.string().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 }; /** * Get latest Journey Application by External Application ID * * GET /journeys/applications/ext/{external_application_id}/latest * * Also accepts auth: basic */ export const getApiJourneysApplicationsExtExternalApplicationIdLatest = async (args: GetApiJourneysApplicationsExtExternalApplicationIdLatestArgs, options?: GetApiJourneysApplicationsExtExternalApplicationIdLatestOptions) => { const {baseUrl = "https://sandbox.alloy.co/v1", fetch: fetchFn = fetch, oauth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.hideFields != null) query.append("hideFields", String(args.hideFields)) 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: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiJourneysApplicationsExtExternalApplicationIdLatestResponse, await res.json()) };