@trustvc/trustvc 1.0.4 → 1.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.
Files changed (43) hide show
  1. package/dist/core/endorsement-chain/fetchEscrowTransfer.d.mts +8 -0
  2. package/dist/core/endorsement-chain/fetchEscrowTransfer.d.ts +8 -0
  3. package/dist/core/endorsement-chain/fetchEscrowTransfer.js +167 -0
  4. package/dist/core/endorsement-chain/fetchTokenTransfer.d.mts +8 -0
  5. package/dist/core/endorsement-chain/fetchTokenTransfer.d.ts +8 -0
  6. package/dist/core/endorsement-chain/fetchTokenTransfer.js +58 -0
  7. package/dist/core/endorsement-chain/helpers.d.mts +11 -0
  8. package/dist/core/endorsement-chain/helpers.d.ts +11 -0
  9. package/dist/core/endorsement-chain/helpers.js +99 -0
  10. package/dist/core/endorsement-chain/index.d.mts +11 -0
  11. package/dist/core/endorsement-chain/index.d.ts +11 -0
  12. package/dist/core/endorsement-chain/index.js +47 -0
  13. package/dist/core/endorsement-chain/retrieveEndorsementChain.d.mts +8 -0
  14. package/dist/core/endorsement-chain/retrieveEndorsementChain.d.ts +8 -0
  15. package/dist/core/endorsement-chain/retrieveEndorsementChain.js +43 -0
  16. package/dist/core/endorsement-chain/types.d.mts +50 -0
  17. package/dist/core/endorsement-chain/types.d.ts +50 -0
  18. package/dist/core/endorsement-chain/types.js +2 -0
  19. package/dist/core/endorsement-chain/useEndorsementChain.d.mts +14 -0
  20. package/dist/core/endorsement-chain/useEndorsementChain.d.ts +14 -0
  21. package/dist/core/endorsement-chain/useEndorsementChain.js +103 -0
  22. package/dist/core/index.d.mts +11 -0
  23. package/dist/core/index.d.ts +11 -0
  24. package/dist/core/index.js +7 -0
  25. package/dist/esm/core/endorsement-chain/fetchEscrowTransfer.js +164 -0
  26. package/dist/esm/core/endorsement-chain/fetchTokenTransfer.js +56 -0
  27. package/dist/esm/core/endorsement-chain/helpers.js +94 -0
  28. package/dist/esm/core/endorsement-chain/index.js +6 -0
  29. package/dist/esm/core/endorsement-chain/retrieveEndorsementChain.js +41 -0
  30. package/dist/esm/core/endorsement-chain/types.js +1 -0
  31. package/dist/esm/core/endorsement-chain/useEndorsementChain.js +98 -0
  32. package/dist/esm/core/index.js +1 -0
  33. package/dist/esm/verify/fragments/document-status/transferableRecords/transferableRecordVerifier.js +33 -30
  34. package/dist/esm/verify/fragments/document-status/w3cCredentialStatus.js +20 -10
  35. package/dist/index.d.mts +10 -0
  36. package/dist/index.d.ts +10 -0
  37. package/dist/token-registry-v5/typedContractMethod.d.mts +1 -1
  38. package/dist/token-registry-v5/typedContractMethod.d.ts +1 -1
  39. package/dist/verify/fragments/document-status/transferableRecords/transferableRecordVerifier.js +33 -30
  40. package/dist/verify/fragments/document-status/transferableRecords/transferableRecordVerifier.types.d.mts +1 -9
  41. package/dist/verify/fragments/document-status/transferableRecords/transferableRecordVerifier.types.d.ts +1 -9
  42. package/dist/verify/fragments/document-status/w3cCredentialStatus.js +19 -9
  43. package/package.json +7 -7
@@ -8,45 +8,46 @@ const TRANSFERABLE_RECORDS_TYPE = "TransferableRecords";
8
8
  const type = "DOCUMENT_STATUS";
9
9
  const name = TRANSFERABLE_RECORDS_TYPE;
