import {z} from 'zod' export type SvhelpModelsSetOperator = 'SET_OPERATOR_UNSPECIFIED' | 'SET_OPERATOR_INCLUDES' | 'SET_OPERATOR_EXCLUDES'; export type SvhelpModelsComparisonOperator = 'COMPARISON_OPERATOR_UNSPECIFIED' | 'COMPARISON_OPERATOR_EQ' | 'COMPARISON_OPERATOR_NE' | 'COMPARISON_OPERATOR_GT' | 'COMPARISON_OPERATOR_GTE' | 'COMPARISON_OPERATOR_LT' | 'COMPARISON_OPERATOR_LTE'; export type SvhelpModelsHealthCheckRollupStatus = 'HEALTH_CHECK_ROLLUP_STATUS_UNSPECIFIED' | 'HEALTH_CHECK_ROLLUP_STATUS_PASSING' | 'HEALTH_CHECK_ROLLUP_STATUS_WARNING' | 'HEALTH_CHECK_ROLLUP_STATUS_FAILING' | 'HEALTH_CHECK_ROLLUP_STATUS_NONE'; export type SvhelpModelsJourneySortField = 'JOURNEY_SORT_FIELD_UNSPECIFIED' | 'JOURNEY_SORT_FIELD_CREATED_AT' | 'JOURNEY_SORT_FIELD_REQUESTER' | 'JOURNEY_SORT_FIELD_NAME' | 'JOURNEY_SORT_FIELD_COMPLETION' | 'JOURNEY_SORT_FIELD_MANAGER' | 'JOURNEY_SORT_FIELD_HEALTH_CHECKS' | 'JOURNEY_SORT_FIELD_DUE_DATE' | 'JOURNEY_SORT_FIELD_CHATS'; export type SvhelpModelsSortDirection = 'SORT_DIRECTION_UNSPECIFIED' | 'SORT_DIRECTION_ASC' | 'SORT_DIRECTION_DESC'; export type GetApiV2TeamsTeamIdJourneysArgs = {team_id: string, 'filterGroups.predicates.requester.operator'?: SvhelpModelsSetOperator | undefined, 'filterGroups.predicates.requester.userIds'?: Array | undefined, 'filterGroups.predicates.requester.currentUser'?: boolean | undefined, 'filterGroups.predicates.requester.none'?: boolean | undefined, 'filterGroups.predicates.workflow.workflowIds'?: Array | undefined, 'filterGroups.predicates.completion.operator'?: SvhelpModelsComparisonOperator | undefined, 'filterGroups.predicates.completion.value'?: number | undefined, 'filterGroups.predicates.healthChecks.operator'?: SvhelpModelsSetOperator | undefined, 'filterGroups.predicates.healthChecks.statuses'?: Array | undefined, 'filterGroups.predicates.dueDate.hasDueDate'?: boolean | undefined, 'filterGroups.predicates.dueDate.isOverdue'?: boolean | undefined, 'filterGroups.predicates.dueDate.dueBefore.year'?: number | undefined, 'filterGroups.predicates.dueDate.dueBefore.month'?: number | undefined, 'filterGroups.predicates.dueDate.dueBefore.day'?: number | undefined, 'filterGroups.predicates.customFields.filters.fieldId'?: string | undefined, 'filterGroups.predicates.customFields.filters.fieldKey'?: string | undefined, 'filterGroups.predicates.customFields.filters.text.eq'?: string | undefined, 'filterGroups.predicates.customFields.filters.text.ne'?: string | undefined, 'filterGroups.predicates.customFields.filters.text.contains'?: string | undefined, 'filterGroups.predicates.customFields.filters.text.startsWith'?: string | undefined, 'filterGroups.predicates.customFields.filters.text.endsWith'?: string | undefined, 'filterGroups.predicates.customFields.filters.text.doesNotContain'?: string | undefined, 'filterGroups.predicates.customFields.filters.text.like'?: string | undefined, 'filterGroups.predicates.customFields.filters.text.inList.values'?: Array | undefined, 'filterGroups.predicates.customFields.filters.number.eq'?: number | undefined, 'filterGroups.predicates.customFields.filters.number.ne'?: number | undefined, 'filterGroups.predicates.customFields.filters.number.gt'?: number | undefined, 'filterGroups.predicates.customFields.filters.number.gte'?: number | undefined, 'filterGroups.predicates.customFields.filters.number.lt'?: number | undefined, 'filterGroups.predicates.customFields.filters.number.lte'?: number | undefined, 'filterGroups.predicates.customFields.filters.boolValue.eq'?: boolean | undefined, 'filterGroups.predicates.customFields.filters.boolValue.ne'?: boolean | undefined, 'filterGroups.predicates.customFields.filters.timestamp.eq.seconds'?: (number | unknown) | undefined, 'filterGroups.predicates.customFields.filters.enumValue.eq'?: string | undefined, 'filterGroups.predicates.customFields.filters.enumValue.ne'?: string | undefined, 'filterGroups.predicates.customFields.filters.multiSelectValue.contains'?: string | undefined, 'filterGroups.predicates.customFields.filters.multiSelectValue.doesNotContain'?: string | undefined, 'filterGroups.predicates.customFields.sourceFilter.eq'?: string | undefined, 'filterGroups.predicates.customFields.sourceFilter.ne'?: string | undefined, 'filterGroups.predicates.search.query'?: string | undefined, 'sort.field'?: SvhelpModelsJourneySortField | undefined, 'sort.direction'?: SvhelpModelsSortDirection | undefined, 'sort.customFieldId'?: string | undefined, pageSize?: number | undefined, pageToken?: string | undefined}; export type GetApiV2TeamsTeamIdJourneysOptions = {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 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 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 svhelpPubapimodelsJourneySummary = z.object({id: z.string().optional(), teamId: z.string().optional(), friendlyIdentifier: z.string().optional(), name: z.string().optional(), createdAt: googleProtobufTimestamp.optional(), requesterUserId: z.string().nullable().optional(), requesterManagerUserId: z.string().nullable().optional(), progressPercent: z.number().int().optional(), archivedAt: googleProtobufTimestamp.optional(), dueDate: googleTypeDate.optional(), metadata: svhelpPubapimodelsJourneyMetadata.optional(), createdByWorkflow: svhelpPubapimodelsJourneyWorkflowInfo.optional(), healthCheckCounts: svhelpPubapimodelsJourneyHealthCheckCounts.optional(), workflowFailureCount: z.number().int().optional(), customFields: z.array(svhelpPubapimodelsCustomFieldValueSummary).optional()}); export const svhelpPublicapiListJourneysResponse = z.object({data: z.array(svhelpPubapimodelsJourneySummary).optional(), nextPageToken: z.string().nullable().optional(), totalCount: z.number().int().optional(), teamTotalCount: z.number().int().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 }; /** * List Journeys * * GET /v2/teams/{team_id}/journeys */ export const getApiV2TeamsTeamIdJourneys = async (args: GetApiV2TeamsTeamIdJourneysArgs, options?: GetApiV2TeamsTeamIdJourneysOptions) => { 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 (args['filterGroups.predicates.requester.operator'] != null) query.append("filterGroups.predicates.requester.operator", String(args['filterGroups.predicates.requester.operator'])) for (const item of args['filterGroups.predicates.requester.userIds'] ?? []) query.append("filterGroups.predicates.requester.userIds", String(item)) if (args['filterGroups.predicates.requester.currentUser'] != null) query.append("filterGroups.predicates.requester.currentUser", String(args['filterGroups.predicates.requester.currentUser'])) if (args['filterGroups.predicates.requester.none'] != null) query.append("filterGroups.predicates.requester.none", String(args['filterGroups.predicates.requester.none'])) for (const item of args['filterGroups.predicates.workflow.workflowIds'] ?? []) query.append("filterGroups.predicates.workflow.workflowIds", String(item)) if (args['filterGroups.predicates.completion.operator'] != null) query.append("filterGroups.predicates.completion.operator", String(args['filterGroups.predicates.completion.operator'])) if (args['filterGroups.predicates.completion.value'] != null) query.append("filterGroups.predicates.completion.value", String(args['filterGroups.predicates.completion.value'])) if (args['filterGroups.predicates.healthChecks.operator'] != null) query.append("filterGroups.predicates.healthChecks.operator", String(args['filterGroups.predicates.healthChecks.operator'])) for (const item of args['filterGroups.predicates.healthChecks.statuses'] ?? []) query.append("filterGroups.predicates.healthChecks.statuses", String(item)) if (args['filterGroups.predicates.dueDate.hasDueDate'] != null) query.append("filterGroups.predicates.dueDate.hasDueDate", String(args['filterGroups.predicates.dueDate.hasDueDate'])) if (args['filterGroups.predicates.dueDate.isOverdue'] != null) query.append("filterGroups.predicates.dueDate.isOverdue", String(args['filterGroups.predicates.dueDate.isOverdue'])) if (args['filterGroups.predicates.dueDate.dueBefore.year'] != null) query.append("filterGroups.predicates.dueDate.dueBefore.year", String(args['filterGroups.predicates.dueDate.dueBefore.year'])) if (args['filterGroups.predicates.dueDate.dueBefore.month'] != null) query.append("filterGroups.predicates.dueDate.dueBefore.month", String(args['filterGroups.predicates.dueDate.dueBefore.month'])) if (args['filterGroups.predicates.dueDate.dueBefore.day'] != null) query.append("filterGroups.predicates.dueDate.dueBefore.day", String(args['filterGroups.predicates.dueDate.dueBefore.day'])) if (args['filterGroups.predicates.customFields.filters.fieldId'] != null) query.append("filterGroups.predicates.customFields.filters.fieldId", String(args['filterGroups.predicates.customFields.filters.fieldId'])) if (args['filterGroups.predicates.customFields.filters.fieldKey'] != null) query.append("filterGroups.predicates.customFields.filters.fieldKey", String(args['filterGroups.predicates.customFields.filters.fieldKey'])) if (args['filterGroups.predicates.customFields.filters.text.eq'] != null) query.append("filterGroups.predicates.customFields.filters.text.eq", String(args['filterGroups.predicates.customFields.filters.text.eq'])) if (args['filterGroups.predicates.customFields.filters.text.ne'] != null) query.append("filterGroups.predicates.customFields.filters.text.ne", String(args['filterGroups.predicates.customFields.filters.text.ne'])) if (args['filterGroups.predicates.customFields.filters.text.contains'] != null) query.append("filterGroups.predicates.customFields.filters.text.contains", String(args['filterGroups.predicates.customFields.filters.text.contains'])) if (args['filterGroups.predicates.customFields.filters.text.startsWith'] != null) query.append("filterGroups.predicates.customFields.filters.text.startsWith", String(args['filterGroups.predicates.customFields.filters.text.startsWith'])) if (args['filterGroups.predicates.customFields.filters.text.endsWith'] != null) query.append("filterGroups.predicates.customFields.filters.text.endsWith", String(args['filterGroups.predicates.customFields.filters.text.endsWith'])) if (args['filterGroups.predicates.customFields.filters.text.doesNotContain'] != null) query.append("filterGroups.predicates.customFields.filters.text.doesNotContain", String(args['filterGroups.predicates.customFields.filters.text.doesNotContain'])) if (args['filterGroups.predicates.customFields.filters.text.like'] != null) query.append("filterGroups.predicates.customFields.filters.text.like", String(args['filterGroups.predicates.customFields.filters.text.like'])) for (const item of args['filterGroups.predicates.customFields.filters.text.inList.values'] ?? []) query.append("filterGroups.predicates.customFields.filters.text.inList.values", String(item)) if (args['filterGroups.predicates.customFields.filters.number.eq'] != null) query.append("filterGroups.predicates.customFields.filters.number.eq", String(args['filterGroups.predicates.customFields.filters.number.eq'])) if (args['filterGroups.predicates.customFields.filters.number.ne'] != null) query.append("filterGroups.predicates.customFields.filters.number.ne", String(args['filterGroups.predicates.customFields.filters.number.ne'])) if (args['filterGroups.predicates.customFields.filters.number.gt'] != null) query.append("filterGroups.predicates.customFields.filters.number.gt", String(args['filterGroups.predicates.customFields.filters.number.gt'])) if (args['filterGroups.predicates.customFields.filters.number.gte'] != null) query.append("filterGroups.predicates.customFields.filters.number.gte", String(args['filterGroups.predicates.customFields.filters.number.gte'])) if (args['filterGroups.predicates.customFields.filters.number.lt'] != null) query.append("filterGroups.predicates.customFields.filters.number.lt", String(args['filterGroups.predicates.customFields.filters.number.lt'])) if (args['filterGroups.predicates.customFields.filters.number.lte'] != null) query.append("filterGroups.predicates.customFields.filters.number.lte", String(args['filterGroups.predicates.customFields.filters.number.lte'])) if (args['filterGroups.predicates.customFields.filters.boolValue.eq'] != null) query.append("filterGroups.predicates.customFields.filters.boolValue.eq", String(args['filterGroups.predicates.customFields.filters.boolValue.eq'])) if (args['filterGroups.predicates.customFields.filters.boolValue.ne'] != null) query.append("filterGroups.predicates.customFields.filters.boolValue.ne", String(args['filterGroups.predicates.customFields.filters.boolValue.ne'])) if (args['filterGroups.predicates.customFields.filters.timestamp.eq.seconds'] != null) query.append("filterGroups.predicates.customFields.filters.timestamp.eq.seconds", String(args['filterGroups.predicates.customFields.filters.timestamp.eq.seconds'])) if (args['filterGroups.predicates.customFields.filters.enumValue.eq'] != null) query.append("filterGroups.predicates.customFields.filters.enumValue.eq", String(args['filterGroups.predicates.customFields.filters.enumValue.eq'])) if (args['filterGroups.predicates.customFields.filters.enumValue.ne'] != null) query.append("filterGroups.predicates.customFields.filters.enumValue.ne", String(args['filterGroups.predicates.customFields.filters.enumValue.ne'])) if (args['filterGroups.predicates.customFields.filters.multiSelectValue.contains'] != null) query.append("filterGroups.predicates.customFields.filters.multiSelectValue.contains", String(args['filterGroups.predicates.customFields.filters.multiSelectValue.contains'])) if (args['filterGroups.predicates.customFields.filters.multiSelectValue.doesNotContain'] != null) query.append("filterGroups.predicates.customFields.filters.multiSelectValue.doesNotContain", String(args['filterGroups.predicates.customFields.filters.multiSelectValue.doesNotContain'])) if (args['filterGroups.predicates.customFields.sourceFilter.eq'] != null) query.append("filterGroups.predicates.customFields.sourceFilter.eq", String(args['filterGroups.predicates.customFields.sourceFilter.eq'])) if (args['filterGroups.predicates.customFields.sourceFilter.ne'] != null) query.append("filterGroups.predicates.customFields.sourceFilter.ne", String(args['filterGroups.predicates.customFields.sourceFilter.ne'])) if (args['filterGroups.predicates.search.query'] != null) query.append("filterGroups.predicates.search.query", String(args['filterGroups.predicates.search.query'])) if (args['sort.field'] != null) query.append("sort.field", String(args['sort.field'])) if (args['sort.direction'] != null) query.append("sort.direction", String(args['sort.direction'])) if (args['sort.customFieldId'] != null) query.append("sort.customFieldId", String(args['sort.customFieldId'])) if (args.pageSize != null) query.append("pageSize", String(args.pageSize)) if (args.pageToken != null) query.append("pageToken", String(args.pageToken)) if (BearerAuth !== undefined) headers.set('authorization', `Bearer ${BearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/v2/teams/${encodeURIComponent(String(args.team_id))}/journeys${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(svhelpPublicapiListJourneysResponse, await res.json()) };