@uncefact/untp-utils 0.0.1 → 0.2.0

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.
Files changed (221) hide show
  1. package/LICENSE +202 -674
  2. package/README.md +23 -1
  3. package/build/artefacts/detect-version-from-context.d.ts +46 -0
  4. package/build/artefacts/detect-version-from-context.js +77 -0
  5. package/build/artefacts/detect-version-from-context.js.map +1 -0
  6. package/build/artefacts/detect-version-from-context.test.d.ts +1 -0
  7. package/build/artefacts/detect-version-from-context.test.js +69 -0
  8. package/build/artefacts/detect-version-from-context.test.js.map +1 -0
  9. package/build/artefacts/index.d.ts +3 -0
  10. package/build/artefacts/index.js +4 -0
  11. package/build/artefacts/index.js.map +1 -0
  12. package/build/artefacts/urls.d.ts +79 -0
  13. package/build/artefacts/urls.js +133 -0
  14. package/build/artefacts/urls.js.map +1 -0
  15. package/build/artefacts/urls.test.d.ts +1 -0
  16. package/build/artefacts/urls.test.js +91 -0
  17. package/build/artefacts/urls.test.js.map +1 -0
  18. package/build/artefacts/version.d.ts +9 -0
  19. package/build/artefacts/version.js +17 -0
  20. package/build/artefacts/version.js.map +1 -0
  21. package/build/artefacts/version.test.d.ts +1 -0
  22. package/build/artefacts/version.test.js +16 -0
  23. package/build/artefacts/version.test.js.map +1 -0
  24. package/build/cache/in-memory-ttl-cache.d.ts +2 -0
  25. package/build/cache/in-memory-ttl-cache.js +76 -0
  26. package/build/cache/in-memory-ttl-cache.js.map +1 -0
  27. package/build/cache/in-memory-ttl-cache.test.d.ts +1 -0
  28. package/build/cache/in-memory-ttl-cache.test.js +236 -0
  29. package/build/cache/in-memory-ttl-cache.test.js.map +1 -0
  30. package/build/cache/index.d.ts +2 -0
  31. package/build/cache/index.js +2 -0
  32. package/build/cache/index.js.map +1 -0
  33. package/build/cache/ttl-cache.d.ts +22 -0
  34. package/build/cache/ttl-cache.js +2 -0
  35. package/build/cache/ttl-cache.js.map +1 -0
  36. package/build/common/as-non-empty-string.d.ts +7 -0
  37. package/build/common/as-non-empty-string.js +10 -0
  38. package/build/common/as-non-empty-string.js.map +1 -0
  39. package/build/common/as-non-empty-string.test.d.ts +1 -0
  40. package/build/common/as-non-empty-string.test.js +25 -0
  41. package/build/common/as-non-empty-string.test.js.map +1 -0
  42. package/build/common/require-string.d.ts +12 -0
  43. package/build/common/require-string.js +27 -0
  44. package/build/common/require-string.js.map +1 -0
  45. package/build/common/require-string.test.d.ts +1 -0
  46. package/build/common/require-string.test.js +53 -0
  47. package/build/common/require-string.test.js.map +1 -0
  48. package/build/conformity-vocabulary/codes.d.ts +10 -0
  49. package/build/conformity-vocabulary/codes.js +10 -0
  50. package/build/conformity-vocabulary/codes.js.map +1 -0
  51. package/build/conformity-vocabulary/errors.d.ts +44 -0
  52. package/build/conformity-vocabulary/errors.js +68 -0
  53. package/build/conformity-vocabulary/errors.js.map +1 -0
  54. package/build/conformity-vocabulary/index.d.ts +6 -0
  55. package/build/conformity-vocabulary/index.js +7 -0
  56. package/build/conformity-vocabulary/index.js.map +1 -0
  57. package/build/conformity-vocabulary/parse-conformity-catalogue.d.ts +26 -0
  58. package/build/conformity-vocabulary/parse-conformity-catalogue.js +106 -0
  59. package/build/conformity-vocabulary/parse-conformity-catalogue.js.map +1 -0
  60. package/build/conformity-vocabulary/parse-conformity-catalogue.test.d.ts +1 -0
  61. package/build/conformity-vocabulary/parse-conformity-catalogue.test.js +327 -0
  62. package/build/conformity-vocabulary/parse-conformity-catalogue.test.js.map +1 -0
  63. package/build/conformity-vocabulary/parse-conformity-scheme.d.ts +28 -0
  64. package/build/conformity-vocabulary/parse-conformity-scheme.js +47 -0
  65. package/build/conformity-vocabulary/parse-conformity-scheme.js.map +1 -0
  66. package/build/conformity-vocabulary/parse-conformity-scheme.test.d.ts +1 -0
  67. package/build/conformity-vocabulary/parse-conformity-scheme.test.js +284 -0
  68. package/build/conformity-vocabulary/parse-conformity-scheme.test.js.map +1 -0
  69. package/build/conformity-vocabulary/parsers/v0-7-0.parser.d.ts +19 -0
  70. package/build/conformity-vocabulary/parsers/v0-7-0.parser.js +219 -0
  71. package/build/conformity-vocabulary/parsers/v0-7-0.parser.js.map +1 -0
  72. package/build/conformity-vocabulary/types.d.ts +180 -0
  73. package/build/conformity-vocabulary/types.js +2 -0
  74. package/build/conformity-vocabulary/types.js.map +1 -0
  75. package/build/conformity-vocabulary/validate-conformity-claim.d.ts +26 -0
  76. package/build/conformity-vocabulary/validate-conformity-claim.js +165 -0
  77. package/build/conformity-vocabulary/validate-conformity-claim.js.map +1 -0
  78. package/build/conformity-vocabulary/validate-conformity-claim.test.d.ts +1 -0
  79. package/build/conformity-vocabulary/validate-conformity-claim.test.js +478 -0
  80. package/build/conformity-vocabulary/validate-conformity-claim.test.js.map +1 -0
  81. package/build/http-headers/index.d.ts +5 -0
  82. package/build/http-headers/index.js +6 -0
  83. package/build/http-headers/index.js.map +1 -0
  84. package/build/http-headers/is-safe-header-value.d.ts +10 -0
  85. package/build/http-headers/is-safe-header-value.js +15 -0
  86. package/build/http-headers/is-safe-header-value.js.map +1 -0
  87. package/build/http-headers/is-safe-header-value.test.d.ts +1 -0
  88. package/build/http-headers/is-safe-header-value.test.js +37 -0
  89. package/build/http-headers/is-safe-header-value.test.js.map +1 -0
  90. package/build/http-headers/parse-entity-tag.d.ts +9 -0
  91. package/build/http-headers/parse-entity-tag.js +18 -0
  92. package/build/http-headers/parse-entity-tag.js.map +1 -0
  93. package/build/http-headers/parse-entity-tag.test.d.ts +1 -0
  94. package/build/http-headers/parse-entity-tag.test.js +41 -0
  95. package/build/http-headers/parse-entity-tag.test.js.map +1 -0
  96. package/build/http-headers/parse-imf-date.d.ts +13 -0
  97. package/build/http-headers/parse-imf-date.js +23 -0
  98. package/build/http-headers/parse-imf-date.js.map +1 -0
  99. package/build/http-headers/parse-imf-date.test.d.ts +1 -0
  100. package/build/http-headers/parse-imf-date.test.js +31 -0
  101. package/build/http-headers/parse-imf-date.test.js.map +1 -0
  102. package/build/http-headers/parse-media-type.d.ts +8 -0
  103. package/build/http-headers/parse-media-type.js +21 -0
  104. package/build/http-headers/parse-media-type.js.map +1 -0
  105. package/build/http-headers/parse-media-type.test.d.ts +1 -0
  106. package/build/http-headers/parse-media-type.test.js +39 -0
  107. package/build/http-headers/parse-media-type.test.js.map +1 -0
  108. package/build/http-headers/user-agent.d.ts +35 -0
  109. package/build/http-headers/user-agent.js +45 -0
  110. package/build/http-headers/user-agent.js.map +1 -0
  111. package/build/http-headers/user-agent.test.d.ts +1 -0
  112. package/build/http-headers/user-agent.test.js +27 -0
  113. package/build/http-headers/user-agent.test.js.map +1 -0
  114. package/build/index.d.ts +1 -1
  115. package/build/index.js +1 -1
  116. package/build/index.js.map +1 -1
  117. package/build/loaders/errors.d.ts +21 -0
  118. package/build/loaders/errors.js +45 -0
  119. package/build/loaders/errors.js.map +1 -0
  120. package/build/loaders/index.d.ts +3 -0
  121. package/build/loaders/index.js +4 -0
  122. package/build/loaders/index.js.map +1 -0
  123. package/build/loaders/jsonld-document-loader.d.ts +46 -0
  124. package/build/loaders/jsonld-document-loader.js +34 -0
  125. package/build/loaders/jsonld-document-loader.js.map +1 -0
  126. package/build/loaders/jsonld-document-loader.test.d.ts +1 -0
  127. package/build/loaders/jsonld-document-loader.test.js +71 -0
  128. package/build/loaders/jsonld-document-loader.test.js.map +1 -0
  129. package/build/loaders/schema-loader.d.ts +21 -0
  130. package/build/loaders/schema-loader.js +67 -0
  131. package/build/loaders/schema-loader.js.map +1 -0
  132. package/build/loaders/schema-loader.ssrf.test.d.ts +1 -0
  133. package/build/loaders/schema-loader.ssrf.test.js +55 -0
  134. package/build/loaders/schema-loader.ssrf.test.js.map +1 -0
  135. package/build/loaders/schema-loader.test.d.ts +1 -0
  136. package/build/loaders/schema-loader.test.js +162 -0
  137. package/build/loaders/schema-loader.test.js.map +1 -0
  138. package/build/multibase-digest/multibase-digest.d.ts +23 -0
  139. package/build/multibase-digest/multibase-digest.js +40 -0
  140. package/build/multibase-digest/multibase-digest.js.map +1 -1
  141. package/build/multibase-digest/multibase-digest.test.js +46 -0
  142. package/build/multibase-digest/multibase-digest.test.js.map +1 -1
  143. package/build/node/errors.d.ts +41 -0
  144. package/build/node/errors.js +80 -0
  145. package/build/node/errors.js.map +1 -0
  146. package/build/node/index.d.ts +3 -0
  147. package/build/node/index.js +4 -0
  148. package/build/node/index.js.map +1 -0
  149. package/build/node/is-private-ip.d.ts +41 -0
  150. package/build/node/is-private-ip.js +138 -0
  151. package/build/node/is-private-ip.js.map +1 -0
  152. package/build/node/is-private-ip.test.d.ts +1 -0
  153. package/build/node/is-private-ip.test.js +96 -0
  154. package/build/node/is-private-ip.test.js.map +1 -0
  155. package/build/node/validate-public-url.d.ts +49 -0
  156. package/build/node/validate-public-url.js +94 -0
  157. package/build/node/validate-public-url.js.map +1 -0
  158. package/build/node/validate-public-url.test.d.ts +1 -0
  159. package/build/node/validate-public-url.test.js +177 -0
  160. package/build/node/validate-public-url.test.js.map +1 -0
  161. package/build/resolvers/errors.d.ts +43 -0
  162. package/build/resolvers/errors.js +99 -0
  163. package/build/resolvers/errors.js.map +1 -0
  164. package/build/resolvers/index.d.ts +5 -0
  165. package/build/resolvers/index.js +6 -0
  166. package/build/resolvers/index.js.map +1 -0
  167. package/build/resolvers/resolve-document-if-changed.d.ts +48 -0
  168. package/build/resolvers/resolve-document-if-changed.js +42 -0
  169. package/build/resolvers/resolve-document-if-changed.js.map +1 -0
  170. package/build/resolvers/resolve-document-if-changed.test.d.ts +1 -0
  171. package/build/resolvers/resolve-document-if-changed.test.js +109 -0
  172. package/build/resolvers/resolve-document-if-changed.test.js.map +1 -0
  173. package/build/resolvers/resolve-document.d.ts +86 -0
  174. package/build/resolvers/resolve-document.js +239 -0
  175. package/build/resolvers/resolve-document.js.map +1 -0
  176. package/build/resolvers/resolve-document.test.d.ts +1 -0
  177. package/build/resolvers/resolve-document.test.js +299 -0
  178. package/build/resolvers/resolve-document.test.js.map +1 -0
  179. package/build/resolvers/resolve-json-document.d.ts +40 -0
  180. package/build/resolvers/resolve-json-document.js +42 -0
  181. package/build/resolvers/resolve-json-document.js.map +1 -0
  182. package/build/resolvers/resolve-json-document.test.d.ts +1 -0
  183. package/build/resolvers/resolve-json-document.test.js +61 -0
  184. package/build/resolvers/resolve-json-document.test.js.map +1 -0
  185. package/build/structured-error.d.ts +49 -0
  186. package/build/structured-error.js +17 -0
  187. package/build/structured-error.js.map +1 -0
  188. package/build/structured-error.test.d.ts +1 -0
  189. package/build/structured-error.test.js +112 -0
  190. package/build/structured-error.test.js.map +1 -0
  191. package/build/validation/describe-jsonld-failure.d.ts +50 -0
  192. package/build/validation/describe-jsonld-failure.js +104 -0
  193. package/build/validation/describe-jsonld-failure.js.map +1 -0
  194. package/build/validation/describe-jsonld-failure.test.d.ts +1 -0
  195. package/build/validation/describe-jsonld-failure.test.js +141 -0
  196. package/build/validation/describe-jsonld-failure.test.js.map +1 -0
  197. package/build/validation/errors.d.ts +40 -0
  198. package/build/validation/errors.js +75 -0
  199. package/build/validation/errors.js.map +1 -0
  200. package/build/validation/index.d.ts +4 -0
  201. package/build/validation/index.js +5 -0
  202. package/build/validation/index.js.map +1 -0
  203. package/build/validation/validate-against-schemas.d.ts +22 -0
  204. package/build/validation/validate-against-schemas.js +65 -0
  205. package/build/validation/validate-against-schemas.js.map +1 -0
  206. package/build/validation/validate-against-schemas.test.d.ts +1 -0
  207. package/build/validation/validate-against-schemas.test.js +169 -0
  208. package/build/validation/validate-against-schemas.test.js.map +1 -0
  209. package/build/validation/validate-jsonld.context-cache.test.d.ts +1 -0
  210. package/build/validation/validate-jsonld.context-cache.test.js +32 -0
  211. package/build/validation/validate-jsonld.context-cache.test.js.map +1 -0
  212. package/build/validation/validate-jsonld.d.ts +33 -0
  213. package/build/validation/validate-jsonld.js +99 -0
  214. package/build/validation/validate-jsonld.js.map +1 -0
  215. package/build/validation/validate-jsonld.ssrf.test.d.ts +1 -0
  216. package/build/validation/validate-jsonld.ssrf.test.js +108 -0
  217. package/build/validation/validate-jsonld.ssrf.test.js.map +1 -0
  218. package/build/validation/validate-jsonld.test.d.ts +1 -0
  219. package/build/validation/validate-jsonld.test.js +200 -0
  220. package/build/validation/validate-jsonld.test.js.map +1 -0
  221. package/package.json +77 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-document.test.js","sourceRoot":"","sources":["../../src/resolvers/resolve-document.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type ResolveDocumentOptions } from './resolve-document.js';
