import {z} from 'zod' export type ConnectProtocolVersion = number; export type ConnectTimeoutHeader = number; export type TextqlRpcPublicDashboardPublishDashboardRequest = {dashboardId?: string | undefined, label?: (string | null) | undefined}; export type CreateApiTextqlRpcPublicDashboardDashboardServicePublishDashboardArgs = {'Connect-Protocol-Version': ConnectProtocolVersion, 'Connect-Timeout-Ms'?: ConnectTimeoutHeader | undefined, body: TextqlRpcPublicDashboardPublishDashboardRequest}; export type CreateApiTextqlRpcPublicDashboardDashboardServicePublishDashboardOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const textqlRpcPublicDashboardDashboardType = z.enum(["DASHBOARD_TYPE_UNSPECIFIED", "DASHBOARD_TYPE_STREAMLIT", "DASHBOARD_TYPE_HTML", "DASHBOARD_TYPE_DASH"]); export const googleProtobufTimestamp = z.string(); export const textqlRpcPublicDashboardDashboardCreator = z.object({memberId: z.string().optional(), memberEmail: z.string().nullable().optional(), memberName: z.string().nullable().optional()}); export const textqlRpcPublicDashboardDashboardStatus = z.enum(["DASHBOARD_STATUS_UNSPECIFIED", "DASHBOARD_STATUS_DRAFT", "DASHBOARD_STATUS_PUBLISHED"]); export const textqlRpcPublicDashboardQueryParameter = z.object({name: z.string().optional(), type: z.string().optional(), default: z.string().nullable().optional()}); export const textqlRpcPublicDashboardGrant = z.object({roles: z.array(z.string()).optional(), members: z.array(z.string()).optional()}); export const textqlRpcPublicDashboardFileSource = z.object({datasetId: z.string().optional(), fileName: z.string().optional(), sheetIndex: z.number().int().optional()}); export const textqlRpcPublicDashboardLibraryTQLSource = z.object({tqlPath: z.string().optional(), connectorId: z.number().int().optional(), paramsJson: z.string().optional()}); export const textqlRpcPublicDashboardOntologySqlSource = z.object({query: z.string().optional(), dataset: z.string().optional(), ontologyId: z.number().int().optional()}); export const textqlRpcPublicDashboardPythonCodeSource = z.object({code: z.string().optional()}); export const textqlRpcPublicDashboardSqlQuerySource = z.object({query: z.string().optional(), connectorId: z.number().int().optional(), predicate: z.string().optional()}); export const textqlRpcPublicDashboardDataSource = z.union([z.object({type: z.string().optional(), name: z.string().optional(), parameters: z.array(textqlRpcPublicDashboardQueryParameter).optional(), grant: textqlRpcPublicDashboardGrant.optional(), file: textqlRpcPublicDashboardFileSource}), z.object({type: z.string().optional(), name: z.string().optional(), parameters: z.array(textqlRpcPublicDashboardQueryParameter).optional(), grant: textqlRpcPublicDashboardGrant.optional(), libraryTql: textqlRpcPublicDashboardLibraryTQLSource}), z.object({type: z.string().optional(), name: z.string().optional(), parameters: z.array(textqlRpcPublicDashboardQueryParameter).optional(), grant: textqlRpcPublicDashboardGrant.optional(), ontologySql: textqlRpcPublicDashboardOntologySqlSource}), z.object({type: z.string().optional(), name: z.string().optional(), parameters: z.array(textqlRpcPublicDashboardQueryParameter).optional(), grant: textqlRpcPublicDashboardGrant.optional(), pythonCode: textqlRpcPublicDashboardPythonCodeSource}), z.object({type: z.string().optional(), name: z.string().optional(), parameters: z.array(textqlRpcPublicDashboardQueryParameter).optional(), grant: textqlRpcPublicDashboardGrant.optional(), sqlQuery: textqlRpcPublicDashboardSqlQuerySource})]); export const textqlRpcPublicConfigSourceConfigSyncStatus = z.enum(["CONFIG_SYNC_STATUS_UNSPECIFIED", "CONFIG_SYNC_STATUS_SYNCING", "CONFIG_SYNC_STATUS_SYNCED", "CONFIG_SYNC_STATUS_ERROR"]); export const textqlRpcPublicConfigSourceConfigSource = z.object({filePath: z.string().optional(), syncStatus: textqlRpcPublicConfigSourceConfigSyncStatus.optional(), syncError: z.string().nullable().optional(), breakingPatchId: z.string().nullable().optional()}); export const textqlRpcPublicDashboardDashboard = z.object({id: z.string().optional(), orgId: z.string().optional(), creatorId: z.string().optional(), name: z.string().optional(), description: z.string().nullable().optional(), code: z.string().optional(), type: textqlRpcPublicDashboardDashboardType.optional(), chatId: z.string().nullable().optional(), cellId: z.string().nullable().optional(), isPublic: z.boolean().optional(), screenshotUrl: z.string().nullable().optional(), htmlUrl: z.string().nullable().optional(), createdAt: googleProtobufTimestamp.optional(), updatedAt: googleProtobufTimestamp.optional(), refreshedAt: googleProtobufTimestamp.optional(), creator: textqlRpcPublicDashboardDashboardCreator.optional(), streamlitUrl: z.string().nullable().optional(), status: textqlRpcPublicDashboardDashboardStatus.optional(), publishedCode: z.string().nullable().optional(), publishedAt: googleProtobufTimestamp.optional(), hasUnpublishedChanges: z.boolean().optional(), dataSources: z.array(textqlRpcPublicDashboardDataSource).optional(), scheduleEnabled: z.boolean().optional(), cronString: z.string().nullable().optional(), latestScheduledRunAt: googleProtobufTimestamp.optional(), folderId: z.string().nullable().optional(), configSource: textqlRpcPublicConfigSourceConfigSource.optional(), isFavorited: z.boolean().optional()}); export const textqlRpcPublicDashboardPublishDashboardResponse = z.object({dashboard: textqlRpcPublicDashboardDashboard.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 }; /** * Publishing workflow * * POST /textql.rpc.public.dashboard.DashboardService/PublishDashboard */ export const createApiTextqlRpcPublicDashboardDashboardServicePublishDashboard = async (args: CreateApiTextqlRpcPublicDashboardDashboardServicePublishDashboardArgs, options: CreateApiTextqlRpcPublicDashboardDashboardServicePublishDashboardOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (args['Connect-Protocol-Version'] != null) headers.set("Connect-Protocol-Version", String(args['Connect-Protocol-Version'])) if (args['Connect-Timeout-Ms'] != null) headers.set("Connect-Timeout-Ms", String(args['Connect-Timeout-Ms'])) const url = `${baseUrl.replace(/\/+$/, '')}/textql.rpc.public.dashboard.DashboardService/PublishDashboard${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(textqlRpcPublicDashboardPublishDashboardResponse, await res.json()) };