@uncefact/untp-utils 0.1.0 → 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.
- package/README.md +23 -1
- package/build/artefacts/detect-version-from-context.d.ts +46 -0
- package/build/artefacts/detect-version-from-context.js +77 -0
- package/build/artefacts/detect-version-from-context.js.map +1 -0
- package/build/artefacts/detect-version-from-context.test.d.ts +1 -0
- package/build/artefacts/detect-version-from-context.test.js +69 -0
- package/build/artefacts/detect-version-from-context.test.js.map +1 -0
- package/build/artefacts/index.d.ts +3 -0
- package/build/artefacts/index.js +4 -0
- package/build/artefacts/index.js.map +1 -0
- package/build/artefacts/urls.d.ts +79 -0
- package/build/artefacts/urls.js +133 -0
- package/build/artefacts/urls.js.map +1 -0
- package/build/artefacts/urls.test.d.ts +1 -0
- package/build/artefacts/urls.test.js +91 -0
- package/build/artefacts/urls.test.js.map +1 -0
- package/build/artefacts/version.d.ts +9 -0
- package/build/artefacts/version.js +17 -0
- package/build/artefacts/version.js.map +1 -0
- package/build/artefacts/version.test.d.ts +1 -0
- package/build/artefacts/version.test.js +16 -0
- package/build/artefacts/version.test.js.map +1 -0
- package/build/cache/in-memory-ttl-cache.d.ts +2 -0
- package/build/cache/in-memory-ttl-cache.js +76 -0
- package/build/cache/in-memory-ttl-cache.js.map +1 -0
- package/build/cache/in-memory-ttl-cache.test.d.ts +1 -0
- package/build/cache/in-memory-ttl-cache.test.js +236 -0
- package/build/cache/in-memory-ttl-cache.test.js.map +1 -0
- package/build/cache/index.d.ts +2 -0
- package/build/cache/index.js +2 -0
- package/build/cache/index.js.map +1 -0
- package/build/cache/ttl-cache.d.ts +22 -0
- package/build/cache/ttl-cache.js +2 -0
- package/build/cache/ttl-cache.js.map +1 -0
- package/build/common/as-non-empty-string.d.ts +7 -0
- package/build/common/as-non-empty-string.js +10 -0
- package/build/common/as-non-empty-string.js.map +1 -0
- package/build/common/as-non-empty-string.test.d.ts +1 -0
- package/build/common/as-non-empty-string.test.js +25 -0
- package/build/common/as-non-empty-string.test.js.map +1 -0
- package/build/common/require-string.d.ts +12 -0
- package/build/common/require-string.js +27 -0
- package/build/common/require-string.js.map +1 -0
- package/build/common/require-string.test.d.ts +1 -0
- package/build/common/require-string.test.js +53 -0
- package/build/common/require-string.test.js.map +1 -0
- package/build/conformity-vocabulary/codes.d.ts +10 -0
- package/build/conformity-vocabulary/codes.js +10 -0
- package/build/conformity-vocabulary/codes.js.map +1 -0
- package/build/conformity-vocabulary/errors.d.ts +44 -0
- package/build/conformity-vocabulary/errors.js +68 -0
- package/build/conformity-vocabulary/errors.js.map +1 -0
- package/build/conformity-vocabulary/index.d.ts +6 -0
- package/build/conformity-vocabulary/index.js +7 -0
- package/build/conformity-vocabulary/index.js.map +1 -0
- package/build/conformity-vocabulary/parse-conformity-catalogue.d.ts +26 -0
- package/build/conformity-vocabulary/parse-conformity-catalogue.js +106 -0
- package/build/conformity-vocabulary/parse-conformity-catalogue.js.map +1 -0
- package/build/conformity-vocabulary/parse-conformity-catalogue.test.d.ts +1 -0
- package/build/conformity-vocabulary/parse-conformity-catalogue.test.js +327 -0
- package/build/conformity-vocabulary/parse-conformity-catalogue.test.js.map +1 -0
- package/build/conformity-vocabulary/parse-conformity-scheme.d.ts +28 -0
- package/build/conformity-vocabulary/parse-conformity-scheme.js +47 -0
- package/build/conformity-vocabulary/parse-conformity-scheme.js.map +1 -0
- package/build/conformity-vocabulary/parse-conformity-scheme.test.d.ts +1 -0
- package/build/conformity-vocabulary/parse-conformity-scheme.test.js +284 -0
- package/build/conformity-vocabulary/parse-conformity-scheme.test.js.map +1 -0
- package/build/conformity-vocabulary/parsers/v0-7-0.parser.d.ts +19 -0
- package/build/conformity-vocabulary/parsers/v0-7-0.parser.js +219 -0
- package/build/conformity-vocabulary/parsers/v0-7-0.parser.js.map +1 -0
- package/build/conformity-vocabulary/types.d.ts +180 -0
- package/build/conformity-vocabulary/types.js +2 -0
- package/build/conformity-vocabulary/types.js.map +1 -0
- package/build/conformity-vocabulary/validate-conformity-claim.d.ts +26 -0
- package/build/conformity-vocabulary/validate-conformity-claim.js +165 -0
- package/build/conformity-vocabulary/validate-conformity-claim.js.map +1 -0
- package/build/conformity-vocabulary/validate-conformity-claim.test.d.ts +1 -0
- package/build/conformity-vocabulary/validate-conformity-claim.test.js +478 -0
- package/build/conformity-vocabulary/validate-conformity-claim.test.js.map +1 -0
- package/build/http-headers/index.d.ts +5 -0
- package/build/http-headers/index.js +6 -0
- package/build/http-headers/index.js.map +1 -0
- package/build/http-headers/is-safe-header-value.d.ts +10 -0
- package/build/http-headers/is-safe-header-value.js +15 -0
- package/build/http-headers/is-safe-header-value.js.map +1 -0
- package/build/http-headers/is-safe-header-value.test.d.ts +1 -0
- package/build/http-headers/is-safe-header-value.test.js +37 -0
- package/build/http-headers/is-safe-header-value.test.js.map +1 -0
- package/build/http-headers/parse-entity-tag.d.ts +9 -0
- package/build/http-headers/parse-entity-tag.js +18 -0
- package/build/http-headers/parse-entity-tag.js.map +1 -0
- package/build/http-headers/parse-entity-tag.test.d.ts +1 -0
- package/build/http-headers/parse-entity-tag.test.js +41 -0
- package/build/http-headers/parse-entity-tag.test.js.map +1 -0
- package/build/http-headers/parse-imf-date.d.ts +13 -0
- package/build/http-headers/parse-imf-date.js +23 -0
- package/build/http-headers/parse-imf-date.js.map +1 -0
- package/build/http-headers/parse-imf-date.test.d.ts +1 -0
- package/build/http-headers/parse-imf-date.test.js +31 -0
- package/build/http-headers/parse-imf-date.test.js.map +1 -0
- package/build/http-headers/parse-media-type.d.ts +8 -0
- package/build/http-headers/parse-media-type.js +21 -0
- package/build/http-headers/parse-media-type.js.map +1 -0
- package/build/http-headers/parse-media-type.test.d.ts +1 -0
- package/build/http-headers/parse-media-type.test.js +39 -0
- package/build/http-headers/parse-media-type.test.js.map +1 -0
- package/build/http-headers/user-agent.d.ts +35 -0
- package/build/http-headers/user-agent.js +45 -0
- package/build/http-headers/user-agent.js.map +1 -0
- package/build/http-headers/user-agent.test.d.ts +1 -0
- package/build/http-headers/user-agent.test.js +27 -0
- package/build/http-headers/user-agent.test.js.map +1 -0
- package/build/index.d.ts +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/loaders/errors.d.ts +21 -0
- package/build/loaders/errors.js +45 -0
- package/build/loaders/errors.js.map +1 -0
- package/build/loaders/index.d.ts +3 -0
- package/build/loaders/index.js +4 -0
- package/build/loaders/index.js.map +1 -0
- package/build/loaders/jsonld-document-loader.d.ts +46 -0
- package/build/loaders/jsonld-document-loader.js +34 -0
- package/build/loaders/jsonld-document-loader.js.map +1 -0
- package/build/loaders/jsonld-document-loader.test.d.ts +1 -0
- package/build/loaders/jsonld-document-loader.test.js +71 -0
- package/build/loaders/jsonld-document-loader.test.js.map +1 -0
- package/build/loaders/schema-loader.d.ts +21 -0
- package/build/loaders/schema-loader.js +67 -0
- package/build/loaders/schema-loader.js.map +1 -0
- package/build/loaders/schema-loader.ssrf.test.d.ts +1 -0
- package/build/loaders/schema-loader.ssrf.test.js +55 -0
- package/build/loaders/schema-loader.ssrf.test.js.map +1 -0
- package/build/loaders/schema-loader.test.d.ts +1 -0
- package/build/loaders/schema-loader.test.js +162 -0
- package/build/loaders/schema-loader.test.js.map +1 -0
- package/build/multibase-digest/multibase-digest.d.ts +23 -0
- package/build/multibase-digest/multibase-digest.js +40 -0
- package/build/multibase-digest/multibase-digest.js.map +1 -1
- package/build/multibase-digest/multibase-digest.test.js +46 -0
- package/build/multibase-digest/multibase-digest.test.js.map +1 -1
- package/build/node/errors.d.ts +41 -0
- package/build/node/errors.js +80 -0
- package/build/node/errors.js.map +1 -0
- package/build/node/index.d.ts +3 -0
- package/build/node/index.js +4 -0
- package/build/node/index.js.map +1 -0
- package/build/node/is-private-ip.d.ts +41 -0
- package/build/node/is-private-ip.js +138 -0
- package/build/node/is-private-ip.js.map +1 -0
- package/build/node/is-private-ip.test.d.ts +1 -0
- package/build/node/is-private-ip.test.js +96 -0
- package/build/node/is-private-ip.test.js.map +1 -0
- package/build/node/validate-public-url.d.ts +49 -0
- package/build/node/validate-public-url.js +94 -0
- package/build/node/validate-public-url.js.map +1 -0
- package/build/node/validate-public-url.test.d.ts +1 -0
- package/build/node/validate-public-url.test.js +177 -0
- package/build/node/validate-public-url.test.js.map +1 -0
- package/build/resolvers/errors.d.ts +43 -0
- package/build/resolvers/errors.js +99 -0
- package/build/resolvers/errors.js.map +1 -0
- package/build/resolvers/index.d.ts +5 -0
- package/build/resolvers/index.js +6 -0
- package/build/resolvers/index.js.map +1 -0
- package/build/resolvers/resolve-document-if-changed.d.ts +48 -0
- package/build/resolvers/resolve-document-if-changed.js +42 -0
- package/build/resolvers/resolve-document-if-changed.js.map +1 -0
- package/build/resolvers/resolve-document-if-changed.test.d.ts +1 -0
- package/build/resolvers/resolve-document-if-changed.test.js +109 -0
- package/build/resolvers/resolve-document-if-changed.test.js.map +1 -0
- package/build/resolvers/resolve-document.d.ts +86 -0
- package/build/resolvers/resolve-document.js +239 -0
- package/build/resolvers/resolve-document.js.map +1 -0
- package/build/resolvers/resolve-document.test.d.ts +1 -0
- package/build/resolvers/resolve-document.test.js +299 -0
- package/build/resolvers/resolve-document.test.js.map +1 -0
- package/build/resolvers/resolve-json-document.d.ts +40 -0
- package/build/resolvers/resolve-json-document.js +42 -0
- package/build/resolvers/resolve-json-document.js.map +1 -0
- package/build/resolvers/resolve-json-document.test.d.ts +1 -0
- package/build/resolvers/resolve-json-document.test.js +61 -0
- package/build/resolvers/resolve-json-document.test.js.map +1 -0
- package/build/structured-error.d.ts +49 -0
- package/build/structured-error.js +17 -0
- package/build/structured-error.js.map +1 -0
- package/build/structured-error.test.d.ts +1 -0
- package/build/structured-error.test.js +112 -0
- package/build/structured-error.test.js.map +1 -0
- package/build/validation/describe-jsonld-failure.d.ts +50 -0
- package/build/validation/describe-jsonld-failure.js +104 -0
- package/build/validation/describe-jsonld-failure.js.map +1 -0
- package/build/validation/describe-jsonld-failure.test.d.ts +1 -0
- package/build/validation/describe-jsonld-failure.test.js +141 -0
- package/build/validation/describe-jsonld-failure.test.js.map +1 -0
- package/build/validation/errors.d.ts +40 -0
- package/build/validation/errors.js +75 -0
- package/build/validation/errors.js.map +1 -0
- package/build/validation/index.d.ts +4 -0
- package/build/validation/index.js +5 -0
- package/build/validation/index.js.map +1 -0
- package/build/validation/validate-against-schemas.d.ts +22 -0
- package/build/validation/validate-against-schemas.js +65 -0
- package/build/validation/validate-against-schemas.js.map +1 -0
- package/build/validation/validate-against-schemas.test.d.ts +1 -0
- package/build/validation/validate-against-schemas.test.js +169 -0
- package/build/validation/validate-against-schemas.test.js.map +1 -0
- package/build/validation/validate-jsonld.context-cache.test.d.ts +1 -0
- package/build/validation/validate-jsonld.context-cache.test.js +32 -0
- package/build/validation/validate-jsonld.context-cache.test.js.map +1 -0
- package/build/validation/validate-jsonld.d.ts +33 -0
- package/build/validation/validate-jsonld.js +99 -0
- package/build/validation/validate-jsonld.js.map +1 -0
- package/build/validation/validate-jsonld.ssrf.test.d.ts +1 -0
- package/build/validation/validate-jsonld.ssrf.test.js +108 -0
- package/build/validation/validate-jsonld.ssrf.test.js.map +1 -0
- package/build/validation/validate-jsonld.test.d.ts +1 -0
- package/build/validation/validate-jsonld.test.js +200 -0
- package/build/validation/validate-jsonld.test.js.map +1 -0
- package/package.json +64 -3
|
@@ -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 {};
|