ubid-common 0.1.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/LICENSE +21 -0
- package/README.md +20 -0
- package/dist/ParsingEngine.d.ts +3 -0
- package/dist/ParsingEngine.d.ts.map +1 -0
- package/dist/ParsingEngine.js +25 -0
- package/dist/PublicKeyResolverEngine.d.ts +3 -0
- package/dist/PublicKeyResolverEngine.d.ts.map +1 -0
- package/dist/PublicKeyResolverEngine.js +24 -0
- package/dist/VerifyingEngine.d.ts +3 -0
- package/dist/VerifyingEngine.d.ts.map +1 -0
- package/dist/VerifyingEngine.js +27 -0
- package/dist/credential-parsers/MsoMdocParser.d.ts +6 -0
- package/dist/credential-parsers/MsoMdocParser.d.ts.map +1 -0
- package/dist/credential-parsers/MsoMdocParser.js +164 -0
- package/dist/credential-parsers/SDJWTVCParser.d.ts +6 -0
- package/dist/credential-parsers/SDJWTVCParser.d.ts.map +1 -0
- package/dist/credential-parsers/SDJWTVCParser.js +214 -0
- package/dist/credential-verifiers/MsoMdocVerifier.d.ts +8 -0
- package/dist/credential-verifiers/MsoMdocVerifier.d.ts.map +1 -0
- package/dist/credential-verifiers/MsoMdocVerifier.js +213 -0
- package/dist/credential-verifiers/SDJWTVCValidation.d.ts +52 -0
- package/dist/credential-verifiers/SDJWTVCValidation.d.ts.map +1 -0
- package/dist/credential-verifiers/SDJWTVCValidation.js +248 -0
- package/dist/credential-verifiers/SDJWTVCVerifier.d.ts +15 -0
- package/dist/credential-verifiers/SDJWTVCVerifier.d.ts.map +1 -0
- package/dist/credential-verifiers/SDJWTVCVerifier.js +394 -0
- package/dist/defaultHttpClient.d.ts +3 -0
- package/dist/defaultHttpClient.d.ts.map +1 -0
- package/dist/defaultHttpClient.js +18 -0
- package/dist/error.d.ts +134 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +160 -0
- package/dist/functions/convertDataUriToImage.d.ts +2 -0
- package/dist/functions/convertDataUriToImage.d.ts.map +1 -0
- package/dist/functions/convertDataUriToImage.js +38 -0
- package/dist/functions/convertOpenid4vciToSdjwtvcClaims.d.ts +5 -0
- package/dist/functions/convertOpenid4vciToSdjwtvcClaims.d.ts.map +1 -0
- package/dist/functions/convertOpenid4vciToSdjwtvcClaims.js +31 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciClaims.d.ts +11 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciClaims.d.ts.map +1 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciClaims.js +35 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciDisplay.d.ts +19 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciDisplay.d.ts.map +1 -0
- package/dist/functions/convertSdjwtvcToOpenid4vciDisplay.js +56 -0
- package/dist/functions/formatDate.d.ts +2 -0
- package/dist/functions/formatDate.d.ts.map +1 -0
- package/dist/functions/formatDate.js +50 -0
- package/dist/functions/index.d.ts +3 -0
- package/dist/functions/index.d.ts.map +1 -0
- package/dist/functions/index.js +19 -0
- package/dist/functions/openID4VCICredentialRendering.d.ts +5 -0
- package/dist/functions/openID4VCICredentialRendering.d.ts.map +1 -0
- package/dist/functions/openID4VCICredentialRendering.js +93 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/interfaces.d.ts +112 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +3 -0
- package/dist/rendering.d.ts +3 -0
- package/dist/rendering.d.ts.map +1 -0
- package/dist/rendering.js +56 -0
- package/dist/resolvers/RemoteJwksResolver.d.ts +17 -0
- package/dist/resolvers/RemoteJwksResolver.d.ts.map +1 -0
- package/dist/resolvers/RemoteJwksResolver.js +138 -0
- package/dist/schemas/CredentialConfigurationSupportedSchema.d.ts +710 -0
- package/dist/schemas/CredentialConfigurationSupportedSchema.d.ts.map +1 -0
- package/dist/schemas/CredentialConfigurationSupportedSchema.js +60 -0
- package/dist/schemas/CredentialOfferSchema.d.ts +40 -0
- package/dist/schemas/CredentialOfferSchema.d.ts.map +1 -0
- package/dist/schemas/CredentialOfferSchema.js +14 -0
- package/dist/schemas/OpenidAuthorizationServerMetadataSchema.d.ts +49 -0
- package/dist/schemas/OpenidAuthorizationServerMetadataSchema.d.ts.map +1 -0
- package/dist/schemas/OpenidAuthorizationServerMetadataSchema.js +21 -0
- package/dist/schemas/OpenidCredentialIssuerMetadataSchema.d.ts +1030 -0
- package/dist/schemas/OpenidCredentialIssuerMetadataSchema.d.ts.map +1 -0
- package/dist/schemas/OpenidCredentialIssuerMetadataSchema.js +35 -0
- package/dist/schemas/SdJwtVcPayloadSchema.d.ts +79 -0
- package/dist/schemas/SdJwtVcPayloadSchema.d.ts.map +1 -0
- package/dist/schemas/SdJwtVcPayloadSchema.js +27 -0
- package/dist/schemas/SdJwtVcTypeMetadataSchema.d.ts +930 -0
- package/dist/schemas/SdJwtVcTypeMetadataSchema.d.ts.map +1 -0
- package/dist/schemas/SdJwtVcTypeMetadataSchema.js +105 -0
- package/dist/schemas/index.d.ts +6 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +22 -0
- package/dist/status/TokenStatusListVerifier.d.ts +41 -0
- package/dist/status/TokenStatusListVerifier.d.ts.map +1 -0
- package/dist/status/TokenStatusListVerifier.js +410 -0
- package/dist/trust/AlgorithmPolicy.d.ts +27 -0
- package/dist/trust/AlgorithmPolicy.d.ts.map +1 -0
- package/dist/trust/AlgorithmPolicy.js +60 -0
- package/dist/trust/TrustRegistry.d.ts +49 -0
- package/dist/trust/TrustRegistry.d.ts.map +1 -0
- package/dist/trust/TrustRegistry.js +114 -0
- package/dist/types.d.ts +76 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +10 -0
- package/dist/utils/escapeSVG.d.ts +2 -0
- package/dist/utils/escapeSVG.d.ts.map +1 -0
- package/dist/utils/escapeSVG.js +18 -0
- package/dist/utils/getIssuerMetadata.d.ts +8 -0
- package/dist/utils/getIssuerMetadata.d.ts.map +1 -0
- package/dist/utils/getIssuerMetadata.js +33 -0
- package/dist/utils/getSdJwtVcMetadata.d.ts +12 -0
- package/dist/utils/getSdJwtVcMetadata.d.ts.map +1 -0
- package/dist/utils/getSdJwtVcMetadata.js +274 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/matchLocalizedDisplay.d.ts +6 -0
- package/dist/utils/matchLocalizedDisplay.d.ts.map +1 -0
- package/dist/utils/matchLocalizedDisplay.js +16 -0
- package/dist/utils/util.d.ts +6 -0
- package/dist/utils/util.d.ts.map +1 -0
- package/dist/utils/util.js +53 -0
- package/dist/utils/verifyCertificate.d.ts +2 -0
- package/dist/utils/verifyCertificate.d.ts.map +1 -0
- package/dist/utils/verifyCertificate.js +100 -0
- package/dist/utils/verifySRIFromObject.d.ts +10 -0
- package/dist/utils/verifySRIFromObject.d.ts.map +1 -0
- package/dist/utils/verifySRIFromObject.js +32 -0
- package/dist/utils/verifyX5C.d.ts +11 -0
- package/dist/utils/verifyX5C.d.ts.map +1 -0
- package/dist/utils/verifyX5C.js +19 -0
- package/dist/x509/X509ChainVerifier.d.ts +59 -0
- package/dist/x509/X509ChainVerifier.d.ts.map +1 -0
- package/dist/x509/X509ChainVerifier.js +458 -0
- package/package.json +82 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export * from './rendering';
|
|
2
|
+
export * from './ParsingEngine';
|
|
3
|
+
export * from './credential-parsers/SDJWTVCParser';
|
|
4
|
+
export * from './credential-parsers/MsoMdocParser';
|
|
5
|
+
export * from './VerifyingEngine';
|
|
6
|
+
export * from './credential-verifiers/SDJWTVCVerifier';
|
|
7
|
+
export * from './credential-verifiers/MsoMdocVerifier';
|
|
8
|
+
export * from './PublicKeyResolverEngine';
|
|
9
|
+
export * from './defaultHttpClient';
|
|
10
|
+
export * from './resolvers/RemoteJwksResolver';
|
|
11
|
+
export * from './status/TokenStatusListVerifier';
|
|
12
|
+
export * from './trust/AlgorithmPolicy';
|
|
13
|
+
export * from './trust/TrustRegistry';
|
|
14
|
+
export * from './x509/X509ChainVerifier';
|
|
15
|
+
export * from './interfaces';
|
|
16
|
+
export * from './schemas';
|
|
17
|
+
export * from './utils';
|
|
18
|
+
export * from './functions';
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAE5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AAEnD,cAAc,mBAAmB,CAAC;AAClC,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AAEvD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AAEzC,cAAc,cAAc,CAAC;AAE7B,cAAc,WAAW,CAAC;AAE1B,cAAc,SAAS,CAAC;AAExB,cAAc,aAAa,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./rendering"), exports);
|
|
18
|
+
__exportStar(require("./ParsingEngine"), exports);
|
|
19
|
+
__exportStar(require("./credential-parsers/SDJWTVCParser"), exports);
|
|
20
|
+
__exportStar(require("./credential-parsers/MsoMdocParser"), exports);
|
|
21
|
+
__exportStar(require("./VerifyingEngine"), exports);
|
|
22
|
+
__exportStar(require("./credential-verifiers/SDJWTVCVerifier"), exports);
|
|
23
|
+
__exportStar(require("./credential-verifiers/MsoMdocVerifier"), exports);
|
|
24
|
+
__exportStar(require("./PublicKeyResolverEngine"), exports);
|
|
25
|
+
__exportStar(require("./defaultHttpClient"), exports);
|
|
26
|
+
__exportStar(require("./resolvers/RemoteJwksResolver"), exports);
|
|
27
|
+
__exportStar(require("./status/TokenStatusListVerifier"), exports);
|
|
28
|
+
__exportStar(require("./trust/AlgorithmPolicy"), exports);
|
|
29
|
+
__exportStar(require("./trust/TrustRegistry"), exports);
|
|
30
|
+
__exportStar(require("./x509/X509ChainVerifier"), exports);
|
|
31
|
+
__exportStar(require("./interfaces"), exports);
|
|
32
|
+
__exportStar(require("./schemas"), exports);
|
|
33
|
+
__exportStar(require("./utils"), exports);
|
|
34
|
+
__exportStar(require("./functions"), exports);
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhDQUE0QjtBQUU1QixrREFBZ0M7QUFDaEMscUVBQW1EO0FBQ25ELHFFQUFtRDtBQUVuRCxvREFBa0M7QUFDbEMseUVBQXVEO0FBQ3ZELHlFQUF1RDtBQUV2RCw0REFBMEM7QUFDMUMsc0RBQW9DO0FBQ3BDLGlFQUErQztBQUMvQyxtRUFBaUQ7QUFDakQsMERBQXdDO0FBQ3hDLHdEQUFzQztBQUN0QywyREFBeUM7QUFFekMsK0NBQTZCO0FBRTdCLDRDQUEwQjtBQUUxQiwwQ0FBd0I7QUFFeEIsOENBQTRCIn0=
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { JWK } from "jose";
|
|
2
|
+
import { CredentialParsingError, CredentialVerificationError, PublicKeyResolutionError } from "./error";
|
|
3
|
+
import { Result, ParsedCredential, CredentialClaims, ParserResult, CredentialClaimPath } from "./types";
|
|
4
|
+
export interface CredentialRendering {
|
|
5
|
+
renderSvgTemplate(args: {
|
|
6
|
+
json: any;
|
|
7
|
+
credentialImageSvgTemplate: string;
|
|
8
|
+
sdJwtVcMetadataClaims: any;
|
|
9
|
+
filter?: Array<CredentialClaimPath>;
|
|
10
|
+
}): Promise<string | null>;
|
|
11
|
+
}
|
|
12
|
+
export interface OpenID4VCICredentialRendering {
|
|
13
|
+
renderCustomSvgTemplate(args: {
|
|
14
|
+
signedClaims: CredentialClaims;
|
|
15
|
+
displayConfig: any;
|
|
16
|
+
}): Promise<string>;
|
|
17
|
+
}
|
|
18
|
+
export interface CredentialIssuerInfo {
|
|
19
|
+
credentialIssuerIdentifier: string;
|
|
20
|
+
credentialConfigurationId: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ParsingEngineI {
|
|
23
|
+
register(parser: CredentialParser): void;
|
|
24
|
+
parse({ rawCredential, credentialIssuer }: {
|
|
25
|
+
rawCredential: unknown;
|
|
26
|
+
credentialIssuer?: CredentialIssuerInfo;
|
|
27
|
+
}): Promise<Result<ParsedCredential, CredentialParsingError>>;
|
|
28
|
+
}
|
|
29
|
+
export interface VerifyingEngineI {
|
|
30
|
+
register(credentialVerifier: CredentialVerifier): void;
|
|
31
|
+
verify({ rawCredential, opts }: {
|
|
32
|
+
rawCredential: unknown;
|
|
33
|
+
opts: CredentialVerificationOptions;
|
|
34
|
+
}): Promise<Result<VerifiedCredential, CredentialVerificationError>>;
|
|
35
|
+
}
|
|
36
|
+
export interface PublicKeyResolverEngineI {
|
|
37
|
+
register(resolver: PublicKeyResolver): void;
|
|
38
|
+
resolve(args: PublicKeyResolutionRequest): Promise<Result<{
|
|
39
|
+
jwk: JWK;
|
|
40
|
+
}, PublicKeyResolutionError>>;
|
|
41
|
+
}
|
|
42
|
+
export interface CredentialParser {
|
|
43
|
+
parse(args: {
|
|
44
|
+
rawCredential: unknown;
|
|
45
|
+
credentialIssuer?: CredentialIssuerInfo;
|
|
46
|
+
}): Promise<ParserResult>;
|
|
47
|
+
}
|
|
48
|
+
export interface CredentialVerifier {
|
|
49
|
+
verify(args: {
|
|
50
|
+
rawCredential: unknown;
|
|
51
|
+
opts: CredentialVerificationOptions;
|
|
52
|
+
}): Promise<Result<VerifiedCredential, CredentialVerificationError>>;
|
|
53
|
+
}
|
|
54
|
+
export type CredentialStatus = "valid" | "revoked" | "suspended" | "application-specific";
|
|
55
|
+
export interface VerifiedCredential {
|
|
56
|
+
holderPublicKey: JWK;
|
|
57
|
+
credentialStatus?: CredentialStatus;
|
|
58
|
+
statusListUri?: string;
|
|
59
|
+
statusListIndex?: number;
|
|
60
|
+
}
|
|
61
|
+
export interface CredentialVerificationOptions {
|
|
62
|
+
expectedNonce?: string;
|
|
63
|
+
expectedAudience?: string;
|
|
64
|
+
expectedIssuer?: string;
|
|
65
|
+
expectedCredentialType?: string;
|
|
66
|
+
requiredClaimKeys?: readonly string[];
|
|
67
|
+
requireKeyBinding?: boolean;
|
|
68
|
+
holderNonce?: string;
|
|
69
|
+
responseUri?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface PublicKeyResolver {
|
|
72
|
+
resolve(args: PublicKeyResolutionRequest): Promise<Result<{
|
|
73
|
+
jwk: JWK;
|
|
74
|
+
}, PublicKeyResolutionError>>;
|
|
75
|
+
}
|
|
76
|
+
export type TokenVerificationType = "credential" | "kb-jwt" | "status-list";
|
|
77
|
+
/**
|
|
78
|
+
* `identifier` is the exact issuer identifier. `kid` and `alg` come from the
|
|
79
|
+
* protected JOSE header and must never be inferred from untrusted metadata.
|
|
80
|
+
*/
|
|
81
|
+
export interface PublicKeyResolutionRequest {
|
|
82
|
+
identifier: string;
|
|
83
|
+
kid?: string;
|
|
84
|
+
alg?: string;
|
|
85
|
+
tokenType?: TokenVerificationType;
|
|
86
|
+
credentialType?: string;
|
|
87
|
+
}
|
|
88
|
+
export interface HttpClient {
|
|
89
|
+
get(url: string, headers?: Record<string, unknown>, options?: any): Promise<{
|
|
90
|
+
status: number;
|
|
91
|
+
headers: Record<string, unknown>;
|
|
92
|
+
data: unknown;
|
|
93
|
+
}>;
|
|
94
|
+
post(url: string, body: any, headers?: Record<string, unknown>, options?: any): Promise<{
|
|
95
|
+
status: number;
|
|
96
|
+
headers: Record<string, unknown>;
|
|
97
|
+
data: unknown;
|
|
98
|
+
}>;
|
|
99
|
+
}
|
|
100
|
+
export interface Context {
|
|
101
|
+
clockTolerance: number;
|
|
102
|
+
lang: string;
|
|
103
|
+
subtle: SubtleCrypto;
|
|
104
|
+
/**
|
|
105
|
+
* each string is Base64-encoded DER representation without line breaks or headers like -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
|
|
106
|
+
*/
|
|
107
|
+
trustedCertificates: string[];
|
|
108
|
+
config?: {
|
|
109
|
+
vctRegistryUri: string;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rendering.d.ts","sourceRoot":"","sources":["../src/rendering.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAInD,wBAAgB,0BAA0B,IAAI,mBAAmB,CAoDhE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CredentialRenderingService = CredentialRenderingService;
|
|
7
|
+
const jsonpointer_1 = __importDefault(require("jsonpointer"));
|
|
8
|
+
const formatDate_1 = require("./functions/formatDate");
|
|
9
|
+
const escapeSVG_1 = require("./utils/escapeSVG");
|
|
10
|
+
function CredentialRenderingService() {
|
|
11
|
+
const renderSvgTemplate = async ({ json, credentialImageSvgTemplate, sdJwtVcMetadataClaims, filter }) => {
|
|
12
|
+
let svgContent = null;
|
|
13
|
+
try {
|
|
14
|
+
svgContent = credentialImageSvgTemplate;
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
return null; // Return null if fetching fails
|
|
18
|
+
}
|
|
19
|
+
if (svgContent) {
|
|
20
|
+
// Build pathMap from credentialHeader.vctm.claims
|
|
21
|
+
const pathMap = sdJwtVcMetadataClaims.reduce((acc, claim) => {
|
|
22
|
+
if (claim.svg_id && claim.path) {
|
|
23
|
+
acc[claim.svg_id] = claim.path;
|
|
24
|
+
}
|
|
25
|
+
return acc;
|
|
26
|
+
}, {});
|
|
27
|
+
// Regular expression to match {{svg_id}} placeholders
|
|
28
|
+
const regex = /{{([^}]+)}}/g;
|
|
29
|
+
const replacedSvgText = svgContent.replace(regex, (_match, svgId) => {
|
|
30
|
+
// Retrieve the path array for the current svgId from pathMap
|
|
31
|
+
const pathArray = pathMap[svgId];
|
|
32
|
+
if (Array.isArray(pathArray) && filter && !filter.map(f => f.join('.')).includes(pathArray.join('.'))) {
|
|
33
|
+
return '-';
|
|
34
|
+
}
|
|
35
|
+
// If pathArray exists, convert it to a JSON pointer path
|
|
36
|
+
if (Array.isArray(pathArray)) {
|
|
37
|
+
const jsonPointerPath = `/${pathArray.join('/')}`;
|
|
38
|
+
// Retrieve the value from beautifiedForm using jsonpointer
|
|
39
|
+
let value = (0, escapeSVG_1.escapeSVG)(jsonpointer_1.default.get(json, jsonPointerPath));
|
|
40
|
+
if (value !== undefined) {
|
|
41
|
+
value = (0, formatDate_1.formatDate)(value, 'date');
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return '-';
|
|
46
|
+
});
|
|
47
|
+
const dataUri = `data:image/svg+xml;utf8,${encodeURIComponent(replacedSvgText)}`;
|
|
48
|
+
return dataUri; // Return the data URI for the SVG
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
renderSvgTemplate,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JlbmRlcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQU1BLGdFQW9EQztBQTFERCw4REFBc0M7QUFDdEMsdURBQW9EO0FBRXBELGlEQUE4QztBQUc5QyxTQUFnQiwwQkFBMEI7SUFDekMsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFzSCxFQUFFLEVBQUU7UUFFM04sSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQztZQUNKLFVBQVUsR0FBRywwQkFBMEIsQ0FBQztRQUN6QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQixrREFBa0Q7WUFDbEQsTUFBTSxPQUFPLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEtBQVUsRUFBRSxFQUFFO2dCQUNyRSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNoQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLENBQUM7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDWixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFUCxzREFBc0Q7WUFDdEQsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDO1lBQzdCLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNuRSw2REFBNkQ7Z0JBQzdELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFFakMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN2RyxPQUFPLEdBQUcsQ0FBQztnQkFDWixDQUFDO2dCQUNELHlEQUF5RDtnQkFDekQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sZUFBZSxHQUFHLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUVsRCwyREFBMkQ7b0JBQzNELElBQUksS0FBSyxHQUFHLElBQUEscUJBQVMsRUFBQyxxQkFBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFFOUQsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQ3pCLEtBQUssR0FBRyxJQUFBLHVCQUFVLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUNsQyxPQUFPLEtBQUssQ0FBQztvQkFDZCxDQUFDO2dCQUNGLENBQUM7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDWixDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLDJCQUEyQixrQkFBa0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1lBQ2pGLE9BQU8sT0FBTyxDQUFDLENBQUMsa0NBQWtDO1FBQ25ELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTixpQkFBaUI7S0FDakIsQ0FBQTtBQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { HttpClient, PublicKeyResolver } from "../interfaces";
|
|
2
|
+
import { AlgorithmPolicy } from "../trust/AlgorithmPolicy";
|
|
3
|
+
import { TrustRegistry } from "../trust/TrustRegistry";
|
|
4
|
+
export interface RemoteJwksResolverOptions {
|
|
5
|
+
trustRegistry: TrustRegistry;
|
|
6
|
+
algorithmPolicy: AlgorithmPolicy;
|
|
7
|
+
httpClient: HttpClient;
|
|
8
|
+
cacheTtlMs?: number;
|
|
9
|
+
requestTimeoutMs?: number;
|
|
10
|
+
maxResponseBytes?: number;
|
|
11
|
+
maxKeys?: number;
|
|
12
|
+
maxFetchAttempts?: number;
|
|
13
|
+
retryDelayMs?: number;
|
|
14
|
+
now?: () => number;
|
|
15
|
+
}
|
|
16
|
+
export declare function RemoteJwksResolver(options: RemoteJwksResolverOptions): PublicKeyResolver;
|
|
17
|
+
//# sourceMappingURL=RemoteJwksResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteJwksResolver.d.ts","sourceRoot":"","sources":["../../src/resolvers/RemoteJwksResolver.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,UAAU,EAEV,iBAAiB,EAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAsB,MAAM,wBAAwB,CAAC;AAO3E,MAAM,WAAW,yBAAyB;IACzC,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAiBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,iBAAiB,CA4HxF"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RemoteJwksResolver = RemoteJwksResolver;
|
|
4
|
+
const error_1 = require("../error");
|
|
5
|
+
const DEFAULT_CACHE_TTL_MS = 5 * 60 * 1000;
|
|
6
|
+
const DEFAULT_REQUEST_TIMEOUT_MS = 5_000;
|
|
7
|
+
const DEFAULT_MAX_RESPONSE_BYTES = 256 * 1024;
|
|
8
|
+
const DEFAULT_MAX_KEYS = 100;
|
|
9
|
+
const DEFAULT_MAX_FETCH_ATTEMPTS = 2;
|
|
10
|
+
const DEFAULT_RETRY_DELAY_MS = 250;
|
|
11
|
+
function failure(error) {
|
|
12
|
+
return { success: false, error };
|
|
13
|
+
}
|
|
14
|
+
function isJwk(value) {
|
|
15
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
16
|
+
}
|
|
17
|
+
function RemoteJwksResolver(options) {
|
|
18
|
+
const cache = new Map();
|
|
19
|
+
const cacheTtlMs = options.cacheTtlMs ?? DEFAULT_CACHE_TTL_MS;
|
|
20
|
+
const requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;
|
|
21
|
+
const maxResponseBytes = options.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES;
|
|
22
|
+
const maxKeys = options.maxKeys ?? DEFAULT_MAX_KEYS;
|
|
23
|
+
const maxFetchAttempts = options.maxFetchAttempts ?? DEFAULT_MAX_FETCH_ATTEMPTS;
|
|
24
|
+
const retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;
|
|
25
|
+
const now = options.now ?? Date.now;
|
|
26
|
+
if (cacheTtlMs < 0 || requestTimeoutMs <= 0 || maxResponseBytes <= 0 || maxKeys <= 0 ||
|
|
27
|
+
!Number.isSafeInteger(maxFetchAttempts) || maxFetchAttempts <= 0 ||
|
|
28
|
+
!Number.isSafeInteger(retryDelayMs) || retryDelayMs < 0) {
|
|
29
|
+
throw new TypeError("Invalid RemoteJwksResolver limits");
|
|
30
|
+
}
|
|
31
|
+
async function fetchJwksOnce(entry) {
|
|
32
|
+
let response;
|
|
33
|
+
try {
|
|
34
|
+
response = await options.httpClient.get(entry.jwksUri, { Accept: "application/json" }, {
|
|
35
|
+
useCache: false,
|
|
36
|
+
timeout: requestTimeoutMs,
|
|
37
|
+
maxRedirects: 0,
|
|
38
|
+
maxContentLength: maxResponseBytes,
|
|
39
|
+
maxBodyLength: maxResponseBytes,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return failure(error_1.PublicKeyResolutionError.RemoteJwksFetchFailed);
|
|
44
|
+
}
|
|
45
|
+
if (!response || response.status !== 200) {
|
|
46
|
+
return failure(error_1.PublicKeyResolutionError.RemoteJwksFetchFailed);
|
|
47
|
+
}
|
|
48
|
+
if (typeof response.data !== "object" || response.data === null) {
|
|
49
|
+
return failure(error_1.PublicKeyResolutionError.InvalidJwksResponse);
|
|
50
|
+
}
|
|
51
|
+
let encodedLength;
|
|
52
|
+
try {
|
|
53
|
+
encodedLength = new TextEncoder().encode(JSON.stringify(response.data)).byteLength;
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return failure(error_1.PublicKeyResolutionError.InvalidJwksResponse);
|
|
57
|
+
}
|
|
58
|
+
if (encodedLength > maxResponseBytes) {
|
|
59
|
+
return failure(error_1.PublicKeyResolutionError.InvalidJwksResponse);
|
|
60
|
+
}
|
|
61
|
+
const keys = response.data.keys;
|
|
62
|
+
if (!Array.isArray(keys) || keys.length === 0 || keys.length > maxKeys || !keys.every(isJwk)) {
|
|
63
|
+
return failure(error_1.PublicKeyResolutionError.InvalidJwksResponse);
|
|
64
|
+
}
|
|
65
|
+
const cached = { expiresAt: now() + cacheTtlMs, keys: [...keys] };
|
|
66
|
+
cache.set(entry.issuer, cached);
|
|
67
|
+
return { success: true, value: cached };
|
|
68
|
+
}
|
|
69
|
+
async function fetchJwks(entry) {
|
|
70
|
+
for (let attempt = 1; attempt <= maxFetchAttempts; attempt++) {
|
|
71
|
+
const result = await fetchJwksOnce(entry);
|
|
72
|
+
if (result.success || result.error !== error_1.PublicKeyResolutionError.RemoteJwksFetchFailed) {
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
if (attempt < maxFetchAttempts && retryDelayMs > 0) {
|
|
76
|
+
await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return failure(error_1.PublicKeyResolutionError.RemoteJwksFetchFailed);
|
|
80
|
+
}
|
|
81
|
+
async function getJwks(entry, forceRefresh) {
|
|
82
|
+
const cached = cache.get(entry.issuer);
|
|
83
|
+
if (!forceRefresh && cached && cached.expiresAt > now()) {
|
|
84
|
+
return { success: true, value: cached };
|
|
85
|
+
}
|
|
86
|
+
return fetchJwks(entry);
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
async resolve(request) {
|
|
90
|
+
const entry = options.trustRegistry.get(request.identifier);
|
|
91
|
+
if (!entry)
|
|
92
|
+
return failure(error_1.PublicKeyResolutionError.IssuerNotTrusted);
|
|
93
|
+
if (!request.kid)
|
|
94
|
+
return failure(error_1.PublicKeyResolutionError.MissingKeyIdentifier);
|
|
95
|
+
if (!request.alg)
|
|
96
|
+
return failure(error_1.PublicKeyResolutionError.MissingAlgorithm);
|
|
97
|
+
const tokenType = request.tokenType ?? "credential";
|
|
98
|
+
if (tokenType === "credential" &&
|
|
99
|
+
entry.credentialTypes !== undefined &&
|
|
100
|
+
(!request.credentialType || !entry.credentialTypes.includes(request.credentialType))) {
|
|
101
|
+
return failure(error_1.PublicKeyResolutionError.CredentialTypeNotAllowed);
|
|
102
|
+
}
|
|
103
|
+
const algorithmResult = options.algorithmPolicy.validateAlgorithm({
|
|
104
|
+
entry,
|
|
105
|
+
alg: request.alg,
|
|
106
|
+
tokenType,
|
|
107
|
+
});
|
|
108
|
+
if (!algorithmResult.success)
|
|
109
|
+
return algorithmResult;
|
|
110
|
+
const hadUsableCache = Boolean(cache.get(entry.issuer)?.expiresAt && cache.get(entry.issuer).expiresAt > now());
|
|
111
|
+
let jwksResult = await getJwks(entry, false);
|
|
112
|
+
if (!jwksResult.success)
|
|
113
|
+
return jwksResult;
|
|
114
|
+
let matches = jwksResult.value.keys.filter((key) => key.kid === request.kid);
|
|
115
|
+
if (matches.length === 0 && hadUsableCache) {
|
|
116
|
+
jwksResult = await getJwks(entry, true);
|
|
117
|
+
if (!jwksResult.success)
|
|
118
|
+
return jwksResult;
|
|
119
|
+
matches = jwksResult.value.keys.filter((key) => key.kid === request.kid);
|
|
120
|
+
}
|
|
121
|
+
if (matches.length === 0)
|
|
122
|
+
return failure(error_1.PublicKeyResolutionError.KeyNotFound);
|
|
123
|
+
if (matches.length !== 1)
|
|
124
|
+
return failure(error_1.PublicKeyResolutionError.DuplicateKeyIdentifier);
|
|
125
|
+
const keyResult = options.algorithmPolicy.validateKey({
|
|
126
|
+
entry,
|
|
127
|
+
jwk: matches[0],
|
|
128
|
+
kid: request.kid,
|
|
129
|
+
alg: request.alg,
|
|
130
|
+
tokenType,
|
|
131
|
+
});
|
|
132
|
+
if (!keyResult.success)
|
|
133
|
+
return keyResult;
|
|
134
|
+
return { success: true, value: { jwk: { ...matches[0] } } };
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVtb3RlSndrc1Jlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jlc29sdmVycy9SZW1vdGVKd2tzUmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0Q0EsZ0RBNEhDO0FBdktELG9DQUFvRDtBQTRCcEQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUMzQyxNQUFNLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUN6QyxNQUFNLDBCQUEwQixHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDOUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFDN0IsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLENBQUM7QUFDckMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFFbkMsU0FBUyxPQUFPLENBQUMsS0FBK0I7SUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFjLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLEtBQWM7SUFDNUIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLE9BQWtDO0lBQ3BFLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksb0JBQW9CLENBQUM7SUFDOUQsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksMEJBQTBCLENBQUM7SUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksMEJBQTBCLENBQUM7SUFDaEYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxnQkFB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
|