@credo-ts/anoncreds 0.5.0-alpha.101
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 +202 -0
- package/README.md +35 -0
- package/build/AnonCredsApi.d.ts +91 -0
- package/build/AnonCredsApi.js +577 -0
- package/build/AnonCredsApi.js.map +1 -0
- package/build/AnonCredsApiOptions.d.ts +24 -0
- package/build/AnonCredsApiOptions.js +3 -0
- package/build/AnonCredsApiOptions.js.map +1 -0
- package/build/AnonCredsModule.d.ts +19 -0
- package/build/AnonCredsModule.js +41 -0
- package/build/AnonCredsModule.js.map +1 -0
- package/build/AnonCredsModuleConfig.d.ts +28 -0
- package/build/AnonCredsModuleConfig.js +23 -0
- package/build/AnonCredsModuleConfig.js.map +1 -0
- package/build/error/AnonCredsError.d.ts +6 -0
- package/build/error/AnonCredsError.js +11 -0
- package/build/error/AnonCredsError.js.map +1 -0
- package/build/error/AnonCredsStoreRecordError.d.ts +6 -0
- package/build/error/AnonCredsStoreRecordError.js +11 -0
- package/build/error/AnonCredsStoreRecordError.js.map +1 -0
- package/build/error/index.d.ts +2 -0
- package/build/error/index.js +19 -0
- package/build/error/index.js.map +1 -0
- package/build/formats/AnonCredsCredentialFormat.d.ts +79 -0
- package/build/formats/AnonCredsCredentialFormat.js +3 -0
- package/build/formats/AnonCredsCredentialFormat.js.map +1 -0
- package/build/formats/AnonCredsCredentialFormatService.d.ts +80 -0
- package/build/formats/AnonCredsCredentialFormatService.js +455 -0
- package/build/formats/AnonCredsCredentialFormatService.js.map +1 -0
- package/build/formats/AnonCredsProofFormat.d.ts +70 -0
- package/build/formats/AnonCredsProofFormat.js +3 -0
- package/build/formats/AnonCredsProofFormat.js.map +1 -0
- package/build/formats/AnonCredsProofFormatService.d.ts +58 -0
- package/build/formats/AnonCredsProofFormatService.js +375 -0
- package/build/formats/AnonCredsProofFormatService.js.map +1 -0
- package/build/formats/LegacyIndyCredentialFormat.d.ts +32 -0
- package/build/formats/LegacyIndyCredentialFormat.js +3 -0
- package/build/formats/LegacyIndyCredentialFormat.js.map +1 -0
- package/build/formats/LegacyIndyCredentialFormatService.d.ts +80 -0
- package/build/formats/LegacyIndyCredentialFormatService.js +414 -0
- package/build/formats/LegacyIndyCredentialFormatService.js.map +1 -0
- package/build/formats/LegacyIndyProofFormat.d.ts +29 -0
- package/build/formats/LegacyIndyProofFormat.js +3 -0
- package/build/formats/LegacyIndyProofFormat.js.map +1 -0
- package/build/formats/LegacyIndyProofFormatService.d.ts +58 -0
- package/build/formats/LegacyIndyProofFormatService.js +384 -0
- package/build/formats/LegacyIndyProofFormatService.js.map +1 -0
- package/build/formats/index.d.ts +8 -0
- package/build/formats/index.js +30 -0
- package/build/formats/index.js.map +1 -0
- package/build/index.d.ts +16 -0
- package/build/index.js +41 -0
- package/build/index.js.map +1 -0
- package/build/models/AnonCredsCredentialProposal.d.ts +62 -0
- package/build/models/AnonCredsCredentialProposal.js +81 -0
- package/build/models/AnonCredsCredentialProposal.js.map +1 -0
- package/build/models/AnonCredsProofRequest.d.ts +27 -0
- package/build/models/AnonCredsProofRequest.js +82 -0
- package/build/models/AnonCredsProofRequest.js.map +1 -0
- package/build/models/AnonCredsRequestedAttribute.d.ts +16 -0
- package/build/models/AnonCredsRequestedAttribute.js +56 -0
- package/build/models/AnonCredsRequestedAttribute.js.map +1 -0
- package/build/models/AnonCredsRequestedPredicate.d.ts +19 -0
- package/build/models/AnonCredsRequestedPredicate.js +61 -0
- package/build/models/AnonCredsRequestedPredicate.js.map +1 -0
- package/build/models/AnonCredsRestriction.d.ts +55 -0
- package/build/models/AnonCredsRestriction.js +160 -0
- package/build/models/AnonCredsRestriction.js.map +1 -0
- package/build/models/AnonCredsRestrictionWrapper.d.ts +4 -0
- package/build/models/AnonCredsRestrictionWrapper.js +25 -0
- package/build/models/AnonCredsRestrictionWrapper.js.map +1 -0
- package/build/models/AnonCredsRevocationInterval.d.ts +5 -0
- package/build/models/AnonCredsRevocationInterval.js +33 -0
- package/build/models/AnonCredsRevocationInterval.js.map +1 -0
- package/build/models/exchange.d.ts +100 -0
- package/build/models/exchange.js +5 -0
- package/build/models/exchange.js.map +1 -0
- package/build/models/index.d.ts +4 -0
- package/build/models/index.js +21 -0
- package/build/models/index.js.map +1 -0
- package/build/models/internal.d.ts +38 -0
- package/build/models/internal.js +3 -0
- package/build/models/internal.js.map +1 -0
- package/build/models/registry.d.ts +39 -0
- package/build/models/registry.js +3 -0
- package/build/models/registry.js.map +1 -0
- package/build/protocols/credentials/v1/V1CredentialProtocol.d.ts +162 -0
- package/build/protocols/credentials/v1/V1CredentialProtocol.js +901 -0
- package/build/protocols/credentials/v1/V1CredentialProtocol.js.map +1 -0
- package/build/protocols/credentials/v1/errors/V1CredentialProblemReportError.d.ts +10 -0
- package/build/protocols/credentials/v1/errors/V1CredentialProblemReportError.js +18 -0
- package/build/protocols/credentials/v1/errors/V1CredentialProblemReportError.js.map +1 -0
- package/build/protocols/credentials/v1/errors/index.d.ts +1 -0
- package/build/protocols/credentials/v1/errors/index.js +6 -0
- package/build/protocols/credentials/v1/errors/index.js.map +1 -0
- package/build/protocols/credentials/v1/handlers/V1CredentialAckHandler.d.ts +9 -0
- package/build/protocols/credentials/v1/handlers/V1CredentialAckHandler.js +15 -0
- package/build/protocols/credentials/v1/handlers/V1CredentialAckHandler.js.map +1 -0
- package/build/protocols/credentials/v1/handlers/V1CredentialProblemReportHandler.d.ts +9 -0
- package/build/protocols/credentials/v1/handlers/V1CredentialProblemReportHandler.js +15 -0
- package/build/protocols/credentials/v1/handlers/V1CredentialProblemReportHandler.js.map +1 -0
- package/build/protocols/credentials/v1/handlers/V1IssueCredentialHandler.d.ts +10 -0
- package/build/protocols/credentials/v1/handlers/V1IssueCredentialHandler.js +40 -0
- package/build/protocols/credentials/v1/handlers/V1IssueCredentialHandler.js.map +1 -0
- package/build/protocols/credentials/v1/handlers/V1OfferCredentialHandler.d.ts +10 -0
- package/build/protocols/credentials/v1/handlers/V1OfferCredentialHandler.js +33 -0
- package/build/protocols/credentials/v1/handlers/V1OfferCredentialHandler.js.map +1 -0
- package/build/protocols/credentials/v1/handlers/V1ProposeCredentialHandler.d.ts +10 -0
- package/build/protocols/credentials/v1/handlers/V1ProposeCredentialHandler.js +38 -0
- package/build/protocols/credentials/v1/handlers/V1ProposeCredentialHandler.js.map +1 -0
- package/build/protocols/credentials/v1/handlers/V1RequestCredentialHandler.d.ts +10 -0
- package/build/protocols/credentials/v1/handlers/V1RequestCredentialHandler.js +40 -0
- package/build/protocols/credentials/v1/handlers/V1RequestCredentialHandler.js.map +1 -0
- package/build/protocols/credentials/v1/handlers/index.d.ts +6 -0
- package/build/protocols/credentials/v1/handlers/index.js +23 -0
- package/build/protocols/credentials/v1/handlers/index.js.map +1 -0
- package/build/protocols/credentials/v1/index.d.ts +2 -0
- package/build/protocols/credentials/v1/index.js +19 -0
- package/build/protocols/credentials/v1/index.js.map +1 -0
- package/build/protocols/credentials/v1/messages/V1CredentialAckMessage.d.ts +16 -0
- package/build/protocols/credentials/v1/messages/V1CredentialAckMessage.js +34 -0
- package/build/protocols/credentials/v1/messages/V1CredentialAckMessage.js.map +1 -0
- package/build/protocols/credentials/v1/messages/V1CredentialPreview.d.ts +26 -0
- package/build/protocols/credentials/v1/messages/V1CredentialPreview.js +69 -0
- package/build/protocols/credentials/v1/messages/V1CredentialPreview.js.map +1 -0
- package/build/protocols/credentials/v1/messages/V1CredentialProblemReportMessage.d.ts +16 -0
- package/build/protocols/credentials/v1/messages/V1CredentialProblemReportMessage.js +34 -0
- package/build/protocols/credentials/v1/messages/V1CredentialProblemReportMessage.js.map +1 -0
- package/build/protocols/credentials/v1/messages/V1IssueCredentialMessage.d.ts +19 -0
- package/build/protocols/credentials/v1/messages/V1IssueCredentialMessage.js +62 -0
- package/build/protocols/credentials/v1/messages/V1IssueCredentialMessage.js.map +1 -0
- package/build/protocols/credentials/v1/messages/V1OfferCredentialMessage.d.ts +27 -0
- package/build/protocols/credentials/v1/messages/V1OfferCredentialMessage.js +75 -0
- package/build/protocols/credentials/v1/messages/V1OfferCredentialMessage.js.map +1 -0
- package/build/protocols/credentials/v1/messages/V1ProposeCredentialMessage.d.ts +59 -0
- package/build/protocols/credentials/v1/messages/V1ProposeCredentialMessage.js +109 -0
- package/build/protocols/credentials/v1/messages/V1ProposeCredentialMessage.js.map +1 -0
- package/build/protocols/credentials/v1/messages/V1RequestCredentialMessage.d.ts +19 -0
- package/build/protocols/credentials/v1/messages/V1RequestCredentialMessage.js +61 -0
- package/build/protocols/credentials/v1/messages/V1RequestCredentialMessage.js.map +1 -0
- package/build/protocols/credentials/v1/messages/index.d.ts +7 -0
- package/build/protocols/credentials/v1/messages/index.js +24 -0
- package/build/protocols/credentials/v1/messages/index.js.map +1 -0
- package/build/protocols/index.d.ts +2 -0
- package/build/protocols/index.js +19 -0
- package/build/protocols/index.js.map +1 -0
- package/build/protocols/proofs/v1/V1ProofProtocol.d.ts +50 -0
- package/build/protocols/proofs/v1/V1ProofProtocol.js +826 -0
- package/build/protocols/proofs/v1/V1ProofProtocol.js.map +1 -0
- package/build/protocols/proofs/v1/errors/V1PresentationProblemReportError.d.ts +12 -0
- package/build/protocols/proofs/v1/errors/V1PresentationProblemReportError.js +19 -0
- package/build/protocols/proofs/v1/errors/V1PresentationProblemReportError.js.map +1 -0
- package/build/protocols/proofs/v1/errors/index.d.ts +1 -0
- package/build/protocols/proofs/v1/errors/index.js +18 -0
- package/build/protocols/proofs/v1/errors/index.js.map +1 -0
- package/build/protocols/proofs/v1/handlers/V1PresentationAckHandler.d.ts +9 -0
- package/build/protocols/proofs/v1/handlers/V1PresentationAckHandler.js +15 -0
- package/build/protocols/proofs/v1/handlers/V1PresentationAckHandler.js.map +1 -0
- package/build/protocols/proofs/v1/handlers/V1PresentationHandler.d.ts +10 -0
- package/build/protocols/proofs/v1/handlers/V1PresentationHandler.js +40 -0
- package/build/protocols/proofs/v1/handlers/V1PresentationHandler.js.map +1 -0
- package/build/protocols/proofs/v1/handlers/V1PresentationProblemReportHandler.d.ts +9 -0
- package/build/protocols/proofs/v1/handlers/V1PresentationProblemReportHandler.js +15 -0
- package/build/protocols/proofs/v1/handlers/V1PresentationProblemReportHandler.js.map +1 -0
- package/build/protocols/proofs/v1/handlers/V1ProposePresentationHandler.d.ts +11 -0
- package/build/protocols/proofs/v1/handlers/V1ProposePresentationHandler.js +38 -0
- package/build/protocols/proofs/v1/handlers/V1ProposePresentationHandler.js.map +1 -0
- package/build/protocols/proofs/v1/handlers/V1RequestPresentationHandler.d.ts +10 -0
- package/build/protocols/proofs/v1/handlers/V1RequestPresentationHandler.js +35 -0
- package/build/protocols/proofs/v1/handlers/V1RequestPresentationHandler.js.map +1 -0
- package/build/protocols/proofs/v1/handlers/index.d.ts +5 -0
- package/build/protocols/proofs/v1/handlers/index.js +22 -0
- package/build/protocols/proofs/v1/handlers/index.js.map +1 -0
- package/build/protocols/proofs/v1/index.d.ts +4 -0
- package/build/protocols/proofs/v1/index.js +21 -0
- package/build/protocols/proofs/v1/index.js.map +1 -0
- package/build/protocols/proofs/v1/messages/V1PresentationAckMessage.d.ts +8 -0
- package/build/protocols/proofs/v1/messages/V1PresentationAckMessage.js +27 -0
- package/build/protocols/proofs/v1/messages/V1PresentationAckMessage.js.map +1 -0
- package/build/protocols/proofs/v1/messages/V1PresentationMessage.d.ts +31 -0
- package/build/protocols/proofs/v1/messages/V1PresentationMessage.js +67 -0
- package/build/protocols/proofs/v1/messages/V1PresentationMessage.js.map +1 -0
- package/build/protocols/proofs/v1/messages/V1PresentationProblemReportMessage.d.ts +16 -0
- package/build/protocols/proofs/v1/messages/V1PresentationProblemReportMessage.js +34 -0
- package/build/protocols/proofs/v1/messages/V1PresentationProblemReportMessage.js.map +1 -0
- package/build/protocols/proofs/v1/messages/V1ProposePresentationMessage.d.ts +26 -0
- package/build/protocols/proofs/v1/messages/V1ProposePresentationMessage.js +53 -0
- package/build/protocols/proofs/v1/messages/V1ProposePresentationMessage.js.map +1 -0
- package/build/protocols/proofs/v1/messages/V1RequestPresentationMessage.d.ts +29 -0
- package/build/protocols/proofs/v1/messages/V1RequestPresentationMessage.js +65 -0
- package/build/protocols/proofs/v1/messages/V1RequestPresentationMessage.js.map +1 -0
- package/build/protocols/proofs/v1/messages/index.d.ts +5 -0
- package/build/protocols/proofs/v1/messages/index.js +22 -0
- package/build/protocols/proofs/v1/messages/index.js.map +1 -0
- package/build/protocols/proofs/v1/models/V1PresentationPreview.d.ts +50 -0
- package/build/protocols/proofs/v1/models/V1PresentationPreview.js +130 -0
- package/build/protocols/proofs/v1/models/V1PresentationPreview.js.map +1 -0
- package/build/protocols/proofs/v1/models/index.d.ts +1 -0
- package/build/protocols/proofs/v1/models/index.js +18 -0
- package/build/protocols/proofs/v1/models/index.js.map +1 -0
- package/build/repository/AnonCredsCredentialDefinitionPrivateRecord.d.ts +20 -0
- package/build/repository/AnonCredsCredentialDefinitionPrivateRecord.js +22 -0
- package/build/repository/AnonCredsCredentialDefinitionPrivateRecord.js.map +1 -0
- package/build/repository/AnonCredsCredentialDefinitionPrivateRepository.d.ts +8 -0
- package/build/repository/AnonCredsCredentialDefinitionPrivateRepository.js +35 -0
- package/build/repository/AnonCredsCredentialDefinitionPrivateRepository.js.map +1 -0
- package/build/repository/AnonCredsCredentialDefinitionRecord.d.ts +38 -0
- package/build/repository/AnonCredsCredentialDefinitionRecord.js +29 -0
- package/build/repository/AnonCredsCredentialDefinitionRecord.js.map +1 -0
- package/build/repository/AnonCredsCredentialDefinitionRepository.d.ts +8 -0
- package/build/repository/AnonCredsCredentialDefinitionRepository.js +53 -0
- package/build/repository/AnonCredsCredentialDefinitionRepository.js.map +1 -0
- package/build/repository/AnonCredsCredentialRecord.d.ts +48 -0
- package/build/repository/AnonCredsCredentialRecord.js +37 -0
- package/build/repository/AnonCredsCredentialRecord.js.map +1 -0
- package/build/repository/AnonCredsCredentialRepository.d.ts +10 -0
- package/build/repository/AnonCredsCredentialRepository.js +41 -0
- package/build/repository/AnonCredsCredentialRepository.js.map +1 -0
- package/build/repository/AnonCredsKeyCorrectnessProofRecord.d.ts +20 -0
- package/build/repository/AnonCredsKeyCorrectnessProofRecord.js +22 -0
- package/build/repository/AnonCredsKeyCorrectnessProofRecord.js.map +1 -0
- package/build/repository/AnonCredsKeyCorrectnessProofRepository.d.ts +8 -0
- package/build/repository/AnonCredsKeyCorrectnessProofRepository.js +35 -0
- package/build/repository/AnonCredsKeyCorrectnessProofRepository.js.map +1 -0
- package/build/repository/AnonCredsLinkSecretRecord.d.ts +23 -0
- package/build/repository/AnonCredsLinkSecretRecord.js +22 -0
- package/build/repository/AnonCredsLinkSecretRecord.js.map +1 -0
- package/build/repository/AnonCredsLinkSecretRepository.d.ts +10 -0
- package/build/repository/AnonCredsLinkSecretRepository.js +41 -0
- package/build/repository/AnonCredsLinkSecretRepository.js.map +1 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRecord.d.ts +34 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRecord.js +30 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRecord.js.map +1 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.d.ts +10 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.js +38 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.js.map +1 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionRecord.d.ts +24 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionRecord.js +22 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionRecord.js.map +1 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionRepository.d.ts +9 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionRepository.js +38 -0
- package/build/repository/AnonCredsRevocationRegistryDefinitionRepository.js.map +1 -0
- package/build/repository/AnonCredsSchemaRecord.d.ts +38 -0
- package/build/repository/AnonCredsSchemaRecord.js +29 -0
- package/build/repository/AnonCredsSchemaRecord.js.map +1 -0
- package/build/repository/AnonCredsSchemaRepository.d.ts +8 -0
- package/build/repository/AnonCredsSchemaRepository.js +53 -0
- package/build/repository/AnonCredsSchemaRepository.js.map +1 -0
- package/build/repository/anonCredsCredentialDefinitionRecordMetadataTypes.d.ts +9 -0
- package/build/repository/anonCredsCredentialDefinitionRecordMetadataTypes.js +9 -0
- package/build/repository/anonCredsCredentialDefinitionRecordMetadataTypes.js.map +1 -0
- package/build/repository/anonCredsRevocationRegistryDefinitionRecordMetadataTypes.d.ts +9 -0
- package/build/repository/anonCredsRevocationRegistryDefinitionRecordMetadataTypes.js +9 -0
- package/build/repository/anonCredsRevocationRegistryDefinitionRecordMetadataTypes.js.map +1 -0
- package/build/repository/anonCredsSchemaRecordMetadataTypes.d.ts +9 -0
- package/build/repository/anonCredsSchemaRecordMetadataTypes.js +9 -0
- package/build/repository/anonCredsSchemaRecordMetadataTypes.js.map +1 -0
- package/build/repository/index.d.ts +16 -0
- package/build/repository/index.js +33 -0
- package/build/repository/index.js.map +1 -0
- package/build/services/AnonCredsHolderService.d.ts +15 -0
- package/build/services/AnonCredsHolderService.js +5 -0
- package/build/services/AnonCredsHolderService.js.map +1 -0
- package/build/services/AnonCredsHolderServiceOptions.d.ts +82 -0
- package/build/services/AnonCredsHolderServiceOptions.js +3 -0
- package/build/services/AnonCredsHolderServiceOptions.js.map +1 -0
- package/build/services/AnonCredsIssuerService.d.ts +14 -0
- package/build/services/AnonCredsIssuerService.js +5 -0
- package/build/services/AnonCredsIssuerService.js.map +1 -0
- package/build/services/AnonCredsIssuerServiceOptions.d.ts +61 -0
- package/build/services/AnonCredsIssuerServiceOptions.js +3 -0
- package/build/services/AnonCredsIssuerServiceOptions.js.map +1 -0
- package/build/services/AnonCredsVerifierService.d.ts +6 -0
- package/build/services/AnonCredsVerifierService.js +5 -0
- package/build/services/AnonCredsVerifierService.js.map +1 -0
- package/build/services/AnonCredsVerifierServiceOptions.d.ts +20 -0
- package/build/services/AnonCredsVerifierServiceOptions.js +3 -0
- package/build/services/AnonCredsVerifierServiceOptions.js.map +1 -0
- package/build/services/index.d.ts +8 -0
- package/build/services/index.js +27 -0
- package/build/services/index.js.map +1 -0
- package/build/services/registry/AnonCredsRegistry.d.ts +25 -0
- package/build/services/registry/AnonCredsRegistry.js +3 -0
- package/build/services/registry/AnonCredsRegistry.js.map +1 -0
- package/build/services/registry/AnonCredsRegistryService.d.ts +10 -0
- package/build/services/registry/AnonCredsRegistryService.js +33 -0
- package/build/services/registry/AnonCredsRegistryService.js.map +1 -0
- package/build/services/registry/CredentialDefinitionOptions.d.ts +34 -0
- package/build/services/registry/CredentialDefinitionOptions.js +3 -0
- package/build/services/registry/CredentialDefinitionOptions.js.map +1 -0
- package/build/services/registry/RevocationRegistryDefinitionOptions.d.ts +34 -0
- package/build/services/registry/RevocationRegistryDefinitionOptions.js +3 -0
- package/build/services/registry/RevocationRegistryDefinitionOptions.js.map +1 -0
- package/build/services/registry/RevocationStatusListOptions.d.ts +32 -0
- package/build/services/registry/RevocationStatusListOptions.js +3 -0
- package/build/services/registry/RevocationStatusListOptions.js.map +1 -0
- package/build/services/registry/SchemaOptions.d.ts +34 -0
- package/build/services/registry/SchemaOptions.js +3 -0
- package/build/services/registry/SchemaOptions.js.map +1 -0
- package/build/services/registry/base.d.ts +19 -0
- package/build/services/registry/base.js +3 -0
- package/build/services/registry/base.js.map +1 -0
- package/build/services/registry/index.d.ts +7 -0
- package/build/services/registry/index.js +23 -0
- package/build/services/registry/index.js.map +1 -0
- package/build/services/tails/BasicTailsFileService.d.ts +23 -0
- package/build/services/tails/BasicTailsFileService.js +65 -0
- package/build/services/tails/BasicTailsFileService.js.map +1 -0
- package/build/services/tails/TailsFileService.d.ts +42 -0
- package/build/services/tails/TailsFileService.js +3 -0
- package/build/services/tails/TailsFileService.js.map +1 -0
- package/build/services/tails/index.d.ts +2 -0
- package/build/services/tails/index.js +19 -0
- package/build/services/tails/index.js.map +1 -0
- package/build/updates/0.3.1-0.4/credentialDefinition.d.ts +18 -0
- package/build/updates/0.3.1-0.4/credentialDefinition.js +57 -0
- package/build/updates/0.3.1-0.4/credentialDefinition.js.map +1 -0
- package/build/updates/0.3.1-0.4/credentialExchangeRecord.d.ts +69 -0
- package/build/updates/0.3.1-0.4/credentialExchangeRecord.js +122 -0
- package/build/updates/0.3.1-0.4/credentialExchangeRecord.js.map +1 -0
- package/build/updates/0.3.1-0.4/index.d.ts +2 -0
- package/build/updates/0.3.1-0.4/index.js +15 -0
- package/build/updates/0.3.1-0.4/index.js.map +1 -0
- package/build/updates/0.3.1-0.4/linkSecret.d.ts +6 -0
- package/build/updates/0.3.1-0.4/linkSecret.js +36 -0
- package/build/updates/0.3.1-0.4/linkSecret.js.map +1 -0
- package/build/updates/0.3.1-0.4/schema.d.ts +15 -0
- package/build/updates/0.3.1-0.4/schema.js +42 -0
- package/build/updates/0.3.1-0.4/schema.js.map +1 -0
- package/build/utils/areRequestsEqual.d.ts +6 -0
- package/build/utils/areRequestsEqual.js +136 -0
- package/build/utils/areRequestsEqual.js.map +1 -0
- package/build/utils/composeAutoAccept.d.ts +15 -0
- package/build/utils/composeAutoAccept.js +27 -0
- package/build/utils/composeAutoAccept.js.map +1 -0
- package/build/utils/createRequestFromPreview.d.ts +10 -0
- package/build/utils/createRequestFromPreview.js +72 -0
- package/build/utils/createRequestFromPreview.js.map +1 -0
- package/build/utils/credential.d.ts +62 -0
- package/build/utils/credential.js +169 -0
- package/build/utils/credential.js.map +1 -0
- package/build/utils/credentialPreviewAttributes.d.ts +2 -0
- package/build/utils/credentialPreviewAttributes.js +25 -0
- package/build/utils/credentialPreviewAttributes.js.map +1 -0
- package/build/utils/getRevocationRegistries.d.ts +22 -0
- package/build/utils/getRevocationRegistries.js +152 -0
- package/build/utils/getRevocationRegistries.js.map +1 -0
- package/build/utils/hasDuplicateGroupNames.d.ts +2 -0
- package/build/utils/hasDuplicateGroupNames.js +23 -0
- package/build/utils/hasDuplicateGroupNames.js.map +1 -0
- package/build/utils/index.d.ts +13 -0
- package/build/utils/index.js +36 -0
- package/build/utils/index.js.map +1 -0
- package/build/utils/indyIdentifiers.d.ts +48 -0
- package/build/utils/indyIdentifiers.js +146 -0
- package/build/utils/indyIdentifiers.js.map +1 -0
- package/build/utils/isMap.d.ts +5 -0
- package/build/utils/isMap.js +18 -0
- package/build/utils/isMap.js.map +1 -0
- package/build/utils/linkSecret.d.ts +7 -0
- package/build/utils/linkSecret.js +24 -0
- package/build/utils/linkSecret.js.map +1 -0
- package/build/utils/metadata.d.ts +24 -0
- package/build/utils/metadata.js +18 -0
- package/build/utils/metadata.js.map +1 -0
- package/build/utils/proverDid.d.ts +8 -0
- package/build/utils/proverDid.js +16 -0
- package/build/utils/proverDid.js.map +1 -0
- package/build/utils/revocationInterval.d.ts +7 -0
- package/build/utils/revocationInterval.js +15 -0
- package/build/utils/revocationInterval.js.map +1 -0
- package/build/utils/sortRequestedCredentialsMatches.d.ts +8 -0
- package/build/utils/sortRequestedCredentialsMatches.js +33 -0
- package/build/utils/sortRequestedCredentialsMatches.js.map +1 -0
- package/build/utils/timestamp.d.ts +1 -0
- package/build/utils/timestamp.js +7 -0
- package/build/utils/timestamp.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnonCredsProofFormatService = void 0;
|
|
4
|
+
const core_1 = require("@credo-ts/core");
|
|
5
|
+
const AnonCredsProofRequest_1 = require("../models/AnonCredsProofRequest");
|
|
6
|
+
const services_1 = require("../services");
|
|
7
|
+
const AnonCredsRegistryService_1 = require("../services/registry/AnonCredsRegistryService");
|
|
8
|
+
const utils_1 = require("../utils");
|
|
9
|
+
const timestamp_1 = require("../utils/timestamp");
|
|
10
|
+
const ANONCREDS_PRESENTATION_PROPOSAL = 'anoncreds/proof-request@v1.0';
|
|
11
|
+
const ANONCREDS_PRESENTATION_REQUEST = 'anoncreds/proof-request@v1.0';
|
|
12
|
+
const ANONCREDS_PRESENTATION = 'anoncreds/proof@v1.0';
|
|
13
|
+
class AnonCredsProofFormatService {
|
|
14
|
+
constructor() {
|
|
15
|
+
this.formatKey = 'anoncreds';
|
|
16
|
+
}
|
|
17
|
+
async createProposal(agentContext, { attachmentId, proofFormats }) {
|
|
18
|
+
var _a, _b, _c, _d;
|
|
19
|
+
const format = new core_1.ProofFormatSpec({
|
|
20
|
+
format: ANONCREDS_PRESENTATION_PROPOSAL,
|
|
21
|
+
attachmentId,
|
|
22
|
+
});
|
|
23
|
+
const anoncredsFormat = proofFormats.anoncreds;
|
|
24
|
+
if (!anoncredsFormat) {
|
|
25
|
+
throw Error('Missing anoncreds format to create proposal attachment format');
|
|
26
|
+
}
|
|
27
|
+
const proofRequest = (0, utils_1.createRequestFromPreview)({
|
|
28
|
+
attributes: (_a = anoncredsFormat.attributes) !== null && _a !== void 0 ? _a : [],
|
|
29
|
+
predicates: (_b = anoncredsFormat.predicates) !== null && _b !== void 0 ? _b : [],
|
|
30
|
+
name: (_c = anoncredsFormat.name) !== null && _c !== void 0 ? _c : 'Proof request',
|
|
31
|
+
version: (_d = anoncredsFormat.version) !== null && _d !== void 0 ? _d : '1.0',
|
|
32
|
+
nonce: await agentContext.wallet.generateNonce(),
|
|
33
|
+
nonRevokedInterval: anoncredsFormat.nonRevokedInterval,
|
|
34
|
+
});
|
|
35
|
+
const attachment = this.getFormatData(proofRequest, format.attachmentId);
|
|
36
|
+
return { attachment, format };
|
|
37
|
+
}
|
|
38
|
+
async processProposal(agentContext, { attachment }) {
|
|
39
|
+
const proposalJson = attachment.getDataAsJson();
|
|
40
|
+
// fromJson also validates
|
|
41
|
+
core_1.JsonTransformer.fromJSON(proposalJson, AnonCredsProofRequest_1.AnonCredsProofRequest);
|
|
42
|
+
// Assert attribute and predicate (group) names do not match
|
|
43
|
+
(0, utils_1.assertNoDuplicateGroupsNamesInProofRequest)(proposalJson);
|
|
44
|
+
}
|
|
45
|
+
async acceptProposal(agentContext, { proposalAttachment, attachmentId }) {
|
|
46
|
+
const format = new core_1.ProofFormatSpec({
|
|
47
|
+
format: ANONCREDS_PRESENTATION_REQUEST,
|
|
48
|
+
attachmentId,
|
|
49
|
+
});
|
|
50
|
+
const proposalJson = proposalAttachment.getDataAsJson();
|
|
51
|
+
const request = Object.assign(Object.assign({}, proposalJson), {
|
|
52
|
+
// We never want to reuse the nonce from the proposal, as this will allow replay attacks
|
|
53
|
+
nonce: await agentContext.wallet.generateNonce() });
|
|
54
|
+
const attachment = this.getFormatData(request, format.attachmentId);
|
|
55
|
+
return { attachment, format };
|
|
56
|
+
}
|
|
57
|
+
async createRequest(agentContext, { attachmentId, proofFormats }) {
|
|
58
|
+
var _a, _b;
|
|
59
|
+
const format = new core_1.ProofFormatSpec({
|
|
60
|
+
format: ANONCREDS_PRESENTATION_REQUEST,
|
|
61
|
+
attachmentId,
|
|
62
|
+
});
|
|
63
|
+
const anoncredsFormat = proofFormats.anoncreds;
|
|
64
|
+
if (!anoncredsFormat) {
|
|
65
|
+
throw Error('Missing anoncreds format in create request attachment format');
|
|
66
|
+
}
|
|
67
|
+
const request = {
|
|
68
|
+
name: anoncredsFormat.name,
|
|
69
|
+
version: anoncredsFormat.version,
|
|
70
|
+
nonce: await agentContext.wallet.generateNonce(),
|
|
71
|
+
requested_attributes: (_a = anoncredsFormat.requested_attributes) !== null && _a !== void 0 ? _a : {},
|
|
72
|
+
requested_predicates: (_b = anoncredsFormat.requested_predicates) !== null && _b !== void 0 ? _b : {},
|
|
73
|
+
non_revoked: anoncredsFormat.non_revoked,
|
|
74
|
+
};
|
|
75
|
+
// Assert attribute and predicate (group) names do not match
|
|
76
|
+
(0, utils_1.assertNoDuplicateGroupsNamesInProofRequest)(request);
|
|
77
|
+
const attachment = this.getFormatData(request, format.attachmentId);
|
|
78
|
+
return { attachment, format };
|
|
79
|
+
}
|
|
80
|
+
async processRequest(agentContext, { attachment }) {
|
|
81
|
+
const requestJson = attachment.getDataAsJson();
|
|
82
|
+
// fromJson also validates
|
|
83
|
+
core_1.JsonTransformer.fromJSON(requestJson, AnonCredsProofRequest_1.AnonCredsProofRequest);
|
|
84
|
+
// Assert attribute and predicate (group) names do not match
|
|
85
|
+
(0, utils_1.assertNoDuplicateGroupsNamesInProofRequest)(requestJson);
|
|
86
|
+
}
|
|
87
|
+
async acceptRequest(agentContext, { proofFormats, requestAttachment, attachmentId }) {
|
|
88
|
+
const format = new core_1.ProofFormatSpec({
|
|
89
|
+
format: ANONCREDS_PRESENTATION,
|
|
90
|
+
attachmentId,
|
|
91
|
+
});
|
|
92
|
+
const requestJson = requestAttachment.getDataAsJson();
|
|
93
|
+
const anoncredsFormat = proofFormats === null || proofFormats === void 0 ? void 0 : proofFormats.anoncreds;
|
|
94
|
+
const selectedCredentials = anoncredsFormat !== null && anoncredsFormat !== void 0 ? anoncredsFormat : (await this._selectCredentialsForRequest(agentContext, requestJson, {
|
|
95
|
+
filterByNonRevocationRequirements: true,
|
|
96
|
+
}));
|
|
97
|
+
const proof = await this.createProof(agentContext, requestJson, selectedCredentials);
|
|
98
|
+
const attachment = this.getFormatData(proof, format.attachmentId);
|
|
99
|
+
return {
|
|
100
|
+
attachment,
|
|
101
|
+
format,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
async processPresentation(agentContext, { requestAttachment, attachment }) {
|
|
105
|
+
var _a;
|
|
106
|
+
const verifierService = agentContext.dependencyManager.resolve(services_1.AnonCredsVerifierServiceSymbol);
|
|
107
|
+
const proofRequestJson = requestAttachment.getDataAsJson();
|
|
108
|
+
// NOTE: we don't do validation here, as this is handled by the AnonCreds implementation, however
|
|
109
|
+
// this can lead to confusing error messages. We should consider doing validation here as well.
|
|
110
|
+
// Defining a class-transformer/class-validator class seems a bit overkill, and the usage of interfaces
|
|
111
|
+
// for the anoncreds package keeps things simple. Maybe we can try to use something like zod to validate
|
|
112
|
+
const proofJson = attachment.getDataAsJson();
|
|
113
|
+
for (const [referent, attribute] of Object.entries(proofJson.requested_proof.revealed_attrs)) {
|
|
114
|
+
if (!(0, utils_1.checkValidCredentialValueEncoding)(attribute.raw, attribute.encoded)) {
|
|
115
|
+
throw new core_1.AriesFrameworkError(`The encoded value for '${referent}' is invalid. ` +
|
|
116
|
+
`Expected '${(0, utils_1.encodeCredentialValue)(attribute.raw)}'. ` +
|
|
117
|
+
`Actual '${attribute.encoded}'`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
for (const [, attributeGroup] of Object.entries((_a = proofJson.requested_proof.revealed_attr_groups) !== null && _a !== void 0 ? _a : {})) {
|
|
121
|
+
for (const [attributeName, attribute] of Object.entries(attributeGroup.values)) {
|
|
122
|
+
if (!(0, utils_1.checkValidCredentialValueEncoding)(attribute.raw, attribute.encoded)) {
|
|
123
|
+
throw new core_1.AriesFrameworkError(`The encoded value for '${attributeName}' is invalid. ` +
|
|
124
|
+
`Expected '${(0, utils_1.encodeCredentialValue)(attribute.raw)}'. ` +
|
|
125
|
+
`Actual '${attribute.encoded}'`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const schemas = await this.getSchemas(agentContext, new Set(proofJson.identifiers.map((i) => i.schema_id)));
|
|
130
|
+
const credentialDefinitions = await this.getCredentialDefinitions(agentContext, new Set(proofJson.identifiers.map((i) => i.cred_def_id)));
|
|
131
|
+
const revocationRegistries = await (0, utils_1.getRevocationRegistriesForProof)(agentContext, proofJson);
|
|
132
|
+
return await verifierService.verifyProof(agentContext, {
|
|
133
|
+
proofRequest: proofRequestJson,
|
|
134
|
+
proof: proofJson,
|
|
135
|
+
schemas,
|
|
136
|
+
credentialDefinitions,
|
|
137
|
+
revocationRegistries,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
async getCredentialsForRequest(agentContext, { requestAttachment, proofFormats }) {
|
|
141
|
+
var _a;
|
|
142
|
+
const proofRequestJson = requestAttachment.getDataAsJson();
|
|
143
|
+
// Set default values
|
|
144
|
+
const { filterByNonRevocationRequirements = true } = (_a = proofFormats === null || proofFormats === void 0 ? void 0 : proofFormats.anoncreds) !== null && _a !== void 0 ? _a : {};
|
|
145
|
+
const credentialsForRequest = await this._getCredentialsForRequest(agentContext, proofRequestJson, {
|
|
146
|
+
filterByNonRevocationRequirements,
|
|
147
|
+
});
|
|
148
|
+
return credentialsForRequest;
|
|
149
|
+
}
|
|
150
|
+
async selectCredentialsForRequest(agentContext, { requestAttachment, proofFormats }) {
|
|
151
|
+
var _a;
|
|
152
|
+
const proofRequestJson = requestAttachment.getDataAsJson();
|
|
153
|
+
// Set default values
|
|
154
|
+
const { filterByNonRevocationRequirements = true } = (_a = proofFormats === null || proofFormats === void 0 ? void 0 : proofFormats.anoncreds) !== null && _a !== void 0 ? _a : {};
|
|
155
|
+
const selectedCredentials = this._selectCredentialsForRequest(agentContext, proofRequestJson, {
|
|
156
|
+
filterByNonRevocationRequirements,
|
|
157
|
+
});
|
|
158
|
+
return selectedCredentials;
|
|
159
|
+
}
|
|
160
|
+
async shouldAutoRespondToProposal(agentContext, { proposalAttachment, requestAttachment }) {
|
|
161
|
+
const proposalJson = proposalAttachment.getDataAsJson();
|
|
162
|
+
const requestJson = requestAttachment.getDataAsJson();
|
|
163
|
+
const areRequestsEqual = (0, utils_1.areAnonCredsProofRequestsEqual)(proposalJson, requestJson);
|
|
164
|
+
agentContext.config.logger.debug(`AnonCreds request and proposal are are equal: ${areRequestsEqual}`, {
|
|
165
|
+
proposalJson,
|
|
166
|
+
requestJson,
|
|
167
|
+
});
|
|
168
|
+
return areRequestsEqual;
|
|
169
|
+
}
|
|
170
|
+
async shouldAutoRespondToRequest(agentContext, { proposalAttachment, requestAttachment }) {
|
|
171
|
+
const proposalJson = proposalAttachment.getDataAsJson();
|
|
172
|
+
const requestJson = requestAttachment.getDataAsJson();
|
|
173
|
+
return (0, utils_1.areAnonCredsProofRequestsEqual)(proposalJson, requestJson);
|
|
174
|
+
}
|
|
175
|
+
async shouldAutoRespondToPresentation(
|
|
176
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
177
|
+
_agentContext,
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
179
|
+
_options) {
|
|
180
|
+
// The presentation is already verified in processPresentation, so we can just return true here.
|
|
181
|
+
// It's only an ack, so it's just that we received the presentation.
|
|
182
|
+
return true;
|
|
183
|
+
}
|
|
184
|
+
supportsFormat(formatIdentifier) {
|
|
185
|
+
const supportedFormats = [ANONCREDS_PRESENTATION_PROPOSAL, ANONCREDS_PRESENTATION_REQUEST, ANONCREDS_PRESENTATION];
|
|
186
|
+
return supportedFormats.includes(formatIdentifier);
|
|
187
|
+
}
|
|
188
|
+
async _getCredentialsForRequest(agentContext, proofRequest, options) {
|
|
189
|
+
const credentialsForProofRequest = {
|
|
190
|
+
attributes: {},
|
|
191
|
+
predicates: {},
|
|
192
|
+
};
|
|
193
|
+
for (const [referent, requestedAttribute] of Object.entries(proofRequest.requested_attributes)) {
|
|
194
|
+
const credentials = await this.getCredentialsForProofRequestReferent(agentContext, proofRequest, referent);
|
|
195
|
+
credentialsForProofRequest.attributes[referent] = (0, utils_1.sortRequestedCredentialsMatches)(await Promise.all(credentials.map(async (credential) => {
|
|
196
|
+
const { isRevoked, timestamp } = await this.getRevocationStatus(agentContext, proofRequest, requestedAttribute, credential.credentialInfo);
|
|
197
|
+
return {
|
|
198
|
+
credentialId: credential.credentialInfo.credentialId,
|
|
199
|
+
revealed: true,
|
|
200
|
+
credentialInfo: credential.credentialInfo,
|
|
201
|
+
timestamp,
|
|
202
|
+
revoked: isRevoked,
|
|
203
|
+
};
|
|
204
|
+
})));
|
|
205
|
+
// We only attach revoked state if non-revocation is requested. So if revoked is true it means
|
|
206
|
+
// the credential is not applicable to the proof request
|
|
207
|
+
if (options.filterByNonRevocationRequirements) {
|
|
208
|
+
credentialsForProofRequest.attributes[referent] = credentialsForProofRequest.attributes[referent].filter((r) => !r.revoked);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
for (const [referent, requestedPredicate] of Object.entries(proofRequest.requested_predicates)) {
|
|
212
|
+
const credentials = await this.getCredentialsForProofRequestReferent(agentContext, proofRequest, referent);
|
|
213
|
+
credentialsForProofRequest.predicates[referent] = (0, utils_1.sortRequestedCredentialsMatches)(await Promise.all(credentials.map(async (credential) => {
|
|
214
|
+
const { isRevoked, timestamp } = await this.getRevocationStatus(agentContext, proofRequest, requestedPredicate, credential.credentialInfo);
|
|
215
|
+
return {
|
|
216
|
+
credentialId: credential.credentialInfo.credentialId,
|
|
217
|
+
credentialInfo: credential.credentialInfo,
|
|
218
|
+
timestamp,
|
|
219
|
+
revoked: isRevoked,
|
|
220
|
+
};
|
|
221
|
+
})));
|
|
222
|
+
// We only attach revoked state if non-revocation is requested. So if revoked is true it means
|
|
223
|
+
// the credential is not applicable to the proof request
|
|
224
|
+
if (options.filterByNonRevocationRequirements) {
|
|
225
|
+
credentialsForProofRequest.predicates[referent] = credentialsForProofRequest.predicates[referent].filter((r) => !r.revoked);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return credentialsForProofRequest;
|
|
229
|
+
}
|
|
230
|
+
async _selectCredentialsForRequest(agentContext, proofRequest, options) {
|
|
231
|
+
const credentialsForRequest = await this._getCredentialsForRequest(agentContext, proofRequest, options);
|
|
232
|
+
const selectedCredentials = {
|
|
233
|
+
attributes: {},
|
|
234
|
+
predicates: {},
|
|
235
|
+
selfAttestedAttributes: {},
|
|
236
|
+
};
|
|
237
|
+
Object.keys(credentialsForRequest.attributes).forEach((attributeName) => {
|
|
238
|
+
const attributeArray = credentialsForRequest.attributes[attributeName];
|
|
239
|
+
if (attributeArray.length === 0) {
|
|
240
|
+
throw new core_1.AriesFrameworkError('Unable to automatically select requested attributes.');
|
|
241
|
+
}
|
|
242
|
+
selectedCredentials.attributes[attributeName] = attributeArray[0];
|
|
243
|
+
});
|
|
244
|
+
Object.keys(credentialsForRequest.predicates).forEach((attributeName) => {
|
|
245
|
+
if (credentialsForRequest.predicates[attributeName].length === 0) {
|
|
246
|
+
throw new core_1.AriesFrameworkError('Unable to automatically select requested predicates.');
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
selectedCredentials.predicates[attributeName] = credentialsForRequest.predicates[attributeName][0];
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
return selectedCredentials;
|
|
253
|
+
}
|
|
254
|
+
async getCredentialsForProofRequestReferent(agentContext, proofRequest, attributeReferent) {
|
|
255
|
+
const holderService = agentContext.dependencyManager.resolve(services_1.AnonCredsHolderServiceSymbol);
|
|
256
|
+
const credentials = await holderService.getCredentialsForProofRequest(agentContext, {
|
|
257
|
+
proofRequest,
|
|
258
|
+
attributeReferent,
|
|
259
|
+
});
|
|
260
|
+
return credentials;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Build schemas object needed to create and verify proof objects.
|
|
264
|
+
*
|
|
265
|
+
* Creates object with `{ schemaId: AnonCredsSchema }` mapping
|
|
266
|
+
*
|
|
267
|
+
* @param schemaIds List of schema ids
|
|
268
|
+
* @returns Object containing schemas for specified schema ids
|
|
269
|
+
*
|
|
270
|
+
*/
|
|
271
|
+
async getSchemas(agentContext, schemaIds) {
|
|
272
|
+
const registryService = agentContext.dependencyManager.resolve(AnonCredsRegistryService_1.AnonCredsRegistryService);
|
|
273
|
+
const schemas = {};
|
|
274
|
+
for (const schemaId of schemaIds) {
|
|
275
|
+
const schemaRegistry = registryService.getRegistryForIdentifier(agentContext, schemaId);
|
|
276
|
+
const schemaResult = await schemaRegistry.getSchema(agentContext, schemaId);
|
|
277
|
+
if (!schemaResult.schema) {
|
|
278
|
+
throw new core_1.AriesFrameworkError(`Schema not found for id ${schemaId}: ${schemaResult.resolutionMetadata.message}`);
|
|
279
|
+
}
|
|
280
|
+
schemas[schemaId] = schemaResult.schema;
|
|
281
|
+
}
|
|
282
|
+
return schemas;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Build credential definitions object needed to create and verify proof objects.
|
|
286
|
+
*
|
|
287
|
+
* Creates object with `{ credentialDefinitionId: AnonCredsCredentialDefinition }` mapping
|
|
288
|
+
*
|
|
289
|
+
* @param credentialDefinitionIds List of credential definition ids
|
|
290
|
+
* @returns Object containing credential definitions for specified credential definition ids
|
|
291
|
+
*
|
|
292
|
+
*/
|
|
293
|
+
async getCredentialDefinitions(agentContext, credentialDefinitionIds) {
|
|
294
|
+
const registryService = agentContext.dependencyManager.resolve(AnonCredsRegistryService_1.AnonCredsRegistryService);
|
|
295
|
+
const credentialDefinitions = {};
|
|
296
|
+
for (const credentialDefinitionId of credentialDefinitionIds) {
|
|
297
|
+
const credentialDefinitionRegistry = registryService.getRegistryForIdentifier(agentContext, credentialDefinitionId);
|
|
298
|
+
const credentialDefinitionResult = await credentialDefinitionRegistry.getCredentialDefinition(agentContext, credentialDefinitionId);
|
|
299
|
+
if (!credentialDefinitionResult.credentialDefinition) {
|
|
300
|
+
throw new core_1.AriesFrameworkError(`Credential definition not found for id ${credentialDefinitionId}: ${credentialDefinitionResult.resolutionMetadata.message}`);
|
|
301
|
+
}
|
|
302
|
+
credentialDefinitions[credentialDefinitionId] = credentialDefinitionResult.credentialDefinition;
|
|
303
|
+
}
|
|
304
|
+
return credentialDefinitions;
|
|
305
|
+
}
|
|
306
|
+
async getRevocationStatus(agentContext, proofRequest, requestedItem, credentialInfo) {
|
|
307
|
+
var _a, _b;
|
|
308
|
+
const requestNonRevoked = (_a = requestedItem.non_revoked) !== null && _a !== void 0 ? _a : proofRequest.non_revoked;
|
|
309
|
+
const credentialRevocationId = credentialInfo.credentialRevocationId;
|
|
310
|
+
const revocationRegistryId = credentialInfo.revocationRegistryId;
|
|
311
|
+
// If revocation interval is not present or the credential is not revocable then we
|
|
312
|
+
// don't need to fetch the revocation status
|
|
313
|
+
if (!requestNonRevoked || !credentialRevocationId || !revocationRegistryId) {
|
|
314
|
+
return { isRevoked: undefined, timestamp: undefined };
|
|
315
|
+
}
|
|
316
|
+
agentContext.config.logger.trace(`Fetching credential revocation status for credential revocation id '${credentialRevocationId}' with revocation interval with from '${requestNonRevoked.from}' and to '${requestNonRevoked.to}'`);
|
|
317
|
+
// Make sure the revocation interval follows best practices from Aries RFC 0441
|
|
318
|
+
(0, utils_1.assertBestPracticeRevocationInterval)(requestNonRevoked);
|
|
319
|
+
const registryService = agentContext.dependencyManager.resolve(AnonCredsRegistryService_1.AnonCredsRegistryService);
|
|
320
|
+
const registry = registryService.getRegistryForIdentifier(agentContext, revocationRegistryId);
|
|
321
|
+
const revocationStatusResult = await registry.getRevocationStatusList(agentContext, revocationRegistryId, (_b = requestNonRevoked.to) !== null && _b !== void 0 ? _b : (0, timestamp_1.dateToTimestamp)(new Date()));
|
|
322
|
+
if (!revocationStatusResult.revocationStatusList) {
|
|
323
|
+
throw new core_1.AriesFrameworkError(`Could not retrieve revocation status list for revocation registry ${revocationRegistryId}: ${revocationStatusResult.resolutionMetadata.message}`);
|
|
324
|
+
}
|
|
325
|
+
// Item is revoked when the value at the index is 1
|
|
326
|
+
const isRevoked = revocationStatusResult.revocationStatusList.revocationList[parseInt(credentialRevocationId)] === 1;
|
|
327
|
+
agentContext.config.logger.trace(`Credential with credential revocation index '${credentialRevocationId}' is ${isRevoked ? '' : 'not '}revoked with revocation interval with to '${requestNonRevoked.to}' & from '${requestNonRevoked.from}'`);
|
|
328
|
+
return {
|
|
329
|
+
isRevoked,
|
|
330
|
+
timestamp: revocationStatusResult.revocationStatusList.timestamp,
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Create anoncreds proof from a given proof request and requested credential object.
|
|
335
|
+
*
|
|
336
|
+
* @param proofRequest The proof request to create the proof for
|
|
337
|
+
* @param requestedCredentials The requested credentials object specifying which credentials to use for the proof
|
|
338
|
+
* @returns anoncreds proof object
|
|
339
|
+
*/
|
|
340
|
+
async createProof(agentContext, proofRequest, selectedCredentials) {
|
|
341
|
+
const holderService = agentContext.dependencyManager.resolve(services_1.AnonCredsHolderServiceSymbol);
|
|
342
|
+
const credentialObjects = await Promise.all([...Object.values(selectedCredentials.attributes), ...Object.values(selectedCredentials.predicates)].map(async (c) => { var _a; return (_a = c.credentialInfo) !== null && _a !== void 0 ? _a : holderService.getCredential(agentContext, { credentialId: c.credentialId }); }));
|
|
343
|
+
const schemas = await this.getSchemas(agentContext, new Set(credentialObjects.map((c) => c.schemaId)));
|
|
344
|
+
const credentialDefinitions = await this.getCredentialDefinitions(agentContext, new Set(credentialObjects.map((c) => c.credentialDefinitionId)));
|
|
345
|
+
// selectedCredentials are overridden with specified timestamps of the revocation status list that
|
|
346
|
+
// should be used for the selected credentials.
|
|
347
|
+
const { revocationRegistries, updatedSelectedCredentials } = await (0, utils_1.getRevocationRegistriesForRequest)(agentContext, proofRequest, selectedCredentials);
|
|
348
|
+
return await holderService.createProof(agentContext, {
|
|
349
|
+
proofRequest,
|
|
350
|
+
selectedCredentials: updatedSelectedCredentials,
|
|
351
|
+
schemas,
|
|
352
|
+
credentialDefinitions,
|
|
353
|
+
revocationRegistries,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Returns an object of type {@link Attachment} for use in credential exchange messages.
|
|
358
|
+
* It looks up the correct format identifier and encodes the data as a base64 attachment.
|
|
359
|
+
*
|
|
360
|
+
* @param data The data to include in the attach object
|
|
361
|
+
* @param id the attach id from the formats component of the message
|
|
362
|
+
*/
|
|
363
|
+
getFormatData(data, id) {
|
|
364
|
+
const attachment = new core_1.Attachment({
|
|
365
|
+
id,
|
|
366
|
+
mimeType: 'application/json',
|
|
367
|
+
data: new core_1.AttachmentData({
|
|
368
|
+
base64: core_1.JsonEncoder.toBase64(data),
|
|
369
|
+
}),
|
|
370
|
+
});
|
|
371
|
+
return attachment;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
exports.AnonCredsProofFormatService = AnonCredsProofFormatService;
|
|
375
|
+
//# sourceMappingURL=AnonCredsProofFormatService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AnonCredsProofFormatService.js","sourceRoot":"","sources":["../../src/formats/AnonCredsProofFormatService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AnonCredsAcceptOfferFormat, AnonCredsAcceptProposalFormat, AnonCredsAcceptRequestFormat, AnonCredsCredentialProposalFormat, AnonCredsOfferCredentialFormat, AnonCredsProposeCredentialFormat } from './AnonCredsCredentialFormat';
|
|
2
|
+
import type { AnonCredsCredential, AnonCredsCredentialOffer, AnonCredsCredentialRequest } from '../models';
|
|
3
|
+
import type { CredentialFormat } from '@credo-ts/core';
|
|
4
|
+
export type LegacyIndyCredentialProposalFormat = Omit<AnonCredsCredentialProposalFormat, 'schema_issuer_id' | 'issuer_id'>;
|
|
5
|
+
/**
|
|
6
|
+
* This defines the module payload for calling CredentialsApi.createProposal
|
|
7
|
+
* or CredentialsApi.negotiateOffer
|
|
8
|
+
*
|
|
9
|
+
* NOTE: This doesn't include the `issuerId` and `schemaIssuerId` properties that are present in the newer format.
|
|
10
|
+
*/
|
|
11
|
+
export type LegacyIndyProposeCredentialFormat = Omit<AnonCredsProposeCredentialFormat, 'schemaIssuerId' | 'issuerId'>;
|
|
12
|
+
export interface LegacyIndyCredentialRequest extends AnonCredsCredentialRequest {
|
|
13
|
+
prover_did: string;
|
|
14
|
+
}
|
|
15
|
+
export interface LegacyIndyCredentialFormat extends CredentialFormat {
|
|
16
|
+
formatKey: 'indy';
|
|
17
|
+
credentialRecordType: 'anoncreds';
|
|
18
|
+
credentialFormats: {
|
|
19
|
+
createProposal: LegacyIndyProposeCredentialFormat;
|
|
20
|
+
acceptProposal: AnonCredsAcceptProposalFormat;
|
|
21
|
+
createOffer: AnonCredsOfferCredentialFormat;
|
|
22
|
+
acceptOffer: AnonCredsAcceptOfferFormat;
|
|
23
|
+
createRequest: never;
|
|
24
|
+
acceptRequest: AnonCredsAcceptRequestFormat;
|
|
25
|
+
};
|
|
26
|
+
formatData: {
|
|
27
|
+
proposal: LegacyIndyCredentialProposalFormat;
|
|
28
|
+
offer: AnonCredsCredentialOffer;
|
|
29
|
+
request: LegacyIndyCredentialRequest;
|
|
30
|
+
credential: AnonCredsCredential;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegacyIndyCredentialFormat.js","sourceRoot":"","sources":["../../src/formats/LegacyIndyCredentialFormat.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { LegacyIndyCredentialFormat } from './LegacyIndyCredentialFormat';
|
|
2
|
+
import type { CredentialFormatService, AgentContext, CredentialFormatCreateProposalOptions, CredentialFormatCreateProposalReturn, CredentialFormatProcessOptions, CredentialFormatAcceptProposalOptions, CredentialFormatCreateOfferReturn, CredentialFormatCreateOfferOptions, CredentialFormatAcceptOfferOptions, CredentialFormatCreateReturn, CredentialFormatAcceptRequestOptions, CredentialFormatProcessCredentialOptions, CredentialFormatAutoRespondProposalOptions, CredentialFormatAutoRespondOfferOptions, CredentialFormatAutoRespondRequestOptions, CredentialFormatAutoRespondCredentialOptions } from '@credo-ts/core';
|
|
3
|
+
import { CredentialFormatSpec, Attachment } from '@credo-ts/core';
|
|
4
|
+
export declare class LegacyIndyCredentialFormatService implements CredentialFormatService<LegacyIndyCredentialFormat> {
|
|
5
|
+
/** formatKey is the key used when calling agent.credentials.xxx with credentialFormats.indy */
|
|
6
|
+
readonly formatKey: "indy";
|
|
7
|
+
/**
|
|
8
|
+
* credentialRecordType is the type of record that stores the credential. It is stored in the credential
|
|
9
|
+
* record binding in the credential exchange record.
|
|
10
|
+
*/
|
|
11
|
+
readonly credentialRecordType: "anoncreds";
|
|
12
|
+
/**
|
|
13
|
+
* Create a {@link AttachmentFormats} object dependent on the message type.
|
|
14
|
+
*
|
|
15
|
+
* @param options The object containing all the options for the proposed credential
|
|
16
|
+
* @returns object containing associated attachment, format and optionally the credential preview
|
|
17
|
+
*
|
|
18
|
+
*/
|
|
19
|
+
createProposal(agentContext: AgentContext, { credentialFormats, credentialRecord }: CredentialFormatCreateProposalOptions<LegacyIndyCredentialFormat>): Promise<CredentialFormatCreateProposalReturn>;
|
|
20
|
+
processProposal(agentContext: AgentContext, { attachment }: CredentialFormatProcessOptions): Promise<void>;
|
|
21
|
+
acceptProposal(agentContext: AgentContext, { attachmentId, credentialFormats, credentialRecord, proposalAttachment, }: CredentialFormatAcceptProposalOptions<LegacyIndyCredentialFormat>): Promise<CredentialFormatCreateOfferReturn>;
|
|
22
|
+
/**
|
|
23
|
+
* Create a credential attachment format for a credential request.
|
|
24
|
+
*
|
|
25
|
+
* @param options The object containing all the options for the credential offer
|
|
26
|
+
* @returns object containing associated attachment, formats and offersAttach elements
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
createOffer(agentContext: AgentContext, { credentialFormats, credentialRecord, attachmentId, }: CredentialFormatCreateOfferOptions<LegacyIndyCredentialFormat>): Promise<CredentialFormatCreateOfferReturn>;
|
|
30
|
+
processOffer(agentContext: AgentContext, { attachment, credentialRecord }: CredentialFormatProcessOptions): Promise<void>;
|
|
31
|
+
acceptOffer(agentContext: AgentContext, { credentialRecord, attachmentId, offerAttachment, credentialFormats, }: CredentialFormatAcceptOfferOptions<LegacyIndyCredentialFormat>): Promise<CredentialFormatCreateReturn>;
|
|
32
|
+
/**
|
|
33
|
+
* Starting from a request is not supported for indy credentials, this method only throws an error.
|
|
34
|
+
*/
|
|
35
|
+
createRequest(): Promise<CredentialFormatCreateReturn>;
|
|
36
|
+
/**
|
|
37
|
+
* We don't have any models to validate an indy request object, for now this method does nothing
|
|
38
|
+
*/
|
|
39
|
+
processRequest(agentContext: AgentContext, options: CredentialFormatProcessOptions): Promise<void>;
|
|
40
|
+
acceptRequest(agentContext: AgentContext, { credentialRecord, attachmentId, offerAttachment, requestAttachment, }: CredentialFormatAcceptRequestOptions<LegacyIndyCredentialFormat>): Promise<CredentialFormatCreateReturn>;
|
|
41
|
+
/**
|
|
42
|
+
* Processes an incoming credential - retrieve metadata, retrieve payload and store it in the Indy wallet
|
|
43
|
+
* @param options the issue credential message wrapped inside this object
|
|
44
|
+
* @param credentialRecord the credential exchange record for this credential
|
|
45
|
+
*/
|
|
46
|
+
processCredential(agentContext: AgentContext, { credentialRecord, attachment }: CredentialFormatProcessCredentialOptions): Promise<void>;
|
|
47
|
+
supportsFormat(format: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Gets the attachment object for a given attachmentId. We need to get out the correct attachmentId for
|
|
50
|
+
* indy and then find the corresponding attachment (if there is one)
|
|
51
|
+
* @param formats the formats object containing the attachmentId
|
|
52
|
+
* @param messageAttachments the attachments containing the payload
|
|
53
|
+
* @returns The Attachment if found or undefined
|
|
54
|
+
*
|
|
55
|
+
*/
|
|
56
|
+
getAttachment(formats: CredentialFormatSpec[], messageAttachments: Attachment[]): Attachment | undefined;
|
|
57
|
+
deleteCredentialById(agentContext: AgentContext, credentialRecordId: string): Promise<void>;
|
|
58
|
+
shouldAutoRespondToProposal(agentContext: AgentContext, { offerAttachment, proposalAttachment }: CredentialFormatAutoRespondProposalOptions): Promise<boolean>;
|
|
59
|
+
shouldAutoRespondToOffer(agentContext: AgentContext, { offerAttachment, proposalAttachment }: CredentialFormatAutoRespondOfferOptions): Promise<boolean>;
|
|
60
|
+
shouldAutoRespondToRequest(agentContext: AgentContext, { offerAttachment, requestAttachment }: CredentialFormatAutoRespondRequestOptions): Promise<boolean>;
|
|
61
|
+
shouldAutoRespondToCredential(agentContext: AgentContext, { credentialRecord, requestAttachment, credentialAttachment }: CredentialFormatAutoRespondCredentialOptions): Promise<boolean>;
|
|
62
|
+
private createIndyOffer;
|
|
63
|
+
private assertPreviewAttributesMatchSchemaAttributes;
|
|
64
|
+
/**
|
|
65
|
+
* Get linked attachments for indy format from a proposal message. This allows attachments
|
|
66
|
+
* to be copied across to old style credential records
|
|
67
|
+
*
|
|
68
|
+
* @param options ProposeCredentialOptions object containing (optionally) the linked attachments
|
|
69
|
+
* @return array of linked attachments or undefined if none present
|
|
70
|
+
*/
|
|
71
|
+
private getCredentialLinkedAttachments;
|
|
72
|
+
/**
|
|
73
|
+
* Returns an object of type {@link Attachment} for use in credential exchange messages.
|
|
74
|
+
* It looks up the correct format identifier and encodes the data as a base64 attachment.
|
|
75
|
+
*
|
|
76
|
+
* @param data The data to include in the attach object
|
|
77
|
+
* @param id the attach id from the formats component of the message
|
|
78
|
+
*/
|
|
79
|
+
getFormatData(data: unknown, id: string): Attachment;
|
|
80
|
+
}
|