import { z } from 'zod'; import { isoDateTimeSchema } from '#/_base/utils/isoDateTime'; import { kimiRegionSchema } from '@moonshot-ai/kimi-code-oauth'; export const oauthFlowStatusEnum = z.enum([ 'pending', 'authenticated', 'denied', 'expired', 'cancelled', ]); export type OAuthFlowStatus = z.infer; export const oauthFlowStartPendingSchema = z.object({ flow_id: z.string().min(1), provider: z.string().min(1), status: z.literal('pending'), verification_uri: z.string().url(), verification_uri_complete: z.string().url(), user_code: z.string().min(1), expires_in: z.number().int().positive(), interval: z.number().int().positive(), expires_at: isoDateTimeSchema, }); export type OAuthFlowStartPending = z.infer; export const oauthFlowStartAuthenticatedSchema = z.object({ flow_id: z.string().min(1), provider: z.string().min(1), status: z.literal('authenticated'), }); export type OAuthFlowStartAuthenticated = z.infer; export const oauthFlowStartSchema = z.discriminatedUnion('status', [ oauthFlowStartPendingSchema, oauthFlowStartAuthenticatedSchema, ]); export type OAuthFlowStart = z.infer; export const oauthFlowSnapshotSchema = z.object({ flow_id: z.string().min(1), provider: z.string().min(1), status: oauthFlowStatusEnum, verification_uri: z.string().url(), verification_uri_complete: z.string().url(), user_code: z.string().min(1), expires_in: z.number().int().positive(), expires_at: isoDateTimeSchema, interval: z.number().int().positive(), resolved_at: isoDateTimeSchema.optional(), error_message: z.string().optional(), }); export type OAuthFlowSnapshot = z.infer; export const oauthLoginCancelResponseSchema = z.object({ cancelled: z.boolean(), status: oauthFlowStatusEnum, }); export type OAuthLoginCancelResponse = z.infer; export const oauthLogoutResponseSchema = z.object({ logged_out: z.literal(true), provider: z.string().min(1), }); export type OAuthLogoutResponse = z.infer; export const oauthRegionResultSchema = z.object({ region: kimiRegionSchema, }); export type OAuthRegionResult = z.infer; const providerRefreshChangeSchema = z.object({ provider_id: z.string().min(1), provider_name: z.string().min(1), added: z.number().int().min(0), removed: z.number().int().min(0), }); const providerRefreshFailureSchema = z.object({ provider: z.string().min(1), reason: z.string().min(1), }); export const refreshOAuthProviderModelsResponseSchema = z.object({ changed: z.array(providerRefreshChangeSchema), unchanged: z.array(z.string().min(1)), failed: z.array(providerRefreshFailureSchema), }); export type RefreshOAuthProviderModelsResponse = z.infer< typeof refreshOAuthProviderModelsResponseSchema >; export { managedUsageResultSchema, type ManagedUsageResult, managedUserInfoResultSchema, type ManagedUserInfoResult, } from '@moonshot-ai/kimi-code-oauth';