import {z} from 'zod' export type DocumentSource = 'ingestion_api' | 'slack' | 'web' | 'google_drive' | 'gmail' | 'github' | 'gitbook' | 'gitlab' | 'guru' | 'bookstack' | 'outline' | 'confluence' | 'jira' | 'slab' | 'productboard' | 'file' | 'coda' | 'canvas' | 'notion' | 'zulip' | 'linear' | 'hubspot' | 'document360' | 'gong' | 'google_sites' | 'zendesk' | 'loopio' | 'box' | 'dropbox' | 'sharepoint' | 'onedrive' | 'teams' | 'outlook' | 'salesforce' | 'discourse' | 'axero' | 'clickup' | 'mediawiki' | 'wikipedia' | 'asana' | 's3' | 'r2' | 'google_cloud_storage' | 'oci_storage' | 'xenforo' | 'not_applicable' | 'discord' | 'freshdesk' | 'fireflies' | 'zoom' | 'egnyte' | 'airtable' | 'highspot' | 'drupal_wiki' | 'imap' | 'bitbucket' | 'testrail' | 'braintrust' | 'lumapps' | 'youtrack' | 'mock_connector' | 'user_file' | 'craft_file'; export type AccessType = 'public' | 'private' | 'sync' | 'sync_restricted'; export type IndexingStatus = 'not_started' | 'in_progress' | 'success' | 'canceled' | 'interrupted' | 'failed' | 'completed_with_errors'; export type DocsCountOperator = '>' | '<' | '='; export type IndexingStatusRequest = {secondary_index?: boolean | undefined, source?: (DocumentSource | null) | undefined, access_type_filters?: Array | undefined, last_status_filters?: Array | undefined, docs_count_operator?: (DocsCountOperator | null) | undefined, docs_count_value?: (number | null) | undefined, name_filter?: (string | null) | undefined, source_to_page?: {[key: string]: number} | undefined, get_all_connectors?: boolean | undefined}; export type CreateApiManageAdminConnectorIndexingStatusArgs = {body: IndexingStatusRequest}; export type CreateApiManageAdminConnectorIndexingStatusOptions = {baseUrl?: string | undefined, BearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const documentSource = z.enum(["ingestion_api", "slack", "web", "google_drive", "gmail", "github", "gitbook", "gitlab", "guru", "bookstack", "outline", "confluence", "jira", "slab", "productboard", "file", "coda", "canvas", "notion", "zulip", "linear", "hubspot", "document360", "gong", "google_sites", "zendesk", "loopio", "box", "dropbox", "sharepoint", "onedrive", "teams", "outlook", "salesforce", "discourse", "axero", "clickup", "mediawiki", "wikipedia", "asana", "s3", "r2", "google_cloud_storage", "oci_storage", "xenforo", "not_applicable", "discord", "freshdesk", "fireflies", "zoom", "egnyte", "airtable", "highspot", "drupal_wiki", "imap", "bitbucket", "testrail", "braintrust", "lumapps", "youtrack", "mock_connector", "user_file", "craft_file"]); export const sourceSummary = z.object({total_connectors: z.number().int(), active_connectors: z.number().int(), public_connectors: z.number().int(), total_docs_indexed: z.number().int()}); export const accessType = z.enum(["public", "private", "sync", "sync_restricted"]); export const connectorCredentialPairStatus = z.enum(["SCHEDULED", "INITIAL_INDEXING", "ACTIVE", "PAUSED", "DELETING", "INVALID"]); export const indexingStatus = z.enum(["not_started", "in_progress", "success", "canceled", "interrupted", "failed", "completed_with_errors"]); export const connectorIndexingStatusLite = z.object({cc_pair_id: z.number().int(), name: z.string(), source: documentSource, access_type: accessType, cc_pair_status: connectorCredentialPairStatus, in_progress: z.boolean(), in_repeated_error_state: z.boolean(), last_finished_status: indexingStatus.nullable(), last_status: indexingStatus.nullable(), last_success: z.string().nullable(), is_editable: z.boolean(), permissions: z.record(z.string(), z.boolean()), docs_indexed: z.number().int(), latest_index_attempt_docs_indexed: z.number().int().nullable()}); export const federatedConnectorSource = z.literal("federated_slack"); export const federatedConnectorStatus = z.object({id: z.number().int(), source: federatedConnectorSource, name: z.string()}); export const connectorIndexingStatusLiteResponse = z.object({source: documentSource, summary: sourceSummary, current_page: z.number().int(), total_pages: z.number().int(), indexing_statuses: z.array(z.union([connectorIndexingStatusLite, federatedConnectorStatus]))}); export const createApiManageAdminConnectorIndexingStatusResponse = z.array(connectorIndexingStatusLiteResponse); 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 Connector Indexing Status * * POST /manage/admin/connector/indexing-status */ export const createApiManageAdminConnectorIndexingStatus = async (args: CreateApiManageAdminConnectorIndexingStatusArgs, options?: CreateApiManageAdminConnectorIndexingStatusOptions) => { const {baseUrl = "https://cloud.onyx.app/api", fetch: fetchFn = fetch, BearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (BearerAuth !== undefined) headers.set('authorization', `Bearer ${BearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/manage/admin/connector/indexing-status${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(createApiManageAdminConnectorIndexingStatusResponse, await res.json()) };