/** * * Copyright © 2025-2026 Ping Identity Corporation. All right reserved. * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file for details. * **/ import type { JourneyStep, NextOptions, ResumeOptions, StartParam, Step, StepDetail } from '@forgerock/journey-client/types'; import type { ComponentConstructorOptions, SvelteComponent } from 'svelte'; import type { FullAutoFill } from 'svelte/elements'; import type { Writable } from 'svelte/store'; import type { Maybe } from '../interfaces'; export type CaptchaMode = 'visible' | 'invisible'; export interface CallbackMetadata { derived: { canForceUserInputOptionality: boolean; isFirstInvalidInput: boolean; isReadyForSubmission: boolean; isSelfSubmitting: boolean; isUserInputRequired: boolean; autocompleteValues: FullAutoFill | undefined; }; idx: number; initOptions?: Record; platform?: Record; } export interface JourneyStore extends Pick, 'subscribe'> { next: (prevStep: JourneyStep, nextOptions?: NextOptions) => Promise; pop: () => Promise; push: (changeOptions: StartParam) => Promise; reset: () => void; resume: (url: string, resumeOptions?: ResumeOptions) => Promise; start: (startOptions?: StartParam, recaptchaAction?: string) => Promise; redirect: (step: JourneyStep) => Promise; } export interface StageFormObject { icon: boolean; message: string; status: string; submit: () => void; } export interface StageJourneyObject { loading: boolean; pop: () => void; push: (options: StartParam) => void; redirect: (step: JourneyStep) => Promise; stack: StackStore; } export type StageComponent = new (options: ComponentConstructorOptions) => SvelteComponent; export interface StageRegistryEntry { component: StageComponent; detect: (step: JourneyStep) => boolean; } export interface JourneyStoreValue { completed: boolean; error: Maybe<{ code: Maybe; message: Maybe; stage: Maybe; troubleshoot: Maybe; detail: Maybe; }>; loading: boolean; metadata: { callbacks: CallbackMetadata[]; step: StepMetadata; } | null; step?: StepTypes; successful: boolean; response: Maybe; } export interface StackStore extends Pick, 'subscribe'> { latest: () => Promise; pop: () => Promise; push: (options?: StartParam) => Promise; reset: () => void; } export interface StepMetadata { derived: { isUserInputOptional: boolean; isStepSelfSubmittable: () => boolean; numOfCallbacks: number; numOfSelfSubmittableCbs: number; numOfUserInputCbs: number; stageName?: string; }; platform?: Record; } export type SelfSubmitFunction = () => void; export type StepTypes = JourneyStep | null;