@credo-ts/indy-vdr 0.6.0-pr-2392-20251010173905 → 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/IndyVdrApi.d.mts +2 -2
- package/build/IndyVdrApi.d.mts.map +1 -1
- package/build/IndyVdrApi.d.ts.map +1 -1
- package/build/IndyVdrApi.js +1 -1
- package/build/IndyVdrApi.mjs +1 -1
- package/build/IndyVdrApi.mjs.map +1 -1
- package/build/IndyVdrModule.d.mts.map +1 -1
- package/build/IndyVdrModule.d.ts.map +1 -1
- package/build/IndyVdrModule.mjs.map +1 -1
- package/build/anoncreds/IndyVdrAnonCredsRegistry.d.mts.map +1 -1
- package/build/anoncreds/IndyVdrAnonCredsRegistry.d.ts +1 -1
- package/build/anoncreds/IndyVdrAnonCredsRegistry.d.ts.map +1 -1
- package/build/anoncreds/IndyVdrAnonCredsRegistry.js +1 -1
- package/build/anoncreds/IndyVdrAnonCredsRegistry.mjs +1 -1
- package/build/anoncreds/IndyVdrAnonCredsRegistry.mjs.map +1 -1
- package/build/dids/IndyVdrIndyDidRegistrar.d.mts.map +1 -1
- package/build/dids/IndyVdrIndyDidRegistrar.d.ts.map +1 -1
- package/build/dids/IndyVdrIndyDidRegistrar.js +3 -3
- package/build/dids/IndyVdrIndyDidRegistrar.mjs +3 -3
- package/build/dids/IndyVdrIndyDidRegistrar.mjs.map +1 -1
- package/build/dids/IndyVdrIndyDidResolver.d.mts.map +1 -1
- package/build/dids/IndyVdrIndyDidResolver.d.ts.map +1 -1
- package/build/dids/IndyVdrIndyDidResolver.js +1 -1
- package/build/dids/IndyVdrIndyDidResolver.mjs +1 -1
- package/build/dids/IndyVdrIndyDidResolver.mjs.map +1 -1
- package/build/dids/IndyVdrSovDidResolver.d.mts.map +1 -1
- package/build/dids/IndyVdrSovDidResolver.d.ts.map +1 -1
- package/build/dids/IndyVdrSovDidResolver.js +1 -1
- package/build/dids/IndyVdrSovDidResolver.mjs +1 -1
- package/build/dids/IndyVdrSovDidResolver.mjs.map +1 -1
- package/build/dids/didIndyUtil.mjs.map +1 -1
- package/build/dids/didSovUtil.mjs.map +1 -1
- package/build/error/index.js +1 -1
- package/build/error/index.mjs +1 -1
- package/build/index.d.mts +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.js +3 -3
- package/build/index.mjs +3 -3
- package/build/pool/IndyVdrPool.d.mts +2 -2
- package/build/pool/IndyVdrPool.d.mts.map +1 -1
- package/build/pool/IndyVdrPool.d.ts.map +1 -1
- package/build/pool/IndyVdrPool.js +1 -1
- package/build/pool/IndyVdrPool.mjs +1 -1
- package/build/pool/IndyVdrPool.mjs.map +1 -1
- package/build/pool/IndyVdrPoolService.d.mts.map +1 -1
- package/build/pool/IndyVdrPoolService.d.ts.map +1 -1
- package/build/pool/IndyVdrPoolService.js +2 -2
- package/build/pool/IndyVdrPoolService.mjs +2 -2
- package/build/pool/IndyVdrPoolService.mjs.map +1 -1
- package/build/utils/promises.mjs.map +1 -1
- package/build/utils/sign.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrIndyDidRegistrar.mjs","names":["endorserNamespaceIdentifier","diddocContent: Record<string, unknown> | undefined","nymRequest: NymRequest | CustomRequest","didDocument: DidDocument | undefined","attribRequest: AttribRequest | CustomRequest | undefined","verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk> | undefined","did","didAction: EndorseDidTxAction"],"sources":["../../src/dids/IndyVdrIndyDidRegistrar.ts"],"sourcesContent":["import type {\n AgentContext,\n DidCreateOptions,\n DidCreateResult,\n DidDeactivateResult,\n DidDocument,\n DidDocumentKey,\n DidDocumentService,\n DidOperationStateActionBase,\n DidRegistrar,\n DidUpdateResult,\n} from '@credo-ts/core'\nimport type { IndyVdrRequest } from '@hyperledger/indy-vdr-shared'\nimport type { IndyVdrPool } from '../pool'\nimport type { IndyEndpointAttrib } from './didSovUtil'\n\nimport { parseIndyDid } from '@credo-ts/anoncreds'\nimport {\n DidCommV1Service,\n DidCommV2Service,\n DidDocumentRole,\n DidRecord,\n DidRepository,\n Hasher,\n IndyAgentService,\n Kms,\n NewDidCommV2Service,\n TypedArrayEncoder,\n} from '@credo-ts/core'\nimport { AttribRequest, CustomRequest, NymRequest } from '@hyperledger/indy-vdr-shared'\n\nimport { IndyVdrError } from '../error'\nimport { IndyVdrPoolService } from '../pool/IndyVdrPoolService'\n\nimport {\n buildDidDocument,\n createKeyAgreementKey,\n didDocDiff,\n indyDidDocumentFromDid,\n verificationPublicJwkForIndyDid,\n} from './didIndyUtil'\nimport { endpointsAttribFromServices } from './didSovUtil'\n\nexport class IndyVdrIndyDidRegistrar implements DidRegistrar {\n public readonly supportedMethods = ['indy']\n\n private didCreateActionResult({\n namespace,\n didAction,\n did,\n }: {\n namespace: string\n didAction: EndorseDidTxAction\n did: string\n }): IndyVdrDidCreateResult {\n return {\n jobId: did,\n didDocumentMetadata: {},\n didRegistrationMetadata: {\n didIndyNamespace: namespace,\n },\n didState: didAction,\n }\n }\n\n private didCreateFailedResult({\n reason,\n }: {\n reason: string\n }): IndyVdrDidCreateResult {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: reason,\n },\n }\n }\n\n private didCreateFinishedResult({\n did,\n didDocument,\n namespace,\n }: {\n did: string\n didDocument: DidDocument\n namespace: string\n }): IndyVdrDidCreateResult {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {\n didIndyNamespace: namespace,\n },\n didState: {\n state: 'finished',\n did,\n didDocument,\n },\n }\n }\n\n public async parseInput(agentContext: AgentContext, options: IndyVdrDidCreateOptions): Promise<ParseInputResult> {\n if (options.options.endorsedTransaction) {\n if (!options.did || typeof options.did !== 'string') {\n return {\n status: 'error',\n reason: 'If endorsedTransaction is provided, a DID must also be provided',\n }\n }\n const { namespace, namespaceIdentifier } = parseIndyDid(options.did)\n // endorser did from the transaction\n const endorserNamespaceIdentifier = JSON.parse(options.options.endorsedTransaction.nymRequest).identifier\n\n return {\n status: 'ok',\n type: 'endorsedTransaction',\n endorsedTransaction: options.options.endorsedTransaction,\n did: options.did,\n namespace,\n namespaceIdentifier,\n endorserNamespaceIdentifier,\n }\n }\n\n const endorserDid = options.options.endorserDid\n const { namespace: endorserNamespace, namespaceIdentifier: endorserNamespaceIdentifier } = parseIndyDid(endorserDid)\n\n const kms = agentContext.dependencyManager.resolve(Kms.KeyManagementApi)\n\n const _verificationKey = options.options.keyId\n ? await kms.getPublicKey({ keyId: options.options.keyId })\n : (\n await kms.createKey({\n type: {\n kty: 'OKP',\n crv: 'Ed25519',\n },\n })\n ).publicJwk\n\n if (_verificationKey.kty !== 'OKP' || _verificationKey.crv !== 'Ed25519') {\n return {\n status: 'error',\n reason: `keyId must point to an Ed25519 key, but found ${Kms.getJwkHumanDescription(_verificationKey)}`,\n }\n }\n\n const verificationKey = Kms.PublicJwk.fromPublicJwk(_verificationKey) as Kms.PublicJwk<Kms.Ed25519PublicJwk>\n\n // Create a new key and calculate did according to the rules for indy did method\n const buffer = Hasher.hash(verificationKey.publicKey.publicKey, 'sha-256')\n\n const namespaceIdentifier = TypedArrayEncoder.toBase58(buffer.slice(0, 16))\n const did = `did:indy:${endorserNamespace}:${namespaceIdentifier}`\n\n return {\n status: 'ok',\n type: 'create',\n did,\n verificationKey,\n endorserDid: options.options.endorserDid,\n alias: options.options.alias,\n role: options.options.role,\n services: options.options.services,\n useEndpointAttrib: options.options.useEndpointAttrib,\n namespaceIdentifier,\n namespace: endorserNamespace,\n endorserNamespaceIdentifier,\n }\n }\n\n public async saveDidRecord(\n agentContext: AgentContext,\n did: string,\n didDocument: DidDocument,\n keys: DidDocumentKey[]\n ): Promise<void> {\n // Save the did so we know we created it and can issue with it\n const didRecord = new DidRecord({\n did,\n role: DidDocumentRole.Created,\n didDocument,\n keys,\n })\n\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n await didRepository.save(agentContext, didRecord)\n }\n\n private createDidDocument(\n did: string,\n verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>,\n services: DidDocumentService[] | undefined,\n useEndpointAttrib: boolean | undefined\n ) {\n const verificationKeyBase58 = TypedArrayEncoder.toBase58(verificationKey.publicKey.publicKey)\n // Create base did document\n const didDocumentBuilder = indyDidDocumentFromDid(did, verificationKeyBase58)\n let diddocContent: Record<string, unknown> | undefined = undefined\n\n // Add services if object was passed\n if (services) {\n for (const item of services) {\n const prependDidIfNotPresent = (id: string) => {\n return id.startsWith('#') ? `${did}${id}` : id\n }\n\n // Prepend the did to the service id if it is not already there\n item.id = prependDidIfNotPresent(item.id)\n\n // TODO: should we also prepend the did to routingKeys?\n if (item instanceof DidCommV1Service) {\n item.recipientKeys = item.recipientKeys.map(prependDidIfNotPresent)\n }\n\n didDocumentBuilder.addService(item)\n }\n\n const commTypes = [IndyAgentService.type, DidCommV1Service.type, NewDidCommV2Service.type, DidCommV2Service.type]\n const serviceTypes = new Set(services.map((item) => item.type))\n\n const keyAgreementId = `${did}#key-agreement-1`\n\n // If there is at least a communication service, add the key agreement key\n if (commTypes.some((type) => serviceTypes.has(type))) {\n didDocumentBuilder\n .addContext('https://w3id.org/security/suites/x25519-2019/v1')\n .addVerificationMethod({\n controller: did,\n id: keyAgreementId,\n publicKeyBase58: createKeyAgreementKey(verificationKeyBase58),\n type: 'X25519KeyAgreementKey2019',\n })\n .addKeyAgreement(keyAgreementId)\n }\n\n // FIXME: it doesn't seem this context exists?\n // If there is a DIDComm V2 service, add context\n if (serviceTypes.has(NewDidCommV2Service.type) || serviceTypes.has(DidCommV2Service.type)) {\n didDocumentBuilder.addContext('https://didcomm.org/messaging/contexts/v2')\n }\n\n if (!useEndpointAttrib) {\n // create diddocContent parameter based on the diff between the base and the resulting DID Document\n diddocContent = didDocDiff(\n didDocumentBuilder.build().toJSON(),\n indyDidDocumentFromDid(did, verificationKeyBase58).build().toJSON()\n )\n }\n }\n\n // Build did document\n const didDocument = didDocumentBuilder.build()\n\n return {\n diddocContent,\n didDocument,\n }\n }\n\n // FIXME: we need to completely revamp this logic, it's overly complex\n // We might even want to look at ditching the whole generic DIDs api ...\n public async create(agentContext: AgentContext, options: IndyVdrDidCreateOptions): Promise<IndyVdrDidCreateResult> {\n try {\n const res = await this.parseInput(agentContext, options)\n if (res.status === 'error') return this.didCreateFailedResult({ reason: res.reason })\n\n const did = res.did\n\n const pool = agentContext.dependencyManager.resolve(IndyVdrPoolService).getPoolForNamespace(res.namespace)\n\n let nymRequest: NymRequest | CustomRequest\n let didDocument: DidDocument | undefined\n let attribRequest: AttribRequest | CustomRequest | undefined\n let verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk> | undefined = undefined\n\n if (res.type === 'endorsedTransaction') {\n const { nymRequest: _nymRequest, attribRequest: _attribRequest } = res.endorsedTransaction\n nymRequest = new CustomRequest({ customRequest: _nymRequest })\n attribRequest = _attribRequest ? new CustomRequest({ customRequest: _attribRequest }) : undefined\n } else {\n const {\n services,\n useEndpointAttrib,\n alias,\n endorserNamespaceIdentifier,\n namespaceIdentifier,\n did,\n role,\n endorserDid,\n namespace,\n } = res\n verificationKey = res.verificationKey\n\n const { didDocument: _didDocument, diddocContent } = this.createDidDocument(\n did,\n verificationKey,\n services,\n useEndpointAttrib\n )\n didDocument = _didDocument\n\n const didRegisterSigningKey =\n options.options.endorserMode === 'internal'\n ? await verificationPublicJwkForIndyDid(agentContext, options.options.endorserDid)\n : undefined\n\n nymRequest = await this.createRegisterDidWriteRequest({\n agentContext,\n pool,\n signingKey: didRegisterSigningKey,\n submitterNamespaceIdentifier: endorserNamespaceIdentifier,\n namespaceIdentifier,\n verificationKey,\n alias,\n diddocContent,\n role,\n })\n\n if (services && useEndpointAttrib) {\n const endpoints = endpointsAttribFromServices(services)\n attribRequest = await this.createSetDidEndpointsRequest({\n agentContext,\n pool,\n signingKey: verificationKey,\n endorserDid: options.options.endorserMode === 'external' ? endorserDid : undefined,\n unqualifiedDid: namespaceIdentifier,\n endpoints,\n })\n }\n\n if (options.options.endorserMode === 'external') {\n // We already save the did record, including the link between kms key id and did key id\n await this.saveDidRecord(agentContext, did, didDocument, [\n {\n didDocumentRelativeKeyId: '#verkey',\n kmsKeyId: verificationKey.keyId,\n },\n ])\n const didAction: EndorseDidTxAction = {\n state: 'action',\n action: 'endorseIndyTransaction',\n endorserDid: endorserDid,\n nymRequest: nymRequest.body,\n attribRequest: attribRequest?.body,\n did: did,\n }\n\n return this.didCreateActionResult({ namespace, didAction, did })\n }\n }\n\n await this.registerPublicDid(agentContext, pool, nymRequest)\n if (attribRequest) await this.setEndpointsForDid(agentContext, pool, attribRequest)\n\n // DID Document is undefined if this method is called based on external endorsement\n // but in that case the did document is already saved\n if (verificationKey && didDocument) {\n await this.saveDidRecord(agentContext, did, didDocument, [\n {\n didDocumentRelativeKeyId: '#verkey',\n kmsKeyId: verificationKey.keyId,\n },\n ])\n }\n\n didDocument = didDocument ?? (await buildDidDocument(agentContext, pool, did))\n return this.didCreateFinishedResult({ did, didDocument, namespace: res.namespace })\n } catch (error) {\n agentContext.config.logger.error('Error creating indy did', {\n error,\n })\n return this.didCreateFailedResult({\n reason: `unknownError: ${error.message}`,\n })\n }\n }\n\n public async update(): Promise<DidUpdateResult> {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'notImplemented: updating did:indy not implemented yet',\n },\n }\n }\n\n public async deactivate(): Promise<DidDeactivateResult> {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'notImplemented: deactivating did:indy not implemented yet',\n },\n }\n }\n\n private async createRegisterDidWriteRequest(options: {\n agentContext: AgentContext\n pool: IndyVdrPool\n submitterNamespaceIdentifier: string\n namespaceIdentifier: string\n verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>\n signingKey?: Kms.PublicJwk<Kms.Ed25519PublicJwk>\n alias: string | undefined\n diddocContent?: Record<string, unknown>\n role?: NymRequestRole\n }) {\n const {\n agentContext,\n pool,\n submitterNamespaceIdentifier,\n namespaceIdentifier,\n verificationKey,\n alias,\n signingKey,\n role,\n } = options\n\n // FIXME: Add diddocContent when supported by indy-vdr\n if (options.diddocContent) {\n throw new IndyVdrError('diddocContent is not yet supported')\n }\n\n const request = new NymRequest({\n submitterDid: submitterNamespaceIdentifier,\n dest: namespaceIdentifier,\n verkey: TypedArrayEncoder.toBase58(verificationKey.publicKey.publicKey),\n alias,\n role,\n })\n\n if (!signingKey) return request\n const writeRequest = await pool.prepareWriteRequest(agentContext, request, signingKey, undefined)\n return writeRequest\n }\n\n private async registerPublicDid<Request extends IndyVdrRequest>(\n agentContext: AgentContext,\n pool: IndyVdrPool,\n writeRequest: Request\n ) {\n const body = writeRequest.body\n try {\n const response = await pool.submitRequest(writeRequest)\n\n agentContext.config.logger.debug(`Register public did on ledger '${pool.indyNamespace}'\\nRequest: ${body}}`, {\n response,\n })\n\n return\n } catch (error) {\n agentContext.config.logger.error(\n `Error Registering public did on ledger '${pool.indyNamespace}'\\nRequest: ${body}}`\n )\n\n throw error\n }\n }\n\n private async createSetDidEndpointsRequest(options: {\n agentContext: AgentContext\n pool: IndyVdrPool\n signingKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>\n endorserDid?: string\n unqualifiedDid: string\n endpoints: IndyEndpointAttrib\n }): Promise<AttribRequest> {\n const { agentContext, pool, endpoints, unqualifiedDid, signingKey, endorserDid } = options\n const request = new AttribRequest({\n submitterDid: unqualifiedDid,\n targetDid: unqualifiedDid,\n raw: JSON.stringify({ endpoint: endpoints }),\n })\n\n const writeRequest = await pool.prepareWriteRequest(agentContext, request, signingKey, endorserDid)\n return writeRequest\n }\n\n private async setEndpointsForDid<Request extends IndyVdrRequest>(\n agentContext: AgentContext,\n pool: IndyVdrPool,\n writeRequest: Request\n ): Promise<void> {\n const body = writeRequest.body\n try {\n const response = await pool.submitRequest(writeRequest)\n\n agentContext.config.logger.debug(\n `Successfully set endpoints for did on ledger '${pool.indyNamespace}'.\\nRequest: ${body}}`,\n {\n response,\n }\n )\n } catch (error) {\n agentContext.config.logger.error(\n `Error setting endpoints for did on ledger '${pool.indyNamespace}'.\\nRequest: ${body}}`\n )\n\n throw new IndyVdrError(error)\n }\n }\n}\n\ninterface IndyVdrDidCreateOptionsWithoutDid extends DidCreateOptions {\n didDocument?: never // Not yet supported\n did?: never\n method: 'indy'\n options: {\n /**\n * Optionally an existing keyId can be provided, in this case the did will be created\n * based on the existing key\n */\n keyId?: string\n\n alias?: string\n role?: NymRequestRole\n services?: DidDocumentService[]\n useEndpointAttrib?: boolean\n\n // endorserDid is always required. We just have internal or external mode\n endorserDid: string\n // if endorserMode is 'internal', the endorserDid MUST be present in the wallet\n // if endorserMode is 'external', the endorserDid doesn't have to be present in the wallet\n endorserMode: 'internal' | 'external'\n endorsedTransaction?: never\n }\n}\n\n// When transactions have been endorsed. Only supported for external mode\n// this is a separate interface so we can remove all the properties we don't need anymore.\ninterface IndyVdrDidCreateOptionsForSubmission extends DidCreateOptions {\n didDocument?: never\n did: string // for submission MUST always have a did, so we know which did we're submitting the transaction for. We MUST check whether the did passed here, matches with the\n method?: never\n options: {\n endorserMode: 'external'\n\n // provide the endorsed transactions. If these are provided\n // we will submit the transactions to the ledger\n endorsedTransaction: {\n nymRequest: string\n attribRequest?: string\n }\n }\n}\n\nexport type IndyVdrDidCreateOptions = IndyVdrDidCreateOptionsWithoutDid | IndyVdrDidCreateOptionsForSubmission\n\ntype ParseInputOkEndorsedTransaction = {\n status: 'ok'\n did: string\n type: 'endorsedTransaction'\n endorsedTransaction: IndyVdrDidCreateOptionsForSubmission['options']['endorsedTransaction']\n namespaceIdentifier: string\n namespace: string\n endorserNamespaceIdentifier: string\n}\n\ntype ParseInputOkCreate = {\n status: 'ok'\n type: 'create'\n did: string\n verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>\n namespaceIdentifier: string\n namespace: string\n endorserNamespaceIdentifier: string\n endorserDid: string\n alias?: string\n role?: NymRequestRole\n services?: DidDocumentService[]\n useEndpointAttrib?: boolean\n}\n\ntype parseInputError = { status: 'error'; reason: string }\n\ntype ParseInputResult = ParseInputOkEndorsedTransaction | ParseInputOkCreate | parseInputError\n\nexport interface EndorseDidTxAction extends DidOperationStateActionBase {\n action: 'endorseIndyTransaction'\n endorserDid: string\n nymRequest: string\n attribRequest?: string\n did: string\n}\n\nexport type IndyVdrDidCreateResult = DidCreateResult<EndorseDidTxAction>\n\nexport type NymRequestRole = 'STEWARD' | 'TRUSTEE' | 'ENDORSER' | 'NETWORK_MONITOR'\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IndyVdrIndyDidRegistrar.mjs","names":["endorserNamespaceIdentifier","diddocContent: Record<string, unknown> | undefined","nymRequest: NymRequest | CustomRequest","didDocument: DidDocument | undefined","attribRequest: AttribRequest | CustomRequest | undefined","verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk> | undefined","did","didAction: EndorseDidTxAction"],"sources":["../../src/dids/IndyVdrIndyDidRegistrar.ts"],"sourcesContent":["import { parseIndyDid } from '@credo-ts/anoncreds'\nimport type {\n AgentContext,\n DidCreateOptions,\n DidCreateResult,\n DidDeactivateResult,\n DidDocument,\n DidDocumentKey,\n DidDocumentService,\n DidOperationStateActionBase,\n DidRegistrar,\n DidUpdateResult,\n} from '@credo-ts/core'\nimport {\n DidCommV1Service,\n DidCommV2Service,\n DidDocumentRole,\n DidRecord,\n DidRepository,\n Hasher,\n IndyAgentService,\n Kms,\n NewDidCommV2Service,\n TypedArrayEncoder,\n} from '@credo-ts/core'\nimport type { IndyVdrRequest } from '@hyperledger/indy-vdr-shared'\nimport { AttribRequest, CustomRequest, NymRequest } from '@hyperledger/indy-vdr-shared'\nimport { IndyVdrError } from '../error'\nimport type { IndyVdrPool } from '../pool'\nimport { IndyVdrPoolService } from '../pool/IndyVdrPoolService'\nimport {\n buildDidDocument,\n createKeyAgreementKey,\n didDocDiff,\n indyDidDocumentFromDid,\n verificationPublicJwkForIndyDid,\n} from './didIndyUtil'\nimport type { IndyEndpointAttrib } from './didSovUtil'\nimport { endpointsAttribFromServices } from './didSovUtil'\n\nexport class IndyVdrIndyDidRegistrar implements DidRegistrar {\n public readonly supportedMethods = ['indy']\n\n private didCreateActionResult({\n namespace,\n didAction,\n did,\n }: {\n namespace: string\n didAction: EndorseDidTxAction\n did: string\n }): IndyVdrDidCreateResult {\n return {\n jobId: did,\n didDocumentMetadata: {},\n didRegistrationMetadata: {\n didIndyNamespace: namespace,\n },\n didState: didAction,\n }\n }\n\n private didCreateFailedResult({ reason }: { reason: string }): IndyVdrDidCreateResult {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: reason,\n },\n }\n }\n\n private didCreateFinishedResult({\n did,\n didDocument,\n namespace,\n }: {\n did: string\n didDocument: DidDocument\n namespace: string\n }): IndyVdrDidCreateResult {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {\n didIndyNamespace: namespace,\n },\n didState: {\n state: 'finished',\n did,\n didDocument,\n },\n }\n }\n\n public async parseInput(agentContext: AgentContext, options: IndyVdrDidCreateOptions): Promise<ParseInputResult> {\n if (options.options.endorsedTransaction) {\n if (!options.did || typeof options.did !== 'string') {\n return {\n status: 'error',\n reason: 'If endorsedTransaction is provided, a DID must also be provided',\n }\n }\n const { namespace, namespaceIdentifier } = parseIndyDid(options.did)\n // endorser did from the transaction\n const endorserNamespaceIdentifier = JSON.parse(options.options.endorsedTransaction.nymRequest).identifier\n\n return {\n status: 'ok',\n type: 'endorsedTransaction',\n endorsedTransaction: options.options.endorsedTransaction,\n did: options.did,\n namespace,\n namespaceIdentifier,\n endorserNamespaceIdentifier,\n }\n }\n\n const endorserDid = options.options.endorserDid\n const { namespace: endorserNamespace, namespaceIdentifier: endorserNamespaceIdentifier } = parseIndyDid(endorserDid)\n\n const kms = agentContext.dependencyManager.resolve(Kms.KeyManagementApi)\n\n const _verificationKey = options.options.keyId\n ? await kms.getPublicKey({ keyId: options.options.keyId })\n : (\n await kms.createKey({\n type: {\n kty: 'OKP',\n crv: 'Ed25519',\n },\n })\n ).publicJwk\n\n if (_verificationKey.kty !== 'OKP' || _verificationKey.crv !== 'Ed25519') {\n return {\n status: 'error',\n reason: `keyId must point to an Ed25519 key, but found ${Kms.getJwkHumanDescription(_verificationKey)}`,\n }\n }\n\n const verificationKey = Kms.PublicJwk.fromPublicJwk(_verificationKey) as Kms.PublicJwk<Kms.Ed25519PublicJwk>\n\n // Create a new key and calculate did according to the rules for indy did method\n const buffer = Hasher.hash(verificationKey.publicKey.publicKey, 'sha-256')\n\n const namespaceIdentifier = TypedArrayEncoder.toBase58(buffer.slice(0, 16))\n const did = `did:indy:${endorserNamespace}:${namespaceIdentifier}`\n\n return {\n status: 'ok',\n type: 'create',\n did,\n verificationKey,\n endorserDid: options.options.endorserDid,\n alias: options.options.alias,\n role: options.options.role,\n services: options.options.services,\n useEndpointAttrib: options.options.useEndpointAttrib,\n namespaceIdentifier,\n namespace: endorserNamespace,\n endorserNamespaceIdentifier,\n }\n }\n\n public async saveDidRecord(\n agentContext: AgentContext,\n did: string,\n didDocument: DidDocument,\n keys: DidDocumentKey[]\n ): Promise<void> {\n // Save the did so we know we created it and can issue with it\n const didRecord = new DidRecord({\n did,\n role: DidDocumentRole.Created,\n didDocument,\n keys,\n })\n\n const didRepository = agentContext.dependencyManager.resolve(DidRepository)\n await didRepository.save(agentContext, didRecord)\n }\n\n private createDidDocument(\n did: string,\n verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>,\n services: DidDocumentService[] | undefined,\n useEndpointAttrib: boolean | undefined\n ) {\n const verificationKeyBase58 = TypedArrayEncoder.toBase58(verificationKey.publicKey.publicKey)\n // Create base did document\n const didDocumentBuilder = indyDidDocumentFromDid(did, verificationKeyBase58)\n let diddocContent: Record<string, unknown> | undefined\n\n // Add services if object was passed\n if (services) {\n for (const item of services) {\n const prependDidIfNotPresent = (id: string) => {\n return id.startsWith('#') ? `${did}${id}` : id\n }\n\n // Prepend the did to the service id if it is not already there\n item.id = prependDidIfNotPresent(item.id)\n\n // TODO: should we also prepend the did to routingKeys?\n if (item instanceof DidCommV1Service) {\n item.recipientKeys = item.recipientKeys.map(prependDidIfNotPresent)\n }\n\n didDocumentBuilder.addService(item)\n }\n\n const commTypes = [IndyAgentService.type, DidCommV1Service.type, NewDidCommV2Service.type, DidCommV2Service.type]\n const serviceTypes = new Set(services.map((item) => item.type))\n\n const keyAgreementId = `${did}#key-agreement-1`\n\n // If there is at least a communication service, add the key agreement key\n if (commTypes.some((type) => serviceTypes.has(type))) {\n didDocumentBuilder\n .addContext('https://w3id.org/security/suites/x25519-2019/v1')\n .addVerificationMethod({\n controller: did,\n id: keyAgreementId,\n publicKeyBase58: createKeyAgreementKey(verificationKeyBase58),\n type: 'X25519KeyAgreementKey2019',\n })\n .addKeyAgreement(keyAgreementId)\n }\n\n // FIXME: it doesn't seem this context exists?\n // If there is a DIDComm V2 service, add context\n if (serviceTypes.has(NewDidCommV2Service.type) || serviceTypes.has(DidCommV2Service.type)) {\n didDocumentBuilder.addContext('https://didcomm.org/messaging/contexts/v2')\n }\n\n if (!useEndpointAttrib) {\n // create diddocContent parameter based on the diff between the base and the resulting DID Document\n diddocContent = didDocDiff(\n didDocumentBuilder.build().toJSON(),\n indyDidDocumentFromDid(did, verificationKeyBase58).build().toJSON()\n )\n }\n }\n\n // Build did document\n const didDocument = didDocumentBuilder.build()\n\n return {\n diddocContent,\n didDocument,\n }\n }\n\n // FIXME: we need to completely revamp this logic, it's overly complex\n // We might even want to look at ditching the whole generic DIDs api ...\n public async create(agentContext: AgentContext, options: IndyVdrDidCreateOptions): Promise<IndyVdrDidCreateResult> {\n try {\n const res = await this.parseInput(agentContext, options)\n if (res.status === 'error') return this.didCreateFailedResult({ reason: res.reason })\n\n const did = res.did\n\n const pool = agentContext.dependencyManager.resolve(IndyVdrPoolService).getPoolForNamespace(res.namespace)\n\n let nymRequest: NymRequest | CustomRequest\n let didDocument: DidDocument | undefined\n let attribRequest: AttribRequest | CustomRequest | undefined\n let verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk> | undefined\n\n if (res.type === 'endorsedTransaction') {\n const { nymRequest: _nymRequest, attribRequest: _attribRequest } = res.endorsedTransaction\n nymRequest = new CustomRequest({ customRequest: _nymRequest })\n attribRequest = _attribRequest ? new CustomRequest({ customRequest: _attribRequest }) : undefined\n } else {\n const {\n services,\n useEndpointAttrib,\n alias,\n endorserNamespaceIdentifier,\n namespaceIdentifier,\n did,\n role,\n endorserDid,\n namespace,\n } = res\n verificationKey = res.verificationKey\n\n const { didDocument: _didDocument, diddocContent } = this.createDidDocument(\n did,\n verificationKey,\n services,\n useEndpointAttrib\n )\n didDocument = _didDocument\n\n const didRegisterSigningKey =\n options.options.endorserMode === 'internal'\n ? await verificationPublicJwkForIndyDid(agentContext, options.options.endorserDid)\n : undefined\n\n nymRequest = await this.createRegisterDidWriteRequest({\n agentContext,\n pool,\n signingKey: didRegisterSigningKey,\n submitterNamespaceIdentifier: endorserNamespaceIdentifier,\n namespaceIdentifier,\n verificationKey,\n alias,\n diddocContent,\n role,\n })\n\n if (services && useEndpointAttrib) {\n const endpoints = endpointsAttribFromServices(services)\n attribRequest = await this.createSetDidEndpointsRequest({\n agentContext,\n pool,\n signingKey: verificationKey,\n endorserDid: options.options.endorserMode === 'external' ? endorserDid : undefined,\n unqualifiedDid: namespaceIdentifier,\n endpoints,\n })\n }\n\n if (options.options.endorserMode === 'external') {\n // We already save the did record, including the link between kms key id and did key id\n await this.saveDidRecord(agentContext, did, didDocument, [\n {\n didDocumentRelativeKeyId: '#verkey',\n kmsKeyId: verificationKey.keyId,\n },\n ])\n const didAction: EndorseDidTxAction = {\n state: 'action',\n action: 'endorseIndyTransaction',\n endorserDid: endorserDid,\n nymRequest: nymRequest.body,\n attribRequest: attribRequest?.body,\n did: did,\n }\n\n return this.didCreateActionResult({ namespace, didAction, did })\n }\n }\n\n await this.registerPublicDid(agentContext, pool, nymRequest)\n if (attribRequest) await this.setEndpointsForDid(agentContext, pool, attribRequest)\n\n // DID Document is undefined if this method is called based on external endorsement\n // but in that case the did document is already saved\n if (verificationKey && didDocument) {\n await this.saveDidRecord(agentContext, did, didDocument, [\n {\n didDocumentRelativeKeyId: '#verkey',\n kmsKeyId: verificationKey.keyId,\n },\n ])\n }\n\n didDocument = didDocument ?? (await buildDidDocument(agentContext, pool, did))\n return this.didCreateFinishedResult({ did, didDocument, namespace: res.namespace })\n } catch (error) {\n agentContext.config.logger.error('Error creating indy did', {\n error,\n })\n return this.didCreateFailedResult({\n reason: `unknownError: ${error.message}`,\n })\n }\n }\n\n public async update(): Promise<DidUpdateResult> {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'notImplemented: updating did:indy not implemented yet',\n },\n }\n }\n\n public async deactivate(): Promise<DidDeactivateResult> {\n return {\n didDocumentMetadata: {},\n didRegistrationMetadata: {},\n didState: {\n state: 'failed',\n reason: 'notImplemented: deactivating did:indy not implemented yet',\n },\n }\n }\n\n private async createRegisterDidWriteRequest(options: {\n agentContext: AgentContext\n pool: IndyVdrPool\n submitterNamespaceIdentifier: string\n namespaceIdentifier: string\n verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>\n signingKey?: Kms.PublicJwk<Kms.Ed25519PublicJwk>\n alias: string | undefined\n diddocContent?: Record<string, unknown>\n role?: NymRequestRole\n }) {\n const {\n agentContext,\n pool,\n submitterNamespaceIdentifier,\n namespaceIdentifier,\n verificationKey,\n alias,\n signingKey,\n role,\n } = options\n\n // FIXME: Add diddocContent when supported by indy-vdr\n if (options.diddocContent) {\n throw new IndyVdrError('diddocContent is not yet supported')\n }\n\n const request = new NymRequest({\n submitterDid: submitterNamespaceIdentifier,\n dest: namespaceIdentifier,\n verkey: TypedArrayEncoder.toBase58(verificationKey.publicKey.publicKey),\n alias,\n role,\n })\n\n if (!signingKey) return request\n const writeRequest = await pool.prepareWriteRequest(agentContext, request, signingKey, undefined)\n return writeRequest\n }\n\n private async registerPublicDid<Request extends IndyVdrRequest>(\n agentContext: AgentContext,\n pool: IndyVdrPool,\n writeRequest: Request\n ) {\n const body = writeRequest.body\n try {\n const response = await pool.submitRequest(writeRequest)\n\n agentContext.config.logger.debug(`Register public did on ledger '${pool.indyNamespace}'\\nRequest: ${body}}`, {\n response,\n })\n\n return\n } catch (error) {\n agentContext.config.logger.error(\n `Error Registering public did on ledger '${pool.indyNamespace}'\\nRequest: ${body}}`\n )\n\n throw error\n }\n }\n\n private async createSetDidEndpointsRequest(options: {\n agentContext: AgentContext\n pool: IndyVdrPool\n signingKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>\n endorserDid?: string\n unqualifiedDid: string\n endpoints: IndyEndpointAttrib\n }): Promise<AttribRequest> {\n const { agentContext, pool, endpoints, unqualifiedDid, signingKey, endorserDid } = options\n const request = new AttribRequest({\n submitterDid: unqualifiedDid,\n targetDid: unqualifiedDid,\n raw: JSON.stringify({ endpoint: endpoints }),\n })\n\n const writeRequest = await pool.prepareWriteRequest(agentContext, request, signingKey, endorserDid)\n return writeRequest\n }\n\n private async setEndpointsForDid<Request extends IndyVdrRequest>(\n agentContext: AgentContext,\n pool: IndyVdrPool,\n writeRequest: Request\n ): Promise<void> {\n const body = writeRequest.body\n try {\n const response = await pool.submitRequest(writeRequest)\n\n agentContext.config.logger.debug(\n `Successfully set endpoints for did on ledger '${pool.indyNamespace}'.\\nRequest: ${body}}`,\n {\n response,\n }\n )\n } catch (error) {\n agentContext.config.logger.error(\n `Error setting endpoints for did on ledger '${pool.indyNamespace}'.\\nRequest: ${body}}`\n )\n\n throw new IndyVdrError(error)\n }\n }\n}\n\ninterface IndyVdrDidCreateOptionsWithoutDid extends DidCreateOptions {\n didDocument?: never // Not yet supported\n did?: never\n method: 'indy'\n options: {\n /**\n * Optionally an existing keyId can be provided, in this case the did will be created\n * based on the existing key\n */\n keyId?: string\n\n alias?: string\n role?: NymRequestRole\n services?: DidDocumentService[]\n useEndpointAttrib?: boolean\n\n // endorserDid is always required. We just have internal or external mode\n endorserDid: string\n // if endorserMode is 'internal', the endorserDid MUST be present in the wallet\n // if endorserMode is 'external', the endorserDid doesn't have to be present in the wallet\n endorserMode: 'internal' | 'external'\n endorsedTransaction?: never\n }\n}\n\n// When transactions have been endorsed. Only supported for external mode\n// this is a separate interface so we can remove all the properties we don't need anymore.\ninterface IndyVdrDidCreateOptionsForSubmission extends DidCreateOptions {\n didDocument?: never\n did: string // for submission MUST always have a did, so we know which did we're submitting the transaction for. We MUST check whether the did passed here, matches with the\n method?: never\n options: {\n endorserMode: 'external'\n\n // provide the endorsed transactions. If these are provided\n // we will submit the transactions to the ledger\n endorsedTransaction: {\n nymRequest: string\n attribRequest?: string\n }\n }\n}\n\nexport type IndyVdrDidCreateOptions = IndyVdrDidCreateOptionsWithoutDid | IndyVdrDidCreateOptionsForSubmission\n\ntype ParseInputOkEndorsedTransaction = {\n status: 'ok'\n did: string\n type: 'endorsedTransaction'\n endorsedTransaction: IndyVdrDidCreateOptionsForSubmission['options']['endorsedTransaction']\n namespaceIdentifier: string\n namespace: string\n endorserNamespaceIdentifier: string\n}\n\ntype ParseInputOkCreate = {\n status: 'ok'\n type: 'create'\n did: string\n verificationKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>\n namespaceIdentifier: string\n namespace: string\n endorserNamespaceIdentifier: string\n endorserDid: string\n alias?: string\n role?: NymRequestRole\n services?: DidDocumentService[]\n useEndpointAttrib?: boolean\n}\n\ntype parseInputError = { status: 'error'; reason: string }\n\ntype ParseInputResult = ParseInputOkEndorsedTransaction | ParseInputOkCreate | parseInputError\n\nexport interface EndorseDidTxAction extends DidOperationStateActionBase {\n action: 'endorseIndyTransaction'\n endorserDid: string\n nymRequest: string\n attribRequest?: string\n did: string\n}\n\nexport type IndyVdrDidCreateResult = DidCreateResult<EndorseDidTxAction>\n\nexport type NymRequestRole = 'STEWARD' | 'TRUSTEE' | 'ENDORSER' | 'NETWORK_MONITOR'\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrIndyDidResolver.d.mts","names":[],"sources":["../../src/dids/IndyVdrIndyDidResolver.ts"],"sourcesContent":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"IndyVdrIndyDidResolver.d.mts","names":[],"sources":["../../src/dids/IndyVdrIndyDidResolver.ts"],"sourcesContent":[],"mappings":";;;cAOa,sBAAA,YAAkC;;EAAlC,SAAA,aAAA,GAAuB,IAAA;EAAA,SAAA,oBAAA,GAAA,IAAA;SAMC,CAAA,YAAA,EAAA,YAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAA4B,OAA5B,CAAoC,mBAApC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrIndyDidResolver.d.ts","names":[],"sources":["../../src/dids/IndyVdrIndyDidResolver.ts"],"sourcesContent":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"IndyVdrIndyDidResolver.d.ts","names":[],"sources":["../../src/dids/IndyVdrIndyDidResolver.ts"],"sourcesContent":[],"mappings":";;;cAOa,sBAAA,YAAkC;;EAAlC,SAAA,aAAA,GAAuB,IAAA;EAAA,SAAA,oBAAA,GAAA,IAAA;SAMC,CAAA,YAAA,EAAA,YAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAA4B,OAA5B,CAAoC,mBAApC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
|
-
const require_IndyVdrPoolService = require('../pool/IndyVdrPoolService.js');
|
|
3
2
|
const require_didIndyUtil = require('./didIndyUtil.js');
|
|
3
|
+
const require_IndyVdrPoolService = require('../pool/IndyVdrPoolService.js');
|
|
4
4
|
require('../pool/index.js');
|
|
5
5
|
let __credo_ts_anoncreds = require("@credo-ts/anoncreds");
|
|
6
6
|
__credo_ts_anoncreds = require_rolldown_runtime.__toESM(__credo_ts_anoncreds);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { IndyVdrPoolService } from "../pool/IndyVdrPoolService.mjs";
|
|
2
1
|
import { buildDidDocument } from "./didIndyUtil.mjs";
|
|
2
|
+
import { IndyVdrPoolService } from "../pool/IndyVdrPoolService.mjs";
|
|
3
3
|
import "../pool/index.mjs";
|
|
4
4
|
import { parseIndyDid } from "@credo-ts/anoncreds";
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrIndyDidResolver.mjs","names":[],"sources":["../../src/dids/IndyVdrIndyDidResolver.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"IndyVdrIndyDidResolver.mjs","names":[],"sources":["../../src/dids/IndyVdrIndyDidResolver.ts"],"sourcesContent":["import { parseIndyDid } from '@credo-ts/anoncreds'\nimport type { AgentContext, DidResolutionResult, DidResolver } from '@credo-ts/core'\n\nimport { IndyVdrPoolService } from '../pool'\n\nimport { buildDidDocument } from './didIndyUtil'\n\nexport class IndyVdrIndyDidResolver implements DidResolver {\n public readonly supportedMethods = ['indy']\n\n public readonly allowsCaching = true\n public readonly allowsLocalDidRecord = true\n\n public async resolve(agentContext: AgentContext, did: string): Promise<DidResolutionResult> {\n const didDocumentMetadata = {}\n try {\n const poolService = agentContext.dependencyManager.resolve(IndyVdrPoolService)\n const pool = poolService.getPoolForNamespace(parseIndyDid(did).namespace)\n\n // Get DID Document from Get NYM response\n const didDocument = await buildDidDocument(agentContext, pool, did)\n\n return {\n didDocument,\n didDocumentMetadata,\n didResolutionMetadata: { contentType: 'application/did+ld+json' },\n }\n } catch (error) {\n return {\n didDocument: null,\n didDocumentMetadata,\n didResolutionMetadata: {\n error: 'notFound',\n message: `resolver_error: Unable to resolve did '${did}': ${error}`,\n },\n }\n }\n }\n}\n"],"mappings":";;;;;;AAOA,IAAa,yBAAb,MAA2D;;OACzC,mBAAmB,CAAC,OAAO;OAE3B,gBAAgB;OAChB,uBAAuB;;CAEvC,MAAa,QAAQ,cAA4B,KAA2C;EAC1F,MAAM,sBAAsB,EAAE;AAC9B,MAAI;AAOF,UAAO;IACL,aAHkB,MAAM,iBAAiB,cAJvB,aAAa,kBAAkB,QAAQ,mBAAmB,CACrD,oBAAoB,aAAa,IAAI,CAAC,UAAU,EAGV,IAAI;IAIjE;IACA,uBAAuB,EAAE,aAAa,2BAA2B;IAClE;WACM,OAAO;AACd,UAAO;IACL,aAAa;IACb;IACA,uBAAuB;KACrB,OAAO;KACP,SAAS,0CAA0C,IAAI,KAAK;KAC7D;IACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrSovDidResolver.d.mts","names":[],"sources":["../../src/dids/IndyVdrSovDidResolver.ts"],"sourcesContent":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"IndyVdrSovDidResolver.d.mts","names":[],"sources":["../../src/dids/IndyVdrSovDidResolver.ts"],"sourcesContent":[],"mappings":";;;cASa,qBAAA,YAAiC;;EAAjC,SAAA,aAAA,GAAsB,IAAA;EAAA,OAAA,CAAA,YAAA,EAKE,YALF,EAAA,GAAA,EAAA,MAAA,EAAA,MAAA,EAKqC,SALrC,CAAA,EAKiD,OALjD,CAKyD,mBALzD,CAAA;UAKE,YAAA;UAAmC,kBAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrSovDidResolver.d.ts","names":[],"sources":["../../src/dids/IndyVdrSovDidResolver.ts"],"sourcesContent":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"IndyVdrSovDidResolver.d.ts","names":[],"sources":["../../src/dids/IndyVdrSovDidResolver.ts"],"sourcesContent":[],"mappings":";;;cASa,qBAAA,YAAiC;;EAAjC,SAAA,aAAA,GAAsB,IAAA;EAAA,OAAA,CAAA,YAAA,EAKE,YALF,EAAA,GAAA,EAAA,MAAA,EAAA,MAAA,EAKqC,SALrC,CAAA,EAKiD,OALjD,CAKyD,mBALzD,CAAA;UAKE,YAAA;UAAmC,kBAAA"}
|
|
@@ -2,8 +2,8 @@ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
|
2
2
|
const require_IndyVdrError = require('../error/IndyVdrError.js');
|
|
3
3
|
const require_IndyVdrNotFound = require('../error/IndyVdrNotFound.js');
|
|
4
4
|
require('../error/index.js');
|
|
5
|
-
const require_IndyVdrPoolService = require('../pool/IndyVdrPoolService.js');
|
|
6
5
|
const require_didSovUtil = require('./didSovUtil.js');
|
|
6
|
+
const require_IndyVdrPoolService = require('../pool/IndyVdrPoolService.js');
|
|
7
7
|
let __hyperledger_indy_vdr_shared = require("@hyperledger/indy-vdr-shared");
|
|
8
8
|
__hyperledger_indy_vdr_shared = require_rolldown_runtime.__toESM(__hyperledger_indy_vdr_shared);
|
|
9
9
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { IndyVdrError } from "../error/IndyVdrError.mjs";
|
|
2
2
|
import { IndyVdrNotFoundError } from "../error/IndyVdrNotFound.mjs";
|
|
3
3
|
import "../error/index.mjs";
|
|
4
|
-
import { IndyVdrPoolService } from "../pool/IndyVdrPoolService.mjs";
|
|
5
4
|
import { addServicesFromEndpointsAttrib, sovDidDocumentFromDid } from "./didSovUtil.mjs";
|
|
5
|
+
import { IndyVdrPoolService } from "../pool/IndyVdrPoolService.mjs";
|
|
6
6
|
import { GetAttribRequest, GetNymRequest } from "@hyperledger/indy-vdr-shared";
|
|
7
7
|
|
|
8
8
|
//#region src/dids/IndyVdrSovDidResolver.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrSovDidResolver.mjs","names":[],"sources":["../../src/dids/IndyVdrSovDidResolver.ts"],"sourcesContent":["import type { AgentContext, DidResolutionResult, DidResolver, ParsedDid } from '@credo-ts/core'\nimport
|
|
1
|
+
{"version":3,"file":"IndyVdrSovDidResolver.mjs","names":[],"sources":["../../src/dids/IndyVdrSovDidResolver.ts"],"sourcesContent":["import type { AgentContext, DidResolutionResult, DidResolver, ParsedDid } from '@credo-ts/core'\nimport { GetAttribRequest, GetNymRequest } from '@hyperledger/indy-vdr-shared'\nimport { IndyVdrError, IndyVdrNotFoundError } from '../error'\nimport type { IndyVdrPool } from '../pool'\nimport { IndyVdrPoolService } from '../pool/IndyVdrPoolService'\nimport type { GetNymResponseData, IndyEndpointAttrib } from './didSovUtil'\n\nimport { addServicesFromEndpointsAttrib, sovDidDocumentFromDid } from './didSovUtil'\n\nexport class IndyVdrSovDidResolver implements DidResolver {\n public readonly supportedMethods = ['sov']\n\n public readonly allowsCaching = true\n\n public async resolve(agentContext: AgentContext, did: string, parsed: ParsedDid): Promise<DidResolutionResult> {\n const didDocumentMetadata = {}\n\n try {\n const indyVdrPoolService = agentContext.dependencyManager.resolve(IndyVdrPoolService)\n\n // FIXME: this actually fetches the did twice (if not cached), once for the pool and once for the nym\n // we do not store the diddocContent in the pool cache currently so we need to fetch it again\n // The logic is mostly to determine which pool to use for a did\n const { pool } = await indyVdrPoolService.getPoolForDid(agentContext, parsed.id)\n const nym = await this.getPublicDid(pool, parsed.id)\n const endpoints = await this.getEndpointsForDid(agentContext, pool, parsed.id)\n\n const keyAgreementId = `${parsed.did}#key-agreement-1`\n const builder = sovDidDocumentFromDid(parsed.did, nym.verkey)\n\n if (endpoints) {\n addServicesFromEndpointsAttrib(builder, parsed.did, endpoints, keyAgreementId)\n }\n\n return {\n didDocument: builder.build(),\n didDocumentMetadata,\n didResolutionMetadata: { contentType: 'application/did+ld+json' },\n }\n } catch (error) {\n return {\n didDocument: null,\n didDocumentMetadata,\n didResolutionMetadata: {\n error: 'notFound',\n message: `resolver_error: Unable to resolve did '${did}': ${error}`,\n },\n }\n }\n }\n\n private async getPublicDid(pool: IndyVdrPool, unqualifiedDid: string) {\n const request = new GetNymRequest({ dest: unqualifiedDid })\n const didResponse = await pool.submitRequest(request)\n\n if (!didResponse.result.data) {\n throw new IndyVdrNotFoundError(`DID ${unqualifiedDid} not found`)\n }\n return JSON.parse(didResponse.result.data) as GetNymResponseData\n }\n\n private async getEndpointsForDid(agentContext: AgentContext, pool: IndyVdrPool, did: string) {\n try {\n agentContext.config.logger.debug(`Get endpoints for did '${did}' from ledger '${pool.indyNamespace}'`)\n\n const request = new GetAttribRequest({ targetDid: did, raw: 'endpoint' })\n\n agentContext.config.logger.debug(\n `Submitting get endpoint ATTRIB request for did '${did}' to ledger '${pool.indyNamespace}'`\n )\n const response = await pool.submitRequest(request)\n\n if (!response.result.data) {\n return null\n }\n\n const endpoints = JSON.parse(response.result.data as string)?.endpoint as IndyEndpointAttrib\n agentContext.config.logger.debug(\n `Got endpoints '${JSON.stringify(endpoints)}' for did '${did}' from ledger '${pool.indyNamespace}'`,\n {\n response,\n endpoints,\n }\n )\n\n return endpoints ?? null\n } catch (error) {\n agentContext.config.logger.error(\n `Error retrieving endpoints for did '${did}' from ledger '${pool.indyNamespace}'`,\n {\n error,\n }\n )\n\n throw new IndyVdrError(error)\n }\n }\n}\n"],"mappings":";;;;;;;;AASA,IAAa,wBAAb,MAA0D;;OACxC,mBAAmB,CAAC,MAAM;OAE1B,gBAAgB;;CAEhC,MAAa,QAAQ,cAA4B,KAAa,QAAiD;EAC7G,MAAM,sBAAsB,EAAE;AAE9B,MAAI;GAMF,MAAM,EAAE,SAAS,MALU,aAAa,kBAAkB,QAAQ,mBAAmB,CAK3C,cAAc,cAAc,OAAO,GAAG;GAChF,MAAM,MAAM,MAAM,KAAK,aAAa,MAAM,OAAO,GAAG;GACpD,MAAM,YAAY,MAAM,KAAK,mBAAmB,cAAc,MAAM,OAAO,GAAG;GAE9E,MAAM,iBAAiB,GAAG,OAAO,IAAI;GACrC,MAAM,UAAU,sBAAsB,OAAO,KAAK,IAAI,OAAO;AAE7D,OAAI,UACF,gCAA+B,SAAS,OAAO,KAAK,WAAW,eAAe;AAGhF,UAAO;IACL,aAAa,QAAQ,OAAO;IAC5B;IACA,uBAAuB,EAAE,aAAa,2BAA2B;IAClE;WACM,OAAO;AACd,UAAO;IACL,aAAa;IACb;IACA,uBAAuB;KACrB,OAAO;KACP,SAAS,0CAA0C,IAAI,KAAK;KAC7D;IACF;;;CAIL,MAAc,aAAa,MAAmB,gBAAwB;EACpE,MAAM,UAAU,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;EAC3D,MAAM,cAAc,MAAM,KAAK,cAAc,QAAQ;AAErD,MAAI,CAAC,YAAY,OAAO,KACtB,OAAM,IAAI,qBAAqB,OAAO,eAAe,YAAY;AAEnE,SAAO,KAAK,MAAM,YAAY,OAAO,KAAK;;CAG5C,MAAc,mBAAmB,cAA4B,MAAmB,KAAa;AAC3F,MAAI;AACF,gBAAa,OAAO,OAAO,MAAM,0BAA0B,IAAI,iBAAiB,KAAK,cAAc,GAAG;GAEtG,MAAM,UAAU,IAAI,iBAAiB;IAAE,WAAW;IAAK,KAAK;IAAY,CAAC;AAEzE,gBAAa,OAAO,OAAO,MACzB,mDAAmD,IAAI,eAAe,KAAK,cAAc,GAC1F;GACD,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ;AAElD,OAAI,CAAC,SAAS,OAAO,KACnB,QAAO;GAGT,MAAM,YAAY,KAAK,MAAM,SAAS,OAAO,KAAe,EAAE;AAC9D,gBAAa,OAAO,OAAO,MACzB,kBAAkB,KAAK,UAAU,UAAU,CAAC,aAAa,IAAI,iBAAiB,KAAK,cAAc,IACjG;IACE;IACA;IACD,CACF;AAED,UAAO,aAAa;WACb,OAAO;AACd,gBAAa,OAAO,OAAO,MACzB,uCAAuC,IAAI,iBAAiB,KAAK,cAAc,IAC/E,EACE,OACD,CACF;AAED,SAAM,IAAI,aAAa,MAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"didIndyUtil.mjs","names":["output: Record<string, unknown>","key","diddocContent: Record<string, unknown>"],"sources":["../../src/dids/didIndyUtil.ts"],"sourcesContent":["import type { AgentContext } from '@credo-ts/core'\nimport type { IndyVdrPool } from '../pool'\nimport type { GetNymResponseData, IndyEndpointAttrib } from './didSovUtil'\n\nimport { parseIndyDid } from '@credo-ts/anoncreds'\nimport {\n CredoError,\n DidDocument,\n DidDocumentBuilder,\n DidsApi,\n Hasher,\n JsonTransformer,\n Kms,\n TypedArrayEncoder,\n convertPublicKeyToX25519,\n getPublicJwkFromVerificationMethod,\n} from '@credo-ts/core'\nimport { GetAttribRequest, GetNymRequest } from '@hyperledger/indy-vdr-shared'\n\nimport { IndyVdrError, IndyVdrNotFoundError } from '../error'\n\nimport { addServicesFromEndpointsAttrib, getFullVerkey } from './didSovUtil'\n\n// Create a base DIDDoc template according to https://hyperledger.github.io/indy-did-method/#base-diddoc-template\nexport function indyDidDocumentFromDid(did: string, verKeyBase58: string) {\n const verificationMethodId = `${did}#verkey`\n\n const publicKeyBase58 = verKeyBase58\n\n const builder = new DidDocumentBuilder(did)\n .addContext('https://w3id.org/security/suites/ed25519-2018/v1')\n .addVerificationMethod({\n controller: did,\n id: verificationMethodId,\n publicKeyBase58,\n type: 'Ed25519VerificationKey2018',\n })\n .addAuthentication(verificationMethodId)\n\n return builder\n}\n\nexport function createKeyAgreementKey(verkey: string) {\n return TypedArrayEncoder.toBase58(convertPublicKeyToX25519(TypedArrayEncoder.fromBase58(verkey)))\n}\n\nconst deepMerge = (a: Record<string, unknown>, b: Record<string, unknown>) => {\n const output: Record<string, unknown> = {}\n\n for (const key of [...new Set([...Object.keys(a), ...Object.keys(b)])]) {\n // Only an object includes a given key: just output it\n if (a[key] && !b[key]) {\n output[key] = a[key]\n } else if (!a[key] && b[key]) {\n output[key] = b[key]\n } else {\n // Both objects do include the key\n // Some or both are arrays\n if (Array.isArray(a[key])) {\n if (Array.isArray(b[key])) {\n const element = new Set()\n\n for (const item of a[key] as Array<unknown>) {\n element.add(item)\n }\n\n for (const item of b[key] as Array<unknown>) {\n element.add(item)\n }\n\n output[key] = Array.from(element)\n } else {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const arr = a[key] as Array<any>\n output[key] = Array.from(new Set(...arr, b[key]))\n }\n } else if (Array.isArray(b[key])) {\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const arr = b[key] as Array<any>\n output[key] = Array.from(new Set(...arr, a[key]))\n // Both elements are objects: recursive merge\n } else if (typeof a[key] === 'object' && typeof b[key] === 'object') {\n output[key] = deepMerge(a, b)\n }\n }\n }\n return output\n}\n\n/**\n * Combine a JSON content with the contents of a DidDocument\n * @param didDoc object containing original DIDDocument\n * @param json object containing extra DIDDoc contents\n *\n * @returns a DidDocument object resulting from the combination of both\n */\nexport function combineDidDocumentWithJson(didDoc: DidDocument, json: Record<string, unknown>) {\n const didDocJson = didDoc.toJSON()\n const combinedJson = deepMerge(didDocJson, json)\n return JsonTransformer.fromJSON(combinedJson, DidDocument)\n}\n\n/**\n * Processes the difference between a base DidDocument and a complete DidDocument\n *\n * Note: it does deep comparison based only on \"id\" field to determine whether is\n * the same object or is a different one\n *\n * @param extra complete DidDocument\n * @param base base DidDocument\n * @returns diff object\n */\nexport function didDocDiff(extra: Record<string, unknown>, base: Record<string, unknown>) {\n const output: Record<string, unknown> = {}\n for (const key in extra) {\n if (!(key in base)) {\n output[key] = extra[key]\n } else {\n // They are arrays: compare elements\n if (Array.isArray(extra[key]) && Array.isArray(base[key])) {\n // Different types: return the extra\n output[key] = []\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const baseAsArray = base[key] as Array<any>\n // biome-ignore lint/suspicious/noExplicitAny: <explanation>\n const extraAsArray = extra[key] as Array<any>\n for (const element of extraAsArray) {\n if (!baseAsArray.find((item) => item.id === element.id)) {\n ;(output[key] as Array<unknown>).push(element)\n }\n }\n } // They are both objects: do recursive diff\n else if (typeof extra[key] === 'object' && typeof base[key] === 'object') {\n output[key] = didDocDiff(extra[key] as Record<string, unknown>, base[key] as Record<string, unknown>)\n } else {\n output[key] = extra[key]\n }\n }\n }\n return output\n}\n\n/**\n * Check whether the did is a self certifying did. If the verkey is abbreviated this method\n * will always return true. Make sure that the verkey you pass in this method belongs to the\n * did passed in\n *\n * @return Boolean indicating whether the did is self certifying\n */\nexport function isSelfCertifiedIndyDid(did: string, verkey: string): boolean {\n const { namespace } = parseIndyDid(did)\n const { did: didFromVerkey } = indyDidFromNamespaceAndInitialKey(\n namespace,\n Kms.PublicJwk.fromPublicKey({\n crv: 'Ed25519',\n kty: 'OKP',\n publicKey: TypedArrayEncoder.fromBase58(verkey),\n })\n )\n\n if (didFromVerkey === did) {\n return true\n }\n\n return false\n}\n\nexport function indyDidFromNamespaceAndInitialKey(namespace: string, initialKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>) {\n const buffer = Hasher.hash(initialKey.publicKey.publicKey, 'sha-256')\n\n const id = TypedArrayEncoder.toBase58(buffer.slice(0, 16))\n const verkey = TypedArrayEncoder.toBase58(initialKey.publicKey.publicKey)\n const did = `did:indy:${namespace}:${id}`\n\n return { did, id, verkey }\n}\n\n/**\n * Fetches the verification key for a given did:indy did and returns the key as a {@link Key} object.\n *\n * @throws {@link CredoError} if the did could not be resolved or the key could not be extracted\n */\nexport async function verificationPublicJwkForIndyDid(agentContext: AgentContext, did: string) {\n const didsApi = agentContext.dependencyManager.resolve(DidsApi)\n\n const { keys, didDocument } = await didsApi.resolveCreatedDidDocumentWithKeys(did)\n\n const verificationMethod = didDocument.dereferenceKey('#verkey')\n const key = keys?.find((key) => key.didDocumentRelativeKeyId === '#verkey')\n\n const publicJwk = getPublicJwkFromVerificationMethod(verificationMethod)\n if (!publicJwk.is(Kms.Ed25519PublicJwk)) {\n throw new CredoError('Expected #verkey verification mehod to be of type Ed25519')\n }\n\n publicJwk.keyId = key?.kmsKeyId ?? publicJwk.legacyKeyId\n return publicJwk\n}\n\nexport async function getPublicDid(pool: IndyVdrPool, unqualifiedDid: string) {\n const request = new GetNymRequest({ dest: unqualifiedDid })\n\n const didResponse = await pool.submitRequest(request)\n\n if (!didResponse.result.data) {\n throw new IndyVdrNotFoundError(`DID ${unqualifiedDid} not found in indy namespace ${pool.indyNamespace}`)\n }\n return JSON.parse(didResponse.result.data) as GetNymResponseData\n}\n\nexport async function getEndpointsForDid(agentContext: AgentContext, pool: IndyVdrPool, unqualifiedDid: string) {\n try {\n agentContext.config.logger.debug(`Get endpoints for did '${unqualifiedDid}' from ledger '${pool.indyNamespace}'`)\n\n const request = new GetAttribRequest({ targetDid: unqualifiedDid, raw: 'endpoint' })\n\n agentContext.config.logger.debug(\n `Submitting get endpoint ATTRIB request for did '${unqualifiedDid}' to ledger '${pool.indyNamespace}'`\n )\n const response = await pool.submitRequest(request)\n\n if (!response.result.data) {\n return null\n }\n\n const endpoints = JSON.parse(response.result.data as string)?.endpoint as IndyEndpointAttrib\n agentContext.config.logger.debug(\n `Got endpoints '${JSON.stringify(endpoints)}' for did '${unqualifiedDid}' from ledger '${pool.indyNamespace}'`,\n {\n response,\n endpoints,\n }\n )\n\n return endpoints\n } catch (error) {\n agentContext.config.logger.error(\n `Error retrieving endpoints for did '${unqualifiedDid}' from ledger '${pool.indyNamespace}'`,\n {\n error,\n }\n )\n\n throw new IndyVdrError(error)\n }\n}\n\nexport async function buildDidDocument(agentContext: AgentContext, pool: IndyVdrPool, did: string) {\n const { namespaceIdentifier } = parseIndyDid(did)\n const nym = await getPublicDid(pool, namespaceIdentifier)\n\n // Create base Did Document\n\n // For modern did:indy DIDs, we assume that GET_NYM is always a full verkey in base58.\n // For backwards compatibility, we accept a shortened verkey and convert it using previous convention\n const verkey = getFullVerkey(namespaceIdentifier, nym.verkey)\n\n const builder = indyDidDocumentFromDid(did, verkey)\n\n // If GET_NYM does not return any diddocContent, fallback to legacy GET_ATTRIB endpoint\n if (!nym.diddocContent) {\n const keyAgreementId = `${did}#key-agreement-1`\n const endpoints = await getEndpointsForDid(agentContext, pool, namespaceIdentifier)\n\n if (endpoints) {\n builder\n .addContext('https://w3id.org/security/suites/x25519-2019/v1')\n .addVerificationMethod({\n controller: did,\n id: keyAgreementId,\n publicKeyBase58: createKeyAgreementKey(verkey),\n type: 'X25519KeyAgreementKey2019',\n })\n .addKeyAgreement(keyAgreementId)\n\n // Process endpoint attrib following the same rules as for did:sov\n addServicesFromEndpointsAttrib(builder, did, endpoints, keyAgreementId)\n }\n return builder.build()\n }\n // Combine it with didDoc\n let diddocContent: Record<string, unknown>\n try {\n diddocContent = JSON.parse(nym.diddocContent)\n } catch (error) {\n agentContext.config.logger.error(`Nym diddocContent is not a valid json string: ${nym.diddocContent}`)\n throw new IndyVdrError(`Nym diddocContent failed to parse as JSON: ${error}`)\n }\n return combineDidDocumentWithJson(builder.build(), diddocContent)\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"didIndyUtil.mjs","names":["output: Record<string, unknown>","key","diddocContent: Record<string, unknown>"],"sources":["../../src/dids/didIndyUtil.ts"],"sourcesContent":["import { parseIndyDid } from '@credo-ts/anoncreds'\nimport type { AgentContext } from '@credo-ts/core'\nimport {\n CredoError,\n convertPublicKeyToX25519,\n DidDocument,\n DidDocumentBuilder,\n DidsApi,\n getPublicJwkFromVerificationMethod,\n Hasher,\n JsonTransformer,\n Kms,\n TypedArrayEncoder,\n} from '@credo-ts/core'\nimport { GetAttribRequest, GetNymRequest } from '@hyperledger/indy-vdr-shared'\nimport { IndyVdrError, IndyVdrNotFoundError } from '../error'\nimport type { IndyVdrPool } from '../pool'\nimport type { GetNymResponseData, IndyEndpointAttrib } from './didSovUtil'\n\nimport { addServicesFromEndpointsAttrib, getFullVerkey } from './didSovUtil'\n\n// Create a base DIDDoc template according to https://hyperledger.github.io/indy-did-method/#base-diddoc-template\nexport function indyDidDocumentFromDid(did: string, verKeyBase58: string) {\n const verificationMethodId = `${did}#verkey`\n\n const publicKeyBase58 = verKeyBase58\n\n const builder = new DidDocumentBuilder(did)\n .addContext('https://w3id.org/security/suites/ed25519-2018/v1')\n .addVerificationMethod({\n controller: did,\n id: verificationMethodId,\n publicKeyBase58,\n type: 'Ed25519VerificationKey2018',\n })\n .addAuthentication(verificationMethodId)\n\n return builder\n}\n\nexport function createKeyAgreementKey(verkey: string) {\n return TypedArrayEncoder.toBase58(convertPublicKeyToX25519(TypedArrayEncoder.fromBase58(verkey)))\n}\n\nconst deepMerge = (a: Record<string, unknown>, b: Record<string, unknown>) => {\n const output: Record<string, unknown> = {}\n\n for (const key of [...new Set([...Object.keys(a), ...Object.keys(b)])]) {\n // Only an object includes a given key: just output it\n if (a[key] && !b[key]) {\n output[key] = a[key]\n } else if (!a[key] && b[key]) {\n output[key] = b[key]\n } else {\n // Both objects do include the key\n // Some or both are arrays\n if (Array.isArray(a[key])) {\n if (Array.isArray(b[key])) {\n const element = new Set()\n\n for (const item of a[key] as Array<unknown>) {\n element.add(item)\n }\n\n for (const item of b[key] as Array<unknown>) {\n element.add(item)\n }\n\n output[key] = Array.from(element)\n } else {\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n const arr = a[key] as Array<any>\n output[key] = Array.from(new Set(...arr, b[key]))\n }\n } else if (Array.isArray(b[key])) {\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n const arr = b[key] as Array<any>\n output[key] = Array.from(new Set(...arr, a[key]))\n // Both elements are objects: recursive merge\n } else if (typeof a[key] === 'object' && typeof b[key] === 'object') {\n output[key] = deepMerge(a, b)\n }\n }\n }\n return output\n}\n\n/**\n * Combine a JSON content with the contents of a DidDocument\n * @param didDoc object containing original DIDDocument\n * @param json object containing extra DIDDoc contents\n *\n * @returns a DidDocument object resulting from the combination of both\n */\nexport function combineDidDocumentWithJson(didDoc: DidDocument, json: Record<string, unknown>) {\n const didDocJson = didDoc.toJSON()\n const combinedJson = deepMerge(didDocJson, json)\n return JsonTransformer.fromJSON(combinedJson, DidDocument)\n}\n\n/**\n * Processes the difference between a base DidDocument and a complete DidDocument\n *\n * Note: it does deep comparison based only on \"id\" field to determine whether is\n * the same object or is a different one\n *\n * @param extra complete DidDocument\n * @param base base DidDocument\n * @returns diff object\n */\nexport function didDocDiff(extra: Record<string, unknown>, base: Record<string, unknown>) {\n const output: Record<string, unknown> = {}\n for (const key in extra) {\n if (!(key in base)) {\n output[key] = extra[key]\n } else {\n // They are arrays: compare elements\n if (Array.isArray(extra[key]) && Array.isArray(base[key])) {\n // Different types: return the extra\n output[key] = []\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n const baseAsArray = base[key] as Array<any>\n // biome-ignore lint/suspicious/noExplicitAny: no explanation\n const extraAsArray = extra[key] as Array<any>\n for (const element of extraAsArray) {\n if (!baseAsArray.find((item) => item.id === element.id)) {\n ;(output[key] as Array<unknown>).push(element)\n }\n }\n } // They are both objects: do recursive diff\n else if (typeof extra[key] === 'object' && typeof base[key] === 'object') {\n output[key] = didDocDiff(extra[key] as Record<string, unknown>, base[key] as Record<string, unknown>)\n } else {\n output[key] = extra[key]\n }\n }\n }\n return output\n}\n\n/**\n * Check whether the did is a self certifying did. If the verkey is abbreviated this method\n * will always return true. Make sure that the verkey you pass in this method belongs to the\n * did passed in\n *\n * @return Boolean indicating whether the did is self certifying\n */\nexport function isSelfCertifiedIndyDid(did: string, verkey: string): boolean {\n const { namespace } = parseIndyDid(did)\n const { did: didFromVerkey } = indyDidFromNamespaceAndInitialKey(\n namespace,\n Kms.PublicJwk.fromPublicKey({\n crv: 'Ed25519',\n kty: 'OKP',\n publicKey: TypedArrayEncoder.fromBase58(verkey),\n })\n )\n\n if (didFromVerkey === did) {\n return true\n }\n\n return false\n}\n\nexport function indyDidFromNamespaceAndInitialKey(namespace: string, initialKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>) {\n const buffer = Hasher.hash(initialKey.publicKey.publicKey, 'sha-256')\n\n const id = TypedArrayEncoder.toBase58(buffer.slice(0, 16))\n const verkey = TypedArrayEncoder.toBase58(initialKey.publicKey.publicKey)\n const did = `did:indy:${namespace}:${id}`\n\n return { did, id, verkey }\n}\n\n/**\n * Fetches the verification key for a given did:indy did and returns the key as a {@link Key} object.\n *\n * @throws {@link CredoError} if the did could not be resolved or the key could not be extracted\n */\nexport async function verificationPublicJwkForIndyDid(agentContext: AgentContext, did: string) {\n const didsApi = agentContext.dependencyManager.resolve(DidsApi)\n\n const { keys, didDocument } = await didsApi.resolveCreatedDidDocumentWithKeys(did)\n\n const verificationMethod = didDocument.dereferenceKey('#verkey')\n const key = keys?.find((key) => key.didDocumentRelativeKeyId === '#verkey')\n\n const publicJwk = getPublicJwkFromVerificationMethod(verificationMethod)\n if (!publicJwk.is(Kms.Ed25519PublicJwk)) {\n throw new CredoError('Expected #verkey verification mehod to be of type Ed25519')\n }\n\n publicJwk.keyId = key?.kmsKeyId ?? publicJwk.legacyKeyId\n return publicJwk\n}\n\nexport async function getPublicDid(pool: IndyVdrPool, unqualifiedDid: string) {\n const request = new GetNymRequest({ dest: unqualifiedDid })\n\n const didResponse = await pool.submitRequest(request)\n\n if (!didResponse.result.data) {\n throw new IndyVdrNotFoundError(`DID ${unqualifiedDid} not found in indy namespace ${pool.indyNamespace}`)\n }\n return JSON.parse(didResponse.result.data) as GetNymResponseData\n}\n\nexport async function getEndpointsForDid(agentContext: AgentContext, pool: IndyVdrPool, unqualifiedDid: string) {\n try {\n agentContext.config.logger.debug(`Get endpoints for did '${unqualifiedDid}' from ledger '${pool.indyNamespace}'`)\n\n const request = new GetAttribRequest({ targetDid: unqualifiedDid, raw: 'endpoint' })\n\n agentContext.config.logger.debug(\n `Submitting get endpoint ATTRIB request for did '${unqualifiedDid}' to ledger '${pool.indyNamespace}'`\n )\n const response = await pool.submitRequest(request)\n\n if (!response.result.data) {\n return null\n }\n\n const endpoints = JSON.parse(response.result.data as string)?.endpoint as IndyEndpointAttrib\n agentContext.config.logger.debug(\n `Got endpoints '${JSON.stringify(endpoints)}' for did '${unqualifiedDid}' from ledger '${pool.indyNamespace}'`,\n {\n response,\n endpoints,\n }\n )\n\n return endpoints\n } catch (error) {\n agentContext.config.logger.error(\n `Error retrieving endpoints for did '${unqualifiedDid}' from ledger '${pool.indyNamespace}'`,\n {\n error,\n }\n )\n\n throw new IndyVdrError(error)\n }\n}\n\nexport async function buildDidDocument(agentContext: AgentContext, pool: IndyVdrPool, did: string) {\n const { namespaceIdentifier } = parseIndyDid(did)\n const nym = await getPublicDid(pool, namespaceIdentifier)\n\n // Create base Did Document\n\n // For modern did:indy DIDs, we assume that GET_NYM is always a full verkey in base58.\n // For backwards compatibility, we accept a shortened verkey and convert it using previous convention\n const verkey = getFullVerkey(namespaceIdentifier, nym.verkey)\n\n const builder = indyDidDocumentFromDid(did, verkey)\n\n // If GET_NYM does not return any diddocContent, fallback to legacy GET_ATTRIB endpoint\n if (!nym.diddocContent) {\n const keyAgreementId = `${did}#key-agreement-1`\n const endpoints = await getEndpointsForDid(agentContext, pool, namespaceIdentifier)\n\n if (endpoints) {\n builder\n .addContext('https://w3id.org/security/suites/x25519-2019/v1')\n .addVerificationMethod({\n controller: did,\n id: keyAgreementId,\n publicKeyBase58: createKeyAgreementKey(verkey),\n type: 'X25519KeyAgreementKey2019',\n })\n .addKeyAgreement(keyAgreementId)\n\n // Process endpoint attrib following the same rules as for did:sov\n addServicesFromEndpointsAttrib(builder, did, endpoints, keyAgreementId)\n }\n return builder.build()\n }\n // Combine it with didDoc\n let diddocContent: Record<string, unknown>\n try {\n diddocContent = JSON.parse(nym.diddocContent)\n } catch (error) {\n agentContext.config.logger.error(`Nym diddocContent is not a valid json string: ${nym.diddocContent}`)\n throw new IndyVdrError(`Nym diddocContent failed to parse as JSON: ${error}`)\n }\n return combineDidDocumentWithJson(builder.build(), diddocContent)\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"didSovUtil.mjs","names":["commTypes: CommEndpointType[]","types: CommEndpointType[]","endpoint"],"sources":["../../src/dids/didSovUtil.ts"],"sourcesContent":["import {\n Buffer,\n CredoError,\n DidCommV1Service,\n DidCommV2Service,\n DidDocumentBuilder,\n DidDocumentService,\n NewDidCommV2Service,\n NewDidCommV2ServiceEndpoint,\n TypedArrayEncoder,\n convertPublicKeyToX25519,\n} from '@credo-ts/core'\n\nexport type CommEndpointType = 'endpoint' | 'did-communication' | 'DIDComm' | 'DIDCommMessaging'\n\nexport interface IndyEndpointAttrib {\n endpoint?: string\n types?: Array<CommEndpointType>\n routingKeys?: string[]\n [key: string]: unknown\n}\n\nexport interface GetNymResponseData {\n did: string\n verkey: string\n role: string\n alias?: string\n diddocContent?: string\n}\n\nexport const FULL_VERKEY_REGEX = /^[1-9A-HJ-NP-Za-km-z]{43,44}$/\n\n/**\n * Check a base58 encoded string against a regex expression to determine if it is a full valid verkey\n * @param verkey Base58 encoded string representation of a verkey\n * @return Boolean indicating if the string is a valid verkey\n */\nexport function isFullVerkey(verkey: string): boolean {\n return FULL_VERKEY_REGEX.test(verkey)\n}\n\nexport function getFullVerkey(did: string, verkey: string) {\n if (isFullVerkey(verkey)) return verkey\n\n // Did could have did:xxx prefix, only take the last item after :\n const id = did.split(':').pop() ?? did\n // Verkey is prefixed with ~ if abbreviated\n const verkeyWithoutTilde = verkey.slice(1)\n\n // Create base58 encoded public key (32 bytes)\n return TypedArrayEncoder.toBase58(\n Buffer.concat([\n // Take did identifier (16 bytes)\n TypedArrayEncoder.fromBase58(id),\n // Concat the abbreviated verkey (16 bytes)\n TypedArrayEncoder.fromBase58(verkeyWithoutTilde),\n ])\n )\n}\n\nexport function sovDidDocumentFromDid(fullDid: string, verkey: string) {\n const verificationMethodId = `${fullDid}#key-1`\n const keyAgreementId = `${fullDid}#key-agreement-1`\n\n const publicKeyBase58 = getFullVerkey(fullDid, verkey)\n const publicKeyX25519 = TypedArrayEncoder.toBase58(\n convertPublicKeyToX25519(TypedArrayEncoder.fromBase58(publicKeyBase58))\n )\n\n const builder = new DidDocumentBuilder(fullDid)\n .addContext('https://w3id.org/security/suites/ed25519-2018/v1')\n .addContext('https://w3id.org/security/suites/x25519-2019/v1')\n .addVerificationMethod({\n controller: fullDid,\n id: verificationMethodId,\n publicKeyBase58: publicKeyBase58,\n type: 'Ed25519VerificationKey2018',\n })\n .addVerificationMethod({\n controller: fullDid,\n id: keyAgreementId,\n publicKeyBase58: publicKeyX25519,\n type: 'X25519KeyAgreementKey2019',\n })\n .addAuthentication(verificationMethodId)\n .addAssertionMethod(verificationMethodId)\n .addKeyAgreement(keyAgreementId)\n\n return builder\n}\n\n// Process Indy Attrib Endpoint Types according to: https://sovrin-foundation.github.io/sovrin/spec/did-method-spec-template.html > Read (Resolve) > DID Service Endpoint\nfunction processEndpointTypes(types?: string[]) {\n const expectedTypes = ['endpoint', 'did-communication', 'DIDComm', 'DIDCommMessaging']\n const defaultTypes = ['endpoint', 'did-communication']\n\n // Return default types if types \"is NOT present [or] empty\"\n if (!types || types.length <= 0) {\n return defaultTypes\n }\n\n // Return default types if types \"contain any other values\"\n for (const type of types) {\n if (!expectedTypes.includes(type)) {\n return defaultTypes\n }\n }\n\n // Return provided types\n return types\n}\n\nexport function endpointsAttribFromServices(services: DidDocumentService[]): IndyEndpointAttrib {\n const commTypes: CommEndpointType[] = ['endpoint', 'did-communication', 'DIDComm', 'DIDCommMessaging']\n const commServices = services.filter((item) => commTypes.includes(item.type as CommEndpointType))\n\n const endpoint =\n commServices[0] instanceof NewDidCommV2Service\n ? commServices[0].firstServiceEndpointUri\n : commServices[0].serviceEndpoint\n\n if (typeof endpoint !== 'string') {\n throw new CredoError(\n `For unknown service endpoint types (${commServices[0].type}) the 'serviceEndpoint' needs to be of type 'string'`\n )\n }\n\n // Check that all services use the same endpoint, as only one is accepted\n if (\n !commServices.every(\n (item) => (item instanceof NewDidCommV2Service ? item.firstServiceEndpointUri : item.serviceEndpoint) === endpoint\n )\n ) {\n throw new CredoError('serviceEndpoint for all services must match')\n }\n\n const types: CommEndpointType[] = []\n const routingKeys = new Set<string>()\n\n for (const commService of commServices) {\n const commServiceType = commService.type as CommEndpointType\n if (types.includes(commServiceType)) {\n throw new CredoError('Only a single communication service per type is supported')\n }\n\n types.push(commServiceType)\n\n if (\n (commService instanceof DidCommV1Service || commService instanceof DidCommV2Service) &&\n commService.routingKeys\n ) {\n for (const item of commService.routingKeys) {\n routingKeys.add(item)\n }\n } else if (commService instanceof NewDidCommV2Service) {\n const firstServiceEndpoint = Array.isArray(commService.serviceEndpoint)\n ? commService.serviceEndpoint[0]\n : commService.serviceEndpoint\n\n for (const item of firstServiceEndpoint.routingKeys ?? []) {\n routingKeys.add(item)\n }\n }\n }\n\n return { endpoint, types, routingKeys: Array.from(routingKeys) }\n}\n\nexport function addServicesFromEndpointsAttrib(\n builder: DidDocumentBuilder,\n did: string,\n endpoints: IndyEndpointAttrib,\n keyAgreementId: string\n) {\n const { endpoint, routingKeys, types, ...otherEndpoints } = endpoints\n\n if (endpoint) {\n const processedTypes = processEndpointTypes(types)\n\n // If 'endpoint' included in types, add id to the services array\n if (processedTypes.includes('endpoint')) {\n builder.addService(\n new DidDocumentService({\n id: `${did}#endpoint`,\n serviceEndpoint: endpoint,\n type: 'endpoint',\n })\n )\n }\n\n // If 'did-communication' included in types, add DIDComm v1 entry\n if (processedTypes.includes('did-communication')) {\n builder.addService(\n new DidCommV1Service({\n id: `${did}#did-communication`,\n serviceEndpoint: endpoint,\n priority: 0,\n routingKeys: routingKeys ?? [],\n recipientKeys: [keyAgreementId],\n accept: ['didcomm/aip2;env=rfc19'],\n })\n )\n }\n\n // If 'DIDCommMessaging' included in types, add DIDComm v2 entry\n if (processedTypes.includes('DIDCommMessaging')) {\n builder\n .addService(\n new NewDidCommV2Service({\n id: `${did}#didcomm-messaging-1`,\n serviceEndpoint: new NewDidCommV2ServiceEndpoint({\n uri: endpoint,\n routingKeys: routingKeys,\n accept: ['didcomm/v2'],\n }),\n })\n )\n .addContext('https://didcomm.org/messaging/contexts/v2')\n }\n\n // If 'DIDComm' included in types, add legacy DIDComm v2 entry\n if (processedTypes.includes('DIDComm')) {\n builder\n .addService(\n new DidCommV2Service({\n id: `${did}#didcomm-1`,\n routingKeys: routingKeys,\n accept: ['didcomm/v2'],\n serviceEndpoint: endpoint,\n })\n )\n .addContext('https://didcomm.org/messaging/contexts/v2')\n }\n }\n\n // Add other endpoint types\n for (const [type, endpoint] of Object.entries(otherEndpoints)) {\n builder.addService(\n new DidDocumentService({\n id: `${did}#${type}`,\n serviceEndpoint: endpoint as string,\n type,\n })\n )\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"didSovUtil.mjs","names":["commTypes: CommEndpointType[]","types: CommEndpointType[]","endpoint"],"sources":["../../src/dids/didSovUtil.ts"],"sourcesContent":["import {\n Buffer,\n CredoError,\n convertPublicKeyToX25519,\n DidCommV1Service,\n DidCommV2Service,\n DidDocumentBuilder,\n DidDocumentService,\n NewDidCommV2Service,\n NewDidCommV2ServiceEndpoint,\n TypedArrayEncoder,\n} from '@credo-ts/core'\n\nexport type CommEndpointType = 'endpoint' | 'did-communication' | 'DIDComm' | 'DIDCommMessaging'\n\nexport interface IndyEndpointAttrib {\n endpoint?: string\n types?: Array<CommEndpointType>\n routingKeys?: string[]\n [key: string]: unknown\n}\n\nexport interface GetNymResponseData {\n did: string\n verkey: string\n role: string\n alias?: string\n diddocContent?: string\n}\n\nexport const FULL_VERKEY_REGEX = /^[1-9A-HJ-NP-Za-km-z]{43,44}$/\n\n/**\n * Check a base58 encoded string against a regex expression to determine if it is a full valid verkey\n * @param verkey Base58 encoded string representation of a verkey\n * @return Boolean indicating if the string is a valid verkey\n */\nexport function isFullVerkey(verkey: string): boolean {\n return FULL_VERKEY_REGEX.test(verkey)\n}\n\nexport function getFullVerkey(did: string, verkey: string) {\n if (isFullVerkey(verkey)) return verkey\n\n // Did could have did:xxx prefix, only take the last item after :\n const id = did.split(':').pop() ?? did\n // Verkey is prefixed with ~ if abbreviated\n const verkeyWithoutTilde = verkey.slice(1)\n\n // Create base58 encoded public key (32 bytes)\n return TypedArrayEncoder.toBase58(\n Buffer.concat([\n // Take did identifier (16 bytes)\n TypedArrayEncoder.fromBase58(id),\n // Concat the abbreviated verkey (16 bytes)\n TypedArrayEncoder.fromBase58(verkeyWithoutTilde),\n ])\n )\n}\n\nexport function sovDidDocumentFromDid(fullDid: string, verkey: string) {\n const verificationMethodId = `${fullDid}#key-1`\n const keyAgreementId = `${fullDid}#key-agreement-1`\n\n const publicKeyBase58 = getFullVerkey(fullDid, verkey)\n const publicKeyX25519 = TypedArrayEncoder.toBase58(\n convertPublicKeyToX25519(TypedArrayEncoder.fromBase58(publicKeyBase58))\n )\n\n const builder = new DidDocumentBuilder(fullDid)\n .addContext('https://w3id.org/security/suites/ed25519-2018/v1')\n .addContext('https://w3id.org/security/suites/x25519-2019/v1')\n .addVerificationMethod({\n controller: fullDid,\n id: verificationMethodId,\n publicKeyBase58: publicKeyBase58,\n type: 'Ed25519VerificationKey2018',\n })\n .addVerificationMethod({\n controller: fullDid,\n id: keyAgreementId,\n publicKeyBase58: publicKeyX25519,\n type: 'X25519KeyAgreementKey2019',\n })\n .addAuthentication(verificationMethodId)\n .addAssertionMethod(verificationMethodId)\n .addKeyAgreement(keyAgreementId)\n\n return builder\n}\n\n// Process Indy Attrib Endpoint Types according to: https://sovrin-foundation.github.io/sovrin/spec/did-method-spec-template.html > Read (Resolve) > DID Service Endpoint\nfunction processEndpointTypes(types?: string[]) {\n const expectedTypes = ['endpoint', 'did-communication', 'DIDComm', 'DIDCommMessaging']\n const defaultTypes = ['endpoint', 'did-communication']\n\n // Return default types if types \"is NOT present [or] empty\"\n if (!types || types.length <= 0) {\n return defaultTypes\n }\n\n // Return default types if types \"contain any other values\"\n for (const type of types) {\n if (!expectedTypes.includes(type)) {\n return defaultTypes\n }\n }\n\n // Return provided types\n return types\n}\n\nexport function endpointsAttribFromServices(services: DidDocumentService[]): IndyEndpointAttrib {\n const commTypes: CommEndpointType[] = ['endpoint', 'did-communication', 'DIDComm', 'DIDCommMessaging']\n const commServices = services.filter((item) => commTypes.includes(item.type as CommEndpointType))\n\n const endpoint =\n commServices[0] instanceof NewDidCommV2Service\n ? commServices[0].firstServiceEndpointUri\n : commServices[0].serviceEndpoint\n\n if (typeof endpoint !== 'string') {\n throw new CredoError(\n `For unknown service endpoint types (${commServices[0].type}) the 'serviceEndpoint' needs to be of type 'string'`\n )\n }\n\n // Check that all services use the same endpoint, as only one is accepted\n if (\n !commServices.every(\n (item) => (item instanceof NewDidCommV2Service ? item.firstServiceEndpointUri : item.serviceEndpoint) === endpoint\n )\n ) {\n throw new CredoError('serviceEndpoint for all services must match')\n }\n\n const types: CommEndpointType[] = []\n const routingKeys = new Set<string>()\n\n for (const commService of commServices) {\n const commServiceType = commService.type as CommEndpointType\n if (types.includes(commServiceType)) {\n throw new CredoError('Only a single communication service per type is supported')\n }\n\n types.push(commServiceType)\n\n if (\n (commService instanceof DidCommV1Service || commService instanceof DidCommV2Service) &&\n commService.routingKeys\n ) {\n for (const item of commService.routingKeys) {\n routingKeys.add(item)\n }\n } else if (commService instanceof NewDidCommV2Service) {\n const firstServiceEndpoint = Array.isArray(commService.serviceEndpoint)\n ? commService.serviceEndpoint[0]\n : commService.serviceEndpoint\n\n for (const item of firstServiceEndpoint.routingKeys ?? []) {\n routingKeys.add(item)\n }\n }\n }\n\n return { endpoint, types, routingKeys: Array.from(routingKeys) }\n}\n\nexport function addServicesFromEndpointsAttrib(\n builder: DidDocumentBuilder,\n did: string,\n endpoints: IndyEndpointAttrib,\n keyAgreementId: string\n) {\n const { endpoint, routingKeys, types, ...otherEndpoints } = endpoints\n\n if (endpoint) {\n const processedTypes = processEndpointTypes(types)\n\n // If 'endpoint' included in types, add id to the services array\n if (processedTypes.includes('endpoint')) {\n builder.addService(\n new DidDocumentService({\n id: `${did}#endpoint`,\n serviceEndpoint: endpoint,\n type: 'endpoint',\n })\n )\n }\n\n // If 'did-communication' included in types, add DIDComm v1 entry\n if (processedTypes.includes('did-communication')) {\n builder.addService(\n new DidCommV1Service({\n id: `${did}#did-communication`,\n serviceEndpoint: endpoint,\n priority: 0,\n routingKeys: routingKeys ?? [],\n recipientKeys: [keyAgreementId],\n accept: ['didcomm/aip2;env=rfc19'],\n })\n )\n }\n\n // If 'DIDCommMessaging' included in types, add DIDComm v2 entry\n if (processedTypes.includes('DIDCommMessaging')) {\n builder\n .addService(\n new NewDidCommV2Service({\n id: `${did}#didcomm-messaging-1`,\n serviceEndpoint: new NewDidCommV2ServiceEndpoint({\n uri: endpoint,\n routingKeys: routingKeys,\n accept: ['didcomm/v2'],\n }),\n })\n )\n .addContext('https://didcomm.org/messaging/contexts/v2')\n }\n\n // If 'DIDComm' included in types, add legacy DIDComm v2 entry\n if (processedTypes.includes('DIDComm')) {\n builder\n .addService(\n new DidCommV2Service({\n id: `${did}#didcomm-1`,\n routingKeys: routingKeys,\n accept: ['didcomm/v2'],\n serviceEndpoint: endpoint,\n })\n )\n .addContext('https://didcomm.org/messaging/contexts/v2')\n }\n }\n\n // Add other endpoint types\n for (const [type, endpoint] of Object.entries(otherEndpoints)) {\n builder.addService(\n new DidDocumentService({\n id: `${did}#${type}`,\n serviceEndpoint: endpoint as string,\n type,\n })\n )\n }\n}\n"],"mappings":"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"}
|
package/build/error/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
const require_IndyVdrError = require('./IndyVdrError.js');
|
|
2
|
-
const require_IndyVdrNotFound = require('./IndyVdrNotFound.js');
|
|
3
2
|
const require_IndyVdrNotConfiguredError = require('./IndyVdrNotConfiguredError.js');
|
|
3
|
+
const require_IndyVdrNotFound = require('./IndyVdrNotFound.js');
|
package/build/error/index.mjs
CHANGED
package/build/index.d.mts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IndyVdrAnonCredsRegistry, IndyVdrRegisterCredentialDefinition, IndyVdrRegisterCredentialDefinitionExternalCreateOptions, IndyVdrRegisterCredentialDefinitionExternalSubmitOptions, IndyVdrRegisterCredentialDefinitionInternalOptions, IndyVdrRegisterCredentialDefinitionOptions, IndyVdrRegisterCredentialDefinitionReturn, IndyVdrRegisterCredentialDefinitionReturnStateAction, IndyVdrRegisterRevocationRegistryDefinition, IndyVdrRegisterRevocationRegistryDefinitionExternalCreateOptions, IndyVdrRegisterRevocationRegistryDefinitionExternalSubmitOptions, IndyVdrRegisterRevocationRegistryDefinitionInternalOptions, IndyVdrRegisterRevocationRegistryDefinitionOptions, IndyVdrRegisterRevocationRegistryDefinitionReturn, IndyVdrRegisterRevocationRegistryDefinitionReturnStateAction, IndyVdrRegisterRevocationStatusList, IndyVdrRegisterRevocationStatusListExternalCreateOptions, IndyVdrRegisterRevocationStatusListExternalSubmitOptions, IndyVdrRegisterRevocationStatusListInternalOptions, IndyVdrRegisterRevocationStatusListOptions, IndyVdrRegisterRevocationStatusListReturn, IndyVdrRegisterRevocationStatusListReturnStateAction, IndyVdrRegisterSchema, IndyVdrRegisterSchemaExternalCreateOptions, IndyVdrRegisterSchemaExternalSubmitOptions, IndyVdrRegisterSchemaInternalOptions, IndyVdrRegisterSchemaOptions, IndyVdrRegisterSchemaReturn, IndyVdrRegisterSchemaReturnStateAction } from "./anoncreds/IndyVdrAnonCredsRegistry.mjs";
|
|
1
2
|
import { IndyVdrDidCreateOptions, IndyVdrDidCreateResult, IndyVdrIndyDidRegistrar } from "./dids/IndyVdrIndyDidRegistrar.mjs";
|
|
2
3
|
import { IndyVdrIndyDidResolver } from "./dids/IndyVdrIndyDidResolver.mjs";
|
|
3
4
|
import { IndyVdrSovDidResolver } from "./dids/IndyVdrSovDidResolver.mjs";
|
|
@@ -5,5 +6,4 @@ import { IndyVdrPoolConfig } from "./pool/IndyVdrPool.mjs";
|
|
|
5
6
|
import { IndyVdrModuleConfig, IndyVdrModuleConfigOptions } from "./IndyVdrModuleConfig.mjs";
|
|
6
7
|
import { IndyVdrPoolService } from "./pool/IndyVdrPoolService.mjs";
|
|
7
8
|
import { IndyVdrModule } from "./IndyVdrModule.mjs";
|
|
8
|
-
import { IndyVdrAnonCredsRegistry, IndyVdrRegisterCredentialDefinition, IndyVdrRegisterCredentialDefinitionExternalCreateOptions, IndyVdrRegisterCredentialDefinitionExternalSubmitOptions, IndyVdrRegisterCredentialDefinitionInternalOptions, IndyVdrRegisterCredentialDefinitionOptions, IndyVdrRegisterCredentialDefinitionReturn, IndyVdrRegisterCredentialDefinitionReturnStateAction, IndyVdrRegisterRevocationRegistryDefinition, IndyVdrRegisterRevocationRegistryDefinitionExternalCreateOptions, IndyVdrRegisterRevocationRegistryDefinitionExternalSubmitOptions, IndyVdrRegisterRevocationRegistryDefinitionInternalOptions, IndyVdrRegisterRevocationRegistryDefinitionOptions, IndyVdrRegisterRevocationRegistryDefinitionReturn, IndyVdrRegisterRevocationRegistryDefinitionReturnStateAction, IndyVdrRegisterRevocationStatusList, IndyVdrRegisterRevocationStatusListExternalCreateOptions, IndyVdrRegisterRevocationStatusListExternalSubmitOptions, IndyVdrRegisterRevocationStatusListInternalOptions, IndyVdrRegisterRevocationStatusListOptions, IndyVdrRegisterRevocationStatusListReturn, IndyVdrRegisterRevocationStatusListReturnStateAction, IndyVdrRegisterSchema, IndyVdrRegisterSchemaExternalCreateOptions, IndyVdrRegisterSchemaExternalSubmitOptions, IndyVdrRegisterSchemaInternalOptions, IndyVdrRegisterSchemaOptions, IndyVdrRegisterSchemaReturn, IndyVdrRegisterSchemaReturnStateAction } from "./anoncreds/IndyVdrAnonCredsRegistry.mjs";
|
|
9
9
|
export { IndyVdrAnonCredsRegistry, type IndyVdrDidCreateOptions, type IndyVdrDidCreateResult, IndyVdrIndyDidRegistrar, IndyVdrIndyDidResolver, IndyVdrModule, IndyVdrModuleConfig, IndyVdrModuleConfigOptions, type IndyVdrPoolConfig, IndyVdrPoolService, IndyVdrRegisterCredentialDefinition, IndyVdrRegisterCredentialDefinitionExternalCreateOptions, IndyVdrRegisterCredentialDefinitionExternalSubmitOptions, IndyVdrRegisterCredentialDefinitionInternalOptions, IndyVdrRegisterCredentialDefinitionOptions, IndyVdrRegisterCredentialDefinitionReturn, IndyVdrRegisterCredentialDefinitionReturnStateAction, IndyVdrRegisterRevocationRegistryDefinition, IndyVdrRegisterRevocationRegistryDefinitionExternalCreateOptions, IndyVdrRegisterRevocationRegistryDefinitionExternalSubmitOptions, IndyVdrRegisterRevocationRegistryDefinitionInternalOptions, IndyVdrRegisterRevocationRegistryDefinitionOptions, IndyVdrRegisterRevocationRegistryDefinitionReturn, IndyVdrRegisterRevocationRegistryDefinitionReturnStateAction, IndyVdrRegisterRevocationStatusList, IndyVdrRegisterRevocationStatusListExternalCreateOptions, IndyVdrRegisterRevocationStatusListExternalSubmitOptions, IndyVdrRegisterRevocationStatusListInternalOptions, IndyVdrRegisterRevocationStatusListOptions, IndyVdrRegisterRevocationStatusListReturn, IndyVdrRegisterRevocationStatusListReturnStateAction, IndyVdrRegisterSchema, IndyVdrRegisterSchemaExternalCreateOptions, IndyVdrRegisterSchemaExternalSubmitOptions, IndyVdrRegisterSchemaInternalOptions, IndyVdrRegisterSchemaOptions, IndyVdrRegisterSchemaReturn, IndyVdrRegisterSchemaReturnStateAction, IndyVdrSovDidResolver };
|
package/build/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { IndyVdrAnonCredsRegistry, IndyVdrRegisterCredentialDefinition, IndyVdrRegisterCredentialDefinitionExternalCreateOptions, IndyVdrRegisterCredentialDefinitionExternalSubmitOptions, IndyVdrRegisterCredentialDefinitionInternalOptions, IndyVdrRegisterCredentialDefinitionOptions, IndyVdrRegisterCredentialDefinitionReturn, IndyVdrRegisterCredentialDefinitionReturnStateAction, IndyVdrRegisterRevocationRegistryDefinition, IndyVdrRegisterRevocationRegistryDefinitionExternalCreateOptions, IndyVdrRegisterRevocationRegistryDefinitionExternalSubmitOptions, IndyVdrRegisterRevocationRegistryDefinitionInternalOptions, IndyVdrRegisterRevocationRegistryDefinitionOptions, IndyVdrRegisterRevocationRegistryDefinitionReturn, IndyVdrRegisterRevocationRegistryDefinitionReturnStateAction, IndyVdrRegisterRevocationStatusList, IndyVdrRegisterRevocationStatusListExternalCreateOptions, IndyVdrRegisterRevocationStatusListExternalSubmitOptions, IndyVdrRegisterRevocationStatusListInternalOptions, IndyVdrRegisterRevocationStatusListOptions, IndyVdrRegisterRevocationStatusListReturn, IndyVdrRegisterRevocationStatusListReturnStateAction, IndyVdrRegisterSchema, IndyVdrRegisterSchemaExternalCreateOptions, IndyVdrRegisterSchemaExternalSubmitOptions, IndyVdrRegisterSchemaInternalOptions, IndyVdrRegisterSchemaOptions, IndyVdrRegisterSchemaReturn, IndyVdrRegisterSchemaReturnStateAction } from "./anoncreds/IndyVdrAnonCredsRegistry.js";
|
|
1
2
|
import { IndyVdrDidCreateOptions, IndyVdrDidCreateResult, IndyVdrIndyDidRegistrar } from "./dids/IndyVdrIndyDidRegistrar.js";
|
|
2
3
|
import { IndyVdrIndyDidResolver } from "./dids/IndyVdrIndyDidResolver.js";
|
|
3
4
|
import { IndyVdrSovDidResolver } from "./dids/IndyVdrSovDidResolver.js";
|
|
@@ -5,5 +6,4 @@ import { IndyVdrPoolConfig } from "./pool/IndyVdrPool.js";
|
|
|
5
6
|
import { IndyVdrModuleConfig, IndyVdrModuleConfigOptions } from "./IndyVdrModuleConfig.js";
|
|
6
7
|
import { IndyVdrPoolService } from "./pool/IndyVdrPoolService.js";
|
|
7
8
|
import { IndyVdrModule } from "./IndyVdrModule.js";
|
|
8
|
-
import { IndyVdrAnonCredsRegistry, IndyVdrRegisterCredentialDefinition, IndyVdrRegisterCredentialDefinitionExternalCreateOptions, IndyVdrRegisterCredentialDefinitionExternalSubmitOptions, IndyVdrRegisterCredentialDefinitionInternalOptions, IndyVdrRegisterCredentialDefinitionOptions, IndyVdrRegisterCredentialDefinitionReturn, IndyVdrRegisterCredentialDefinitionReturnStateAction, IndyVdrRegisterRevocationRegistryDefinition, IndyVdrRegisterRevocationRegistryDefinitionExternalCreateOptions, IndyVdrRegisterRevocationRegistryDefinitionExternalSubmitOptions, IndyVdrRegisterRevocationRegistryDefinitionInternalOptions, IndyVdrRegisterRevocationRegistryDefinitionOptions, IndyVdrRegisterRevocationRegistryDefinitionReturn, IndyVdrRegisterRevocationRegistryDefinitionReturnStateAction, IndyVdrRegisterRevocationStatusList, IndyVdrRegisterRevocationStatusListExternalCreateOptions, IndyVdrRegisterRevocationStatusListExternalSubmitOptions, IndyVdrRegisterRevocationStatusListInternalOptions, IndyVdrRegisterRevocationStatusListOptions, IndyVdrRegisterRevocationStatusListReturn, IndyVdrRegisterRevocationStatusListReturnStateAction, IndyVdrRegisterSchema, IndyVdrRegisterSchemaExternalCreateOptions, IndyVdrRegisterSchemaExternalSubmitOptions, IndyVdrRegisterSchemaInternalOptions, IndyVdrRegisterSchemaOptions, IndyVdrRegisterSchemaReturn, IndyVdrRegisterSchemaReturnStateAction } from "./anoncreds/IndyVdrAnonCredsRegistry.js";
|
|
9
9
|
export { IndyVdrAnonCredsRegistry, type IndyVdrDidCreateOptions, type IndyVdrDidCreateResult, IndyVdrIndyDidRegistrar, IndyVdrIndyDidResolver, IndyVdrModule, IndyVdrModuleConfig, IndyVdrModuleConfigOptions, type IndyVdrPoolConfig, IndyVdrPoolService, IndyVdrRegisterCredentialDefinition, IndyVdrRegisterCredentialDefinitionExternalCreateOptions, IndyVdrRegisterCredentialDefinitionExternalSubmitOptions, IndyVdrRegisterCredentialDefinitionInternalOptions, IndyVdrRegisterCredentialDefinitionOptions, IndyVdrRegisterCredentialDefinitionReturn, IndyVdrRegisterCredentialDefinitionReturnStateAction, IndyVdrRegisterRevocationRegistryDefinition, IndyVdrRegisterRevocationRegistryDefinitionExternalCreateOptions, IndyVdrRegisterRevocationRegistryDefinitionExternalSubmitOptions, IndyVdrRegisterRevocationRegistryDefinitionInternalOptions, IndyVdrRegisterRevocationRegistryDefinitionOptions, IndyVdrRegisterRevocationRegistryDefinitionReturn, IndyVdrRegisterRevocationRegistryDefinitionReturnStateAction, IndyVdrRegisterRevocationStatusList, IndyVdrRegisterRevocationStatusListExternalCreateOptions, IndyVdrRegisterRevocationStatusListExternalSubmitOptions, IndyVdrRegisterRevocationStatusListInternalOptions, IndyVdrRegisterRevocationStatusListOptions, IndyVdrRegisterRevocationStatusListReturn, IndyVdrRegisterRevocationStatusListReturnStateAction, IndyVdrRegisterSchema, IndyVdrRegisterSchemaExternalCreateOptions, IndyVdrRegisterSchemaExternalSubmitOptions, IndyVdrRegisterSchemaInternalOptions, IndyVdrRegisterSchemaOptions, IndyVdrRegisterSchemaReturn, IndyVdrRegisterSchemaReturnStateAction, IndyVdrSovDidResolver };
|
package/build/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
const require_IndyVdrModuleConfig = require('./IndyVdrModuleConfig.js');
|
|
2
2
|
const require_IndyVdrPoolService = require('./pool/IndyVdrPoolService.js');
|
|
3
|
-
const require_IndyVdrIndyDidRegistrar = require('./dids/IndyVdrIndyDidRegistrar.js');
|
|
4
3
|
require('./pool/index.js');
|
|
4
|
+
const require_IndyVdrAnonCredsRegistry = require('./anoncreds/IndyVdrAnonCredsRegistry.js');
|
|
5
|
+
require('./anoncreds/index.js');
|
|
6
|
+
const require_IndyVdrIndyDidRegistrar = require('./dids/IndyVdrIndyDidRegistrar.js');
|
|
5
7
|
const require_IndyVdrIndyDidResolver = require('./dids/IndyVdrIndyDidResolver.js');
|
|
6
8
|
const require_IndyVdrSovDidResolver = require('./dids/IndyVdrSovDidResolver.js');
|
|
7
9
|
require('./dids/index.js');
|
|
8
10
|
const require_IndyVdrModule = require('./IndyVdrModule.js');
|
|
9
|
-
const require_IndyVdrAnonCredsRegistry = require('./anoncreds/IndyVdrAnonCredsRegistry.js');
|
|
10
|
-
require('./anoncreds/index.js');
|
|
11
11
|
|
|
12
12
|
exports.IndyVdrAnonCredsRegistry = require_IndyVdrAnonCredsRegistry.IndyVdrAnonCredsRegistry;
|
|
13
13
|
exports.IndyVdrIndyDidRegistrar = require_IndyVdrIndyDidRegistrar.IndyVdrIndyDidRegistrar;
|
package/build/index.mjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { IndyVdrModuleConfig } from "./IndyVdrModuleConfig.mjs";
|
|
2
2
|
import { IndyVdrPoolService } from "./pool/IndyVdrPoolService.mjs";
|
|
3
|
-
import { IndyVdrIndyDidRegistrar } from "./dids/IndyVdrIndyDidRegistrar.mjs";
|
|
4
3
|
import "./pool/index.mjs";
|
|
4
|
+
import { IndyVdrAnonCredsRegistry } from "./anoncreds/IndyVdrAnonCredsRegistry.mjs";
|
|
5
|
+
import "./anoncreds/index.mjs";
|
|
6
|
+
import { IndyVdrIndyDidRegistrar } from "./dids/IndyVdrIndyDidRegistrar.mjs";
|
|
5
7
|
import { IndyVdrIndyDidResolver } from "./dids/IndyVdrIndyDidResolver.mjs";
|
|
6
8
|
import { IndyVdrSovDidResolver } from "./dids/IndyVdrSovDidResolver.mjs";
|
|
7
9
|
import "./dids/index.mjs";
|
|
8
10
|
import { IndyVdrModule } from "./IndyVdrModule.mjs";
|
|
9
|
-
import { IndyVdrAnonCredsRegistry } from "./anoncreds/IndyVdrAnonCredsRegistry.mjs";
|
|
10
|
-
import "./anoncreds/index.mjs";
|
|
11
11
|
|
|
12
12
|
export { IndyVdrAnonCredsRegistry, IndyVdrIndyDidRegistrar, IndyVdrIndyDidResolver, IndyVdrModule, IndyVdrModuleConfig, IndyVdrPoolService, IndyVdrSovDidResolver };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AgentContext, Kms } from "@credo-ts/core";
|
|
2
|
-
import * as
|
|
2
|
+
import * as _hyperledger_indy_vdr_shared0 from "@hyperledger/indy-vdr-shared";
|
|
3
3
|
import { IndyVdrRequest, RequestResponseType } from "@hyperledger/indy-vdr-shared";
|
|
4
4
|
|
|
5
5
|
//#region src/pool/IndyVdrPool.d.ts
|
|
@@ -42,7 +42,7 @@ declare class IndyVdrPool {
|
|
|
42
42
|
/**
|
|
43
43
|
* Get the transactions for a pool
|
|
44
44
|
*/
|
|
45
|
-
get transactions(): Promise<
|
|
45
|
+
get transactions(): Promise<_hyperledger_indy_vdr_shared0.Transactions>;
|
|
46
46
|
private get pool();
|
|
47
47
|
close(): void;
|
|
48
48
|
prepareWriteRequest<Request extends IndyVdrRequest>(agentContext: AgentContext, request: Request, signingKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>, endorserDid?: string): Promise<Request>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrPool.d.mts","names":[],"sources":["../../src/pool/IndyVdrPool.ts"],"sourcesContent":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"IndyVdrPool.d.mts","names":[],"sources":["../../src/pool/IndyVdrPool.ts"],"sourcesContent":[],"mappings":";;;;;UAYiB,0BAAA;;;AAAjB;AAKiB,UAAA,eAAA,CAKO;EAGP,MAAA,EAAA,MAAA;EAMA,OAAA,EAAA,MAAA;EAQJ,IAAA,EAAA,MAAA;EAAW,eAAA,EAAA,MAAA;sBAGG,EApBH,oBAoBG;;AAUR,UA3BF,oBAAA,CA2BE;KAuBiB,EAjD7B,MAiD6B,CAAA,MAAA,EAAA,MAAA,CAAA;YAAO,EAAA,MAAA;SASlB,EAAA,MAAA;;AAqBP,UA1ED,iBAAA,CA0EC;qBACL,EAAA,MAAA;cACqB,EAAA,OAAA;eAAd,EAAA,MAAA;4BACI,CAAA,EAzEO,0BAyEP;kBAAA,CAAA,EAAA,OAAA;;AA8BN,cAnGL,WAAA,CAmGK;UACe,KAAA;UAApB,UAAA;iBAAR,CAAA,EAjGsB,eAiGtB,GAAA,IAAA;EAAO,WAAA,CAAA,UAAA,EA/FqB,iBA+FrB;;gBAvFO;;;;;;uBAuBiB;;;;sBASX,QATkB,6BAAA,CASlB,YAAA;;;sCAoB0B,8BACjC,uBACL,qBACG,GAAA,CAAI,UAAU,GAAA,CAAI,0CACV,QAAA;;;;;;;gCA6BqB,8BAC3B,UACb,QAAQ,oBAAoB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrPool.d.ts","names":[],"sources":["../../src/pool/IndyVdrPool.ts"],"sourcesContent":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"IndyVdrPool.d.ts","names":[],"sources":["../../src/pool/IndyVdrPool.ts"],"sourcesContent":[],"mappings":";;;;;UAYiB,0BAAA;;;AAAjB;AAKiB,UAAA,eAAA,CAKO;EAGP,MAAA,EAAA,MAAA;EAMA,OAAA,EAAA,MAAA;EAQJ,IAAA,EAAA,MAAA;EAAW,eAAA,EAAA,MAAA;sBAGG,EApBH,oBAoBG;;AAUR,UA3BF,oBAAA,CA2BE;KAuBiB,EAjD7B,MAiD6B,CAAA,MAAA,EAAA,MAAA,CAAA;YAAO,EAAA,MAAA;SASlB,EAAA,MAAA;;AAqBP,UA1ED,iBAAA,CA0EC;qBACL,EAAA,MAAA;cACqB,EAAA,OAAA;eAAd,EAAA,MAAA;4BACI,CAAA,EAzEO,0BAyEP;kBAAA,CAAA,EAAA,OAAA;;AA8BN,cAnGL,WAAA,CAmGK;UACe,KAAA;UAApB,UAAA;iBAAR,CAAA,EAjGsB,eAiGtB,GAAA,IAAA;EAAO,WAAA,CAAA,UAAA,EA/FqB,iBA+FrB;;gBAvFO;;;;;;uBAuBiB;;;;sBASX,QATkB,6BAAA,CASlB,YAAA;;;sCAoB0B,8BACjC,uBACL,qBACG,GAAA,CAAI,UAAU,GAAA,CAAI,0CACV,QAAA;;;;;;;gCA6BqB,8BAC3B,UACb,QAAQ,oBAAoB"}
|
|
@@ -77,7 +77,7 @@ var IndyVdrPool = class {
|
|
|
77
77
|
text: authorAgreement.text,
|
|
78
78
|
version: authorAgreement.version,
|
|
79
79
|
taaDigest: authorAgreement.digest,
|
|
80
|
-
time: Math.floor(
|
|
80
|
+
time: Math.floor(Date.now() / 1e3),
|
|
81
81
|
acceptanceMechanismType: poolTaa.acceptanceMechanism
|
|
82
82
|
});
|
|
83
83
|
request.setTransactionAuthorAgreementAcceptance({ acceptance: JSON.parse(acceptance) });
|
|
@@ -73,7 +73,7 @@ var IndyVdrPool = class {
|
|
|
73
73
|
text: authorAgreement.text,
|
|
74
74
|
version: authorAgreement.version,
|
|
75
75
|
taaDigest: authorAgreement.digest,
|
|
76
|
-
time: Math.floor(
|
|
76
|
+
time: Math.floor(Date.now() / 1e3),
|
|
77
77
|
acceptanceMechanismType: poolTaa.acceptanceMechanism
|
|
78
78
|
});
|
|
79
79
|
request.setTransactionAuthorAgreementAcceptance({ acceptance: JSON.parse(acceptance) });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrPool.mjs","names":[],"sources":["../../src/pool/IndyVdrPool.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"IndyVdrPool.mjs","names":[],"sources":["../../src/pool/IndyVdrPool.ts"],"sourcesContent":["import { parseIndyDid } from '@credo-ts/anoncreds'\nimport { AgentContext, Kms, TypedArrayEncoder } from '@credo-ts/core'\nimport type { IndyVdrRequest, IndyVdrPool as indyVdrPool, RequestResponseType } from '@hyperledger/indy-vdr-shared'\nimport {\n GetAcceptanceMechanismsRequest,\n GetTransactionAuthorAgreementRequest,\n indyVdr,\n PoolCreate,\n} from '@hyperledger/indy-vdr-shared'\n\nimport { IndyVdrError } from '../error'\n\nexport interface TransactionAuthorAgreement {\n version?: `${number}.${number}` | `${number}`\n acceptanceMechanism: string\n}\n\nexport interface AuthorAgreement {\n digest: string\n version: string\n text: string\n ratification_ts: number\n acceptanceMechanisms: AcceptanceMechanisms\n}\n\nexport interface AcceptanceMechanisms {\n aml: Record<string, string>\n amlContext: string\n version: string\n}\n\nexport interface IndyVdrPoolConfig {\n genesisTransactions: string\n isProduction: boolean\n indyNamespace: string\n transactionAuthorAgreement?: TransactionAuthorAgreement\n connectOnStartup?: boolean\n}\n\nexport class IndyVdrPool {\n private _pool?: indyVdrPool\n private poolConfig: IndyVdrPoolConfig\n public authorAgreement?: AuthorAgreement | null\n\n public constructor(poolConfig: IndyVdrPoolConfig) {\n this.poolConfig = poolConfig\n }\n\n public get indyNamespace(): string {\n return this.poolConfig.indyNamespace\n }\n\n public get config() {\n return this.poolConfig\n }\n\n public get isOpen() {\n return this._pool !== undefined\n }\n\n public connect() {\n if (this._pool) {\n return\n }\n\n this._pool = new PoolCreate({\n parameters: {\n transactions: this.config.genesisTransactions,\n },\n })\n }\n\n /**\n * Refreshes the connection to the pool.\n */\n public async refreshConnection(): Promise<void> {\n if (this._pool) {\n await this._pool.refresh()\n }\n }\n\n /**\n * Get the transactions for a pool\n */\n public get transactions() {\n return this.pool.transactions\n }\n\n private get pool(): indyVdrPool {\n if (!this._pool) this.connect()\n if (!this._pool) throw new IndyVdrError('Pool is not connected.')\n\n return this._pool\n }\n\n public close() {\n if (!this._pool) {\n throw new IndyVdrError(\"Can't close pool. Pool is not connected\")\n }\n\n // FIXME: Currently, the close method is not working correctly in the indy-vdr-shared package\n // this.pool.close()\n }\n\n public async prepareWriteRequest<Request extends IndyVdrRequest>(\n agentContext: AgentContext,\n request: Request,\n signingKey: Kms.PublicJwk<Kms.Ed25519PublicJwk>,\n endorserDid?: string\n ) {\n const kms = agentContext.dependencyManager.resolve(Kms.KeyManagementApi)\n await this.appendTaa(request)\n\n if (endorserDid) {\n request.setEndorser({ endorser: parseIndyDid(endorserDid).namespaceIdentifier })\n }\n\n const { signature } = await kms.sign({\n data: TypedArrayEncoder.fromString(request.signatureInput),\n algorithm: 'EdDSA',\n keyId: signingKey.keyId,\n })\n\n request.setSignature({\n signature,\n })\n\n return request\n }\n\n /**\n * This method submits a request to the ledger.\n * It does only submit the request. It does not modify it in any way.\n * To create the request, use the `prepareWriteRequest` method.\n * @param writeRequest\n */\n\n public async submitRequest<Request extends IndyVdrRequest>(\n writeRequest: Request\n ): Promise<RequestResponseType<Request>> {\n return await this.pool.submitRequest(writeRequest)\n }\n\n private async appendTaa(request: IndyVdrRequest) {\n const authorAgreement = await this.getTransactionAuthorAgreement()\n const poolTaa = this.config.transactionAuthorAgreement\n\n // If ledger does not have TAA, we can just send request\n if (authorAgreement == null) {\n return request\n }\n\n // Ledger has taa but user has not specified which one to use\n if (!poolTaa) {\n throw new IndyVdrError(\n `Please, specify a transaction author agreement with version and acceptance mechanism. ${JSON.stringify(\n authorAgreement\n )}`\n )\n }\n\n // Throw an error if the pool doesn't have the specified version and acceptance mechanism\n if (\n authorAgreement.version !== poolTaa.version ||\n !authorAgreement.acceptanceMechanisms.aml[poolTaa.acceptanceMechanism]\n ) {\n // Throw an error with a helpful message\n const errMessage = `Unable to satisfy matching TAA with mechanism ${JSON.stringify(\n poolTaa.acceptanceMechanism\n )} and version ${poolTaa.version} in pool.\\n Found ${JSON.stringify(\n authorAgreement.acceptanceMechanisms.aml\n )} and version ${authorAgreement.version} in pool.`\n throw new IndyVdrError(errMessage)\n }\n\n const acceptance = indyVdr.prepareTxnAuthorAgreementAcceptance({\n text: authorAgreement.text,\n version: authorAgreement.version,\n taaDigest: authorAgreement.digest,\n time: Math.floor(Date.now() / 1000),\n acceptanceMechanismType: poolTaa.acceptanceMechanism,\n })\n\n request.setTransactionAuthorAgreementAcceptance({\n acceptance: JSON.parse(acceptance),\n })\n }\n\n private async getTransactionAuthorAgreement(): Promise<AuthorAgreement | null> {\n // TODO Replace this condition with memoization\n if (this.authorAgreement !== undefined) {\n return this.authorAgreement\n }\n\n const taaRequest = new GetTransactionAuthorAgreementRequest({})\n const taaResponse = await this.submitRequest(taaRequest)\n\n const acceptanceMechanismRequest = new GetAcceptanceMechanismsRequest({})\n const acceptanceMechanismResponse = await this.submitRequest(acceptanceMechanismRequest)\n\n const taaData = taaResponse.result.data\n\n // TAA can be null\n if (taaData == null) {\n this.authorAgreement = null\n return null\n }\n\n // If TAA is not null, we can be sure AcceptanceMechanisms is also not null\n const authorAgreement = taaData as Omit<AuthorAgreement, 'acceptanceMechanisms'>\n\n const acceptanceMechanisms = acceptanceMechanismResponse.result.data as AcceptanceMechanisms\n this.authorAgreement = {\n ...authorAgreement,\n acceptanceMechanisms,\n }\n\n return this.authorAgreement\n }\n}\n"],"mappings":";;;;;;;AAuCA,IAAa,cAAb,MAAyB;CAKvB,AAAO,YAAY,YAA+B;AAChD,OAAK,aAAa;;CAGpB,IAAW,gBAAwB;AACjC,SAAO,KAAK,WAAW;;CAGzB,IAAW,SAAS;AAClB,SAAO,KAAK;;CAGd,IAAW,SAAS;AAClB,SAAO,KAAK,UAAU;;CAGxB,AAAO,UAAU;AACf,MAAI,KAAK,MACP;AAGF,OAAK,QAAQ,IAAI,WAAW,EAC1B,YAAY,EACV,cAAc,KAAK,OAAO,qBAC3B,EACF,CAAC;;;;;CAMJ,MAAa,oBAAmC;AAC9C,MAAI,KAAK,MACP,OAAM,KAAK,MAAM,SAAS;;;;;CAO9B,IAAW,eAAe;AACxB,SAAO,KAAK,KAAK;;CAGnB,IAAY,OAAoB;AAC9B,MAAI,CAAC,KAAK,MAAO,MAAK,SAAS;AAC/B,MAAI,CAAC,KAAK,MAAO,OAAM,IAAI,aAAa,yBAAyB;AAEjE,SAAO,KAAK;;CAGd,AAAO,QAAQ;AACb,MAAI,CAAC,KAAK,MACR,OAAM,IAAI,aAAa,0CAA0C;;CAOrE,MAAa,oBACX,cACA,SACA,YACA,aACA;EACA,MAAM,MAAM,aAAa,kBAAkB,QAAQ,IAAI,iBAAiB;AACxE,QAAM,KAAK,UAAU,QAAQ;AAE7B,MAAI,YACF,SAAQ,YAAY,EAAE,UAAU,aAAa,YAAY,CAAC,qBAAqB,CAAC;EAGlF,MAAM,EAAE,cAAc,MAAM,IAAI,KAAK;GACnC,MAAM,kBAAkB,WAAW,QAAQ,eAAe;GAC1D,WAAW;GACX,OAAO,WAAW;GACnB,CAAC;AAEF,UAAQ,aAAa,EACnB,WACD,CAAC;AAEF,SAAO;;;;;;;;CAUT,MAAa,cACX,cACuC;AACvC,SAAO,MAAM,KAAK,KAAK,cAAc,aAAa;;CAGpD,MAAc,UAAU,SAAyB;EAC/C,MAAM,kBAAkB,MAAM,KAAK,+BAA+B;EAClE,MAAM,UAAU,KAAK,OAAO;AAG5B,MAAI,mBAAmB,KACrB,QAAO;AAIT,MAAI,CAAC,QACH,OAAM,IAAI,aACR,yFAAyF,KAAK,UAC5F,gBACD,GACF;AAIH,MACE,gBAAgB,YAAY,QAAQ,WACpC,CAAC,gBAAgB,qBAAqB,IAAI,QAAQ,qBAQlD,OAAM,IAAI,aALS,iDAAiD,KAAK,UACvE,QAAQ,oBACT,CAAC,eAAe,QAAQ,QAAQ,oBAAoB,KAAK,UACxD,gBAAgB,qBAAqB,IACtC,CAAC,eAAe,gBAAgB,QAAQ,WACP;EAGpC,MAAM,aAAa,QAAQ,oCAAoC;GAC7D,MAAM,gBAAgB;GACtB,SAAS,gBAAgB;GACzB,WAAW,gBAAgB;GAC3B,MAAM,KAAK,MAAM,KAAK,KAAK,GAAG,IAAK;GACnC,yBAAyB,QAAQ;GAClC,CAAC;AAEF,UAAQ,wCAAwC,EAC9C,YAAY,KAAK,MAAM,WAAW,EACnC,CAAC;;CAGJ,MAAc,gCAAiE;AAE7E,MAAI,KAAK,oBAAoB,OAC3B,QAAO,KAAK;EAGd,MAAM,aAAa,IAAI,qCAAqC,EAAE,CAAC;EAC/D,MAAM,cAAc,MAAM,KAAK,cAAc,WAAW;EAExD,MAAM,6BAA6B,IAAI,+BAA+B,EAAE,CAAC;EACzE,MAAM,8BAA8B,MAAM,KAAK,cAAc,2BAA2B;EAExF,MAAM,UAAU,YAAY,OAAO;AAGnC,MAAI,WAAW,MAAM;AACnB,QAAK,kBAAkB;AACvB,UAAO;;EAIT,MAAM,kBAAkB;EAExB,MAAM,uBAAuB,4BAA4B,OAAO;AAChE,OAAK,kBAAkB;GACrB,GAAG;GACH;GACD;AAED,SAAO,KAAK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrPoolService.d.mts","names":[],"sources":["../../src/pool/IndyVdrPoolService.ts"],"sourcesContent":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"IndyVdrPoolService.d.mts","names":[],"sources":["../../src/pool/IndyVdrPoolService.ts"],"sourcesContent":[],"mappings":";;;;;;UAYiB,iBAAA;EAAA,WAAA,EAAA;IAQJ,GAAA,EAAA,MAAA;IAAkB,MAAA,EAAA,MAAA;;eAK+B,EAAA,MAAA;;AAkB5C,cAvBL,kBAAA,CAuBK;OAEG,EAxBL,WAwBK,EAAA;UAA2B,MAAA;UAA3C,mBAAA;aA0G0B,CAAA,MAAA,EA9H+B,MA8H/B,EAAA,mBAAA,EA9H4D,mBA8H5D;;;;;;;;;;;8BA5Gb,4BAEb;UAAgB;kBAA2B;;;;;;;4BA0GjB,QAAA;;;;4BAOA,QAAA;YAPA;;;;;;8CAkBmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndyVdrPoolService.d.ts","names":[],"sources":["../../src/pool/IndyVdrPoolService.ts"],"sourcesContent":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"IndyVdrPoolService.d.ts","names":[],"sources":["../../src/pool/IndyVdrPoolService.ts"],"sourcesContent":[],"mappings":";;;;;;UAYiB,iBAAA;EAAA,WAAA,EAAA;IAQJ,GAAA,EAAA,MAAA;IAAkB,MAAA,EAAA,MAAA;;eAK+B,EAAA,MAAA;;AAkB5C,cAvBL,kBAAA,CAuBK;OAEG,EAxBL,WAwBK,EAAA;UAA2B,MAAA;UAA3C,mBAAA;aA0G0B,CAAA,MAAA,EA9H+B,MA8H/B,EAAA,mBAAA,EA9H4D,mBA8H5D;;;;;;;;;;;8BA5Gb,4BAEb;UAAgB;kBAA2B;;;;;;;4BA0GjB,QAAA;;;;4BAOA,QAAA;YAPA;;;;;;8CAkBmB"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.js');
|
|
2
2
|
const require_IndyVdrError = require('../error/IndyVdrError.js');
|
|
3
|
-
const require_IndyVdrNotFound = require('../error/IndyVdrNotFound.js');
|
|
4
3
|
const require_IndyVdrNotConfiguredError = require('../error/IndyVdrNotConfiguredError.js');
|
|
4
|
+
const require_IndyVdrNotFound = require('../error/IndyVdrNotFound.js');
|
|
5
5
|
require('../error/index.js');
|
|
6
|
+
const require_IndyVdrPool = require('./IndyVdrPool.js');
|
|
6
7
|
const require_IndyVdrModuleConfig = require('../IndyVdrModuleConfig.js');
|
|
7
8
|
const require_did = require('../utils/did.js');
|
|
8
9
|
const require_promises = require('../utils/promises.js');
|
|
9
|
-
const require_IndyVdrPool = require('./IndyVdrPool.js');
|
|
10
10
|
const require_decorateMetadata = require('../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorateMetadata.js');
|
|
11
11
|
const require_decorateParam = require('../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorateParam.js');
|
|
12
12
|
const require_decorate = require('../_virtual/_@oxc-project_runtime@0.94.0/helpers/decorate.js');
|