@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.
- package/build/VaultsApi.d.ts +363 -0
- package/build/VaultsApi.js +450 -248
- package/build/VaultsApi.js.map +1 -0
- package/build/VaultsEvents.d.ts +227 -0
- package/build/VaultsEvents.js +8 -0
- package/build/VaultsEvents.js.map +1 -0
- package/build/VaultsModule.d.ts +64 -0
- package/build/VaultsModule.js +43 -18
- package/build/VaultsModule.js.map +1 -0
- package/build/crypto/wasm/VaultCrypto.d.ts +19 -0
- package/build/crypto/wasm/VaultCrypto.js +29 -42
- package/build/crypto/wasm/VaultCrypto.js.map +1 -0
- package/build/errors/BadSuiteError.d.ts +8 -0
- package/build/errors/BadSuiteError.js +8 -25
- package/build/errors/BadSuiteError.js.map +1 -0
- package/build/errors/DecryptAeadError.d.ts +8 -0
- package/build/errors/DecryptAeadError.js +8 -25
- package/build/errors/DecryptAeadError.js.map +1 -0
- package/build/errors/DecryptKemError.d.ts +8 -0
- package/build/errors/DecryptKemError.js +8 -25
- package/build/errors/DecryptKemError.js.map +1 -0
- package/build/errors/PolicyError.d.ts +8 -0
- package/build/errors/PolicyError.js +8 -25
- package/build/errors/PolicyError.js.map +1 -0
- package/build/errors/VaultError.d.ts +52 -0
- package/build/errors/VaultError.js +19 -30
- package/build/errors/VaultError.js.map +1 -0
- package/build/errors/index.d.ts +5 -0
- package/build/errors/index.js +1 -0
- package/build/errors/index.js.map +1 -0
- package/build/handlers/CreateVaultHandler.d.ts +18 -0
- package/build/handlers/CreateVaultHandler.js +75 -0
- package/build/handlers/CreateVaultHandler.js.map +1 -0
- package/build/handlers/DeleteVaultHandler.d.ts +17 -0
- package/build/handlers/DeleteVaultHandler.js +48 -0
- package/build/handlers/DeleteVaultHandler.js.map +1 -0
- package/build/handlers/DenyAccessHandler.d.ts +15 -0
- package/build/handlers/DenyAccessHandler.js +39 -0
- package/build/handlers/DenyAccessHandler.js.map +1 -0
- package/build/handlers/DenyShareHandler.d.ts +17 -0
- package/build/handlers/DenyShareHandler.js +49 -0
- package/build/handlers/DenyShareHandler.js.map +1 -0
- package/build/handlers/GrantAccessHandler.d.ts +17 -0
- package/build/handlers/GrantAccessHandler.js +59 -0
- package/build/handlers/GrantAccessHandler.js.map +1 -0
- package/build/handlers/ProvideShareHandler.d.ts +17 -0
- package/build/handlers/ProvideShareHandler.js +77 -0
- package/build/handlers/ProvideShareHandler.js.map +1 -0
- package/build/handlers/RequestAccessHandler.d.ts +18 -0
- package/build/handlers/RequestAccessHandler.js +60 -0
- package/build/handlers/RequestAccessHandler.js.map +1 -0
- package/build/handlers/RequestShareHandler.d.ts +19 -0
- package/build/handlers/RequestShareHandler.js +70 -0
- package/build/handlers/RequestShareHandler.js.map +1 -0
- package/build/handlers/RequestStorageHandler.d.ts +53 -0
- package/build/handlers/RequestStorageHandler.js +158 -0
- package/build/handlers/RequestStorageHandler.js.map +1 -0
- package/build/handlers/RetrieveVaultHandler.d.ts +18 -0
- package/build/handlers/RetrieveVaultHandler.js +65 -0
- package/build/handlers/RetrieveVaultHandler.js.map +1 -0
- package/build/handlers/StoreVaultHandler.d.ts +17 -0
- package/build/handlers/StoreVaultHandler.js +77 -0
- package/build/handlers/StoreVaultHandler.js.map +1 -0
- package/build/handlers/UpdateVaultHandler.d.ts +18 -0
- package/build/handlers/UpdateVaultHandler.js +77 -0
- package/build/handlers/UpdateVaultHandler.js.map +1 -0
- package/build/handlers/VaultCreatedAckHandler.d.ts +15 -0
- package/build/handlers/VaultCreatedAckHandler.js +39 -0
- package/build/handlers/VaultCreatedAckHandler.js.map +1 -0
- package/build/handlers/VaultDataHandler.d.ts +19 -0
- package/build/handlers/VaultDataHandler.js +68 -0
- package/build/handlers/VaultDataHandler.js.map +1 -0
- package/build/handlers/VaultProblemReportHandler.d.ts +17 -0
- package/build/handlers/VaultProblemReportHandler.js +40 -0
- package/build/handlers/VaultProblemReportHandler.js.map +1 -0
- package/build/handlers/VaultReferenceHandler.d.ts +33 -0
- package/build/handlers/VaultReferenceHandler.js +169 -0
- package/build/handlers/VaultReferenceHandler.js.map +1 -0
- package/build/handlers/VaultStoredAckHandler.d.ts +15 -0
- package/build/handlers/VaultStoredAckHandler.js +38 -0
- package/build/handlers/VaultStoredAckHandler.js.map +1 -0
- package/build/handlers/index.d.ts +17 -0
- package/build/handlers/index.js +44 -0
- package/build/handlers/index.js.map +1 -0
- package/build/index.d.ts +42 -0
- package/build/index.js +13 -1
- package/build/index.js.map +1 -0
- package/build/messages/CreateVaultMessage.d.ts +39 -0
- package/build/messages/CreateVaultMessage.js +65 -115
- package/build/messages/CreateVaultMessage.js.map +1 -0
- package/build/messages/DeleteVaultMessage.d.ts +22 -0
- package/build/messages/DeleteVaultMessage.js +51 -103
- package/build/messages/DeleteVaultMessage.js.map +1 -0
- package/build/messages/DenyAccessMessage.d.ts +22 -0
- package/build/messages/DenyAccessMessage.js +50 -103
- package/build/messages/DenyAccessMessage.js.map +1 -0
- package/build/messages/DenyShareMessage.d.ts +24 -0
- package/build/messages/DenyShareMessage.js +56 -109
- package/build/messages/DenyShareMessage.js.map +1 -0
- package/build/messages/GrantAccessMessage.d.ts +32 -0
- package/build/messages/GrantAccessMessage.js +63 -115
- package/build/messages/GrantAccessMessage.js.map +1 -0
- package/build/messages/ProvideShareMessage.d.ts +26 -0
- package/build/messages/ProvideShareMessage.js +62 -115
- package/build/messages/ProvideShareMessage.js.map +1 -0
- package/build/messages/ProvideStorageMessage.d.ts +90 -0
- package/build/messages/ProvideStorageMessage.js +193 -0
- package/build/messages/ProvideStorageMessage.js.map +1 -0
- package/build/messages/RequestAccessMessage.d.ts +30 -0
- package/build/messages/RequestAccessMessage.js +57 -109
- package/build/messages/RequestAccessMessage.js.map +1 -0
- package/build/messages/RequestShareMessage.d.ts +24 -0
- package/build/messages/RequestShareMessage.js +56 -109
- package/build/messages/RequestShareMessage.js.map +1 -0
- package/build/messages/RequestStorageMessage.d.ts +50 -0
- package/build/messages/RequestStorageMessage.js +98 -0
- package/build/messages/RequestStorageMessage.js.map +1 -0
- package/build/messages/RetrieveVaultMessage.d.ts +20 -0
- package/build/messages/RetrieveVaultMessage.js +44 -97
- package/build/messages/RetrieveVaultMessage.js.map +1 -0
- package/build/messages/StoreVaultMessage.d.ts +23 -0
- package/build/messages/StoreVaultMessage.js +51 -103
- package/build/messages/StoreVaultMessage.js.map +1 -0
- package/build/messages/UpdateVaultMessage.d.ts +25 -0
- package/build/messages/UpdateVaultMessage.js +58 -109
- package/build/messages/UpdateVaultMessage.js.map +1 -0
- package/build/messages/VaultCreatedAckMessage.d.ts +20 -0
- package/build/messages/VaultCreatedAckMessage.js +44 -97
- package/build/messages/VaultCreatedAckMessage.js.map +1 -0
- package/build/messages/VaultDataMessage.d.ts +34 -0
- package/build/messages/VaultDataMessage.js +59 -110
- package/build/messages/VaultDataMessage.js.map +1 -0
- package/build/messages/VaultProblemReportMessage.d.ts +35 -0
- package/build/messages/VaultProblemReportMessage.js +56 -102
- package/build/messages/VaultProblemReportMessage.js.map +1 -0
- package/build/messages/VaultReferenceMessage.d.ts +66 -0
- package/build/messages/VaultReferenceMessage.js +138 -0
- package/build/messages/VaultReferenceMessage.js.map +1 -0
- package/build/messages/VaultStoredAckMessage.d.ts +33 -0
- package/build/messages/VaultStoredAckMessage.js +51 -104
- package/build/messages/VaultStoredAckMessage.js.map +1 -0
- package/build/messages/index.d.ts +18 -0
- package/build/messages/index.js +6 -1
- package/build/messages/index.js.map +1 -0
- package/build/models/ThresholdSession.d.ts +37 -0
- package/build/models/ThresholdSession.js +1 -0
- package/build/models/ThresholdSession.js.map +1 -0
- package/build/models/VaultDocument.d.ts +22 -0
- package/build/models/VaultDocument.js +1 -0
- package/build/models/VaultDocument.js.map +1 -0
- package/build/models/VaultHeader.d.ts +92 -0
- package/build/models/VaultHeader.js +4 -6
- package/build/models/VaultHeader.js.map +1 -0
- package/build/models/VaultPolicy.d.ts +24 -0
- package/build/models/VaultPolicy.js +1 -0
- package/build/models/VaultPolicy.js.map +1 -0
- package/build/models/index.d.ts +4 -0
- package/build/models/index.js +1 -0
- package/build/models/index.js.map +1 -0
- package/build/repository/KemKeypairRecord.d.ts +37 -0
- package/build/repository/KemKeypairRecord.js +35 -0
- package/build/repository/KemKeypairRecord.js.map +1 -0
- package/build/repository/KemKeypairRepository.d.ts +18 -0
- package/build/repository/KemKeypairRepository.js +50 -0
- package/build/repository/KemKeypairRepository.js.map +1 -0
- package/build/repository/ThresholdSessionRecord.d.ts +93 -0
- package/build/repository/ThresholdSessionRecord.js +58 -92
- package/build/repository/ThresholdSessionRecord.js.map +1 -0
- package/build/repository/ThresholdSessionRepository.d.ts +35 -0
- package/build/repository/ThresholdSessionRepository.js +72 -208
- package/build/repository/ThresholdSessionRepository.js.map +1 -0
- package/build/repository/VaultRecord.d.ts +105 -0
- package/build/repository/VaultRecord.js +94 -115
- package/build/repository/VaultRecord.js.map +1 -0
- package/build/repository/VaultRepository.d.ts +35 -0
- package/build/repository/VaultRepository.js +66 -192
- package/build/repository/VaultRepository.js.map +1 -0
- package/build/repository/index.d.ts +9 -0
- package/build/repository/index.js +7 -1
- package/build/repository/index.js.map +1 -0
- package/build/services/HPKEService.d.ts +67 -0
- package/build/services/HPKEService.js +106 -0
- package/build/services/HPKEService.js.map +1 -0
- package/build/services/KemKeyExchangeService.d.ts +207 -0
- package/build/services/KemKeyExchangeService.js +323 -0
- package/build/services/KemKeyExchangeService.js.map +1 -0
- package/build/services/VaultEncryptionService.d.ts +120 -0
- package/build/services/VaultEncryptionService.js +469 -588
- package/build/services/VaultEncryptionService.js.map +1 -0
- package/build/services/VaultService.d.ts +127 -0
- package/build/services/VaultService.js +224 -376
- package/build/services/VaultService.js.map +1 -0
- package/build/services/VaultSigningService.d.ts +216 -0
- package/build/services/VaultSigningService.js +498 -0
- package/build/services/VaultSigningService.js.map +1 -0
- package/build/services/index.d.ts +9 -0
- package/build/services/index.js +10 -1
- package/build/services/index.js.map +1 -0
- package/build/storage/VaultStorageConfig.d.ts +97 -0
- package/build/storage/VaultStorageConfig.js +22 -0
- package/build/storage/VaultStorageConfig.js.map +1 -0
- package/build/storage/VaultStorageService.d.ts +118 -0
- package/build/storage/VaultStorageService.js +381 -0
- package/build/storage/VaultStorageService.js.map +1 -0
- package/build/storage/index.d.ts +2 -0
- package/build/storage/index.js +21 -0
- package/build/storage/index.js.map +1 -0
- 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":";AAAA;;;;GAIG;;;AAMH,0CAAiD;AAEjD,kDAAiD;AAGjD,MAAa,mBAAmB;IAM9B,YACE,MAAc,EACd,iBAA6C,EAC7C,YAA0B;QALrB,sBAAiB,GAAG,CAAC,8BAAmB,CAAC,CAAA;QAO9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,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,kBAAkB,OAAO,CAAC,eAAe,gBAAgB,OAAO,CAAC,SAAS,EAAE,EAAE;YAC7F,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,YAAY,EAAE,UAAU,EAAE,EAAE;SAC7B,CAAC,CAAA;QAEF,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;QAE7F,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;YACxD,OAAM;QACR,CAAC;QAED,mBAAmB;QACnB,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1F,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,SAAS,cAAc,CAAC,CAAA;YAC5D,OAAM;QACR,CAAC;QAED,mDAAmD;QACnD,OAAO,CAAC,QAAQ,CAAC;YACf,UAAU,EAAE,OAAO,CAAC,eAAe;YACnC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,4BAA4B;YACtD,UAAU,EAAE,UAAU,EAAE,EAAE,IAAI,SAAS;YACvC,UAAU,EAAE,IAAI,IAAI,EAAE;SACvB,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QAE1D,aAAa;QACb,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,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,eAAe,EAAE,OAAO,CAAC,eAAe;gBACxC,UAAU,EAAE,UAAU,EAAE,EAAE;gBAC1B,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;gBAClC,SAAS,EAAE,OAAO,CAAC,SAAS;aAC7B;SACF,CAAC,CAAA;QAEF,yBAAyB;QACzB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YAC/C,OAAO,CAAC,MAAM,GAAG,UAAU,CAAA;YAC3B,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;YAE1D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE;gBACnC,IAAI,EAAE,8BAAe,CAAC,YAAY;gBAClC,OAAO,EAAE;oBACP,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,SAAS,EAAE,OAAO,CAAC,SAAS;oBAC5B,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM;oBACtC,SAAS,EAAE,OAAO,CAAC,SAAS;iBAC7B;aACF,CAAC,CAAA;YAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAA;QACnH,CAAC;IACH,CAAC;CACF;AAnFD,kDAmFC"}
|
|
@@ -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
|
+
}
|