@hideyukimori/nene2-client 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  TypeScript ecosystem for [NENE2](https://github.com/hideyukiMORI/NENE2): OpenAPI-aligned types, HTTP client helpers, and Problem Details utilities for apps that consume NENE2 JSON APIs.
8
8
 
9
+ **Documentation:** https://hideyukimori.github.io/nene2-js/ (English, 日本語, Français, 中文, Português, Deutsch)
10
+
9
11
  **This repository is not a Node.js port of the PHP framework.** The PHP runtime stays in [NENE2](https://github.com/hideyukiMORI/NENE2). MCP stdio servers in PHP live in [nene-mcp](https://github.com/hideyukiMORI/nene-mcp).
10
12
 
11
13
  ## What this repo is for
@@ -28,7 +30,7 @@ See [docs/scope.md](docs/scope.md) for the full in-scope / out-of-scope matrix.
28
30
  ## Install (npm)
29
31
 
30
32
  ```bash
31
- npm install @hideyukimori/nene2-client
33
+ npm install @hideyukimori/nene2-client@0.1.2
32
34
  ```
33
35
 
34
36
  Requires **Node 22+** (native `fetch`) or a browser with `fetch`. TypeScript consumers get `.d.ts` from the package.
@@ -102,27 +104,40 @@ curl -sS http://localhost:8080/health | jq .
102
104
  # expect: { "status": "ok", "service": "NENE2" }
103
105
  ```
104
106
 
107
+ Or in TypeScript: `await client.health({ strictService: true })` rejects wrong `service` values.
108
+
105
109
  If you see a different JSON wrapper, point `NENE2_JS_API_BASE_URL` at a running NENE2 PHP instance (sibling `../NENE2`).
106
110
 
107
111
  **Multi-backend live smoke** (same client, OpenAPI contract — see [ADR 0003](docs/adr/0003-multi-backend-live-verification.md)):
108
112
 
109
113
  ```bash
110
- export NENE2_JS_API_BASE_URL=http://localhost:8080 # NENE2 PHP
111
- export NENE2_JS_PYTHON_BASE_URL=http://localhost:8000 # optional: nene2-python
112
- # export NENE2_JS_NODE_BASE_URL=http://localhost:3000 # optional: nene2-node
114
+ export NENE2_JS_API_BASE_URL=http://localhost:18080 # NENE2 evac (see ft-evac-ports.md)
115
+ export NENE2_JS_PYTHON_BASE_URL=http://localhost:18000 # optional: nene2-python
116
+ # export NENE2_JS_NODE_BASE_URL=http://localhost:13000 # optional: nene2-node
113
117
 
118
+ npm run verify:backends # curl /health, /examples/ping, /examples/notes
114
119
  npm test -- tests/client/live-smoke-matrix.test.ts
115
120
  ```
116
121
 
117
122
  Unset URLs are skipped; CI runs fixture tests only. Field-trial friction: [ADR 0004](docs/adr/0004-field-trial-friction-resolution-cycle.md).
118
123
 
124
+ ## Documentation site (local)
125
+
126
+ ```bash
127
+ npm install
128
+ npm run docs:dev # http://localhost:5175
129
+ npm run docs:build # static output → .vitepress/dist
130
+ ```
131
+
132
+ Published on push to `main` via [.github/workflows/docs.yml](.github/workflows/docs.yml).
133
+
119
134
  ## Contributing
120
135
 
121
136
  Work is **GitHub Issue driven**. Read [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) and [docs/workflow.md](docs/workflow.md) before opening a PR.
122
137
 
123
138
  AI agents: start at [AGENTS.md](AGENTS.md).
124
139
 
125
- Consumer DX evidence: [field trials](docs/field-trials/INDEX.md) (FT1129; see [methodology](docs/development/field-trials.md)). Quick start: [howto/consume-client.md](docs/howto/consume-client.md).
140
+ Consumer DX evidence: [field trials](docs/field-trials/INDEX.md) (FT30529 marathon; see [methodology](docs/development/field-trials.md), [friction registry](docs/development/ft-friction-registry.md)). Local app sandbox: sibling `../nene2-js-FT/`. Quick start: [howto/consume-client.md](docs/howto/consume-client.md).
126
141
 
127
142
  **Release:** [docs/development/publish.md](docs/development/publish.md) · Phase history: [docs/phase-2.md](docs/phase-2.md).
128
143
 
@@ -12,6 +12,11 @@ export interface Nene2ClientConfig {
12
12
  readonly fetch?: typeof fetch | undefined;
13
13
  /** Optional abort signal forwarded to every request (Persona A: cancel in-flight calls). */
14
14
  readonly signal?: AbortSignal | undefined;
15
+ /**
16
+ * Per-request timeout in milliseconds (`AbortSignal.timeout`).
17
+ * Composes with `signal` when both are set.
18
+ */
19
+ readonly timeoutMs?: number | undefined;
15
20
  }
16
21
  /** @internal */
17
22
  export interface ResolvedNene2ClientConfig {
@@ -20,6 +25,7 @@ export interface ResolvedNene2ClientConfig {
20
25
  readonly bearer: string | undefined;
21
26
  readonly fetch: typeof fetch;
22
27
  readonly signal: AbortSignal | undefined;
28
+ readonly timeoutMs: number | undefined;
23
29
  }
24
30
  /** @internal */
25
31
  export declare function resolveConfig(config: Nene2ClientConfig): ResolvedNene2ClientConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/client/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,uCAAuC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAC;IAC1C,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAC3C;AAED,gBAAgB;AAChB,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;CAC1C;AAED,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,yBAAyB,CAgBlF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/client/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,uCAAuC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAC;IAC1C,4FAA4F;IAC5F,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,gBAAgB;AAChB,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,GAAG,yBAAyB,CAiBlF"}
@@ -14,6 +14,7 @@ export function resolveConfig(config) {
14
14
  bearer: config.bearer,
15
15
  fetch: fetchFn,
16
16
  signal: config.signal,
17
+ timeoutMs: config.timeoutMs,
17
18
  };
18
19
  }
19
20
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/client/config.ts"],"names":[],"mappings":"AAyBA,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,MAAyB;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IACjD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO;QACL,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/client/config.ts"],"names":[],"mappings":"AA+BA,gBAAgB;AAChB,MAAM,UAAU,aAAa,CAAC,MAAyB;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IACjD,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO;QACL,OAAO;QACP,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;AACJ,CAAC"}
@@ -7,6 +7,10 @@ export type HealthOptions = {
7
7
  * Matches OpenAPI `getHealth` degraded response.
8
8
  */
9
9
  readonly allowDegraded?: boolean;
10
+ /**
11
+ * When true, reject `service` values other than `NENE2` after a successful JSON parse (port / baseUrl mix-ups).
12
+ */
13
+ readonly strictService?: boolean;
10
14
  };
11
15
  /**
12
16
  * Typed NENE2 HTTP client (Phase 2 surface).
@@ -1 +1 @@
1
- {"version":3,"file":"create-nene2-client.d.ts","sourceRoot":"","sources":["../../src/client/create-nene2-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGpE,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAElD;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEzD;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAEhD;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAErC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEnC;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEtE;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1D;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtE;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAEnE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvD;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEnE;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAkDxE"}
1
+ {"version":3,"file":"create-nene2-client.d.ts","sourceRoot":"","sources":["../../src/client/create-nene2-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGpE,OAAO,EAML,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAElD;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEzD;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAEhD;;OAEG;IACH,IAAI,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAErC;;OAEG;IACH,KAAK,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEnC;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEtE;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1C;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE1D;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEtE;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAEnE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAExC;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEvD;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEnE;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErC;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAmDxE"}
@@ -1,3 +1,4 @@
1
+ import { finalizeHealthResponse } from './health.js';
1
2
  import { resolveConfig } from './config.js';
2
3
  import { withQuery } from './path.js';
3
4
  import { deleteNoContent, getJson, postJson, putJson } from './request.js';
@@ -17,11 +18,12 @@ export function createNene2Client(config) {
17
18
  const resolved = resolveConfig(config);
18
19
  return {
19
20
  frameworkSmoke: () => getJson(resolved, '/', isFrameworkSmokeResponse),
20
- health: (options) => {
21
- if (options?.allowDegraded) {
22
- return getJson(resolved, '/health', isHealthResponse, { alsoOkStatuses: [503] });
23
- }
24
- return getJson(resolved, '/health', isHealthResponse);
21
+ health: async (options) => {
22
+ const url = `${resolved.baseUrl}/health`;
23
+ const body = options?.allowDegraded
24
+ ? await getJson(resolved, '/health', isHealthResponse, { alsoOkStatuses: [503] })
25
+ : await getJson(resolved, '/health', isHealthResponse);
26
+ return finalizeHealthResponse(body, url, options?.strictService);
25
27
  },
26
28
  machineHealth: () => getJson(resolved, '/machine/health', isMachineHealthResponse),
27
29
  ping: () => getJson(resolved, '/examples/ping', isExamplePingResponse),
@@ -1 +1 @@
1
- {"version":3,"file":"create-nene2-client.js","sourceRoot":"","sources":["../../src/client/create-nene2-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-nene2-client.js","sourceRoot":"","sources":["../../src/client/create-nene2-client.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,6 @@ import type { ProblemDetailsDocument } from '../problem/types.js';
2
2
  /**
3
3
  * Error thrown when the NENE2 API returns a non-success HTTP status or an unexpected body.
4
4
  */
5
- /** Type guard for {@link Nene2ClientError}. */
6
- export declare function isNene2ClientError(error: unknown): error is Nene2ClientError;
7
5
  export declare class Nene2ClientError extends Error {
8
6
  readonly status: number;
9
7
  readonly problem: ProblemDetailsDocument | undefined;
@@ -14,4 +12,6 @@ export declare class Nene2ClientError extends Error {
14
12
  problem?: ProblemDetailsDocument | undefined;
15
13
  });
16
14
  }
15
+ /** Type guard for {@link Nene2ClientError}. */
16
+ export declare function isNene2ClientError(error: unknown): error is Nene2ClientError;
17
17
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE;;GAEG;AACH,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAGnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAA;KAAE;CAQzF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAGnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAA;KAAE;CAQzF;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E"}
@@ -1,10 +1,6 @@
1
1
  /**
2
2
  * Error thrown when the NENE2 API returns a non-success HTTP status or an unexpected body.
3
3
  */
4
- /** Type guard for {@link Nene2ClientError}. */
5
- export function isNene2ClientError(error) {
6
- return error instanceof Nene2ClientError;
7
- }
8
4
  export class Nene2ClientError extends Error {
9
5
  status;
10
6
  problem;
@@ -17,4 +13,8 @@ export class Nene2ClientError extends Error {
17
13
  this.problem = options.problem;
18
14
  }
19
15
  }
16
+ /** Type guard for {@link Nene2ClientError}. */
17
+ export function isNene2ClientError(error) {
18
+ return error instanceof Nene2ClientError;
19
+ }
20
20
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,+CAA+C;AAC/C,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,KAAK,YAAY,gBAAgB,CAAC;AAC3C,CAAC;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,MAAM,CAAS;IACf,OAAO,CAAqC;IAC5C,GAAG,CAAS;IAErB,YACE,OAAe,EACf,OAAsF;QAEtF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,MAAM,CAAS;IACf,OAAO,CAAqC;IAC5C,GAAG,CAAS;IAErB,YACE,OAAe,EACf,OAAsF;QAEtF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,KAAK,YAAY,gBAAgB,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { HealthResponse } from '../types/system.js';
2
+ /** Expected `service` value on NENE2 `GET /health` (OpenAPI). */
3
+ export declare const NENE2_HEALTH_SERVICE: "NENE2";
4
+ /**
5
+ * When `strictService` is true, reject bodies whose `service` is not {@link NENE2_HEALTH_SERVICE}.
6
+ * @internal
7
+ */
8
+ export declare function finalizeHealthResponse(body: HealthResponse, url: string, strictService: boolean | undefined): HealthResponse;
9
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/client/health.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,EAAG,OAAgB,CAAC;AAErD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,OAAO,GAAG,SAAS,GACjC,cAAc,CAQhB"}
@@ -0,0 +1,14 @@
1
+ import { Nene2ClientError } from './errors.js';
2
+ /** Expected `service` value on NENE2 `GET /health` (OpenAPI). */
3
+ export const NENE2_HEALTH_SERVICE = 'NENE2';
4
+ /**
5
+ * When `strictService` is true, reject bodies whose `service` is not {@link NENE2_HEALTH_SERVICE}.
6
+ * @internal
7
+ */
8
+ export function finalizeHealthResponse(body, url, strictService) {
9
+ if (strictService && body.service !== NENE2_HEALTH_SERVICE) {
10
+ throw new Nene2ClientError(`NENE2 health.service is "${body.service}", expected "${NENE2_HEALTH_SERVICE}" — check baseUrl / port (wrong stack on :8080?)`, { status: 200, url });
11
+ }
12
+ return body;
13
+ }
14
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/client/health.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,iEAAiE;AACjE,MAAM,CAAC,MAAM,oBAAoB,GAAG,OAAgB,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,IAAoB,EACpB,GAAW,EACX,aAAkC;IAElC,IAAI,aAAa,IAAI,IAAI,CAAC,OAAO,KAAK,oBAAoB,EAAE,CAAC;QAC3D,MAAM,IAAI,gBAAgB,CACxB,4BAA4B,IAAI,CAAC,OAAO,gBAAgB,oBAAoB,kDAAkD,EAC9H,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CACrB,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,4 +1,7 @@
1
1
  import type { ResolvedNene2ClientConfig } from './config.js';
2
+ import { Nene2ClientError } from './errors.js';
3
+ /** @internal Wrap fetch failures so consumers can use isNene2ClientError uniformly. */
4
+ export declare function wrapFetchError(error: unknown, url: string): Nene2ClientError;
2
5
  export declare function buildAuthHeaders(config: ResolvedNene2ClientConfig): Headers;
3
6
  export type JsonRequestOptions = {
4
7
  /** HTTP status codes to treat as success (e.g. 503 degraded health). */
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/client/request.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAS7D,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAS3E;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C,CAAC;AAwDF;;GAEG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,EACvC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,EACvC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAWZ;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,EACvC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAWZ;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAQf"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/client/request.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAW/C,uFAAuF;AACvF,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAY5E;AAcD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAS3E;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wEAAwE;IACxE,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C,CAAC;AAwDF;;GAEG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,EACvC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,CAAC,CAAC,CASZ;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,EACvC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,CAAC,EACvC,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAQf"}
@@ -1,10 +1,33 @@
1
1
  import { parseProblemDetailsResponse } from '../problem/guards.js';
2
2
  import { Nene2ClientError } from './errors.js';
3
+ import { mergeRequestSignal } from './signal.js';
3
4
  function withSignal(config, init) {
4
- if (config.signal === undefined) {
5
+ const signal = mergeRequestSignal(config.signal, config.timeoutMs);
6
+ if (signal === undefined) {
5
7
  return init;
6
8
  }
7
- return { ...init, signal: config.signal };
9
+ return { ...init, signal };
10
+ }
11
+ /** @internal Wrap fetch failures so consumers can use isNene2ClientError uniformly. */
12
+ export function wrapFetchError(error, url) {
13
+ if (error instanceof Nene2ClientError) {
14
+ return error;
15
+ }
16
+ if (error instanceof Error) {
17
+ const prefix = error.name === 'AbortError' || error.name === 'TimeoutError'
18
+ ? 'NENE2 request aborted or timed out'
19
+ : 'NENE2 network request failed';
20
+ return new Nene2ClientError(`${prefix}: ${error.message}`, { status: 0, url });
21
+ }
22
+ return new Nene2ClientError('NENE2 network request failed', { status: 0, url });
23
+ }
24
+ async function fetchRequest(config, url, init) {
25
+ try {
26
+ return await config.fetch(url, withSignal(config, init));
27
+ }
28
+ catch (error) {
29
+ throw wrapFetchError(error, url);
30
+ }
8
31
  }
9
32
  export function buildAuthHeaders(config) {
10
33
  const headers = new Headers({ Accept: 'application/json' });
@@ -62,7 +85,10 @@ async function throwOnErrorResponse(response, url, options) {
62
85
  */
63
86
  export async function getJson(config, path, isValid, options) {
64
87
  const url = `${config.baseUrl}${path}`;
65
- const response = await config.fetch(url, withSignal(config, { method: 'GET', headers: buildAuthHeaders(config) }));
88
+ const response = await fetchRequest(config, url, {
89
+ method: 'GET',
90
+ headers: buildAuthHeaders(config),
91
+ });
66
92
  await throwOnErrorResponse(response, url, options);
67
93
  return parseJsonBody(response, url, isValid);
68
94
  }
@@ -73,7 +99,11 @@ export async function postJson(config, path, payload, isValid, options) {
73
99
  const url = `${config.baseUrl}${path}`;
74
100
  const headers = buildAuthHeaders(config);
75
101
  headers.set('Content-Type', 'application/json');
76
- const response = await config.fetch(url, withSignal(config, { method: 'POST', headers, body: JSON.stringify(payload) }));
102
+ const response = await fetchRequest(config, url, {
103
+ method: 'POST',
104
+ headers,
105
+ body: JSON.stringify(payload),
106
+ });
77
107
  await throwOnErrorResponse(response, url, options);
78
108
  return parseJsonBody(response, url, isValid);
79
109
  }
@@ -84,7 +114,11 @@ export async function putJson(config, path, payload, isValid, options) {
84
114
  const url = `${config.baseUrl}${path}`;
85
115
  const headers = buildAuthHeaders(config);
86
116
  headers.set('Content-Type', 'application/json');
87
- const response = await config.fetch(url, withSignal(config, { method: 'PUT', headers, body: JSON.stringify(payload) }));
117
+ const response = await fetchRequest(config, url, {
118
+ method: 'PUT',
119
+ headers,
120
+ body: JSON.stringify(payload),
121
+ });
88
122
  await throwOnErrorResponse(response, url, options);
89
123
  return parseJsonBody(response, url, isValid);
90
124
  }
@@ -93,7 +127,10 @@ export async function putJson(config, path, payload, isValid, options) {
93
127
  */
94
128
  export async function deleteNoContent(config, path, options) {
95
129
  const url = `${config.baseUrl}${path}`;
96
- const response = await config.fetch(url, withSignal(config, { method: 'DELETE', headers: buildAuthHeaders(config) }));
130
+ const response = await fetchRequest(config, url, {
131
+ method: 'DELETE',
132
+ headers: buildAuthHeaders(config),
133
+ });
97
134
  await throwOnErrorResponse(response, url, options);
98
135
  }
99
136
  //# sourceMappingURL=request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/client/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/client/request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Per-request AbortSignal: user `signal` plus optional `timeoutMs` (AbortSignal.timeout).
3
+ * @internal
4
+ */
5
+ export declare function mergeRequestSignal(userSignal: AbortSignal | undefined, timeoutMs: number | undefined): AbortSignal | undefined;
6
+ //# sourceMappingURL=signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/client/signal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,WAAW,GAAG,SAAS,EACnC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,WAAW,GAAG,SAAS,CAgCzB"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Per-request AbortSignal: user `signal` plus optional `timeoutMs` (AbortSignal.timeout).
3
+ * @internal
4
+ */
5
+ export function mergeRequestSignal(userSignal, timeoutMs) {
6
+ const parts = [];
7
+ if (userSignal !== undefined) {
8
+ parts.push(userSignal);
9
+ }
10
+ if (timeoutMs !== undefined) {
11
+ if (timeoutMs <= 0) {
12
+ throw new Error('Nene2ClientConfig.timeoutMs must be positive');
13
+ }
14
+ parts.push(AbortSignal.timeout(timeoutMs));
15
+ }
16
+ if (parts.length === 0) {
17
+ return undefined;
18
+ }
19
+ if (parts.length === 1) {
20
+ return parts[0];
21
+ }
22
+ const controller = new AbortController();
23
+ const abortFromParts = () => {
24
+ controller.abort();
25
+ };
26
+ for (const part of parts) {
27
+ if (part.aborted) {
28
+ abortFromParts();
29
+ return controller.signal;
30
+ }
31
+ part.addEventListener('abort', abortFromParts, { once: true });
32
+ }
33
+ return controller.signal;
34
+ }
35
+ //# sourceMappingURL=signal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/client/signal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAmC,EACnC,SAA6B;IAE7B,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,GAAS,EAAE;QAChC,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,OAAO,UAAU,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -6,7 +6,7 @@ export declare const NENE2_CLIENT_PACKAGE: "@hideyukimori/nene2-client";
6
6
  export { NENE2_PROBLEM_TYPE_VALIDATION_FAILED, isNene2ValidationFailedProblem, isNene2ValidationFailedType, isProblemDetails, isValidationError, isValidationProblemDetails, parseProblemDetails, parseProblemDetailsResponse, parseValidationProblemDetails, problemDetailsExtensions, } from './problem/index.js';
7
7
  export type { ProblemDetails, ProblemDetailsDocument, ValidationError, ValidationProblemDetails, ValidationProblemDetailsDocument, } from './problem/index.js';
8
8
  export { createNene2Client, isNene2ClientError, Nene2ClientError, validationErrorsByField, validationErrorsFromClientError, type HealthOptions, type Nene2Client, type Nene2ClientConfig, } from './client/index.js';
9
- export type { OpenApiSchemas } from './types/schemas.js';
9
+ export type { OpenApiPaths, OpenApiSchemas } from './types/schemas.js';
10
10
  export type { CreateNoteRequest, CreateTagRequest, ExampleNote, ExampleNoteListResponse, ExamplePingResponse, ExampleTag, ExampleTagListResponse, FrameworkSmokeResponse, HealthResponse, HealthStatus, ListNotesParams, ListTagsParams, MachineHealthResponse, ProtectedResponse, SmokeCheckResult, } from './types/index.js';
11
11
  export { isCreateNoteRequest, isCreateTagRequest, isExampleNoteListResponse, isExampleNoteResponse, isExamplePingResponse, isExampleTagListResponse, isExampleTagResponse, isFrameworkSmokeResponse, isHealthResponse, isMachineHealthResponse, isProtectedResponse, } from './types/index.js';
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAG,4BAAqC,CAAC;AAE1E,OAAO,EACL,oCAAoC,EACpC,8BAA8B,EAC9B,2BAA2B,EAC3B,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC3B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,+BAA+B,EAC/B,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAG,4BAAqC,CAAC;AAE1E,OAAO,EACL,oCAAoC,EACpC,8BAA8B,EAC9B,2BAA2B,EAC3B,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC3B,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,wBAAwB,EACxB,gCAAgC,GACjC,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,+BAA+B,EAC/B,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC"}
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * OpenAPI component schema aliases (ADR 0006). Source: src/generated/openapi.ts
3
3
  */
4
- import type { components } from '../generated/openapi.js';
4
+ import type { components, paths } from '../generated/openapi.js';
5
5
  export type OpenApiSchemas = components['schemas'];
6
+ /** OpenAPI path map (advanced consumers, ADR 0006). */
7
+ export type OpenApiPaths = paths;
6
8
  export type ProblemDetails = OpenApiSchemas['ProblemDetails'];
7
9
  export type ValidationError = OpenApiSchemas['ValidationError'];
8
10
  export type ValidationProblemDetails = OpenApiSchemas['ValidationProblemDetails'];
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/types/schemas.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAC9D,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAChE,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,0BAA0B,CAAC,CAAC;AAElF,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AACpD,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;AACpE,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAChE,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,yBAAyB,CAAC,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAC9D,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;AAE9E,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/types/schemas.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AAEnD,uDAAuD;AACvD,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC;AAEjC,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAC9D,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC;AAChE,MAAM,MAAM,wBAAwB,GAAG,cAAc,CAAC,0BAA0B,CAAC,CAAC;AAElF,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAC9D,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AACpD,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAExE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;AACpE,MAAM,MAAM,WAAW,GAAG,cAAc,CAAC,qBAAqB,CAAC,CAAC;AAChE,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC,yBAAyB,CAAC,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,kBAAkB,CAAC,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC,oBAAoB,CAAC,CAAC;AAC9D,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;AAE9E,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hideyukimori/nene2-client",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "TypeScript client ecosystem for NENE2 JSON APIs (OpenAPI-aligned)",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -41,7 +41,7 @@
41
41
  "test": "vitest run",
42
42
  "test:ft-marathon": "vitest run tests/field-trials/ft-marathon.test.ts",
43
43
  "ft:reports": "node tools/ft-marathon/write-reports.mjs",
44
- "ft:marathon": "npm run test:ft-marathon && npm run ft:reports",
44
+ "ft:marathon": "npm run test:ft-marathon && npm run ft:reports && npm run format:fix -- \"docs/field-trials/**/*.md\"",
45
45
  "contracts:sync": "node tools/sync-openapi.mjs",
46
46
  "contracts:check": "node tools/sync-openapi.mjs --check",
47
47
  "codegen": "node tools/codegen-openapi.mjs",
@@ -49,7 +49,11 @@
49
49
  "build": "tsc -p tsconfig.build.json",
50
50
  "pack:smoke": "node tools/smoke-pack.mjs",
51
51
  "prepublishOnly": "npm run build",
52
- "check": "npm run type-check && npm run lint && npm run format && npm run contracts:check && npm run codegen:check && npm run build && npm run test && npm run pack:smoke"
52
+ "check": "npm run type-check && npm run lint && npm run format && npm run contracts:check && npm run codegen:check && npm run build && npm run test && npm run pack:smoke",
53
+ "docs:dev": "vitepress dev --port 5175",
54
+ "docs:build": "vitepress build",
55
+ "docs:preview": "vitepress preview --port 5175",
56
+ "verify:backends": "bash scripts/verify-backends.sh"
53
57
  },
54
58
  "keywords": [
55
59
  "nene2",
@@ -66,6 +70,7 @@
66
70
  "prettier": "^3.8.1",
67
71
  "typescript": "^5.9.3",
68
72
  "typescript-eslint": "^8.59.3",
73
+ "vitepress": "^1.6.4",
69
74
  "vitest": "^4.0.18"
70
75
  }
71
76
  }