@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,77 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for store-vault messages
4
+ *
5
+ * Receives and stores a vault sent from a peer.
6
+ * Used when receiving a signing vault or shared vault.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.StoreVaultHandler = void 0;
10
+ const core_1 = require("@credo-ts/core");
11
+ const messages_1 = require("../messages");
12
+ const VaultRecord_1 = require("../repository/VaultRecord");
13
+ const VaultsEvents_1 = require("../VaultsEvents");
14
+ class StoreVaultHandler {
15
+ constructor(vaultRepository, eventEmitter) {
16
+ this.supportedMessages = [messages_1.StoreVaultMessage];
17
+ this.vaultRepository = vaultRepository;
18
+ this.eventEmitter = eventEmitter;
19
+ }
20
+ async handle(messageContext) {
21
+ const { agentContext, connection, message } = messageContext;
22
+ // Check if vault already exists
23
+ const existing = await this.vaultRepository.findByVaultId(agentContext, message.vaultId);
24
+ if (existing) {
25
+ // Update existing vault
26
+ existing.header = message.header;
27
+ existing.ciphertext = message.ciphertext;
28
+ existing.updatedAt = new Date();
29
+ // Track sender in metadata
30
+ existing.header.metadata = {
31
+ ...existing.header.metadata,
32
+ lastReceivedFrom: connection?.id,
33
+ lastReceivedAt: new Date().toISOString(),
34
+ };
35
+ await this.vaultRepository.update(agentContext, existing);
36
+ }
37
+ else {
38
+ // Create new vault record
39
+ const record = new VaultRecord_1.VaultRecord({
40
+ vaultId: message.vaultId,
41
+ docId: message.docId,
42
+ header: message.header,
43
+ ciphertext: message.ciphertext,
44
+ ownerDid: agentContext.contextCorrelationId,
45
+ });
46
+ // Track sender in metadata
47
+ record.header.metadata = {
48
+ ...record.header.metadata,
49
+ receivedFrom: connection?.id,
50
+ receivedAt: new Date().toISOString(),
51
+ };
52
+ await this.vaultRepository.save(agentContext, record);
53
+ }
54
+ // Emit event
55
+ this.eventEmitter.emit(agentContext, {
56
+ type: VaultsEvents_1.VaultEventTypes.VaultShared,
57
+ payload: {
58
+ vaultId: message.vaultId,
59
+ docId: message.docId,
60
+ sharedBy: connection?.id,
61
+ },
62
+ });
63
+ // Return acknowledgment
64
+ const ackMessage = new messages_1.VaultStoredAckMessage({
65
+ threadId: message.id,
66
+ vaultId: message.vaultId,
67
+ docId: message.docId,
68
+ storageLocation: 'local',
69
+ storageMetadata: {
70
+ timestamp: new Date().toISOString(),
71
+ },
72
+ });
73
+ return new core_1.OutboundMessageContext(ackMessage, { agentContext, connection });
74
+ }
75
+ }
76
+ exports.StoreVaultHandler = StoreVaultHandler;
77
+ //# sourceMappingURL=StoreVaultHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StoreVaultHandler.js","sourceRoot":"","sources":["../../src/handlers/StoreVaultHandler.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,yCAAqE;AAErE,0CAAsE;AAEtE,2DAAuD;AACvD,kDAAiD;AAEjD,MAAa,iBAAiB;IAK5B,YAAmB,eAAgC,EAAE,YAA0B;QAFxE,sBAAiB,GAAG,CAAC,4BAAiB,CAAC,CAAA;QAG5C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,cAA+D;QACjF,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAA;QAE5D,gCAAgC;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAExF,IAAI,QAAQ,EAAE,CAAC;YACb,wBAAwB;YACxB,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;YAChC,QAAQ,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;YACxC,QAAQ,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;YAE/B,2BAA2B;YAC3B,QAAQ,CAAC,MAAM,CAAC,QAAQ,GAAG;gBACzB,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ;gBAC3B,gBAAgB,EAAE,UAAU,EAAE,EAAE;gBAChC,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACzC,CAAA;YAED,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QAC3D,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,MAAM,MAAM,GAAG,IAAI,yBAAW,CAAC;gBAC7B,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,QAAQ,EAAE,YAAY,CAAC,oBAAoB;aAC5C,CAAC,CAAA;YAEF,2BAA2B;YAC3B,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG;gBACvB,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ;gBACzB,YAAY,EAAE,UAAU,EAAE,EAAE;gBAC5B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACrC,CAAA;YAED,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QACvD,CAAC;QAED,aAAa;QACb,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,8BAAe,CAAC,WAAW;YACjC,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE,UAAU,EAAE,EAAE;aACzB;SACF,CAAC,CAAA;QAEF,wBAAwB;QACxB,MAAM,UAAU,GAAG,IAAI,gCAAqB,CAAC;YAC3C,QAAQ,EAAE,OAAO,CAAC,EAAE;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,eAAe,EAAE,OAAO;YACxB,eAAe,EAAE;gBACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC;SACF,CAAC,CAAA;QAEF,OAAO,IAAI,6BAAsB,CAAC,UAAU,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAA;IAC7E,CAAC;CACF;AAzED,8CAyEC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Handler for update-vault messages
3
+ *
4
+ * Receives vault update notifications (re-encryption, policy changes).
5
+ */
6
+ import type { MessageHandler, MessageHandlerInboundMessage, Logger } from '@credo-ts/core';
7
+ import { EventEmitter, OutboundMessageContext } from '@credo-ts/core';
8
+ import { UpdateVaultMessage } from '../messages';
9
+ import { VaultRepository } from '../repository/VaultRepository';
10
+ import { VaultProblemReportMessage } from '../messages/VaultProblemReportMessage';
11
+ export declare class UpdateVaultHandler implements MessageHandler {
12
+ private logger;
13
+ private vaultRepository;
14
+ private eventEmitter;
15
+ supportedMessages: (typeof UpdateVaultMessage)[];
16
+ constructor(logger: Logger, vaultRepository: VaultRepository, eventEmitter: EventEmitter);
17
+ handle(messageContext: MessageHandlerInboundMessage<UpdateVaultHandler>): Promise<OutboundMessageContext<VaultProblemReportMessage> | undefined>;
18
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for update-vault messages
4
+ *
5
+ * Receives vault update notifications (re-encryption, policy changes).
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.UpdateVaultHandler = void 0;
9
+ const core_1 = require("@credo-ts/core");
10
+ const messages_1 = require("../messages");
11
+ const VaultsEvents_1 = require("../VaultsEvents");
12
+ const VaultProblemReportMessage_1 = require("../messages/VaultProblemReportMessage");
13
+ class UpdateVaultHandler {
14
+ constructor(logger, vaultRepository, eventEmitter) {
15
+ this.supportedMessages = [messages_1.UpdateVaultMessage];
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.debug(`Received update-vault for ${message.vaultId}`, {
23
+ vaultId: message.vaultId,
24
+ docId: message.docId,
25
+ newEpoch: message.newHeader.epoch,
26
+ reason: message.reason,
27
+ connectionId: connection?.id,
28
+ });
29
+ // Find existing vault
30
+ const existing = await this.vaultRepository.findByVaultId(agentContext, message.vaultId);
31
+ if (!existing) {
32
+ this.logger.warn(`Cannot update vault ${message.vaultId}: not found`);
33
+ const errorMessage = new VaultProblemReportMessage_1.VaultProblemReportMessage({
34
+ vaultId: message.vaultId,
35
+ errorCode: VaultProblemReportMessage_1.VaultErrorCodes.NOT_FOUND,
36
+ description: `Vault not found: ${message.vaultId}`,
37
+ });
38
+ return new core_1.OutboundMessageContext(errorMessage, { agentContext, connection });
39
+ }
40
+ // Verify epoch is increasing (prevent rollback attacks)
41
+ if (message.newHeader.epoch <= existing.header.epoch) {
42
+ this.logger.warn(`Rejecting update: epoch ${message.newHeader.epoch} <= ${existing.header.epoch}`);
43
+ const errorMessage = new VaultProblemReportMessage_1.VaultProblemReportMessage({
44
+ vaultId: message.vaultId,
45
+ errorCode: VaultProblemReportMessage_1.VaultErrorCodes.REPLAY,
46
+ description: `Invalid epoch: ${message.newHeader.epoch} must be greater than ${existing.header.epoch}`,
47
+ });
48
+ return new core_1.OutboundMessageContext(errorMessage, { agentContext, connection });
49
+ }
50
+ // Update vault
51
+ existing.header = message.newHeader;
52
+ existing.ciphertext = message.newCiphertext;
53
+ existing.updatedAt = new Date();
54
+ // Track update metadata
55
+ existing.header.metadata = {
56
+ ...existing.header.metadata,
57
+ updatedBy: connection?.id,
58
+ updatedAt: new Date().toISOString(),
59
+ updateReason: message.reason,
60
+ };
61
+ await this.vaultRepository.update(agentContext, existing);
62
+ // Emit event
63
+ this.eventEmitter.emit(agentContext, {
64
+ type: VaultsEvents_1.VaultEventTypes.VaultUpdated,
65
+ payload: {
66
+ vaultId: message.vaultId,
67
+ docId: message.docId,
68
+ epoch: message.newHeader.epoch,
69
+ updatedBy: connection?.id,
70
+ reason: message.reason,
71
+ },
72
+ });
73
+ this.logger.info(`Vault ${message.vaultId} updated to epoch ${message.newHeader.epoch}`);
74
+ }
75
+ }
76
+ exports.UpdateVaultHandler = UpdateVaultHandler;
77
+ //# sourceMappingURL=UpdateVaultHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UpdateVaultHandler.js","sourceRoot":"","sources":["../../src/handlers/UpdateVaultHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Handler for vault-created-ack messages
3
+ *
4
+ * Receives acknowledgment of vault creation notification.
5
+ */
6
+ import type { MessageHandler, MessageHandlerInboundMessage, Logger } from '@credo-ts/core';
7
+ import { EventEmitter } from '@credo-ts/core';
8
+ import { VaultCreatedAckMessage } from '../messages';
9
+ export declare class VaultCreatedAckHandler implements MessageHandler {
10
+ private logger;
11
+ private eventEmitter;
12
+ supportedMessages: (typeof VaultCreatedAckMessage)[];
13
+ constructor(logger: Logger, eventEmitter: EventEmitter);
14
+ handle(messageContext: MessageHandlerInboundMessage<VaultCreatedAckHandler>): Promise<void>;
15
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for vault-created-ack messages
4
+ *
5
+ * Receives acknowledgment of vault creation notification.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.VaultCreatedAckHandler = void 0;
9
+ const messages_1 = require("../messages");
10
+ const VaultsEvents_1 = require("../VaultsEvents");
11
+ class VaultCreatedAckHandler {
12
+ constructor(logger, eventEmitter) {
13
+ this.supportedMessages = [messages_1.VaultCreatedAckMessage];
14
+ this.logger = logger;
15
+ this.eventEmitter = eventEmitter;
16
+ }
17
+ async handle(messageContext) {
18
+ const { agentContext, connection, message } = messageContext;
19
+ this.logger.info(`Vault creation ${message.status} for ${message.vaultId}`, {
20
+ vaultId: message.vaultId,
21
+ status: message.status,
22
+ reason: message.reason,
23
+ connectionId: connection?.id,
24
+ });
25
+ // Emit event for application
26
+ this.eventEmitter.emit(agentContext, {
27
+ type: VaultsEvents_1.VaultEventTypes.VaultCreated,
28
+ payload: {
29
+ vaultId: message.vaultId,
30
+ acknowledged: true,
31
+ status: message.status,
32
+ reason: message.reason,
33
+ acknowledgedBy: connection?.id,
34
+ },
35
+ });
36
+ }
37
+ }
38
+ exports.VaultCreatedAckHandler = VaultCreatedAckHandler;
39
+ //# sourceMappingURL=VaultCreatedAckHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VaultCreatedAckHandler.js","sourceRoot":"","sources":["../../src/handlers/VaultCreatedAckHandler.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAMH,0CAAoD;AACpD,kDAAiD;AAEjD,MAAa,sBAAsB;IAKjC,YAAmB,MAAc,EAAE,YAA0B;QAFtD,sBAAiB,GAAG,CAAC,iCAAsB,CAAC,CAAA;QAGjD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,cAAoE;QACtF,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAA;QAE5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,MAAM,QAAQ,OAAO,CAAC,OAAO,EAAE,EAAE;YAC1E,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,UAAU,EAAE,EAAE;SAC7B,CAAC,CAAA;QAEF,6BAA6B;QAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,8BAAe,CAAC,YAAY;YAClC,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,cAAc,EAAE,UAAU,EAAE,EAAE;aAC/B;SACF,CAAC,CAAA;IACJ,CAAC;CACF;AAhCD,wDAgCC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Handler for vault-data messages
3
+ *
4
+ * When we receive vault data from a peer:
5
+ * 1. Validates the message
6
+ * 2. Stores the received vault locally
7
+ * 3. Emits an event for the application to handle
8
+ */
9
+ import type { MessageHandler, MessageHandlerInboundMessage } from '@credo-ts/core';
10
+ import { EventEmitter } from '@credo-ts/core';
11
+ import { VaultDataMessage } from '../messages';
12
+ import { VaultRepository } from '../repository/VaultRepository';
13
+ export declare class VaultDataHandler implements MessageHandler {
14
+ private vaultRepository;
15
+ private eventEmitter;
16
+ supportedMessages: (typeof VaultDataMessage)[];
17
+ constructor(vaultRepository: VaultRepository, eventEmitter: EventEmitter);
18
+ handle(messageContext: MessageHandlerInboundMessage<VaultDataHandler>): Promise<void>;
19
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for vault-data messages
4
+ *
5
+ * When we receive vault data from a peer:
6
+ * 1. Validates the message
7
+ * 2. Stores the received vault locally
8
+ * 3. Emits an event for the application to handle
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.VaultDataHandler = void 0;
12
+ const messages_1 = require("../messages");
13
+ const VaultRecord_1 = require("../repository/VaultRecord");
14
+ const VaultsEvents_1 = require("../VaultsEvents");
15
+ class VaultDataHandler {
16
+ constructor(vaultRepository, eventEmitter) {
17
+ this.supportedMessages = [messages_1.VaultDataMessage];
18
+ this.vaultRepository = vaultRepository;
19
+ this.eventEmitter = eventEmitter;
20
+ }
21
+ async handle(messageContext) {
22
+ const { agentContext, connection, message } = messageContext;
23
+ // Store the received vault locally
24
+ // Check if vault already exists
25
+ const existingVault = await this.vaultRepository.findByVaultId(agentContext, message.vaultId);
26
+ if (existingVault) {
27
+ // Update existing vault if epoch is higher
28
+ if (message.header.epoch > existingVault.header.epoch) {
29
+ existingVault.header = message.header;
30
+ existingVault.ciphertext = message.ciphertext;
31
+ existingVault.updatedAt = new Date();
32
+ await this.vaultRepository.update(agentContext, existingVault);
33
+ this.eventEmitter.emit(agentContext, {
34
+ type: VaultsEvents_1.VaultEventTypes.VaultUpdated,
35
+ payload: {
36
+ vaultId: message.vaultId,
37
+ docId: message.docId,
38
+ epoch: message.header.epoch,
39
+ connectionId: connection?.id,
40
+ },
41
+ });
42
+ }
43
+ // Ignore if epoch is same or lower (stale data)
44
+ return;
45
+ }
46
+ // Create new vault record
47
+ const vaultRecord = new VaultRecord_1.VaultRecord({
48
+ vaultId: message.vaultId,
49
+ docId: message.docId,
50
+ header: message.header,
51
+ ciphertext: message.ciphertext,
52
+ ownerDid: connection?.theirDid ?? 'unknown',
53
+ });
54
+ await this.vaultRepository.save(agentContext, vaultRecord);
55
+ // Emit event for application to handle
56
+ this.eventEmitter.emit(agentContext, {
57
+ type: VaultsEvents_1.VaultEventTypes.VaultShared,
58
+ payload: {
59
+ vaultId: message.vaultId,
60
+ docId: message.docId,
61
+ connectionId: connection?.id,
62
+ theirDid: connection?.theirDid,
63
+ },
64
+ });
65
+ }
66
+ }
67
+ exports.VaultDataHandler = VaultDataHandler;
68
+ //# sourceMappingURL=VaultDataHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VaultDataHandler.js","sourceRoot":"","sources":["../../src/handlers/VaultDataHandler.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAMH,0CAA8C;AAE9C,2DAAuD;AACvD,kDAAiD;AAEjD,MAAa,gBAAgB;IAK3B,YAAmB,eAAgC,EAAE,YAA0B;QAFxE,sBAAiB,GAAG,CAAC,2BAAgB,CAAC,CAAA;QAG3C,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,cAA8D;QAChF,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAA;QAE5D,mCAAmC;QACnC,gCAAgC;QAChC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAE7F,IAAI,aAAa,EAAE,CAAC;YAClB,2CAA2C;YAC3C,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACtD,aAAa,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;gBACrC,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;gBAC7C,aAAa,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;gBAEpC,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;gBAE9D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;oBACnC,IAAI,EAAE,8BAAe,CAAC,YAAY;oBAClC,OAAO,EAAE;wBACP,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK;wBAC3B,YAAY,EAAE,UAAU,EAAE,EAAE;qBAC7B;iBACF,CAAC,CAAA;YACJ,CAAC;YACD,gDAAgD;YAChD,OAAM;QACR,CAAC;QAED,0BAA0B;QAC1B,MAAM,WAAW,GAAG,IAAI,yBAAW,CAAC;YAClC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAI,SAAS;SAC5C,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;QAE1D,uCAAuC;QACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,8BAAe,CAAC,WAAW;YACjC,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,YAAY,EAAE,UAAU,EAAE,EAAE;gBAC5B,QAAQ,EAAE,UAAU,EAAE,QAAQ;aAC/B;SACF,CAAC,CAAA;IACJ,CAAC;CACF;AA9DD,4CA8DC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Handler for vault problem-report messages
3
+ *
4
+ * When we receive an error from a peer:
5
+ * 1. Logs the error
6
+ * 2. Emits an event for the application to handle
7
+ */
8
+ import type { MessageHandler, MessageHandlerInboundMessage, Logger } from '@credo-ts/core';
9
+ import { EventEmitter } from '@credo-ts/core';
10
+ import { VaultProblemReportMessage } from '../messages';
11
+ export declare class VaultProblemReportHandler implements MessageHandler {
12
+ private logger;
13
+ private eventEmitter;
14
+ supportedMessages: (typeof VaultProblemReportMessage)[];
15
+ constructor(logger: Logger, eventEmitter: EventEmitter);
16
+ handle(messageContext: MessageHandlerInboundMessage<VaultProblemReportHandler>): Promise<void>;
17
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for vault problem-report messages
4
+ *
5
+ * When we receive an error from a peer:
6
+ * 1. Logs the error
7
+ * 2. Emits an event for the application to handle
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.VaultProblemReportHandler = void 0;
11
+ const messages_1 = require("../messages");
12
+ const VaultsEvents_1 = require("../VaultsEvents");
13
+ class VaultProblemReportHandler {
14
+ constructor(logger, eventEmitter) {
15
+ this.supportedMessages = [messages_1.VaultProblemReportMessage];
16
+ this.logger = logger;
17
+ this.eventEmitter = eventEmitter;
18
+ }
19
+ async handle(messageContext) {
20
+ const { agentContext, connection, message } = messageContext;
21
+ this.logger.warn(`Received vault problem report: ${message.errorCode} - ${message.description}`, {
22
+ vaultId: message.vaultId,
23
+ connectionId: connection?.id,
24
+ errorCode: message.errorCode,
25
+ });
26
+ // Emit event for application to handle
27
+ this.eventEmitter.emit(agentContext, {
28
+ type: VaultsEvents_1.VaultEventTypes.VaultError,
29
+ payload: {
30
+ vaultId: message.vaultId,
31
+ errorCode: message.errorCode,
32
+ description: message.description,
33
+ details: message.details,
34
+ connectionId: connection?.id,
35
+ },
36
+ });
37
+ }
38
+ }
39
+ exports.VaultProblemReportHandler = VaultProblemReportHandler;
40
+ //# sourceMappingURL=VaultProblemReportHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VaultProblemReportHandler.js","sourceRoot":"","sources":["../../src/handlers/VaultProblemReportHandler.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAMH,0CAAuD;AACvD,kDAAiD;AAEjD,MAAa,yBAAyB;IAKpC,YAAmB,MAAc,EAAE,YAA0B;QAFtD,sBAAiB,GAAG,CAAC,oCAAyB,CAAC,CAAA;QAGpD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,cAAuE;QACzF,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,cAAc,CAAA;QAE5D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,OAAO,CAAC,SAAS,MAAM,OAAO,CAAC,WAAW,EAAE,EAAE;YAC/F,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,UAAU,EAAE,EAAE;YAC5B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAA;QAEF,uCAAuC;QACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,EAAE,8BAAe,CAAC,UAAU;YAChC,OAAO,EAAE;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,YAAY,EAAE,UAAU,EAAE,EAAE;aAC7B;SACF,CAAC,CAAA;IACJ,CAAC;CACF;AA/BD,8DA+BC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Handler for vault-reference messages
3
+ *
4
+ * Receives vault references and optionally downloads the ciphertext
5
+ * from external storage.
6
+ */
7
+ import type { MessageHandler, MessageHandlerInboundMessage, Logger } from '@credo-ts/core';
8
+ import { EventEmitter, OutboundMessageContext } from '@credo-ts/core';
9
+ import { VaultReferenceMessage } from '../messages/VaultReferenceMessage';
10
+ import { VaultStoredAckMessage } from '../messages/VaultStoredAckMessage';
11
+ import { VaultProblemReportMessage } from '../messages/VaultProblemReportMessage';
12
+ import { VaultRepository } from '../repository/VaultRepository';
13
+ import { VaultStorageService } from '../storage/VaultStorageService';
14
+ export interface VaultReferenceHandlerOptions {
15
+ /** Automatically download ciphertext from storage */
16
+ autoDownload?: boolean;
17
+ /** Store reference even if download fails */
18
+ storeReferenceOnDownloadFailure?: boolean;
19
+ }
20
+ export declare class VaultReferenceHandler implements MessageHandler {
21
+ private logger;
22
+ private vaultRepository;
23
+ private storageService;
24
+ private eventEmitter;
25
+ private options;
26
+ supportedMessages: (typeof VaultReferenceMessage)[];
27
+ constructor(logger: Logger, vaultRepository: VaultRepository, storageService: VaultStorageService, eventEmitter: EventEmitter, options?: VaultReferenceHandlerOptions);
28
+ handle(messageContext: MessageHandlerInboundMessage<VaultReferenceHandler>): Promise<OutboundMessageContext<VaultStoredAckMessage> | OutboundMessageContext<VaultProblemReportMessage>>;
29
+ /**
30
+ * Download ciphertext from storage
31
+ */
32
+ private downloadCiphertext;
33
+ }
@@ -0,0 +1,169 @@
1
+ "use strict";
2
+ /**
3
+ * Handler for vault-reference messages
4
+ *
5
+ * Receives vault references and optionally downloads the ciphertext
6
+ * from external storage.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.VaultReferenceHandler = void 0;
10
+ const core_1 = require("@credo-ts/core");
11
+ const VaultReferenceMessage_1 = require("../messages/VaultReferenceMessage");
12
+ const VaultStoredAckMessage_1 = require("../messages/VaultStoredAckMessage");
13
+ const VaultProblemReportMessage_1 = require("../messages/VaultProblemReportMessage");
14
+ const VaultRecord_1 = require("../repository/VaultRecord");
15
+ const VaultsEvents_1 = require("../VaultsEvents");
16
+ const VaultCrypto_1 = require("../crypto/wasm/VaultCrypto");
17
+ const DEFAULT_OPTIONS = {
18
+ autoDownload: true,
19
+ storeReferenceOnDownloadFailure: true,
20
+ };
21
+ class VaultReferenceHandler {
22
+ constructor(logger, vaultRepository, storageService, eventEmitter, options) {
23
+ this.supportedMessages = [VaultReferenceMessage_1.VaultReferenceMessage];
24
+ this.logger = logger;
25
+ this.vaultRepository = vaultRepository;
26
+ this.storageService = storageService;
27
+ this.eventEmitter = eventEmitter;
28
+ this.options = { ...DEFAULT_OPTIONS, ...options };
29
+ }
30
+ async handle(messageContext) {
31
+ const { agentContext, connection, message } = messageContext;
32
+ this.logger.debug(`Received vault reference for ${message.vaultId} from storage ${message.storage.uri}`);
33
+ let ciphertext = null;
34
+ let downloadError = null;
35
+ // Try to download ciphertext if autoDownload is enabled
36
+ if (this.options.autoDownload) {
37
+ try {
38
+ ciphertext = await this.downloadCiphertext(message);
39
+ this.logger.debug(`Downloaded ${ciphertext.length} bytes for vault ${message.vaultId}`);
40
+ }
41
+ catch (error) {
42
+ downloadError = error instanceof Error ? error.message : 'Unknown download error';
43
+ this.logger.warn(`Failed to download vault ${message.vaultId}: ${downloadError}`);
44
+ if (!this.options.storeReferenceOnDownloadFailure) {
45
+ return new core_1.OutboundMessageContext(new VaultProblemReportMessage_1.VaultProblemReportMessage({
46
+ threadId: message.threadId,
47
+ code: 'download-failed',
48
+ description: `Failed to download vault ciphertext: ${downloadError}`,
49
+ }), { agentContext, connection });
50
+ }
51
+ }
52
+ }
53
+ // Check if vault already exists
54
+ const existing = await this.vaultRepository.findByVaultId(agentContext, message.vaultId);
55
+ if (existing) {
56
+ // Update existing vault
57
+ existing.header = message.header;
58
+ if (ciphertext) {
59
+ existing.ciphertext = (0, VaultCrypto_1.toBase64Url)(ciphertext);
60
+ }
61
+ existing.storageReference = {
62
+ type: message.storage.type,
63
+ uri: message.storage.uri,
64
+ checksum: message.storage.checksum,
65
+ size: message.storage.size,
66
+ contentType: message.storage.contentType,
67
+ };
68
+ existing.updatedAt = new Date();
69
+ // Track sender in metadata
70
+ existing.header.metadata = {
71
+ ...existing.header.metadata,
72
+ lastReceivedFrom: connection?.id,
73
+ lastReceivedAt: new Date().toISOString(),
74
+ storageType: message.storage.type,
75
+ };
76
+ await this.vaultRepository.update(agentContext, existing);
77
+ }
78
+ else {
79
+ // Create new vault record
80
+ const record = new VaultRecord_1.VaultRecord({
81
+ vaultId: message.vaultId,
82
+ docId: message.docId,
83
+ header: message.header,
84
+ // Store ciphertext if downloaded, otherwise empty placeholder
85
+ ciphertext: ciphertext ? (0, VaultCrypto_1.toBase64Url)(ciphertext) : '',
86
+ ownerDid: agentContext.contextCorrelationId,
87
+ storageReference: {
88
+ type: message.storage.type,
89
+ uri: message.storage.uri,
90
+ checksum: message.storage.checksum,
91
+ size: message.storage.size,
92
+ contentType: message.storage.contentType,
93
+ },
94
+ });
95
+ // Track sender in metadata
96
+ record.header.metadata = {
97
+ ...record.header.metadata,
98
+ receivedFrom: connection?.id,
99
+ receivedAt: new Date().toISOString(),
100
+ storageType: message.storage.type,
101
+ downloadPending: !ciphertext,
102
+ };
103
+ await this.vaultRepository.save(agentContext, record);
104
+ }
105
+ // Emit event
106
+ this.eventEmitter.emit(agentContext, {
107
+ type: VaultsEvents_1.VaultEventTypes.VaultShared,
108
+ payload: {
109
+ vaultId: message.vaultId,
110
+ docId: message.docId,
111
+ sharedBy: connection?.id,
112
+ storageType: message.storage.type,
113
+ storageUri: message.storage.uri,
114
+ size: message.storage.size,
115
+ downloaded: !!ciphertext,
116
+ },
117
+ });
118
+ // Return acknowledgment
119
+ const ackMessage = new VaultStoredAckMessage_1.VaultStoredAckMessage({
120
+ threadId: message.id,
121
+ vaultId: message.vaultId,
122
+ docId: message.docId,
123
+ storageLocation: ciphertext ? 'local' : 'pending',
124
+ storageMetadata: {
125
+ timestamp: new Date().toISOString(),
126
+ downloaded: !!ciphertext,
127
+ downloadError: downloadError ?? undefined,
128
+ originalStorage: message.storage.uri,
129
+ },
130
+ });
131
+ this.logger.info(`Stored vault reference ${message.vaultId} (downloaded: ${!!ciphertext}, storage: ${message.storage.uri})`);
132
+ return new core_1.OutboundMessageContext(ackMessage, { agentContext, connection });
133
+ }
134
+ /**
135
+ * Download ciphertext from storage
136
+ */
137
+ async downloadCiphertext(message) {
138
+ const { storage } = message;
139
+ // Try pre-signed download URL first (no credentials needed)
140
+ if (storage.downloadUrl) {
141
+ // Check if URL is still valid
142
+ if (storage.downloadUrlExpiresAt) {
143
+ const expiresAt = new Date(storage.downloadUrlExpiresAt);
144
+ if (expiresAt <= new Date()) {
145
+ this.logger.debug('Pre-signed download URL expired, falling back to direct storage access');
146
+ }
147
+ else {
148
+ return this.storageService.downloadFromUrl(storage.downloadUrl, storage.checksum);
149
+ }
150
+ }
151
+ else {
152
+ return this.storageService.downloadFromUrl(storage.downloadUrl, storage.checksum);
153
+ }
154
+ }
155
+ // Try direct storage access (requires credentials)
156
+ if (this.storageService.isConfigured()) {
157
+ return this.storageService.download({
158
+ type: storage.type,
159
+ uri: storage.uri,
160
+ checksum: storage.checksum,
161
+ size: storage.size,
162
+ contentType: storage.contentType,
163
+ });
164
+ }
165
+ throw new Error('No download method available: no pre-signed URL and storage not configured');
166
+ }
167
+ }
168
+ exports.VaultReferenceHandler = VaultReferenceHandler;
169
+ //# sourceMappingURL=VaultReferenceHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VaultReferenceHandler.js","sourceRoot":"","sources":["../../src/handlers/VaultReferenceHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Handler for vault-stored-ack messages
3
+ *
4
+ * Receives acknowledgment that a vault was stored by the peer.
5
+ */
6
+ import type { MessageHandler, MessageHandlerInboundMessage, Logger } from '@credo-ts/core';
7
+ import { EventEmitter } from '@credo-ts/core';
8
+ import { VaultStoredAckMessage } from '../messages';
9
+ export declare class VaultStoredAckHandler implements MessageHandler {
10
+ private logger;
11
+ private eventEmitter;
12
+ supportedMessages: (typeof VaultStoredAckMessage)[];
13
+ constructor(logger: Logger, eventEmitter: EventEmitter);
14
+ handle(messageContext: MessageHandlerInboundMessage<VaultStoredAckHandler>): Promise<void>;
15
+ }