{"version":3,"file":"GrantAccessHandler.mjs","names":[],"sources":["../../src/handlers/GrantAccessHandler.ts"],"sourcesContent":["/**\n * Handler for `vaults/1.0/grant-access`.\n *\n * Persists the incoming ZCAP-LD capability so subsequent EDV\n * invocations (e.g. when a Signing 1.0 RequestSigning arrives with\n * a ContentRef pointing at the granted document) can present the\n * full chain.\n */\n\nimport type { Logger } from '@credo-ts/core'\nimport type { DidCommMessageHandler, DidCommMessageHandlerInboundMessage } from '@credo-ts/didcomm'\n\nimport { EventEmitter } from '@credo-ts/core'\n\nimport { GrantAccessMessage } from '../messages'\nimport { VaultEventTypes } from '../VaultsEvents'\n\nexport class GrantAccessHandler implements DidCommMessageHandler {\n  private logger: Logger\n  private eventEmitter: EventEmitter\n  public supportedMessages = [GrantAccessMessage]\n\n  public constructor(logger: Logger, eventEmitter: EventEmitter) {\n    this.logger = logger\n    this.eventEmitter = eventEmitter\n  }\n\n  public async handle(messageContext: DidCommMessageHandlerInboundMessage<GrantAccessHandler>) {\n    const { agentContext, connection, message } = messageContext\n    const cap = (message.capability ?? {}) as Record<string, unknown>\n\n    // Surface-validate the capability before persisting — the EDV's\n    // ZCAP verifier does the full chain walk later.\n    if (typeof cap !== 'object' || !('proof' in cap) || !('id' in cap)) {\n      this.logger.warn('vaults.grant-access: capability missing proof or id', {\n        connectionId: connection?.id,\n      })\n      return undefined\n    }\n\n    this.logger.info(`vaults.grant-access received`, {\n      capabilityId: cap.id,\n      to: message.to,\n      connectionId: connection?.id,\n    })\n\n    // Emit so application code can persist the capability against the\n    // doc URL it grants and present it when invoking the EDV.\n    this.eventEmitter.emit(agentContext, {\n      type: VaultEventTypes.AccessGranted,\n      payload: {\n        to: message.to,\n        capability: cap,\n        grantedBy: connection?.id,\n        receivedAt: new Date().toISOString(),\n      },\n    })\n    return undefined\n  }\n}\n"],"mappings":";;;;;;AAiBA,IAAa,qBAAb,MAAiE;CAK/D,AAAO,YAAY,QAAgB,cAA4B;OAFxD,oBAAoB,CAAC,mBAAmB;AAG7C,OAAK,SAAS;AACd,OAAK,eAAe;;CAGtB,MAAa,OAAO,gBAAyE;EAC3F,MAAM,EAAE,cAAc,YAAY,YAAY;EAC9C,MAAM,MAAO,QAAQ,cAAc,EAAE;AAIrC,MAAI,OAAO,QAAQ,YAAY,EAAE,WAAW,QAAQ,EAAE,QAAQ,MAAM;AAClE,QAAK,OAAO,KAAK,uDAAuD,EACtE,cAAc,YAAY,IAC3B,CAAC;AACF;;AAGF,OAAK,OAAO,KAAK,gCAAgC;GAC/C,cAAc,IAAI;GAClB,IAAI,QAAQ;GACZ,cAAc,YAAY;GAC3B,CAAC;AAIF,OAAK,aAAa,KAAK,cAAc;GACnC,MAAM,gBAAgB;GACtB,SAAS;IACP,IAAI,QAAQ;IACZ,YAAY;IACZ,WAAW,YAAY;IACvB,6BAAY,IAAI,MAAM,EAAC,aAAa;IACrC;GACF,CAAC"}