import {z} from 'zod' export type DbaasServiceName = string; export type JsonSchemaSchemaRegistry = {leader_eligibility?: boolean | undefined, topic_name?: string | undefined}; export type JsonSchemaKafkaRest = {producer_compression_type?: ('gzip' | 'snappy' | 'lz4' | 'zstd' | 'none') | undefined, name_strategy_validation?: boolean | undefined, name_strategy?: ('topic_name' | 'record_name' | 'topic_record_name') | undefined, consumer_enable_auto_commit?: boolean | undefined, producer_acks?: ('all' | '-1' | '0' | '1') | undefined, consumer_request_max_bytes?: number | undefined, producer_max_request_size?: number | undefined, simpleconsumer_pool_size_max?: number | undefined, producer_linger_ms?: number | undefined, consumer_request_timeout_ms?: (1000 | 15000 | 30000) | undefined}; export type JsonSchemaKafkaConnect = {producer_buffer_memory?: number | undefined, consumer_max_poll_interval_ms?: number | undefined, producer_compression_type?: ('gzip' | 'snappy' | 'lz4' | 'zstd' | 'none') | undefined, connector_client_config_override_policy?: ('None' | 'All') | undefined, offset_flush_interval_ms?: number | undefined, scheduled_rebalance_max_delay_ms?: number | undefined, consumer_fetch_max_bytes?: number | undefined, consumer_max_partition_fetch_bytes?: number | undefined, offset_flush_timeout_ms?: number | undefined, consumer_auto_offset_reset?: ('earliest' | 'latest') | undefined, producer_max_request_size?: number | undefined, producer_batch_size?: number | undefined, session_timeout_ms?: number | undefined, producer_linger_ms?: number | undefined, consumer_isolation_level?: ('read_uncommitted' | 'read_committed') | undefined, consumer_max_poll_records?: number | undefined}; export type JsonSchemaKafka = {sasl_oauthbearer_expected_audience?: string | undefined, group_max_session_timeout_ms?: number | undefined, log_flush_interval_messages?: number | undefined, sasl_oauthbearer_jwks_endpoint_url?: string | undefined, max_connections_per_ip?: number | undefined, sasl_oauthbearer_expected_issuer?: string | undefined, log_index_size_max_bytes?: number | undefined, auto_create_topics_enable?: boolean | undefined, log_index_interval_bytes?: number | undefined, replica_fetch_max_bytes?: number | undefined, num_partitions?: number | undefined, transaction_state_log_segment_bytes?: number | undefined, replica_fetch_response_max_bytes?: number | undefined, log_message_timestamp_type?: ('CreateTime' | 'LogAppendTime') | undefined, connections_max_idle_ms?: number | undefined, log_flush_interval_ms?: number | undefined, log_preallocate?: boolean | undefined, log_segment_delete_delay_ms?: number | undefined, message_max_bytes?: number | undefined, group_initial_rebalance_delay_ms?: number | undefined, log_local_retention_bytes?: number | undefined, log_roll_jitter_ms?: number | undefined, transaction_remove_expired_transaction_cleanup_interval_ms?: number | undefined, transaction_partition_verification_enable?: boolean | undefined, default_replication_factor?: number | undefined, log_roll_ms?: number | undefined, producer_purgatory_purge_interval_requests?: number | undefined, log_retention_bytes?: number | undefined, min_insync_replicas?: number | undefined, compression_type?: ('gzip' | 'snappy' | 'lz4' | 'zstd' | 'uncompressed' | 'producer') | undefined, log_message_timestamp_difference_max_ms?: number | undefined, log_local_retention_ms?: number | undefined, log_message_downconversion_enable?: boolean | undefined, sasl_oauthbearer_sub_claim_name?: string | undefined, max_incremental_fetch_session_cache_slots?: number | undefined, log_retention_hours?: number | undefined, group_min_session_timeout_ms?: number | undefined, socket_request_max_bytes?: number | undefined, log_segment_bytes?: number | undefined, 'log-cleanup-and-compaction'?: ({log_cleaner_delete_retention_ms?: number | undefined, log_cleaner_max_compaction_lag_ms?: number | undefined, log_cleaner_min_cleanable_ratio?: number | undefined, log_cleaner_min_compaction_lag_ms?: number | undefined, log_cleanup_policy?: ('delete' | 'compact' | 'compact,delete') | undefined}) | undefined, offsets_retention_minutes?: number | undefined, log_retention_ms?: number | undefined}; export type UpdateApiDbaasKafkaNameArgs = {name: DbaasServiceName, body: {'authentication-methods'?: ({certificate?: boolean | undefined, sasl?: boolean | undefined}) | undefined, 'kafka-rest-enabled'?: boolean | undefined, 'kafka-connect-enabled'?: boolean | undefined, 'ip-filter'?: Array | undefined, 'schema-registry-settings'?: JsonSchemaSchemaRegistry | undefined, 'kafka-rest-settings'?: JsonSchemaKafkaRest | undefined, 'termination-protection'?: boolean | undefined, 'kafka-connect-settings'?: JsonSchemaKafkaConnect | undefined, maintenance?: ({dow: 'saturday' | 'tuesday' | 'never' | 'wednesday' | 'sunday' | 'friday' | 'monday' | 'thursday', time: string}) | undefined, 'kafka-settings'?: JsonSchemaKafka | undefined, 'schema-registry-enabled'?: boolean | undefined, version?: string | undefined, plan?: string | undefined}}; export type UpdateApiDbaasKafkaNameOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const operation = z.object({id: z.string().optional(), reason: z.enum(["incorrect", "unknown", "unavailable", "forbidden", "busy", "fault", "partial", "not-found", "interrupted", "unsupported", "conflict"]).optional(), reference: z.object({id: z.string().optional(), link: z.string().optional(), command: z.string().optional()}).optional(), message: z.string().optional(), state: z.enum(["failure", "pending", "success", "timeout"]).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 }; /** * Update a DBaaS Kafka service * * PUT /dbaas-kafka/{name} */ export const updateApiDbaasKafkaName = async (args: UpdateApiDbaasKafkaNameArgs, options?: UpdateApiDbaasKafkaNameOptions) => { const {baseUrl = "https://api-ch-gva-2.exoscale.com/v2", 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(/\/+$/, '')}/dbaas-kafka/${encodeURIComponent(String(args.name))}${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(operation, await res.json()) };