10
10
  const verify = /* @__PURE__ */ __name(async (document, options) => {
11
- let signedDocument;
12
- let tokenId;
13
- if (w3cVC.isSignedDocument(document)) {
14
- signedDocument = document;
15
- tokenId = "0x" + signedDocument?.credentialStatus?.tokenId;
16
- }
17
- const credentialStatus = signedDocument?.credentialStatus;
18
- if (!credentialStatus?.tokenRegistry) {
19
- throw new CodedError(
20
- "Document's credentialStatus does not have tokenRegistry",
21
- OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT,
22
- OpenAttestationEthereumTokenRegistryStatusCode[OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT]
23
- );
24
- }
25
- if (!credentialStatus?.tokenNetwork || !credentialStatus?.tokenNetwork?.chainId) {
26
- throw new CodedError(
27
- "Document's credentialStatus does not have tokenNetwork.chainId",
28
- OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT,
29
- OpenAttestationEthereumTokenRegistryStatusCode[OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT]
30
- );
31
- }
11
+ const signedDocument = document;
12
+ const credentialStatuses = Array.isArray(signedDocument?.credentialStatus) ? signedDocument?.credentialStatus : [signedDocument?.credentialStatus];
32
13
  const { provider } = options;
33
- const mintStatus = await isTokenMintedOnRegistry({
34
- tokenRegistryAddress: credentialStatus?.tokenRegistry,
35
- tokenId,
36
- provider
37
- });
14
+ const verificationResult = await Promise.all(
15
+ credentialStatuses.map(async (credentialStatus) => {
16
+ const tokenId = "0x" + credentialStatus.tokenId;
17
+ if (!credentialStatus?.tokenRegistry) {
18
+ throw new CodedError(
19
+ "Document's credentialStatus does not have tokenRegistry",
20
+ OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT,
21
+ OpenAttestationEthereumTokenRegistryStatusCode[OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT]
22
+ );
23
+ }
24
+ if (!credentialStatus?.tokenNetwork || !credentialStatus?.tokenNetwork?.chainId) {
25
+ throw new CodedError(
26
+ "Document's credentialStatus does not have tokenNetwork.chainId",
27
+ OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT,
28
+ OpenAttestationEthereumTokenRegistryStatusCode[OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT]
29
+ );
30
+ }
31
+ const mintStatus = await isTokenMintedOnRegistry({
32
+ tokenRegistryAddress: credentialStatus?.tokenRegistry,
33
+ tokenId,
34
+ provider
35
+ });
36
+ return mintStatus;
37
+ })
38
+ );
38
39
  const result = {
39
40
  name,
40
41
  type,
41
42
  status: "INVALID",
42
43
  data: {
43
- tokenRegistry: credentialStatus.tokenRegistry
44
+ tokenRegistry: credentialStatuses?.[0]?.tokenRegistry
44
45
  }
45
46
  };
46
- if (ValidTokenRegistryStatus.guard(mintStatus)) {
47
+ if (verificationResult.every(ValidTokenRegistryStatus.guard)) {
47
48
  result.status = "VALID";
48
49
  } else {
49
- result.reason = mintStatus.reason;
50
+ result.reason = verificationResult?.[0]?.reason;
50
51
  }
51
52
  return result;
52
53
  }, "verify");
@@ -63,7 +64,9 @@ const skip = /* @__PURE__ */ __name(async () => {
63
64
  };
64
65
  }, "skip");
