@twin.org/trust-verifiers 0.0.3-next.8 → 0.9.0-next.1

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 (28) hide show
  1. package/README.md +1 -1
  2. package/dist/es/index.js +3 -0
  3. package/dist/es/index.js.map +1 -1
  4. package/dist/es/models/IIdentityAllowDenyVerifierConfig.js +4 -0
  5. package/dist/es/models/IIdentityAllowDenyVerifierConfig.js.map +1 -0
  6. package/dist/es/models/IIdentityAllowDenyVerifierConstructorOptions.js +2 -0
  7. package/dist/es/models/IIdentityAllowDenyVerifierConstructorOptions.js.map +1 -0
  8. package/dist/es/models/IJwtVerifiableCredentialVerifierConstructorOptions.js.map +1 -1
  9. package/dist/es/verifiers/identityAllowDenyVerifier.js +70 -0
  10. package/dist/es/verifiers/identityAllowDenyVerifier.js.map +1 -0
  11. package/dist/es/verifiers/jwtVerifiableCredentialVerifier.js +3 -9
  12. package/dist/es/verifiers/jwtVerifiableCredentialVerifier.js.map +1 -1
  13. package/dist/types/index.d.ts +3 -0
  14. package/dist/types/models/IIdentityAllowDenyVerifierConfig.d.ts +15 -0
  15. package/dist/types/models/IIdentityAllowDenyVerifierConstructorOptions.d.ts +10 -0
  16. package/dist/types/models/IJwtVerifiableCredentialVerifierConstructorOptions.d.ts +0 -5
  17. package/dist/types/verifiers/identityAllowDenyVerifier.d.ts +31 -0
  18. package/dist/types/verifiers/jwtVerifiableCredentialVerifier.d.ts +3 -3
  19. package/docs/changelog.md +261 -15
  20. package/docs/examples.md +44 -1
  21. package/docs/reference/classes/IdentityAllowDenyVerifier.md +91 -0
  22. package/docs/reference/classes/JwtVerifiableCredentialVerifier.md +6 -6
  23. package/docs/reference/index.md +3 -0
  24. package/docs/reference/interfaces/IIdentityAllowDenyVerifierConfig.md +21 -0
  25. package/docs/reference/interfaces/IIdentityAllowDenyVerifierConstructorOptions.md +11 -0
  26. package/docs/reference/interfaces/IJwtVerifiableCredentialVerifierConstructorOptions.md +2 -16
  27. package/locales/en.json +5 -0
  28. package/package.json +11 -11
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # TWIN Trust Verifiers
2
2
 
3
- Verifiers for trust.
3
+ This package is part of the trust repository and provides reusable trust building blocks so applications can issue, validate, and orchestrate trust artefacts with consistent behaviour.
4
4
 
5
5
  ## Installation
6
6
 
package/dist/es/index.js CHANGED
@@ -1,5 +1,8 @@
1
1
  // Copyright 2025 IOTA Stiftung.
2
2
  // SPDX-License-Identifier: Apache-2.0.
3
+ export * from "./models/IIdentityAllowDenyVerifierConfig.js";
4
+ export * from "./models/IIdentityAllowDenyVerifierConstructorOptions.js";
3
5
  export * from "./models/IJwtVerifiableCredentialVerifierConstructorOptions.js";
6
+ export * from "./verifiers/identityAllowDenyVerifier.js";
4
7
  export * from "./verifiers/jwtVerifiableCredentialVerifier.js";
