import {z} from 'zod' export type V1alpha1ApplicationDestination = {namespace?: string | undefined, server?: string | undefined}; export type V1alpha1ResourceIgnoreDifferences = {group?: string | undefined, jsonPointers?: Array | undefined, kind?: string | undefined, name?: string | undefined, namespace?: string | undefined}; export type V1alpha1Info = {name?: string | undefined, value?: string | undefined}; export type V1alpha1JsonnetVar = {code?: boolean | undefined, name?: string | undefined, value?: string | undefined}; export type V1alpha1ApplicationSourceJsonnet = {extVars?: Array | undefined, tlas?: Array | undefined}; export type V1alpha1ApplicationSourceDirectory = {jsonnet?: V1alpha1ApplicationSourceJsonnet | undefined, recurse?: boolean | undefined}; export type V1alpha1HelmParameter = {forceString?: boolean | undefined, name?: string | undefined, value?: string | undefined}; export type V1alpha1ApplicationSourceHelm = {parameters?: Array | undefined, releaseName?: string | undefined, valueFiles?: Array | undefined}; export type V1alpha1KsonnetParameter = {component?: string | undefined, name?: string | undefined, value?: string | undefined}; export type V1alpha1ApplicationSourceKsonnet = {environment?: string | undefined, parameters?: Array | undefined}; export type V1alpha1ApplicationSourceKustomize = {commonLabels?: {[key: string]: string} | undefined, images?: Array | undefined, namePrefix?: string | undefined}; export type V1alpha1EnvEntry = {name?: string | undefined, value?: string | undefined}; export type V1alpha1ApplicationSourcePlugin = {env?: Array | undefined, name?: string | undefined}; export type V1alpha1ApplicationSource = {directory?: V1alpha1ApplicationSourceDirectory | undefined, helm?: V1alpha1ApplicationSourceHelm | undefined, ksonnet?: V1alpha1ApplicationSourceKsonnet | undefined, kustomize?: V1alpha1ApplicationSourceKustomize | undefined, path?: string | undefined, plugin?: V1alpha1ApplicationSourcePlugin | undefined, repoURL?: string | undefined, targetRevision?: string | undefined}; export type V1alpha1SyncPolicyAutomated = {prune?: boolean | undefined, selfHeal?: boolean | undefined}; export type V1alpha1SyncPolicy = {automated?: V1alpha1SyncPolicyAutomated | undefined}; export type V1alpha1ApplicationSpec = {destination?: V1alpha1ApplicationDestination | undefined, ignoreDifferences?: Array | undefined, info?: Array | undefined, project?: string | undefined, source?: V1alpha1ApplicationSource | undefined, syncPolicy?: V1alpha1SyncPolicy | undefined}; export type UpdateApiApiV1ApplicationsNameSpecArgs = {name: string, body: V1alpha1ApplicationSpec}; export type UpdateApiApiV1ApplicationsNameSpecOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const v1alpha1ApplicationDestination = z.object({namespace: z.string().optional(), server: z.string().optional()}); export const v1alpha1ResourceIgnoreDifferences = z.object({group: z.string().optional(), jsonPointers: z.array(z.string()).optional(), kind: z.string().optional(), name: z.string().optional(), namespace: z.string().optional()}); export const v1alpha1Info = z.object({name: z.string().optional(), value: z.string().optional()}); export const v1alpha1JsonnetVar = z.object({code: z.boolean().optional(), name: z.string().optional(), value: z.string().optional()}); export const v1alpha1ApplicationSourceJsonnet = z.object({extVars: z.array(v1alpha1JsonnetVar).optional(), tlas: z.array(v1alpha1JsonnetVar).optional()}); export const v1alpha1ApplicationSourceDirectory = z.object({jsonnet: v1alpha1ApplicationSourceJsonnet.optional(), recurse: z.boolean().optional()}); export const v1alpha1HelmParameter = z.object({forceString: z.boolean().optional(), name: z.string().optional(), value: z.string().optional()}); export const v1alpha1ApplicationSourceHelm = z.object({parameters: z.array(v1alpha1HelmParameter).optional(), releaseName: z.string().optional(), valueFiles: z.array(z.string()).optional()}); export const v1alpha1KsonnetParameter = z.object({component: z.string().optional(), name: z.string().optional(), value: z.string().optional()}); export const v1alpha1ApplicationSourceKsonnet = z.object({environment: z.string().optional(), parameters: z.array(v1alpha1KsonnetParameter).optional()}); export const v1alpha1ApplicationSourceKustomize = z.object({commonLabels: z.record(z.string(), z.string()).optional(), images: z.array(z.string()).optional(), namePrefix: z.string().optional()}); export const v1alpha1EnvEntry = z.object({name: z.string().optional(), value: z.string().optional()}); export const v1alpha1ApplicationSourcePlugin = z.object({env: z.array(v1alpha1EnvEntry).optional(), name: z.string().optional()}); export const v1alpha1ApplicationSource = z.object({directory: v1alpha1ApplicationSourceDirectory.optional(), helm: v1alpha1ApplicationSourceHelm.optional(), ksonnet: v1alpha1ApplicationSourceKsonnet.optional(), kustomize: v1alpha1ApplicationSourceKustomize.optional(), path: z.string().optional(), plugin: v1alpha1ApplicationSourcePlugin.optional(), repoURL: z.string().optional(), targetRevision: z.string().optional()}); export const v1alpha1SyncPolicyAutomated = z.object({prune: z.boolean().optional(), selfHeal: z.boolean().optional()}); export const v1alpha1SyncPolicy = z.object({automated: v1alpha1SyncPolicyAutomated.optional()}); export const v1alpha1ApplicationSpec = z.object({destination: v1alpha1ApplicationDestination.optional(), ignoreDifferences: z.array(v1alpha1ResourceIgnoreDifferences).optional(), info: z.array(v1alpha1Info).optional(), project: z.string().optional(), source: v1alpha1ApplicationSource.optional(), syncPolicy: v1alpha1SyncPolicy.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 }; /** * UpdateSpec updates an application spec * * PUT /api/v1/applications/{name}/spec */ export const updateApiApiV1ApplicationsNameSpec = async (args: UpdateApiApiV1ApplicationsNameSpecArgs, options: UpdateApiApiV1ApplicationsNameSpecOptions) => { 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") const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/applications/${encodeURIComponent(String(args.name))}/spec${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PUT", 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(v1alpha1ApplicationSpec, await res.json()) };