2.3 KiB
id, name, status, depends_on, scope, risk, impact, level
| id | name | status | depends_on | scope | risk | impact | level | ||
|---|---|---|---|---|---|---|---|---|---|
| napi/serve-function | Implement NAPI serve() — server with connection events returning Duplex streams | completed |
|
moderate | high | component | implementation |
Description
Implement the NAPI serve() function per ADR-016. Returns a WraithServer object with a close() method and onConnection event emitter. Each incoming SSH connection produces a Duplex stream.
The function accepts WraithServeOptions and returns Promise<WraithServer>. The NAPI layer handles transport binding, SSH server setup, and connection handling.
Acceptance Criteria
#[napi]functionserve(options: WraithServeOptions) -> Result<WraithServer>incrates/wraith-napi/src/serve.rsWraithServeOptionsstruct with napi fields:transport,hostKey,authorizedKeys,certAuthority,tlsCert,tlsKey,acmeDomain,listen,irohRelayWraithServernapi class withclose() -> Promise<void>andonConnection(callback)event registration- Each incoming connection produces a
Duplexstream via theonConnectioncallback ConnectionInfostruct passed with each connection:remoteAddr,transportKind- Key material:
hostKey,authorizedKeysaccept file path (string) orBuffer(in-memory) - Server starts transport acceptor, authenticates connections, emits stream events
close()triggers graceful shutdown- TypeScript type matches napi-and-pubsub.md spec
- Integration test: JS serve() + connect() round-trip works
References
- docs/architecture/napi-and-pubsub.md — NAPI serve() spec, WraithServer interface
- docs/architecture/decisions/016-napi-expose-connect-and-serve.md — both connect() and serve()
- docs/architecture/server.md — server configuration
Notes
TCP transport fully implemented. TLS/iroh transports return helpful "not yet supported" errors. WraithServerStream provides read/write/close. ConnectionInfo includes remoteAddr and transportKind.
Summary
Implemented NAPI serve() in crates/wraith-napi/src/serve.rs: WraithServeOptions, WraithServer with close()/onConnection(), WraithServerStream (Duplex read/write/close), ConnectionInfo. TCP transport works end-to-end. 241 tests pass, clippy clean.