@credo-ts/anoncreds 0.6.0-pr-2444-20251010162514 → 0.6.0-pr-2454-20251015095608
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/build/AnonCredsApi.d.mts +4 -4
- package/build/AnonCredsApi.d.mts.map +1 -1
- package/build/AnonCredsApi.d.ts +4 -4
- package/build/AnonCredsApi.d.ts.map +1 -1
- package/build/AnonCredsApi.js +14 -14
- package/build/AnonCredsApi.mjs +14 -14
- package/build/AnonCredsApi.mjs.map +1 -1
- package/build/AnonCredsModule.d.mts.map +1 -1
- package/build/AnonCredsModule.d.ts.map +1 -1
- package/build/AnonCredsModule.js +7 -7
- package/build/AnonCredsModule.mjs +7 -7
- package/build/AnonCredsModule.mjs.map +1 -1
- package/build/anoncreds-rs/AnonCredsDataIntegrityService.js +1 -1
- package/build/anoncreds-rs/AnonCredsDataIntegrityService.mjs +1 -1
- package/build/anoncreds-rs/AnonCredsDataIntegrityService.mjs.map +1 -1
- package/build/anoncreds-rs/AnonCredsRsHolderService.js +6 -6
- package/build/anoncreds-rs/AnonCredsRsHolderService.mjs +6 -6
- package/build/anoncreds-rs/AnonCredsRsHolderService.mjs.map +1 -1
- package/build/anoncreds-rs/AnonCredsRsIssuerService.js +3 -3
- package/build/anoncreds-rs/AnonCredsRsIssuerService.mjs +3 -3
- package/build/anoncreds-rs/AnonCredsRsIssuerService.mjs.map +1 -1
- package/build/anoncreds-rs/AnonCredsRsVerifierService.mjs.map +1 -1
- package/build/anoncreds-rs/utils.js +1 -1
- package/build/anoncreds-rs/utils.mjs +1 -1
- package/build/anoncreds-rs/utils.mjs.map +1 -1
- package/build/error/index.js +1 -1
- package/build/error/index.mjs +1 -1
- package/build/formats/AnonCredsDidCommCredentialFormatService.d.mts.map +1 -1
- package/build/formats/AnonCredsDidCommCredentialFormatService.d.ts.map +1 -1
- package/build/formats/AnonCredsDidCommCredentialFormatService.js +5 -5
- package/build/formats/AnonCredsDidCommCredentialFormatService.mjs +5 -5
- package/build/formats/AnonCredsDidCommCredentialFormatService.mjs.map +1 -1
- package/build/formats/AnonCredsDidCommProofFormat.d.mts +1 -1
- package/build/formats/AnonCredsDidCommProofFormat.d.ts +1 -1
- package/build/formats/AnonCredsDidCommProofFormatService.d.mts.map +1 -1
- package/build/formats/AnonCredsDidCommProofFormatService.d.ts.map +1 -1
- package/build/formats/AnonCredsDidCommProofFormatService.js +5 -5
- package/build/formats/AnonCredsDidCommProofFormatService.mjs +5 -5
- package/build/formats/AnonCredsDidCommProofFormatService.mjs.map +1 -1
- package/build/formats/DataIntegrityDidCommCredentialFormatService.d.mts +4 -18
- package/build/formats/DataIntegrityDidCommCredentialFormatService.d.mts.map +1 -1
- package/build/formats/DataIntegrityDidCommCredentialFormatService.d.ts +4 -18
- package/build/formats/DataIntegrityDidCommCredentialFormatService.d.ts.map +1 -1
- package/build/formats/DataIntegrityDidCommCredentialFormatService.js +16 -16
- package/build/formats/DataIntegrityDidCommCredentialFormatService.mjs +16 -16
- package/build/formats/DataIntegrityDidCommCredentialFormatService.mjs.map +1 -1
- package/build/formats/LegacyIndyDidCommCredentialFormatService.d.mts.map +1 -1
- package/build/formats/LegacyIndyDidCommCredentialFormatService.d.ts.map +1 -1
- package/build/formats/LegacyIndyDidCommCredentialFormatService.js +3 -3
- package/build/formats/LegacyIndyDidCommCredentialFormatService.mjs +3 -3
- package/build/formats/LegacyIndyDidCommCredentialFormatService.mjs.map +1 -1
- package/build/formats/LegacyIndyDidCommProofFormat.d.mts +1 -1
- package/build/formats/LegacyIndyDidCommProofFormat.d.ts +1 -1
- package/build/formats/LegacyIndyDidCommProofFormatService.d.mts.map +1 -1
- package/build/formats/LegacyIndyDidCommProofFormatService.d.ts.map +1 -1
- package/build/formats/LegacyIndyDidCommProofFormatService.js +8 -8
- package/build/formats/LegacyIndyDidCommProofFormatService.mjs +8 -8
- package/build/formats/LegacyIndyDidCommProofFormatService.mjs.map +1 -1
- package/build/formats/index.js +1 -1
- package/build/formats/index.mjs +1 -1
- package/build/index.d.mts +30 -30
- package/build/index.d.ts +30 -30
- package/build/index.js +25 -25
- package/build/index.mjs +25 -25
- package/build/models/AnonCredsCredentialProposal.js +2 -2
- package/build/models/AnonCredsCredentialProposal.mjs +1 -1
- package/build/models/AnonCredsProofRequest.js +2 -2
- package/build/models/AnonCredsProofRequest.mjs +1 -1
- package/build/models/AnonCredsProofRequest.mjs.map +1 -1
- package/build/models/AnonCredsRequestedAttribute.js +2 -2
- package/build/models/AnonCredsRequestedAttribute.mjs +1 -1
- package/build/models/AnonCredsRequestedAttribute.mjs.map +1 -1
- package/build/models/AnonCredsRequestedPredicate.js +3 -3
- package/build/models/AnonCredsRequestedPredicate.mjs +2 -2
- package/build/models/AnonCredsRequestedPredicate.mjs.map +1 -1
- package/build/models/AnonCredsRestriction.js +2 -2
- package/build/models/AnonCredsRestriction.mjs +1 -1
- package/build/models/AnonCredsRestrictionWrapper.js +2 -2
- package/build/models/AnonCredsRestrictionWrapper.mjs +1 -1
- package/build/models/exchange.mjs.map +1 -1
- package/build/models/index.js +1 -1
- package/build/models/index.mjs +1 -1
- package/build/protocols/credentials/v1/DidCommCredentialV1Protocol.d.mts +1 -1
- package/build/protocols/credentials/v1/DidCommCredentialV1Protocol.d.mts.map +1 -1
- package/build/protocols/credentials/v1/DidCommCredentialV1Protocol.d.ts +1 -1
- package/build/protocols/credentials/v1/DidCommCredentialV1Protocol.d.ts.map +1 -1
- package/build/protocols/credentials/v1/DidCommCredentialV1Protocol.js +4 -4
- package/build/protocols/credentials/v1/DidCommCredentialV1Protocol.mjs +4 -4
- package/build/protocols/credentials/v1/DidCommCredentialV1Protocol.mjs.map +1 -1
- package/build/protocols/credentials/v1/handlers/DidCommIssueCredentialV1Handler.mjs.map +1 -1
- package/build/protocols/credentials/v1/handlers/DidCommOfferCredentialV1Handler.mjs.map +1 -1
- package/build/protocols/credentials/v1/handlers/DidCommProposeCredentialV1Handler.mjs.map +1 -1
- package/build/protocols/credentials/v1/handlers/DidCommRequestCredentialV1Handler.mjs.map +1 -1
- package/build/protocols/credentials/v1/handlers/index.js +1 -1
- package/build/protocols/credentials/v1/handlers/index.mjs +1 -1
- package/build/protocols/credentials/v1/index.js +2 -2
- package/build/protocols/credentials/v1/index.mjs +2 -2
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1AckMessage.d.mts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1AckMessage.d.ts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1Preview.d.mts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1Preview.d.mts.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1Preview.d.ts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1Preview.d.ts.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1Preview.js +4 -4
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1Preview.mjs +2 -2
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1Preview.mjs.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1ProblemReportMessage.d.mts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommCredentialV1ProblemReportMessage.d.ts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommIssueCredentialV1Message.d.mts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommIssueCredentialV1Message.d.mts.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommIssueCredentialV1Message.d.ts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommIssueCredentialV1Message.d.ts.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommIssueCredentialV1Message.js +4 -4
- package/build/protocols/credentials/v1/messages/DidCommIssueCredentialV1Message.mjs +2 -2
- package/build/protocols/credentials/v1/messages/DidCommIssueCredentialV1Message.mjs.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommOfferCredentialV1Message.d.mts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommOfferCredentialV1Message.d.mts.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommOfferCredentialV1Message.d.ts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommOfferCredentialV1Message.d.ts.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommOfferCredentialV1Message.js +4 -4
- package/build/protocols/credentials/v1/messages/DidCommOfferCredentialV1Message.mjs +2 -2
- package/build/protocols/credentials/v1/messages/DidCommOfferCredentialV1Message.mjs.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommProposeCredentialV1Message.d.mts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommProposeCredentialV1Message.d.mts.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommProposeCredentialV1Message.d.ts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommProposeCredentialV1Message.js +4 -4
- package/build/protocols/credentials/v1/messages/DidCommProposeCredentialV1Message.mjs +2 -2
- package/build/protocols/credentials/v1/messages/DidCommRequestCredentialV1Message.d.mts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommRequestCredentialV1Message.d.mts.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommRequestCredentialV1Message.d.ts +2 -2
- package/build/protocols/credentials/v1/messages/DidCommRequestCredentialV1Message.d.ts.map +1 -1
- package/build/protocols/credentials/v1/messages/DidCommRequestCredentialV1Message.js +4 -4
- package/build/protocols/credentials/v1/messages/DidCommRequestCredentialV1Message.mjs +2 -2
- package/build/protocols/credentials/v1/messages/DidCommRequestCredentialV1Message.mjs.map +1 -1
- package/build/protocols/credentials/v1/messages/index.js +2 -2
- package/build/protocols/credentials/v1/messages/index.mjs +2 -2
- package/build/protocols/index.js +5 -5
- package/build/protocols/index.mjs +5 -5
- package/build/protocols/proofs/v1/DidCommProofV1Protocol.d.mts +2 -2
- package/build/protocols/proofs/v1/DidCommProofV1Protocol.d.mts.map +1 -1
- package/build/protocols/proofs/v1/DidCommProofV1Protocol.d.ts +2 -2
- package/build/protocols/proofs/v1/DidCommProofV1Protocol.d.ts.map +1 -1
- package/build/protocols/proofs/v1/DidCommProofV1Protocol.js +6 -6
- package/build/protocols/proofs/v1/DidCommProofV1Protocol.mjs +6 -6
- package/build/protocols/proofs/v1/DidCommProofV1Protocol.mjs.map +1 -1
- package/build/protocols/proofs/v1/handlers/DidCommPresentationV1Handler.mjs.map +1 -1
- package/build/protocols/proofs/v1/handlers/DidCommProposePresentationV1Handler.mjs.map +1 -1
- package/build/protocols/proofs/v1/handlers/DidCommRequestPresentationV1Handler.mjs.map +1 -1
- package/build/protocols/proofs/v1/handlers/index.js +1 -1
- package/build/protocols/proofs/v1/handlers/index.mjs +1 -1
- package/build/protocols/proofs/v1/index.js +4 -4
- package/build/protocols/proofs/v1/index.mjs +4 -4
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1AckMessage.d.mts +2 -2
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1AckMessage.d.ts +2 -2
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1Message.d.mts +2 -2
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1Message.d.mts.map +1 -1
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1Message.d.ts +2 -2
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1Message.d.ts.map +1 -1
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1Message.js +4 -4
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1Message.mjs +2 -2
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1Message.mjs.map +1 -1
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1ProblemReportMessage.d.mts +2 -2
- package/build/protocols/proofs/v1/messages/DidCommPresentationV1ProblemReportMessage.d.mts.map +1 -1
- package/build/protocols/proofs/v1/messages/DidCommProposePresentationV1Message.d.mts +2 -2
- package/build/protocols/proofs/v1/messages/DidCommProposePresentationV1Message.d.mts.map +1 -1
- package/build/protocols/proofs/v1/messages/DidCommProposePresentationV1Message.d.ts +2 -2
- package/build/protocols/proofs/v1/messages/DidCommProposePresentationV1Message.d.ts.map +1 -1
- package/build/protocols/proofs/v1/messages/DidCommProposePresentationV1Message.js +4 -4
- package/build/protocols/proofs/v1/messages/DidCommProposePresentationV1Message.mjs +2 -2
- package/build/protocols/proofs/v1/messages/DidCommRequestPresentationV1Message.d.mts +2 -2
- package/build/protocols/proofs/v1/messages/DidCommRequestPresentationV1Message.d.mts.map +1 -1
- package/build/protocols/proofs/v1/messages/DidCommRequestPresentationV1Message.d.ts +2 -2
- package/build/protocols/proofs/v1/messages/DidCommRequestPresentationV1Message.d.ts.map +1 -1
- package/build/protocols/proofs/v1/messages/DidCommRequestPresentationV1Message.js +4 -4
- package/build/protocols/proofs/v1/messages/DidCommRequestPresentationV1Message.mjs +2 -2
- package/build/protocols/proofs/v1/messages/DidCommRequestPresentationV1Message.mjs.map +1 -1
- package/build/protocols/proofs/v1/messages/index.js +3 -3
- package/build/protocols/proofs/v1/messages/index.mjs +3 -3
- package/build/protocols/proofs/v1/models/DidCommPresentationV1Preview.d.mts +1 -1
- package/build/protocols/proofs/v1/models/DidCommPresentationV1Preview.d.mts.map +1 -1
- package/build/protocols/proofs/v1/models/DidCommPresentationV1Preview.d.ts +2 -2
- package/build/protocols/proofs/v1/models/DidCommPresentationV1Preview.d.ts.map +1 -1
- package/build/protocols/proofs/v1/models/DidCommPresentationV1Preview.js +6 -6
- package/build/protocols/proofs/v1/models/DidCommPresentationV1Preview.mjs +4 -4
- package/build/protocols/proofs/v1/models/DidCommPresentationV1Preview.mjs.map +1 -1
- package/build/repository/AnonCredsCredentialDefinitionPrivateRepository.js +2 -2
- package/build/repository/AnonCredsCredentialDefinitionPrivateRepository.mjs +2 -2
- package/build/repository/AnonCredsCredentialDefinitionPrivateRepository.mjs.map +1 -1
- package/build/repository/AnonCredsCredentialDefinitionRecord.d.mts.map +1 -1
- package/build/repository/AnonCredsCredentialDefinitionRecord.d.ts.map +1 -1
- package/build/repository/AnonCredsCredentialDefinitionRecord.js +1 -1
- package/build/repository/AnonCredsCredentialDefinitionRecord.mjs +1 -1
- package/build/repository/AnonCredsCredentialDefinitionRecord.mjs.map +1 -1
- package/build/repository/AnonCredsCredentialDefinitionRepository.js +1 -1
- package/build/repository/AnonCredsCredentialDefinitionRepository.mjs +1 -1
- package/build/repository/AnonCredsCredentialDefinitionRepository.mjs.map +1 -1
- package/build/repository/AnonCredsCredentialRecord.d.mts.map +1 -1
- package/build/repository/AnonCredsCredentialRecord.d.ts.map +1 -1
- package/build/repository/AnonCredsCredentialRecord.mjs.map +1 -1
- package/build/repository/AnonCredsCredentialRepository.js +1 -1
- package/build/repository/AnonCredsCredentialRepository.mjs +1 -1
- package/build/repository/AnonCredsCredentialRepository.mjs.map +1 -1
- package/build/repository/AnonCredsKeyCorrectnessProofRepository.js +1 -1
- package/build/repository/AnonCredsKeyCorrectnessProofRepository.mjs +1 -1
- package/build/repository/AnonCredsKeyCorrectnessProofRepository.mjs.map +1 -1
- package/build/repository/AnonCredsLinkSecretRepository.js +1 -1
- package/build/repository/AnonCredsLinkSecretRepository.mjs +1 -1
- package/build/repository/AnonCredsLinkSecretRepository.mjs.map +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.d.mts.map +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.d.ts.map +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.js +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.mjs +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.mjs.map +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionRecord.d.mts.map +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionRecord.d.ts.map +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionRecord.mjs.map +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionRepository.js +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionRepository.mjs +1 -1
- package/build/repository/AnonCredsRevocationRegistryDefinitionRepository.mjs.map +1 -1
- package/build/repository/AnonCredsSchemaRecord.d.mts.map +1 -1
- package/build/repository/AnonCredsSchemaRecord.d.ts.map +1 -1
- package/build/repository/AnonCredsSchemaRecord.js +1 -1
- package/build/repository/AnonCredsSchemaRecord.mjs +1 -1
- package/build/repository/AnonCredsSchemaRecord.mjs.map +1 -1
- package/build/repository/AnonCredsSchemaRepository.js +1 -1
- package/build/repository/AnonCredsSchemaRepository.mjs +1 -1
- package/build/repository/AnonCredsSchemaRepository.mjs.map +1 -1
- package/build/repository/index.js +6 -6
- package/build/repository/index.mjs +6 -6
- package/build/services/AnonCredsHolderService.d.mts +1 -1
- package/build/services/AnonCredsHolderService.d.ts +1 -1
- package/build/services/AnonCredsHolderServiceOptions.d.mts +1 -1
- package/build/services/AnonCredsHolderServiceOptions.d.ts +1 -1
- package/build/services/index.js +3 -3
- package/build/services/index.mjs +3 -3
- package/build/services/registry/AnonCredsRegistryService.d.mts.map +1 -1
- package/build/services/registry/AnonCredsRegistryService.d.ts.map +1 -1
- package/build/services/registry/AnonCredsRegistryService.js +1 -1
- package/build/services/registry/AnonCredsRegistryService.mjs +1 -1
- package/build/services/registry/AnonCredsRegistryService.mjs.map +1 -1
- package/build/services/tails/BasicTailsFileService.d.mts.map +1 -1
- package/build/services/tails/BasicTailsFileService.d.ts.map +1 -1
- package/build/services/tails/BasicTailsFileService.mjs.map +1 -1
- package/build/updates/0.3.1-0.4/credentialDefinition.js +1 -1
- package/build/updates/0.3.1-0.4/credentialDefinition.mjs +1 -1
- package/build/updates/0.3.1-0.4/credentialDefinition.mjs.map +1 -1
- package/build/updates/0.4-0.5/anonCredsCredentialRecord.js +3 -3
- package/build/updates/0.4-0.5/anonCredsCredentialRecord.mjs +3 -3
- package/build/updates/0.4-0.5/anonCredsCredentialRecord.mjs.map +1 -1
- package/build/utils/anonCredsObjects.d.mts.map +1 -1
- package/build/utils/anonCredsObjects.d.ts.map +1 -1
- package/build/utils/anonCredsObjects.mjs.map +1 -1
- package/build/utils/areRequestsEqual.mjs.map +1 -1
- package/build/utils/bytesToBigint.mjs.map +1 -1
- package/build/utils/createRequestFromPreview.mjs.map +1 -1
- package/build/utils/credential.d.mts.map +1 -1
- package/build/utils/credential.d.ts.map +1 -1
- package/build/utils/credential.mjs.map +1 -1
- package/build/utils/getCredentialsForAnonCredsRequest.js +3 -3
- package/build/utils/getCredentialsForAnonCredsRequest.mjs +3 -3
- package/build/utils/getCredentialsForAnonCredsRequest.mjs.map +1 -1
- package/build/utils/getRevocationRegistries.mjs.map +1 -1
- package/build/utils/hasDuplicateGroupNames.mjs.map +1 -1
- package/build/utils/index.js +9 -9
- package/build/utils/index.mjs +9 -9
- package/build/utils/indyIdentifiers.d.mts.map +1 -1
- package/build/utils/indyIdentifiers.d.ts.map +1 -1
- package/build/utils/indyIdentifiers.mjs.map +1 -1
- package/build/utils/isMap.mjs.map +1 -1
- package/build/utils/revocationInterval.d.mts.map +1 -1
- package/build/utils/revocationInterval.d.ts.map +1 -1
- package/build/utils/revocationInterval.mjs.map +1 -1
- package/build/utils/w3cAnonCredsUtils.d.mts.map +1 -1
- package/build/utils/w3cAnonCredsUtils.d.ts.map +1 -1
- package/build/utils/w3cAnonCredsUtils.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnonCredsDataIntegrityService.mjs","names":["AnonCredsDataIntegrityService","credentialsProve: AnonCredsCredentialProve[]","credentialsWithMetadata: CredentialWithRevocationMetadata[]","anonCredsProofRequest: AnonCredsProofRequest","descriptor: InputDescriptorV1 | InputDescriptorV2 | undefined","descriptor","proof","result: { value: unknown; path: PathComponent[] }[]","predicates: {\n predicateType: AnonCredsRequestedPredicate['p_type']\n predicateValue: AnonCredsRequestedPredicate['p_value']\n }[]","supportedJsonSchemaNumericRangeProperties: Record<string, AnonCredsRequestedPredicate['p_type']>","linkSecretId","createPresentationOptions: CreateW3cPresentationOptions"],"sources":["../../src/anoncreds-rs/AnonCredsDataIntegrityService.ts"],"sourcesContent":["import type {\n AgentContext,\n AnoncredsDataIntegrityVerifyPresentation,\n DifPresentationExchangeDefinition,\n DifPresentationExchangeSubmission,\n IAnonCredsDataIntegrityService,\n W3cCredentialRecord,\n W3cJsonLdVerifiableCredential,\n} from '@credo-ts/core'\nimport type { Descriptor, FieldV2, InputDescriptorV1, InputDescriptorV2 } from '@sphereon/pex-models'\nimport type { AnonCredsProofRequest, AnonCredsRequestedPredicate } from '../models'\nimport type { CredentialWithRevocationMetadata } from '../models/utils'\nimport type { AnonCredsCredentialProve, AnonCredsHolderService, CreateW3cPresentationOptions } from '../services'\nimport type { AnonCredsRsVerifierService } from './AnonCredsRsVerifierService'\n\nimport { JSONPath } from '@astronautlabs/jsonpath'\nimport {\n ANONCREDS_DATA_INTEGRITY_CRYPTOSUITE,\n ClaimFormat,\n CredoError,\n Hasher,\n JsonTransformer,\n TypedArrayEncoder,\n deepEquality,\n injectable,\n} from '@credo-ts/core'\n\nimport { AnonCredsHolderServiceSymbol, AnonCredsVerifierServiceSymbol } from '../services'\nimport { fetchCredentialDefinitions, fetchSchemas } from '../utils/anonCredsObjects'\nimport { bytesToBigint } from '../utils/bytesToBigint'\nimport { assertLinkSecretsMatch } from '../utils/linkSecret'\nimport { getAnonCredsTagsFromRecord } from '../utils/w3cAnonCredsUtils'\n\nimport { getW3cAnonCredsCredentialMetadata } from './utils'\n\nexport type PathComponent = string | number\n\n@injectable()\nexport class AnonCredsDataIntegrityService implements IAnonCredsDataIntegrityService {\n private getDataIntegrityProof(credential: W3cJsonLdVerifiableCredential) {\n const cryptosuite = ANONCREDS_DATA_INTEGRITY_CRYPTOSUITE\n if (Array.isArray(credential.proof)) {\n const proof = credential.proof.find(\n (proof) => proof.type === 'DataIntegrityProof' && 'cryptosuite' in proof && proof.cryptosuite === cryptosuite\n )\n if (!proof) throw new CredoError(`Could not find ${ANONCREDS_DATA_INTEGRITY_CRYPTOSUITE} proof`)\n return proof\n }\n\n if (\n credential.proof.type !== 'DataIntegrityProof' ||\n !('cryptosuite' in credential.proof && credential.proof.cryptosuite === cryptosuite)\n ) {\n throw new CredoError(`Could not find ${ANONCREDS_DATA_INTEGRITY_CRYPTOSUITE} proof`)\n }\n\n return credential.proof\n }\n private extractPathNodes(obj: unknown, paths: string[]): { value: unknown; path: PathComponent[] }[] {\n let result: { value: unknown; path: PathComponent[] }[] = []\n if (paths) {\n for (const path of paths) {\n result = JSONPath.nodes(obj, path)\n if (result.length) break\n }\n }\n return result\n }\n\n private async getCredentialMetadataForDescriptor(\n _agentContext: AgentContext,\n descriptorMapObject: Descriptor,\n selectedCredentials: W3cJsonLdVerifiableCredential[]\n ) {\n const credentialExtractionResult = this.extractPathNodes({ verifiableCredential: selectedCredentials }, [\n descriptorMapObject.path,\n ])\n\n if (credentialExtractionResult.length === 0 || credentialExtractionResult.length > 1) {\n throw new Error('Could not extract credential from presentation submission')\n }\n\n const w3cJsonLdVerifiableCredential = credentialExtractionResult[0].value as W3cJsonLdVerifiableCredential\n const w3cJsonLdVerifiableCredentialJson = JsonTransformer.toJSON(w3cJsonLdVerifiableCredential)\n\n const entryIndex = selectedCredentials.findIndex((credential) =>\n deepEquality(JsonTransformer.toJSON(credential), w3cJsonLdVerifiableCredentialJson)\n )\n if (entryIndex === -1) throw new CredoError('Could not find selected credential')\n\n return {\n entryIndex,\n credential: selectedCredentials[entryIndex],\n ...getW3cAnonCredsCredentialMetadata(w3cJsonLdVerifiableCredential),\n }\n }\n\n private descriptorRequiresRevocationStatus(descriptor: InputDescriptorV1 | InputDescriptorV2) {\n const statuses = descriptor.constraints?.statuses\n if (!statuses) return false\n if (\n statuses?.active?.directive &&\n (statuses.active.directive === 'allowed' || statuses.active.directive === 'required')\n ) {\n return true\n }\n throw new CredoError('Unsupported status directive')\n }\n\n private getPredicateTypeAndValues(predicateFilter: NonNullable<FieldV2['filter']>) {\n const predicates: {\n predicateType: AnonCredsRequestedPredicate['p_type']\n predicateValue: AnonCredsRequestedPredicate['p_value']\n }[] = []\n\n const supportedJsonSchemaNumericRangeProperties: Record<string, AnonCredsRequestedPredicate['p_type']> = {\n exclusiveMinimum: '>',\n exclusiveMaximum: '<',\n minimum: '>=',\n maximum: '<=',\n }\n\n for (const [key, value] of Object.entries(predicateFilter)) {\n if (key === 'type') continue\n\n const predicateType = supportedJsonSchemaNumericRangeProperties[key]\n if (!predicateType) throw new CredoError(`Unsupported predicate filter property '${key}'`)\n predicates.push({\n predicateType,\n predicateValue: value,\n })\n }\n\n return predicates\n }\n\n private getClaimNameForField(field: FieldV2) {\n if (!field.path) throw new CredoError('Field path is required')\n // fixme: could the path start otherwise?\n const baseClaimPath = '$.credentialSubject.'\n const claimPaths = field.path.filter((path) => path.startsWith(baseClaimPath))\n if (claimPaths.length === 0) return undefined\n\n // FIXME: we should iterate over all attributes of the schema here and check if the path is valid\n // see https://identity.foundation/presentation-exchange/#presentation-definition\n const claimNames = claimPaths.map((path) => path.slice(baseClaimPath.length))\n const propertyName = claimNames[0]\n\n return propertyName\n }\n\n public createAnonCredsProofRequestAndMetadata = async (\n agentContext: AgentContext,\n presentationDefinition: DifPresentationExchangeDefinition,\n presentationSubmission: DifPresentationExchangeSubmission,\n credentials: W3cJsonLdVerifiableCredential[],\n challenge: string\n ) => {\n const credentialsProve: AnonCredsCredentialProve[] = []\n const schemaIds = new Set<string>()\n const credentialDefinitionIds = new Set<string>()\n const credentialsWithMetadata: CredentialWithRevocationMetadata[] = []\n\n const hash = Hasher.hash(TypedArrayEncoder.fromString(challenge), 'sha-256')\n const nonce = bytesToBigint(hash).toString().slice(0, 20)\n\n const anonCredsProofRequest: AnonCredsProofRequest = {\n version: '1.0',\n name: presentationDefinition.name ?? 'Proof request',\n nonce,\n requested_attributes: {},\n requested_predicates: {},\n }\n\n const nonRevoked = Math.floor(Date.now() / 1000)\n const nonRevokedInterval = { from: nonRevoked, to: nonRevoked }\n\n for (const descriptorMapObject of presentationSubmission.descriptor_map) {\n const descriptor: InputDescriptorV1 | InputDescriptorV2 | undefined = (\n presentationDefinition.input_descriptors as InputDescriptorV2[]\n ).find((descriptor) => descriptor.id === descriptorMapObject.id)\n\n if (!descriptor) {\n throw new Error(`Descriptor with id ${descriptorMapObject.id} not found in presentation definition`)\n }\n\n const referent = descriptorMapObject.id\n const attributeReferent = `${referent}_attribute`\n const predicateReferentBase = `${referent}_predicate`\n let predicateReferentIndex = 0\n\n const fields = descriptor.constraints?.fields\n if (!fields) throw new CredoError('Unclear mapping of constraint with no fields.')\n\n const { entryIndex, schemaId, credentialDefinitionId, revocationRegistryId, credential } =\n await this.getCredentialMetadataForDescriptor(agentContext, descriptorMapObject, credentials)\n\n schemaIds.add(schemaId)\n credentialDefinitionIds.add(credentialDefinitionId)\n\n const requiresRevocationStatus = this.descriptorRequiresRevocationStatus(descriptor)\n if (requiresRevocationStatus && !revocationRegistryId) {\n throw new CredoError('Selected credentials must be revocable but are not')\n }\n\n credentialsWithMetadata.push({\n credential,\n nonRevoked: requiresRevocationStatus ? nonRevokedInterval : undefined,\n })\n\n for (const field of fields) {\n const propertyName = this.getClaimNameForField(field)\n if (!propertyName) continue\n\n if (field.predicate) {\n if (!field.filter) throw new CredoError('Missing required predicate filter property.')\n const predicateTypeAndValues = this.getPredicateTypeAndValues(field.filter)\n for (const { predicateType, predicateValue } of predicateTypeAndValues) {\n const predicateReferent = `${predicateReferentBase}_${predicateReferentIndex++}`\n anonCredsProofRequest.requested_predicates[predicateReferent] = {\n name: propertyName,\n p_type: predicateType,\n p_value: predicateValue,\n restrictions: [{ cred_def_id: credentialDefinitionId }],\n non_revoked: requiresRevocationStatus ? nonRevokedInterval : undefined,\n }\n\n credentialsProve.push({ entryIndex, referent: predicateReferent, isPredicate: true, reveal: true })\n }\n } else {\n if (!anonCredsProofRequest.requested_attributes[attributeReferent]) {\n anonCredsProofRequest.requested_attributes[attributeReferent] = {\n names: [propertyName],\n restrictions: [{ cred_def_id: credentialDefinitionId }],\n non_revoked: requiresRevocationStatus ? nonRevokedInterval : undefined,\n }\n } else {\n const names = anonCredsProofRequest.requested_attributes[attributeReferent].names ?? []\n anonCredsProofRequest.requested_attributes[attributeReferent].names = [...names, propertyName]\n }\n\n credentialsProve.push({ entryIndex, referent: attributeReferent, isPredicate: false, reveal: true })\n }\n }\n }\n\n return { anonCredsProofRequest, credentialsWithMetadata, credentialsProve, schemaIds, credentialDefinitionIds }\n }\n\n public async createPresentation(\n agentContext: AgentContext,\n options: {\n presentationDefinition: DifPresentationExchangeDefinition\n presentationSubmission: DifPresentationExchangeSubmission\n selectedCredentialRecords: W3cCredentialRecord[]\n challenge: string\n }\n ) {\n const { presentationDefinition, presentationSubmission, selectedCredentialRecords, challenge } = options\n\n const linkSecrets = selectedCredentialRecords\n .map((record) => getAnonCredsTagsFromRecord(record)?.anonCredsLinkSecretId)\n .filter((linkSecretId): linkSecretId is string => linkSecretId !== undefined)\n\n const linkSecretId = assertLinkSecretsMatch(agentContext, linkSecrets)\n\n const { anonCredsProofRequest, credentialDefinitionIds, schemaIds, credentialsProve, credentialsWithMetadata } =\n await this.createAnonCredsProofRequestAndMetadata(\n agentContext,\n presentationDefinition,\n presentationSubmission,\n selectedCredentialRecords.map((record) => record.credential) as W3cJsonLdVerifiableCredential[],\n challenge\n )\n\n const createPresentationOptions: CreateW3cPresentationOptions = {\n linkSecretId,\n proofRequest: anonCredsProofRequest,\n credentialsProve,\n credentialsWithRevocationMetadata: credentialsWithMetadata,\n schemas: await fetchSchemas(agentContext, schemaIds),\n credentialDefinitions: await fetchCredentialDefinitions(agentContext, credentialDefinitionIds),\n }\n\n const anonCredsHolderService =\n agentContext.dependencyManager.resolve<AnonCredsHolderService>(AnonCredsHolderServiceSymbol)\n const w3cPresentation = await anonCredsHolderService.createW3cPresentation(agentContext, createPresentationOptions)\n return w3cPresentation\n }\n\n public async verifyPresentation(agentContext: AgentContext, options: AnoncredsDataIntegrityVerifyPresentation) {\n const { presentation, presentationDefinition, presentationSubmission, challenge } = options\n\n const credentialDefinitionIds = new Set<string>()\n\n const verifiableCredentials = Array.isArray(presentation.verifiableCredential)\n ? presentation.verifiableCredential\n : [presentation.verifiableCredential]\n\n for (const verifiableCredential of verifiableCredentials) {\n if (verifiableCredential.claimFormat === ClaimFormat.LdpVc) {\n const proof = this.getDataIntegrityProof(verifiableCredential)\n credentialDefinitionIds.add(proof.verificationMethod)\n } else {\n throw new CredoError('Unsupported credential type')\n }\n }\n\n const { anonCredsProofRequest, credentialsWithMetadata } = await this.createAnonCredsProofRequestAndMetadata(\n agentContext,\n presentationDefinition,\n presentationSubmission,\n verifiableCredentials as W3cJsonLdVerifiableCredential[],\n challenge\n )\n\n const credentialDefinitions = await fetchCredentialDefinitions(agentContext, credentialDefinitionIds)\n const schemaIds = new Set(Object.values(credentialDefinitions).map((cd) => cd.schemaId))\n const schemas = await fetchSchemas(agentContext, schemaIds)\n\n const anonCredsVerifierService =\n agentContext.dependencyManager.resolve<AnonCredsRsVerifierService>(AnonCredsVerifierServiceSymbol)\n\n return await anonCredsVerifierService.verifyW3cPresentation(agentContext, {\n credentialsWithRevocationMetadata: credentialsWithMetadata,\n presentation,\n proofRequest: anonCredsProofRequest,\n schemas,\n credentialDefinitions,\n })\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AnonCredsDataIntegrityService.mjs","names":["AnonCredsDataIntegrityService","credentialsProve: AnonCredsCredentialProve[]","credentialsWithMetadata: CredentialWithRevocationMetadata[]","anonCredsProofRequest: AnonCredsProofRequest","descriptor: InputDescriptorV1 | InputDescriptorV2 | undefined","descriptor","proof","result: { value: unknown; path: PathComponent[] }[]","predicates: {\n predicateType: AnonCredsRequestedPredicate['p_type']\n predicateValue: AnonCredsRequestedPredicate['p_value']\n }[]","supportedJsonSchemaNumericRangeProperties: Record<string, AnonCredsRequestedPredicate['p_type']>","linkSecretId","createPresentationOptions: CreateW3cPresentationOptions"],"sources":["../../src/anoncreds-rs/AnonCredsDataIntegrityService.ts"],"sourcesContent":["import { JSONPath } from '@astronautlabs/jsonpath'\nimport type {\n AgentContext,\n AnoncredsDataIntegrityVerifyPresentation,\n DifPresentationExchangeDefinition,\n DifPresentationExchangeSubmission,\n IAnonCredsDataIntegrityService,\n W3cCredentialRecord,\n W3cJsonLdVerifiableCredential,\n} from '@credo-ts/core'\nimport {\n ANONCREDS_DATA_INTEGRITY_CRYPTOSUITE,\n ClaimFormat,\n CredoError,\n deepEquality,\n Hasher,\n injectable,\n JsonTransformer,\n TypedArrayEncoder,\n} from '@credo-ts/core'\nimport type { Descriptor, FieldV2, InputDescriptorV1, InputDescriptorV2 } from '@sphereon/pex-models'\nimport type { AnonCredsProofRequest, AnonCredsRequestedPredicate } from '../models'\nimport type { CredentialWithRevocationMetadata } from '../models/utils'\nimport type { AnonCredsCredentialProve, AnonCredsHolderService, CreateW3cPresentationOptions } from '../services'\nimport { AnonCredsHolderServiceSymbol, AnonCredsVerifierServiceSymbol } from '../services'\nimport { fetchCredentialDefinitions, fetchSchemas } from '../utils/anonCredsObjects'\nimport { bytesToBigint } from '../utils/bytesToBigint'\nimport { assertLinkSecretsMatch } from '../utils/linkSecret'\nimport { getAnonCredsTagsFromRecord } from '../utils/w3cAnonCredsUtils'\nimport type { AnonCredsRsVerifierService } from './AnonCredsRsVerifierService'\n\nimport { getW3cAnonCredsCredentialMetadata } from './utils'\n\nexport type PathComponent = string | number\n\n@injectable()\nexport class AnonCredsDataIntegrityService implements IAnonCredsDataIntegrityService {\n private getDataIntegrityProof(credential: W3cJsonLdVerifiableCredential) {\n const cryptosuite = ANONCREDS_DATA_INTEGRITY_CRYPTOSUITE\n if (Array.isArray(credential.proof)) {\n const proof = credential.proof.find(\n (proof) => proof.type === 'DataIntegrityProof' && 'cryptosuite' in proof && proof.cryptosuite === cryptosuite\n )\n if (!proof) throw new CredoError(`Could not find ${ANONCREDS_DATA_INTEGRITY_CRYPTOSUITE} proof`)\n return proof\n }\n\n if (\n credential.proof.type !== 'DataIntegrityProof' ||\n !('cryptosuite' in credential.proof && credential.proof.cryptosuite === cryptosuite)\n ) {\n throw new CredoError(`Could not find ${ANONCREDS_DATA_INTEGRITY_CRYPTOSUITE} proof`)\n }\n\n return credential.proof\n }\n private extractPathNodes(obj: unknown, paths: string[]): { value: unknown; path: PathComponent[] }[] {\n let result: { value: unknown; path: PathComponent[] }[] = []\n if (paths) {\n for (const path of paths) {\n result = JSONPath.nodes(obj, path)\n if (result.length) break\n }\n }\n return result\n }\n\n private async getCredentialMetadataForDescriptor(\n _agentContext: AgentContext,\n descriptorMapObject: Descriptor,\n selectedCredentials: W3cJsonLdVerifiableCredential[]\n ) {\n const credentialExtractionResult = this.extractPathNodes({ verifiableCredential: selectedCredentials }, [\n descriptorMapObject.path,\n ])\n\n if (credentialExtractionResult.length === 0 || credentialExtractionResult.length > 1) {\n throw new Error('Could not extract credential from presentation submission')\n }\n\n const w3cJsonLdVerifiableCredential = credentialExtractionResult[0].value as W3cJsonLdVerifiableCredential\n const w3cJsonLdVerifiableCredentialJson = JsonTransformer.toJSON(w3cJsonLdVerifiableCredential)\n\n const entryIndex = selectedCredentials.findIndex((credential) =>\n deepEquality(JsonTransformer.toJSON(credential), w3cJsonLdVerifiableCredentialJson)\n )\n if (entryIndex === -1) throw new CredoError('Could not find selected credential')\n\n return {\n entryIndex,\n credential: selectedCredentials[entryIndex],\n ...getW3cAnonCredsCredentialMetadata(w3cJsonLdVerifiableCredential),\n }\n }\n\n private descriptorRequiresRevocationStatus(descriptor: InputDescriptorV1 | InputDescriptorV2) {\n const statuses = descriptor.constraints?.statuses\n if (!statuses) return false\n if (\n statuses?.active?.directive &&\n (statuses.active.directive === 'allowed' || statuses.active.directive === 'required')\n ) {\n return true\n }\n throw new CredoError('Unsupported status directive')\n }\n\n private getPredicateTypeAndValues(predicateFilter: NonNullable<FieldV2['filter']>) {\n const predicates: {\n predicateType: AnonCredsRequestedPredicate['p_type']\n predicateValue: AnonCredsRequestedPredicate['p_value']\n }[] = []\n\n const supportedJsonSchemaNumericRangeProperties: Record<string, AnonCredsRequestedPredicate['p_type']> = {\n exclusiveMinimum: '>',\n exclusiveMaximum: '<',\n minimum: '>=',\n maximum: '<=',\n }\n\n for (const [key, value] of Object.entries(predicateFilter)) {\n if (key === 'type') continue\n\n const predicateType = supportedJsonSchemaNumericRangeProperties[key]\n if (!predicateType) throw new CredoError(`Unsupported predicate filter property '${key}'`)\n predicates.push({\n predicateType,\n predicateValue: value,\n })\n }\n\n return predicates\n }\n\n private getClaimNameForField(field: FieldV2) {\n if (!field.path) throw new CredoError('Field path is required')\n // fixme: could the path start otherwise?\n const baseClaimPath = '$.credentialSubject.'\n const claimPaths = field.path.filter((path) => path.startsWith(baseClaimPath))\n if (claimPaths.length === 0) return undefined\n\n // FIXME: we should iterate over all attributes of the schema here and check if the path is valid\n // see https://identity.foundation/presentation-exchange/#presentation-definition\n const claimNames = claimPaths.map((path) => path.slice(baseClaimPath.length))\n const propertyName = claimNames[0]\n\n return propertyName\n }\n\n public createAnonCredsProofRequestAndMetadata = async (\n agentContext: AgentContext,\n presentationDefinition: DifPresentationExchangeDefinition,\n presentationSubmission: DifPresentationExchangeSubmission,\n credentials: W3cJsonLdVerifiableCredential[],\n challenge: string\n ) => {\n const credentialsProve: AnonCredsCredentialProve[] = []\n const schemaIds = new Set<string>()\n const credentialDefinitionIds = new Set<string>()\n const credentialsWithMetadata: CredentialWithRevocationMetadata[] = []\n\n const hash = Hasher.hash(TypedArrayEncoder.fromString(challenge), 'sha-256')\n const nonce = bytesToBigint(hash).toString().slice(0, 20)\n\n const anonCredsProofRequest: AnonCredsProofRequest = {\n version: '1.0',\n name: presentationDefinition.name ?? 'Proof request',\n nonce,\n requested_attributes: {},\n requested_predicates: {},\n }\n\n const nonRevoked = Math.floor(Date.now() / 1000)\n const nonRevokedInterval = { from: nonRevoked, to: nonRevoked }\n\n for (const descriptorMapObject of presentationSubmission.descriptor_map) {\n const descriptor: InputDescriptorV1 | InputDescriptorV2 | undefined = (\n presentationDefinition.input_descriptors as InputDescriptorV2[]\n ).find((descriptor) => descriptor.id === descriptorMapObject.id)\n\n if (!descriptor) {\n throw new Error(`Descriptor with id ${descriptorMapObject.id} not found in presentation definition`)\n }\n\n const referent = descriptorMapObject.id\n const attributeReferent = `${referent}_attribute`\n const predicateReferentBase = `${referent}_predicate`\n let predicateReferentIndex = 0\n\n const fields = descriptor.constraints?.fields\n if (!fields) throw new CredoError('Unclear mapping of constraint with no fields.')\n\n const { entryIndex, schemaId, credentialDefinitionId, revocationRegistryId, credential } =\n await this.getCredentialMetadataForDescriptor(agentContext, descriptorMapObject, credentials)\n\n schemaIds.add(schemaId)\n credentialDefinitionIds.add(credentialDefinitionId)\n\n const requiresRevocationStatus = this.descriptorRequiresRevocationStatus(descriptor)\n if (requiresRevocationStatus && !revocationRegistryId) {\n throw new CredoError('Selected credentials must be revocable but are not')\n }\n\n credentialsWithMetadata.push({\n credential,\n nonRevoked: requiresRevocationStatus ? nonRevokedInterval : undefined,\n })\n\n for (const field of fields) {\n const propertyName = this.getClaimNameForField(field)\n if (!propertyName) continue\n\n if (field.predicate) {\n if (!field.filter) throw new CredoError('Missing required predicate filter property.')\n const predicateTypeAndValues = this.getPredicateTypeAndValues(field.filter)\n for (const { predicateType, predicateValue } of predicateTypeAndValues) {\n const predicateReferent = `${predicateReferentBase}_${predicateReferentIndex++}`\n anonCredsProofRequest.requested_predicates[predicateReferent] = {\n name: propertyName,\n p_type: predicateType,\n p_value: predicateValue,\n restrictions: [{ cred_def_id: credentialDefinitionId }],\n non_revoked: requiresRevocationStatus ? nonRevokedInterval : undefined,\n }\n\n credentialsProve.push({ entryIndex, referent: predicateReferent, isPredicate: true, reveal: true })\n }\n } else {\n if (!anonCredsProofRequest.requested_attributes[attributeReferent]) {\n anonCredsProofRequest.requested_attributes[attributeReferent] = {\n names: [propertyName],\n restrictions: [{ cred_def_id: credentialDefinitionId }],\n non_revoked: requiresRevocationStatus ? nonRevokedInterval : undefined,\n }\n } else {\n const names = anonCredsProofRequest.requested_attributes[attributeReferent].names ?? []\n anonCredsProofRequest.requested_attributes[attributeReferent].names = [...names, propertyName]\n }\n\n credentialsProve.push({ entryIndex, referent: attributeReferent, isPredicate: false, reveal: true })\n }\n }\n }\n\n return { anonCredsProofRequest, credentialsWithMetadata, credentialsProve, schemaIds, credentialDefinitionIds }\n }\n\n public async createPresentation(\n agentContext: AgentContext,\n options: {\n presentationDefinition: DifPresentationExchangeDefinition\n presentationSubmission: DifPresentationExchangeSubmission\n selectedCredentialRecords: W3cCredentialRecord[]\n challenge: string\n }\n ) {\n const { presentationDefinition, presentationSubmission, selectedCredentialRecords, challenge } = options\n\n const linkSecrets = selectedCredentialRecords\n .map((record) => getAnonCredsTagsFromRecord(record)?.anonCredsLinkSecretId)\n .filter((linkSecretId): linkSecretId is string => linkSecretId !== undefined)\n\n const linkSecretId = assertLinkSecretsMatch(agentContext, linkSecrets)\n\n const { anonCredsProofRequest, credentialDefinitionIds, schemaIds, credentialsProve, credentialsWithMetadata } =\n await this.createAnonCredsProofRequestAndMetadata(\n agentContext,\n presentationDefinition,\n presentationSubmission,\n selectedCredentialRecords.map((record) => record.credential) as W3cJsonLdVerifiableCredential[],\n challenge\n )\n\n const createPresentationOptions: CreateW3cPresentationOptions = {\n linkSecretId,\n proofRequest: anonCredsProofRequest,\n credentialsProve,\n credentialsWithRevocationMetadata: credentialsWithMetadata,\n schemas: await fetchSchemas(agentContext, schemaIds),\n credentialDefinitions: await fetchCredentialDefinitions(agentContext, credentialDefinitionIds),\n }\n\n const anonCredsHolderService =\n agentContext.dependencyManager.resolve<AnonCredsHolderService>(AnonCredsHolderServiceSymbol)\n const w3cPresentation = await anonCredsHolderService.createW3cPresentation(agentContext, createPresentationOptions)\n return w3cPresentation\n }\n\n public async verifyPresentation(agentContext: AgentContext, options: AnoncredsDataIntegrityVerifyPresentation) {\n const { presentation, presentationDefinition, presentationSubmission, challenge } = options\n\n const credentialDefinitionIds = new Set<string>()\n\n const verifiableCredentials = Array.isArray(presentation.verifiableCredential)\n ? presentation.verifiableCredential\n : [presentation.verifiableCredential]\n\n for (const verifiableCredential of verifiableCredentials) {\n if (verifiableCredential.claimFormat === ClaimFormat.LdpVc) {\n const proof = this.getDataIntegrityProof(verifiableCredential)\n credentialDefinitionIds.add(proof.verificationMethod)\n } else {\n throw new CredoError('Unsupported credential type')\n }\n }\n\n const { anonCredsProofRequest, credentialsWithMetadata } = await this.createAnonCredsProofRequestAndMetadata(\n agentContext,\n presentationDefinition,\n presentationSubmission,\n verifiableCredentials as W3cJsonLdVerifiableCredential[],\n challenge\n )\n\n const credentialDefinitions = await fetchCredentialDefinitions(agentContext, credentialDefinitionIds)\n const schemaIds = new Set(Object.values(credentialDefinitions).map((cd) => cd.schemaId))\n const schemas = await fetchSchemas(agentContext, schemaIds)\n\n const anonCredsVerifierService =\n agentContext.dependencyManager.resolve<AnonCredsRsVerifierService>(AnonCredsVerifierServiceSymbol)\n\n return await anonCredsVerifierService.verifyW3cPresentation(agentContext, {\n credentialsWithRevocationMetadata: credentialsWithMetadata,\n presentation,\n proofRequest: anonCredsProofRequest,\n schemas,\n credentialDefinitions,\n })\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
-
const require_decorate = require('../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js');
|
|
3
|
-
const require_AnonCredsRestrictionWrapper = require('../models/AnonCredsRestrictionWrapper.js');
|
|
4
|
-
require('../models/index.js');
|
|
5
2
|
const require_AnonCredsModuleConfig = require('../AnonCredsModuleConfig.js');
|
|
6
3
|
const require_AnonCredsRsError = require('../error/AnonCredsRsError.js');
|
|
7
4
|
require('../error/index.js');
|
|
8
|
-
const
|
|
9
|
-
require('../services/index.js');
|
|
10
|
-
const require_AnonCredsCredentialRepository = require('../repository/AnonCredsCredentialRepository.js');
|
|
5
|
+
const require_decorate = require('../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js');
|
|
11
6
|
const require_indyIdentifiers = require('../utils/indyIdentifiers.js');
|
|
7
|
+
const require_AnonCredsCredentialRepository = require('../repository/AnonCredsCredentialRepository.js');
|
|
12
8
|
const require_AnonCredsLinkSecretRepository = require('../repository/AnonCredsLinkSecretRepository.js');
|
|
13
9
|
require('../repository/index.js');
|
|
10
|
+
const require_AnonCredsRegistryService = require('../services/registry/AnonCredsRegistryService.js');
|
|
11
|
+
require('../services/index.js');
|
|
14
12
|
const require_linkSecret = require('../utils/linkSecret.js');
|
|
15
13
|
const require_metadata = require('../utils/metadata.js');
|
|
16
14
|
const require_w3cAnonCredsUtils = require('../utils/w3cAnonCredsUtils.js');
|
|
17
15
|
require('../utils/index.js');
|
|
16
|
+
const require_AnonCredsRestrictionWrapper = require('../models/AnonCredsRestrictionWrapper.js');
|
|
17
|
+
require('../models/index.js');
|
|
18
18
|
const require_proofRequest = require('../utils/proofRequest.js');
|
|
19
19
|
const require_utils = require('./utils.js');
|
|
20
20
|
let __credo_ts_core = require("@credo-ts/core");
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.mjs";
|
|
2
|
-
import { AnonCredsRestrictionWrapper } from "../models/AnonCredsRestrictionWrapper.mjs";
|
|
3
|
-
import "../models/index.mjs";
|
|
4
1
|
import { AnonCredsModuleConfig } from "../AnonCredsModuleConfig.mjs";
|
|
5
2
|
import { AnonCredsRsError } from "../error/AnonCredsRsError.mjs";
|
|
6
3
|
import "../error/index.mjs";
|
|
7
|
-
import {
|
|
8
|
-
import "../services/index.mjs";
|
|
9
|
-
import { AnonCredsCredentialRepository } from "../repository/AnonCredsCredentialRepository.mjs";
|
|
4
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.mjs";
|
|
10
5
|
import { isUnqualifiedCredentialDefinitionId, isUnqualifiedIndyDid, isUnqualifiedSchemaId, unqualifiedCredentialDefinitionIdRegex } from "../utils/indyIdentifiers.mjs";
|
|
6
|
+
import { AnonCredsCredentialRepository } from "../repository/AnonCredsCredentialRepository.mjs";
|
|
11
7
|
import { AnonCredsLinkSecretRepository } from "../repository/AnonCredsLinkSecretRepository.mjs";
|
|
12
8
|
import "../repository/index.mjs";
|
|
9
|
+
import { AnonCredsRegistryService } from "../services/registry/AnonCredsRegistryService.mjs";
|
|
10
|
+
import "../services/index.mjs";
|
|
13
11
|
import { assertLinkSecretsMatch, getLinkSecret, storeLinkSecret } from "../utils/linkSecret.mjs";
|
|
14
12
|
import { W3cAnonCredsCredentialMetadataKey } from "../utils/metadata.mjs";
|
|
15
13
|
import { getAnoncredsCredentialInfoFromRecord, getW3cRecordAnonCredsTags } from "../utils/w3cAnonCredsUtils.mjs";
|
|
16
14
|
import "../utils/index.mjs";
|
|
15
|
+
import { AnonCredsRestrictionWrapper } from "../models/AnonCredsRestrictionWrapper.mjs";
|
|
16
|
+
import "../models/index.mjs";
|
|
17
17
|
import { proofRequestUsesUnqualifiedIdentifiers } from "../utils/proofRequest.mjs";
|
|
18
18
|
import { getRevocationMetadata } from "./utils.mjs";
|
|
19
19
|
import { CredoError, JsonTransformer, Kms, TypedArrayEncoder, W3cCredentialRecord, W3cCredentialRepository, W3cCredentialService, W3cJsonLdVerifiableCredential, W3cJsonLdVerifiablePresentation, injectable, utils } from "@credo-ts/core";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnonCredsRsHolderService.mjs","names":["AnonCredsRsHolderService","W3cAnonCredsCredential","presentation: Presentation | undefined","rsCredentialDefinitions: Record<string, JsonObject>","rsSchemas: Record<string, JsonObject>","revocationState: CredentialRevocationState | undefined","revocationRegistryDefinition: RevocationRegistryDefinition | undefined","credentialsProve: CredentialProve[]","credentials: { linkSecretId: string; credentialEntry: CredentialEntry; credentialId: string }[]","createReturnObj:\n | { credentialRequest: CredentialRequest; credentialRequestMetadata: CredentialRequestMetadata }\n | undefined","w3cCredential: W3cJsonLdVerifiableCredential","anonCredsCredential: Credential | undefined","w3cCredentialObj: W3cAnonCredsCredential | undefined","anonCredsCredentialMetadata: W3cAnonCredsCredentialMetadata","attributeQuery: SimpleQuery<AnonCredsCredentialRecord>","attributeQuery: SimpleQuery<W3cCredentialRecord>","query: Query<W3cCredentialRecord>[]","queryElements: SimpleQuery<W3cCredentialRecord>","query: Query<AnonCredsCredentialRecord>[]","queryElements: SimpleQuery<AnonCredsCredentialRecord>","additionalQueryElements: SimpleQuery<AnonCredsCredentialRecord>","w3cAnonCredsPresentation: W3cAnonCredsPresentation | undefined","w3cPresentation: W3cJsonLdVerifiablePresentation","W3cAnonCredsPresentation"],"sources":["../../src/anoncreds-rs/AnonCredsRsHolderService.ts"],"sourcesContent":["import type { AgentContext, Query, SimpleQuery } from '@credo-ts/core'\nimport type {\n CredentialEntry,\n CredentialProve,\n CredentialRequestMetadata,\n JsonObject,\n W3cCredentialEntry,\n} from '@hyperledger/anoncreds-shared'\nimport type {\n AnonCredsCredential,\n AnonCredsCredentialDefinition,\n AnonCredsCredentialInfo,\n AnonCredsCredentialRequest,\n AnonCredsProof,\n AnonCredsProofRequestRestriction,\n AnonCredsRequestedAttributeMatch,\n AnonCredsRequestedPredicateMatch,\n AnonCredsRevocationRegistryDefinition,\n AnonCredsSchema,\n} from '../models'\nimport type { CredentialWithRevocationMetadata } from '../models/utils'\nimport type { AnonCredsCredentialRecord } from '../repository'\nimport type {\n AnonCredsHolderService,\n CreateCredentialRequestOptions,\n CreateCredentialRequestReturn,\n CreateLinkSecretOptions,\n CreateLinkSecretReturn,\n CreateProofOptions,\n GetCredentialOptions,\n GetCredentialsForProofRequestOptions,\n GetCredentialsForProofRequestReturn,\n GetCredentialsOptions,\n StoreCredentialOptions,\n} from '../services'\nimport type {\n AnonCredsCredentialProve,\n CreateW3cPresentationOptions,\n LegacyToW3cCredentialOptions,\n W3cToLegacyCredentialOptions,\n} from '../services/AnonCredsHolderServiceOptions'\nimport type { AnonCredsCredentialRequestMetadata, W3cAnonCredsCredentialMetadata } from '../utils/metadata'\n\nimport {\n CredoError,\n JsonTransformer,\n Kms,\n TypedArrayEncoder,\n W3cCredentialRecord,\n W3cCredentialRepository,\n W3cCredentialService,\n W3cJsonLdVerifiableCredential,\n W3cJsonLdVerifiablePresentation,\n injectable,\n utils,\n} from '@credo-ts/core'\nimport {\n Credential,\n CredentialRequest,\n CredentialRevocationState,\n LinkSecret,\n Presentation,\n RevocationRegistryDefinition,\n RevocationStatusList,\n W3cCredential as W3cAnonCredsCredential,\n W3cPresentation as W3cAnonCredsPresentation,\n anoncreds,\n} from '@hyperledger/anoncreds-shared'\n\nimport { AnonCredsModuleConfig } from '../AnonCredsModuleConfig'\nimport { AnonCredsRsError } from '../error'\nimport { AnonCredsRestrictionWrapper } from '../models'\nimport { AnonCredsCredentialRepository, AnonCredsLinkSecretRepository } from '../repository'\nimport { AnonCredsRegistryService } from '../services'\nimport { storeLinkSecret, unqualifiedCredentialDefinitionIdRegex } from '../utils'\nimport {\n isUnqualifiedCredentialDefinitionId,\n isUnqualifiedIndyDid,\n isUnqualifiedSchemaId,\n} from '../utils/indyIdentifiers'\nimport { assertLinkSecretsMatch, getLinkSecret } from '../utils/linkSecret'\nimport { W3cAnonCredsCredentialMetadataKey } from '../utils/metadata'\nimport { proofRequestUsesUnqualifiedIdentifiers } from '../utils/proofRequest'\nimport { getAnoncredsCredentialInfoFromRecord, getW3cRecordAnonCredsTags } from '../utils/w3cAnonCredsUtils'\n\nimport { getRevocationMetadata } from './utils'\n\n@injectable()\nexport class AnonCredsRsHolderService implements AnonCredsHolderService {\n public async createLinkSecret(\n _agentContext: AgentContext,\n options?: CreateLinkSecretOptions\n ): Promise<CreateLinkSecretReturn> {\n return {\n linkSecretId: options?.linkSecretId ?? utils.uuid(),\n linkSecretValue: LinkSecret.create(),\n }\n }\n\n /**\n * generate an 80-bit nonce suitable for AnonCreds proofs\n */\n public generateNonce(agentContext: AgentContext): string {\n const kms = agentContext.resolve(Kms.KeyManagementApi)\n const bytes = kms.randomBytes({ length: 10 })\n return bytes.reduce((acc, byte) => (acc << 8n) | BigInt(byte), 0n).toString()\n }\n\n public async createProof(agentContext: AgentContext, options: CreateProofOptions): Promise<AnonCredsProof> {\n const { credentialDefinitions, proofRequest, selectedCredentials, schemas } = options\n\n let presentation: Presentation | undefined\n try {\n const rsCredentialDefinitions: Record<string, JsonObject> = {}\n for (const credDefId in credentialDefinitions) {\n rsCredentialDefinitions[credDefId] = credentialDefinitions[credDefId] as unknown as JsonObject\n }\n\n const rsSchemas: Record<string, JsonObject> = {}\n for (const schemaId in schemas) {\n rsSchemas[schemaId] = schemas[schemaId] as unknown as JsonObject\n }\n\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n const anoncredsCredentialRepository = agentContext.dependencyManager.resolve(AnonCredsCredentialRepository)\n\n // Cache retrieved credentials in order to minimize storage calls\n const retrievedCredentials = new Map<string, W3cCredentialRecord | AnonCredsCredentialRecord>()\n\n const credentialEntryFromAttribute = async (\n attribute: AnonCredsRequestedAttributeMatch | AnonCredsRequestedPredicateMatch\n ): Promise<{ linkSecretId: string; credentialEntry: CredentialEntry; credentialId: string }> => {\n let credentialRecord = retrievedCredentials.get(attribute.credentialId)\n\n if (!credentialRecord) {\n const w3cCredentialRecord = await w3cCredentialRepository.findById(agentContext, attribute.credentialId)\n\n if (w3cCredentialRecord) {\n credentialRecord = w3cCredentialRecord\n retrievedCredentials.set(attribute.credentialId, w3cCredentialRecord)\n } else {\n credentialRecord = await anoncredsCredentialRepository.getByCredentialId(\n agentContext,\n attribute.credentialId\n )\n\n agentContext.config.logger.warn(\n [\n `Creating AnonCreds proof with legacy credential ${attribute.credentialId}.`,\n 'Please run the migration script to migrate credentials to the new w3c format. See https://credo.js.org/guides/updating/versions/0.4-to-0.5 for information on how to migrate.',\n ].join('\\n')\n )\n }\n }\n\n const proofUsesUnqualifiedIdentifiers = proofRequestUsesUnqualifiedIdentifiers(proofRequest)\n const { linkSecretId, schemaId, credentialDefinitionId, revocationRegistryId, credentialRevocationId } =\n getAnoncredsCredentialInfoFromRecord(credentialRecord, proofUsesUnqualifiedIdentifiers)\n\n // TODO: Check if credential has a revocation registry id (check response from anoncreds-rs API, as it is\n // sending back a mandatory string in Credential.revocationRegistryId)\n const timestamp = attribute.timestamp\n\n let revocationState: CredentialRevocationState | undefined\n let revocationRegistryDefinition: RevocationRegistryDefinition | undefined\n try {\n if (timestamp && credentialRevocationId && revocationRegistryId) {\n if (!options.revocationRegistries[revocationRegistryId]) {\n throw new AnonCredsRsError(`Revocation Registry ${revocationRegistryId} not found`)\n }\n\n const { definition, revocationStatusLists, tailsFilePath } =\n options.revocationRegistries[revocationRegistryId]\n\n // Extract revocation status list for the given timestamp\n const revocationStatusList = revocationStatusLists[timestamp]\n if (!revocationStatusList) {\n throw new CredoError(\n `Revocation status list for revocation registry ${revocationRegistryId} and timestamp ${timestamp} not found in revocation status lists. All revocation status lists must be present.`\n )\n }\n\n revocationRegistryDefinition = RevocationRegistryDefinition.fromJson(definition as unknown as JsonObject)\n revocationState = CredentialRevocationState.create({\n revocationRegistryIndex: Number(credentialRevocationId),\n revocationRegistryDefinition,\n tailsPath: tailsFilePath,\n revocationStatusList: RevocationStatusList.fromJson(revocationStatusList as unknown as JsonObject),\n })\n }\n\n const credential =\n credentialRecord instanceof W3cCredentialRecord\n ? await this.w3cToLegacyCredential(agentContext, {\n credential: credentialRecord.credential as W3cJsonLdVerifiableCredential,\n })\n : (credentialRecord.credential as AnonCredsCredential)\n\n if (proofUsesUnqualifiedIdentifiers) {\n credential.schema_id = schemaId\n credential.cred_def_id = credentialDefinitionId\n credential.rev_reg_id = revocationRegistryId != null ? revocationRegistryId : undefined\n }\n return {\n linkSecretId,\n credentialId: attribute.credentialId,\n credentialEntry: {\n credential: credential as unknown as JsonObject,\n revocationState: revocationState?.toJson(),\n timestamp,\n },\n }\n } finally {\n revocationState?.handle.clear()\n revocationRegistryDefinition?.handle.clear()\n }\n }\n\n const credentialsProve: CredentialProve[] = []\n const credentials: { linkSecretId: string; credentialEntry: CredentialEntry; credentialId: string }[] = []\n\n let entryIndex = 0\n for (const referent in selectedCredentials.attributes) {\n const attribute = selectedCredentials.attributes[referent]\n\n // If the credentialId with the same timestamp is already present, we will use the existing entry, so that the proof is created\n // showing the attributes come from the same cred, rather than different ones.\n const existingCredentialIndex = credentials.findIndex(\n (credential) =>\n credential.credentialId === attribute.credentialId &&\n attribute.timestamp === credential.credentialEntry.timestamp\n )\n\n if (existingCredentialIndex !== -1) {\n credentialsProve.push({\n entryIndex: existingCredentialIndex,\n isPredicate: false,\n referent,\n reveal: attribute.revealed,\n })\n } else {\n credentials.push(await credentialEntryFromAttribute(attribute))\n credentialsProve.push({ entryIndex, isPredicate: false, referent, reveal: attribute.revealed })\n entryIndex = entryIndex + 1\n }\n }\n\n for (const referent in selectedCredentials.predicates) {\n const predicate = selectedCredentials.predicates[referent]\n\n // If the credentialId with the same timestamp is already present, we will use the existing entry, so that the proof is created\n // showing the attributes come from the same cred, rather than different ones.\n const existingCredentialIndex = credentials.findIndex(\n (credential) =>\n credential.credentialId === predicate.credentialId &&\n predicate.timestamp === credential.credentialEntry.timestamp\n )\n\n if (existingCredentialIndex !== -1) {\n credentialsProve.push({ entryIndex: existingCredentialIndex, isPredicate: true, referent, reveal: true })\n } else {\n credentials.push(await credentialEntryFromAttribute(predicate))\n credentialsProve.push({ entryIndex, isPredicate: true, referent, reveal: true })\n entryIndex = entryIndex + 1\n }\n }\n\n const linkSecretIds = credentials.map((item) => item.linkSecretId)\n const linkSecretId = assertLinkSecretsMatch(agentContext, linkSecretIds)\n const linkSecret = await getLinkSecret(agentContext, linkSecretId)\n\n presentation = Presentation.create({\n credentialDefinitions: rsCredentialDefinitions,\n schemas: rsSchemas,\n presentationRequest: proofRequest as unknown as JsonObject,\n credentials: credentials.map((entry) => entry.credentialEntry),\n credentialsProve,\n selfAttest: selectedCredentials.selfAttestedAttributes,\n linkSecret,\n })\n\n return presentation.toJson() as unknown as AnonCredsProof\n } finally {\n presentation?.handle.clear()\n }\n }\n\n public async createCredentialRequest(\n agentContext: AgentContext,\n options: CreateCredentialRequestOptions\n ): Promise<CreateCredentialRequestReturn> {\n const { useLegacyProverDid, credentialDefinition, credentialOffer } = options\n let createReturnObj:\n | { credentialRequest: CredentialRequest; credentialRequestMetadata: CredentialRequestMetadata }\n | undefined\n try {\n const linkSecretRepository = agentContext.dependencyManager.resolve(AnonCredsLinkSecretRepository)\n\n // If a link secret is specified, use it. Otherwise, attempt to use default link secret\n let linkSecretRecord = options.linkSecretId\n ? await linkSecretRepository.getByLinkSecretId(agentContext, options.linkSecretId)\n : await linkSecretRepository.findDefault(agentContext)\n\n // No default link secret. Automatically create one if set on module config\n if (!linkSecretRecord) {\n const moduleConfig = agentContext.dependencyManager.resolve(AnonCredsModuleConfig)\n if (!moduleConfig.autoCreateLinkSecret) {\n throw new AnonCredsRsError(\n 'No link secret provided to createCredentialRequest and no default link secret has been found'\n )\n }\n const { linkSecretId, linkSecretValue } = await this.createLinkSecret(agentContext, {})\n linkSecretRecord = await storeLinkSecret(agentContext, { linkSecretId, linkSecretValue, setAsDefault: true })\n }\n\n if (!linkSecretRecord.value) {\n throw new AnonCredsRsError('Link Secret value not stored')\n }\n\n const isLegacyIdentifier = credentialOffer.cred_def_id.match(unqualifiedCredentialDefinitionIdRegex)\n if (!isLegacyIdentifier && useLegacyProverDid) {\n throw new CredoError('Cannot use legacy prover_did with non-legacy identifiers')\n }\n createReturnObj = CredentialRequest.create({\n entropy: !useLegacyProverDid || !isLegacyIdentifier ? anoncreds.generateNonce() : undefined,\n proverDid: useLegacyProverDid\n ? TypedArrayEncoder.toBase58(TypedArrayEncoder.fromString(anoncreds.generateNonce().slice(0, 16)))\n : undefined,\n credentialDefinition: credentialDefinition as unknown as JsonObject,\n credentialOffer: credentialOffer as unknown as JsonObject,\n linkSecret: linkSecretRecord.value,\n linkSecretId: linkSecretRecord.linkSecretId,\n })\n\n return {\n credentialRequest: createReturnObj.credentialRequest.toJson() as unknown as AnonCredsCredentialRequest,\n credentialRequestMetadata:\n createReturnObj.credentialRequestMetadata.toJson() as unknown as AnonCredsCredentialRequestMetadata,\n }\n } finally {\n createReturnObj?.credentialRequest.handle.clear()\n createReturnObj?.credentialRequestMetadata.handle.clear()\n }\n }\n\n public async w3cToLegacyCredential(_agentContext: AgentContext, options: W3cToLegacyCredentialOptions) {\n const credentialJson = JsonTransformer.toJSON(options.credential)\n const w3cAnonCredsCredentialObj = W3cAnonCredsCredential.fromJson(credentialJson)\n const w3cCredentialObj = w3cAnonCredsCredentialObj.toLegacy()\n const legacyCredential = w3cCredentialObj.toJson() as unknown as AnonCredsCredential\n return legacyCredential\n }\n\n public async processW3cCredential(\n agentContext: AgentContext,\n credential: W3cJsonLdVerifiableCredential,\n processOptions: {\n credentialDefinition: AnonCredsCredentialDefinition\n credentialRequestMetadata: AnonCredsCredentialRequestMetadata\n revocationRegistryDefinition: AnonCredsRevocationRegistryDefinition | undefined\n }\n ) {\n const { credentialRequestMetadata, revocationRegistryDefinition, credentialDefinition } = processOptions\n\n const processCredentialOptions = {\n credentialRequestMetadata: credentialRequestMetadata as unknown as JsonObject,\n linkSecret: await getLinkSecret(agentContext, credentialRequestMetadata.link_secret_name),\n revocationRegistryDefinition: revocationRegistryDefinition as unknown as JsonObject,\n credentialDefinition: credentialDefinition as unknown as JsonObject,\n }\n\n const credentialJson = JsonTransformer.toJSON(credential)\n const w3cAnonCredsCredential = W3cAnonCredsCredential.fromJson(credentialJson)\n const processedW3cAnonCredsCredential = w3cAnonCredsCredential.process(processCredentialOptions)\n\n const processedW3cJsonLdVerifiableCredential = JsonTransformer.fromJSON(\n processedW3cAnonCredsCredential.toJson(),\n W3cJsonLdVerifiableCredential\n )\n return processedW3cJsonLdVerifiableCredential\n }\n\n public async legacyToW3cCredential(agentContext: AgentContext, options: LegacyToW3cCredentialOptions) {\n const { credential, issuerId, processOptions } = options\n let w3cCredential: W3cJsonLdVerifiableCredential\n\n let anonCredsCredential: Credential | undefined\n let w3cCredentialObj: W3cAnonCredsCredential | undefined\n try {\n anonCredsCredential = Credential.fromJson(credential as unknown as JsonObject)\n w3cCredentialObj = anonCredsCredential.toW3c({ issuerId, w3cVersion: '1.1' })\n\n const w3cJsonLdVerifiableCredential = JsonTransformer.fromJSON(\n w3cCredentialObj.toJson(),\n W3cJsonLdVerifiableCredential\n )\n\n w3cCredential = processOptions\n ? await this.processW3cCredential(agentContext, w3cJsonLdVerifiableCredential, processOptions)\n : w3cJsonLdVerifiableCredential\n } finally {\n anonCredsCredential?.handle?.clear()\n w3cCredentialObj?.handle?.clear()\n }\n\n return w3cCredential\n }\n\n public async storeW3cCredential(\n agentContext: AgentContext,\n options: {\n credential: W3cJsonLdVerifiableCredential\n credentialDefinitionId: string\n schema: AnonCredsSchema\n credentialDefinition: AnonCredsCredentialDefinition\n revocationRegistryDefinition?: AnonCredsRevocationRegistryDefinition\n revocationRegistryId?: string\n credentialRequestMetadata: AnonCredsCredentialRequestMetadata\n }\n ) {\n const {\n credential,\n credentialRequestMetadata,\n schema,\n credentialDefinition,\n credentialDefinitionId,\n revocationRegistryId,\n } = options\n\n const methodName = agentContext.dependencyManager\n .resolve(AnonCredsRegistryService)\n .getRegistryForIdentifier(agentContext, credential.issuerId).methodName\n\n // this thows an error if the link secret is not found\n await getLinkSecret(agentContext, credentialRequestMetadata.link_secret_name)\n\n const { revocationRegistryIndex } = W3cAnonCredsCredential.fromJson(JsonTransformer.toJSON(credential))\n\n if (Array.isArray(credential.credentialSubject)) {\n throw new CredoError('Credential subject must be an object, not an array.')\n }\n\n const anonCredsTags = getW3cRecordAnonCredsTags({\n credentialSubject: credential.credentialSubject,\n issuerId: credential.issuerId,\n schema,\n schemaId: credentialDefinition.schemaId,\n credentialDefinitionId,\n revocationRegistryId,\n credentialRevocationId: revocationRegistryIndex?.toString(),\n linkSecretId: credentialRequestMetadata.link_secret_name,\n methodName,\n })\n\n const w3cCredentialService = agentContext.dependencyManager.resolve(W3cCredentialService)\n const w3cCredentialRecord = await w3cCredentialService.storeCredential(agentContext, { credential })\n\n const anonCredsCredentialMetadata: W3cAnonCredsCredentialMetadata = {\n credentialRevocationId: anonCredsTags.anonCredsCredentialRevocationId,\n linkSecretId: anonCredsTags.anonCredsLinkSecretId,\n methodName: anonCredsTags.anonCredsMethodName,\n }\n\n w3cCredentialRecord.setTags(anonCredsTags)\n w3cCredentialRecord.metadata.set(W3cAnonCredsCredentialMetadataKey, anonCredsCredentialMetadata)\n\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n await w3cCredentialRepository.update(agentContext, w3cCredentialRecord)\n\n return w3cCredentialRecord\n }\n\n public async storeCredential(agentContext: AgentContext, options: StoreCredentialOptions): Promise<string> {\n const {\n credential,\n credentialDefinition,\n credentialDefinitionId,\n credentialRequestMetadata,\n schema,\n revocationRegistry,\n } = options\n\n const w3cJsonLdCredential =\n credential instanceof W3cJsonLdVerifiableCredential\n ? credential\n : await this.legacyToW3cCredential(agentContext, {\n credential,\n issuerId: credentialDefinition.issuerId,\n processOptions: {\n credentialRequestMetadata,\n credentialDefinition,\n revocationRegistryDefinition: revocationRegistry?.definition,\n },\n })\n\n const w3cCredentialRecord = await this.storeW3cCredential(agentContext, {\n credentialRequestMetadata,\n credential: w3cJsonLdCredential,\n credentialDefinitionId,\n schema,\n credentialDefinition,\n revocationRegistryDefinition: revocationRegistry?.definition,\n revocationRegistryId: revocationRegistry?.id,\n })\n\n return w3cCredentialRecord.id\n }\n\n public async getCredential(\n agentContext: AgentContext,\n options: GetCredentialOptions\n ): Promise<AnonCredsCredentialInfo> {\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n const w3cCredentialRecord = await w3cCredentialRepository.findById(agentContext, options.id)\n if (w3cCredentialRecord) {\n return getAnoncredsCredentialInfoFromRecord(w3cCredentialRecord, options.useUnqualifiedIdentifiersIfPresent)\n }\n\n const anonCredsCredentialRepository = agentContext.dependencyManager.resolve(AnonCredsCredentialRepository)\n const anonCredsCredentialRecord = await anonCredsCredentialRepository.getByCredentialId(agentContext, options.id)\n\n agentContext.config.logger.warn(\n [\n `Querying legacy credential repository for credential with id ${options.id}.`,\n 'Please run the migration script to migrate credentials to the new w3c format.',\n ].join('\\n')\n )\n\n return getAnoncredsCredentialInfoFromRecord(anonCredsCredentialRecord)\n }\n\n private async getLegacyCredentials(\n agentContext: AgentContext,\n options: GetCredentialsOptions\n ): Promise<AnonCredsCredentialInfo[]> {\n const credentialRecords = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialRepository)\n .findByQuery(agentContext, {\n credentialDefinitionId: options.credentialDefinitionId,\n schemaId: options.schemaId,\n issuerId: options.issuerId,\n schemaName: options.schemaName,\n schemaVersion: options.schemaVersion,\n schemaIssuerId: options.schemaIssuerId,\n methodName: options.methodName,\n })\n\n return credentialRecords.map((credentialRecord) => getAnoncredsCredentialInfoFromRecord(credentialRecord))\n }\n\n public async getCredentials(\n agentContext: AgentContext,\n options: GetCredentialsOptions\n ): Promise<AnonCredsCredentialInfo[]> {\n const credentialRecords = await agentContext.dependencyManager\n .resolve(W3cCredentialRepository)\n .findByQuery(agentContext, {\n issuerId: !options.issuerId || isUnqualifiedIndyDid(options.issuerId) ? undefined : options.issuerId,\n anonCredsCredentialDefinitionId:\n !options.credentialDefinitionId || isUnqualifiedCredentialDefinitionId(options.credentialDefinitionId)\n ? undefined\n : options.credentialDefinitionId,\n anonCredsSchemaId: !options.schemaId || isUnqualifiedSchemaId(options.schemaId) ? undefined : options.schemaId,\n anonCredsSchemaName: options.schemaName,\n anonCredsSchemaVersion: options.schemaVersion,\n anonCredsSchemaIssuerId:\n !options.schemaIssuerId || isUnqualifiedIndyDid(options.schemaIssuerId) ? undefined : options.schemaIssuerId,\n\n anonCredsMethodName: options.methodName,\n anonCredsUnqualifiedSchemaId:\n options.schemaId && isUnqualifiedSchemaId(options.schemaId) ? options.schemaId : undefined,\n anonCredsUnqualifiedIssuerId:\n options.issuerId && isUnqualifiedIndyDid(options.issuerId) ? options.issuerId : undefined,\n anonCredsUnqualifiedSchemaIssuerId:\n options.schemaIssuerId && isUnqualifiedIndyDid(options.schemaIssuerId) ? options.schemaIssuerId : undefined,\n anonCredsUnqualifiedCredentialDefinitionId:\n options.credentialDefinitionId && isUnqualifiedCredentialDefinitionId(options.credentialDefinitionId)\n ? options.credentialDefinitionId\n : undefined,\n })\n\n const credentials = credentialRecords.map((credentialRecord) =>\n getAnoncredsCredentialInfoFromRecord(credentialRecord)\n )\n const legacyCredentials = await this.getLegacyCredentials(agentContext, options)\n\n if (legacyCredentials.length > 0) {\n agentContext.config.logger.warn(\n 'Queried credentials include legacy credentials. Please run the migration script to migrate credentials to the new w3c format.'\n )\n }\n return [...legacyCredentials, ...credentials]\n }\n\n public async deleteCredential(agentContext: AgentContext, id: string): Promise<void> {\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n const w3cCredentialRecord = await w3cCredentialRepository.findById(agentContext, id)\n\n if (w3cCredentialRecord) {\n await w3cCredentialRepository.delete(agentContext, w3cCredentialRecord)\n return\n }\n\n const anoncredsCredentialRepository = agentContext.dependencyManager.resolve(AnonCredsCredentialRepository)\n const anoncredsCredentialRecord = await anoncredsCredentialRepository.getByCredentialId(agentContext, id)\n await anoncredsCredentialRepository.delete(agentContext, anoncredsCredentialRecord)\n }\n private async getLegacyCredentialsForProofRequest(\n agentContext: AgentContext,\n options: GetCredentialsForProofRequestOptions\n ): Promise<GetCredentialsForProofRequestReturn> {\n const proofRequest = options.proofRequest\n const referent = options.attributeReferent\n\n const requestedAttribute =\n proofRequest.requested_attributes[referent] ?? proofRequest.requested_predicates[referent]\n\n if (!requestedAttribute) {\n throw new AnonCredsRsError('Referent not found in proof request')\n }\n\n const $and = []\n\n // Make sure the attribute(s) that are requested are present using the marker tag\n const attributes = requestedAttribute.names ?? [requestedAttribute.name]\n const attributeQuery: SimpleQuery<AnonCredsCredentialRecord> = {}\n for (const attribute of attributes) {\n attributeQuery[`anonCredsAttr::${attribute}::marker`] = true\n }\n $and.push(attributeQuery)\n\n // Add query for proof request restrictions\n if (requestedAttribute.restrictions) {\n const restrictionQuery = this.queryLegacyFromRestrictions(requestedAttribute.restrictions)\n $and.push(restrictionQuery)\n }\n\n // Add extra query\n // TODO: we're not really typing the extraQuery, and it will work differently based on the anoncreds implmentation\n // We should make the allowed properties more strict\n if (options.extraQuery) {\n $and.push(options.extraQuery)\n }\n\n const credentials = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialRepository)\n .findByQuery(agentContext, {\n $and,\n })\n\n return credentials.map((credentialRecord) => {\n return {\n credentialInfo: getAnoncredsCredentialInfoFromRecord(credentialRecord),\n interval: proofRequest.non_revoked,\n }\n })\n }\n\n public async getCredentialsForProofRequest(\n agentContext: AgentContext,\n options: GetCredentialsForProofRequestOptions\n ): Promise<GetCredentialsForProofRequestReturn> {\n const proofRequest = options.proofRequest\n const referent = options.attributeReferent\n\n const requestedAttribute =\n proofRequest.requested_attributes[referent] ?? proofRequest.requested_predicates[referent]\n\n if (!requestedAttribute) {\n throw new AnonCredsRsError('Referent not found in proof request')\n }\n\n const $and = []\n\n const useUnqualifiedIdentifiers = proofRequestUsesUnqualifiedIdentifiers(proofRequest)\n\n // Make sure the attribute(s) that are requested are present using the marker tag\n const attributes = requestedAttribute.names ?? [requestedAttribute.name]\n const attributeQuery: SimpleQuery<W3cCredentialRecord> = {}\n for (const attribute of attributes) {\n attributeQuery[`anonCredsAttr::${attribute}::marker`] = true\n }\n $and.push(attributeQuery)\n\n // Add query for proof request restrictions\n if (requestedAttribute.restrictions) {\n const restrictionQuery = this.queryFromRestrictions(requestedAttribute.restrictions)\n $and.push(restrictionQuery)\n }\n\n // Add extra query\n // TODO: we're not really typing the extraQuery, and it will work differently based on the anoncreds implmentation\n // We should make the allowed properties more strict\n if (options.extraQuery) {\n $and.push(options.extraQuery)\n }\n\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n const credentials = await w3cCredentialRepository.findByQuery(agentContext, { $and })\n const legacyCredentialWithMetadata = await this.getLegacyCredentialsForProofRequest(agentContext, options)\n\n if (legacyCredentialWithMetadata.length > 0) {\n agentContext.config.logger.warn(\n [\n 'Including legacy credentials in proof request.',\n 'Please run the migration script to migrate credentials to the new w3c format.',\n ].join('\\n')\n )\n }\n\n const credentialWithMetadata = credentials.map((credentialRecord) => {\n return {\n credentialInfo: getAnoncredsCredentialInfoFromRecord(credentialRecord, useUnqualifiedIdentifiers),\n interval: proofRequest.non_revoked,\n }\n })\n\n return [...credentialWithMetadata, ...legacyCredentialWithMetadata]\n }\n\n private queryFromRestrictions(restrictions: AnonCredsProofRequestRestriction[]) {\n const query: Query<W3cCredentialRecord>[] = []\n\n const { restrictions: parsedRestrictions } = JsonTransformer.fromJSON({ restrictions }, AnonCredsRestrictionWrapper)\n\n for (const restriction of parsedRestrictions) {\n const queryElements: SimpleQuery<W3cCredentialRecord> = {}\n\n if (restriction.credentialDefinitionId) {\n if (isUnqualifiedCredentialDefinitionId(restriction.credentialDefinitionId)) {\n queryElements.anonCredsUnqualifiedCredentialDefinitionId = restriction.credentialDefinitionId\n } else {\n queryElements.anonCredsCredentialDefinitionId = restriction.credentialDefinitionId\n }\n }\n\n if (restriction.issuerId || restriction.issuerDid) {\n const issuerId = (restriction.issuerId ?? restriction.issuerDid) as string\n if (isUnqualifiedIndyDid(issuerId)) {\n queryElements.anonCredsUnqualifiedIssuerId = issuerId\n } else {\n queryElements.issuerId = issuerId\n }\n }\n\n if (restriction.schemaId) {\n if (isUnqualifiedSchemaId(restriction.schemaId)) {\n queryElements.anonCredsUnqualifiedSchemaId = restriction.schemaId\n } else {\n queryElements.anonCredsSchemaId = restriction.schemaId\n }\n }\n\n if (restriction.schemaIssuerId || restriction.schemaIssuerDid) {\n const schemaIssuerId = (restriction.schemaIssuerId ?? restriction.schemaIssuerDid) as string\n if (isUnqualifiedIndyDid(schemaIssuerId)) {\n queryElements.anonCredsUnqualifiedSchemaIssuerId = schemaIssuerId\n } else {\n queryElements.anonCredsSchemaIssuerId = schemaIssuerId\n }\n }\n\n if (restriction.schemaName) {\n queryElements.anonCredsSchemaName = restriction.schemaName\n }\n\n if (restriction.schemaVersion) {\n queryElements.anonCredsSchemaVersion = restriction.schemaVersion\n }\n\n for (const [attributeName, attributeValue] of Object.entries(restriction.attributeValues)) {\n queryElements[`anonCredsAttr::${attributeName}::value`] = attributeValue\n }\n\n for (const [attributeName, isAvailable] of Object.entries(restriction.attributeMarkers)) {\n if (isAvailable) {\n queryElements[`anonCredsAttr::${attributeName}::marker`] = isAvailable\n }\n }\n\n query.push(queryElements)\n }\n\n return query.length === 1 ? query[0] : { $or: query }\n }\n\n private queryLegacyFromRestrictions(restrictions: AnonCredsProofRequestRestriction[]) {\n const query: Query<AnonCredsCredentialRecord>[] = []\n\n const { restrictions: parsedRestrictions } = JsonTransformer.fromJSON({ restrictions }, AnonCredsRestrictionWrapper)\n\n for (const restriction of parsedRestrictions) {\n const queryElements: SimpleQuery<AnonCredsCredentialRecord> = {}\n const additionalQueryElements: SimpleQuery<AnonCredsCredentialRecord> = {}\n\n if (restriction.credentialDefinitionId) {\n queryElements.credentialDefinitionId = restriction.credentialDefinitionId\n if (isUnqualifiedCredentialDefinitionId(restriction.credentialDefinitionId)) {\n additionalQueryElements.credentialDefinitionId = restriction.credentialDefinitionId\n }\n }\n\n if (restriction.issuerId || restriction.issuerDid) {\n const issuerId = (restriction.issuerId ?? restriction.issuerDid) as string\n queryElements.issuerId = issuerId\n if (isUnqualifiedIndyDid(issuerId)) {\n additionalQueryElements.issuerId = issuerId\n }\n }\n\n if (restriction.schemaId) {\n queryElements.schemaId = restriction.schemaId\n if (isUnqualifiedSchemaId(restriction.schemaId)) {\n additionalQueryElements.schemaId = restriction.schemaId\n }\n }\n\n if (restriction.schemaIssuerId || restriction.schemaIssuerDid) {\n const issuerId = (restriction.schemaIssuerId ?? restriction.schemaIssuerDid) as string\n queryElements.schemaIssuerId = issuerId\n if (isUnqualifiedIndyDid(issuerId)) {\n additionalQueryElements.schemaIssuerId = issuerId\n }\n }\n\n if (restriction.schemaName) {\n queryElements.schemaName = restriction.schemaName\n }\n\n if (restriction.schemaVersion) {\n queryElements.schemaVersion = restriction.schemaVersion\n }\n\n for (const [attributeName, attributeValue] of Object.entries(restriction.attributeValues)) {\n queryElements[`attr::${attributeName}::value`] = attributeValue\n }\n\n for (const [attributeName, isAvailable] of Object.entries(restriction.attributeMarkers)) {\n if (isAvailable) {\n queryElements[`attr::${attributeName}::marker`] = isAvailable\n }\n }\n\n query.push(queryElements)\n if (Object.keys(additionalQueryElements).length > 0) {\n query.push(additionalQueryElements)\n }\n }\n\n return query.length === 1 ? query[0] : { $or: query }\n }\n\n private getPresentationMetadata = async (\n agentContext: AgentContext,\n options: {\n credentialsWithMetadata: CredentialWithRevocationMetadata[]\n credentialsProve: AnonCredsCredentialProve[]\n }\n ) => {\n const { credentialsWithMetadata, credentialsProve } = options\n\n const credentials: W3cCredentialEntry[] = await Promise.all(\n credentialsWithMetadata.map(async ({ credential, nonRevoked }) => {\n const credentialJson = JsonTransformer.toJSON(credential)\n const { revocationRegistryIndex, revocationRegistryId, timestamp } =\n W3cAnonCredsCredential.fromJson(credentialJson)\n\n if (!nonRevoked) return { credential: credentialJson, revocationState: undefined, timestamp: undefined }\n\n if (!revocationRegistryId || !revocationRegistryIndex) throw new CredoError('Missing revocation metadata')\n\n const { revocationState, updatedTimestamp } = await getRevocationMetadata(agentContext, {\n nonRevokedInterval: nonRevoked,\n timestamp,\n revocationRegistryIndex,\n revocationRegistryId,\n })\n\n return { credential: credentialJson, revocationState, timestamp: updatedTimestamp }\n })\n )\n\n return { credentialsProve, credentials }\n }\n\n public async createW3cPresentation(agentContext: AgentContext, options: CreateW3cPresentationOptions) {\n const { credentialsProve, credentials } = await this.getPresentationMetadata(agentContext, {\n credentialsWithMetadata: options.credentialsWithRevocationMetadata,\n credentialsProve: options.credentialsProve,\n })\n\n let w3cAnonCredsPresentation: W3cAnonCredsPresentation | undefined\n let w3cPresentation: W3cJsonLdVerifiablePresentation\n try {\n w3cAnonCredsPresentation = W3cAnonCredsPresentation.create({\n credentials,\n credentialsProve,\n schemas: options.schemas as unknown as Record<string, JsonObject>,\n credentialDefinitions: options.credentialDefinitions as unknown as Record<string, JsonObject>,\n presentationRequest: options.proofRequest as unknown as JsonObject,\n linkSecret: await getLinkSecret(agentContext, options.linkSecretId),\n })\n const presentationJson = w3cAnonCredsPresentation.toJson() as unknown as JsonObject\n w3cPresentation = JsonTransformer.fromJSON(presentationJson, W3cJsonLdVerifiablePresentation)\n } finally {\n w3cAnonCredsPresentation?.handle.clear()\n }\n\n return w3cPresentation\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AnonCredsRsHolderService.mjs","names":["AnonCredsRsHolderService","W3cAnonCredsCredential","presentation: Presentation | undefined","rsCredentialDefinitions: Record<string, JsonObject>","rsSchemas: Record<string, JsonObject>","revocationState: CredentialRevocationState | undefined","revocationRegistryDefinition: RevocationRegistryDefinition | undefined","credentialsProve: CredentialProve[]","credentials: { linkSecretId: string; credentialEntry: CredentialEntry; credentialId: string }[]","createReturnObj:\n | { credentialRequest: CredentialRequest; credentialRequestMetadata: CredentialRequestMetadata }\n | undefined","w3cCredential: W3cJsonLdVerifiableCredential","anonCredsCredential: Credential | undefined","w3cCredentialObj: W3cAnonCredsCredential | undefined","anonCredsCredentialMetadata: W3cAnonCredsCredentialMetadata","attributeQuery: SimpleQuery<AnonCredsCredentialRecord>","attributeQuery: SimpleQuery<W3cCredentialRecord>","query: Query<W3cCredentialRecord>[]","queryElements: SimpleQuery<W3cCredentialRecord>","query: Query<AnonCredsCredentialRecord>[]","queryElements: SimpleQuery<AnonCredsCredentialRecord>","additionalQueryElements: SimpleQuery<AnonCredsCredentialRecord>","w3cAnonCredsPresentation: W3cAnonCredsPresentation | undefined","w3cPresentation: W3cJsonLdVerifiablePresentation","W3cAnonCredsPresentation"],"sources":["../../src/anoncreds-rs/AnonCredsRsHolderService.ts"],"sourcesContent":["import type { AgentContext, Query, SimpleQuery } from '@credo-ts/core'\nimport {\n CredoError,\n injectable,\n JsonTransformer,\n Kms,\n TypedArrayEncoder,\n utils,\n W3cCredentialRecord,\n W3cCredentialRepository,\n W3cCredentialService,\n W3cJsonLdVerifiableCredential,\n W3cJsonLdVerifiablePresentation,\n} from '@credo-ts/core'\nimport type {\n CredentialEntry,\n CredentialProve,\n CredentialRequestMetadata,\n JsonObject,\n W3cCredentialEntry,\n} from '@hyperledger/anoncreds-shared'\nimport {\n anoncreds,\n Credential,\n CredentialRequest,\n CredentialRevocationState,\n LinkSecret,\n Presentation,\n RevocationRegistryDefinition,\n RevocationStatusList,\n W3cCredential as W3cAnonCredsCredential,\n W3cPresentation as W3cAnonCredsPresentation,\n} from '@hyperledger/anoncreds-shared'\nimport { AnonCredsModuleConfig } from '../AnonCredsModuleConfig'\nimport { AnonCredsRsError } from '../error'\nimport type {\n AnonCredsCredential,\n AnonCredsCredentialDefinition,\n AnonCredsCredentialInfo,\n AnonCredsCredentialRequest,\n AnonCredsProof,\n AnonCredsProofRequestRestriction,\n AnonCredsRequestedAttributeMatch,\n AnonCredsRequestedPredicateMatch,\n AnonCredsRevocationRegistryDefinition,\n AnonCredsSchema,\n} from '../models'\nimport { AnonCredsRestrictionWrapper } from '../models'\nimport type { CredentialWithRevocationMetadata } from '../models/utils'\nimport type { AnonCredsCredentialRecord } from '../repository'\nimport { AnonCredsCredentialRepository, AnonCredsLinkSecretRepository } from '../repository'\nimport type {\n AnonCredsHolderService,\n CreateCredentialRequestOptions,\n CreateCredentialRequestReturn,\n CreateLinkSecretOptions,\n CreateLinkSecretReturn,\n CreateProofOptions,\n GetCredentialOptions,\n GetCredentialsForProofRequestOptions,\n GetCredentialsForProofRequestReturn,\n GetCredentialsOptions,\n StoreCredentialOptions,\n} from '../services'\nimport { AnonCredsRegistryService } from '../services'\nimport type {\n AnonCredsCredentialProve,\n CreateW3cPresentationOptions,\n LegacyToW3cCredentialOptions,\n W3cToLegacyCredentialOptions,\n} from '../services/AnonCredsHolderServiceOptions'\nimport { storeLinkSecret, unqualifiedCredentialDefinitionIdRegex } from '../utils'\nimport {\n isUnqualifiedCredentialDefinitionId,\n isUnqualifiedIndyDid,\n isUnqualifiedSchemaId,\n} from '../utils/indyIdentifiers'\nimport { assertLinkSecretsMatch, getLinkSecret } from '../utils/linkSecret'\nimport type { AnonCredsCredentialRequestMetadata, W3cAnonCredsCredentialMetadata } from '../utils/metadata'\nimport { W3cAnonCredsCredentialMetadataKey } from '../utils/metadata'\nimport { proofRequestUsesUnqualifiedIdentifiers } from '../utils/proofRequest'\nimport { getAnoncredsCredentialInfoFromRecord, getW3cRecordAnonCredsTags } from '../utils/w3cAnonCredsUtils'\n\nimport { getRevocationMetadata } from './utils'\n\n@injectable()\nexport class AnonCredsRsHolderService implements AnonCredsHolderService {\n public async createLinkSecret(\n _agentContext: AgentContext,\n options?: CreateLinkSecretOptions\n ): Promise<CreateLinkSecretReturn> {\n return {\n linkSecretId: options?.linkSecretId ?? utils.uuid(),\n linkSecretValue: LinkSecret.create(),\n }\n }\n\n /**\n * generate an 80-bit nonce suitable for AnonCreds proofs\n */\n public generateNonce(agentContext: AgentContext): string {\n const kms = agentContext.resolve(Kms.KeyManagementApi)\n const bytes = kms.randomBytes({ length: 10 })\n return bytes.reduce((acc, byte) => (acc << 8n) | BigInt(byte), 0n).toString()\n }\n\n public async createProof(agentContext: AgentContext, options: CreateProofOptions): Promise<AnonCredsProof> {\n const { credentialDefinitions, proofRequest, selectedCredentials, schemas } = options\n\n let presentation: Presentation | undefined\n try {\n const rsCredentialDefinitions: Record<string, JsonObject> = {}\n for (const credDefId in credentialDefinitions) {\n rsCredentialDefinitions[credDefId] = credentialDefinitions[credDefId] as unknown as JsonObject\n }\n\n const rsSchemas: Record<string, JsonObject> = {}\n for (const schemaId in schemas) {\n rsSchemas[schemaId] = schemas[schemaId] as unknown as JsonObject\n }\n\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n const anoncredsCredentialRepository = agentContext.dependencyManager.resolve(AnonCredsCredentialRepository)\n\n // Cache retrieved credentials in order to minimize storage calls\n const retrievedCredentials = new Map<string, W3cCredentialRecord | AnonCredsCredentialRecord>()\n\n const credentialEntryFromAttribute = async (\n attribute: AnonCredsRequestedAttributeMatch | AnonCredsRequestedPredicateMatch\n ): Promise<{ linkSecretId: string; credentialEntry: CredentialEntry; credentialId: string }> => {\n let credentialRecord = retrievedCredentials.get(attribute.credentialId)\n\n if (!credentialRecord) {\n const w3cCredentialRecord = await w3cCredentialRepository.findById(agentContext, attribute.credentialId)\n\n if (w3cCredentialRecord) {\n credentialRecord = w3cCredentialRecord\n retrievedCredentials.set(attribute.credentialId, w3cCredentialRecord)\n } else {\n credentialRecord = await anoncredsCredentialRepository.getByCredentialId(\n agentContext,\n attribute.credentialId\n )\n\n agentContext.config.logger.warn(\n [\n `Creating AnonCreds proof with legacy credential ${attribute.credentialId}.`,\n 'Please run the migration script to migrate credentials to the new w3c format. See https://credo.js.org/guides/updating/versions/0.4-to-0.5 for information on how to migrate.',\n ].join('\\n')\n )\n }\n }\n\n const proofUsesUnqualifiedIdentifiers = proofRequestUsesUnqualifiedIdentifiers(proofRequest)\n const { linkSecretId, schemaId, credentialDefinitionId, revocationRegistryId, credentialRevocationId } =\n getAnoncredsCredentialInfoFromRecord(credentialRecord, proofUsesUnqualifiedIdentifiers)\n\n // TODO: Check if credential has a revocation registry id (check response from anoncreds-rs API, as it is\n // sending back a mandatory string in Credential.revocationRegistryId)\n const timestamp = attribute.timestamp\n\n let revocationState: CredentialRevocationState | undefined\n let revocationRegistryDefinition: RevocationRegistryDefinition | undefined\n try {\n if (timestamp && credentialRevocationId && revocationRegistryId) {\n if (!options.revocationRegistries[revocationRegistryId]) {\n throw new AnonCredsRsError(`Revocation Registry ${revocationRegistryId} not found`)\n }\n\n const { definition, revocationStatusLists, tailsFilePath } =\n options.revocationRegistries[revocationRegistryId]\n\n // Extract revocation status list for the given timestamp\n const revocationStatusList = revocationStatusLists[timestamp]\n if (!revocationStatusList) {\n throw new CredoError(\n `Revocation status list for revocation registry ${revocationRegistryId} and timestamp ${timestamp} not found in revocation status lists. All revocation status lists must be present.`\n )\n }\n\n revocationRegistryDefinition = RevocationRegistryDefinition.fromJson(definition as unknown as JsonObject)\n revocationState = CredentialRevocationState.create({\n revocationRegistryIndex: Number(credentialRevocationId),\n revocationRegistryDefinition,\n tailsPath: tailsFilePath,\n revocationStatusList: RevocationStatusList.fromJson(revocationStatusList as unknown as JsonObject),\n })\n }\n\n const credential =\n credentialRecord instanceof W3cCredentialRecord\n ? await this.w3cToLegacyCredential(agentContext, {\n credential: credentialRecord.credential as W3cJsonLdVerifiableCredential,\n })\n : (credentialRecord.credential as AnonCredsCredential)\n\n if (proofUsesUnqualifiedIdentifiers) {\n credential.schema_id = schemaId\n credential.cred_def_id = credentialDefinitionId\n credential.rev_reg_id = revocationRegistryId != null ? revocationRegistryId : undefined\n }\n return {\n linkSecretId,\n credentialId: attribute.credentialId,\n credentialEntry: {\n credential: credential as unknown as JsonObject,\n revocationState: revocationState?.toJson(),\n timestamp,\n },\n }\n } finally {\n revocationState?.handle.clear()\n revocationRegistryDefinition?.handle.clear()\n }\n }\n\n const credentialsProve: CredentialProve[] = []\n const credentials: { linkSecretId: string; credentialEntry: CredentialEntry; credentialId: string }[] = []\n\n let entryIndex = 0\n for (const referent in selectedCredentials.attributes) {\n const attribute = selectedCredentials.attributes[referent]\n\n // If the credentialId with the same timestamp is already present, we will use the existing entry, so that the proof is created\n // showing the attributes come from the same cred, rather than different ones.\n const existingCredentialIndex = credentials.findIndex(\n (credential) =>\n credential.credentialId === attribute.credentialId &&\n attribute.timestamp === credential.credentialEntry.timestamp\n )\n\n if (existingCredentialIndex !== -1) {\n credentialsProve.push({\n entryIndex: existingCredentialIndex,\n isPredicate: false,\n referent,\n reveal: attribute.revealed,\n })\n } else {\n credentials.push(await credentialEntryFromAttribute(attribute))\n credentialsProve.push({ entryIndex, isPredicate: false, referent, reveal: attribute.revealed })\n entryIndex = entryIndex + 1\n }\n }\n\n for (const referent in selectedCredentials.predicates) {\n const predicate = selectedCredentials.predicates[referent]\n\n // If the credentialId with the same timestamp is already present, we will use the existing entry, so that the proof is created\n // showing the attributes come from the same cred, rather than different ones.\n const existingCredentialIndex = credentials.findIndex(\n (credential) =>\n credential.credentialId === predicate.credentialId &&\n predicate.timestamp === credential.credentialEntry.timestamp\n )\n\n if (existingCredentialIndex !== -1) {\n credentialsProve.push({ entryIndex: existingCredentialIndex, isPredicate: true, referent, reveal: true })\n } else {\n credentials.push(await credentialEntryFromAttribute(predicate))\n credentialsProve.push({ entryIndex, isPredicate: true, referent, reveal: true })\n entryIndex = entryIndex + 1\n }\n }\n\n const linkSecretIds = credentials.map((item) => item.linkSecretId)\n const linkSecretId = assertLinkSecretsMatch(agentContext, linkSecretIds)\n const linkSecret = await getLinkSecret(agentContext, linkSecretId)\n\n presentation = Presentation.create({\n credentialDefinitions: rsCredentialDefinitions,\n schemas: rsSchemas,\n presentationRequest: proofRequest as unknown as JsonObject,\n credentials: credentials.map((entry) => entry.credentialEntry),\n credentialsProve,\n selfAttest: selectedCredentials.selfAttestedAttributes,\n linkSecret,\n })\n\n return presentation.toJson() as unknown as AnonCredsProof\n } finally {\n presentation?.handle.clear()\n }\n }\n\n public async createCredentialRequest(\n agentContext: AgentContext,\n options: CreateCredentialRequestOptions\n ): Promise<CreateCredentialRequestReturn> {\n const { useLegacyProverDid, credentialDefinition, credentialOffer } = options\n let createReturnObj:\n | { credentialRequest: CredentialRequest; credentialRequestMetadata: CredentialRequestMetadata }\n | undefined\n try {\n const linkSecretRepository = agentContext.dependencyManager.resolve(AnonCredsLinkSecretRepository)\n\n // If a link secret is specified, use it. Otherwise, attempt to use default link secret\n let linkSecretRecord = options.linkSecretId\n ? await linkSecretRepository.getByLinkSecretId(agentContext, options.linkSecretId)\n : await linkSecretRepository.findDefault(agentContext)\n\n // No default link secret. Automatically create one if set on module config\n if (!linkSecretRecord) {\n const moduleConfig = agentContext.dependencyManager.resolve(AnonCredsModuleConfig)\n if (!moduleConfig.autoCreateLinkSecret) {\n throw new AnonCredsRsError(\n 'No link secret provided to createCredentialRequest and no default link secret has been found'\n )\n }\n const { linkSecretId, linkSecretValue } = await this.createLinkSecret(agentContext, {})\n linkSecretRecord = await storeLinkSecret(agentContext, { linkSecretId, linkSecretValue, setAsDefault: true })\n }\n\n if (!linkSecretRecord.value) {\n throw new AnonCredsRsError('Link Secret value not stored')\n }\n\n const isLegacyIdentifier = credentialOffer.cred_def_id.match(unqualifiedCredentialDefinitionIdRegex)\n if (!isLegacyIdentifier && useLegacyProverDid) {\n throw new CredoError('Cannot use legacy prover_did with non-legacy identifiers')\n }\n createReturnObj = CredentialRequest.create({\n entropy: !useLegacyProverDid || !isLegacyIdentifier ? anoncreds.generateNonce() : undefined,\n proverDid: useLegacyProverDid\n ? TypedArrayEncoder.toBase58(TypedArrayEncoder.fromString(anoncreds.generateNonce().slice(0, 16)))\n : undefined,\n credentialDefinition: credentialDefinition as unknown as JsonObject,\n credentialOffer: credentialOffer as unknown as JsonObject,\n linkSecret: linkSecretRecord.value,\n linkSecretId: linkSecretRecord.linkSecretId,\n })\n\n return {\n credentialRequest: createReturnObj.credentialRequest.toJson() as unknown as AnonCredsCredentialRequest,\n credentialRequestMetadata:\n createReturnObj.credentialRequestMetadata.toJson() as unknown as AnonCredsCredentialRequestMetadata,\n }\n } finally {\n createReturnObj?.credentialRequest.handle.clear()\n createReturnObj?.credentialRequestMetadata.handle.clear()\n }\n }\n\n public async w3cToLegacyCredential(_agentContext: AgentContext, options: W3cToLegacyCredentialOptions) {\n const credentialJson = JsonTransformer.toJSON(options.credential)\n const w3cAnonCredsCredentialObj = W3cAnonCredsCredential.fromJson(credentialJson)\n const w3cCredentialObj = w3cAnonCredsCredentialObj.toLegacy()\n const legacyCredential = w3cCredentialObj.toJson() as unknown as AnonCredsCredential\n return legacyCredential\n }\n\n public async processW3cCredential(\n agentContext: AgentContext,\n credential: W3cJsonLdVerifiableCredential,\n processOptions: {\n credentialDefinition: AnonCredsCredentialDefinition\n credentialRequestMetadata: AnonCredsCredentialRequestMetadata\n revocationRegistryDefinition: AnonCredsRevocationRegistryDefinition | undefined\n }\n ) {\n const { credentialRequestMetadata, revocationRegistryDefinition, credentialDefinition } = processOptions\n\n const processCredentialOptions = {\n credentialRequestMetadata: credentialRequestMetadata as unknown as JsonObject,\n linkSecret: await getLinkSecret(agentContext, credentialRequestMetadata.link_secret_name),\n revocationRegistryDefinition: revocationRegistryDefinition as unknown as JsonObject,\n credentialDefinition: credentialDefinition as unknown as JsonObject,\n }\n\n const credentialJson = JsonTransformer.toJSON(credential)\n const w3cAnonCredsCredential = W3cAnonCredsCredential.fromJson(credentialJson)\n const processedW3cAnonCredsCredential = w3cAnonCredsCredential.process(processCredentialOptions)\n\n const processedW3cJsonLdVerifiableCredential = JsonTransformer.fromJSON(\n processedW3cAnonCredsCredential.toJson(),\n W3cJsonLdVerifiableCredential\n )\n return processedW3cJsonLdVerifiableCredential\n }\n\n public async legacyToW3cCredential(agentContext: AgentContext, options: LegacyToW3cCredentialOptions) {\n const { credential, issuerId, processOptions } = options\n let w3cCredential: W3cJsonLdVerifiableCredential\n\n let anonCredsCredential: Credential | undefined\n let w3cCredentialObj: W3cAnonCredsCredential | undefined\n try {\n anonCredsCredential = Credential.fromJson(credential as unknown as JsonObject)\n w3cCredentialObj = anonCredsCredential.toW3c({ issuerId, w3cVersion: '1.1' })\n\n const w3cJsonLdVerifiableCredential = JsonTransformer.fromJSON(\n w3cCredentialObj.toJson(),\n W3cJsonLdVerifiableCredential\n )\n\n w3cCredential = processOptions\n ? await this.processW3cCredential(agentContext, w3cJsonLdVerifiableCredential, processOptions)\n : w3cJsonLdVerifiableCredential\n } finally {\n anonCredsCredential?.handle?.clear()\n w3cCredentialObj?.handle?.clear()\n }\n\n return w3cCredential\n }\n\n public async storeW3cCredential(\n agentContext: AgentContext,\n options: {\n credential: W3cJsonLdVerifiableCredential\n credentialDefinitionId: string\n schema: AnonCredsSchema\n credentialDefinition: AnonCredsCredentialDefinition\n revocationRegistryDefinition?: AnonCredsRevocationRegistryDefinition\n revocationRegistryId?: string\n credentialRequestMetadata: AnonCredsCredentialRequestMetadata\n }\n ) {\n const {\n credential,\n credentialRequestMetadata,\n schema,\n credentialDefinition,\n credentialDefinitionId,\n revocationRegistryId,\n } = options\n\n const methodName = agentContext.dependencyManager\n .resolve(AnonCredsRegistryService)\n .getRegistryForIdentifier(agentContext, credential.issuerId).methodName\n\n // this thows an error if the link secret is not found\n await getLinkSecret(agentContext, credentialRequestMetadata.link_secret_name)\n\n const { revocationRegistryIndex } = W3cAnonCredsCredential.fromJson(JsonTransformer.toJSON(credential))\n\n if (Array.isArray(credential.credentialSubject)) {\n throw new CredoError('Credential subject must be an object, not an array.')\n }\n\n const anonCredsTags = getW3cRecordAnonCredsTags({\n credentialSubject: credential.credentialSubject,\n issuerId: credential.issuerId,\n schema,\n schemaId: credentialDefinition.schemaId,\n credentialDefinitionId,\n revocationRegistryId,\n credentialRevocationId: revocationRegistryIndex?.toString(),\n linkSecretId: credentialRequestMetadata.link_secret_name,\n methodName,\n })\n\n const w3cCredentialService = agentContext.dependencyManager.resolve(W3cCredentialService)\n const w3cCredentialRecord = await w3cCredentialService.storeCredential(agentContext, { credential })\n\n const anonCredsCredentialMetadata: W3cAnonCredsCredentialMetadata = {\n credentialRevocationId: anonCredsTags.anonCredsCredentialRevocationId,\n linkSecretId: anonCredsTags.anonCredsLinkSecretId,\n methodName: anonCredsTags.anonCredsMethodName,\n }\n\n w3cCredentialRecord.setTags(anonCredsTags)\n w3cCredentialRecord.metadata.set(W3cAnonCredsCredentialMetadataKey, anonCredsCredentialMetadata)\n\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n await w3cCredentialRepository.update(agentContext, w3cCredentialRecord)\n\n return w3cCredentialRecord\n }\n\n public async storeCredential(agentContext: AgentContext, options: StoreCredentialOptions): Promise<string> {\n const {\n credential,\n credentialDefinition,\n credentialDefinitionId,\n credentialRequestMetadata,\n schema,\n revocationRegistry,\n } = options\n\n const w3cJsonLdCredential =\n credential instanceof W3cJsonLdVerifiableCredential\n ? credential\n : await this.legacyToW3cCredential(agentContext, {\n credential,\n issuerId: credentialDefinition.issuerId,\n processOptions: {\n credentialRequestMetadata,\n credentialDefinition,\n revocationRegistryDefinition: revocationRegistry?.definition,\n },\n })\n\n const w3cCredentialRecord = await this.storeW3cCredential(agentContext, {\n credentialRequestMetadata,\n credential: w3cJsonLdCredential,\n credentialDefinitionId,\n schema,\n credentialDefinition,\n revocationRegistryDefinition: revocationRegistry?.definition,\n revocationRegistryId: revocationRegistry?.id,\n })\n\n return w3cCredentialRecord.id\n }\n\n public async getCredential(\n agentContext: AgentContext,\n options: GetCredentialOptions\n ): Promise<AnonCredsCredentialInfo> {\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n const w3cCredentialRecord = await w3cCredentialRepository.findById(agentContext, options.id)\n if (w3cCredentialRecord) {\n return getAnoncredsCredentialInfoFromRecord(w3cCredentialRecord, options.useUnqualifiedIdentifiersIfPresent)\n }\n\n const anonCredsCredentialRepository = agentContext.dependencyManager.resolve(AnonCredsCredentialRepository)\n const anonCredsCredentialRecord = await anonCredsCredentialRepository.getByCredentialId(agentContext, options.id)\n\n agentContext.config.logger.warn(\n [\n `Querying legacy credential repository for credential with id ${options.id}.`,\n 'Please run the migration script to migrate credentials to the new w3c format.',\n ].join('\\n')\n )\n\n return getAnoncredsCredentialInfoFromRecord(anonCredsCredentialRecord)\n }\n\n private async getLegacyCredentials(\n agentContext: AgentContext,\n options: GetCredentialsOptions\n ): Promise<AnonCredsCredentialInfo[]> {\n const credentialRecords = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialRepository)\n .findByQuery(agentContext, {\n credentialDefinitionId: options.credentialDefinitionId,\n schemaId: options.schemaId,\n issuerId: options.issuerId,\n schemaName: options.schemaName,\n schemaVersion: options.schemaVersion,\n schemaIssuerId: options.schemaIssuerId,\n methodName: options.methodName,\n })\n\n return credentialRecords.map((credentialRecord) => getAnoncredsCredentialInfoFromRecord(credentialRecord))\n }\n\n public async getCredentials(\n agentContext: AgentContext,\n options: GetCredentialsOptions\n ): Promise<AnonCredsCredentialInfo[]> {\n const credentialRecords = await agentContext.dependencyManager\n .resolve(W3cCredentialRepository)\n .findByQuery(agentContext, {\n issuerId: !options.issuerId || isUnqualifiedIndyDid(options.issuerId) ? undefined : options.issuerId,\n anonCredsCredentialDefinitionId:\n !options.credentialDefinitionId || isUnqualifiedCredentialDefinitionId(options.credentialDefinitionId)\n ? undefined\n : options.credentialDefinitionId,\n anonCredsSchemaId: !options.schemaId || isUnqualifiedSchemaId(options.schemaId) ? undefined : options.schemaId,\n anonCredsSchemaName: options.schemaName,\n anonCredsSchemaVersion: options.schemaVersion,\n anonCredsSchemaIssuerId:\n !options.schemaIssuerId || isUnqualifiedIndyDid(options.schemaIssuerId) ? undefined : options.schemaIssuerId,\n\n anonCredsMethodName: options.methodName,\n anonCredsUnqualifiedSchemaId:\n options.schemaId && isUnqualifiedSchemaId(options.schemaId) ? options.schemaId : undefined,\n anonCredsUnqualifiedIssuerId:\n options.issuerId && isUnqualifiedIndyDid(options.issuerId) ? options.issuerId : undefined,\n anonCredsUnqualifiedSchemaIssuerId:\n options.schemaIssuerId && isUnqualifiedIndyDid(options.schemaIssuerId) ? options.schemaIssuerId : undefined,\n anonCredsUnqualifiedCredentialDefinitionId:\n options.credentialDefinitionId && isUnqualifiedCredentialDefinitionId(options.credentialDefinitionId)\n ? options.credentialDefinitionId\n : undefined,\n })\n\n const credentials = credentialRecords.map((credentialRecord) =>\n getAnoncredsCredentialInfoFromRecord(credentialRecord)\n )\n const legacyCredentials = await this.getLegacyCredentials(agentContext, options)\n\n if (legacyCredentials.length > 0) {\n agentContext.config.logger.warn(\n 'Queried credentials include legacy credentials. Please run the migration script to migrate credentials to the new w3c format.'\n )\n }\n return [...legacyCredentials, ...credentials]\n }\n\n public async deleteCredential(agentContext: AgentContext, id: string): Promise<void> {\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n const w3cCredentialRecord = await w3cCredentialRepository.findById(agentContext, id)\n\n if (w3cCredentialRecord) {\n await w3cCredentialRepository.delete(agentContext, w3cCredentialRecord)\n return\n }\n\n const anoncredsCredentialRepository = agentContext.dependencyManager.resolve(AnonCredsCredentialRepository)\n const anoncredsCredentialRecord = await anoncredsCredentialRepository.getByCredentialId(agentContext, id)\n await anoncredsCredentialRepository.delete(agentContext, anoncredsCredentialRecord)\n }\n private async getLegacyCredentialsForProofRequest(\n agentContext: AgentContext,\n options: GetCredentialsForProofRequestOptions\n ): Promise<GetCredentialsForProofRequestReturn> {\n const proofRequest = options.proofRequest\n const referent = options.attributeReferent\n\n const requestedAttribute =\n proofRequest.requested_attributes[referent] ?? proofRequest.requested_predicates[referent]\n\n if (!requestedAttribute) {\n throw new AnonCredsRsError('Referent not found in proof request')\n }\n\n const $and = []\n\n // Make sure the attribute(s) that are requested are present using the marker tag\n const attributes = requestedAttribute.names ?? [requestedAttribute.name]\n const attributeQuery: SimpleQuery<AnonCredsCredentialRecord> = {}\n for (const attribute of attributes) {\n attributeQuery[`anonCredsAttr::${attribute}::marker`] = true\n }\n $and.push(attributeQuery)\n\n // Add query for proof request restrictions\n if (requestedAttribute.restrictions) {\n const restrictionQuery = this.queryLegacyFromRestrictions(requestedAttribute.restrictions)\n $and.push(restrictionQuery)\n }\n\n // Add extra query\n // TODO: we're not really typing the extraQuery, and it will work differently based on the anoncreds implmentation\n // We should make the allowed properties more strict\n if (options.extraQuery) {\n $and.push(options.extraQuery)\n }\n\n const credentials = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialRepository)\n .findByQuery(agentContext, {\n $and,\n })\n\n return credentials.map((credentialRecord) => {\n return {\n credentialInfo: getAnoncredsCredentialInfoFromRecord(credentialRecord),\n interval: proofRequest.non_revoked,\n }\n })\n }\n\n public async getCredentialsForProofRequest(\n agentContext: AgentContext,\n options: GetCredentialsForProofRequestOptions\n ): Promise<GetCredentialsForProofRequestReturn> {\n const proofRequest = options.proofRequest\n const referent = options.attributeReferent\n\n const requestedAttribute =\n proofRequest.requested_attributes[referent] ?? proofRequest.requested_predicates[referent]\n\n if (!requestedAttribute) {\n throw new AnonCredsRsError('Referent not found in proof request')\n }\n\n const $and = []\n\n const useUnqualifiedIdentifiers = proofRequestUsesUnqualifiedIdentifiers(proofRequest)\n\n // Make sure the attribute(s) that are requested are present using the marker tag\n const attributes = requestedAttribute.names ?? [requestedAttribute.name]\n const attributeQuery: SimpleQuery<W3cCredentialRecord> = {}\n for (const attribute of attributes) {\n attributeQuery[`anonCredsAttr::${attribute}::marker`] = true\n }\n $and.push(attributeQuery)\n\n // Add query for proof request restrictions\n if (requestedAttribute.restrictions) {\n const restrictionQuery = this.queryFromRestrictions(requestedAttribute.restrictions)\n $and.push(restrictionQuery)\n }\n\n // Add extra query\n // TODO: we're not really typing the extraQuery, and it will work differently based on the anoncreds implmentation\n // We should make the allowed properties more strict\n if (options.extraQuery) {\n $and.push(options.extraQuery)\n }\n\n const w3cCredentialRepository = agentContext.dependencyManager.resolve(W3cCredentialRepository)\n const credentials = await w3cCredentialRepository.findByQuery(agentContext, { $and })\n const legacyCredentialWithMetadata = await this.getLegacyCredentialsForProofRequest(agentContext, options)\n\n if (legacyCredentialWithMetadata.length > 0) {\n agentContext.config.logger.warn(\n [\n 'Including legacy credentials in proof request.',\n 'Please run the migration script to migrate credentials to the new w3c format.',\n ].join('\\n')\n )\n }\n\n const credentialWithMetadata = credentials.map((credentialRecord) => {\n return {\n credentialInfo: getAnoncredsCredentialInfoFromRecord(credentialRecord, useUnqualifiedIdentifiers),\n interval: proofRequest.non_revoked,\n }\n })\n\n return [...credentialWithMetadata, ...legacyCredentialWithMetadata]\n }\n\n private queryFromRestrictions(restrictions: AnonCredsProofRequestRestriction[]) {\n const query: Query<W3cCredentialRecord>[] = []\n\n const { restrictions: parsedRestrictions } = JsonTransformer.fromJSON({ restrictions }, AnonCredsRestrictionWrapper)\n\n for (const restriction of parsedRestrictions) {\n const queryElements: SimpleQuery<W3cCredentialRecord> = {}\n\n if (restriction.credentialDefinitionId) {\n if (isUnqualifiedCredentialDefinitionId(restriction.credentialDefinitionId)) {\n queryElements.anonCredsUnqualifiedCredentialDefinitionId = restriction.credentialDefinitionId\n } else {\n queryElements.anonCredsCredentialDefinitionId = restriction.credentialDefinitionId\n }\n }\n\n if (restriction.issuerId || restriction.issuerDid) {\n const issuerId = (restriction.issuerId ?? restriction.issuerDid) as string\n if (isUnqualifiedIndyDid(issuerId)) {\n queryElements.anonCredsUnqualifiedIssuerId = issuerId\n } else {\n queryElements.issuerId = issuerId\n }\n }\n\n if (restriction.schemaId) {\n if (isUnqualifiedSchemaId(restriction.schemaId)) {\n queryElements.anonCredsUnqualifiedSchemaId = restriction.schemaId\n } else {\n queryElements.anonCredsSchemaId = restriction.schemaId\n }\n }\n\n if (restriction.schemaIssuerId || restriction.schemaIssuerDid) {\n const schemaIssuerId = (restriction.schemaIssuerId ?? restriction.schemaIssuerDid) as string\n if (isUnqualifiedIndyDid(schemaIssuerId)) {\n queryElements.anonCredsUnqualifiedSchemaIssuerId = schemaIssuerId\n } else {\n queryElements.anonCredsSchemaIssuerId = schemaIssuerId\n }\n }\n\n if (restriction.schemaName) {\n queryElements.anonCredsSchemaName = restriction.schemaName\n }\n\n if (restriction.schemaVersion) {\n queryElements.anonCredsSchemaVersion = restriction.schemaVersion\n }\n\n for (const [attributeName, attributeValue] of Object.entries(restriction.attributeValues)) {\n queryElements[`anonCredsAttr::${attributeName}::value`] = attributeValue\n }\n\n for (const [attributeName, isAvailable] of Object.entries(restriction.attributeMarkers)) {\n if (isAvailable) {\n queryElements[`anonCredsAttr::${attributeName}::marker`] = isAvailable\n }\n }\n\n query.push(queryElements)\n }\n\n return query.length === 1 ? query[0] : { $or: query }\n }\n\n private queryLegacyFromRestrictions(restrictions: AnonCredsProofRequestRestriction[]) {\n const query: Query<AnonCredsCredentialRecord>[] = []\n\n const { restrictions: parsedRestrictions } = JsonTransformer.fromJSON({ restrictions }, AnonCredsRestrictionWrapper)\n\n for (const restriction of parsedRestrictions) {\n const queryElements: SimpleQuery<AnonCredsCredentialRecord> = {}\n const additionalQueryElements: SimpleQuery<AnonCredsCredentialRecord> = {}\n\n if (restriction.credentialDefinitionId) {\n queryElements.credentialDefinitionId = restriction.credentialDefinitionId\n if (isUnqualifiedCredentialDefinitionId(restriction.credentialDefinitionId)) {\n additionalQueryElements.credentialDefinitionId = restriction.credentialDefinitionId\n }\n }\n\n if (restriction.issuerId || restriction.issuerDid) {\n const issuerId = (restriction.issuerId ?? restriction.issuerDid) as string\n queryElements.issuerId = issuerId\n if (isUnqualifiedIndyDid(issuerId)) {\n additionalQueryElements.issuerId = issuerId\n }\n }\n\n if (restriction.schemaId) {\n queryElements.schemaId = restriction.schemaId\n if (isUnqualifiedSchemaId(restriction.schemaId)) {\n additionalQueryElements.schemaId = restriction.schemaId\n }\n }\n\n if (restriction.schemaIssuerId || restriction.schemaIssuerDid) {\n const issuerId = (restriction.schemaIssuerId ?? restriction.schemaIssuerDid) as string\n queryElements.schemaIssuerId = issuerId\n if (isUnqualifiedIndyDid(issuerId)) {\n additionalQueryElements.schemaIssuerId = issuerId\n }\n }\n\n if (restriction.schemaName) {\n queryElements.schemaName = restriction.schemaName\n }\n\n if (restriction.schemaVersion) {\n queryElements.schemaVersion = restriction.schemaVersion\n }\n\n for (const [attributeName, attributeValue] of Object.entries(restriction.attributeValues)) {\n queryElements[`attr::${attributeName}::value`] = attributeValue\n }\n\n for (const [attributeName, isAvailable] of Object.entries(restriction.attributeMarkers)) {\n if (isAvailable) {\n queryElements[`attr::${attributeName}::marker`] = isAvailable\n }\n }\n\n query.push(queryElements)\n if (Object.keys(additionalQueryElements).length > 0) {\n query.push(additionalQueryElements)\n }\n }\n\n return query.length === 1 ? query[0] : { $or: query }\n }\n\n private getPresentationMetadata = async (\n agentContext: AgentContext,\n options: {\n credentialsWithMetadata: CredentialWithRevocationMetadata[]\n credentialsProve: AnonCredsCredentialProve[]\n }\n ) => {\n const { credentialsWithMetadata, credentialsProve } = options\n\n const credentials: W3cCredentialEntry[] = await Promise.all(\n credentialsWithMetadata.map(async ({ credential, nonRevoked }) => {\n const credentialJson = JsonTransformer.toJSON(credential)\n const { revocationRegistryIndex, revocationRegistryId, timestamp } =\n W3cAnonCredsCredential.fromJson(credentialJson)\n\n if (!nonRevoked) return { credential: credentialJson, revocationState: undefined, timestamp: undefined }\n\n if (!revocationRegistryId || !revocationRegistryIndex) throw new CredoError('Missing revocation metadata')\n\n const { revocationState, updatedTimestamp } = await getRevocationMetadata(agentContext, {\n nonRevokedInterval: nonRevoked,\n timestamp,\n revocationRegistryIndex,\n revocationRegistryId,\n })\n\n return { credential: credentialJson, revocationState, timestamp: updatedTimestamp }\n })\n )\n\n return { credentialsProve, credentials }\n }\n\n public async createW3cPresentation(agentContext: AgentContext, options: CreateW3cPresentationOptions) {\n const { credentialsProve, credentials } = await this.getPresentationMetadata(agentContext, {\n credentialsWithMetadata: options.credentialsWithRevocationMetadata,\n credentialsProve: options.credentialsProve,\n })\n\n let w3cAnonCredsPresentation: W3cAnonCredsPresentation | undefined\n let w3cPresentation: W3cJsonLdVerifiablePresentation\n try {\n w3cAnonCredsPresentation = W3cAnonCredsPresentation.create({\n credentials,\n credentialsProve,\n schemas: options.schemas as unknown as Record<string, JsonObject>,\n credentialDefinitions: options.credentialDefinitions as unknown as Record<string, JsonObject>,\n presentationRequest: options.proofRequest as unknown as JsonObject,\n linkSecret: await getLinkSecret(agentContext, options.linkSecretId),\n })\n const presentationJson = w3cAnonCredsPresentation.toJson() as unknown as JsonObject\n w3cPresentation = JsonTransformer.fromJSON(presentationJson, W3cJsonLdVerifiablePresentation)\n } finally {\n w3cAnonCredsPresentation?.handle.clear()\n }\n\n return w3cPresentation\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
-
const require_decorate = require('../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js');
|
|
3
2
|
const require_AnonCredsRsError = require('../error/AnonCredsRsError.js');
|
|
4
3
|
require('../error/index.js');
|
|
4
|
+
const require_decorate = require('../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js');
|
|
5
|
+
const require_AnonCredsCredentialDefinitionPrivateRepository = require('../repository/AnonCredsCredentialDefinitionPrivateRepository.js');
|
|
5
6
|
const require_indyIdentifiers = require('../utils/indyIdentifiers.js');
|
|
6
7
|
const require_AnonCredsCredentialDefinitionRepository = require('../repository/AnonCredsCredentialDefinitionRepository.js');
|
|
7
|
-
const require_AnonCredsCredentialDefinitionPrivateRepository = require('../repository/AnonCredsCredentialDefinitionPrivateRepository.js');
|
|
8
8
|
const require_AnonCredsKeyCorrectnessProofRepository = require('../repository/AnonCredsKeyCorrectnessProofRepository.js');
|
|
9
|
-
const require_AnonCredsRevocationRegistryDefinitionRepository = require('../repository/AnonCredsRevocationRegistryDefinitionRepository.js');
|
|
10
9
|
const require_AnonCredsRevocationRegistryDefinitionPrivateRecord = require('../repository/AnonCredsRevocationRegistryDefinitionPrivateRecord.js');
|
|
11
10
|
const require_AnonCredsRevocationRegistryDefinitionPrivateRepository = require('../repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.js');
|
|
11
|
+
const require_AnonCredsRevocationRegistryDefinitionRepository = require('../repository/AnonCredsRevocationRegistryDefinitionRepository.js');
|
|
12
12
|
require('../repository/index.js');
|
|
13
13
|
let __credo_ts_core = require("@credo-ts/core");
|
|
14
14
|
__credo_ts_core = require_rolldown_runtime.__toESM(__credo_ts_core);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.mjs";
|
|
2
1
|
import { AnonCredsRsError } from "../error/AnonCredsRsError.mjs";
|
|
3
2
|
import "../error/index.mjs";
|
|
3
|
+
import { __decorate } from "../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.mjs";
|
|
4
|
+
import { AnonCredsCredentialDefinitionPrivateRepository } from "../repository/AnonCredsCredentialDefinitionPrivateRepository.mjs";
|
|
4
5
|
import { getUnqualifiedSchemaId, isUnqualifiedCredentialDefinitionId, parseIndyDid, parseIndySchemaId } from "../utils/indyIdentifiers.mjs";
|
|
5
6
|
import { AnonCredsCredentialDefinitionRepository } from "../repository/AnonCredsCredentialDefinitionRepository.mjs";
|
|
6
|
-
import { AnonCredsCredentialDefinitionPrivateRepository } from "../repository/AnonCredsCredentialDefinitionPrivateRepository.mjs";
|
|
7
7
|
import { AnonCredsKeyCorrectnessProofRepository } from "../repository/AnonCredsKeyCorrectnessProofRepository.mjs";
|
|
8
|
-
import { AnonCredsRevocationRegistryDefinitionRepository } from "../repository/AnonCredsRevocationRegistryDefinitionRepository.mjs";
|
|
9
8
|
import { AnonCredsRevocationRegistryState } from "../repository/AnonCredsRevocationRegistryDefinitionPrivateRecord.mjs";
|
|
10
9
|
import { AnonCredsRevocationRegistryDefinitionPrivateRepository } from "../repository/AnonCredsRevocationRegistryDefinitionPrivateRepository.mjs";
|
|
10
|
+
import { AnonCredsRevocationRegistryDefinitionRepository } from "../repository/AnonCredsRevocationRegistryDefinitionRepository.mjs";
|
|
11
11
|
import "../repository/index.mjs";
|
|
12
12
|
import { CredoError, injectable } from "@credo-ts/core";
|
|
13
13
|
import { Credential, CredentialDefinition, CredentialOffer, CredentialRevocationConfig, RevocationRegistryDefinition, RevocationRegistryDefinitionPrivate, RevocationStatusList, Schema } from "@hyperledger/anoncreds-shared";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnonCredsRsIssuerService.mjs","names":["AnonCredsRsIssuerService","schema: Schema | undefined","createReturnObj:\n | {\n credentialDefinition: CredentialDefinition\n credentialDefinitionPrivate: CredentialDefinitionPrivate\n keyCorrectnessProof: KeyCorrectnessProof\n }\n | undefined","createReturnObj:\n | {\n revocationRegistryDefinition: RevocationRegistryDefinition\n revocationRegistryDefinitionPrivate: RevocationRegistryDefinitionPrivate\n }\n | undefined","revocationStatusList: RevocationStatusList | undefined","updatedRevocationStatusList: RevocationStatusList | undefined","revocationRegistryDefinitionObj: RevocationRegistryDefinition | undefined","credentialOffer: CredentialOffer | undefined","credential: Credential | undefined","attributeRawValues: Record<string, string>","attributeEncodedValues: Record<string, string>","revocationConfiguration: CredentialRevocationConfig | undefined"],"sources":["../../src/anoncreds-rs/AnonCredsRsIssuerService.ts"],"sourcesContent":["import type { AgentContext } from '@credo-ts/core'\nimport type { CredentialDefinitionPrivate, JsonObject, KeyCorrectnessProof } from '@hyperledger/anoncreds-shared'\nimport type {\n AnonCredsCredential,\n AnonCredsCredentialDefinition,\n AnonCredsCredentialOffer,\n AnonCredsRevocationRegistryDefinition,\n AnonCredsRevocationStatusList,\n AnonCredsSchema,\n} from '../models'\nimport type {\n AnonCredsIssuerService,\n CreateCredentialDefinitionOptions,\n CreateCredentialDefinitionReturn,\n CreateCredentialOfferOptions,\n CreateCredentialOptions,\n CreateCredentialReturn,\n CreateRevocationRegistryDefinitionOptions,\n CreateRevocationRegistryDefinitionReturn,\n CreateRevocationStatusListOptions,\n CreateSchemaOptions,\n UpdateRevocationStatusListOptions,\n} from '../services'\n\nimport { CredoError, injectable } from '@credo-ts/core'\nimport {\n Credential,\n CredentialDefinition,\n CredentialOffer,\n CredentialRevocationConfig,\n RevocationRegistryDefinition,\n RevocationRegistryDefinitionPrivate,\n RevocationStatusList,\n Schema,\n} from '@hyperledger/anoncreds-shared'\n\nimport { AnonCredsRsError } from '../error'\nimport {\n AnonCredsCredentialDefinitionPrivateRepository,\n AnonCredsCredentialDefinitionRepository,\n AnonCredsKeyCorrectnessProofRepository,\n AnonCredsRevocationRegistryDefinitionPrivateRepository,\n AnonCredsRevocationRegistryDefinitionRepository,\n AnonCredsRevocationRegistryState,\n} from '../repository'\nimport {\n getUnqualifiedSchemaId,\n isUnqualifiedCredentialDefinitionId,\n parseIndyDid,\n parseIndySchemaId,\n} from '../utils/indyIdentifiers'\n\n@injectable()\nexport class AnonCredsRsIssuerService implements AnonCredsIssuerService {\n public async createSchema(_agentContext: AgentContext, options: CreateSchemaOptions): Promise<AnonCredsSchema> {\n const { issuerId, name, version, attrNames: attributeNames } = options\n\n let schema: Schema | undefined\n try {\n const schema = Schema.create({\n issuerId,\n name,\n version,\n attributeNames,\n })\n\n return schema.toJson() as unknown as AnonCredsSchema\n } finally {\n schema?.handle.clear()\n }\n }\n\n public async createCredentialDefinition(\n _agentContext: AgentContext,\n options: CreateCredentialDefinitionOptions\n ): Promise<CreateCredentialDefinitionReturn> {\n const { tag, supportRevocation, schema, issuerId, schemaId } = options\n\n let createReturnObj:\n | {\n credentialDefinition: CredentialDefinition\n credentialDefinitionPrivate: CredentialDefinitionPrivate\n keyCorrectnessProof: KeyCorrectnessProof\n }\n | undefined\n try {\n createReturnObj = CredentialDefinition.create({\n schema: schema as unknown as JsonObject,\n issuerId,\n schemaId,\n tag,\n supportRevocation,\n signatureType: 'CL',\n })\n\n return {\n credentialDefinition: createReturnObj.credentialDefinition.toJson() as unknown as AnonCredsCredentialDefinition,\n credentialDefinitionPrivate: createReturnObj.credentialDefinitionPrivate.toJson(),\n keyCorrectnessProof: createReturnObj.keyCorrectnessProof.toJson(),\n }\n } finally {\n createReturnObj?.credentialDefinition.handle.clear()\n createReturnObj?.credentialDefinitionPrivate.handle.clear()\n createReturnObj?.keyCorrectnessProof.handle.clear()\n }\n }\n\n public async createRevocationRegistryDefinition(\n _agentContext: AgentContext,\n options: CreateRevocationRegistryDefinitionOptions\n ): Promise<CreateRevocationRegistryDefinitionReturn> {\n const { tag, issuerId, credentialDefinition, credentialDefinitionId, maximumCredentialNumber, tailsDirectoryPath } =\n options\n\n let createReturnObj:\n | {\n revocationRegistryDefinition: RevocationRegistryDefinition\n revocationRegistryDefinitionPrivate: RevocationRegistryDefinitionPrivate\n }\n | undefined\n try {\n createReturnObj = RevocationRegistryDefinition.create({\n credentialDefinition: credentialDefinition as unknown as JsonObject,\n credentialDefinitionId,\n issuerId,\n maximumCredentialNumber,\n revocationRegistryType: 'CL_ACCUM',\n tag,\n tailsDirectoryPath,\n })\n\n return {\n revocationRegistryDefinition:\n createReturnObj.revocationRegistryDefinition.toJson() as unknown as AnonCredsRevocationRegistryDefinition,\n revocationRegistryDefinitionPrivate: createReturnObj.revocationRegistryDefinitionPrivate.toJson(),\n }\n } finally {\n createReturnObj?.revocationRegistryDefinition.handle.clear()\n createReturnObj?.revocationRegistryDefinitionPrivate.handle.clear()\n }\n }\n\n public async createRevocationStatusList(\n agentContext: AgentContext,\n options: CreateRevocationStatusListOptions\n ): Promise<AnonCredsRevocationStatusList> {\n const { issuerId, revocationRegistryDefinitionId, revocationRegistryDefinition } = options\n\n const credentialDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionRepository)\n .getByCredentialDefinitionId(agentContext, revocationRegistryDefinition.credDefId)\n\n const revocationRegistryDefinitionPrivateRecord = await agentContext.dependencyManager\n .resolve(AnonCredsRevocationRegistryDefinitionPrivateRepository)\n .getByRevocationRegistryDefinitionId(agentContext, revocationRegistryDefinitionId)\n\n let revocationStatusList: RevocationStatusList | undefined\n try {\n revocationStatusList = RevocationStatusList.create({\n issuanceByDefault: true,\n revocationRegistryDefinitionId,\n credentialDefinition: credentialDefinitionRecord.credentialDefinition as unknown as JsonObject,\n revocationRegistryDefinition: revocationRegistryDefinition as unknown as JsonObject,\n revocationRegistryDefinitionPrivate: revocationRegistryDefinitionPrivateRecord.value as unknown as JsonObject,\n issuerId,\n })\n\n return revocationStatusList.toJson() as unknown as AnonCredsRevocationStatusList\n } finally {\n revocationStatusList?.handle.clear()\n }\n }\n\n public async updateRevocationStatusList(\n agentContext: AgentContext,\n options: UpdateRevocationStatusListOptions\n ): Promise<AnonCredsRevocationStatusList> {\n const { revocationStatusList, revocationRegistryDefinition, issued, revoked, timestamp, tailsFilePath } = options\n\n let updatedRevocationStatusList: RevocationStatusList | undefined\n let revocationRegistryDefinitionObj: RevocationRegistryDefinition | undefined\n\n try {\n updatedRevocationStatusList = RevocationStatusList.fromJson(revocationStatusList as unknown as JsonObject)\n\n if (timestamp && !issued && !revoked) {\n updatedRevocationStatusList.updateTimestamp({\n timestamp,\n })\n } else {\n const credentialDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionRepository)\n .getByCredentialDefinitionId(agentContext, revocationRegistryDefinition.credDefId)\n\n const revocationRegistryDefinitionPrivateRecord = await agentContext.dependencyManager\n .resolve(AnonCredsRevocationRegistryDefinitionPrivateRepository)\n .getByRevocationRegistryDefinitionId(agentContext, revocationStatusList.revRegDefId)\n\n revocationRegistryDefinitionObj = RevocationRegistryDefinition.fromJson({\n ...revocationRegistryDefinition,\n value: { ...revocationRegistryDefinition.value, tailsLocation: tailsFilePath },\n } as unknown as JsonObject)\n updatedRevocationStatusList.update({\n credentialDefinition: credentialDefinitionRecord.credentialDefinition as unknown as JsonObject,\n revocationRegistryDefinition: revocationRegistryDefinitionObj,\n revocationRegistryDefinitionPrivate: revocationRegistryDefinitionPrivateRecord.value,\n issued: options.issued,\n revoked: options.revoked,\n timestamp: timestamp ?? -1, // FIXME: this should be fixed in anoncreds-rs wrapper\n })\n }\n\n return updatedRevocationStatusList.toJson() as unknown as AnonCredsRevocationStatusList\n } finally {\n updatedRevocationStatusList?.handle.clear()\n revocationRegistryDefinitionObj?.handle.clear()\n }\n }\n\n public async createCredentialOffer(\n agentContext: AgentContext,\n options: CreateCredentialOfferOptions\n ): Promise<AnonCredsCredentialOffer> {\n const { credentialDefinitionId } = options\n\n let credentialOffer: CredentialOffer | undefined\n try {\n // The getByCredentialDefinitionId supports both qualified and unqualified identifiers, even though the\n // record is always stored using the qualified identifier.\n const credentialDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionRepository)\n .getByCredentialDefinitionId(agentContext, options.credentialDefinitionId)\n\n // We fetch the keyCorrectnessProof based on the credential definition record id, as the\n // credential definition id passed to this module could be unqualified, and the key correctness\n // proof is only stored using the qualified identifier.\n const keyCorrectnessProofRecord = await agentContext.dependencyManager\n .resolve(AnonCredsKeyCorrectnessProofRepository)\n .getByCredentialDefinitionId(agentContext, credentialDefinitionRecord.credentialDefinitionId)\n\n if (!credentialDefinitionRecord) {\n throw new AnonCredsRsError(`Credential Definition ${credentialDefinitionId} not found`)\n }\n\n let schemaId = credentialDefinitionRecord.credentialDefinition.schemaId\n\n // if the credentialDefinitionId is not qualified, we need to transform the schemaId to also be unqualified\n if (isUnqualifiedCredentialDefinitionId(options.credentialDefinitionId)) {\n const { namespaceIdentifier, schemaName, schemaVersion } = parseIndySchemaId(schemaId)\n schemaId = getUnqualifiedSchemaId(namespaceIdentifier, schemaName, schemaVersion)\n }\n\n credentialOffer = CredentialOffer.create({\n credentialDefinitionId,\n keyCorrectnessProof: keyCorrectnessProofRecord?.value,\n schemaId,\n })\n\n return credentialOffer.toJson() as unknown as AnonCredsCredentialOffer\n } finally {\n credentialOffer?.handle.clear()\n }\n }\n\n public async createCredential(\n agentContext: AgentContext,\n options: CreateCredentialOptions\n ): Promise<CreateCredentialReturn> {\n const {\n credentialOffer,\n credentialRequest,\n credentialValues,\n revocationRegistryDefinitionId,\n revocationStatusList,\n revocationRegistryIndex,\n } = options\n\n const definedRevocationOptions = [\n revocationRegistryDefinitionId,\n revocationStatusList,\n revocationRegistryIndex,\n ].filter((e) => e !== undefined)\n if (definedRevocationOptions.length > 0 && definedRevocationOptions.length < 3) {\n throw new CredoError(\n 'Revocation requires all of revocationRegistryDefinitionId, revocationRegistryIndex and revocationStatusList'\n )\n }\n\n let credential: Credential | undefined\n try {\n const attributeRawValues: Record<string, string> = {}\n const attributeEncodedValues: Record<string, string> = {}\n\n for (const key of Object.keys(credentialValues)) {\n attributeRawValues[key] = credentialValues[key].raw\n attributeEncodedValues[key] = credentialValues[key].encoded\n }\n\n const credentialDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionRepository)\n .getByCredentialDefinitionId(agentContext, options.credentialRequest.cred_def_id)\n\n // We fetch the private record based on the cred def id from the cred def record, as the\n // credential definition id passed to this module could be unqualified, and the private record\n // is only stored using the qualified identifier.\n const credentialDefinitionPrivateRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionPrivateRepository)\n .getByCredentialDefinitionId(agentContext, credentialDefinitionRecord.credentialDefinitionId)\n\n let credentialDefinition = credentialDefinitionRecord.credentialDefinition\n\n if (isUnqualifiedCredentialDefinitionId(options.credentialRequest.cred_def_id)) {\n const { namespaceIdentifier, schemaName, schemaVersion } = parseIndySchemaId(credentialDefinition.schemaId)\n const { namespaceIdentifier: unqualifiedDid } = parseIndyDid(credentialDefinition.issuerId)\n credentialDefinition = {\n ...credentialDefinition,\n schemaId: getUnqualifiedSchemaId(namespaceIdentifier, schemaName, schemaVersion),\n issuerId: unqualifiedDid,\n }\n }\n\n let revocationConfiguration: CredentialRevocationConfig | undefined\n if (revocationRegistryDefinitionId && revocationStatusList && revocationRegistryIndex !== undefined) {\n const revocationRegistryDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsRevocationRegistryDefinitionRepository)\n .getByRevocationRegistryDefinitionId(agentContext, revocationRegistryDefinitionId)\n\n const revocationRegistryDefinitionPrivateRecord = await agentContext.dependencyManager\n .resolve(AnonCredsRevocationRegistryDefinitionPrivateRepository)\n .getByRevocationRegistryDefinitionId(agentContext, revocationRegistryDefinitionId)\n\n if (\n revocationRegistryIndex >= revocationRegistryDefinitionRecord.revocationRegistryDefinition.value.maxCredNum\n ) {\n revocationRegistryDefinitionPrivateRecord.state = AnonCredsRevocationRegistryState.Full\n }\n\n revocationConfiguration = new CredentialRevocationConfig({\n registryDefinition: RevocationRegistryDefinition.fromJson(\n revocationRegistryDefinitionRecord.revocationRegistryDefinition as unknown as JsonObject\n ),\n registryDefinitionPrivate: RevocationRegistryDefinitionPrivate.fromJson(\n revocationRegistryDefinitionPrivateRecord.value\n ),\n statusList: RevocationStatusList.fromJson(revocationStatusList as unknown as JsonObject),\n registryIndex: revocationRegistryIndex,\n })\n }\n credential = Credential.create({\n credentialDefinition: credentialDefinitionRecord.credentialDefinition as unknown as JsonObject,\n credentialOffer: credentialOffer as unknown as JsonObject,\n credentialRequest: credentialRequest as unknown as JsonObject,\n revocationRegistryId: revocationRegistryDefinitionId,\n attributeEncodedValues,\n attributeRawValues,\n credentialDefinitionPrivate: credentialDefinitionPrivateRecord.value,\n revocationConfiguration,\n // FIXME: duplicated input parameter?\n revocationStatusList: revocationStatusList\n ? RevocationStatusList.fromJson(revocationStatusList as unknown as JsonObject)\n : undefined,\n })\n\n return {\n credential: credential.toJson() as unknown as AnonCredsCredential,\n credentialRevocationId: credential.revocationRegistryIndex?.toString(),\n }\n } finally {\n credential?.handle.clear()\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AnonCredsRsIssuerService.mjs","names":["AnonCredsRsIssuerService","schema: Schema | undefined","createReturnObj:\n | {\n credentialDefinition: CredentialDefinition\n credentialDefinitionPrivate: CredentialDefinitionPrivate\n keyCorrectnessProof: KeyCorrectnessProof\n }\n | undefined","createReturnObj:\n | {\n revocationRegistryDefinition: RevocationRegistryDefinition\n revocationRegistryDefinitionPrivate: RevocationRegistryDefinitionPrivate\n }\n | undefined","revocationStatusList: RevocationStatusList | undefined","updatedRevocationStatusList: RevocationStatusList | undefined","revocationRegistryDefinitionObj: RevocationRegistryDefinition | undefined","credentialOffer: CredentialOffer | undefined","credential: Credential | undefined","attributeRawValues: Record<string, string>","attributeEncodedValues: Record<string, string>","revocationConfiguration: CredentialRevocationConfig | undefined"],"sources":["../../src/anoncreds-rs/AnonCredsRsIssuerService.ts"],"sourcesContent":["import type { AgentContext } from '@credo-ts/core'\nimport { CredoError, injectable } from '@credo-ts/core'\nimport type { CredentialDefinitionPrivate, JsonObject, KeyCorrectnessProof } from '@hyperledger/anoncreds-shared'\nimport {\n Credential,\n CredentialDefinition,\n CredentialOffer,\n CredentialRevocationConfig,\n RevocationRegistryDefinition,\n RevocationRegistryDefinitionPrivate,\n RevocationStatusList,\n Schema,\n} from '@hyperledger/anoncreds-shared'\nimport { AnonCredsRsError } from '../error'\nimport type {\n AnonCredsCredential,\n AnonCredsCredentialDefinition,\n AnonCredsCredentialOffer,\n AnonCredsRevocationRegistryDefinition,\n AnonCredsRevocationStatusList,\n AnonCredsSchema,\n} from '../models'\nimport {\n AnonCredsCredentialDefinitionPrivateRepository,\n AnonCredsCredentialDefinitionRepository,\n AnonCredsKeyCorrectnessProofRepository,\n AnonCredsRevocationRegistryDefinitionPrivateRepository,\n AnonCredsRevocationRegistryDefinitionRepository,\n AnonCredsRevocationRegistryState,\n} from '../repository'\nimport type {\n AnonCredsIssuerService,\n CreateCredentialDefinitionOptions,\n CreateCredentialDefinitionReturn,\n CreateCredentialOfferOptions,\n CreateCredentialOptions,\n CreateCredentialReturn,\n CreateRevocationRegistryDefinitionOptions,\n CreateRevocationRegistryDefinitionReturn,\n CreateRevocationStatusListOptions,\n CreateSchemaOptions,\n UpdateRevocationStatusListOptions,\n} from '../services'\nimport {\n getUnqualifiedSchemaId,\n isUnqualifiedCredentialDefinitionId,\n parseIndyDid,\n parseIndySchemaId,\n} from '../utils/indyIdentifiers'\n\n@injectable()\nexport class AnonCredsRsIssuerService implements AnonCredsIssuerService {\n public async createSchema(_agentContext: AgentContext, options: CreateSchemaOptions): Promise<AnonCredsSchema> {\n const { issuerId, name, version, attrNames: attributeNames } = options\n\n let schema: Schema | undefined\n try {\n const schema = Schema.create({\n issuerId,\n name,\n version,\n attributeNames,\n })\n\n return schema.toJson() as unknown as AnonCredsSchema\n } finally {\n schema?.handle.clear()\n }\n }\n\n public async createCredentialDefinition(\n _agentContext: AgentContext,\n options: CreateCredentialDefinitionOptions\n ): Promise<CreateCredentialDefinitionReturn> {\n const { tag, supportRevocation, schema, issuerId, schemaId } = options\n\n let createReturnObj:\n | {\n credentialDefinition: CredentialDefinition\n credentialDefinitionPrivate: CredentialDefinitionPrivate\n keyCorrectnessProof: KeyCorrectnessProof\n }\n | undefined\n try {\n createReturnObj = CredentialDefinition.create({\n schema: schema as unknown as JsonObject,\n issuerId,\n schemaId,\n tag,\n supportRevocation,\n signatureType: 'CL',\n })\n\n return {\n credentialDefinition: createReturnObj.credentialDefinition.toJson() as unknown as AnonCredsCredentialDefinition,\n credentialDefinitionPrivate: createReturnObj.credentialDefinitionPrivate.toJson(),\n keyCorrectnessProof: createReturnObj.keyCorrectnessProof.toJson(),\n }\n } finally {\n createReturnObj?.credentialDefinition.handle.clear()\n createReturnObj?.credentialDefinitionPrivate.handle.clear()\n createReturnObj?.keyCorrectnessProof.handle.clear()\n }\n }\n\n public async createRevocationRegistryDefinition(\n _agentContext: AgentContext,\n options: CreateRevocationRegistryDefinitionOptions\n ): Promise<CreateRevocationRegistryDefinitionReturn> {\n const { tag, issuerId, credentialDefinition, credentialDefinitionId, maximumCredentialNumber, tailsDirectoryPath } =\n options\n\n let createReturnObj:\n | {\n revocationRegistryDefinition: RevocationRegistryDefinition\n revocationRegistryDefinitionPrivate: RevocationRegistryDefinitionPrivate\n }\n | undefined\n try {\n createReturnObj = RevocationRegistryDefinition.create({\n credentialDefinition: credentialDefinition as unknown as JsonObject,\n credentialDefinitionId,\n issuerId,\n maximumCredentialNumber,\n revocationRegistryType: 'CL_ACCUM',\n tag,\n tailsDirectoryPath,\n })\n\n return {\n revocationRegistryDefinition:\n createReturnObj.revocationRegistryDefinition.toJson() as unknown as AnonCredsRevocationRegistryDefinition,\n revocationRegistryDefinitionPrivate: createReturnObj.revocationRegistryDefinitionPrivate.toJson(),\n }\n } finally {\n createReturnObj?.revocationRegistryDefinition.handle.clear()\n createReturnObj?.revocationRegistryDefinitionPrivate.handle.clear()\n }\n }\n\n public async createRevocationStatusList(\n agentContext: AgentContext,\n options: CreateRevocationStatusListOptions\n ): Promise<AnonCredsRevocationStatusList> {\n const { issuerId, revocationRegistryDefinitionId, revocationRegistryDefinition } = options\n\n const credentialDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionRepository)\n .getByCredentialDefinitionId(agentContext, revocationRegistryDefinition.credDefId)\n\n const revocationRegistryDefinitionPrivateRecord = await agentContext.dependencyManager\n .resolve(AnonCredsRevocationRegistryDefinitionPrivateRepository)\n .getByRevocationRegistryDefinitionId(agentContext, revocationRegistryDefinitionId)\n\n let revocationStatusList: RevocationStatusList | undefined\n try {\n revocationStatusList = RevocationStatusList.create({\n issuanceByDefault: true,\n revocationRegistryDefinitionId,\n credentialDefinition: credentialDefinitionRecord.credentialDefinition as unknown as JsonObject,\n revocationRegistryDefinition: revocationRegistryDefinition as unknown as JsonObject,\n revocationRegistryDefinitionPrivate: revocationRegistryDefinitionPrivateRecord.value as unknown as JsonObject,\n issuerId,\n })\n\n return revocationStatusList.toJson() as unknown as AnonCredsRevocationStatusList\n } finally {\n revocationStatusList?.handle.clear()\n }\n }\n\n public async updateRevocationStatusList(\n agentContext: AgentContext,\n options: UpdateRevocationStatusListOptions\n ): Promise<AnonCredsRevocationStatusList> {\n const { revocationStatusList, revocationRegistryDefinition, issued, revoked, timestamp, tailsFilePath } = options\n\n let updatedRevocationStatusList: RevocationStatusList | undefined\n let revocationRegistryDefinitionObj: RevocationRegistryDefinition | undefined\n\n try {\n updatedRevocationStatusList = RevocationStatusList.fromJson(revocationStatusList as unknown as JsonObject)\n\n if (timestamp && !issued && !revoked) {\n updatedRevocationStatusList.updateTimestamp({\n timestamp,\n })\n } else {\n const credentialDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionRepository)\n .getByCredentialDefinitionId(agentContext, revocationRegistryDefinition.credDefId)\n\n const revocationRegistryDefinitionPrivateRecord = await agentContext.dependencyManager\n .resolve(AnonCredsRevocationRegistryDefinitionPrivateRepository)\n .getByRevocationRegistryDefinitionId(agentContext, revocationStatusList.revRegDefId)\n\n revocationRegistryDefinitionObj = RevocationRegistryDefinition.fromJson({\n ...revocationRegistryDefinition,\n value: { ...revocationRegistryDefinition.value, tailsLocation: tailsFilePath },\n } as unknown as JsonObject)\n updatedRevocationStatusList.update({\n credentialDefinition: credentialDefinitionRecord.credentialDefinition as unknown as JsonObject,\n revocationRegistryDefinition: revocationRegistryDefinitionObj,\n revocationRegistryDefinitionPrivate: revocationRegistryDefinitionPrivateRecord.value,\n issued: options.issued,\n revoked: options.revoked,\n timestamp: timestamp ?? -1, // FIXME: this should be fixed in anoncreds-rs wrapper\n })\n }\n\n return updatedRevocationStatusList.toJson() as unknown as AnonCredsRevocationStatusList\n } finally {\n updatedRevocationStatusList?.handle.clear()\n revocationRegistryDefinitionObj?.handle.clear()\n }\n }\n\n public async createCredentialOffer(\n agentContext: AgentContext,\n options: CreateCredentialOfferOptions\n ): Promise<AnonCredsCredentialOffer> {\n const { credentialDefinitionId } = options\n\n let credentialOffer: CredentialOffer | undefined\n try {\n // The getByCredentialDefinitionId supports both qualified and unqualified identifiers, even though the\n // record is always stored using the qualified identifier.\n const credentialDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionRepository)\n .getByCredentialDefinitionId(agentContext, options.credentialDefinitionId)\n\n // We fetch the keyCorrectnessProof based on the credential definition record id, as the\n // credential definition id passed to this module could be unqualified, and the key correctness\n // proof is only stored using the qualified identifier.\n const keyCorrectnessProofRecord = await agentContext.dependencyManager\n .resolve(AnonCredsKeyCorrectnessProofRepository)\n .getByCredentialDefinitionId(agentContext, credentialDefinitionRecord.credentialDefinitionId)\n\n if (!credentialDefinitionRecord) {\n throw new AnonCredsRsError(`Credential Definition ${credentialDefinitionId} not found`)\n }\n\n let schemaId = credentialDefinitionRecord.credentialDefinition.schemaId\n\n // if the credentialDefinitionId is not qualified, we need to transform the schemaId to also be unqualified\n if (isUnqualifiedCredentialDefinitionId(options.credentialDefinitionId)) {\n const { namespaceIdentifier, schemaName, schemaVersion } = parseIndySchemaId(schemaId)\n schemaId = getUnqualifiedSchemaId(namespaceIdentifier, schemaName, schemaVersion)\n }\n\n credentialOffer = CredentialOffer.create({\n credentialDefinitionId,\n keyCorrectnessProof: keyCorrectnessProofRecord?.value,\n schemaId,\n })\n\n return credentialOffer.toJson() as unknown as AnonCredsCredentialOffer\n } finally {\n credentialOffer?.handle.clear()\n }\n }\n\n public async createCredential(\n agentContext: AgentContext,\n options: CreateCredentialOptions\n ): Promise<CreateCredentialReturn> {\n const {\n credentialOffer,\n credentialRequest,\n credentialValues,\n revocationRegistryDefinitionId,\n revocationStatusList,\n revocationRegistryIndex,\n } = options\n\n const definedRevocationOptions = [\n revocationRegistryDefinitionId,\n revocationStatusList,\n revocationRegistryIndex,\n ].filter((e) => e !== undefined)\n if (definedRevocationOptions.length > 0 && definedRevocationOptions.length < 3) {\n throw new CredoError(\n 'Revocation requires all of revocationRegistryDefinitionId, revocationRegistryIndex and revocationStatusList'\n )\n }\n\n let credential: Credential | undefined\n try {\n const attributeRawValues: Record<string, string> = {}\n const attributeEncodedValues: Record<string, string> = {}\n\n for (const key of Object.keys(credentialValues)) {\n attributeRawValues[key] = credentialValues[key].raw\n attributeEncodedValues[key] = credentialValues[key].encoded\n }\n\n const credentialDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionRepository)\n .getByCredentialDefinitionId(agentContext, options.credentialRequest.cred_def_id)\n\n // We fetch the private record based on the cred def id from the cred def record, as the\n // credential definition id passed to this module could be unqualified, and the private record\n // is only stored using the qualified identifier.\n const credentialDefinitionPrivateRecord = await agentContext.dependencyManager\n .resolve(AnonCredsCredentialDefinitionPrivateRepository)\n .getByCredentialDefinitionId(agentContext, credentialDefinitionRecord.credentialDefinitionId)\n\n let credentialDefinition = credentialDefinitionRecord.credentialDefinition\n\n if (isUnqualifiedCredentialDefinitionId(options.credentialRequest.cred_def_id)) {\n const { namespaceIdentifier, schemaName, schemaVersion } = parseIndySchemaId(credentialDefinition.schemaId)\n const { namespaceIdentifier: unqualifiedDid } = parseIndyDid(credentialDefinition.issuerId)\n credentialDefinition = {\n ...credentialDefinition,\n schemaId: getUnqualifiedSchemaId(namespaceIdentifier, schemaName, schemaVersion),\n issuerId: unqualifiedDid,\n }\n }\n\n let revocationConfiguration: CredentialRevocationConfig | undefined\n if (revocationRegistryDefinitionId && revocationStatusList && revocationRegistryIndex !== undefined) {\n const revocationRegistryDefinitionRecord = await agentContext.dependencyManager\n .resolve(AnonCredsRevocationRegistryDefinitionRepository)\n .getByRevocationRegistryDefinitionId(agentContext, revocationRegistryDefinitionId)\n\n const revocationRegistryDefinitionPrivateRecord = await agentContext.dependencyManager\n .resolve(AnonCredsRevocationRegistryDefinitionPrivateRepository)\n .getByRevocationRegistryDefinitionId(agentContext, revocationRegistryDefinitionId)\n\n if (\n revocationRegistryIndex >= revocationRegistryDefinitionRecord.revocationRegistryDefinition.value.maxCredNum\n ) {\n revocationRegistryDefinitionPrivateRecord.state = AnonCredsRevocationRegistryState.Full\n }\n\n revocationConfiguration = new CredentialRevocationConfig({\n registryDefinition: RevocationRegistryDefinition.fromJson(\n revocationRegistryDefinitionRecord.revocationRegistryDefinition as unknown as JsonObject\n ),\n registryDefinitionPrivate: RevocationRegistryDefinitionPrivate.fromJson(\n revocationRegistryDefinitionPrivateRecord.value\n ),\n statusList: RevocationStatusList.fromJson(revocationStatusList as unknown as JsonObject),\n registryIndex: revocationRegistryIndex,\n })\n }\n credential = Credential.create({\n credentialDefinition: credentialDefinitionRecord.credentialDefinition as unknown as JsonObject,\n credentialOffer: credentialOffer as unknown as JsonObject,\n credentialRequest: credentialRequest as unknown as JsonObject,\n revocationRegistryId: revocationRegistryDefinitionId,\n attributeEncodedValues,\n attributeRawValues,\n credentialDefinitionPrivate: credentialDefinitionPrivateRecord.value,\n revocationConfiguration,\n // FIXME: duplicated input parameter?\n revocationStatusList: revocationStatusList\n ? RevocationStatusList.fromJson(revocationStatusList as unknown as JsonObject)\n : undefined,\n })\n\n return {\n credential: credential.toJson() as unknown as AnonCredsCredential,\n credentialRevocationId: credential.revocationRegistryIndex?.toString(),\n }\n } finally {\n credential?.handle.clear()\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAmDO,qCAAMA,2BAA2D;CACtE,MAAa,aAAa,eAA6B,SAAwD;EAC7G,MAAM,EAAE,UAAU,MAAM,SAAS,WAAW,mBAAmB;EAE/D,IAAIC;AACJ,MAAI;AAQF,UAPe,OAAO,OAAO;IAC3B;IACA;IACA;IACA;IACD,CAAC,CAEY,QAAQ;YACd;AACR,WAAQ,OAAO,OAAO;;;CAI1B,MAAa,2BACX,eACA,SAC2C;EAC3C,MAAM,EAAE,KAAK,mBAAmB,QAAQ,UAAU,aAAa;EAE/D,IAAIC;AAOJ,MAAI;AACF,qBAAkB,qBAAqB,OAAO;IACpC;IACR;IACA;IACA;IACA;IACA,eAAe;IAChB,CAAC;AAEF,UAAO;IACL,sBAAsB,gBAAgB,qBAAqB,QAAQ;IACnE,6BAA6B,gBAAgB,4BAA4B,QAAQ;IACjF,qBAAqB,gBAAgB,oBAAoB,QAAQ;IAClE;YACO;AACR,oBAAiB,qBAAqB,OAAO,OAAO;AACpD,oBAAiB,4BAA4B,OAAO,OAAO;AAC3D,oBAAiB,oBAAoB,OAAO,OAAO;;;CAIvD,MAAa,mCACX,eACA,SACmD;EACnD,MAAM,EAAE,KAAK,UAAU,sBAAsB,wBAAwB,yBAAyB,uBAC5F;EAEF,IAAIC;AAMJ,MAAI;AACF,qBAAkB,6BAA6B,OAAO;IAC9B;IACtB;IACA;IACA;IACA,wBAAwB;IACxB;IACA;IACD,CAAC;AAEF,UAAO;IACL,8BACE,gBAAgB,6BAA6B,QAAQ;IACvD,qCAAqC,gBAAgB,oCAAoC,QAAQ;IAClG;YACO;AACR,oBAAiB,6BAA6B,OAAO,OAAO;AAC5D,oBAAiB,oCAAoC,OAAO,OAAO;;;CAIvE,MAAa,2BACX,cACA,SACwC;EACxC,MAAM,EAAE,UAAU,gCAAgC,iCAAiC;EAEnF,MAAM,6BAA6B,MAAM,aAAa,kBACnD,QAAQ,wCAAwC,CAChD,4BAA4B,cAAc,6BAA6B,UAAU;EAEpF,MAAM,4CAA4C,MAAM,aAAa,kBAClE,QAAQ,uDAAuD,CAC/D,oCAAoC,cAAc,+BAA+B;EAEpF,IAAIC;AACJ,MAAI;AACF,0BAAuB,qBAAqB,OAAO;IACjD,mBAAmB;IACnB;IACA,sBAAsB,2BAA2B;IACnB;IAC9B,qCAAqC,0CAA0C;IAC/E;IACD,CAAC;AAEF,UAAO,qBAAqB,QAAQ;YAC5B;AACR,yBAAsB,OAAO,OAAO;;;CAIxC,MAAa,2BACX,cACA,SACwC;EACxC,MAAM,EAAE,sBAAsB,8BAA8B,QAAQ,SAAS,WAAW,kBAAkB;EAE1G,IAAIC;EACJ,IAAIC;AAEJ,MAAI;AACF,iCAA8B,qBAAqB,SAAS,qBAA8C;AAE1G,OAAI,aAAa,CAAC,UAAU,CAAC,QAC3B,6BAA4B,gBAAgB,EAC1C,WACD,CAAC;QACG;IACL,MAAM,6BAA6B,MAAM,aAAa,kBACnD,QAAQ,wCAAwC,CAChD,4BAA4B,cAAc,6BAA6B,UAAU;IAEpF,MAAM,4CAA4C,MAAM,aAAa,kBAClE,QAAQ,uDAAuD,CAC/D,oCAAoC,cAAc,qBAAqB,YAAY;AAEtF,sCAAkC,6BAA6B,SAAS;KACtE,GAAG;KACH,OAAO;MAAE,GAAG,6BAA6B;MAAO,eAAe;MAAe;KAC/E,CAA0B;AAC3B,gCAA4B,OAAO;KACjC,sBAAsB,2BAA2B;KACjD,8BAA8B;KAC9B,qCAAqC,0CAA0C;KAC/E,QAAQ,QAAQ;KAChB,SAAS,QAAQ;KACjB,WAAW,aAAa;KACzB,CAAC;;AAGJ,UAAO,4BAA4B,QAAQ;YACnC;AACR,gCAA6B,OAAO,OAAO;AAC3C,oCAAiC,OAAO,OAAO;;;CAInD,MAAa,sBACX,cACA,SACmC;EACnC,MAAM,EAAE,2BAA2B;EAEnC,IAAIC;AACJ,MAAI;GAGF,MAAM,6BAA6B,MAAM,aAAa,kBACnD,QAAQ,wCAAwC,CAChD,4BAA4B,cAAc,QAAQ,uBAAuB;GAK5E,MAAM,4BAA4B,MAAM,aAAa,kBAClD,QAAQ,uCAAuC,CAC/C,4BAA4B,cAAc,2BAA2B,uBAAuB;AAE/F,OAAI,CAAC,2BACH,OAAM,IAAI,iBAAiB,yBAAyB,uBAAuB,YAAY;GAGzF,IAAI,WAAW,2BAA2B,qBAAqB;AAG/D,OAAI,oCAAoC,QAAQ,uBAAuB,EAAE;IACvE,MAAM,EAAE,qBAAqB,YAAY,kBAAkB,kBAAkB,SAAS;AACtF,eAAW,uBAAuB,qBAAqB,YAAY,cAAc;;AAGnF,qBAAkB,gBAAgB,OAAO;IACvC;IACA,qBAAqB,2BAA2B;IAChD;IACD,CAAC;AAEF,UAAO,gBAAgB,QAAQ;YACvB;AACR,oBAAiB,OAAO,OAAO;;;CAInC,MAAa,iBACX,cACA,SACiC;EACjC,MAAM,EACJ,iBACA,mBACA,kBACA,gCACA,sBACA,4BACE;EAEJ,MAAM,2BAA2B;GAC/B;GACA;GACA;GACD,CAAC,QAAQ,MAAM,MAAM,OAAU;AAChC,MAAI,yBAAyB,SAAS,KAAK,yBAAyB,SAAS,EAC3E,OAAM,IAAI,WACR,8GACD;EAGH,IAAIC;AACJ,MAAI;GACF,MAAMC,qBAA6C,EAAE;GACrD,MAAMC,yBAAiD,EAAE;AAEzD,QAAK,MAAM,OAAO,OAAO,KAAK,iBAAiB,EAAE;AAC/C,uBAAmB,OAAO,iBAAiB,KAAK;AAChD,2BAAuB,OAAO,iBAAiB,KAAK;;GAGtD,MAAM,6BAA6B,MAAM,aAAa,kBACnD,QAAQ,wCAAwC,CAChD,4BAA4B,cAAc,QAAQ,kBAAkB,YAAY;GAKnF,MAAM,oCAAoC,MAAM,aAAa,kBAC1D,QAAQ,+CAA+C,CACvD,4BAA4B,cAAc,2BAA2B,uBAAuB;GAE/F,IAAI,uBAAuB,2BAA2B;AAEtD,OAAI,oCAAoC,QAAQ,kBAAkB,YAAY,EAAE;IAC9E,MAAM,EAAE,qBAAqB,YAAY,kBAAkB,kBAAkB,qBAAqB,SAAS;IAC3G,MAAM,EAAE,qBAAqB,mBAAmB,aAAa,qBAAqB,SAAS;AAC3F,2BAAuB;KACrB,GAAG;KACH,UAAU,uBAAuB,qBAAqB,YAAY,cAAc;KAChF,UAAU;KACX;;GAGH,IAAIC;AACJ,OAAI,kCAAkC,wBAAwB,4BAA4B,QAAW;IACnG,MAAM,qCAAqC,MAAM,aAAa,kBAC3D,QAAQ,gDAAgD,CACxD,oCAAoC,cAAc,+BAA+B;IAEpF,MAAM,4CAA4C,MAAM,aAAa,kBAClE,QAAQ,uDAAuD,CAC/D,oCAAoC,cAAc,+BAA+B;AAEpF,QACE,2BAA2B,mCAAmC,6BAA6B,MAAM,WAEjG,2CAA0C,QAAQ,iCAAiC;AAGrF,8BAA0B,IAAI,2BAA2B;KACvD,oBAAoB,6BAA6B,SAC/C,mCAAmC,6BACpC;KACD,2BAA2B,oCAAoC,SAC7D,0CAA0C,MAC3C;KACD,YAAY,qBAAqB,SAAS,qBAA8C;KACxF,eAAe;KAChB,CAAC;;AAEJ,gBAAa,WAAW,OAAO;IAC7B,sBAAsB,2BAA2B;IAChC;IACE;IACnB,sBAAsB;IACtB;IACA;IACA,6BAA6B,kCAAkC;IAC/D;IAEA,sBAAsB,uBAClB,qBAAqB,SAAS,qBAA8C,GAC5E;IACL,CAAC;AAEF,UAAO;IACL,YAAY,WAAW,QAAQ;IAC/B,wBAAwB,WAAW,yBAAyB,UAAU;IACvE;YACO;AACR,eAAY,OAAO,OAAO;;;;uCA5T/B,YAAY"}
|