5
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,cAAc,gEAAgE,CAAC;AAC/E,cAAc,gDAAgD,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nexport * from \"./models/IJwtVerifiableCredentialVerifierConstructorOptions.js\";\nexport * from \"./verifiers/jwtVerifiableCredentialVerifier.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0DAA0D,CAAC;AACzE,cAAc,gEAAgE,CAAC;AAC/E,cAAc,0CAA0C,CAAC;AACzD,cAAc,gDAAgD,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nexport * from \"./models/IIdentityAllowDenyVerifierConfig.js\";\nexport * from \"./models/IIdentityAllowDenyVerifierConstructorOptions.js\";\nexport * from \"./models/IJwtVerifiableCredentialVerifierConstructorOptions.js\";\nexport * from \"./verifiers/identityAllowDenyVerifier.js\";\nexport * from \"./verifiers/jwtVerifiableCredentialVerifier.js\";\n"]}
@@ -0,0 +1,4 @@
1
+ // Copyright 2025 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ export {};
4
+ //# sourceMappingURL=IIdentityAllowDenyVerifierConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IIdentityAllowDenyVerifierConfig.js","sourceRoot":"","sources":["../../../src/models/IIdentityAllowDenyVerifierConfig.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * Configuration for the Identity Allow/Deny Verifier.\n */\nexport interface IIdentityAllowDenyVerifierConfig {\n\t/**\n\t * Identities that are permitted; all others are rejected.\n\t * Skipped when empty or absent.\n\t */\n\tallowIdentities?: string[];\n\n\t/**\n\t * Identities that are explicitly rejected.\n\t * Skipped when empty or absent.\n\t */\n\tdenyIdentities?: string[];\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IIdentityAllowDenyVerifierConstructorOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IIdentityAllowDenyVerifierConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IIdentityAllowDenyVerifierConstructorOptions.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IIdentityAllowDenyVerifierConfig } from \"./IIdentityAllowDenyVerifierConfig.js\";\n\n/**\n * The options for the Identity Allow/Deny Verifier.\n */\nexport interface IIdentityAllowDenyVerifierConstructorOptions {\n\t/**\n\t * The allow/deny configuration for the verifier.\n\t */\n\tconfig?: IIdentityAllowDenyVerifierConfig;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"IJwtVerifiableCredentialVerifierConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IJwtVerifiableCredentialVerifierConstructorOptions.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * The options for the JWT Verifiable Credential Verifier.\n */\nexport interface IJwtVerifiableCredentialVerifierConstructorOptions {\n\t/**\n\t * The logging component type.\n\t * @default logging\n\t */\n\tloggingComponentType?: string;\n\n\t/**\n\t * The identity component type.\n\t * @default identity\n\t */\n\tidentityComponentType?: string;\n}\n"]}
1
+ {"version":3,"file":"IJwtVerifiableCredentialVerifierConstructorOptions.js","sourceRoot":"","sources":["../../../src/models/IJwtVerifiableCredentialVerifierConstructorOptions.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * The options for the JWT Verifiable Credential Verifier.\n */\nexport interface IJwtVerifiableCredentialVerifierConstructorOptions {\n\t/**\n\t * The identity component type.\n\t * @default identity\n\t */\n\tidentityComponentType?: string;\n}\n"]}
@@ -0,0 +1,70 @@
1
+ // Copyright 2025 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ import { GeneralError, Is } from "@twin.org/core";
4
+ /**
5
+ * Class to gate verification based on allowed and denied identity lists.
6
+ */
7
+ export class IdentityAllowDenyVerifier {
8
+ /**
9
+ * Runtime name for the class.
10
+ */
11
+ static CLASS_NAME = "IdentityAllowDenyVerifier";
12
+ /**
13
+ * The identities that are permitted.
14
+ * @internal
15
+ */
16
+ _allowIdentities;
17
+ /**
18
+ * The identities that are explicitly rejected.
19
+ * @internal
20
+ */
21
+ _denyIdentities;
22
+ /**
23
+ * Creates a new instance of IdentityAllowDenyVerifier.
24
+ * @param options The options for the verifier.
25
+ */
26
+ constructor(options) {
27
+ this._allowIdentities = options?.config?.allowIdentities;
28
+ this._denyIdentities = options?.config?.denyIdentities;
29
+ }
30
+ /**
31
+ * Returns the class name of the component.
32
+ * @returns The runtime class name string
33
+ */
34
+ className() {
35
+ return IdentityAllowDenyVerifier.CLASS_NAME;
36
+ }
37
+ /**
38
+ * Verify a payload by checking the validity of its structure and content.
39
+ * @param payload The payload to verify.
40
+ * @param info Information extracted from previous verifiers and to be added by this verifier.
41
+ * @param info.identity The identity associated with the payload.
42
+ * @param errors Array to collect verification errors.
43
+ * @returns Whether the payload is verified, returns undefined if payload was not processed.
44
+ */
45
+ async verify(payload, info, errors) {
46
+ const hasAllow = Is.arrayValue(this._allowIdentities);
47
+ const hasDeny = Is.arrayValue(this._denyIdentities);
48
+ if (!hasAllow && !hasDeny) {
49
+ return undefined;
50
+ }
51
+ if (!Is.stringValue(info.identity)) {
52
+ errors.push(new GeneralError(IdentityAllowDenyVerifier.CLASS_NAME, "identityMissing"));
53
+ return false;
54
+ }
55
+ if (hasAllow && !this._allowIdentities.includes(info.identity)) {
56
+ errors.push(new GeneralError(IdentityAllowDenyVerifier.CLASS_NAME, "identityNotAllowed", {
57
+ identity: info.identity
58
+ }));
59
+ return false;
60
+ }
61
+ if (hasDeny && this._denyIdentities.includes(info.identity)) {
62
+ errors.push(new GeneralError(IdentityAllowDenyVerifier.CLASS_NAME, "identityDenied", {
63
+ identity: info.identity
64
+ }));
65
+ return false;
66
+ }
67
+ return true;
68
+ }
69
+ }
70
+ //# sourceMappingURL=identityAllowDenyVerifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identityAllowDenyVerifier.js","sourceRoot":"","sources":["../../../src/verifiers/identityAllowDenyVerifier.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,OAAO,EAAE,YAAY,EAAE,EAAE,EAAe,MAAM,gBAAgB,CAAC;AAK/D;;GAEG;AACH,MAAM,OAAO,yBAAyB;IACrC;;OAEG;IACI,MAAM,CAAU,UAAU,+BAA+C;IAEhF;;;OAGG;IACc,gBAAgB,CAAY;IAE7C;;;OAGG;IACc,eAAe,CAAY;IAE5C;;;OAGG;IACH,YAAY,OAAsD;QACjE,IAAI,CAAC,gBAAgB,GAAG,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC;QACzD,IAAI,CAAC,eAAe,GAAG,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC;IACxD,CAAC;IAED;;;OAGG;IACI,SAAS;QACf,OAAO,yBAAyB,CAAC,UAAU,CAAC;IAC7C,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,MAAM,CAClB,OAAgB,EAChB,IAA4B,EAC5B,MAAgB;QAEhB,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAS,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAS,IAAI,CAAC,eAAe,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC;YACvF,OAAO,KAAK,CAAC;QACd,CAAC;QAED,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CACV,IAAI,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,oBAAoB,EAAE;gBAC5E,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CACF,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QAED,IAAI,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7D,MAAM,CAAC,IAAI,CACV,IAAI,YAAY,CAAC,yBAAyB,CAAC,UAAU,EAAE,gBAAgB,EAAE;gBACxE,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACvB,CAAC,CACF,CAAC;YACF,OAAO,KAAK,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { GeneralError, Is, type IError } from \"@twin.org/core\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { ITrustVerificationInfo, ITrustVerifier } from \"@twin.org/trust-models\";\nimport type { IIdentityAllowDenyVerifierConstructorOptions } from \"../models/IIdentityAllowDenyVerifierConstructorOptions.js\";\n\n/**\n * Class to gate verification based on allowed and denied identity lists.\n */\nexport class IdentityAllowDenyVerifier implements ITrustVerifier {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<IdentityAllowDenyVerifier>();\n\n\t/**\n\t * The identities that are permitted.\n\t * @internal\n\t */\n\tprivate readonly _allowIdentities?: string[];\n\n\t/**\n\t * The identities that are explicitly rejected.\n\t * @internal\n\t */\n\tprivate readonly _denyIdentities?: string[];\n\n\t/**\n\t * Creates a new instance of IdentityAllowDenyVerifier.\n\t * @param options The options for the verifier.\n\t */\n\tconstructor(options?: IIdentityAllowDenyVerifierConstructorOptions) {\n\t\tthis._allowIdentities = options?.config?.allowIdentities;\n\t\tthis._denyIdentities = options?.config?.denyIdentities;\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The runtime class name string\n\t */\n\tpublic className(): string {\n\t\treturn IdentityAllowDenyVerifier.CLASS_NAME;\n\t}\n\n\t/**\n\t * Verify a payload by checking the validity of its structure and content.\n\t * @param payload The payload to verify.\n\t * @param info Information extracted from previous verifiers and to be added by this verifier.\n\t * @param info.identity The identity associated with the payload.\n\t * @param errors Array to collect verification errors.\n\t * @returns Whether the payload is verified, returns undefined if payload was not processed.\n\t */\n\tpublic async verify(\n\t\tpayload: unknown,\n\t\tinfo: ITrustVerificationInfo,\n\t\terrors: IError[]\n\t): Promise<boolean | undefined> {\n\t\tconst hasAllow = Is.arrayValue<string>(this._allowIdentities);\n\t\tconst hasDeny = Is.arrayValue<string>(this._denyIdentities);\n\n\t\tif (!hasAllow && !hasDeny) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!Is.stringValue(info.identity)) {\n\t\t\terrors.push(new GeneralError(IdentityAllowDenyVerifier.CLASS_NAME, \"identityMissing\"));\n\t\t\treturn false;\n\t\t}\n\n\t\tif (hasAllow && !this._allowIdentities.includes(info.identity)) {\n\t\t\terrors.push(\n\t\t\t\tnew GeneralError(IdentityAllowDenyVerifier.CLASS_NAME, \"identityNotAllowed\", {\n\t\t\t\t\tidentity: info.identity\n\t\t\t\t})\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\tif (hasDeny && this._denyIdentities.includes(info.identity)) {\n\t\t\terrors.push(\n\t\t\t\tnew GeneralError(IdentityAllowDenyVerifier.CLASS_NAME, \"identityDenied\", {\n\t\t\t\t\tidentity: info.identity\n\t\t\t\t})\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t}\n}\n"]}
@@ -11,27 +11,21 @@ export class JwtVerifiableCredentialVerifier {
11
11
  * Runtime name for the class.
12
12
  */
13
13
  static CLASS_NAME = "JwtVerifiableCredentialVerifier";
14
- /**
15
- * The logging component.
16
- * @internal
17
- */
18
- _loggingComponent;
19
14
  /**
20
15
  * The identity component.
21
16
  * @internal
22
17
  */
23
18
  _identityComponent;
24
19
  /**
25
- * Create a new instance of JwtVerifiableCredentialVerifier.
26
- * @param options The options for the service.
20
+ * Creates a new instance of JwtVerifiableCredentialVerifier.
21
+ * @param options The options for the verifier.
27
22
  */
28
23
  constructor(options) {
29
- this._loggingComponent = ComponentFactory.getIfExists(options?.loggingComponentType ?? "logging");
30
24
  this._identityComponent = ComponentFactory.get(options?.identityComponentType ?? "identity");
31
25
  }
32
26
  /**
33
27
  * Returns the class name of the component.
34
- * @returns The class name of the component.
28
+ * @returns The runtime class name string
35
29
  */
36
30
  className() {
37
31
  return JwtVerifiableCredentialVerifier.CLASS_NAME;
@@ -1 +1 @@
1
- {"version":3,"file":"jwtVerifiableCredentialVerifier.js","sourceRoot":"","sources":["../../../src/verifiers/jwtVerifiableCredentialVerifier.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { BaseError, Coerce, ComponentFactory, GeneralError, Is, type IError } from \"@twin.org/core\";\nimport { JsonLdHelper } from \"@twin.org/data-json-ld\";\nimport type { IIdentityComponent } from \"@twin.org/identity-models\";\nimport type { ILoggingComponent } from \"@twin.org/logging-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { ITrustVerificationInfo, ITrustVerifier } from \"@twin.org/trust-models\";\nimport { Jwt } from \"@twin.org/web\";\nimport type { IJwtVerifiableCredentialVerifierConstructorOptions } from \"../models/IJwtVerifiableCredentialVerifierConstructorOptions.js\";\n\n/**\n * Class to verify a JWT Verifiable Credential.\n */\nexport class JwtVerifiableCredentialVerifier implements ITrustVerifier {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<JwtVerifiableCredentialVerifier>();\n\n\t/**\n\t * The logging component.\n\t * @internal\n\t */\n\tprivate readonly _loggingComponent?: ILoggingComponent;\n\n\t/**\n\t * The identity component.\n\t * @internal\n\t */\n\tprivate readonly _identityComponent: IIdentityComponent;\n\n\t/**\n\t * Create a new instance of JwtVerifiableCredentialVerifier.\n\t * @param options The options for the service.\n\t */\n\tconstructor(options?: IJwtVerifiableCredentialVerifierConstructorOptions) {\n\t\tthis._loggingComponent = ComponentFactory.getIfExists(\n\t\t\toptions?.loggingComponentType ?? \"logging\"\n\t\t);\n\n\t\tthis._identityComponent = ComponentFactory.get(options?.identityComponentType ?? \"identity\");\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The class name of the component.\n\t */\n\tpublic className(): string {\n\t\treturn JwtVerifiableCredentialVerifier.CLASS_NAME;\n\t}\n\n\t/**\n\t * Verify a payload by checking the validity of its structure and content.\n\t * @param payload The payload to verify.\n\t * @param info Information extracted from previous verifiers and to be added by this verifier.\n\t * @param info.identity The identity associated with the payload.\n\t * @param errors Array to collect verification errors.\n\t * @returns Whether the payload is verified, returns undefined if payload was not processed.\n\t */\n\tpublic async verify(\n\t\tpayload: unknown,\n\t\tinfo: ITrustVerificationInfo,\n\t\terrors: IError[]\n\t): Promise<boolean | undefined> {\n\t\tif (Is.stringValue(payload)) {\n\t\t\tconst jwt = await Jwt.decode(payload);\n\n\t\t\tif (Is.objectValue(jwt.header) && Is.object(jwt.payload) && Is.uint8Array(jwt.signature)) {\n\t\t\t\tlet isVerified = true;\n\t\t\t\ttry {\n\t\t\t\t\tconst expiredMs = (Coerce.number(jwt.payload.exp) ?? 0) * 1000;\n\t\t\t\t\tif (expiredMs > 0 && expiredMs < Date.now()) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tnew GeneralError(JwtVerifiableCredentialVerifier.CLASS_NAME, \"tokenExpired\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisVerified = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst verificationResult =\n\t\t\t\t\t\tawait this._identityComponent.verifiableCredentialVerify(payload);\n\n\t\t\t\t\tconst verifiableCredential = verificationResult.verifiableCredential;\n\t\t\t\t\tif (Is.empty(verifiableCredential)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tnew GeneralError(JwtVerifiableCredentialVerifier.CLASS_NAME, \"tokenMissingCredential\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisVerified = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinfo.data ??= {};\n\t\t\t\t\t\tinfo.data.verifiableCredential = JsonLdHelper.toNodeObject(verifiableCredential);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst issuer: string | undefined = Is.stringValue(verifiableCredential?.issuer)\n\t\t\t\t\t\t? verifiableCredential?.issuer\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (Is.empty(issuer)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tnew GeneralError(JwtVerifiableCredentialVerifier.CLASS_NAME, \"tokenMissingIssuer\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisVerified = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinfo.identity = issuer;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst subject = verifiableCredential?.credentialSubject;\n\t\t\t\t\tif (Is.empty(subject)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tnew GeneralError(JwtVerifiableCredentialVerifier.CLASS_NAME, \"tokenMissingSubject\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisVerified = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinfo.data ??= {};\n\t\t\t\t\t\tinfo.data.subject = JsonLdHelper.toNodeObject(subject);\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tisVerified = false;\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\tnew GeneralError(\n\t\t\t\t\t\t\tJwtVerifiableCredentialVerifier.CLASS_NAME,\n\t\t\t\t\t\t\t\"tokenDecodingFailed\",\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tBaseError.fromError(err)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn isVerified;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"jwtVerifiableCredentialVerifier.js","sourceRoot":"","sources":["../../../src/verifiers/jwtVerifiableCredentialVerifier.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright 2025 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport { BaseError, Coerce, ComponentFactory, GeneralError, Is, type IError } from \"@twin.org/core\";\nimport { JsonLdHelper } from \"@twin.org/data-json-ld\";\nimport type { IIdentityComponent } from \"@twin.org/identity-models\";\nimport { nameof } from \"@twin.org/nameof\";\nimport type { ITrustVerificationInfo, ITrustVerifier } from \"@twin.org/trust-models\";\nimport { Jwt } from \"@twin.org/web\";\nimport type { IJwtVerifiableCredentialVerifierConstructorOptions } from \"../models/IJwtVerifiableCredentialVerifierConstructorOptions.js\";\n\n/**\n * Class to verify a JWT Verifiable Credential.\n */\nexport class JwtVerifiableCredentialVerifier implements ITrustVerifier {\n\t/**\n\t * Runtime name for the class.\n\t */\n\tpublic static readonly CLASS_NAME: string = nameof<JwtVerifiableCredentialVerifier>();\n\n\t/**\n\t * The identity component.\n\t * @internal\n\t */\n\tprivate readonly _identityComponent: IIdentityComponent;\n\n\t/**\n\t * Creates a new instance of JwtVerifiableCredentialVerifier.\n\t * @param options The options for the verifier.\n\t */\n\tconstructor(options?: IJwtVerifiableCredentialVerifierConstructorOptions) {\n\t\tthis._identityComponent = ComponentFactory.get(options?.identityComponentType ?? \"identity\");\n\t}\n\n\t/**\n\t * Returns the class name of the component.\n\t * @returns The runtime class name string\n\t */\n\tpublic className(): string {\n\t\treturn JwtVerifiableCredentialVerifier.CLASS_NAME;\n\t}\n\n\t/**\n\t * Verify a payload by checking the validity of its structure and content.\n\t * @param payload The payload to verify.\n\t * @param info Information extracted from previous verifiers and to be added by this verifier.\n\t * @param info.identity The identity associated with the payload.\n\t * @param errors Array to collect verification errors.\n\t * @returns Whether the payload is verified, returns undefined if payload was not processed.\n\t */\n\tpublic async verify(\n\t\tpayload: unknown,\n\t\tinfo: ITrustVerificationInfo,\n\t\terrors: IError[]\n\t): Promise<boolean | undefined> {\n\t\tif (Is.stringValue(payload)) {\n\t\t\tconst jwt = await Jwt.decode(payload);\n\n\t\t\tif (Is.objectValue(jwt.header) && Is.object(jwt.payload) && Is.uint8Array(jwt.signature)) {\n\t\t\t\tlet isVerified = true;\n\t\t\t\ttry {\n\t\t\t\t\tconst expiredMs = (Coerce.number(jwt.payload.exp) ?? 0) * 1000;\n\t\t\t\t\tif (expiredMs > 0 && expiredMs < Date.now()) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tnew GeneralError(JwtVerifiableCredentialVerifier.CLASS_NAME, \"tokenExpired\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisVerified = false;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst verificationResult =\n\t\t\t\t\t\tawait this._identityComponent.verifiableCredentialVerify(payload);\n\n\t\t\t\t\tconst verifiableCredential = verificationResult.verifiableCredential;\n\t\t\t\t\tif (Is.empty(verifiableCredential)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tnew GeneralError(JwtVerifiableCredentialVerifier.CLASS_NAME, \"tokenMissingCredential\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisVerified = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinfo.data ??= {};\n\t\t\t\t\t\tinfo.data.verifiableCredential = JsonLdHelper.toNodeObject(verifiableCredential);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst issuer: string | undefined = Is.stringValue(verifiableCredential?.issuer)\n\t\t\t\t\t\t? verifiableCredential?.issuer\n\t\t\t\t\t\t: undefined;\n\t\t\t\t\tif (Is.empty(issuer)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tnew GeneralError(JwtVerifiableCredentialVerifier.CLASS_NAME, \"tokenMissingIssuer\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisVerified = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinfo.identity = issuer;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst subject = verifiableCredential?.credentialSubject;\n\t\t\t\t\tif (Is.empty(subject)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tnew GeneralError(JwtVerifiableCredentialVerifier.CLASS_NAME, \"tokenMissingSubject\")\n\t\t\t\t\t\t);\n\t\t\t\t\t\tisVerified = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinfo.data ??= {};\n\t\t\t\t\t\tinfo.data.subject = JsonLdHelper.toNodeObject(subject);\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tisVerified = false;\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\tnew GeneralError(\n\t\t\t\t\t\t\tJwtVerifiableCredentialVerifier.CLASS_NAME,\n\t\t\t\t\t\t\t\"tokenDecodingFailed\",\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tBaseError.fromError(err)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn isVerified;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -1,2 +1,5 @@
1
+ export * from "./models/IIdentityAllowDenyVerifierConfig.js";
2
+ export * from "./models/IIdentityAllowDenyVerifierConstructorOptions.js";
1
3
  export * from "./models/IJwtVerifiableCredentialVerifierConstructorOptions.js";
4
+ export * from "./verifiers/identityAllowDenyVerifier.js";
2
5
  export * from "./verifiers/jwtVerifiableCredentialVerifier.js";
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Configuration for the Identity Allow/Deny Verifier.
3
+ */
4
+ export interface IIdentityAllowDenyVerifierConfig {
5
+ /**
6
+ * Identities that are permitted; all others are rejected.
7
+ * Skipped when empty or absent.
8
+ */
9
+ allowIdentities?: string[];
10
+ /**
11
+ * Identities that are explicitly rejected.
12
+ * Skipped when empty or absent.
13
+ */
14
+ denyIdentities?: string[];
15
+ }
@@ -0,0 +1,10 @@
1
+ import type { IIdentityAllowDenyVerifierConfig } from "./IIdentityAllowDenyVerifierConfig.js";
2
+ /**
3
+ * The options for the Identity Allow/Deny Verifier.
4
+ */
5
+ export interface IIdentityAllowDenyVerifierConstructorOptions {
6
+ /**
7
+ * The allow/deny configuration for the verifier.
8
+ */
9
+ config?: IIdentityAllowDenyVerifierConfig;
10
+ }
@@ -2,11 +2,6 @@
2
2
  * The options for the JWT Verifiable Credential Verifier.
3
3
  */
4
4
  export interface IJwtVerifiableCredentialVerifierConstructorOptions {
5
- /**
6
- * The logging component type.
7
- * @default logging
8
- */
9
- loggingComponentType?: string;
10
5
  /**
11
6
  * The identity component type.
12
7
  * @default identity
@@ -0,0 +1,31 @@
1
+ import { type IError } from "@twin.org/core";
2
+ import type { ITrustVerificationInfo, ITrustVerifier } from "@twin.org/trust-models";
3
+ import type { IIdentityAllowDenyVerifierConstructorOptions } from "../models/IIdentityAllowDenyVerifierConstructorOptions.js";
4
+ /**
5
+ * Class to gate verification based on allowed and denied identity lists.
6
+ */
7
+ export declare class IdentityAllowDenyVerifier implements ITrustVerifier {
8
+ /**
9
+ * Runtime name for the class.
10
+ */
11
+ static readonly CLASS_NAME: string;
12
+ /**
13
+ * Creates a new instance of IdentityAllowDenyVerifier.
14
+ * @param options The options for the verifier.
15
+ */
16
+ constructor(options?: IIdentityAllowDenyVerifierConstructorOptions);
17
+ /**
18
+ * Returns the class name of the component.
19
+ * @returns The runtime class name string
20
+ */
21
+ className(): string;
22
+ /**
23
+ * Verify a payload by checking the validity of its structure and content.
24
+ * @param payload The payload to verify.
25
+ * @param info Information extracted from previous verifiers and to be added by this verifier.
26
+ * @param info.identity The identity associated with the payload.
27
+ * @param errors Array to collect verification errors.
28
+ * @returns Whether the payload is verified, returns undefined if payload was not processed.
29
+ */
30
+ verify(payload: unknown, info: ITrustVerificationInfo, errors: IError[]): Promise<boolean | undefined>;
31
+ }
@@ -10,13 +10,13 @@ export declare class JwtVerifiableCredentialVerifier implements ITrustVerifier {
10
10
  */
11
11
  static readonly CLASS_NAME: string;
12
12
  /**
13
- * Create a new instance of JwtVerifiableCredentialVerifier.
14
- * @param options The options for the service.
13
+ * Creates a new instance of JwtVerifiableCredentialVerifier.
14
+ * @param options The options for the verifier.
15
15
  */
16
16
  constructor(options?: IJwtVerifiableCredentialVerifierConstructorOptions);
17
17
  /**
18
18
  * Returns the class name of the component.
19
- * @returns The class name of the component.
19
+ * @returns The runtime class name string
20
20
  */
21
21
  className(): string;
22
22
  /**
package/docs/changelog.md CHANGED
@@ -1,11 +1,257 @@
1
1
  # Changelog
2
2
 
3
- ## [0.0.3-next.8](https://github.com/twinfoundation/trust/compare/trust-verifiers-v0.0.3-next.7...trust-verifiers-v0.0.3-next.8) (2026-01-30)
3
+ ## [0.9.0-next.1](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.9.0-next.0...trust-verifiers-v0.9.0-next.1) (2026-06-23)
4
4
 
5
5
 
6
6
  ### Features
7
7
 
8
- * verification info structure ([#10](https://github.com/twinfoundation/trust/issues/10)) ([8b09ec8](https://github.com/twinfoundation/trust/commit/8b09ec8128214b659f427fc3a985eb8ced9ed5dc))
8
+ * add allow deny verifier ([#32](https://github.com/iotaledger/twin-trust/issues/32)) ([daf5d03](https://github.com/iotaledger/twin-trust/commit/daf5d033ffbe82e2228c48ca7ffea870a1ce956e))
9
+ * add generators ([6228c88](https://github.com/iotaledger/twin-trust/commit/6228c88a8f0244b7bdfc76b8624c427c81d23f7b))
10
+ * add optional tenantId + organizationId to trust VC payload ([#19](https://github.com/iotaledger/twin-trust/issues/19)) ([1e93f6b](https://github.com/iotaledger/twin-trust/commit/1e93f6b0eacbfa725f3c3515d4255b39dd122ce7))
11
+ * always include identity in verification info ([9594d19](https://github.com/iotaledger/twin-trust/commit/9594d19e9d718bd42b82964750ae3bcfb7df51bf))
12
+ * flatten error structure ([5fdd665](https://github.com/iotaledger/twin-trust/commit/5fdd665d0fc523a655563a0c20d1d82b634534e2))
13
+ * initial commit ([d378ef4](https://github.com/iotaledger/twin-trust/commit/d378ef4cd66c98fa188aaf3b23152d1e47d88a37))
14
+ * organization identifiers ([#39](https://github.com/iotaledger/twin-trust/issues/39)) ([a5891b9](https://github.com/iotaledger/twin-trust/commit/a5891b9d57ef209c20f53302442d1910dce963d2))
15
+ * remove logging component ([54b56cb](https://github.com/iotaledger/twin-trust/commit/54b56cb81a6cb0aac41e37e8edda9c36685f2adb))
16
+ * support pass through of info between verifiers ([1ce64b9](https://github.com/iotaledger/twin-trust/commit/1ce64b97a949278b447cc12b576ce5de537f30f3))
17
+ * typescript 6 update ([a232da2](https://github.com/iotaledger/twin-trust/commit/a232da293afbd3b42843e187e4952dabd7917397))
18
+ * update dependencies ([367d7fc](https://github.com/iotaledger/twin-trust/commit/367d7fc1f970522650c776d231bfacc84f97be67))
19
+ * verification info structure ([#10](https://github.com/iotaledger/twin-trust/issues/10)) ([8b09ec8](https://github.com/iotaledger/twin-trust/commit/8b09ec8128214b659f427fc3a985eb8ced9ed5dc))
20
+
21
+
22
+ ### Dependencies
23
+
24
+ * The following workspace dependencies were updated
25
+ * dependencies
26
+ * @twin.org/trust-models bumped from 0.9.0-next.0 to 0.9.0-next.1
27
+
28
+ ## [0.0.3-next.24](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.23...trust-verifiers-v0.0.3-next.24) (2026-06-18)
29
+
30
+
31
+ ### Miscellaneous Chores
32
+
33
+ * **trust-verifiers:** Synchronize repo versions
34
+
35
+
36
+ ### Dependencies
37
+
38
+ * The following workspace dependencies were updated
39
+ * dependencies
40
+ * @twin.org/trust-models bumped from 0.0.3-next.23 to 0.0.3-next.24
41
+
42
+ ## [0.0.3-next.23](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.22...trust-verifiers-v0.0.3-next.23) (2026-06-11)
43
+
44
+
45
+ ### Features
46
+
47
+ * add allow deny verifier ([#32](https://github.com/iotaledger/twin-trust/issues/32)) ([daf5d03](https://github.com/iotaledger/twin-trust/commit/daf5d033ffbe82e2228c48ca7ffea870a1ce956e))
48
+ * add generators ([6228c88](https://github.com/iotaledger/twin-trust/commit/6228c88a8f0244b7bdfc76b8624c427c81d23f7b))
49
+ * add optional tenantId + organizationId to trust VC payload ([#19](https://github.com/iotaledger/twin-trust/issues/19)) ([1e93f6b](https://github.com/iotaledger/twin-trust/commit/1e93f6b0eacbfa725f3c3515d4255b39dd122ce7))
50
+ * always include identity in verification info ([9594d19](https://github.com/iotaledger/twin-trust/commit/9594d19e9d718bd42b82964750ae3bcfb7df51bf))
51
+ * flatten error structure ([5fdd665](https://github.com/iotaledger/twin-trust/commit/5fdd665d0fc523a655563a0c20d1d82b634534e2))
52
+ * initial commit ([d378ef4](https://github.com/iotaledger/twin-trust/commit/d378ef4cd66c98fa188aaf3b23152d1e47d88a37))
53
+ * organization identifiers ([#39](https://github.com/iotaledger/twin-trust/issues/39)) ([a5891b9](https://github.com/iotaledger/twin-trust/commit/a5891b9d57ef209c20f53302442d1910dce963d2))
54
+ * remove logging component ([54b56cb](https://github.com/iotaledger/twin-trust/commit/54b56cb81a6cb0aac41e37e8edda9c36685f2adb))
55
+ * support pass through of info between verifiers ([1ce64b9](https://github.com/iotaledger/twin-trust/commit/1ce64b97a949278b447cc12b576ce5de537f30f3))
56
+ * typescript 6 update ([a232da2](https://github.com/iotaledger/twin-trust/commit/a232da293afbd3b42843e187e4952dabd7917397))
57
+ * update dependencies ([367d7fc](https://github.com/iotaledger/twin-trust/commit/367d7fc1f970522650c776d231bfacc84f97be67))
58
+ * verification info structure ([#10](https://github.com/iotaledger/twin-trust/issues/10)) ([8b09ec8](https://github.com/iotaledger/twin-trust/commit/8b09ec8128214b659f427fc3a985eb8ced9ed5dc))
59
+
60
+
61
+ ### Dependencies
62
+
63
+ * The following workspace dependencies were updated
64
+ * dependencies
65
+ * @twin.org/trust-models bumped from 0.0.3-next.21 to 0.0.3-next.23
66
+
67
+ ## [0.0.3-next.21](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.20...trust-verifiers-v0.0.3-next.21) (2026-06-11)
68
+
69
+
70
+ ### Features
71
+
72
+ * organization identifiers ([#39](https://github.com/iotaledger/twin-trust/issues/39)) ([a5891b9](https://github.com/iotaledger/twin-trust/commit/a5891b9d57ef209c20f53302442d1910dce963d2))
73
+
74
+
75
+ ### Dependencies
76
+
77
+ * The following workspace dependencies were updated
78
+ * dependencies
79
+ * @twin.org/trust-models bumped from 0.0.3-next.20 to 0.0.3-next.21
80
+
81
+ ## [0.0.3-next.20](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.19...trust-verifiers-v0.0.3-next.20) (2026-06-10)
82
+
83
+
84
+ ### Miscellaneous Chores
85
+
86
+ * **trust-verifiers:** Synchronize repo versions
87
+
88
+
89
+ ### Dependencies
90
+
91
+ * The following workspace dependencies were updated
92
+ * dependencies
93
+ * @twin.org/trust-models bumped from 0.0.3-next.19 to 0.0.3-next.20
94
+
95
+ ## [0.0.3-next.19](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.18...trust-verifiers-v0.0.3-next.19) (2026-06-05)
96
+
97
+
98
+ ### Features
99
+
100
+ * remove logging component ([54b56cb](https://github.com/iotaledger/twin-trust/commit/54b56cb81a6cb0aac41e37e8edda9c36685f2adb))
101
+
102
+
103
+ ### Dependencies
104
+
105
+ * The following workspace dependencies were updated
106
+ * dependencies
107
+ * @twin.org/trust-models bumped from 0.0.3-next.18 to 0.0.3-next.19
108
+
109
+ ## [0.0.3-next.18](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.17...trust-verifiers-v0.0.3-next.18) (2026-06-05)
110
+
111
+
112
+ ### Features
113
+
114
+ * add allow deny verifier ([#32](https://github.com/iotaledger/twin-trust/issues/32)) ([daf5d03](https://github.com/iotaledger/twin-trust/commit/daf5d033ffbe82e2228c48ca7ffea870a1ce956e))
115
+
116
+
117
+ ### Dependencies
118
+
119
+ * The following workspace dependencies were updated
120
+ * dependencies
121
+ * @twin.org/trust-models bumped from 0.0.3-next.17 to 0.0.3-next.18
122
+
123
+ ## [0.0.3-next.17](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.16...trust-verifiers-v0.0.3-next.17) (2026-06-02)
124
+
125
+
126
+ ### Miscellaneous Chores
127
+
128
+ * **trust-verifiers:** Synchronize repo versions
129
+
130
+
131
+ ### Dependencies
132
+
133
+ * The following workspace dependencies were updated
134
+ * dependencies
135
+ * @twin.org/trust-models bumped from 0.0.3-next.16 to 0.0.3-next.17
136
+
137
+ ## [0.0.3-next.16](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.15...trust-verifiers-v0.0.3-next.16) (2026-05-27)
138
+
139
+
140
+ ### Miscellaneous Chores
141
+
142
+ * **trust-verifiers:** Synchronize repo versions
143
+
144
+
145
+ ### Dependencies
146
+
147
+ * The following workspace dependencies were updated
148
+ * dependencies
149
+ * @twin.org/trust-models bumped from 0.0.3-next.15 to 0.0.3-next.16
150
+
151
+ ## [0.0.3-next.15](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.14...trust-verifiers-v0.0.3-next.15) (2026-05-26)
152
+
153
+
154
+ ### Miscellaneous Chores
155
+
156
+ * **trust-verifiers:** Synchronize repo versions
157
+
158
+
159
+ ### Dependencies
160
+
161
+ * The following workspace dependencies were updated
162
+ * dependencies
163
+ * @twin.org/trust-models bumped from 0.0.3-next.14 to 0.0.3-next.15
164
+
165
+ ## [0.0.3-next.14](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.13...trust-verifiers-v0.0.3-next.14) (2026-05-22)
166
+
167
+
168
+ ### Features
169
+
170
+ * add optional tenantId + organizationId to trust VC payload ([#19](https://github.com/iotaledger/twin-trust/issues/19)) ([1e93f6b](https://github.com/iotaledger/twin-trust/commit/1e93f6b0eacbfa725f3c3515d4255b39dd122ce7))
171
+
172
+
173
+ ### Dependencies
174
+
175
+ * The following workspace dependencies were updated
176
+ * dependencies
177
+ * @twin.org/trust-models bumped from 0.0.3-next.13 to 0.0.3-next.14
178
+
179
+ ## [0.0.3-next.13](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.12...trust-verifiers-v0.0.3-next.13) (2026-05-20)
180
+
181
+
182
+ ### Features
183
+
184
+ * update dependencies ([367d7fc](https://github.com/iotaledger/twin-trust/commit/367d7fc1f970522650c776d231bfacc84f97be67))
185
+
186
+
187
+ ### Dependencies
188
+
189
+ * The following workspace dependencies were updated
190
+ * dependencies
191
+ * @twin.org/trust-models bumped from 0.0.3-next.12 to 0.0.3-next.13
192
+
193
+ ## [0.0.3-next.12](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.11...trust-verifiers-v0.0.3-next.12) (2026-05-11)
194
+
195
+
196
+ ### Features
197
+
198
+ * typescript 6 update ([a232da2](https://github.com/iotaledger/twin-trust/commit/a232da293afbd3b42843e187e4952dabd7917397))
199
+
200
+
201
+ ### Dependencies
202
+
203
+ * The following workspace dependencies were updated
204
+ * dependencies
205
+ * @twin.org/trust-models bumped from 0.0.3-next.11 to 0.0.3-next.12
206
+
207
+ ## [0.0.3-next.11](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.10...trust-verifiers-v0.0.3-next.11) (2026-03-04)
208
+
209
+
210
+ ### Miscellaneous Chores
211
+
212
+ * **trust-verifiers:** Synchronize repo versions
213
+
214
+
215
+ ### Dependencies
216
+
217
+ * The following workspace dependencies were updated
218
+ * dependencies
219
+ * @twin.org/trust-models bumped from 0.0.3-next.10 to 0.0.3-next.11
220
+
221
+ ## [0.0.3-next.10](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.9...trust-verifiers-v0.0.3-next.10) (2026-02-27)
222
+
223
+
224
+ ### Miscellaneous Chores
225
+
226
+ * **trust-verifiers:** Synchronize repo versions
227
+
228
+
229
+ ### Dependencies
230
+
231
+ * The following workspace dependencies were updated
232
+ * dependencies
233
+ * @twin.org/trust-models bumped from 0.0.3-next.9 to 0.0.3-next.10
234
+
235
+ ## [0.0.3-next.9](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.8...trust-verifiers-v0.0.3-next.9) (2026-02-26)
236
+
237
+
238
+ ### Miscellaneous Chores
239
+
240
+ * **trust-verifiers:** Synchronize repo versions
241
+
242
+
243
+ ### Dependencies
244
+
245
+ * The following workspace dependencies were updated
246
+ * dependencies
247
+ * @twin.org/trust-models bumped from 0.0.3-next.8 to 0.0.3-next.9
248
+
249
+ ## [0.0.3-next.8](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.7...trust-verifiers-v0.0.3-next.8) (2026-01-30)
250
+
251
+
252
+ ### Features
253
+
254
+ * verification info structure ([#10](https://github.com/iotaledger/twin-trust/issues/10)) ([8b09ec8](https://github.com/iotaledger/twin-trust/commit/8b09ec8128214b659f427fc3a985eb8ced9ed5dc))
9
255
 
10
256
 
11
257
  ### Dependencies
@@ -14,7 +260,7 @@
14
260
  * dependencies
15
261
  * @twin.org/trust-models bumped from 0.0.3-next.7 to 0.0.3-next.8
16
262
 
17
- ## [0.0.3-next.7](https://github.com/twinfoundation/trust/compare/trust-verifiers-v0.0.3-next.6...trust-verifiers-v0.0.3-next.7) (2025-12-04)
263
+ ## [0.0.3-next.7](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.6...trust-verifiers-v0.0.3-next.7) (2025-12-04)
18
264
 
19
265
 
20
266
  ### Miscellaneous Chores
@@ -28,12 +274,12 @@
28
274
  * dependencies
29
275
  * @twin.org/trust-models bumped from 0.0.3-next.6 to 0.0.3-next.7
30
276
 
31
- ## [0.0.3-next.6](https://github.com/twinfoundation/trust/compare/trust-verifiers-v0.0.3-next.5...trust-verifiers-v0.0.3-next.6) (2025-12-04)
277
+ ## [0.0.3-next.6](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.5...trust-verifiers-v0.0.3-next.6) (2025-12-04)
32
278
 
33
279
 
34
280
  ### Features
35
281
 
36
- * always include identity in verification info ([9594d19](https://github.com/twinfoundation/trust/commit/9594d19e9d718bd42b82964750ae3bcfb7df51bf))
282
+ * always include identity in verification info ([9594d19](https://github.com/iotaledger/twin-trust/commit/9594d19e9d718bd42b82964750ae3bcfb7df51bf))
37
283
 
38
284
 
39
285
  ### Dependencies
@@ -42,7 +288,7 @@
42
288
  * dependencies
43
289
  * @twin.org/trust-models bumped from 0.0.3-next.5 to 0.0.3-next.6
44
290
 
45
- ## [0.0.3-next.5](https://github.com/twinfoundation/trust/compare/trust-verifiers-v0.0.3-next.4...trust-verifiers-v0.0.3-next.5) (2025-12-04)
291
+ ## [0.0.3-next.5](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.4...trust-verifiers-v0.0.3-next.5) (2025-12-04)
46
292
 
47
293
 
48
294
  ### Miscellaneous Chores
@@ -56,12 +302,12 @@
56
302
  * dependencies
57
303
  * @twin.org/trust-models bumped from 0.0.3-next.4 to 0.0.3-next.5
58
304
 
59
- ## [0.0.3-next.4](https://github.com/twinfoundation/trust/compare/trust-verifiers-v0.0.3-next.3...trust-verifiers-v0.0.3-next.4) (2025-12-04)
305
+ ## [0.0.3-next.4](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.3...trust-verifiers-v0.0.3-next.4) (2025-12-04)
60
306
 
61
307
 
62
308
  ### Features
63
309
 
64
- * add generators ([6228c88](https://github.com/twinfoundation/trust/commit/6228c88a8f0244b7bdfc76b8624c427c81d23f7b))
310
+ * add generators ([6228c88](https://github.com/iotaledger/twin-trust/commit/6228c88a8f0244b7bdfc76b8624c427c81d23f7b))
65
311
 
66
312
 
67
313
  ### Dependencies
@@ -70,12 +316,12 @@
70
316
  * dependencies
71
317
  * @twin.org/trust-models bumped from 0.0.3-next.3 to 0.0.3-next.4
72
318
 
73
- ## [0.0.3-next.3](https://github.com/twinfoundation/trust/compare/trust-verifiers-v0.0.3-next.2...trust-verifiers-v0.0.3-next.3) (2025-12-04)
319
+ ## [0.0.3-next.3](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.2...trust-verifiers-v0.0.3-next.3) (2025-12-04)
74
320
 
75
321
 
76
322
  ### Features
77
323
 
78
- * flatten error structure ([5fdd665](https://github.com/twinfoundation/trust/commit/5fdd665d0fc523a655563a0c20d1d82b634534e2))
324
+ * flatten error structure ([5fdd665](https://github.com/iotaledger/twin-trust/commit/5fdd665d0fc523a655563a0c20d1d82b634534e2))
79
325
 
80
326
 
81
327
  ### Dependencies
@@ -84,12 +330,12 @@
84
330
  * dependencies
85
331
  * @twin.org/trust-models bumped from 0.0.3-next.2 to 0.0.3-next.3
86
332
 
87
- ## [0.0.3-next.2](https://github.com/twinfoundation/trust/compare/trust-verifiers-v0.0.3-next.1...trust-verifiers-v0.0.3-next.2) (2025-12-03)
333
+ ## [0.0.3-next.2](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.1...trust-verifiers-v0.0.3-next.2) (2025-12-03)
88
334
 
89
335
 
90
336
  ### Features
91
337
 
92
- * support pass through of info between verifiers ([1ce64b9](https://github.com/twinfoundation/trust/commit/1ce64b97a949278b447cc12b576ce5de537f30f3))
338
+ * support pass through of info between verifiers ([1ce64b9](https://github.com/iotaledger/twin-trust/commit/1ce64b97a949278b447cc12b576ce5de537f30f3))
93
339
 
94
340
 
95
341
  ### Dependencies
@@ -98,12 +344,12 @@
98
344
  * dependencies
99
345
  * @twin.org/trust-models bumped from 0.0.3-next.1 to 0.0.3-next.2
100
346
 
101
- ## [0.0.3-next.1](https://github.com/twinfoundation/trust/compare/trust-verifiers-v0.0.3-next.0...trust-verifiers-v0.0.3-next.1) (2025-12-02)
347
+ ## [0.0.3-next.1](https://github.com/iotaledger/twin-trust/compare/trust-verifiers-v0.0.3-next.0...trust-verifiers-v0.0.3-next.1) (2025-12-02)
102
348
 
103
349
 
104
350
  ### Features
105
351
 
106
- * initial commit ([d378ef4](https://github.com/twinfoundation/trust/commit/d378ef4cd66c98fa188aaf3b23152d1e47d88a37))
352
+ * initial commit ([d378ef4](https://github.com/iotaledger/twin-trust/commit/d378ef4cd66c98fa188aaf3b23152d1e47d88a37))
107
353
 
108
354
 
109
355
  ### Dependencies
@@ -112,4 +358,4 @@
112
358
  * dependencies
113
359
  * @twin.org/trust-models bumped from 0.0.3-next.0 to 0.0.3-next.1
114
360
 
115
- ## @twin.org/trust-verifiers - Changelog
361
+ ## Changelog
package/docs/examples.md CHANGED
@@ -1 +1,44 @@
1
- # @twin.org/trust-verifiers - Examples
1
+ # Trust Verifiers Examples
2
+
3
+ These snippets demonstrate how to initialise a JWT verifier and evaluate a token while collecting identity and subject details.
4
+
5
+ ## JwtVerifiableCredentialVerifier
6
+
7
+ ```typescript
8
+ import { ComponentFactory, type IError } from '@twin.org/core';
9
+ import type { IIdentityComponent } from '@twin.org/identity-models';
10
+ import type { ITrustVerificationInfo } from '@twin.org/trust-models';
11
+ import { JwtVerifiableCredentialVerifier } from '@twin.org/trust-verifiers';
12
+
13
+ const identityComponent: IIdentityComponent = {
14
+ verifiableCredentialVerify: async () => ({
15
+ verifiableCredential: {
16
+ issuer: 'did:example:issuer',
17
+ credentialSubject: {
18
+ id: 'did:example:subject',
19
+ role: 'supplier'
20
+ }
21
+ }
22
+ })
23
+ } as IIdentityComponent;
24
+
25
+ ComponentFactory.register('identity', () => identityComponent);
26
+
27
+ const verifier = new JwtVerifiableCredentialVerifier({
28
+ identityComponentType: 'identity'
29
+ });
30
+
31
+ console.log(verifier.className()); // JwtVerifiableCredentialVerifier
32
+
33
+ const info: ITrustVerificationInfo = { identity: '' };
34
+ const errors: IError[] = [];
35
+ const verified = await verifier.verify(
36
+ 'eyJhbGciOiJFZERTQSJ9.eyJleHAiOjQwMDAwMDAwMDB9.signature',
37
+ info,
38
+ errors
39
+ );
40
+
41
+ console.log(verified); // true
42
+ console.log(info.identity); // did:example:issuer
43
+ console.log(info.data?.subject); // { id: "did:example:subject", role: "supplier" }
44
+ ```
@@ -0,0 +1,91 @@
1
+ # Class: IdentityAllowDenyVerifier
2
+
3
+ Class to gate verification based on allowed and denied identity lists.
4
+
5
+ ## Implements
6
+
7
+ - `ITrustVerifier`
8
+
9
+ ## Constructors
10
+
11
+ ### Constructor
12
+
13
+ > **new IdentityAllowDenyVerifier**(`options?`): `IdentityAllowDenyVerifier`
14
+
15
+ Creates a new instance of IdentityAllowDenyVerifier.
16
+
17
+ #### Parameters
18
+
19
+ ##### options?
20
+
21
+ [`IIdentityAllowDenyVerifierConstructorOptions`](../interfaces/IIdentityAllowDenyVerifierConstructorOptions.md)
22
+
23
+ The options for the verifier.
24
+
25
+ #### Returns
26
+
27
+ `IdentityAllowDenyVerifier`
28
+
29
+ ## Properties
30
+
31
+ ### CLASS\_NAME {#class_name}
32
+
33
+ > `readonly` `static` **CLASS\_NAME**: `string`
34
+
35
+ Runtime name for the class.
36
+
37
+ ## Methods
38
+
39
+ ### className() {#classname}
40
+
41
+ > **className**(): `string`
42
+
43
+ Returns the class name of the component.
44
+
45
+ #### Returns
46
+
47
+ `string`
48
+
49
+ The runtime class name string
50
+
51
+ #### Implementation of
52
+
53
+ `ITrustVerifier.className`
54
+
55
+ ***
56
+
57
+ ### verify() {#verify}
58
+
59
+ > **verify**(`payload`, `info`, `errors`): `Promise`\<`boolean` \| `undefined`\>
60
+
61
+ Verify a payload by checking the validity of its structure and content.
62
+
63
+ #### Parameters
64
+
65
+ ##### payload
66
+
67
+ `unknown`
68
+
69
+ The payload to verify.
70
+
71
+ ##### info
72
+
73
+ `ITrustVerificationInfo`
74
+
75
+ Information extracted from previous verifiers and to be added by this verifier.
76
+
77
+ ##### errors
78
+
79
+ `IError`[]
80
+
81
+ Array to collect verification errors.
82
+
83
+ #### Returns
84
+
85
+ `Promise`\<`boolean` \| `undefined`\>
86
+
87
+ Whether the payload is verified, returns undefined if payload was not processed.
88
+
89
+ #### Implementation of
90
+
91
+ `ITrustVerifier.verify`
@@ -12,7 +12,7 @@ Class to verify a JWT Verifiable Credential.
12
12
 
13
13
  > **new JwtVerifiableCredentialVerifier**(`options?`): `JwtVerifiableCredentialVerifier`
14
14
 
15
- Create a new instance of JwtVerifiableCredentialVerifier.
15
+ Creates a new instance of JwtVerifiableCredentialVerifier.
16
16
 
17
17
  #### Parameters
18
18
 
@@ -20,7 +20,7 @@ Create a new instance of JwtVerifiableCredentialVerifier.
20
20
 
21
21
  [`IJwtVerifiableCredentialVerifierConstructorOptions`](../interfaces/IJwtVerifiableCredentialVerifierConstructorOptions.md)
22
22
 
23
- The options for the service.
23
+ The options for the verifier.
24
24
 
25
25
  #### Returns
26
26
 
@@ -28,7 +28,7 @@ The options for the service.
28
28
 
29
29
  ## Properties
30
30
 
31
- ### CLASS\_NAME
31
+ ### CLASS\_NAME {#class_name}
32
32
 
33
33
  > `readonly` `static` **CLASS\_NAME**: `string`
34
34
 
@@ -36,7 +36,7 @@ Runtime name for the class.
36
36
 
37
37
  ## Methods
38
38
 
39
- ### className()
39
+ ### className() {#classname}
40
40
 
41
41
  > **className**(): `string`
42
42
 
@@ -46,7 +46,7 @@ Returns the class name of the component.
46
46
 
47
47
  `string`
48
48
 
49
- The class name of the component.
49
+ The runtime class name string
50
50
 
51
51
  #### Implementation of
52
52
 
@@ -54,7 +54,7 @@ The class name of the component.
54
54
 
55
55
  ***
56
56
 
57
- ### verify()
57
+ ### verify() {#verify}
58
58
 
59
59
  > **verify**(`payload`, `info`, `errors`): `Promise`\<`boolean` \| `undefined`\>
60
60
 
@@ -2,8 +2,11 @@
2
2
 
3
3
  ## Classes
4
4
 
5
+ - [IdentityAllowDenyVerifier](classes/IdentityAllowDenyVerifier.md)
5
6
  - [JwtVerifiableCredentialVerifier](classes/JwtVerifiableCredentialVerifier.md)
6
7
 
7
8
  ## Interfaces
8
9
 
10
+ - [IIdentityAllowDenyVerifierConfig](interfaces/IIdentityAllowDenyVerifierConfig.md)
11
+ - [IIdentityAllowDenyVerifierConstructorOptions](interfaces/IIdentityAllowDenyVerifierConstructorOptions.md)
9
12
  - [IJwtVerifiableCredentialVerifierConstructorOptions](interfaces/IJwtVerifiableCredentialVerifierConstructorOptions.md)
@@ -0,0 +1,21 @@
1
+ # Interface: IIdentityAllowDenyVerifierConfig
2
+
3
+ Configuration for the Identity Allow/Deny Verifier.
4
+
5
+ ## Properties
6
+
7
+ ### allowIdentities? {#allowidentities}
8
+
9
+ > `optional` **allowIdentities?**: `string`[]
10
+
11
+ Identities that are permitted; all others are rejected.
12
+ Skipped when empty or absent.
13
+
14
+ ***
15
+
16
+ ### denyIdentities? {#denyidentities}
17
+
18
+ > `optional` **denyIdentities?**: `string`[]
19
+
20
+ Identities that are explicitly rejected.
21
+ Skipped when empty or absent.
@@ -0,0 +1,11 @@
1
+ # Interface: IIdentityAllowDenyVerifierConstructorOptions
2
+
3
+ The options for the Identity Allow/Deny Verifier.
4
+
5
+ ## Properties
6
+
7
+ ### config? {#config}
8
+
9
+ > `optional` **config?**: [`IIdentityAllowDenyVerifierConfig`](IIdentityAllowDenyVerifierConfig.md)
10
+
11
+ The allow/deny configuration for the verifier.
@@ -4,23 +4,9 @@ The options for the JWT Verifiable Credential Verifier.
4
4
 
5
5
  ## Properties
6
6
 
7
- ### loggingComponentType?
7
+ ### identityComponentType? {#identitycomponenttype}
8
8
 
9
- > `optional` **loggingComponentType**: `string`
10
-
11
- The logging component type.
12
-
13
- #### Default
14
-
15
- ```ts
16
- logging
17
- ```
18
-
19
- ***
20
-
21
- ### identityComponentType?
22
-
23
- > `optional` **identityComponentType**: `string`
9
+ > `optional` **identityComponentType?**: `string`
24
10
 
25
11
  The identity component type.
26
12
 
package/locales/en.json CHANGED
@@ -1,5 +1,10 @@
1
1
  {
2
2
  "error": {
3
+ "identityAllowDenyVerifier": {
4
+ "identityMissing": "The identity is missing from the verification info.",
5
+ "identityNotAllowed": "The identity is not in the allowed identities list \"{identity}\".",
6
+ "identityDenied": "The identity is in the denied identities list \"{identity}\"."
7
+ },
3
8
  "jwtVerifiableCredentialVerifier": {
4
9
  "tokenMissingCredential": "The JWT token does not contain a verifiable credential.",
5
10
  "tokenMissingIssuer": "The verifiable credential in the JWT does not contain an issuer.",
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@twin.org/trust-verifiers",
3
- "version": "0.0.3-next.8",
4
- "description": "Verifiers for trust",
3
+ "version": "0.9.0-next.1",
4
+ "description": "Implements trust verifiers that validate credentials and proofs against trust model requirements",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "git+https://github.com/twinfoundation/trust.git",
7
+ "url": "git+https://github.com/iotaledger/twin-trust.git",
8
8
  "directory": "packages/trust-verifiers"
9
9
  },
10
10
  "author": "martyn.janes@iota.org",
@@ -14,13 +14,13 @@
14
14
  "node": ">=20.0.0"
15
15
  },
16
16
  "dependencies": {
17
- "@twin.org/core": "next",
18
- "@twin.org/data-json-ld": "next",
19
- "@twin.org/identity-models": "next",
20
- "@twin.org/logging-models": "next",
21
- "@twin.org/nameof": "next",
22
- "@twin.org/trust-models": "0.0.3-next.8",
23
- "@twin.org/web": "next"
17
+ "@twin.org/core": "0.9.0-next.1",
18
+ "@twin.org/data-json-ld": "0.9.0-next.1",
19
+ "@twin.org/identity-models": "0.0.3-next.36",
20
+ "@twin.org/logging-models": "0.9.0-next.1",
21
+ "@twin.org/nameof": "0.9.0-next.1",
22
+ "@twin.org/trust-models": "0.9.0-next.1",
23
+ "@twin.org/web": "0.9.0-next.1"
24
24
  },
25
25
  "main": "./dist/es/index.js",
26
26
  "types": "./dist/types/index.d.ts",
@@ -50,7 +50,7 @@
50
50
  "schemas"
51
51
  ],
52
52
  "bugs": {
53
- "url": "git+https://github.com/twinfoundation/trust/issues"
53
+ "url": "git+https://github.com/iotaledger/twin-trust/issues"
54
54
  },
55
55
  "homepage": "https://twindev.org"
56
56
  }