65
66
  const test = /* @__PURE__ */ __name((document) => {
66
- if (document?.credentialStatus?.type === TRANSFERABLE_RECORDS_TYPE) {
67
+ const doc = document;
68
+ const credentialStatuses = Array.isArray(doc?.credentialStatus) ? doc?.credentialStatus : [doc?.credentialStatus];
69
+ if (w3cVC.isSignedDocument(document) && credentialStatuses.every((cs) => cs?.type === TRANSFERABLE_RECORDS_TYPE)) {
67
70
  return true;
68
71
  }
69
72
  return false;
@@ -1,4 +1,4 @@
1
- import { verifyCredentialStatus } from '@trustvc/w3c-vc';
1
+ import { isSignedDocument, verifyCredentialStatus } from '@trustvc/w3c-vc';
2
2
 
3
3
  var __defProp = Object.defineProperty;
4
4
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
@@ -17,33 +17,43 @@ const w3cCredentialStatus = {
17
17
  }, "skip"),
18
18
  test: /* @__PURE__ */ __name((document) => {
19
19
  const doc = document;
20
- return doc.credentialStatus?.type === "StatusList2021Entry";
20
+ const credentialStatuses = Array.isArray(doc?.credentialStatus) ? doc?.credentialStatus : [doc?.credentialStatus];
21
+ const test = /* @__PURE__ */ __name((credentialStatus) => ["BitstringStatusListEntry", "StatusList2021Entry"].includes(credentialStatus?.type), "test");
22
+ if (isSignedDocument(document) && credentialStatuses.every(test)) {
23
+ return true;
24
+ } else {
25
+ return false;
26
+ }
21
27
  }, "test"),
22
28
  verify: /* @__PURE__ */ __name(async (document) => {
23
29
  const doc = document;
24
- const verificationResult = await verifyCredentialStatus(doc.credentialStatus);
25
- if (verificationResult.error) {
30
+ const credentialStatuses = Array.isArray(doc.credentialStatus) ? doc.credentialStatus : [doc.credentialStatus];
31
+ const verificationResult = await Promise.all(
32
+ credentialStatuses.map((cs) => verifyCredentialStatus(cs, cs?.type))
33
+ );
34
+ if (verificationResult.some((r) => r.error)) {
26
35
  return {
27
36
  type: "DOCUMENT_STATUS",
28
37
  name: "W3CCredentialStatus",
29
38
  reason: {
30
- message: verificationResult.error
39
+ message: verificationResult.map((r) => r.error).join(", ")
31
40
  },
41
+ data: verificationResult,
32
42
  status: "ERROR"
33
43
  };
34
- } else if (verificationResult.status === true) {
44
+ } else if (verificationResult.every((r) => r.status === false)) {
35
45
  return {
36
46
  type: "DOCUMENT_STATUS",
37
47
  name: "W3CCredentialStatus",
38
- data: false,
39
- status: "INVALID"
48
+ data: verificationResult,
49
+ status: "VALID"
40
50
  };
41
51
  } else {
42
52
  return {
43
53
  type: "DOCUMENT_STATUS",
44
54
  name: "W3CCredentialStatus",
45
- data: true,
46
- status: "VALID"
55
+ data: verificationResult,
56
+ status: "INVALID"
47
57
  };
48
58
  }
49
59
  }, "verify")
package/dist/index.d.mts CHANGED
@@ -12,6 +12,12 @@ export { TypedContractMethod } from '@tradetrust-tt/token-registry-v5/dist/contr
12
12
  export { decrypt } from './core/decrypt.mjs';
13
13
  export { encrypt } from './core/encrypt.mjs';
14
14
  export { verifyDocument } from './core/verify.mjs';
15
+ export { fetchEscrowTransfersV4, fetchEscrowTransfersV5 } from './core/endorsement-chain/fetchEscrowTransfer.mjs';
16
+ export { fetchTokenTransfers } from './core/endorsement-chain/fetchTokenTransfer.mjs';
17
+ export { fetchEventTime, mergeTransfersV4, mergeTransfersV5, sortLogChain } from './core/endorsement-chain/helpers.mjs';
18
+ export { getEndorsementChain } from './core/endorsement-chain/retrieveEndorsementChain.mjs';
19
+ export { EndorsementChain, ParsedLog, TitleEscrowTransferEvent, TitleEscrowTransferEventType, TokenTransferEvent, TokenTransferEventType, TradeTrustTokenEventType, TransferBaseEvent, TransferEvent, TransferEventType, TypedEvent } from './core/endorsement-chain/types.mjs';
20
+ export { TitleEscrowInterface, fetchEndorsementChain, getTitleEscrowAddress, isTitleEscrowVersion } from './core/endorsement-chain/useEndorsementChain.mjs';
15
21
  export { signOA } from './open-attestation/sign.mjs';
16
22
  export { KeyPair } from './open-attestation/types.mjs';
17
23
  export { diagnose, getAssetId, getDocumentData, getIssuerAddress, getTemplateURL, isObfuscated, isRawV2Document, isRawV3Document, isSignedWrappedV2Document, isSignedWrappedV3Document, isTransferableAsset, isWrappedV2Document, isWrappedV3Document } from './open-attestation/utils.mjs';
@@ -36,6 +42,10 @@ export { OpenAttestationDocument, SUPPORTED_SIGNING_ALGORITHM, SchemaId, SignedW
36
42
  export { DiagnoseError } from '@tradetrust-tt/tradetrust/dist/types/shared/utils';
37
43
  export { createResolver, getIdentifier, isValid, openAttestationDidIdentityProof, utils, verificationBuilder, verify } from '@tradetrust-tt/tt-verify';
38
44
  export { DocumentsToVerify, ErrorVerificationFragment, InvalidVerificationFragment, ProviderDetails, providerType as ProviderType, SkippedVerificationFragment, ValidVerificationFragment, VerificationBuilderOptions, VerificationFragment, VerificationFragmentStatus, VerificationFragmentType, VerificationFragmentWithData, Verifier, VerifierOptions } from '@tradetrust-tt/tt-verify/dist/types/src/types/core';
45
+ import 'ethers';
46
+ import '@ethersproject/abstract-provider';
47
+ import 'ethers/lib/utils';
48
+ import '@ethersproject/providers';
39
49
  import '@ethersproject/abstract-signer';
40
50
  import '@tradetrust-tt/tradetrust/dist/types/3.0/types';
41
51
  import '@tradetrust-tt/tradetrust/dist/types/__generated__/schema.3.0';
package/dist/index.d.ts CHANGED
@@ -12,6 +12,12 @@ export { TypedContractMethod } from '@tradetrust-tt/token-registry-v5/dist/contr
12
12
  export { decrypt } from './core/decrypt.js';
13
13
  export { encrypt } from './core/encrypt.js';
14
14
  export { verifyDocument } from './core/verify.js';
15
+ export { fetchEscrowTransfersV4, fetchEscrowTransfersV5 } from './core/endorsement-chain/fetchEscrowTransfer.js';
16
+ export { fetchTokenTransfers } from './core/endorsement-chain/fetchTokenTransfer.js';
17
+ export { fetchEventTime, mergeTransfersV4, mergeTransfersV5, sortLogChain } from './core/endorsement-chain/helpers.js';
18
+ export { getEndorsementChain } from './core/endorsement-chain/retrieveEndorsementChain.js';
19
+ export { EndorsementChain, ParsedLog, TitleEscrowTransferEvent, TitleEscrowTransferEventType, TokenTransferEvent, TokenTransferEventType, TradeTrustTokenEventType, TransferBaseEvent, TransferEvent, TransferEventType, TypedEvent } from './core/endorsement-chain/types.js';
20
+ export { TitleEscrowInterface, fetchEndorsementChain, getTitleEscrowAddress, isTitleEscrowVersion } from './core/endorsement-chain/useEndorsementChain.js';
15
21
  export { signOA } from './open-attestation/sign.js';
16
22
  export { KeyPair } from './open-attestation/types.js';
17
23
  export { diagnose, getAssetId, getDocumentData, getIssuerAddress, getTemplateURL, isObfuscated, isRawV2Document, isRawV3Document, isSignedWrappedV2Document, isSignedWrappedV3Document, isTransferableAsset, isWrappedV2Document, isWrappedV3Document } from './open-attestation/utils.js';
@@ -36,6 +42,10 @@ export { OpenAttestationDocument, SUPPORTED_SIGNING_ALGORITHM, SchemaId, SignedW
36
42
  export { DiagnoseError } from '@tradetrust-tt/tradetrust/dist/types/shared/utils';
37
43
  export { createResolver, getIdentifier, isValid, openAttestationDidIdentityProof, utils, verificationBuilder, verify } from '@tradetrust-tt/tt-verify';
38
44
  export { DocumentsToVerify, ErrorVerificationFragment, InvalidVerificationFragment, ProviderDetails, providerType as ProviderType, SkippedVerificationFragment, ValidVerificationFragment, VerificationBuilderOptions, VerificationFragment, VerificationFragmentStatus, VerificationFragmentType, VerificationFragmentWithData, Verifier, VerifierOptions } from '@tradetrust-tt/tt-verify/dist/types/src/types/core';
45
+ import 'ethers';
46
+ import '@ethersproject/abstract-provider';
47
+ import 'ethers/lib/utils';
48
+ import '@ethersproject/providers';
39
49
  import '@ethersproject/abstract-signer';
40
50
  import '@tradetrust-tt/tradetrust/dist/types/3.0/types';
41
51
  import '@tradetrust-tt/tradetrust/dist/types/__generated__/schema.3.0';
@@ -1,9 +1,9 @@
1
1
  export { TypedContractMethod } from '@tradetrust-tt/token-registry-v5/dist/contracts/common';
2
+ import '@tradetrust-tt/token-registry-v4/contracts';
2
3
  import '@trustvc/w3c-vc';
3
4
  import '@trustvc/w3c-issuer';
4
5
  import '@tradetrust-tt/tradetrust-utils';
5
6
  import '@tradetrust-tt/tradetrust-utils/constants/network';
6
7
  import '@tradetrust-tt/tradetrust-utils/constants/supportedChains';
7
8
  import '@tradetrust-tt/dnsprove';
8
- import '@tradetrust-tt/token-registry-v4/contracts';
9
9
  import '@tradetrust-tt/token-registry-v5/contracts';
@@ -1,9 +1,9 @@
1
1
  export { TypedContractMethod } from '@tradetrust-tt/token-registry-v5/dist/contracts/common';
2
+ import '@tradetrust-tt/token-registry-v4/contracts';
2
3
  import '@trustvc/w3c-vc';
3
4
  import '@trustvc/w3c-issuer';
4
5
  import '@tradetrust-tt/tradetrust-utils';
5
6
  import '@tradetrust-tt/tradetrust-utils/constants/network';
6
7
  import '@tradetrust-tt/tradetrust-utils/constants/supportedChains';
7
8
  import '@tradetrust-tt/dnsprove';
8
- import '@tradetrust-tt/token-registry-v4/contracts';
9
9
  import '@tradetrust-tt/token-registry-v5/contracts';
@@ -30,45 +30,46 @@ const TRANSFERABLE_RECORDS_TYPE = "TransferableRecords";
30
30
  const type = "DOCUMENT_STATUS";
31
31
  const name = TRANSFERABLE_RECORDS_TYPE;
32
32
  const verify = /* @__PURE__ */ __name(async (document, options) => {
33
- let signedDocument;
34
- let tokenId;
35
- if (w3cVC__namespace.isSignedDocument(document)) {
36
- signedDocument = document;
37
- tokenId = "0x" + signedDocument?.credentialStatus?.tokenId;
38
- }
39
- const credentialStatus = signedDocument?.credentialStatus;
40
- if (!credentialStatus?.tokenRegistry) {
41
- throw new ttVerify.CodedError(
42
- "Document's credentialStatus does not have tokenRegistry",
43
- ttVerify.OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT,
44
- ttVerify.OpenAttestationEthereumTokenRegistryStatusCode[ttVerify.OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT]
45
- );
46
- }
47
- if (!credentialStatus?.tokenNetwork || !credentialStatus?.tokenNetwork?.chainId) {
48
- throw new ttVerify.CodedError(
49
- "Document's credentialStatus does not have tokenNetwork.chainId",
50
- ttVerify.OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT,
51
- ttVerify.OpenAttestationEthereumTokenRegistryStatusCode[ttVerify.OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT]
52
- );
53
- }
33
+ const signedDocument = document;
34
+ const credentialStatuses = Array.isArray(signedDocument?.credentialStatus) ? signedDocument?.credentialStatus : [signedDocument?.credentialStatus];
54
35
  const { provider } = options;
55
- const mintStatus = await utils.isTokenMintedOnRegistry({
56
- tokenRegistryAddress: credentialStatus?.tokenRegistry,
57
- tokenId,
58
- provider
59
- });
36
+ const verificationResult = await Promise.all(
37
+ credentialStatuses.map(async (credentialStatus) => {
38
+ const tokenId = "0x" + credentialStatus.tokenId;
39
+ if (!credentialStatus?.tokenRegistry) {
40
+ throw new ttVerify.CodedError(
41
+ "Document's credentialStatus does not have tokenRegistry",
42
+ ttVerify.OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT,
43
+ ttVerify.OpenAttestationEthereumTokenRegistryStatusCode[ttVerify.OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT]
44
+ );
45
+ }
46
+ if (!credentialStatus?.tokenNetwork || !credentialStatus?.tokenNetwork?.chainId) {
47
+ throw new ttVerify.CodedError(
48
+ "Document's credentialStatus does not have tokenNetwork.chainId",
49
+ ttVerify.OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT,
50
+ ttVerify.OpenAttestationEthereumTokenRegistryStatusCode[ttVerify.OpenAttestationEthereumTokenRegistryStatusCode.UNRECOGNIZED_DOCUMENT]
51
+ );
52
+ }
53
+ const mintStatus = await utils.isTokenMintedOnRegistry({
54
+ tokenRegistryAddress: credentialStatus?.tokenRegistry,
55
+ tokenId,
56
+ provider
57
+ });
58
+ return mintStatus;
59
+ })
60
+ );
60
61
  const result = {
61
62
  name,
62
63
  type,
63
64
  status: "INVALID",
64
65
  data: {
65
- tokenRegistry: credentialStatus.tokenRegistry
66
+ tokenRegistry: credentialStatuses?.[0]?.tokenRegistry
66
67
  }
67
68
  };
68
- if (ttVerify.ValidTokenRegistryStatus.guard(mintStatus)) {
69
+ if (verificationResult.every(ttVerify.ValidTokenRegistryStatus.guard)) {
69
70
  result.status = "VALID";
70
71
  } else {
71
- result.reason = mintStatus.reason;
72
+ result.reason = verificationResult?.[0]?.reason;
72
73
  }
73
74
  return result;
74
75
  }, "verify");
@@ -85,7 +86,9 @@ const skip = /* @__PURE__ */ __name(async () => {
85
86
  };
86
87
  }, "skip");
87
88
  const test = /* @__PURE__ */ __name((document) => {
88
- if (document?.credentialStatus?.type === TRANSFERABLE_RECORDS_TYPE) {
89
+ const doc = document;
90
+ const credentialStatuses = Array.isArray(doc?.credentialStatus) ? doc?.credentialStatus : [doc?.credentialStatus];
91
+ if (w3cVC__namespace.isSignedDocument(document) && credentialStatuses.every((cs) => cs?.type === TRANSFERABLE_RECORDS_TYPE)) {
89
92
  return true;
90
93
  }
91
94
  return false;
@@ -18,13 +18,5 @@ type TransferableRecordsErrorFragment = Omit<ErrorVerificationFragment<never>, '
18
18
  };
19
19
  type TransferableRecordsVerificationFragment = TransferableRecordsResultFragment | TransferableRecordsErrorFragment;
20
20
  type VerifierType = Verifier<TransferableRecordsVerificationFragment>;
21
- type TransferableRecordCredentialStatus = {
22
- type: 'TransferableRecords';
23
- tokenRegistry: string;
24
- tokenNetwork: {
25
- chainId: number;
26
- name: string;
27
- };
28
- };
29
21
 
30
- export type { TransferableRecordCredentialStatus, TransferableRecordsErrorFragment, TransferableRecordsErrorReason, TransferableRecordsResultFragment, TransferableRecordsVerificationFragment, VerifierType };
22
+ export type { TransferableRecordsErrorFragment, TransferableRecordsErrorReason, TransferableRecordsResultFragment, TransferableRecordsVerificationFragment, VerifierType };
@@ -18,13 +18,5 @@ type TransferableRecordsErrorFragment = Omit<ErrorVerificationFragment<never>, '
18
18
  };
19
19
  type TransferableRecordsVerificationFragment = TransferableRecordsResultFragment | TransferableRecordsErrorFragment;
20
20
  type VerifierType = Verifier<TransferableRecordsVerificationFragment>;
21
- type TransferableRecordCredentialStatus = {
22
- type: 'TransferableRecords';
23
- tokenRegistry: string;
24
- tokenNetwork: {
25
- chainId: number;
26
- name: string;
27
- };
28
- };
29
21
 
30
- export type { TransferableRecordCredentialStatus, TransferableRecordsErrorFragment, TransferableRecordsErrorReason, TransferableRecordsResultFragment, TransferableRecordsVerificationFragment, VerifierType };
22
+ export type { TransferableRecordsErrorFragment, TransferableRecordsErrorReason, TransferableRecordsResultFragment, TransferableRecordsVerificationFragment, VerifierType };
@@ -19,33 +19,43 @@ const w3cCredentialStatus = {
19
19
  }, "skip"),
20
20
  test: /* @__PURE__ */ __name((document) => {
21
21
  const doc = document;
22
- return doc.credentialStatus?.type === "StatusList2021Entry";
22
+ const credentialStatuses = Array.isArray(doc?.credentialStatus) ? doc?.credentialStatus : [doc?.credentialStatus];
23
+ const test = /* @__PURE__ */ __name((credentialStatus) => ["BitstringStatusListEntry", "StatusList2021Entry"].includes(credentialStatus?.type), "test");
24
+ if (w3cVc.isSignedDocument(document) && credentialStatuses.every(test)) {
25
+ return true;
26
+ } else {
27
+ return false;
28
+ }
23
29
  }, "test"),
24
30
  verify: /* @__PURE__ */ __name(async (document) => {
25
31
  const doc = document;
26
- const verificationResult = await w3cVc.verifyCredentialStatus(doc.credentialStatus);
27
- if (verificationResult.error) {
32
+ const credentialStatuses = Array.isArray(doc.credentialStatus) ? doc.credentialStatus : [doc.credentialStatus];
33
+ const verificationResult = await Promise.all(
34
+ credentialStatuses.map((cs) => w3cVc.verifyCredentialStatus(cs, cs?.type))
35
+ );
36
+ if (verificationResult.some((r) => r.error)) {
28
37
  return {
29
38
  type: "DOCUMENT_STATUS",
30
39
  name: "W3CCredentialStatus",
31
40
  reason: {
32
- message: verificationResult.error
41
+ message: verificationResult.map((r) => r.error).join(", ")
33
42
  },
43
+ data: verificationResult,
34
44
  status: "ERROR"
35
45
  };
36
- } else if (verificationResult.status === true) {
46
+ } else if (verificationResult.every((r) => r.status === false)) {
37
47
  return {
38
48
  type: "DOCUMENT_STATUS",
39
49
  name: "W3CCredentialStatus",
40
- data: false,
41
- status: "INVALID"
50
+ data: verificationResult,
51
+ status: "VALID"
42
52
  };
43
53
  } else {
44
54
  return {
45
55
  type: "DOCUMENT_STATUS",
46
56
  name: "W3CCredentialStatus",
47
- data: true,
48
- status: "VALID"
57
+ data: verificationResult,
58
+ status: "INVALID"
49
59
  };
50
60
  }
51
61
  }, "verify")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trustvc/trustvc",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "description": "TrustVC library",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -109,16 +109,16 @@
109
109
  }
110
110
  },
111
111
  "dependencies": {
112
- "@tradetrust-tt/dnsprove": "^2.15.0",
112
+ "@tradetrust-tt/dnsprove": "^2.16.0",
113
113
  "@tradetrust-tt/token-registry-v4": "npm:@tradetrust-tt/token-registry@^4.15.0",
114
114
  "@tradetrust-tt/token-registry-v5": "npm:@tradetrust-tt/token-registry@^5.1.0",
115
115
  "@tradetrust-tt/tradetrust": "^6.10.0",
116
116
  "@tradetrust-tt/tradetrust-utils": "^2.1.1",
117
- "@tradetrust-tt/tt-verify": "^9.2.0",
118
- "@trustvc/w3c-context": "^1.0.0",
119
- "@trustvc/w3c-credential-status": "^1.0.0",
120
- "@trustvc/w3c-issuer": "^1.0.0",
121
- "@trustvc/w3c-vc": "^1.0.1",
117
+ "@tradetrust-tt/tt-verify": "^9.3.0",
118
+ "@trustvc/w3c-context": "^1.2.1",
119
+ "@trustvc/w3c-credential-status": "^1.2.1",
120
+ "@trustvc/w3c-issuer": "^1.2.1",
121
+ "@trustvc/w3c-vc": "^1.2.3",
122
122
  "did-resolver": "^4.1.0",
123
123
  "ethers": "^5.7.2",
124
124
  "js-sha3": "^0.9.3",