@xemahq/space-registry-internal-api-client 0.2.12 → 0.2.18

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.
@@ -223,14 +223,66 @@ const customFetch = async (url, options) => {
223
223
  }
224
224
  };
225
225
  exports.customFetch = customFetch;
226
- async function parseBody(response) {
227
- const contentType = response.headers.get('content-type');
228
- if (contentType?.includes('application/json')) {
229
- return response.json();
226
+ /**
227
+ * Does this media type carry JSON?
228
+ *
229
+ * ── THE OUTAGE THIS FIXES ────────────────────────────────────────────────
230
+ *
231
+ * This used to be `contentType?.includes('application/json')`, and EVERY error
232
+ * this fleet returns failed that test. The platform's `GlobalExceptionFilter`
233
+ * emits RFC 9457 problem documents and sets the media type explicitly —
234
+ * `.type(PROBLEM_DETAILS_CONTENT_TYPE)` before `.json()`, so it cannot be
235
+ * overridden — and that constant is `application/problem+json`, which does NOT
236
+ * contain the substring `application/json`: after `application/` comes
237
+ * `problem+json`.
238
+ *
239
+ * So every non-2xx body fell through to `response.text()` and reached the
240
+ * caller as an UNPARSED STRING. `ClientError.body` is typed `unknown`, so
241
+ * nothing complained; every consumer that reads a machine-readable code off an
242
+ * error — `error.body.code`, `error.body.details.code` — silently read
243
+ * `undefined` instead, for every error, in every service.
244
+ *
245
+ * Measured in production on 2026-09-15: skill-registry-api's
246
+ * `resolveOrNull()` absorbs `RELEASE_CHANNEL_NOT_FOUND` into `null` by exactly
247
+ * that read. With the code unreadable the absorb never fired, a routine "no
248
+ * pointer on this channel" 404 became a 500 on `GET /skills` and
249
+ * `GET /describe-objects`, and agent-session-api's `apply_control_bundle` step
250
+ * aborted EVERY session launch in the organisation — 7,871 failed resolutions
251
+ * an hour. A fix written for that exact page months earlier was present in the
252
+ * running image and could not help, because the classifier it repaired was
253
+ * being handed a string.
254
+ *
255
+ * ── WHY THE STRUCTURED SUFFIX, NOT A SECOND SUBSTRING ────────────────────
256
+ *
257
+ * Adding `|| includes('application/problem+json')` would fix this one media
258
+ * type and leave the next one — `application/vnd.api+json`, and anything else
259
+ * a service legitimately emits. RFC 6839 defines `+json` as the structured
260
+ * syntax suffix meaning "this is JSON"; that is the actual rule, so it is the
261
+ * rule implemented. Parameters are stripped first, because
262
+ * `application/problem+json; charset=utf-8` is the same media type.
263
+ */
264
+ function isJsonMediaType(contentType) {
265
+ if (contentType === null) {
266
+ return false;
230
267
  }
268
+ const essence = contentType.split(';')[0]?.trim().toLowerCase() ?? '';
269
+ return essence === 'application/json' || essence.endsWith('+json');
270
+ }
271
+ async function parseBody(response) {
272
+ // 204 FIRST, and deliberately — this ORDER is carried from `develop`, which
273
+ // fixed the same defect independently and got this half right where `main`
274
+ // did not. A 204 carries no body, so `response.json()` on one throws
275
+ // SyntaxError; and a 204 whose headers STILL declare a JSON content type is
276
+ // ordinary, because the framework sets the header before the handler returns
277
+ // nothing. With the JSON branch first, a documented `undefined` becomes a
278
+ // thrown parse error. Pinned by a case in `transport-problem-json.test.cjs`.
231
279
  if (response.status === 204) {
232
280
  return undefined;
233
281
  }
282
+ const contentType = response.headers.get('content-type');
283
+ if (isJsonMediaType(contentType)) {
284
+ return response.json();
285
+ }
234
286
  return response.text();
235
287
  }
236
288
  function parseRetryAfter(value) {
@@ -3,6 +3,6 @@
3
3
  * Space Registry API
4
4
  * OpenAPI spec version: 0.1.0
5
5
  */
6
- import type { SpaceItemPublishCapabilityRequestDto } from '../../models';
6
+ import type { SpaceItemPublishCapabilityRequestDto, SpaceItemPublishCapabilityResponseDto } from '../../models';
7
7
  export declare const getSpaceItemPublishCapabilityControllerSpaceItemPublishUrl: () => string;
8
- export declare const spaceItemPublishCapabilityControllerSpaceItemPublish: (spaceItemPublishCapabilityRequestDto: SpaceItemPublishCapabilityRequestDto, options?: RequestInit) => Promise<void>;
8
+ export declare const spaceItemPublishCapabilityControllerSpaceItemPublish: (spaceItemPublishCapabilityRequestDto: SpaceItemPublishCapabilityRequestDto, options?: RequestInit) => Promise<SpaceItemPublishCapabilityResponseDto>;
@@ -6,7 +6,10 @@
6
6
  import type { CreateSpaceDtoLabels } from './createSpaceDtoLabels.js';
7
7
  import type { DataClassification } from './dataClassification.js';
8
8
  export interface CreateSpaceDto {
9
- /** Canonical xema:// Space URI to create. */
9
+ /**
10
+ * Canonical xema:// Space URI to create.
11
+ * @pattern /^xema:\/\//
12
+ */
10
13
  ref: string;
11
14
  /** Human-readable label for this Space. */
12
15
  displayName: string;
@@ -1,12 +1,10 @@
1
1
  export * from './createSpaceDto';
2
2
  export * from './createSpaceDtoLabels';
3
3
  export * from './dataClassification';
4
- export * from './errorDetailsDto';
5
- export * from './errorDetailsDtoDetails';
6
- export * from './errorPayloadDto';
7
- export * from './errorResponseDto';
8
4
  export * from './internalResourceRolesControllerUnsetParams';
9
5
  export * from './internalSpacesControllerClassificationOverridesParams';
6
+ export * from './problemDetailsDto';
7
+ export * from './problemFieldIssueDto';
10
8
  export * from './resourceRoleBindingResponseDto';
11
9
  export * from './resourceRoleBindingResponseDtoDataEnvelope';
12
10
  export * from './resourceRoleBindingResponseDtoTarget';
@@ -19,5 +17,6 @@ export * from './spaceDto';
19
17
  export * from './spaceDtoDataEnvelope';
20
18
  export * from './spaceDtoLabels';
21
19
  export * from './spaceItemPublishCapabilityRequestDto';
20
+ export * from './spaceItemPublishCapabilityResponseDto';
22
21
  export * from './spaceKind';
23
22
  export * from './updateClassificationDto';
@@ -18,12 +18,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
18
18
  __exportStar(require("./createSpaceDto"), exports);
19
19
  __exportStar(require("./createSpaceDtoLabels"), exports);
20
20
  __exportStar(require("./dataClassification"), exports);
21
- __exportStar(require("./errorDetailsDto"), exports);
22
- __exportStar(require("./errorDetailsDtoDetails"), exports);
23
- __exportStar(require("./errorPayloadDto"), exports);
24
- __exportStar(require("./errorResponseDto"), exports);
25
21
  __exportStar(require("./internalResourceRolesControllerUnsetParams"), exports);
26
22
  __exportStar(require("./internalSpacesControllerClassificationOverridesParams"), exports);
23
+ __exportStar(require("./problemDetailsDto"), exports);
24
+ __exportStar(require("./problemFieldIssueDto"), exports);
27
25
  __exportStar(require("./resourceRoleBindingResponseDto"), exports);
28
26
  __exportStar(require("./resourceRoleBindingResponseDtoDataEnvelope"), exports);
29
27
  __exportStar(require("./resourceRoleBindingResponseDtoTarget"), exports);
@@ -36,5 +34,6 @@ __exportStar(require("./spaceDto"), exports);
36
34
  __exportStar(require("./spaceDtoDataEnvelope"), exports);
37
35
  __exportStar(require("./spaceDtoLabels"), exports);
38
36
  __exportStar(require("./spaceItemPublishCapabilityRequestDto"), exports);
37
+ __exportStar(require("./spaceItemPublishCapabilityResponseDto"), exports);
39
38
  __exportStar(require("./spaceKind"), exports);
40
39
  __exportStar(require("./updateClassificationDto"), exports);
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Generated by @xemahq/api-client-generator — do not edit manually.
3
+ * Space Registry API
4
+ * OpenAPI spec version: 0.1.0
5
+ */
6
+ import type { ProblemFieldIssueDto } from './problemFieldIssueDto.js';
7
+ /**
8
+ * RFC 9457 problem document. The declared members are the reserved core; extension members are TOP-LEVEL and OPEN, owned by the refusing plane.
9
+ */
10
+ export interface ProblemDetailsDto {
11
+ /** Absolute URI identifying the refusal TYPE. Derived one-to-one from `code`, so a caller may branch on either and can never be told two different things. Never `about:blank`. */
12
+ type: string;
13
+ /** Short, human-readable, and STABLE for a given `type`. Never per-occurrence — that is `detail`. */
14
+ title: string;
15
+ /** The HTTP status code, repeated in the body so a logged document is self-contained. */
16
+ status: number;
17
+ /** SCREAMING_SNAKE_CASE. The machine-branchable refusal, and the value a policy rule, a retry predicate and a UI branch all name. */
18
+ code: string;
19
+ /** Human-readable and specific to THIS occurrence. */
20
+ detail?: string;
21
+ /** URI reference identifying the occurrence — a request path, a run, a row. */
22
+ instance?: string;
23
+ /** W3C trace-context trace-id, present when the caller sent a `traceparent`. Omitted rather than invented when it did not. */
24
+ traceId?: string;
25
+ /** Field-level issues, when the refusal is about the request body. */
26
+ errors?: ProblemFieldIssueDto[];
27
+ [key: string]: unknown;
28
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Generated by @xemahq/api-client-generator — do not edit manually.
3
+ * Space Registry API
4
+ * OpenAPI spec version: 0.1.0
5
+ */
6
+ export interface ProblemFieldIssueDto {
7
+ /** RFC 6901 JSON Pointer into the request body. Root is "/". */
8
+ pointer: string;
9
+ detail: string;
10
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Generated by @xemahq/api-client-generator — do not edit manually.
3
+ * Space Registry API
4
+ * OpenAPI spec version: 0.1.0
5
+ */
6
+ export interface SpaceItemPublishCapabilityResponseDto {
7
+ /** Always `true` on success. A transport failure fails fast upstream rather than returning `false`. */
8
+ published: boolean;
9
+ }
@@ -1,11 +1,7 @@
1
+ "use strict";
1
2
  /**
2
3
  * Generated by @xemahq/api-client-generator — do not edit manually.
3
4
  * Space Registry API
4
5
  * OpenAPI spec version: 0.1.0
5
6
  */
6
- /**
7
- * @nullable
8
- */
9
- export type ErrorDetailsDtoDetails = {
10
- [key: string]: unknown;
11
- } | null;
7
+ Object.defineProperty(exports, "__esModule", { value: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xemahq/space-registry-internal-api-client",
3
- "version": "0.2.12",
3
+ "version": "0.2.18",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "files": [
@@ -19,7 +19,7 @@
19
19
  "service": "space-registry-api",
20
20
  "biome": "space-registry",
21
21
  "target": "server",
22
- "generator": "@xemahq/api-client-generator@0.15.2",
22
+ "generator": "@xemahq/api-client-generator@0.21.0",
23
23
  "source": "openapi.internal.json"
24
24
  },
25
25
  "license": "LicenseRef-Xema-BSL-1.1",
@@ -32,6 +32,30 @@
32
32
  "directory": "packages/clients/space-registry-internal-api"
33
33
  },
34
34
  "description": "Generated internal API client for the Xema space-registry-api service.",
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.ts",
38
+ "default": "./dist/index.js"
39
+ },
40
+ "./models": {
41
+ "types": "./dist/models/index.d.ts",
42
+ "default": "./dist/models/index.js"
43
+ },
44
+ "./models/*": {
45
+ "types": "./dist/models/*.d.ts",
46
+ "default": "./dist/models/*.js"
47
+ },
48
+ "./endpoints/*": {
49
+ "types": "./dist/endpoints/*.d.ts",
50
+ "default": "./dist/endpoints/*.js"
51
+ },
52
+ "./custom-fetch": {
53
+ "types": "./dist/custom-fetch.d.ts",
54
+ "default": "./dist/custom-fetch.js"
55
+ },
56
+ "./package.json": "./package.json"
57
+ },
58
+ "sideEffects": false,
35
59
  "scripts": {
36
60
  "build": "tsc -p tsconfig.json"
37
61
  }
@@ -1,10 +0,0 @@
1
- /**
2
- * Generated by @xemahq/api-client-generator — do not edit manually.
3
- * Space Registry API
4
- * OpenAPI spec version: 0.1.0
5
- */
6
- import type { ErrorDetailsDtoDetails } from './errorDetailsDtoDetails.js';
7
- export interface ErrorDetailsDto {
8
- /** @nullable */
9
- details: ErrorDetailsDtoDetails;
10
- }
@@ -1,11 +0,0 @@
1
- /**
2
- * Generated by @xemahq/api-client-generator — do not edit manually.
3
- * Space Registry API
4
- * OpenAPI spec version: 0.1.0
5
- */
6
- import type { ErrorDetailsDto } from './errorDetailsDto.js';
7
- export interface ErrorPayloadDto {
8
- code: string;
9
- message: string;
10
- details: ErrorDetailsDto | null;
11
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,9 +0,0 @@
1
- /**
2
- * Generated by @xemahq/api-client-generator — do not edit manually.
3
- * Space Registry API
4
- * OpenAPI spec version: 0.1.0
5
- */
6
- import type { ErrorPayloadDto } from './errorPayloadDto.js';
7
- export interface ErrorResponseDto {
8
- error: ErrorPayloadDto;
9
- }
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });