Referencia Zigspire-zig (SDK consumido)

zig/src/transport/nats.zig

Declaraciones públicas de zig/src/transport/nats.zig (spire-zig (SDK consumido)).

ImplementadoSin versión del tren todavía· generada desde apps/docs/generated/zig/spire.json

Página generada desde spire@spire-0.2.0-XvnrRek1BgCX4Bh8miuITCQgkn0FqeQrYYE3goFfDcQd (zig/src/root.zig). No se edita a mano: bun run docs:gen la regenera y bun run docs:check falla 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.Error

const · línea 21

pub const Error = error{ ConnectFailed, WriteFailed, ReadFailed, Closed, Timeout, ProtocolError, AuthFailed, ServerError, PayloadTooLarge, InvalidSubject, NoResponders, JetStreamError, }

Sin ///.

transport.nats.Options

type · línea 36

pub const Options = struct

Sin ///.

transport.nats.Connection

type · línea 60

pub const Connection = struct

Sin ///.

transport.nats.Connection.connect

fn · línea 86

pub fn connect(allocator: std.mem.Allocator, opts: Options) (Error || std.mem.Allocator.Error)!*Connection

Sin ///.

transport.nats.Connection.close

fn · línea 152

pub fn close(self: *Connection) void

Sin ///.

transport.nats.Connection.isOpen

fn · línea 172

pub fn isOpen(self: *const Connection) bool

false en cuanto el hilo lector ve el cierre (servidor caído, error de protocolo o close).

transport.nats.Connection.lastError

fn · 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.errorCount

fn · línea 185

pub fn errorCount(self: *Connection) u32

Sin ///.

transport.nats.Connection.publish

fn · línea 192

pub fn publish(self: *Connection, subject: []const u8, payload: []const u8) Error!void

PUB sin confirmación.

transport.nats.Connection.request

fn · línea 213

pub fn request(self: *Connection, subject: []const u8, payload: []const u8, timeout_ms: u32) (Error || std.mem.Allocator.Error)![]u8

Petición/respuesta de NATS core (API de JetStream, acks). Devuelve el payload de la respuesta (propiedad del llamador).

transport.nats.Connection.publishAcked

fn · línea 246

pub fn publishAcked(self: *Connection, subject: []const u8, payload: []const u8, timeout_ms: u32) (Error || std.mem.Allocator.Error)!u64

PUB con confirmación de JetStream ({"stream":…,"seq":N}). Devuelve seq.

transport.nats.Connection.flush

fn · línea 258

pub fn flush(self: *Connection, timeout_ms: u32) Error!void

Espera a un PONG propio: todo lo publicado antes ya lo procesó el servidor.

transport.nats.validPublishSubject

fn · línea 419

pub fn validPublishSubject(s: []const u8) bool

Subject 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.Publisher

type · línea 506

pub const Publisher = struct

Publica 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.emit

fn · línea 511

pub fn emit(self: *Publisher, comptime C: type, msg: C.Request, opts: client_mod.SendOptions) !void

Sin ///.

transport.nats.Publisher.emitAcked

fn · línea 518

pub fn emitAcked(self: *Publisher, comptime C: type, msg: C.Request, opts: client_mod.SendOptions, timeout_ms: u32) !u64

Sin ///.

transport.nats.ResilientPublisher

type · línea 533

pub const ResilientPublisher = struct

Publicador 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.EmitError

const · línea 551

pub const EmitError = client_mod.SealError || error{Unavailable}

Sin ///.

transport.nats.ResilientPublisher.deinit

fn · línea 553

pub fn deinit(self: *ResilientPublisher) void

Sin ///.

transport.nats.ResilientPublisher.emit

fn · línea 559

pub fn emit(self: *ResilientPublisher, comptime C: type, msg: C.Request, opts: client_mod.SendOptions) EmitError!void

Sin ///.

transport.nats.ResilientPublisher.stats

fn · línea 603

pub fn stats(self: *ResilientPublisher) struct { connected: bool, connects: u64, dropped: u64 }

Estado para métricas/tests (con el mutex).