2
+ /**
3
+ * Options for {@link resolveJsonDocument}. Extends {@link ResolveDocumentOptions}
4
+ * with content negotiation; every SSRF / size / timeout / redirect guard from
5
+ * the underlying {@link resolveDocument} applies unchanged.
6
+ */
7
+ export interface ResolveJsonDocumentOptions extends ResolveDocumentOptions {
8
+ /**
9
+ * `Accept` header sent with the request. Defaults to `application/json`.
10
+ * An explicit accept header in {@link ResolveDocumentOptions.headers}
11
+ * (any casing) takes precedence over this.
12
+ */
13
+ accept?: string;
14
+ }
15
+ /** A JSON document fetched through the guarded resolver. */
16
+ export interface ResolvedJsonDocument {
17
+ /** The parsed JSON value. */
18
+ json: unknown;
19
+ /** Final URL after redirect chasing (matches the input when there were no redirects). */
20
+ finalUrl: string;
21
+ }
22
+ /**
23
+ * Fetches a remote JSON document with the full SSRF / size / timeout / redirect
24
+ * hardening of {@link resolveDocument}, then parses the body as JSON.
25
+ *
26
+ * This is the shared primitive behind guarded JSON-shaped fetches (JSON-LD
27
+ * `@context` documents, JSON Schemas, catalogue documents): each URL and every
28
+ * redirect hop passes `validatePublicUrl` and the connection is pinned to the
29
+ * validated IP, so a crafted or redirected URL cannot reach a private address.
30
+ *
31
+ * @throws {UrlValidationError} for URL / scheme / private-address rejections.
32
+ * @throws {ResolverNetworkError} when the fetch rejects before a response.
33
+ * @throws {ResolverHttpError} on a non-2xx status (with `.status`).
34
+ * @throws {ResolverTooLargeError} when the body exceeds the size cap.
35
+ * @throws {ResolverTooManyRedirectsError} when the redirect chain exceeds the hop cap.
36
+ * @throws {ResolverTimedOutError} when the total timeout fires.
37
+ * @throws {ResolverRedirectMissingLocationError} for a 3xx with no / unparseable Location header.
38
+ * @throws {ResolverInvalidJsonError} when the fetched body is not valid JSON.
39
+ */
40
+ export declare function resolveJsonDocument(url: string, options?: ResolveJsonDocumentOptions): Promise<ResolvedJsonDocument>;
@@ -0,0 +1,42 @@
1
+ import { resolveDocument } from './resolve-document.js';
2
+ import { ResolverInvalidJsonError } from './errors.js';
3
+ /** Default `Accept` header when the caller does not specify one. */
4
+ const DEFAULT_ACCEPT = 'application/json';
5
+ /**
6
+ * Fetches a remote JSON document with the full SSRF / size / timeout / redirect
7
+ * hardening of {@link resolveDocument}, then parses the body as JSON.
8
+ *
9
+ * This is the shared primitive behind guarded JSON-shaped fetches (JSON-LD
10
+ * `@context` documents, JSON Schemas, catalogue documents): each URL and every
11
+ * redirect hop passes `validatePublicUrl` and the connection is pinned to the
12
+ * validated IP, so a crafted or redirected URL cannot reach a private address.
13
+ *
14
+ * @throws {UrlValidationError} for URL / scheme / private-address rejections.
15
+ * @throws {ResolverNetworkError} when the fetch rejects before a response.
16
+ * @throws {ResolverHttpError} on a non-2xx status (with `.status`).
17
+ * @throws {ResolverTooLargeError} when the body exceeds the size cap.
18
+ * @throws {ResolverTooManyRedirectsError} when the redirect chain exceeds the hop cap.
19
+ * @throws {ResolverTimedOutError} when the total timeout fires.
20
+ * @throws {ResolverRedirectMissingLocationError} for a 3xx with no / unparseable Location header.
21
+ * @throws {ResolverInvalidJsonError} when the fetched body is not valid JSON.
22
+ */
23
+ export async function resolveJsonDocument(url, options) {
24
+ const { accept, headers, ...resolverOptions } = options ?? {};
25
+ // HTTP header names are case-insensitive, so an accept header supplied in
26
+ // any casing suppresses the default rather than producing a second header.
27
+ const hasExplicitAccept = Object.keys(headers ?? {}).some((key) => key.toLowerCase() === 'accept');
28
+ const result = await resolveDocument(url, {
29
+ ...resolverOptions,
30
+ headers: hasExplicitAccept ? headers : { Accept: accept ?? DEFAULT_ACCEPT, ...headers },
31
+ });
32
+ const text = new TextDecoder().decode(result.body);
33
+ let json;
34
+ try {
35
+ json = JSON.parse(text);
36
+ }
37
+ catch (cause) {
38
+ throw new ResolverInvalidJsonError(result.finalUrl, cause);
39
+ }
40
+ return { json, finalUrl: result.finalUrl };
41
+ }
42
+ //# sourceMappingURL=resolve-json-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-json-document.js","sourceRoot":"","sources":["../../src/resolvers/resolve-json-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA+B,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAEvD,oEAAoE;AACpE,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAwB1C;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAW,EACX,OAAoC;IAEpC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE9D,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC;IACnG,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE;QACxC,GAAG,eAAe;QAClB,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,IAAI,cAAc,EAAE,GAAG,OAAO,EAAE;KACxF,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,61 @@
1
+ import { jest } from '@jest/globals';
2
+ import { ResolverHttpError, ResolverInvalidJsonError } from './errors.js';
3
+ const resolveDocument = jest.fn();
4
+ jest.unstable_mockModule('./resolve-document.js', () => ({
5
+ resolveDocument,
6
+ }));
7
+ const { resolveJsonDocument } = await import('./resolve-json-document.js');
8
+ const encode = (s) => new TextEncoder().encode(s);
9
+ describe('resolveJsonDocument', () => {
10
+ beforeEach(() => {
11
+ resolveDocument.mockReset();
12
+ });
13
+ it('fetches through resolveDocument and returns the parsed JSON with the final URL', async () => {
14
+ resolveDocument.mockResolvedValue({ body: encode('{"a":1}'), finalUrl: 'https://ex.test/doc' });
15
+ await expect(resolveJsonDocument('https://ex.test/doc')).resolves.toEqual({
16
+ json: { a: 1 },
17
+ finalUrl: 'https://ex.test/doc',
18
+ });
19
+ });
20
+ it('defaults the Accept header to application/json', async () => {
21
+ resolveDocument.mockResolvedValue({ body: encode('{}'), finalUrl: 'https://ex.test/doc' });
22
+ await resolveJsonDocument('https://ex.test/doc');
23
+ expect(resolveDocument).toHaveBeenCalledWith('https://ex.test/doc', expect.objectContaining({ headers: expect.objectContaining({ Accept: 'application/json' }) }));
24
+ });
25
+ it('sends the supplied accept value', async () => {
26
+ resolveDocument.mockResolvedValue({ body: encode('{}'), finalUrl: 'https://ex.test/doc' });
27
+ await resolveJsonDocument('https://ex.test/doc', { accept: 'application/ld+json' });
28
+ expect(resolveDocument).toHaveBeenCalledWith('https://ex.test/doc', expect.objectContaining({ headers: expect.objectContaining({ Accept: 'application/ld+json' }) }));
29
+ });
30
+ it('lets an explicit headers.Accept override the accept option', async () => {
31
+ resolveDocument.mockResolvedValue({ body: encode('{}'), finalUrl: 'https://ex.test/doc' });
32
+ await resolveJsonDocument('https://ex.test/doc', {
33
+ accept: 'application/ld+json',
34
+ headers: { Accept: 'application/schema+json' },
35
+ });
36
+ expect(resolveDocument).toHaveBeenCalledWith('https://ex.test/doc', expect.objectContaining({ headers: expect.objectContaining({ Accept: 'application/schema+json' }) }));
37
+ });
38
+ it('lets a lowercase accept header key take precedence without duplicating the header', async () => {
39
+ resolveDocument.mockResolvedValue({ body: encode('{}'), finalUrl: 'https://ex.test/doc' });
40
+ await resolveJsonDocument('https://ex.test/doc', {
41
+ accept: 'application/ld+json',
42
+ headers: { accept: 'application/schema+json' },
43
+ });
44
+ expect(resolveDocument).toHaveBeenCalledWith('https://ex.test/doc', expect.objectContaining({ headers: { accept: 'application/schema+json' } }));
45
+ });
46
+ it('forwards resolver options (allowedSchemes, size/timeout bounds) unchanged', async () => {
47
+ resolveDocument.mockResolvedValue({ body: encode('{}'), finalUrl: 'https://ex.test/doc' });
48
+ await resolveJsonDocument('https://ex.test/doc', { allowedSchemes: ['https'], maxResponseBytes: 2048 });
49
+ expect(resolveDocument).toHaveBeenCalledWith('https://ex.test/doc', expect.objectContaining({ allowedSchemes: ['https'], maxResponseBytes: 2048 }));
50
+ });
51
+ it('throws ResolverInvalidJsonError when the body is not valid JSON', async () => {
52
+ resolveDocument.mockResolvedValue({ body: encode('not json'), finalUrl: 'https://ex.test/doc' });
53
+ await expect(resolveJsonDocument('https://ex.test/doc')).rejects.toBeInstanceOf(ResolverInvalidJsonError);
54
+ });
55
+ it('propagates resolveDocument errors (SSRF guard, HTTP, timeout) unchanged', async () => {
56
+ const httpError = new ResolverHttpError('https://ex.test/doc', 404);
57
+ resolveDocument.mockRejectedValue(httpError);
58
+ await expect(resolveJsonDocument('https://ex.test/doc')).rejects.toBe(httpError);
59
+ });
60
+ });
61
+ //# sourceMappingURL=resolve-json-document.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-json-document.test.js","sourceRoot":"","sources":["../../src/resolvers/resolve-json-document.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * System-wide base class for structured diagnostics, per ADR-035.
3
+ *
4
+ * Sub-entries and consumer packages extend this class with their own typed
5
+ * hierarchies. Lives in `@uncefact/untp-utils` because every workspace
6
+ * package already depends on it; the name is neutral, not utils-specific.
7
+ *
8
+ * @see ../../../docs/adrs/035-utils-throws-structured-errors.md
9
+ */
10
+ export interface StructuredDiagnostic {
11
+ /** Stable, namespaced identifier (e.g. `url.private-address`). */
12
+ code: string;
13
+ /** Human-facing summary. */
14
+ message: string;
15
+ /** Failing input or upstream value. */
16
+ received?: unknown;
17
+ /** What was expected. */
18
+ expected?: unknown;
19
+ /** Suggested next step. */
20
+ remediation?: string;
21
+ /** RFC 6901 JSON pointer into the input. */
22
+ pointer?: string;
23
+ }
24
+ export interface StructuredErrorInit extends StructuredDiagnostic {
25
+ /** Underlying error wrapped via `Error.cause`. */
26
+ cause?: unknown;
27
+ }
28
+ export declare class StructuredError extends Error {
29
+ readonly code: string;
30
+ readonly received?: unknown;
31
+ readonly expected?: unknown;
32
+ readonly remediation?: string;
33
+ readonly pointer?: string;
34
+ constructor(init: StructuredErrorInit);
35
+ }
36
+ /**
37
+ * Advisory diagnostic returned on the success path of functions that
38
+ * opt into warnings (ADR-035 §5).
39
+ */
40
+ export interface StructuredWarning extends StructuredDiagnostic {
41
+ }
42
+ /**
43
+ * One entry in a multi-failure case (e.g. one of N Ajv `allErrors`).
44
+ * Carried on the thrown subclass as `failures: readonly ValidationFailure[]`
45
+ * (ADR-035 §4). Same shape as {@link StructuredWarning}; the type
46
+ * distinguishes fatal sub-failure from advisory at the call site.
47
+ */
48
+ export interface ValidationFailure extends StructuredDiagnostic {
49
+ }
@@ -0,0 +1,17 @@
1
+ export class StructuredError extends Error {
2
+ code;
3
+ constructor(init) {
4
+ super(init.message, init.cause !== undefined ? { cause: init.cause } : undefined);
5
+ this.name = new.target.name;
6
+ this.code = init.code;
7
+ if (init.received !== undefined)
8
+ this.received = init.received;
9
+ if (init.expected !== undefined)
10
+ this.expected = init.expected;
11
+ if (init.remediation !== undefined)
12
+ this.remediation = init.remediation;
13
+ if (init.pointer !== undefined)
14
+ this.pointer = init.pointer;
15
+ }
16
+ }
17
+ //# sourceMappingURL=structured-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-error.js","sourceRoot":"","sources":["../src/structured-error.ts"],"names":[],"mappings":"AA6BA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,IAAI,CAAS;IAQtB,YAAY,IAAyB;QACnC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/D,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/D,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACxE,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9D,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,112 @@
1
+ import { StructuredError } from './structured-error.js';
2
+ describe('StructuredError', () => {
3
+ describe('constructor', () => {
4
+ it('assigns code and message', () => {
5
+ const e = new StructuredError({ code: 'demo.code', message: 'demo message' });
6
+ expect(e.code).toBe('demo.code');
7
+ expect(e.message).toBe('demo message');
8
+ });
9
+ it('assigns received / expected / remediation / pointer when supplied', () => {
10
+ const e = new StructuredError({
11
+ code: 'demo.code',
12
+ message: 'm',
13
+ received: { foo: 1 },
14
+ expected: 'bar',
15
+ remediation: 'do something',
16
+ pointer: '/foo/bar',
17
+ });
18
+ expect(e.received).toEqual({ foo: 1 });
19
+ expect(e.expected).toBe('bar');
20
+ expect(e.remediation).toBe('do something');
21
+ expect(e.pointer).toBe('/foo/bar');
22
+ });
23
+ it('leaves optional fields undefined when not supplied', () => {
24
+ const e = new StructuredError({ code: 'c', message: 'm' });
25
+ expect(e.received).toBeUndefined();
26
+ expect(e.expected).toBeUndefined();
27
+ expect(e.remediation).toBeUndefined();
28
+ expect(e.pointer).toBeUndefined();
29
+ });
30
+ it('omits absent optional fields from the instance (in-operator returns false)', () => {
31
+ const e = new StructuredError({ code: 'c', message: 'm' });
32
+ expect('received' in e).toBe(false);
33
+ expect('expected' in e).toBe(false);
34
+ expect('remediation' in e).toBe(false);
35
+ expect('pointer' in e).toBe(false);
36
+ });
37
+ it('includes supplied optional fields on the instance (in-operator returns true)', () => {
38
+ const e = new StructuredError({ code: 'c', message: 'm', received: 'x', pointer: '/y' });
39
+ expect('received' in e).toBe(true);
40
+ expect('pointer' in e).toBe(true);
41
+ expect('expected' in e).toBe(false);
42
+ expect('remediation' in e).toBe(false);
43
+ });
44
+ });
45
+ describe('Error.cause integration', () => {
46
+ it('wires cause through to the underlying Error', () => {
47
+ const underlying = new Error('boom');
48
+ const e = new StructuredError({ code: 'c', message: 'm', cause: underlying });
49
+ expect(e.cause).toBe(underlying);
50
+ });
51
+ it('omits cause from the underlying Error when not supplied', () => {
52
+ const e = new StructuredError({ code: 'c', message: 'm' });
53
+ expect(e.cause).toBeUndefined();
54
+ });
55
+ it('accepts non-Error causes (string, object, etc.)', () => {
56
+ const e = new StructuredError({ code: 'c', message: 'm', cause: 'string cause' });
57
+ expect(e.cause).toBe('string cause');
58
+ });
59
+ });
60
+ describe('name', () => {
61
+ it('resolves to the concrete subclass name in stack traces and logs', () => {
62
+ class PrivateAddressError extends StructuredError {
63
+ }
64
+ const e = new PrivateAddressError({ code: 'url.private-address', message: 'm' });
65
+ expect(e.name).toBe('PrivateAddressError');
66
+ });
67
+ it('uses StructuredError when constructed directly (not via a subclass)', () => {
68
+ const e = new StructuredError({ code: 'c', message: 'm' });
69
+ expect(e.name).toBe('StructuredError');
70
+ });
71
+ });
72
+ describe('instanceof and Error inheritance', () => {
73
+ it('is an instance of Error', () => {
74
+ const e = new StructuredError({ code: 'c', message: 'm' });
75
+ expect(e).toBeInstanceOf(Error);
76
+ });
77
+ it('is an instance of StructuredError when constructed directly', () => {
78
+ const e = new StructuredError({ code: 'c', message: 'm' });
79
+ expect(e).toBeInstanceOf(StructuredError);
80
+ });
81
+ it('preserves the StructuredError instanceof check for concrete subclasses', () => {
82
+ class SubError extends StructuredError {
83
+ }
84
+ const e = new SubError({ code: 'c', message: 'm' });
85
+ expect(e).toBeInstanceOf(SubError);
86
+ expect(e).toBeInstanceOf(StructuredError);
87
+ expect(e).toBeInstanceOf(Error);
88
+ });
89
+ });
90
+ describe('throwability', () => {
91
+ it('round-trips through try/catch as the concrete subclass', () => {
92
+ class DemoError extends StructuredError {
93
+ extraField;
94
+ constructor(init) {
95
+ super(init);
96
+ this.extraField = init.extraField;
97
+ }
98
+ }
99
+ let caught;
100
+ try {
101
+ throw new DemoError({ code: 'demo.x', message: 'm', extraField: 'value' });
102
+ }
103
+ catch (e) {
104
+ caught = e;
105
+ }
106
+ expect(caught).toBeInstanceOf(DemoError);
107
+ expect(caught.extraField).toBe('value');
108
+ expect(caught.code).toBe('demo.x');
109
+ });
110
+ });
111
+ });
112
+ //# sourceMappingURL=structured-error.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-error.test.js","sourceRoot":"","sources":["../src/structured-error.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { JsonLdValidationError } from './errors.js';
2
+ /**
3
+ * A caller-facing description of why JSON-LD validation failed, split into
4
+ * the two classes a caller reacts to differently: a problem with their
5
+ * document (fix the payload) versus a remote `@context` that could not be
6
+ * fetched or used (an environment or upstream condition; the payload may be
7
+ * fine).
8
+ */
9
+ export interface JsonLdFailureDescription {
10
+ kind: 'context-fetch' | 'document';
11
+ /**
12
+ * Human-facing reason, safe to return to the caller. Every branch below
13
+ * must preserve that property: detail comes only from explicitly
14
+ * recognised shapes (the guarded loader's typed diagnostics, jsonld.js
15
+ * safe-mode events via an allowlist of string fields, jsonld.js's fixed
16
+ * syntax-error strings, or this package's own typed messages). Messages
17
+ * from unrecognised errors never reach this field; unknown failures get
18
+ * a generic message and the full chain stays on `cause` for the log.
19
+ */
20
+ detail: string;
21
+ }
22
+ /**
23
+ * Classifies a {@link JsonLdValidationError} by walking its cause chain
24
+ * (native `.cause` hops; the chain is rehydrated by `validateJsonLd`, see
25
+ * issue #773).
26
+ *
27
+ * The two passes run in a load-bearing order. The rehydrated chain nests
28
+ * the guarded loader's error BENEATH jsonld.js's own wrapper
29
+ * (`JsonLdExpansionFailedError` -> `jsonld.InvalidUrl` -> the loader's
30
+ * `UrlValidationError`), and the wrapper's message contains the URL, so the
31
+ * typed-loader pass must exhaust the whole chain before any jsonld.js shape
32
+ * is considered; matching the wrapper first would echo its message and
33
+ * reopen the per-hostname reconnaissance oracle the flat message exists to
34
+ * close.
35
+ *
36
+ * `UrlValidationError` deliberately collapses to one flat message: its
37
+ * subclasses distinguish "does not resolve" from "resolves to a private
38
+ * address" from "scheme not allowed", and echoing that distinction would
39
+ * hand an authenticated caller a network-reconnaissance oracle over
40
+ * attacker-chosen `@context` URLs. The full typed diagnostic stays on the
41
+ * cause chain for the server-side log. `ResolverError` diagnostics fire
42
+ * only after the URL passed the public-address check, so their detail
43
+ * (HTTP status, timeout, size bound) is returned as-is.
44
+ *
45
+ * Known limitation, accepted: a malformed term definition inside a
46
+ * successfully fetched remote context surfaces as a `jsonld.SyntaxError`
47
+ * indistinguishable from the same defect in an inline context, and is
48
+ * classified as a document failure.
49
+ */
50
+ export declare function describeJsonLdFailure(error: JsonLdValidationError): JsonLdFailureDescription;
@@ -0,0 +1,104 @@
1
+ import { JsonLdInvalidShapeError } from './errors.js';
2
+ import { ResolverError } from '../resolvers/errors.js';
3
+ import { UrlValidationError } from '../node/errors.js';
4
+ const GENERIC_DOCUMENT_DETAIL = 'the document could not be expanded as valid JSON-LD';
5
+ const GENERIC_REMOTE_CONTEXT_DETAIL = 'a remote @context document was fetched but could not be used as a context';
6
+ const FLAT_URL_POLICY_DETAIL = "a remote @context URL was rejected by this service's URL policy or could not be resolved";
7
+ /** Event `details` fields safe to echo: identifiers from the caller's own document or a public context, never free-form values that can carry credential content. */
8
+ const SAFE_EVENT_FIELDS = ['property', 'expandedProperty', 'id', 'type', 'term', 'language', 'vocab'];
9
+ const MAX_FIELD_LENGTH = 200;
10
+ function isJsonLdProcessorError(value) {
11
+ return value instanceof Error && value.name.startsWith('jsonld.');
12
+ }
13
+ /** Formats a safe-mode event: its fixed library message plus allowlisted string fields. */
14
+ function describeSafeModeEvent(event) {
15
+ const parts = [];
16
+ if (typeof event.message === 'string' && event.message !== '') {
17
+ parts.push(event.message);
18
+ }
19
+ for (const field of SAFE_EVENT_FIELDS) {
20
+ const value = event.details?.[field];
21
+ if (typeof value === 'string' && value !== '') {
22
+ parts.push(`(${field}: "${value.slice(0, MAX_FIELD_LENGTH)}")`);
23
+ }
24
+ }
25
+ return parts.length > 0 ? parts.join(' ') : GENERIC_DOCUMENT_DETAIL;
26
+ }
27
+ function* causeChain(error) {
28
+ const seen = new Set();
29
+ let current = error;
30
+ while (current !== undefined && !seen.has(current)) {
31
+ seen.add(current);
32
+ yield current;
33
+ current = current instanceof Error ? current.cause : undefined;
34
+ }
35
+ }
36
+ /**
37
+ * Classifies a {@link JsonLdValidationError} by walking its cause chain
38
+ * (native `.cause` hops; the chain is rehydrated by `validateJsonLd`, see
39
+ * issue #773).
40
+ *
41
+ * The two passes run in a load-bearing order. The rehydrated chain nests
42
+ * the guarded loader's error BENEATH jsonld.js's own wrapper
43
+ * (`JsonLdExpansionFailedError` -> `jsonld.InvalidUrl` -> the loader's
44
+ * `UrlValidationError`), and the wrapper's message contains the URL, so the
45
+ * typed-loader pass must exhaust the whole chain before any jsonld.js shape
46
+ * is considered; matching the wrapper first would echo its message and
47
+ * reopen the per-hostname reconnaissance oracle the flat message exists to
48
+ * close.
49
+ *
50
+ * `UrlValidationError` deliberately collapses to one flat message: its
51
+ * subclasses distinguish "does not resolve" from "resolves to a private
52
+ * address" from "scheme not allowed", and echoing that distinction would
53
+ * hand an authenticated caller a network-reconnaissance oracle over
54
+ * attacker-chosen `@context` URLs. The full typed diagnostic stays on the
55
+ * cause chain for the server-side log. `ResolverError` diagnostics fire
56
+ * only after the URL passed the public-address check, so their detail
57
+ * (HTTP status, timeout, size bound) is returned as-is.
58
+ *
59
+ * Known limitation, accepted: a malformed term definition inside a
60
+ * successfully fetched remote context surfaces as a `jsonld.SyntaxError`
61
+ * indistinguishable from the same defect in an inline context, and is
62
+ * classified as a document failure.
63
+ */
64
+ export function describeJsonLdFailure(error) {
65
+ // Our own pre-expansion diagnostic: safe, typed, and more precise than
66
+ // the generic fallback (expansion never ran).
67
+ if (error instanceof JsonLdInvalidShapeError) {
68
+ return { kind: 'document', detail: error.message };
69
+ }
70
+ // Pass 1: the guarded loader's typed failures, anywhere on the chain.
71
+ for (const node of causeChain(error)) {
72
+ if (node instanceof UrlValidationError) {
73
+ return { kind: 'context-fetch', detail: FLAT_URL_POLICY_DETAIL };
74
+ }
75
+ if (node instanceof ResolverError) {
76
+ return { kind: 'context-fetch', detail: `could not fetch a remote @context: ${node.message}` };
77
+ }
78
+ }
79
+ // Pass 2: recognised jsonld.js processor shapes (name plus details.code
80
+ // matched exactly; the name prefix alone only locates the processor error,
81
+ // it does not make its message caller-safe).
82
+ for (const node of causeChain(error)) {
83
+ if (!isJsonLdProcessorError(node))
84
+ continue;
85
+ const code = node.details?.code;
86
+ if (node.name === 'jsonld.InvalidUrl' &&
87
+ (code === 'invalid remote context' || code === 'loading remote context failed')) {
88
+ // Fetched successfully (or rejected by an untyped loader path) but
89
+ // unusable as a context: an upstream condition, not a payload fault.
90
+ return { kind: 'context-fetch', detail: GENERIC_REMOTE_CONTEXT_DETAIL };
91
+ }
92
+ if (node.name === 'jsonld.ValidationError' && node.details?.event !== undefined) {
93
+ return { kind: 'document', detail: describeSafeModeEvent(node.details.event) };
94
+ }
95
+ if (node.name === 'jsonld.SyntaxError') {
96
+ // jsonld.js syntax-error messages are library-authored fixed strings
97
+ // (the variable parts live in details, which is not echoed).
98
+ return { kind: 'document', detail: node.message };
99
+ }
100
+ return { kind: 'document', detail: GENERIC_DOCUMENT_DETAIL };
101
+ }
102
+ return { kind: 'document', detail: GENERIC_DOCUMENT_DETAIL };
103
+ }
104
+ //# sourceMappingURL=describe-jsonld-failure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe-jsonld-failure.js","sourceRoot":"","sources":["../../src/validation/describe-jsonld-failure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};