@hideyukimori/nene2-client 0.1.2 → 0.1.4

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
@@ -30,7 +30,7 @@ See [docs/scope.md](docs/scope.md) for the full in-scope / out-of-scope matrix.
30
30
  ## Install (npm)
31
31
 
32
32
  ```bash
33
- npm install @hideyukimori/nene2-client
33
+ npm install @hideyukimori/nene2-client@0.1.2
34
34
  ```
35
35
 
36
36
  Requires **Node 22+** (native `fetch`) or a browser with `fetch`. TypeScript consumers get `.d.ts` from the package.
@@ -104,15 +104,18 @@ curl -sS http://localhost:8080/health | jq .
104
104
  # expect: { "status": "ok", "service": "NENE2" }
105
105
  ```
106
106
 
107
+ Or in TypeScript: `await client.health({ strictService: true })` rejects wrong `service` values.
108
+
107
109
  If you see a different JSON wrapper, point `NENE2_JS_API_BASE_URL` at a running NENE2 PHP instance (sibling `../NENE2`).
108
110
 
109
111
  **Multi-backend live smoke** (same client, OpenAPI contract — see [ADR 0003](docs/adr/0003-multi-backend-live-verification.md)):
110
112
 
111
113
  ```bash
112
- export NENE2_JS_API_BASE_URL=http://localhost:8080 # NENE2 PHP
113
- export NENE2_JS_PYTHON_BASE_URL=http://localhost:8000 # optional: nene2-python
114
- # 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
115
117
 
118
+ npm run verify:backends # curl /health, /examples/ping, /examples/notes
116
119
  npm test -- tests/client/live-smoke-matrix.test.ts
117
120
  ```
118
121
 
@@ -134,7 +137,7 @@ Work is **GitHub Issue driven**. Read [docs/CONTRIBUTING.md](docs/CONTRIBUTING.m
134
137
 
135
138
  AI agents: start at [AGENTS.md](AGENTS.md).
136
139
 
137
- 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).
138
141
 
139
142
  **Release:** [docs/development/publish.md](docs/development/publish.md) · Phase history: [docs/phase-2.md](docs/phase-2.md).
140
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"}
@@ -1,17 +1,22 @@
1
1
  import type { ProblemDetailsDocument } from '../problem/types.js';
2
+ import type { RateLimitInfo } from './rate-limit.js';
3
+ export type { RateLimitInfo } from './rate-limit.js';
2
4
  /**
3
5
  * Error thrown when the NENE2 API returns a non-success HTTP status or an unexpected body.
4
6
  */
5
- /** Type guard for {@link Nene2ClientError}. */
6
- export declare function isNene2ClientError(error: unknown): error is Nene2ClientError;
7
7
  export declare class Nene2ClientError extends Error {
8
8
  readonly status: number;
9
9
  readonly problem: ProblemDetailsDocument | undefined;
10
10
  readonly url: string;
11
+ /** Present when the response included Retry-After or X-RateLimit-* headers. */
12
+ readonly rateLimit: RateLimitInfo | undefined;
11
13
  constructor(message: string, options: {
12
14
  status: number;
13
15
  url: string;
14
16
  problem?: ProblemDetailsDocument | undefined;
17
+ rateLimit?: RateLimitInfo | undefined;
15
18
  });
16
19
  }
20
+ /** Type guard for {@link Nene2ClientError}. */
21
+ export declare function isNene2ClientError(error: unknown): error is Nene2ClientError;
17
22
  //# 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;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD;;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;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,SAAS,CAAC;gBAG5C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAC;QAC7C,SAAS,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;KACvC;CASJ;AAED,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E"}
@@ -1,20 +1,23 @@
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;
11
7
  url;
8
+ /** Present when the response included Retry-After or X-RateLimit-* headers. */
9
+ rateLimit;
12
10
  constructor(message, options) {
13
11
  super(message);
14
12
  this.name = 'Nene2ClientError';
15
13
  this.status = options.status;
16
14
  this.url = options.url;
17
15
  this.problem = options.problem;
16
+ this.rateLimit = options.rateLimit;
18
17
  }
19
18
  }
19
+ /** Type guard for {@link Nene2ClientError}. */
20
+ export function isNene2ClientError(error) {
21
+ return error instanceof Nene2ClientError;
22
+ }
20
23
  //# 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":"AAKA;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,MAAM,CAAS;IACf,OAAO,CAAqC;IAC5C,GAAG,CAAS;IACrB,+EAA+E;IACtE,SAAS,CAA4B;IAE9C,YACE,OAAe,EACf,OAKC;QAED,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;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,KAAK,YAAY,gBAAgB,CAAC;AAC3C,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export { createNene2Client, type Nene2Client, type HealthOptions } from './create-nene2-client.js';
2
- export { isNene2ClientError, Nene2ClientError } from './errors.js';
2
+ export { isNene2ClientError, Nene2ClientError, type RateLimitInfo } from './errors.js';
3
+ export { parseRateLimitHeaders } from './rate-limit.js';
3
4
  export type { Nene2ClientConfig } from './config.js';
4
5
  export { validationErrorsByField, validationErrorsFromClientError } from './validation-errors.js';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACnE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { createNene2Client } from './create-nene2-client.js';
2
2
  export { isNene2ClientError, Nene2ClientError } from './errors.js';
3
+ export { parseRateLimitHeaders } from './rate-limit.js';
3
4
  export { validationErrorsByField, validationErrorsFromClientError } from './validation-errors.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwC,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEnE,OAAO,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwC,MAAM,0BAA0B,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAsB,MAAM,aAAa,CAAC;AACvF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** Rate-limit metadata from HTTP response headers (OpenAPI TooManyRequests). */
2
+ export type RateLimitInfo = {
3
+ readonly retryAfterSeconds?: number;
4
+ readonly limit?: number;
5
+ readonly remaining?: number;
6
+ readonly reset?: number;
7
+ };
8
+ /** Parse Retry-After and X-RateLimit-* from a response. Returns undefined when absent. */
9
+ export declare function parseRateLimitHeaders(headers: Headers): RateLimitInfo | undefined;
10
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/client/rate-limit.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAUF,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAqBjF"}
@@ -0,0 +1,27 @@
1
+ function parseHeaderInt(value) {
2
+ if (value === null || value.trim() === '') {
3
+ return undefined;
4
+ }
5
+ const parsed = Number(value);
6
+ return Number.isFinite(parsed) ? parsed : undefined;
7
+ }
8
+ /** Parse Retry-After and X-RateLimit-* from a response. Returns undefined when absent. */
9
+ export function parseRateLimitHeaders(headers) {
10
+ const retryAfterSeconds = parseHeaderInt(headers.get('Retry-After'));
11
+ const limit = parseHeaderInt(headers.get('X-RateLimit-Limit'));
12
+ const remaining = parseHeaderInt(headers.get('X-RateLimit-Remaining'));
13
+ const reset = parseHeaderInt(headers.get('X-RateLimit-Reset'));
14
+ if (retryAfterSeconds === undefined &&
15
+ limit === undefined &&
16
+ remaining === undefined &&
17
+ reset === undefined) {
18
+ return undefined;
19
+ }
20
+ return {
21
+ ...(retryAfterSeconds !== undefined ? { retryAfterSeconds } : {}),
22
+ ...(limit !== undefined ? { limit } : {}),
23
+ ...(remaining !== undefined ? { remaining } : {}),
24
+ ...(reset !== undefined ? { reset } : {}),
25
+ };
26
+ }
27
+ //# sourceMappingURL=rate-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/client/rate-limit.ts"],"names":[],"mappings":"AAQA,SAAS,cAAc,CAAC,KAAoB;IAC1C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,iBAAiB,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE/D,IACE,iBAAiB,KAAK,SAAS;QAC/B,KAAK,KAAK,SAAS;QACnB,SAAS,KAAK,SAAS;QACvB,KAAK,KAAK,SAAS,EACnB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC;AACJ,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;AA0B/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;AA8CF;;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,42 @@
1
1
  import { parseProblemDetailsResponse } from '../problem/guards.js';
2
2
  import { Nene2ClientError } from './errors.js';
3
+ import { parseRateLimitHeaders } from './rate-limit.js';
4
+ import { mergeRequestSignal } from './signal.js';
5
+ function errorFromResponse(message, response, url, problem) {
6
+ return new Nene2ClientError(message, {
7
+ status: response.status,
8
+ url,
9
+ problem,
10
+ rateLimit: parseRateLimitHeaders(response.headers),
11
+ });
12
+ }
3
13
  function withSignal(config, init) {
4
- if (config.signal === undefined) {
14
+ const signal = mergeRequestSignal(config.signal, config.timeoutMs);
15
+ if (signal === undefined) {
5
16
  return init;
6
17
  }
7
- return { ...init, signal: config.signal };
18
+ return { ...init, signal };
19
+ }
20
+ /** @internal Wrap fetch failures so consumers can use isNene2ClientError uniformly. */
21
+ export function wrapFetchError(error, url) {
22
+ if (error instanceof Nene2ClientError) {
23
+ return error;
24
+ }
25
+ if (error instanceof Error) {
26
+ const prefix = error.name === 'AbortError' || error.name === 'TimeoutError'
27
+ ? 'NENE2 request aborted or timed out'
28
+ : 'NENE2 network request failed';
29
+ return new Nene2ClientError(`${prefix}: ${error.message}`, { status: 0, url });
30
+ }
31
+ return new Nene2ClientError('NENE2 network request failed', { status: 0, url });
32
+ }
33
+ async function fetchRequest(config, url, init) {
34
+ try {
35
+ return await config.fetch(url, withSignal(config, init));
36
+ }
37
+ catch (error) {
38
+ throw wrapFetchError(error, url);
39
+ }
8
40
  }
9
41
  export function buildAuthHeaders(config) {
10
42
  const headers = new Headers({ Accept: 'application/json' });
@@ -32,16 +64,10 @@ async function parseJsonBody(response, url, isValid) {
32
64
  const hint = contentType.includes('text/html') || contentType.includes('text/plain')
33
65
  ? ' — response looks like HTML/text; check baseUrl points at NENE2 JSON API'
34
66
  : '';
35
- throw new Nene2ClientError(`NENE2 response is not valid JSON${hint}`, {
36
- status: response.status,
37
- url,
38
- });
67
+ throw errorFromResponse(`NENE2 response is not valid JSON${hint}`, response, url);
39
68
  }
40
69
  if (!isValid(body)) {
41
- throw new Nene2ClientError('NENE2 response body does not match expected shape', {
42
- status: response.status,
43
- url,
44
- });
70
+ throw errorFromResponse('NENE2 response body does not match expected shape', response, url);
45
71
  }
46
72
  return body;
47
73
  }
@@ -51,18 +77,17 @@ async function throwOnErrorResponse(response, url, options) {
51
77
  }
52
78
  const problem = await parseProblemDetailsResponse(response);
53
79
  const detail = problem?.detail ?? problem?.title ?? response.statusText;
54
- throw new Nene2ClientError(`NENE2 request failed: ${detail}`, {
55
- status: response.status,
56
- url,
57
- problem,
58
- });
80
+ throw errorFromResponse(`NENE2 request failed: ${detail}`, response, url, problem);
59
81
  }
60
82
  /**
61
83
  * GET JSON and validate the body with a type guard. Throws {@link Nene2ClientError} on failure.
62
84
  */
63
85
  export async function getJson(config, path, isValid, options) {
64
86
  const url = `${config.baseUrl}${path}`;
65
- const response = await config.fetch(url, withSignal(config, { method: 'GET', headers: buildAuthHeaders(config) }));
87
+ const response = await fetchRequest(config, url, {
88
+ method: 'GET',
89
+ headers: buildAuthHeaders(config),
90
+ });
66
91
  await throwOnErrorResponse(response, url, options);
67
92
  return parseJsonBody(response, url, isValid);
68
93
  }
@@ -73,7 +98,11 @@ export async function postJson(config, path, payload, isValid, options) {
73
98
  const url = `${config.baseUrl}${path}`;
74
99
  const headers = buildAuthHeaders(config);
75
100
  headers.set('Content-Type', 'application/json');
76
- const response = await config.fetch(url, withSignal(config, { method: 'POST', headers, body: JSON.stringify(payload) }));
101
+ const response = await fetchRequest(config, url, {
102
+ method: 'POST',
103
+ headers,
104
+ body: JSON.stringify(payload),
105
+ });
77
106
  await throwOnErrorResponse(response, url, options);
78
107
  return parseJsonBody(response, url, isValid);
79
108
  }
@@ -84,7 +113,11 @@ export async function putJson(config, path, payload, isValid, options) {
84
113
  const url = `${config.baseUrl}${path}`;
85
114
  const headers = buildAuthHeaders(config);
86
115
  headers.set('Content-Type', 'application/json');
87
- const response = await config.fetch(url, withSignal(config, { method: 'PUT', headers, body: JSON.stringify(payload) }));
116
+ const response = await fetchRequest(config, url, {
117
+ method: 'PUT',
118
+ headers,
119
+ body: JSON.stringify(payload),
120
+ });
88
121
  await throwOnErrorResponse(response, url, options);
89
122
  return parseJsonBody(response, url, isValid);
90
123
  }
@@ -93,7 +126,10 @@ export async function putJson(config, path, payload, isValid, options) {
93
126
  */
94
127
  export async function deleteNoContent(config, path, options) {
95
128
  const url = `${config.baseUrl}${path}`;
96
- const response = await config.fetch(url, withSignal(config, { method: 'DELETE', headers: buildAuthHeaders(config) }));
129
+ const response = await fetchRequest(config, url, {
130
+ method: 'DELETE',
131
+ headers: buildAuthHeaders(config),
132
+ });
97
133
  await throwOnErrorResponse(response, url, options);
98
134
  }
99
135
  //# 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
@@ -5,8 +5,8 @@
5
5
  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
- export { createNene2Client, isNene2ClientError, Nene2ClientError, validationErrorsByField, validationErrorsFromClientError, type HealthOptions, type Nene2Client, type Nene2ClientConfig, } from './client/index.js';
9
- export type { OpenApiSchemas } from './types/schemas.js';
8
+ export { createNene2Client, isNene2ClientError, Nene2ClientError, parseRateLimitHeaders, validationErrorsByField, validationErrorsFromClientError, type HealthOptions, type Nene2Client, type Nene2ClientConfig, type RateLimitInfo, } from './client/index.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,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,EAC/B,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,aAAa,GACnB,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"}
package/dist/index.js CHANGED
@@ -4,6 +4,6 @@
4
4
  */
5
5
  export 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
- export { createNene2Client, isNene2ClientError, Nene2ClientError, validationErrorsByField, validationErrorsFromClientError, } from './client/index.js';
7
+ export { createNene2Client, isNene2ClientError, Nene2ClientError, parseRateLimitHeaders, validationErrorsByField, validationErrorsFromClientError, } from './client/index.js';
8
8
  export { isCreateNoteRequest, isCreateTagRequest, isExampleNoteListResponse, isExampleNoteResponse, isExamplePingResponse, isExampleTagListResponse, isExampleTagResponse, isFrameworkSmokeResponse, isHealthResponse, isMachineHealthResponse, isProtectedResponse, } from './types/index.js';
9
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,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;AAS5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,+BAA+B,GAIhC,MAAM,mBAAmB,CAAC;AAmB3B,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.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,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;AAS5B,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,uBAAuB,EACvB,+BAA+B,GAKhC,MAAM,mBAAmB,CAAC;AAmB3B,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.2",
3
+ "version": "0.1.4",
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",
@@ -52,7 +52,8 @@
52
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
53
  "docs:dev": "vitepress dev --port 5175",
54
54
  "docs:build": "vitepress build",
55
- "docs:preview": "vitepress preview --port 5175"
55
+ "docs:preview": "vitepress preview --port 5175",
56
+ "verify:backends": "bash scripts/verify-backends.sh"
56
57
  },
57
58
  "keywords": [
58
59
  "nene2",