import {z} from 'zod' export type SourceConnectorType = 'airtable' | 'astradb' | 'confluence' | 'couchbase' | 'databricks_volumes' | 'dropbox' | 'elasticsearch' | 'github' | 'gitlab' | 'google_drive' | 'kafka-cloud' | 'local' | 'mongodb' | 'onedrive' | 'outlook' | 'postgres' | 'salesforce' | 'sftp' | 'sharepoint' | 'slack' | 'snowflake' | 'teradata' | 'vastdb' | 'jira' | 'zendesk' | 's3' | 'azure' | 'gcs'; export type GetApiApiV1SourcesArgs = {source_type?: (SourceConnectorType | null) | undefined, 'unstructured-api-key'?: (string | null) | undefined}; export type GetApiApiV1SourcesOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const sourceConnectorType = z.enum(["airtable", "astradb", "confluence", "couchbase", "databricks_volumes", "dropbox", "elasticsearch", "github", "gitlab", "google_drive", "kafka-cloud", "local", "mongodb", "onedrive", "outlook", "postgres", "salesforce", "sftp", "sharepoint", "slack", "snowflake", "teradata", "vastdb", "jira", "zendesk", "s3", "azure", "gcs"]); export const astraDBConnectorConfig = z.object({collection_name: z.string(), keyspace: z.string().nullable().optional(), batch_size: z.number().int(), binary_encode_vectors: z.boolean().optional(), api_endpoint: z.string(), token: z.string()}).and(z.record(z.string(), z.unknown())); export const confluenceSourceConnectorConfig = z.object({url: z.string(), username: z.string().nullable().optional(), cloud_id: z.string().nullable().optional(), password: z.string().nullable().optional(), api_token: z.string().nullable().optional(), token: z.string().nullable().optional(), oauth_token: z.string().nullable().optional(), refresh_token: z.string().nullable().optional(), cloud: z.boolean(), extract_images: z.boolean().optional(), extract_files: z.boolean().optional(), include_attachments: z.boolean().optional(), max_num_of_spaces: z.number().int(), max_num_of_docs_from_each_space: z.number().int(), spaces: z.array(z.string()).nullable()}).and(z.record(z.string(), z.unknown())); export const couchbaseSourceConnectorConfig = z.object({bucket: z.string(), connection_string: z.string(), scope: z.string().nullable().optional(), collection: z.string().nullable().optional(), batch_size: z.number().int(), username: z.string(), password: z.string(), collection_id: z.string()}).and(z.record(z.string(), z.unknown())); export const databricksVolumesConnectorConfig = z.object({host: z.string(), catalog: z.string(), schema: z.string().optional(), volume: z.string(), volume_path: z.string(), token: z.string().nullable().optional(), client_id: z.string().nullable().optional(), client_secret: z.string().nullable().optional()}).and(z.record(z.string(), z.unknown())); export const dropboxSourceConnectorConfig = z.object({token: z.string(), refresh_token: z.string().nullable().optional(), remote_url: z.string(), recursive: z.boolean()}).and(z.record(z.string(), z.unknown())); export const elasticsearchConnectorConfig = z.object({hosts: z.array(z.string()), index_name: z.string(), es_api_key: z.string()}).and(z.record(z.string(), z.unknown())); export const encryptionType = z.enum(["rsa", "rsa_aes", "runtime_config"]); export const secretReference = z.object({id: z.string(), type: encryptionType.optional()}); export const googleDriveSourceConnectorConfig = z.object({drive_id: z.string(), service_account_key: z.union([secretReference, z.string()]).nullable().optional(), oauth_token: z.union([secretReference, z.string()]).nullable().optional(), refresh_token: z.string().nullable().optional(), extensions: z.array(z.string()).nullable().optional(), recursive: z.boolean()}).and(z.record(z.string(), z.unknown())); export const kafkaCloudSourceConnectorConfig = z.object({bootstrap_servers: z.string(), port: z.number().int(), group_id: z.string().nullable().optional(), topic: z.string(), kafka_api_key: z.string(), secret: z.string(), num_messages_to_consume: z.number().int()}).and(z.record(z.string(), z.unknown())); export const mongoDBConnectorConfig = z.object({database: z.string(), collection: z.string(), uri: z.string()}).and(z.record(z.string(), z.unknown())); export const oneDriveSourceConnectorConfig = z.object({client_id: z.string().nullable().optional(), user_pname: z.string(), tenant: z.string(), authority_url: z.string().optional(), client_cred: z.string().nullable().optional(), oauth_token: z.string().nullable().optional(), refresh_token: z.string().nullable().optional(), recursive: z.boolean(), path: z.string()}).and(z.record(z.string(), z.unknown())); export const outlookSourceConnectorConfig = z.object({authority_url: z.string().optional(), tenant: z.string().nullable().optional(), client_id: z.string().nullable().optional(), client_cred: z.string().nullable().optional(), oauth_token: z.string().nullable().optional(), refresh_token: z.string().nullable().optional(), outlook_folders: z.array(z.string()).nullable().optional(), recursive: z.boolean(), user_email: z.string()}).and(z.record(z.string(), z.unknown())); export const postgresSourceConnectorConfig = z.object({host: z.string(), database: z.string(), port: z.number().int(), username: z.string(), password: z.string(), table_name: z.string(), batch_size: z.number().int(), id_column: z.string(), fields: z.array(z.string()).nullable().optional()}).and(z.record(z.string(), z.unknown())); export const salesforceSourceConnectorConfig = z.object({username: z.string(), consumer_key: z.string(), private_key: z.string(), categories: z.array(z.string())}).and(z.record(z.string(), z.unknown())); export const sharePointSourceConnectorConfig = z.object({site: z.string().nullable().optional(), tenant: z.string(), authority_url: z.string().optional(), user_pname: z.string().nullable().optional(), client_id: z.string().nullable().optional(), client_cred: z.string().nullable().optional(), oauth_token: z.string().nullable().optional(), refresh_token: z.string().nullable().optional(), recursive: z.boolean(), path: z.string().nullable().optional(), team_id: z.string().nullable().optional(), channels: z.array(z.string()).nullable().optional()}).and(z.record(z.string(), z.unknown())); export const slackSourceConnectorConfig = z.object({token: z.string(), refresh_token: z.string().nullable().optional(), channels: z.array(z.string()), start_date: z.string().nullable().optional(), end_date: z.string().nullable().optional()}).and(z.record(z.string(), z.unknown())); export const snowflakeSourceConnectorConfig = z.object({account: z.string(), role: z.string(), user: z.string(), password: z.string(), host: z.string(), port: z.number().int().gte(1).optional(), database: z.string(), schema: z.string(), table_name: z.string(), batch_size: z.number().int().gte(1).optional(), id_column: z.string(), fields: z.array(z.string()).nullable().optional()}).and(z.record(z.string(), z.unknown())); export const teradataSourceConnectorConfig = z.object({host: z.string(), user: z.string().nullable().optional(), password: z.string().nullable().optional(), database: z.string().nullable().optional(), dbs_port: z.number().int().gte(1).optional(), use_signed_in_user: z.boolean().nullable().optional(), id_column: z.string().optional(), table_name: z.string(), batch_size: z.number().int().gte(1).optional(), fields: z.array(z.string()).nullable().optional()}).and(z.record(z.string(), z.unknown())); export const jiraSourceConnectorConfig = z.object({url: z.string(), username: z.string().nullable().optional(), cloud_id: z.string().nullable().optional(), password: z.string().nullable().optional(), token: z.string().nullable().optional(), oauth_token: z.string().nullable().optional(), refresh_token: z.string().nullable().optional(), cloud: z.boolean().nullable().optional(), projects: z.array(z.string()).nullable().optional(), boards: z.array(z.string()).nullable().optional(), issues: z.array(z.string()).nullable().optional(), status_filters: z.array(z.string()).nullable().optional(), download_attachments: z.boolean().nullable().optional()}).and(z.record(z.string(), z.unknown())); export const zendeskSourceConnectorConfig = z.object({subdomain: z.string(), email: z.string(), api_token: z.string(), item_type: z.string().nullable().optional(), batch_size: z.number().int().nullable().optional()}).and(z.record(z.string(), z.unknown())); export const s3SourceConnectorConfig = z.object({remote_url: z.string(), anonymous: z.boolean(), ambient_credentials: z.boolean().nullable().optional(), key: z.string().nullable().optional(), secret: z.string().nullable().optional(), token: z.string().nullable().optional(), endpoint_url: z.string().nullable().optional(), role_arn: z.string().nullable().optional(), external_id: z.string().nullable().optional(), recursive: z.boolean()}).and(z.record(z.string(), z.unknown())); export const azureSourceConnectorConfig = z.object({remote_url: z.string(), account_name: z.string().nullable().optional(), account_key: z.string().nullable().optional(), connection_string: z.string().nullable().optional(), sas_token: z.string().nullable().optional(), recursive: z.boolean()}).and(z.record(z.string(), z.unknown())); export const gCSSourceConnectorConfig = z.object({remote_url: z.string(), service_account_key: z.union([secretReference, z.string()]).nullable().optional(), recursive: z.boolean(), oauth_token: z.string().nullable().optional(), refresh_token: z.string().nullable().optional(), oauth_client_id: z.string().nullable().optional(), oauth_client_secret: z.string().nullable().optional()}).and(z.record(z.string(), z.unknown())); export const sourceConnectorInformation = z.object({id: z.string(), name: z.string(), type: z.union([sourceConnectorType, z.string()]), config: z.union([astraDBConnectorConfig, confluenceSourceConnectorConfig, couchbaseSourceConnectorConfig, databricksVolumesConnectorConfig, dropboxSourceConnectorConfig, elasticsearchConnectorConfig, googleDriveSourceConnectorConfig, kafkaCloudSourceConnectorConfig, mongoDBConnectorConfig, oneDriveSourceConnectorConfig, outlookSourceConnectorConfig, postgresSourceConnectorConfig, salesforceSourceConnectorConfig, sharePointSourceConnectorConfig, slackSourceConnectorConfig, snowflakeSourceConnectorConfig, teradataSourceConnectorConfig, jiraSourceConnectorConfig, zendeskSourceConnectorConfig, s3SourceConnectorConfig, azureSourceConnectorConfig, gCSSourceConnectorConfig, z.record(z.string(), z.unknown())]), created_at: z.string(), updated_at: z.string().nullable().optional(), key: z.string().nullable().optional()}); export const getApiApiV1SourcesResponse = z.array(sourceConnectorInformation); 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 available source connectors * * GET /api/v1/sources/ */ export const getApiApiV1Sources = async (args: GetApiApiV1SourcesArgs, options: GetApiApiV1SourcesOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.source_type != null) query.append("source_type", String(args.source_type)) if (args['unstructured-api-key'] != null) headers.set("unstructured-api-key", String(args['unstructured-api-key'])) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/sources/${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(getApiApiV1SourcesResponse, await res.json()) };