Referencia de paquetes y providers
Esta página está organizada según la pregunta que intenta resolver una aplicación, no según el layout del directorio packages/. Importa desde el paquete público más pequeño que sea dueño del contrato. El comportamiento específico del runtime se expone mediante un subpath explícito. Los paquetes provider no son implementaciones intercambiables con una única garantía universal.
Cómo leer esta página
- Contract significa una interfaz portable o neutral respecto al provider.
- Provider significa una implementación respaldada por memoria, un archivo, un servicio de red o una biblioteca nativa.
- Lifecycle adapter significa un wrapper
Serveralrededor de un recurso nativo creado por la aplicación. - Evidence identifica el tipo de respaldo del repositorio: source/export, pruebas declaradas o resultado de un comando local reportado. No convierte una versión de paquete en una afirmación sobre npm o producción.
El inventario de source actual contiene 45 manifests de paquetes @go-like/* no privados y 27 subpaths públicos de source, todos en la versión 0.0.1 en este checkout. Los 44 workspaces examples/* son aplicaciones privadas, no paquetes públicos.
Elige por tarea
| Tarea | Empieza con | Añade cuando haga falta | go-like no controla |
|---|---|---|---|
| Exponer una API Web | @go-like/web, @go-like/core | @go-like/web/node o el handler Fetch nativo de un framework | Router, middleware del framework, auth, policy de responses |
| Llamar a un servicio interno | @go-like/client, @go-like/transport | @go-like/transport-memory, @go-like/transport-http, @go-like/struct | Idempotencia de negocio, IDL generado, RPC full-duplex |
| Descubrir instancias de servicio | @go-like/registry | Un provider de Registry, filters y un Selector | Consistencia de leases/revisiones del backend o service locator global |
| Cargar configuración | @go-like/config | env/file/YAML o un provider externo de Config | Configuración global implícita y transacciones entre recursos |
| Guardar bytes autoritativos | @go-like/store | Provider de Memory, File, Consul, etcd o Vault | Una base de datos/ORM genérica o garantías uniformes del provider |
| Cachear valores desechables | @go-like/cache | Provider de Memory o Redis | Autoridad, persistencia, CAS, estado de negocio durable |
| Publicar o consumir bytes | @go-like/broker | Memory, RabbitMQ o NATS | ack/nack/term universal, DLQ, offset durable, exactly-once |
| Añadir payloads de eventos tipados | @go-like/event | Un Codec de la aplicación | Schema registry, replay, policy de settlement |
| Ejecutar un scheduler o worker existente | @go-like/core | @go-like/croner, @go-like/bullmq, @go-like/nats | Queue, processor, policy de jobs o conexión de broker nativos |
| Añadir operaciones | @go-like/health, @go-like/resilience | Pino, Winston, OTel, Prometheus | Instrumentación global, auth, policy de despliegue |
Paquetes base
| Paquete | Úsalo para | API pública principal | Nota de runtime y propiedad |
|---|---|---|---|
@go-like/context | Cancelación explícita, deadlines, causas y valores | background, todo, withCancel, withCancelCause, withDeadline, withDeadlineCause, withTimeout, withTimeoutCause, cause, withoutCancel, withValue, afterFunc, canceled, deadlineExceeded | Contrato de source portable. Context usa AbortSignal internamente; no es un ABI de Go ni una bolsa DI |
@go-like/core | Componer el ciclo de vida de la aplicación y los recursos | newApp, server, registrar, beforeStart, afterStart, beforeStop, afterStop, startTimeout, stopTimeout, context, id, name, version, metadata, endpoint, newContext, fromContext | Server y App estructurales y portables. Las llamadas stop de hermanos son concurrentes |
@go-like/metadata | Metadata inmutable de múltiples valores y propagación explícita | tipos de metadata y funciones de propagación | Los dominios de metadata de Client y Server están separados; metadata no es identidad confiable |
@go-like/struct | Validación Struct en runtime para endpoints tipados y JSON | struct, Infer, Struct, StructError | Paquete público actual. Es validación en runtime, no Protobuf, IDL ni código generado |
@go-like/health | Registry de probes de liveness y readiness | newProbeRegistry, ProbeRegistry, Probe, ProbeReport | Liveness vacío pasa; readiness vacío falla cerrado; el timeout default del probe es 1,000 ms |
@go-like/resilience | Retry explícito, circuit breaker y rate limiting no bloqueante | retry, exponentialBackoff, newCircuitBreaker, newTokenBucketLimiter, circuitOpen | La autorización del retry la declara el caller; no hay idempotencia automática ni tarea de limiter en segundo plano |
Paquetes Web y de llamadas internas
| Paquete | Úsalo para | API pública principal | No controla |
|---|---|---|---|
@go-like/web | Handler Web estándar y bridge de Context de la request | Handler, ContextHandler, contextHandler | Rutas, WebSockets, policy de SSE, listener, autenticación |
@go-like/web/health | Rutas de handlers de health | createHealthHandler | Registro de probes o montaje de rutas del framework |
@go-like/web/node | Listener Node alrededor de un Fetch Handler | newNodeServer, hostname, port, nodeShutdownTimeout | TLS/HTTP2 del transporte HTTP interno; para eso usa @go-like/transport-http/node |
@go-like/client | Llamadas internas unary, discovery, selección, middleware, retries y pooling | newClient, withTransport, withEndpoint, withDiscovery, withSelector, withFilter, withBlock, withRetry, middleware, use, circuitBreakerMiddleware, closeTimeout, poolSize, poolTtl | Rutas del framework, seguridad de replay de negocio, límites de sockets físicos |
@go-like/server | Server interno de JSON Fetch o SSE y dispatch de rutas | newServer, transport, address, advertise, Server.registerHandler, httpRoute, middleware, use, listenOption, rateLimitMiddleware | Router del framework y autorización de la aplicación |
@go-like/transport | SPI de Transport y frontera Fetch Request/Response | Transport, Client, Listener, defineService, ServerStream, TransportInfo, Endpoint, endpoint, chain, serviceError | Un wire concreto si no seleccionas un provider; no hay promise de full-duplex interno |
@go-like/transport-memory | Transport unary en proceso | newMemoryTransport | Comportamiento entre procesos, persistencia, fallback de red, TLS |
@go-like/transport-http | Transport HTTP interno respaldado por Fetch | newHTTPTransport, executor, maxMessageBytes | Un listener portable completo sin un HTTPHost inyectado; controles TLS nativos de Node |
@go-like/transport-http/node | Transport HTTP interno nativo de Node | newNodeHTTPTransport, allowHTTP1, clientAuth | Policy de seguridad automática |
@go-like/transport-grpc-buf | Connect/gRPC-Web unary, server-streaming | newHandler, fromHandlerContext, callOptions | Código Context-first sobre Protobuf-ES |
@go-like/transport-grpc-buf/native | gRPC estándar con cuatro cardinalidades mediante /native | newClient, newServer | Discovery, Selector, TLS/mTLS |
@go-like/protoc-gen-like | Generador Node durante el build | protoc-gen-like, protocGenLike | Protobuf-ES |
Paquetes de Config
| Paquete o subpath | Úsalo para | Función principal | Frontera |
|---|---|---|---|
@go-like/config | Manager de Config y sources de objetos | newConfig, source, objectSource, schema, resolver, placeholderResolver, onReloadError, onTerminalError | Snapshots inmutables y ciclo de vida aceptado del watcher; no es un Server de Core por sí mismo |
@go-like/config/env | Source explícito de un record de entorno | envSource | Acepta un record inyectado; no lee globals ambientales del runtime |
@go-like/config/file | Source de archivo y contrato de decoder JSON | fileSource, jsonFileDecoder | Necesita una capacidad explícita de archivo |
@go-like/config/node | Capacidad de archivo de Node | newNodeFileCapability | Subpath específico de runtime Node |
@go-like/config/yaml | Decodificación YAML a ConfigObject | decodeYaml | Decodificar no es observar un source ni publicar un schema |
@go-like/config-consul | Source de configuración HTTP de Consul | consulSource, jsonConsulDecoder | Comportamiento de blocking-query y consistencia de Consul |
@go-like/config-etcd | Source de configuración del gateway etcd | etcdSource, jsonEtcdDecoder | Comportamiento de revision, compaction y protocolo del gateway |
@go-like/config-kubernetes | Una key de un ConfigMap o Secret de Kubernetes | kubernetesSource, jsonKubernetesDecoder | Semántica de resource-version/relist; no hay transacción entre recursos |
@go-like/config-vault | Source de Vault KV v2 | vaultSource | Autenticación, TLS, policy de tokens y semántica KV de Vault |
Los providers externos de Config usan Fetch estándar inyectado. Las credenciales y los redirects tienen comportamiento de seguridad específico de cada provider; http frente a https sigue siendo una decisión de la aplicación o del despliegue, salvo que un provider lo rechace.
Paquetes de Registry
| Paquete | Úsalo para | Función principal | Nota de runtime/backend |
|---|---|---|---|
@go-like/registry | Contrato, snapshot, filters y selectors | filterVersion, filterLabel, newRandomSelector, newRoundRobinSelector, newWeightedRoundRobinSelector, newP2CSelector, newEWMASelector | Snapshots de reemplazo completo; el feedback de selección es explícito |
@go-like/registry/provider | Helpers para autores de providers y diagnósticos de registration | providerOptions, notifyRegistrationError, helpers de snapshot/provider | Subpath para providers, no suele ser el entrypoint de una aplicación |
@go-like/registry-consul | Registration y discovery de Consul | newConsulRegistry | Filtrado por health, blocking-query y comportamiento TTL/critical nativos de Consul |
@go-like/registry-etcd | Registration y discovery de etcd | newEtcdRegistry | Leases, revisiones, watch/relist y compaction |
@go-like/registry-kubernetes | Discovery de EndpointSlice y registration opcional | newKubernetesRegistry | EndpointSlice de Kubernetes, owner references, no TTL inventado |
@go-like/registry-mdns | Discovery multicast local | newMDNSRegistry | El provider root es portable por diseño; el host UDP es /node |
@go-like/registry-mdns/node | Capacidad multicast UDP de Node | newNodeMDNSHost | Subpath explícito del runtime Node |
@go-like/registry-zookeeper | Registration y discovery ephemeral de ZooKeeper | newZookeeperRegistry | Node.js y Bun documentados |
Registry es estado de reachability, no datos duraderos de negocio. Un provider puede conservar el último snapshot mientras reconstruye un watcher transitorio, pero un snapshot vacío autoritativo debe fallar cerrado.
Paquetes Store y Cache
| Paquete | Úsalo para | Función principal | Frontera |
|---|---|---|---|
@go-like/store | Contrato y opciones de records | expiresIn, ifAbsent, ifRevision, prefix, limit, cursor | Revisiones, CAS, TTL y paginación; las capacidades varían por provider |
@go-like/store/provider | Helpers de write/delete/list de providers | writeOptions, deleteOptions, listOptions, helpers de snapshot y conflicto | Orientado a providers; no es un backend durable por sí mismo |
@go-like/store-memory | Pruebas de Store local al proceso | newMemoryStore, clock | No hay durabilidad tras reinicio ni estado entre procesos |
@go-like/store-file | Store de archivos local | newFileStore | Estado local de un solo owner; usa /node para el host Node |
@go-like/store-file/node | Capacidad de archivos de Node | newNodeFileStoreHost | Subpath explícito de Node |
@go-like/store-consul | Store KV de Consul | newConsulStore | Sessions de Consul, combinaciones TTL/CAS y comportamiento incierto de mutaciones |
@go-like/store-etcd | Store KV de etcd | newEtcdStore | Gateway, lease, revision, compaction y comportamiento incierto de mutaciones |
@go-like/store-vault | Store KV v2 de Vault | newVaultStore | No promete semántica uniforme de TTL/CAS del Store |
@go-like/cache | Contrato de valores desechables/TTL | expiresIn | No tiene CAS, revision, durabilidad ni autoridad |
@go-like/cache-memory | Cache local al proceso | newMemoryCache, clock | No hay persistencia; expiración lazy; sirve para pruebas y aceleración local |
@go-like/cache-redis | Cache respaldado por Redis | newRedisCache | La conexión nativa de Redis, el manejo de credenciales de la URL y los requisitos de runtime siguen visibles |
Paquetes de Broker, eventos y trabajo
| Paquete o subpath | Úsalo para | Función principal | Frontera |
|---|---|---|---|
@go-like/broker | Contrato Broker de bytes/topics | newBrokerServer | No hay ack/nack/term portable, DLQ, retry ni offset durable |
@go-like/broker/provider | Registration terminal del provider | registerSubscriberTerminal, subscriberTerminal | Bookkeeping del ciclo de vida orientado al provider |
@go-like/broker-memory | Broker en proceso con topics exactos | newMemoryBroker | Privado de cada instancia, broadcast, sin settlement durable |
@go-like/broker-rabbitmq | Broker RabbitMQ borrowed, confirm o recovering | newRabbitMqBroker, newConfirmRabbitMqBroker, newRecoveringRabbitMqBroker | Channel/connection de amqplib y semántica nativa de settlement |
@go-like/event | Codec tipado sobre un Broker | eventBroker | La entrega nativa sigue visible; no hay replay ni schema registry |
@go-like/nats | Ciclo de vida y entrypoints de broker nativo NATS | newNatsCoreServer, natsCoreDrainTimeout | Connection y semántica de suscripción Core siguen nativas |
@go-like/nats/broker | Broker NATS Core | newNatsCoreBroker | Msg nativo, queue group, drain y semántica at-most-once |
@go-like/nats/jetstream | Ciclo de vida de ConsumerMessages de JetStream | newNatsJetStreamServer, natsJetStreamCloseTimeout | Comportamiento nativo de cierre/stop/closed de ConsumerMessages |
@go-like/nats/jetstream/broker | Broker de bytes tipado sobre JetStream | newNatsJetStreamBroker | JsMsg, PubAck, ack/nak/term, redelivery y DLQ siguen nativos |
@go-like/croner | Ciclo de vida de jobs Croner existentes | newCronerServer | Schedule, callback, overlap y semántica terminal pasiva de Croner |
@go-like/bullmq | Ciclo de vida de un Worker BullMQ existente | newBullMqWorkerServer, bullMqWorkerShutdownTimeout | Queue, Redis, processor, retry/backoff, stalled jobs e identidad de job |
Paquetes de logging y observabilidad
| Paquete | Úsalo para | Función principal | No controla |
|---|---|---|---|
@go-like/pino | Wrappers de requests/brokers Pino y lifecycle de drain | logClient, logUnaryMiddleware, logWebHandler, logBroker, newPinoServer, pinoDrainTimeout | Creación del logger, policy de destino, redacción, setup global |
@go-like/winston | Wrappers Winston y ciclo de vida de shutdown | wrappers de logging, newWinstonServer | Logger/transports y sus semánticas nativas de finish/close |
@go-like/otel | Wrappers explícitos de traces/metrics OpenTelemetry | newOtelServer, traceClient, traceUnaryMiddleware, traceWebHandler, traceBroker, measureClient, measureClientMiddleware, measureUnaryMiddleware, newRequestMetrics | Providers globales, exporters, context manager, instrumentación automática |
@go-like/prometheus | Métricas de requests Prometheus y Handler de scrape | newRequestMetrics, measureClient, measureUnaryMiddleware, measureWebHandler, measureBroker, createPrometheusHandler | Registry global, collectors fuera del Registry proporcionado, tareas en segundo plano |
Inventario completo de subpaths públicos de source
Estos son los 27 subpaths explícitos de source declarados por los manifests de paquetes actuales. Los paquetes generados pueden añadir un export ./package.json solo de metadata; eso no es un paquete nuevo ni una API de source.
| # | Subpath | Exports principales | Audiencia |
|---|---|---|---|
| 1 | @go-like/broker/provider | registerSubscriberTerminal, subscriberTerminal | Autores de providers |
| 2 | @go-like/cache/provider | putOptions | Autores de providers |
| 3 | @go-like/config/env | envSource | Autores de aplicaciones |
| 4 | @go-like/config/file | fileSource, jsonFileDecoder | Autores de aplicaciones |
| 5 | @go-like/config/node | newNodeFileCapability | Autores para runtime Node |
| 6 | @go-like/config/yaml | decodeYaml | Autores de aplicaciones |
| 7 | @go-like/core/lifecycle | waitForContext | Autores de providers/ciclo de vida |
| 8 | @go-like/core/node | signal | Integración de procesos Node/Bun |
| 9 | @go-like/nats/broker | newNatsCoreBroker | Aplicaciones NATS Core |
| 10 | @go-like/nats/jetstream | newNatsJetStreamServer, natsJetStreamCloseTimeout | Aplicaciones JetStream |
| 11 | @go-like/nats/jetstream/broker | newNatsJetStreamBroker | Aplicaciones Broker JetStream |
| 12 | @go-like/registry/provider | opciones de provider y helpers de snapshots | Autores de providers |
| 13 | @go-like/registry-mdns/node | newNodeMDNSHost | Aplicaciones mDNS de Node |
| 14 | @go-like/store/provider | opciones de write/delete/list y snapshots | Autores de providers |
| 15 | @go-like/store-file/node | newNodeFileStoreHost | Aplicaciones Store de archivos Node |
| 16 | @go-like/struct/codec | encodeJson, decodeJson | Autores de contratos tipados |
| 17 | @go-like/struct/runtime | introspection y helpers de parsing | Autores de runtime/providers |
| 18 | @go-like/transport/headers | Go-Like-Metadata, Go-Like-Timeout-Ms | Autores de providers de transport |
| 19 | @go-like/transport/json | encodeJsonBody, decodeJsonBody, jsonContentType | Autores de transport tipado/raw |
| 20 | @go-like/transport/provider | metadata, codecs de ServiceError, errores de transport y observeCall | Autores de providers |
| 21 | @go-like/transport-http/node | newNodeHTTPTransport, allowHTTP1, clientAuth | Aplicaciones HTTP de Node |
| 22 | @go-like/web/health | createHealthHandler | Aplicaciones Web |
| 23 | @go-like/web/node | newNodeServer, hostname, port, nodeShutdownTimeout | Aplicaciones host Web de Node |
| 24 | @go-like/client/discovery | newDiscoveryResolver, DiscoveryResolver | Autores de aplicaciones |
| 25 | @go-like/transport-grpc-buf/native | newClient, newServer | Autores de aplicaciones |
| 26 | @go-like/transport/sse | encodeSSEComment, encodeSSEEvent, encodeSSEJsonEvent, eventStreamContentType | SSE server streams |
| 27 | @go-like/web/bun | newBunServer, hostname, port, bunShutdownTimeout | Web applications |
@go-like/otel/testing y @go-like/web/node/testing no son mappings de paths de TypeScript ni exports actuales de los manifests de paquetes. No los documentes como entrypoints públicos.
Matriz de decisión de runtime
| Entrada o familia de providers | Source portable | Native de Bun/Node | Redacción de evidencia |
|---|---|---|---|
| Context, Core root, Health, Metadata, Resilience, Struct | Sí | No requiere import nativo | Contrato de source; revisa la matriz ejecutada actual antes de redactar para una release |
| Web root y Web health | Sí | Requieren un host separado | El Handler es portable; un Handler no es un listener |
| Memory Transport, Memory Store, Memory Cache, Memory Broker | Source local al proceso | Sin servicio externo | No distribuido, durable ni entre procesos |
| HTTP root y providers Fetch-backed de Config/Registry/Store | Fetch inyectado | El runtime elige Fetch | Portable por source o lane declarada, no parity universal |
Subpaths /node | No | Específicos de Node, con posibilidad de ejecución en Bun | Un import explícito cambia el grafo de runtime |
| NATS, RabbitMQ, BullMQ, Redis, Pino, Winston, SDKs nativos de OTel | Depende del provider | Fixtures Node/Bun o evidencia específica del paquete | Lee el README del provider y el scope de E2E |
| ZooKeeper | No | Node/Bun | No generalices desde el Registry root |
Reglas para elegir funciones
- Usa
contextHandleren el borde Web cuando necesites Context, no una bolsa custom de request del framework. - Usa
newAppyserver(...)cuando un proceso tenga más de un recurso admitido o cuando quieras que la propiedad de signal y shutdown sea explícita. - Usa
server.registerHandler(endpoint, handler)tipado cuando ambos lados deban compartir validación Struct en runtime. Usaserver.registerHandler(service, endpoint, handler)sin tipos cuando la aplicación sea dueña de otro contrato de bytes. - Usa
withEndpoint(...)al construir el cliente para el enrutamiento directo. Para Discovery, usa juntoswithEndpoint("discovery:///<name>")ywithDiscovery(...); no combines direcciones directas con Discovery. Ambas fuentes usan el mismo Selector. - Usa
withSelector(...),withFilter(...)ywithBlock()solo cuando el servicio necesite el comportamiento de plano de control que agregan. - Usa
withRetry(...)solo después de escribir la autorización de replay, el máximo total de intentos, el predicate de fallos y la idempotencia de negocio. - Usa
newMemoryStorepara pruebas deterministas, no para afirmar durabilidad. - Usa
newMemoryCachepara aceleración desechable, no como autoridad de citas o pagos. - Usa
newBrokerServerpara conectar una suscripción a Core, no para obtener un worker de colas universal ni una API de settlement. - Usa
newOtelServer,newPinoServer,newWinstonServero un Handler de Prometheus solo después de que la aplicación haya creado el provider o Registry nativo.
Exclusiones explícitas
@go-like/protoc-gen-like genera código Protobuf RPC con Context como primer argumento sobre Protobuf-ES. @go-like/transport-grpc-buf ofrece unary y server-streaming de Connect/gRPC-Web mediante Fetch; /native añade gRPC estándar con las cuatro cardinalidades, incluidas client-streaming y bidi. Es una vía independiente del camino interno Fetch/SSE.
Esto no incluye gRPC estándar en el navegador, request-streaming/bidi mediante Fetch, health/reflection oficiales, autenticación genérica, Event Store/replay, ORM ni orquestación de clústeres.
gRPC administrado en Node 26.12.1 y Bun 1.4.4 pasó la regresión de drain con un consumidor lento. No se ha verificado la resolución de los límites históricos de cancelación y apagado de Connect 2.1.2 y Bun 1.4.2 Fetch.