1.9 KiB
1.9 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 | pending |
|
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
To be filled by implementation agent
Summary
To be filled on completion