@ajna-inc/vaults 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/build/VaultsApi.d.ts +363 -0
  2. package/build/VaultsApi.js +450 -248
  3. package/build/VaultsApi.js.map +1 -0
  4. package/build/VaultsEvents.d.ts +227 -0
  5. package/build/VaultsEvents.js +8 -0
  6. package/build/VaultsEvents.js.map +1 -0
  7. package/build/VaultsModule.d.ts +64 -0
  8. package/build/VaultsModule.js +43 -18
  9. package/build/VaultsModule.js.map +1 -0
  10. package/build/crypto/wasm/VaultCrypto.d.ts +19 -0
  11. package/build/crypto/wasm/VaultCrypto.js +29 -42
  12. package/build/crypto/wasm/VaultCrypto.js.map +1 -0
  13. package/build/errors/BadSuiteError.d.ts +8 -0
  14. package/build/errors/BadSuiteError.js +8 -25
  15. package/build/errors/BadSuiteError.js.map +1 -0
  16. package/build/errors/DecryptAeadError.d.ts +8 -0
  17. package/build/errors/DecryptAeadError.js +8 -25
  18. package/build/errors/DecryptAeadError.js.map +1 -0
  19. package/build/errors/DecryptKemError.d.ts +8 -0
  20. package/build/errors/DecryptKemError.js +8 -25
  21. package/build/errors/DecryptKemError.js.map +1 -0
  22. package/build/errors/PolicyError.d.ts +8 -0
  23. package/build/errors/PolicyError.js +8 -25
  24. package/build/errors/PolicyError.js.map +1 -0
  25. package/build/errors/VaultError.d.ts +52 -0
  26. package/build/errors/VaultError.js +19 -30
  27. package/build/errors/VaultError.js.map +1 -0
  28. package/build/errors/index.d.ts +5 -0
  29. package/build/errors/index.js +1 -0
  30. package/build/errors/index.js.map +1 -0
  31. package/build/handlers/CreateVaultHandler.d.ts +18 -0
  32. package/build/handlers/CreateVaultHandler.js +75 -0
  33. package/build/handlers/CreateVaultHandler.js.map +1 -0
  34. package/build/handlers/DeleteVaultHandler.d.ts +17 -0
  35. package/build/handlers/DeleteVaultHandler.js +48 -0
  36. package/build/handlers/DeleteVaultHandler.js.map +1 -0
  37. package/build/handlers/DenyAccessHandler.d.ts +15 -0
  38. package/build/handlers/DenyAccessHandler.js +39 -0
  39. package/build/handlers/DenyAccessHandler.js.map +1 -0
  40. package/build/handlers/DenyShareHandler.d.ts +17 -0
  41. package/build/handlers/DenyShareHandler.js +49 -0
  42. package/build/handlers/DenyShareHandler.js.map +1 -0
  43. package/build/handlers/GrantAccessHandler.d.ts +17 -0
  44. package/build/handlers/GrantAccessHandler.js +59 -0
  45. package/build/handlers/GrantAccessHandler.js.map +1 -0
  46. package/build/handlers/ProvideShareHandler.d.ts +17 -0
  47. package/build/handlers/ProvideShareHandler.js +77 -0
  48. package/build/handlers/ProvideShareHandler.js.map +1 -0
  49. package/build/handlers/RequestAccessHandler.d.ts +18 -0
  50. package/build/handlers/RequestAccessHandler.js +60 -0
  51. package/build/handlers/RequestAccessHandler.js.map +1 -0
  52. package/build/handlers/RequestShareHandler.d.ts +19 -0
  53. package/build/handlers/RequestShareHandler.js +70 -0
  54. package/build/handlers/RequestShareHandler.js.map +1 -0
  55. package/build/handlers/RequestStorageHandler.d.ts +53 -0
  56. package/build/handlers/RequestStorageHandler.js +158 -0
  57. package/build/handlers/RequestStorageHandler.js.map +1 -0
  58. package/build/handlers/RetrieveVaultHandler.d.ts +18 -0
  59. package/build/handlers/RetrieveVaultHandler.js +65 -0
  60. package/build/handlers/RetrieveVaultHandler.js.map +1 -0
  61. package/build/handlers/StoreVaultHandler.d.ts +17 -0
  62. package/build/handlers/StoreVaultHandler.js +77 -0
  63. package/build/handlers/StoreVaultHandler.js.map +1 -0
  64. package/build/handlers/UpdateVaultHandler.d.ts +18 -0
  65. package/build/handlers/UpdateVaultHandler.js +77 -0
  66. package/build/handlers/UpdateVaultHandler.js.map +1 -0
  67. package/build/handlers/VaultCreatedAckHandler.d.ts +15 -0
  68. package/build/handlers/VaultCreatedAckHandler.js +39 -0
  69. package/build/handlers/VaultCreatedAckHandler.js.map +1 -0
  70. package/build/handlers/VaultDataHandler.d.ts +19 -0
  71. package/build/handlers/VaultDataHandler.js +68 -0
  72. package/build/handlers/VaultDataHandler.js.map +1 -0
  73. package/build/handlers/VaultProblemReportHandler.d.ts +17 -0
  74. package/build/handlers/VaultProblemReportHandler.js +40 -0
  75. package/build/handlers/VaultProblemReportHandler.js.map +1 -0
  76. package/build/handlers/VaultReferenceHandler.d.ts +33 -0
  77. package/build/handlers/VaultReferenceHandler.js +169 -0
  78. package/build/handlers/VaultReferenceHandler.js.map +1 -0
  79. package/build/handlers/VaultStoredAckHandler.d.ts +15 -0
  80. package/build/handlers/VaultStoredAckHandler.js +38 -0
  81. package/build/handlers/VaultStoredAckHandler.js.map +1 -0
  82. package/build/handlers/index.d.ts +17 -0
  83. package/build/handlers/index.js +44 -0
  84. package/build/handlers/index.js.map +1 -0
  85. package/build/index.d.ts +42 -0
  86. package/build/index.js +13 -1
  87. package/build/index.js.map +1 -0
  88. package/build/messages/CreateVaultMessage.d.ts +39 -0
  89. package/build/messages/CreateVaultMessage.js +65 -115
  90. package/build/messages/CreateVaultMessage.js.map +1 -0
  91. package/build/messages/DeleteVaultMessage.d.ts +22 -0
  92. package/build/messages/DeleteVaultMessage.js +51 -103
  93. package/build/messages/DeleteVaultMessage.js.map +1 -0
  94. package/build/messages/DenyAccessMessage.d.ts +22 -0
  95. package/build/messages/DenyAccessMessage.js +50 -103
  96. package/build/messages/DenyAccessMessage.js.map +1 -0
  97. package/build/messages/DenyShareMessage.d.ts +24 -0
  98. package/build/messages/DenyShareMessage.js +56 -109
  99. package/build/messages/DenyShareMessage.js.map +1 -0
  100. package/build/messages/GrantAccessMessage.d.ts +32 -0
  101. package/build/messages/GrantAccessMessage.js +63 -115
  102. package/build/messages/GrantAccessMessage.js.map +1 -0
  103. package/build/messages/ProvideShareMessage.d.ts +26 -0
  104. package/build/messages/ProvideShareMessage.js +62 -115
  105. package/build/messages/ProvideShareMessage.js.map +1 -0
  106. package/build/messages/ProvideStorageMessage.d.ts +90 -0
  107. package/build/messages/ProvideStorageMessage.js +193 -0
  108. package/build/messages/ProvideStorageMessage.js.map +1 -0
  109. package/build/messages/RequestAccessMessage.d.ts +30 -0
  110. package/build/messages/RequestAccessMessage.js +57 -109
  111. package/build/messages/RequestAccessMessage.js.map +1 -0
  112. package/build/messages/RequestShareMessage.d.ts +24 -0
  113. package/build/messages/RequestShareMessage.js +56 -109
  114. package/build/messages/RequestShareMessage.js.map +1 -0
  115. package/build/messages/RequestStorageMessage.d.ts +50 -0
  116. package/build/messages/RequestStorageMessage.js +98 -0
  117. package/build/messages/RequestStorageMessage.js.map +1 -0
  118. package/build/messages/RetrieveVaultMessage.d.ts +20 -0
  119. package/build/messages/RetrieveVaultMessage.js +44 -97
  120. package/build/messages/RetrieveVaultMessage.js.map +1 -0
  121. package/build/messages/StoreVaultMessage.d.ts +23 -0
  122. package/build/messages/StoreVaultMessage.js +51 -103
  123. package/build/messages/StoreVaultMessage.js.map +1 -0
  124. package/build/messages/UpdateVaultMessage.d.ts +25 -0
  125. package/build/messages/UpdateVaultMessage.js +58 -109
  126. package/build/messages/UpdateVaultMessage.js.map +1 -0
  127. package/build/messages/VaultCreatedAckMessage.d.ts +20 -0
  128. package/build/messages/VaultCreatedAckMessage.js +44 -97
  129. package/build/messages/VaultCreatedAckMessage.js.map +1 -0
  130. package/build/messages/VaultDataMessage.d.ts +34 -0
  131. package/build/messages/VaultDataMessage.js +59 -110
  132. package/build/messages/VaultDataMessage.js.map +1 -0
  133. package/build/messages/VaultProblemReportMessage.d.ts +35 -0
  134. package/build/messages/VaultProblemReportMessage.js +56 -102
  135. package/build/messages/VaultProblemReportMessage.js.map +1 -0
  136. package/build/messages/VaultReferenceMessage.d.ts +66 -0
  137. package/build/messages/VaultReferenceMessage.js +138 -0
  138. package/build/messages/VaultReferenceMessage.js.map +1 -0
  139. package/build/messages/VaultStoredAckMessage.d.ts +33 -0
  140. package/build/messages/VaultStoredAckMessage.js +51 -104
  141. package/build/messages/VaultStoredAckMessage.js.map +1 -0
  142. package/build/messages/index.d.ts +18 -0
  143. package/build/messages/index.js +6 -1
  144. package/build/messages/index.js.map +1 -0
  145. package/build/models/ThresholdSession.d.ts +37 -0
  146. package/build/models/ThresholdSession.js +1 -0
  147. package/build/models/ThresholdSession.js.map +1 -0
  148. package/build/models/VaultDocument.d.ts +22 -0
  149. package/build/models/VaultDocument.js +1 -0
  150. package/build/models/VaultDocument.js.map +1 -0
  151. package/build/models/VaultHeader.d.ts +92 -0
  152. package/build/models/VaultHeader.js +4 -6
  153. package/build/models/VaultHeader.js.map +1 -0
  154. package/build/models/VaultPolicy.d.ts +24 -0
  155. package/build/models/VaultPolicy.js +1 -0
  156. package/build/models/VaultPolicy.js.map +1 -0
  157. package/build/models/index.d.ts +4 -0
  158. package/build/models/index.js +1 -0
  159. package/build/models/index.js.map +1 -0
  160. package/build/repository/KemKeypairRecord.d.ts +37 -0
  161. package/build/repository/KemKeypairRecord.js +35 -0
  162. package/build/repository/KemKeypairRecord.js.map +1 -0
  163. package/build/repository/KemKeypairRepository.d.ts +18 -0
  164. package/build/repository/KemKeypairRepository.js +50 -0
  165. package/build/repository/KemKeypairRepository.js.map +1 -0
  166. package/build/repository/ThresholdSessionRecord.d.ts +93 -0
  167. package/build/repository/ThresholdSessionRecord.js +58 -92
  168. package/build/repository/ThresholdSessionRecord.js.map +1 -0
  169. package/build/repository/ThresholdSessionRepository.d.ts +35 -0
  170. package/build/repository/ThresholdSessionRepository.js +72 -208
  171. package/build/repository/ThresholdSessionRepository.js.map +1 -0
  172. package/build/repository/VaultRecord.d.ts +105 -0
  173. package/build/repository/VaultRecord.js +94 -115
  174. package/build/repository/VaultRecord.js.map +1 -0
  175. package/build/repository/VaultRepository.d.ts +35 -0
  176. package/build/repository/VaultRepository.js +66 -192
  177. package/build/repository/VaultRepository.js.map +1 -0
  178. package/build/repository/index.d.ts +9 -0
  179. package/build/repository/index.js +7 -1
  180. package/build/repository/index.js.map +1 -0
  181. package/build/services/HPKEService.d.ts +67 -0
  182. package/build/services/HPKEService.js +106 -0
  183. package/build/services/HPKEService.js.map +1 -0
  184. package/build/services/KemKeyExchangeService.d.ts +207 -0
  185. package/build/services/KemKeyExchangeService.js +323 -0
  186. package/build/services/KemKeyExchangeService.js.map +1 -0
  187. package/build/services/VaultEncryptionService.d.ts +120 -0
  188. package/build/services/VaultEncryptionService.js +469 -588
  189. package/build/services/VaultEncryptionService.js.map +1 -0
  190. package/build/services/VaultService.d.ts +127 -0
  191. package/build/services/VaultService.js +224 -376
  192. package/build/services/VaultService.js.map +1 -0
  193. package/build/services/VaultSigningService.d.ts +216 -0
  194. package/build/services/VaultSigningService.js +498 -0
  195. package/build/services/VaultSigningService.js.map +1 -0
  196. package/build/services/index.d.ts +9 -0
  197. package/build/services/index.js +10 -1
  198. package/build/services/index.js.map +1 -0
  199. package/build/storage/VaultStorageConfig.d.ts +97 -0
  200. package/build/storage/VaultStorageConfig.js +22 -0
  201. package/build/storage/VaultStorageConfig.js.map +1 -0
  202. package/build/storage/VaultStorageService.d.ts +118 -0
  203. package/build/storage/VaultStorageService.js +381 -0
  204. package/build/storage/VaultStorageService.js.map +1 -0
  205. package/build/storage/index.d.ts +2 -0
  206. package/build/storage/index.js +21 -0
  207. package/build/storage/index.js.map +1 -0
  208. package/package.json +5 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrantAccessHandler.js","sourceRoot":"","sources":["../../src/handlers/GrantAccessHandler.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAMH,0CAAgD;AAEhD,kDAAiD;AAEjD,MAAa,kBAAkB;IAM7B,YAAmB,MAAc,EAAE,eAAgC,EAAE,YAA0B;QAFxF,sBAAiB,GAAG,CAAC,6BAAkB,CAAC,CAAA;QAG7C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,cAAgE;QAClF,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAA;QAE5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,OAAO,EAAE,EAAE;YAC9D,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY,EAAE,UAAU,EAAE,EAAE;SAC7B,CAAC,CAAA;QAEF,wBAAwB;QACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAErF,IAAI,KAAK,EAAE,CAAC;YACV,sDAAsD;YACtD,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG;gBACtB,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ;gBACxB,aAAa,EAAE;oBACb,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,SAAS,EAAE,UAAU,EAAE,EAAE;oBACzB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW;iBAC3C;aACF,CAAA;YAED,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;QACxD,CAAC;QAED,6BAA6B;QAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,8BAAe,CAAC,aAAa;YACnC,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,SAAS,EAAE,UAAU,EAAE,EAAE;gBACzB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE,WAAW;aAC3C;SACF,CAAC,CAAA;IACJ,CAAC;CACF;AAxDD,gDAwDC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Handler for provide-share messages
