import {z} from 'zod' export type CreateApiConnectorsExportParamsConnectorNameArgs = {connectorName: string}; export type CreateApiConnectorsExportParamsConnectorNameOptions = {baseUrl: string, ApiKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const nexusChoice = z.object({Label: z.string().optional(), Value: z.string().optional()}); export const nexusParamType = z.enum(["default", "date", "datetime", "boolean", "array", "password", "file"]); export const nexusParam = z.object({Choices: z.array(nexusChoice).optional(), Name: z.string().optional(), Placeholder: z.string().optional(), Type: nexusParamType.optional()}); export const nexusDisplayName = z.enum(["Snowflake", "Snowflake SSO", "Snowflake Live Query", "Snowflake SSO Live Query", "Google Analytics", "MySQL", "PostgreSQL", "HubSpot", "Salesforce Objects", "Salesforce Report", "Freshsales", "Databricks", "Databricks Delta Share", "Databricks Live Query", "BigQuery", "Amazon Athena", "Amazon Redshift", "Microsoft SQL Server", "ClickHouse Live Query"]); export const nexusConfiguration = z.object({ConsentURL: z.string().optional(), ConsentURLParams: z.array(nexusParam).optional(), Description: z.string().optional(), Name: nexusDisplayName.optional(), Params: z.array(nexusParam).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 parameters for export given parameters provided by user. * * POST /connectors/export/params/{connectorName} */ export const createApiConnectorsExportParamsConnectorName = async (args: CreateApiConnectorsExportParamsConnectorNameArgs, options: CreateApiConnectorsExportParamsConnectorNameOptions) => { const {baseUrl, fetch: fetchFn = fetch, ApiKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (ApiKeyAuth !== undefined) headers.set("X-GIGASHEET-TOKEN", ApiKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/connectors/export/params/${encodeURIComponent(String(args.connectorName))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(nexusConfiguration, await res.json()) };