export type SwarmSpec = {Name?: string | undefined, Labels?: {[key: string]: string} | undefined, Orchestration?: ({TaskHistoryRetentionLimit?: number | undefined} | null) | undefined, Raft?: ({SnapshotInterval?: number | undefined, KeepOldSnapshots?: number | undefined, LogEntriesForSlowFollowers?: number | undefined, ElectionTick?: number | undefined, HeartbeatTick?: number | undefined}) | undefined, Dispatcher?: ({HeartbeatPeriod?: number | undefined} | null) | undefined, CAConfig?: ({NodeCertExpiry?: number | undefined, ExternalCAs?: (Array<{Protocol?: 'cfssl' | undefined, URL?: string | undefined, Options?: {[key: string]: string} | undefined, CACert?: string | undefined}>) | undefined, SigningCACert?: string | undefined, SigningCAKey?: string | undefined, ForceRotate?: number | undefined} | null) | undefined, EncryptionConfig?: ({AutoLockManagers?: boolean | undefined}) | undefined, TaskDefaults?: ({LogDriver?: ({Name?: string | undefined, Options?: {[key: string]: string} | undefined}) | undefined}) | undefined}; export type CreateApiSwarmUpdateArgs = {version: number, rotateWorkerToken?: boolean | undefined, rotateManagerToken?: boolean | undefined, rotateManagerUnlockKey?: boolean | undefined, body: SwarmSpec}; export type CreateApiSwarmUpdateOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; /** * Update a swarm * * POST /swarm/update */ export const createApiSwarmUpdate = async (args: CreateApiSwarmUpdateArgs, options: CreateApiSwarmUpdateOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") if (args.version != null) query.append("version", String(args.version)) if (args.rotateWorkerToken != null) query.append("rotateWorkerToken", String(args.rotateWorkerToken)) if (args.rotateManagerToken != null) query.append("rotateManagerToken", String(args.rotateManagerToken)) if (args.rotateManagerUnlockKey != null) query.append("rotateManagerUnlockKey", String(args.rotateManagerUnlockKey)) const url = `${baseUrl.replace(/\/+$/, '')}/swarm/update${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 undefined };