import {z} from 'zod' export type GetApiV2JourneysIdArgs = {id: string}; export type GetApiV2JourneysIdOptions = {baseUrl?: string | undefined, BearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const googleProtobufTimestamp = z.string(); export const googleTypeDate = z.object({year: z.number().int().optional(), month: z.number().int().optional(), day: z.number().int().optional()}); export const svhelpPubapimodelsOnboardingJourneyMetadata = z.object({startDate: googleTypeDate.optional(), welcomeMessage: z.string().nullable().optional()}); export const svhelpPubapimodelsJourneyMetadata = z.object({onboarding: svhelpPubapimodelsOnboardingJourneyMetadata, welcomeTitle: z.string().nullable().optional(), welcomeBody: z.string().nullable().optional()}); export const svhelpPubapimodelsJourneyWorkflowInfo = z.object({id: z.string().optional(), name: z.string().optional()}); export const svhelpModelsJourneyTaskStatus = z.enum(["JOURNEY_TASK_STATUS_UNSPECIFIED", "JOURNEY_TASK_STATUS_COMPLETE", "JOURNEY_TASK_STATUS_CURRENT", "JOURNEY_TASK_STATUS_BLOCKED", "JOURNEY_TASK_STATUS_IN_PROGRESS"]); export const svflowCommonModelsWorkflowRunStatus = z.enum(["WORKFLOW_RUN_STATUS_UNSPECIFIED", "WORKFLOW_RUN_STATUS_PENDING", "WORKFLOW_RUN_STATUS_RUNNING", "WORKFLOW_RUN_STATUS_COMPLETED", "WORKFLOW_RUN_STATUS_FAILED", "WORKFLOW_RUN_STATUS_DENIED", "WORKFLOW_RUN_STATUS_CANCELED"]); export const svhelpPubapimodelsJourneyTaskWorkflowCall = z.object({id: z.string().optional(), workflowId: z.string().optional(), workflowName: z.string().optional(), runId: z.string().nullable().optional(), runStatus: svflowCommonModelsWorkflowRunStatus.optional(), createdAt: googleProtobufTimestamp.optional(), formConfirmationRequired: z.boolean().optional(), formConfirmationResponse: z.boolean().nullable().optional(), statusUpdatedAt: googleProtobufTimestamp.optional()}); export const svhelpPubapimodelsJourneyTask = z.object({id: z.string().optional(), parentTaskId: z.string().optional(), name: z.string().optional(), description: z.string().optional(), status: svhelpModelsJourneyTaskStatus.optional(), dependsOnIds: z.array(z.string()).optional(), assignedToUserId: z.string().nullable().optional(), dueDate: googleTypeDate.optional(), isOverdue: z.boolean().optional(), isStatusCheck: z.boolean().optional(), pollingIntervalMs: z.union([z.number().int(), z.string()]).nullable().optional(), latestWorkflowCall: svhelpPubapimodelsJourneyTaskWorkflowCall.optional()}); export const svhelpPubapimodelsJourneyHealthCheckType = z.enum(["JOURNEY_HEALTH_CHECK_TYPE_UNSPECIFIED", "JOURNEY_HEALTH_CHECK_TYPE_WORKFLOW_RUN", "JOURNEY_HEALTH_CHECK_TYPE_OVERDUE_TASK", "JOURNEY_HEALTH_CHECK_TYPE_UNASSIGNED_TASK"]); export const svhelpPubapimodelsJourneyHealthCheckStatus = z.enum(["JOURNEY_HEALTH_CHECK_STATUS_UNSPECIFIED", "JOURNEY_HEALTH_CHECK_STATUS_PASSING", "JOURNEY_HEALTH_CHECK_STATUS_FAILING", "JOURNEY_HEALTH_CHECK_STATUS_WARNING", "JOURNEY_HEALTH_CHECK_STATUS_RUNNING", "JOURNEY_HEALTH_CHECK_STATUS_NO_DATA", "JOURNEY_HEALTH_CHECK_STATUS_CANCELED"]); export const svhelpPubapimodelsJourneyHealthCheck = z.object({id: z.string().optional(), type: svhelpPubapimodelsJourneyHealthCheckType.optional(), status: svhelpPubapimodelsJourneyHealthCheckStatus.optional(), taskId: z.string().optional(), subtaskId: z.string().optional(), workflowId: z.string().nullable().optional(), workflowName: z.string().nullable().optional(), workflowCallId: z.string().nullable().optional(), runId: z.string().nullable().optional(), dueDate: googleTypeDate.optional()}); export const svhelpPubapimodelsJourneyHealthCheckCounts = z.object({totalCount: z.number().int().optional(), failingCount: z.number().int().optional(), warningCount: z.number().int().optional(), passingCount: z.number().int().optional(), runningCount: z.number().int().optional(), noDataCount: z.number().int().optional(), canceledCount: z.number().int().optional()}); export const svflowCommonModelsValidationErrorTranslations = z.object({displayMessage: z.string().optional(), fieldErrors: z.record(z.string(), z.string()).optional()}); export const svflowCommonModelsValidationErrors = z.object({displayMessage: z.string().optional(), fieldErrors: z.record(z.string(), z.string()).optional(), translations: z.record(z.string(), svflowCommonModelsValidationErrorTranslations).optional()}); export const svflowCommonModelsStatusCheckResult = z.object({isComplete: z.boolean().optional(), message: z.string().optional(), messageTranslations: z.record(z.string(), z.string()).optional()}); export const svhelpPubapimodelsJourneyWorkflowFailure = z.object({workflowCallId: z.string().optional(), runId: z.string().nullable().optional(), runStatus: svflowCommonModelsWorkflowRunStatus.optional(), workflowId: z.string().optional(), workflowName: z.string().optional(), taskId: z.string().optional(), subtaskId: z.string().optional(), validationErrors: svflowCommonModelsValidationErrors.optional(), statusCheckResult: svflowCommonModelsStatusCheckResult.optional(), runResult: z.string().nullable().optional(), runCompletedAt: googleProtobufTimestamp.optional()}); export const svstoreEntityTypeFieldDataType = z.enum(["DATA_TYPE_UNSPECIFIED", "TEXT", "NUMBER", "BOOL", "TIMESTAMP", "ENUM", "ENTITY_REF", "USER_REF", "UNIQUE", "MULTI_SELECT", "FILE"]); export const googleProtobufValue = z.union([z.number(), z.string(), z.boolean(), z.array(z.unknown()), z.record(z.string(), z.unknown())]).nullable(); export const svhelpPubapimodelsCustomFieldValueSummary = z.object({fieldId: z.string().optional(), fieldKey: z.string().optional(), fieldName: z.string().optional(), dataType: svstoreEntityTypeFieldDataType.optional(), value: googleProtobufValue.optional()}); export const svhelpPubapimodelsJourney = z.object({id: z.string().optional(), teamId: z.string().optional(), friendlyIdentifier: z.string().optional(), name: z.string().optional(), description: z.string().optional(), createdAt: googleProtobufTimestamp.optional(), requesterUserId: z.string().nullable().optional(), requesterManagerUserId: z.string().nullable().optional(), progressPercent: z.number().int().optional(), currentTaskIndex: z.number().int().optional(), archivedAt: googleProtobufTimestamp.optional(), dueDate: googleTypeDate.optional(), metadata: svhelpPubapimodelsJourneyMetadata.optional(), createdByWorkflow: svhelpPubapimodelsJourneyWorkflowInfo.optional(), tasks: z.array(svhelpPubapimodelsJourneyTask).optional(), healthChecks: z.array(svhelpPubapimodelsJourneyHealthCheck).optional(), healthCheckCounts: svhelpPubapimodelsJourneyHealthCheckCounts.optional(), workflowFailures: z.array(svhelpPubapimodelsJourneyWorkflowFailure).optional(), customFields: z.array(svhelpPubapimodelsCustomFieldValueSummary).optional()}); export const svhelpPublicapiGetJourneyResponse = z.object({data: svhelpPubapimodelsJourney.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 Journey * * GET /v2/journeys/{id} */ export const getApiV2JourneysId = async (args: GetApiV2JourneysIdArgs, options?: GetApiV2JourneysIdOptions) => { const {baseUrl = "https://public.api.serval.com", fetch: fetchFn = fetch, BearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (BearerAuth !== undefined) headers.set('authorization', `Bearer ${BearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/v2/journeys/${encodeURIComponent(String(args.id))}${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(svhelpPublicapiGetJourneyResponse, await res.json()) };