4.4 KiB
4.4 KiB
Tasks: enterprise-network
Change ID: enterprise-network
Package: @suaveplan/network
Target path: universal/network/network
Prerequisite packages on Verdaccio: @suaveplan/error, @suaveplan/types, @suaveplan/retry, @suaveplan/serialize
1. Scaffold
- Create directory
universal/network/network/withsrc/,tests/,src/__benchmarks__/, and all feature subdirectories per the layout inproposal.md. - Write
package.jsonat version0.1.0with"type": "module","sideEffects": false, fullexportsmap, deps:@suaveplan/error workspace:^,@suaveplan/types workspace:^,@suaveplan/retry workspace:^,@suaveplan/serialize workspace:^,zod catalog:forms,@opentelemetry/api catalog:observability. - Write
tsconfig.jsonextending@suaveplan/typescript-config/library.json. - Write
vitest.config.tsusingcreateTestConfig()from@suaveplan/testing/config. - Add
lint,typecheck,test,test:coverage,build,docs:checkscripts.
2. Types + errors
- Write
src/types/common.ts—HttpMethod,HttpRequest,HttpResponse,HttpMiddleware,HttpClientOptions,WsReadyState,WsMessage,WebSocketClientOptions. - Write
src/types/common.md. - Write
src/error-codes.ts—NetworkErrorCode,NETWORK_ERROR_METADATA,registerNetworkErrorCodes(). - Write Zod schemas:
HttpRequestSchema,HttpClientOptionsSchema,WebSocketClientOptionsSchema.
3. URL utilities
- Implement
buildUrl,parseQueryString,serializeQueryString,isAbsoluteUrl,joinPathsinsrc/utils/url.ts. - Write
url.test.ts(≤500 lines): each function, edge cases (empty params, absolute URLs, path joining). - Write
url.md.
4. Middleware
Logging middleware
- Implement
loggingMiddleware(logger): HttpMiddleware— logs method, URL, status, duration. - Write
logging.test.tsandlogging.md.
Retry middleware
- Implement
retryMiddleware(options?): HttpMiddleware— wraps@suaveplan/retry; retries on 429/5xx and network errors; uses exponential backoff. - Write
retry.test.tsandretry.md.
Auth middleware
- Implement
authMiddleware(token): HttpMiddleware— addsAuthorization: Bearer <token>header;tokenmay be a function for dynamic tokens. - Write
auth.test.tsandauth.md.
Rate-limit middleware
- Implement
rateLimitMiddleware(options): HttpMiddleware— sliding-window request rate limiting using injectableClock; queues excess requests. - Write
rate-limit.test.tsandrate-limit.md.
5. HttpClient
- Implement
HttpClient— middleware chain dispatch, injectablefetch, body serialisation via@suaveplan/serialize, timeout viaAbortSignal.timeout-compatible wrapper, response body deserialisation,use(). - Wire OTel: span
http.request, counterhttp_request_total, histogramhttp_request_duration_ms. - Write
http-client.test.ts(≤500 lines): GET/POST/PUT/DELETE with stub fetch, timeout, abort, 4xx throwsNETWORK_BAD_STATUS, middleware chain order. - Write
http-client.md.
6. WebSocketClient
- Implement
WebSocketClient— injectableWebSocket, auto-reconnect with@suaveplan/retrybackoff, ping/pong keepalive using injectableClock,on()event listener registry,send(),connect(),disconnect(). - Wire OTel: counter
ws.reconnect_total. - Write
websocket-client.test.ts(≤500 lines): connect, message, reconnect, max reconnects exceeded throws, abort on disconnect. - Write
websocket-client.md.
7. Benchmarks
- Write
src/__benchmarks__/network.bench.ts—buildUrlwith 10 params, middleware chain dispatch 5 middlewares no-op stub fetch.
8. Tests
- Write
tests/integration.test.ts—HttpClient+ middleware stack end-to-end with stub fetch. - Write
tests/property.test.ts(fast-check) —buildUrlround-trip,parseQueryString(serializeQueryString(p)) deep equals p.
9. Docs + verify + publish
- All co-located
.mdfiles (≥200 words each). - Write
README.mdat package root. bunx turbo lint typecheck test --filter=@suaveplan/network— green.bunx turbo test:coverage --filter=@suaveplan/network— 100%.bun scripts/publish.ts --package @suaveplan/network.- Archive to
openspec/archive/2026-04-24-enterprise-network/.