3
+ *
4
+ * Receives Shamir shares for threshold vault reconstruction.
5
+ */
6
+ import type { MessageHandler, MessageHandlerInboundMessage, Logger } from '@credo-ts/core';
7
+ import { EventEmitter } from '@credo-ts/core';
8
+ import { ProvideShareMessage } from '../messages';
9
+ import { ThresholdSessionRepository } from '../repository/ThresholdSessionRepository';
10
+ export declare class ProvideShareHandler implements MessageHandler {
11
+ private logger;
12
+ private sessionRepository;
13
+ private eventEmitter;
14
+ supportedMessages: (typeof ProvideShareMessage)[];
15
+ constructor(logger: Logger, sessionRepository: ThresholdSessionRepository, eventEmitter: EventEmitter);
16
+ handle(messageContext: MessageHandlerInboundMessage<ProvideShareHandler>): Promise<void>;
17
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for provide-share messages
4
+ *
5
+ * Receives Shamir shares for threshold vault reconstruction.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ProvideShareHandler = void 0;
9
+ const messages_1 = require("../messages");
10
+ const VaultsEvents_1 = require("../VaultsEvents");
11
+ class ProvideShareHandler {
12
+ constructor(logger, sessionRepository, eventEmitter) {
13
+ this.supportedMessages = [messages_1.ProvideShareMessage];
14
+ this.logger = logger;
15
+ this.sessionRepository = sessionRepository;
16
+ this.eventEmitter = eventEmitter;
17
+ }
18
+ async handle(messageContext) {
19
+ const { agentContext, connection, message } = messageContext;
20
+ this.logger.info(`Received share ${message.shareIdentifier} for session ${message.sessionId}`, {
21
+ vaultId: message.vaultId,
22
+ sessionId: message.sessionId,
23
+ shareIdentifier: message.shareIdentifier,
24
+ connectionId: connection?.id,
25
+ });
26
+ // Find the session
27
+ const session = await this.sessionRepository.findBySessionId(agentContext, message.sessionId);
28
+ if (!session) {
29
+ this.logger.warn(`Unknown session ${message.sessionId}`);
30
+ return;
31
+ }
32
+ // Check expiration
33
+ if (session.status === 'expired' || (session.expiresAt && new Date() > session.expiresAt)) {
34
+ this.logger.warn(`Session ${message.sessionId} has expired`);
35
+ return;
36
+ }
37
+ // Add share to session (store as base64url string)
38
+ session.addShare({
39
+ identifier: message.shareIdentifier,
40
+ data: message.shareValue, // Already base64url encoded
41
+ providedBy: connection?.id ?? 'unknown',
42
+ providedAt: new Date(),
43
+ });
44
+ await this.sessionRepository.update(agentContext, session);
45
+ // Emit event
46
+ this.eventEmitter.emit(agentContext, {
47
+ type: VaultsEvents_1.VaultEventTypes.ShareProvided,
48
+ payload: {
49
+ vaultId: message.vaultId,
50
+ docId: message.docId,
51
+ sessionId: message.sessionId,
52
+ shareIdentifier: message.shareIdentifier,
53
+ providedBy: connection?.id,
54
+ totalShares: session.shares.length,
55
+ threshold: session.threshold,
56
+ },
57
+ });
58
+ // Check if threshold met
59
+ if (session.shares.length >= session.threshold) {
60
+ session.status = 'complete';
61
+ await this.sessionRepository.update(agentContext, session);
62
+ this.eventEmitter.emit(agentContext, {
63
+ type: VaultsEvents_1.VaultEventTypes.ThresholdMet,
64
+ payload: {
65
+ vaultId: message.vaultId,
66
+ docId: message.docId,
67
+ sessionId: message.sessionId,
68
+ sharesCollected: session.shares.length,
69
+ threshold: session.threshold,
70
+ },
71
+ });
72
+ this.logger.info(`Threshold met for session ${message.sessionId}: ${session.shares.length}/${session.threshold}`);
73
+ }
74
+ }
75
+ }
76
+ exports.ProvideShareHandler = ProvideShareHandler;
77
+ //# sourceMappingURL=ProvideShareHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvideShareHandler.js","sourceRoot":"","sources":["../../src/handlers/ProvideShareHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Handler for request-access messages
3
+ *
4
+ * Receives access requests from peers wanting to decrypt a vault.
5
+ * Owner can approve by sending grant-access with CEK wrap.
6
+ */
7
+ import type { MessageHandler, MessageHandlerInboundMessage, Logger } from '@credo-ts/core';
8
+ import { EventEmitter, OutboundMessageContext } from '@credo-ts/core';
9
+ import { RequestAccessMessage, DenyAccessMessage } from '../messages';
10
+ import { VaultRepository } from '../repository/VaultRepository';
11
+ export declare class RequestAccessHandler implements MessageHandler {
12
+ private logger;
13
+ private vaultRepository;
14
+ private eventEmitter;
15
+ supportedMessages: (typeof RequestAccessMessage)[];
16
+ constructor(logger: Logger, vaultRepository: VaultRepository, eventEmitter: EventEmitter);
17
+ handle(messageContext: MessageHandlerInboundMessage<RequestAccessHandler>): Promise<OutboundMessageContext<DenyAccessMessage> | undefined>;
18
+ }
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for request-access messages
4
+ *
5
+ * Receives access requests from peers wanting to decrypt a vault.
6
+ * Owner can approve by sending grant-access with CEK wrap.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RequestAccessHandler = void 0;
10
+ const core_1 = require("@credo-ts/core");
11
+ const messages_1 = require("../messages");
12
+ const VaultsEvents_1 = require("../VaultsEvents");
13
+ class RequestAccessHandler {
14
+ constructor(logger, vaultRepository, eventEmitter) {
15
+ this.supportedMessages = [messages_1.RequestAccessMessage];
16
+ this.logger = logger;
17
+ this.vaultRepository = vaultRepository;
18
+ this.eventEmitter = eventEmitter;
19
+ }
20
+ async handle(messageContext) {
21
+ const { agentContext, connection, message } = messageContext;
22
+ this.logger.info(`Access request for vault ${message.vaultId} from ${message.requesterDid}`, {
23
+ vaultId: message.vaultId,
24
+ requesterDid: message.requesterDid,
25
+ requesterKid: message.requesterKid,
26
+ hasProof: !!message.proof,
27
+ connectionId: connection?.id,
28
+ });
29
+ // Check if we have this vault
30
+ const vault = await this.vaultRepository.findByVaultId(agentContext, message.vaultId);
31
+ if (!vault) {
32
+ this.logger.warn(`Access request for unknown vault ${message.vaultId}`);
33
+ const denyMessage = new messages_1.DenyAccessMessage({
34
+ vaultId: message.vaultId,
35
+ docId: message.docId,
36
+ reason: 'not-authorized',
37
+ message: 'Vault not found',
38
+ });
39
+ return new core_1.OutboundMessageContext(denyMessage, { agentContext, connection });
40
+ }
41
+ // Emit event for application to handle (approve/deny)
42
+ // Application should call grantAccess or denyAccess based on policy
43
+ this.eventEmitter.emit(agentContext, {
44
+ type: VaultsEvents_1.VaultEventTypes.AccessRequested,
45
+ payload: {
46
+ vaultId: message.vaultId,
47
+ docId: message.docId,
48
+ requesterDid: message.requesterDid,
49
+ requesterKid: message.requesterKid,
50
+ proof: message.proof,
51
+ connectionId: connection?.id,
52
+ messageId: message.id,
53
+ },
54
+ });
55
+ // Don't auto-respond - let application decide
56
+ // Application will use VaultsApi to send grant or deny
57
+ }
58
+ }
59
+ exports.RequestAccessHandler = RequestAccessHandler;
60
+ //# sourceMappingURL=RequestAccessHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestAccessHandler.js","sourceRoot":"","sources":["../../src/handlers/RequestAccessHandler.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,yCAAqE;AAErE,0CAAqE;AAErE,kDAAiD;AAEjD,MAAa,oBAAoB;IAM/B,YAAmB,MAAc,EAAE,eAAgC,EAAE,YAA0B;QAFxF,sBAAiB,GAAG,CAAC,+BAAoB,CAAC,CAAA;QAG/C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,cAAkE;QACpF,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAA;QAE5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,OAAO,SAAS,OAAO,CAAC,YAAY,EAAE,EAAE;YAC3F,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;YACzB,YAAY,EAAE,UAAU,EAAE,EAAE;SAC7B,CAAC,CAAA;QAEF,8BAA8B;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAErF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YACvE,MAAM,WAAW,GAAG,IAAI,4BAAiB,CAAC;gBACxC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,gBAAgB;gBACxB,OAAO,EAAE,iBAAiB;aAC3B,CAAC,CAAA;YACF,OAAO,IAAI,6BAAsB,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;QAC9E,CAAC;QAED,sDAAsD;QACtD,oEAAoE;QACpE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,8BAAe,CAAC,eAAe;YACrC,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,YAAY,EAAE,UAAU,EAAE,EAAE;gBAC5B,SAAS,EAAE,OAAO,CAAC,EAAE;aACtB;SACF,CAAC,CAAA;QAEF,8CAA8C;QAC9C,uDAAuD;IACzD,CAAC;CACF;AAvDD,oDAuDC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Handler for request-share messages
3
+ *
4
+ * Receives requests for Shamir shares in threshold vault decryption.
5
+ */
6
+ import type { MessageHandler, MessageHandlerInboundMessage, Logger } from '@credo-ts/core';
7
+ import { EventEmitter, OutboundMessageContext } from '@credo-ts/core';
8
+ import { RequestShareMessage, DenyShareMessage } from '../messages';
9
+ import { VaultRepository } from '../repository/VaultRepository';
10
+ import { ThresholdSessionRepository } from '../repository/ThresholdSessionRepository';
11
+ export declare class RequestShareHandler implements MessageHandler {
12
+ private logger;
13
+ private vaultRepository;
14
+ private sessionRepository;
15
+ private eventEmitter;
16
+ supportedMessages: (typeof RequestShareMessage)[];
17
+ constructor(logger: Logger, vaultRepository: VaultRepository, sessionRepository: ThresholdSessionRepository, eventEmitter: EventEmitter);
18
+ handle(messageContext: MessageHandlerInboundMessage<RequestShareHandler>): Promise<OutboundMessageContext<DenyShareMessage> | undefined>;
19
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for request-share messages
4
+ *
5
+ * Receives requests for Shamir shares in threshold vault decryption.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.RequestShareHandler = void 0;
9
+ const core_1 = require("@credo-ts/core");
10
+ const messages_1 = require("../messages");
11
+ const VaultsEvents_1 = require("../VaultsEvents");
12
+ class RequestShareHandler {
13
+ constructor(logger, vaultRepository, sessionRepository, eventEmitter) {
14
+ this.supportedMessages = [messages_1.RequestShareMessage];
15
+ this.logger = logger;
16
+ this.vaultRepository = vaultRepository;
17
+ this.sessionRepository = sessionRepository;
18
+ this.eventEmitter = eventEmitter;
19
+ }
20
+ async handle(messageContext) {
21
+ const { agentContext, connection, message } = messageContext;
22
+ this.logger.info(`Share request for vault ${message.vaultId} session ${message.sessionId}`, {
23
+ vaultId: message.vaultId,
24
+ sessionId: message.sessionId,
25
+ requesterDid: message.requesterDid,
26
+ shareIdentifier: message.shareIdentifier,
27
+ connectionId: connection?.id,
28
+ });
29
+ // Verify vault exists
30
+ const vault = await this.vaultRepository.findByVaultId(agentContext, message.vaultId);
31
+ if (!vault) {
32
+ const denyMessage = new messages_1.DenyShareMessage({
33
+ vaultId: message.vaultId,
34
+ docId: message.docId,
35
+ sessionId: message.sessionId,
36
+ reason: 'not-authorized',
37
+ message: 'Vault not found',
38
+ });
39
+ return new core_1.OutboundMessageContext(denyMessage, { agentContext, connection });
40
+ }
41
+ // Check if it's a threshold vault
42
+ if (vault.header.policy?.mode !== 'threshold') {
43
+ const denyMessage = new messages_1.DenyShareMessage({
44
+ vaultId: message.vaultId,
45
+ docId: message.docId,
46
+ sessionId: message.sessionId,
47
+ reason: 'policy-violation',
48
+ message: 'Not a threshold vault',
49
+ });
50
+ return new core_1.OutboundMessageContext(denyMessage, { agentContext, connection });
51
+ }
52
+ // Emit event for application to handle
53
+ // Application should validate requester and send provide-share if approved
54
+ this.eventEmitter.emit(agentContext, {
55
+ type: VaultsEvents_1.VaultEventTypes.ShareRequested,
56
+ payload: {
57
+ vaultId: message.vaultId,
58
+ docId: message.docId,
59
+ sessionId: message.sessionId,
60
+ requesterDid: message.requesterDid,
61
+ shareIdentifier: message.shareIdentifier,
62
+ connectionId: connection?.id,
63
+ messageId: message.id,
64
+ },
65
+ });
66
+ // Don't auto-respond - let application decide
67
+ }
68
+ }
69
+ exports.RequestShareHandler = RequestShareHandler;
70
+ //# sourceMappingURL=RequestShareHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestShareHandler.js","sourceRoot":"","sources":["../../src/handlers/RequestShareHandler.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAIH,yCAAqE;AAErE,0CAAmE;AAGnE,kDAAiD;AAEjD,MAAa,mBAAmB;IAO9B,YACE,MAAc,EACd,eAAgC,EAChC,iBAA6C,EAC7C,YAA0B;QANrB,sBAAiB,GAAG,CAAC,8BAAmB,CAAC,CAAA;QAQ9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;QAC1C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,cAAiE;QACnF,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAA;QAE5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,OAAO,YAAY,OAAO,CAAC,SAAS,EAAE,EAAE;YAC1F,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,YAAY,EAAE,UAAU,EAAE,EAAE;SAC7B,CAAC,CAAA;QAEF,sBAAsB;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAErF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,WAAW,GAAG,IAAI,2BAAgB,CAAC;gBACvC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,gBAAgB;gBACxB,OAAO,EAAE,iBAAiB;aAC3B,CAAC,CAAA;YACF,OAAO,IAAI,6BAAsB,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;QAC9E,CAAC;QAED,kCAAkC;QAClC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9C,MAAM,WAAW,GAAG,IAAI,2BAAgB,CAAC;gBACvC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,MAAM,EAAE,kBAAkB;gBAC1B,OAAO,EAAE,uBAAuB;aACjC,CAAC,CAAA;YACF,OAAO,IAAI,6BAAsB,CAAC,WAAW,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;QAC9E,CAAC;QAED,uCAAuC;QACvC,2EAA2E;QAC3E,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,8BAAe,CAAC,cAAc;YACpC,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,YAAY,EAAE,UAAU,EAAE,EAAE;gBAC5B,SAAS,EAAE,OAAO,CAAC,EAAE;aACtB;SACF,CAAC,CAAA;QAEF,8CAA8C;IAChD,CAAC;CACF;AAzED,kDAyEC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Handler for request-storage messages
3
+ *
4
+ * Handles storage allocation requests from vault owners.
5
+ * Used by agents acting as vault operators.
6
+ */
7
+ import type { MessageHandler, MessageHandlerInboundMessage, Logger } from '@credo-ts/core';
8
+ import { EventEmitter, OutboundMessageContext } from '@credo-ts/core';
9
+ import { RequestStorageMessage } from '../messages/RequestStorageMessage';
10
+ import { ProvideStorageMessage } from '../messages/ProvideStorageMessage';
11
+ import { VaultProblemReportMessage } from '../messages/VaultProblemReportMessage';
12
+ import { VaultStorageService } from '../storage/VaultStorageService';
13
+ /**
14
+ * Storage allocation policy
15
+ */
16
+ export interface StorageAllocationPolicy {
17
+ /** Maximum file size per vault (bytes) */
18
+ maxFileSize: number;
19
+ /** Maximum total storage per connection (bytes) */
20
+ maxTotalStorage: number;
21
+ /** Allowed content types */
22
+ allowedContentTypes?: string[];
23
+ /** Allowed purposes */
24
+ allowedPurposes?: string[];
25
+ /** Default storage duration (seconds, 0 = permanent) */
26
+ defaultDuration?: number;
27
+ }
28
+ export declare class RequestStorageHandler implements MessageHandler {
29
+ private logger;
30
+ private storageService;
31
+ private eventEmitter;
32
+ private policy;
33
+ private connectionUsage;
34
+ supportedMessages: (typeof RequestStorageMessage)[];
35
+ constructor(logger: Logger, storageService: VaultStorageService, eventEmitter: EventEmitter, policy?: Partial<StorageAllocationPolicy>);
36
+ handle(messageContext: MessageHandlerInboundMessage<RequestStorageHandler>): Promise<OutboundMessageContext<VaultProblemReportMessage> | OutboundMessageContext<ProvideStorageMessage>>;
37
+ /**
38
+ * Validate storage request against policy
39
+ */
40
+ private validateRequest;
41
+ /**
42
+ * Get remaining quota for a connection
43
+ */
44
+ private getRemainingQuota;
45
+ /**
46
+ * Update policy
47
+ */
48
+ updatePolicy(policy: Partial<StorageAllocationPolicy>): void;
49
+ /**
50
+ * Reset usage tracking for a connection
51
+ */
52
+ resetUsage(connectionId: string): void;
53
+ }
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for request-storage messages
4
+ *
5
+ * Handles storage allocation requests from vault owners.
6
+ * Used by agents acting as vault operators.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RequestStorageHandler = void 0;
10
+ const core_1 = require("@credo-ts/core");
11
+ const RequestStorageMessage_1 = require("../messages/RequestStorageMessage");
12
+ const ProvideStorageMessage_1 = require("../messages/ProvideStorageMessage");
13
+ const VaultProblemReportMessage_1 = require("../messages/VaultProblemReportMessage");
14
+ const VaultsEvents_1 = require("../VaultsEvents");
15
+ const DEFAULT_POLICY = {
16
+ maxFileSize: 100 * 1024 * 1024, // 100 MB
17
+ maxTotalStorage: 1024 * 1024 * 1024, // 1 GB
18
+ defaultDuration: 0,
19
+ };
20
+ class RequestStorageHandler {
21
+ constructor(logger, storageService, eventEmitter, policy) {
22
+ this.connectionUsage = new Map();
23
+ this.supportedMessages = [RequestStorageMessage_1.RequestStorageMessage];
24
+ this.logger = logger;
25
+ this.storageService = storageService;
26
+ this.eventEmitter = eventEmitter;
27
+ this.policy = { ...DEFAULT_POLICY, ...policy };
28
+ }
29
+ async handle(messageContext) {
30
+ const { agentContext, connection, message } = messageContext;
31
+ this.logger.debug(`Received storage request for vault ${message.vaultId} (${message.size} bytes)`);
32
+ // Validate storage is configured
33
+ if (!this.storageService.isConfigured()) {
34
+ this.logger.warn('Storage service not configured, rejecting request');
35
+ return new core_1.OutboundMessageContext(new VaultProblemReportMessage_1.VaultProblemReportMessage({
36
+ threadId: message.threadId,
37
+ code: 'storage-unavailable',
38
+ description: 'Vault operator storage is not configured',
39
+ }), { agentContext, connection });
40
+ }
41
+ // Validate request against policy
42
+ const validationError = this.validateRequest(message, connection?.id);
43
+ if (validationError) {
44
+ this.logger.warn(`Storage request rejected: ${validationError}`);
45
+ return new core_1.OutboundMessageContext(new VaultProblemReportMessage_1.VaultProblemReportMessage({
46
+ threadId: message.threadId,
47
+ code: 'policy-violation',
48
+ description: validationError,
49
+ }), { agentContext, connection });
50
+ }
51
+ try {
52
+ // Generate pre-signed upload URL
53
+ const uploadInfo = await this.storageService.generateUploadUrl(message.vaultId, {
54
+ contentType: message.contentType,
55
+ maxSize: message.size,
56
+ expiresIn: 3600, // 1 hour
57
+ });
58
+ // Track storage allocation
59
+ if (connection?.id) {
60
+ const currentUsage = this.connectionUsage.get(connection.id) || 0;
61
+ this.connectionUsage.set(connection.id, currentUsage + message.size);
62
+ }
63
+ // Emit event
64
+ this.eventEmitter.emit(agentContext, {
65
+ type: VaultsEvents_1.VaultEventTypes.StorageAllocated,
66
+ payload: {
67
+ vaultId: message.vaultId,
68
+ docId: message.docId,
69
+ size: message.size,
70
+ allocatedTo: connection?.id,
71
+ storageUri: uploadInfo.finalUri,
72
+ },
73
+ });
74
+ // Respond with storage details
75
+ const response = new ProvideStorageMessage_1.ProvideStorageMessage({
76
+ threadId: message.id,
77
+ vaultId: message.vaultId,
78
+ docId: message.docId,
79
+ upload: {
80
+ uploadUrl: uploadInfo.uploadUrl,
81
+ method: uploadInfo.method,
82
+ headers: uploadInfo.headers,
83
+ expiresAt: uploadInfo.expiresAt,
84
+ maxSize: this.policy.maxFileSize,
85
+ },
86
+ location: {
87
+ type: 's3',
88
+ storageUri: uploadInfo.finalUri,
89
+ storageKey: uploadInfo.storageKey,
90
+ },
91
+ quotaRemaining: this.getRemainingQuota(connection?.id),
92
+ });
93
+ this.logger.info(`Allocated storage for vault ${message.vaultId}: ${uploadInfo.finalUri}`);
94
+ return new core_1.OutboundMessageContext(response, { agentContext, connection });
95
+ }
96
+ catch (error) {
97
+ this.logger.error('Failed to allocate storage', { error });
98
+ return new core_1.OutboundMessageContext(new VaultProblemReportMessage_1.VaultProblemReportMessage({
99
+ threadId: message.threadId,
100
+ code: 'storage-error',
101
+ description: `Failed to allocate storage: ${error instanceof Error ? error.message : 'Unknown error'}`,
102
+ }), { agentContext, connection });
103
+ }
104
+ }
105
+ /**
106
+ * Validate storage request against policy
107
+ */
108
+ validateRequest(message, connectionId) {
109
+ // Check file size
110
+ if (message.size > this.policy.maxFileSize) {
111
+ return `File size ${message.size} exceeds maximum ${this.policy.maxFileSize} bytes`;
112
+ }
113
+ // Check total storage quota
114
+ if (connectionId) {
115
+ const currentUsage = this.connectionUsage.get(connectionId) || 0;
116
+ if (currentUsage + message.size > this.policy.maxTotalStorage) {
117
+ return `Storage quota exceeded. Used: ${currentUsage}, Requested: ${message.size}, Max: ${this.policy.maxTotalStorage}`;
118
+ }
119
+ }
120
+ // Check content type
121
+ if (this.policy.allowedContentTypes && message.contentType) {
122
+ if (!this.policy.allowedContentTypes.includes(message.contentType)) {
123
+ return `Content type ${message.contentType} not allowed`;
124
+ }
125
+ }
126
+ // Check purpose
127
+ if (this.policy.allowedPurposes && message.purpose) {
128
+ if (!this.policy.allowedPurposes.includes(message.purpose)) {
129
+ return `Purpose ${message.purpose} not allowed`;
130
+ }
131
+ }
132
+ return null;
133
+ }
134
+ /**
135
+ * Get remaining quota for a connection
136
+ */
137
+ getRemainingQuota(connectionId) {
138
+ if (!connectionId) {
139
+ return this.policy.maxTotalStorage;
140
+ }
141
+ const used = this.connectionUsage.get(connectionId) || 0;
142
+ return Math.max(0, this.policy.maxTotalStorage - used);
143
+ }
144
+ /**
145
+ * Update policy
146
+ */
147
+ updatePolicy(policy) {
148
+ this.policy = { ...this.policy, ...policy };
149
+ }
150
+ /**
151
+ * Reset usage tracking for a connection
152
+ */
153
+ resetUsage(connectionId) {
154
+ this.connectionUsage.delete(connectionId);
155
+ }
156
+ }
157
+ exports.RequestStorageHandler = RequestStorageHandler;
158
+ //# sourceMappingURL=RequestStorageHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RequestStorageHandler.js","sourceRoot":"","sources":["../../src/handlers/RequestStorageHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Handler for retrieve-vault messages
3
+ *
4
+ * When a peer requests vault data, this handler:
5
+ * 1. Validates the request
6
+ * 2. Checks if requester has access to the vault
7
+ * 3. Returns the encrypted vault data or an error
8
+ */
9
+ import type { MessageHandler, MessageHandlerInboundMessage } from '@credo-ts/core';
10
+ import { OutboundMessageContext } from '@credo-ts/core';
11
+ import { RetrieveVaultMessage, VaultDataMessage, VaultProblemReportMessage } from '../messages';
12
+ import { VaultService } from '../services/VaultService';
13
+ export declare class RetrieveVaultHandler implements MessageHandler {
14
+ private vaultService;
15
+ supportedMessages: (typeof RetrieveVaultMessage)[];
16
+ constructor(vaultService: VaultService);
17
+ handle(messageContext: MessageHandlerInboundMessage<RetrieveVaultHandler>): Promise<OutboundMessageContext<VaultProblemReportMessage> | OutboundMessageContext<VaultDataMessage>>;
18
+ }
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for retrieve-vault messages
4
+ *
5
+ * When a peer requests vault data, this handler:
6
+ * 1. Validates the request
7
+ * 2. Checks if requester has access to the vault
8
+ * 3. Returns the encrypted vault data or an error
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.RetrieveVaultHandler = void 0;
12
+ const core_1 = require("@credo-ts/core");
13
+ const messages_1 = require("../messages");
14
+ class RetrieveVaultHandler {
15
+ constructor(vaultService) {
16
+ this.supportedMessages = [messages_1.RetrieveVaultMessage];
17
+ this.vaultService = vaultService;
18
+ }
19
+ async handle(messageContext) {
20
+ const { agentContext, connection, message } = messageContext;
21
+ // Require connection for vault operations
22
+ if (!connection) {
23
+ return new core_1.OutboundMessageContext(new messages_1.VaultProblemReportMessage({
24
+ errorCode: messages_1.VaultErrorCodes.ACCESS_DENIED,
25
+ description: 'Connection required for vault operations',
26
+ }), { agentContext });
27
+ }
28
+ try {
29
+ // Get vault record
30
+ const vaultRecord = await this.vaultService.getVaultRecord(agentContext, message.vaultId);
31
+ if (!vaultRecord) {
32
+ return new core_1.OutboundMessageContext(new messages_1.VaultProblemReportMessage({
33
+ vaultId: message.vaultId,
34
+ errorCode: messages_1.VaultErrorCodes.NOT_FOUND,
35
+ description: `Vault not found: ${message.vaultId}`,
36
+ }), { agentContext, connection });
37
+ }
38
+ // TODO: Add access control check
39
+ // For now, any connected peer can retrieve vaults
40
+ // In production, we should check if the connection is authorized
41
+ // Return vault data
42
+ const responseMessage = new messages_1.VaultDataMessage({
43
+ threadId: message.threadId,
44
+ vaultId: vaultRecord.vaultId,
45
+ docId: vaultRecord.docId,
46
+ header: vaultRecord.header,
47
+ ciphertext: vaultRecord.ciphertext,
48
+ });
49
+ return new core_1.OutboundMessageContext(responseMessage, {
50
+ agentContext,
51
+ connection,
52
+ });
53
+ }
54
+ catch (error) {
55
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
56
+ return new core_1.OutboundMessageContext(new messages_1.VaultProblemReportMessage({
57
+ vaultId: message.vaultId,
58
+ errorCode: messages_1.VaultErrorCodes.STORAGE_ERROR,
59
+ description: `Failed to retrieve vault: ${errorMessage}`,
60
+ }), { agentContext, connection });
61
+ }
62
+ }
63
+ }
64
+ exports.RetrieveVaultHandler = RetrieveVaultHandler;
65
+ //# sourceMappingURL=RetrieveVaultHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RetrieveVaultHandler.js","sourceRoot":"","sources":["../../src/handlers/RetrieveVaultHandler.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAIH,yCAAuD;AAEvD,0CAAgH;AAGhH,MAAa,oBAAoB;IAI/B,YAAmB,YAA0B;QAFtC,sBAAiB,GAAG,CAAC,+BAAoB,CAAC,CAAA;QAG/C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,cAAkE;QACpF,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAA;QAE5D,0CAA0C;QAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,6BAAsB,CAC/B,IAAI,oCAAyB,CAAC;gBAC5B,SAAS,EAAE,0BAAe,CAAC,aAAa;gBACxC,WAAW,EAAE,0CAA0C;aACxD,CAAC,EACF,EAAE,YAAY,EAAE,CACjB,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,mBAAmB;YACnB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;YAEzF,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,IAAI,6BAAsB,CAC/B,IAAI,oCAAyB,CAAC;oBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,SAAS,EAAE,0BAAe,CAAC,SAAS;oBACpC,WAAW,EAAE,oBAAoB,OAAO,CAAC,OAAO,EAAE;iBACnD,CAAC,EACF,EAAE,YAAY,EAAE,UAAU,EAAE,CAC7B,CAAA;YACH,CAAC;YAED,iCAAiC;YACjC,kDAAkD;YAClD,iEAAiE;YAEjE,oBAAoB;YACpB,MAAM,eAAe,GAAG,IAAI,2BAAgB,CAAC;gBAC3C,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,KAAK,EAAE,WAAW,CAAC,KAAK;gBACxB,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,UAAU,EAAE,WAAW,CAAC,UAAU;aACnC,CAAC,CAAA;YAEF,OAAO,IAAI,6BAAsB,CAAC,eAAe,EAAE;gBACjD,YAAY;gBACZ,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAA;YAC7E,OAAO,IAAI,6BAAsB,CAC/B,IAAI,oCAAyB,CAAC;gBAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,0BAAe,CAAC,aAAa;gBACxC,WAAW,EAAE,6BAA6B,YAAY,EAAE;aACzD,CAAC,EACF,EAAE,YAAY,EAAE,UAAU,EAAE,CAC7B,CAAA;QACH,CAAC;IACH,CAAC;CACF;AAlED,oDAkEC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Handler for store-vault messages
3
+ *
4
+ * Receives and stores a vault sent from a peer.
5
+ * Used when receiving a signing vault or shared vault.
6
+ */
7
+ import type { MessageHandler, MessageHandlerInboundMessage } from '@credo-ts/core';
8
+ import { EventEmitter, OutboundMessageContext } from '@credo-ts/core';
9
+ import { StoreVaultMessage, VaultStoredAckMessage } from '../messages';
10
+ import { VaultRepository } from '../repository/VaultRepository';
11
+ export declare class StoreVaultHandler implements MessageHandler {
12
+ private vaultRepository;
13
+ private eventEmitter;
14
+ supportedMessages: (typeof StoreVaultMessage)[];
15
+ constructor(vaultRepository: VaultRepository, eventEmitter: EventEmitter);
16
+ handle(messageContext: MessageHandlerInboundMessage<StoreVaultHandler>): Promise<OutboundMessageContext<VaultStoredAckMessage>>;
17
+ }