Declaraciones públicas de zig/src/transport/nats.zig (spire-zig (SDK consumido)).
apps/docs/generated/zig/spire.jsonPágina generada desde
spire@spire-0.2.0-XvnrRek1BgCX4Bh8miuITCQgkn0FqeQrYYE3goFfDcQd (zig/src/root.zig). No se edita a mano:bun run docs:genla regenera ybun run docs:checkfalla si difiere.
Transporte NATS de spire-zig (dec-0119 §1, §3.1): el daemon publica evt a NATS/JetStream con su identidad NKey. NATS sigue siendo el broker (dec-0005/dec-0032); spire pone encima el sobre firmado.
Protocolo cliente de NATS core, el subconjunto que hace falta:
INFO → CONNECT (nkey + firma del nonce) → PING/PONG → PUB / SUB / MSG.
Un hilo lector responde a los PING del servidor, entrega los MSG del
inbox propio (acks de JetStream y respuestas) y guarda el último -ERR
(violaciones de permisos de la ACL). Todo el parseo está acotado: línea
de control <= 4 KiB, payload <= max_payload del INFO (y <= 1 MiB).
transport.nats.Errorconst · línea 21
pub const Error = error{ ConnectFailed, WriteFailed, ReadFailed, Closed, Timeout, ProtocolError, AuthFailed, ServerError, PayloadTooLarge, InvalidSubject, NoResponders, JetStreamError, }Sin ///.
transport.nats.Optionstype · línea 36
pub const Options = structSin ///.
transport.nats.Connectiontype · línea 60
pub const Connection = structSin ///.
transport.nats.Connection.connectfn · línea 86
pub fn connect(allocator: std.mem.Allocator, opts: Options) (Error || std.mem.Allocator.Error)!*ConnectionSin ///.
transport.nats.Connection.closefn · línea 152
pub fn close(self: *Connection) voidSin ///.
transport.nats.Connection.isOpenfn · línea 172
pub fn isOpen(self: *const Connection) boolfalse en cuanto el hilo lector ve el cierre (servidor caído, error de
protocolo o close).
transport.nats.Connection.lastErrorfn · línea 177
pub fn lastError(self: *Connection, out: []u8) []const u8Último -ERR del servidor (p. ej. "Permissions Violation for Publish to ...").
transport.nats.Connection.errorCountfn · línea 185
pub fn errorCount(self: *Connection) u32Sin ///.
transport.nats.Connection.publishfn · línea 192
pub fn publish(self: *Connection, subject: []const u8, payload: []const u8) Error!voidPUB sin confirmación.
transport.nats.Connection.requestfn · línea 213
pub fn request(self: *Connection, subject: []const u8, payload: []const u8, timeout_ms: u32) (Error || std.mem.Allocator.Error)![]u8Petición/respuesta de NATS core (API de JetStream, acks). Devuelve el payload de la respuesta (propiedad del llamador).
transport.nats.Connection.publishAckedfn · línea 246
pub fn publishAcked(self: *Connection, subject: []const u8, payload: []const u8, timeout_ms: u32) (Error || std.mem.Allocator.Error)!u64PUB con confirmación de JetStream ({"stream":…,"seq":N}). Devuelve seq.
transport.nats.Connection.flushfn · línea 258
pub fn flush(self: *Connection, timeout_ms: u32) Error!voidEspera a un PONG propio: todo lo publicado antes ya lo procesó el servidor.
transport.nats.validPublishSubjectfn · línea 419
pub fn validPublishSubject(s: []const u8) boolSubject de publicación NATS: tokens no vacíos separados por ., ASCII
visible sin comodines (*, >). Más amplio que el de los sobres
(admite $JS.API.… y _INBOX.…), nunca espacios ni controles: un
subject con \r\n inyectaría comandos en el protocolo.
transport.nats.Publishertype · línea 506
pub const Publisher = structPublica evt de un contrato, sellados con la identidad del servicio, en
su subject. Con acked, espera la confirmación del stream JetStream.
transport.nats.Publisher.emitfn · línea 511
pub fn emit(self: *Publisher, comptime C: type, msg: C.Request, opts: client_mod.SendOptions) !voidSin ///.
transport.nats.Publisher.emitAckedfn · línea 518
pub fn emitAcked(self: *Publisher, comptime C: type, msg: C.Request, opts: client_mod.SendOptions, timeout_ms: u32) !u64Sin ///.
transport.nats.ResilientPublishertype · línea 533
pub const ResilientPublisher = structPublicador de evt que sobrevive a las caídas de NATS. Conecta la primera
vez que emite; si la conexión muere o una escritura falla, la suelta y
vuelve a conectar en una emisión posterior, con espera exponencial
(min_backoff_ms … max_backoff_ms). Mientras NATS no está, emit
devuelve error.Unavailable sin bloquear (el connect TCP y las
escrituras están acotados por send_timeout_ms): sus evt son
observaciones, no se encolan. Seguro entre hilos.
transport.nats.ResilientPublisher.EmitErrorconst · línea 551
pub const EmitError = client_mod.SealError || error{Unavailable}Sin ///.
transport.nats.ResilientPublisher.deinitfn · línea 553
pub fn deinit(self: *ResilientPublisher) voidSin ///.
transport.nats.ResilientPublisher.emitfn · línea 559
pub fn emit(self: *ResilientPublisher, comptime C: type, msg: C.Request, opts: client_mod.SendOptions) EmitError!voidSin ///.
transport.nats.ResilientPublisher.statsfn · línea 603
pub fn stats(self: *ResilientPublisher) struct { connected: bool, connects: u64, dropped: u64 }Estado para métricas/tests (con el mutex).