@cmdoss/memwal-sdk 0.8.0 → 1.0.0
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/README.md +522 -160
- package/dist/client/ClientMemoryManager.d.ts.map +1 -1
- package/dist/client/ClientMemoryManager.js +25 -8
- package/dist/client/ClientMemoryManager.js.map +1 -1
- package/dist/client/PersonalDataWallet.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.d.ts +62 -2
- package/dist/client/SimplePDWClient.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.js +96 -11
- package/dist/client/SimplePDWClient.js.map +1 -1
- package/dist/client/namespaces/IndexNamespace.d.ts +1 -1
- package/dist/client/namespaces/IndexNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/IndexNamespace.js +7 -4
- package/dist/client/namespaces/IndexNamespace.js.map +1 -1
- package/dist/client/namespaces/MemoryNamespace.d.ts +47 -0
- package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/MemoryNamespace.js +257 -27
- package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/AdvancedNamespace.d.ts +215 -0
- package/dist/client/namespaces/consolidated/AdvancedNamespace.d.ts.map +1 -0
- package/dist/client/namespaces/consolidated/AdvancedNamespace.js +214 -0
- package/dist/client/namespaces/consolidated/AdvancedNamespace.js.map +1 -0
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +3 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/index.d.ts +1 -0
- package/dist/client/namespaces/consolidated/index.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/index.js +1 -0
- package/dist/client/namespaces/consolidated/index.js.map +1 -1
- package/dist/config/ConfigurationHelper.js +61 -61
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +9 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/modelDefaults.d.ts +67 -0
- package/dist/config/modelDefaults.d.ts.map +1 -0
- package/dist/config/modelDefaults.js +91 -0
- package/dist/config/modelDefaults.js.map +1 -0
- package/dist/core/types/index.d.ts +4 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/graph/GraphService.d.ts.map +1 -1
- package/dist/graph/GraphService.js +22 -21
- package/dist/graph/GraphService.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/walrus/WalrusStorageService.d.ts +6 -0
- package/dist/infrastructure/walrus/WalrusStorageService.d.ts.map +1 -1
- package/dist/infrastructure/walrus/WalrusStorageService.js +23 -4
- package/dist/infrastructure/walrus/WalrusStorageService.js.map +1 -1
- package/dist/langchain/createPDWRAG.js +30 -30
- package/dist/pipeline/MemoryPipeline.d.ts.map +1 -1
- package/dist/pipeline/MemoryPipeline.js +2 -1
- package/dist/pipeline/MemoryPipeline.js.map +1 -1
- package/dist/services/EmbeddingService.d.ts +9 -0
- package/dist/services/EmbeddingService.d.ts.map +1 -1
- package/dist/services/EmbeddingService.js +31 -10
- package/dist/services/EmbeddingService.js.map +1 -1
- package/dist/services/GeminiAIService.d.ts.map +1 -1
- package/dist/services/GeminiAIService.js +311 -310
- package/dist/services/GeminiAIService.js.map +1 -1
- package/dist/services/MemoryIndexService.d.ts +2 -0
- package/dist/services/MemoryIndexService.d.ts.map +1 -1
- package/dist/services/MemoryIndexService.js +11 -4
- package/dist/services/MemoryIndexService.js.map +1 -1
- package/dist/services/StorageService.d.ts +4 -1
- package/dist/services/StorageService.d.ts.map +1 -1
- package/dist/services/StorageService.js.map +1 -1
- package/dist/services/VectorService.js +1 -1
- package/dist/services/VectorService.js.map +1 -1
- package/dist/services/storage/QuiltBatchManager.d.ts +7 -0
- package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
- package/dist/services/storage/QuiltBatchManager.js +24 -5
- package/dist/services/storage/QuiltBatchManager.js.map +1 -1
- package/dist/services/storage/WalrusStorageManager.d.ts +10 -1
- package/dist/services/storage/WalrusStorageManager.d.ts.map +1 -1
- package/dist/services/storage/WalrusStorageManager.js +53 -12
- package/dist/services/storage/WalrusStorageManager.js.map +1 -1
- package/dist/vector/BrowserHnswIndexService.js +3 -3
- package/dist/vector/BrowserHnswIndexService.js.map +1 -1
- package/dist/vector/HnswWasmService.js +1 -1
- package/dist/vector/HnswWasmService.js.map +1 -1
- package/dist/vector/NodeHnswService.js +5 -5
- package/dist/vector/NodeHnswService.js.map +1 -1
- package/dist/vector/createHnswService.d.ts +4 -0
- package/dist/vector/createHnswService.d.ts.map +1 -1
- package/dist/vector/createHnswService.js +15 -3
- package/dist/vector/createHnswService.js.map +1 -1
- package/package.json +1 -1
- package/src/access/PermissionService.ts +635 -635
- package/src/aggregation/AggregationService.ts +389 -389
- package/src/ai-sdk/PDWVectorStore.ts +715 -715
- package/src/ai-sdk/index.ts +65 -65
- package/src/ai-sdk/tools.ts +460 -460
- package/src/ai-sdk/types.ts +404 -404
- package/src/batch/BatchManager.ts +597 -597
- package/src/batch/BatchingService.ts +429 -429
- package/src/batch/MemoryProcessingCache.ts +492 -492
- package/src/batch/index.ts +30 -30
- package/src/browser.ts +200 -200
- package/src/client/ClientMemoryManager.ts +1004 -987
- package/src/client/PersonalDataWallet.ts +345 -345
- package/src/client/SimplePDWClient.ts +1387 -1289
- package/src/client/factory.ts +154 -154
- package/src/client/namespaces/AnalyticsNamespace.ts +377 -377
- package/src/client/namespaces/BatchNamespace.ts +356 -356
- package/src/client/namespaces/CacheNamespace.ts +123 -123
- package/src/client/namespaces/CapabilityNamespace.ts +217 -217
- package/src/client/namespaces/ClassifyNamespace.ts +169 -169
- package/src/client/namespaces/ContextNamespace.ts +297 -297
- package/src/client/namespaces/EncryptionNamespace.ts +221 -221
- package/src/client/namespaces/GraphNamespace.ts +468 -468
- package/src/client/namespaces/IndexNamespace.ts +364 -361
- package/src/client/namespaces/MemoryNamespace.ts +1704 -1422
- package/src/client/namespaces/PermissionsNamespace.ts +254 -254
- package/src/client/namespaces/PipelineNamespace.ts +220 -220
- package/src/client/namespaces/StorageNamespace.ts +458 -458
- package/src/client/namespaces/TxNamespace.ts +260 -260
- package/src/client/namespaces/WalletNamespace.ts +243 -243
- package/src/client/namespaces/consolidated/AdvancedNamespace.ts +264 -0
- package/src/client/namespaces/consolidated/BlockchainNamespace.ts +607 -607
- package/src/client/namespaces/consolidated/SecurityNamespace.ts +648 -648
- package/src/client/namespaces/consolidated/StorageNamespace.ts +1143 -1141
- package/src/client/namespaces/consolidated/index.ts +41 -39
- package/src/client/signers/KeypairSigner.ts +108 -108
- package/src/client/signers/UnifiedSigner.ts +110 -110
- package/src/client/signers/WalletAdapterSigner.ts +159 -159
- package/src/client/signers/index.ts +26 -26
- package/src/config/ConfigurationHelper.ts +412 -412
- package/src/config/defaults.ts +56 -51
- package/src/config/index.ts +16 -9
- package/src/config/modelDefaults.ts +103 -0
- package/src/config/validation.ts +70 -70
- package/src/core/index.ts +14 -14
- package/src/core/interfaces/IService.ts +307 -307
- package/src/core/interfaces/index.ts +8 -8
- package/src/core/types/capability.ts +297 -297
- package/src/core/types/index.ts +874 -870
- package/src/core/types/wallet.ts +270 -270
- package/src/core/types.ts +9 -9
- package/src/core/wallet.ts +222 -222
- package/src/embedding/index.ts +19 -19
- package/src/embedding/types.ts +357 -357
- package/src/errors/index.ts +602 -602
- package/src/errors/recovery.ts +461 -461
- package/src/errors/validation.ts +567 -567
- package/src/generated/pdw/capability.ts +319 -319
- package/src/graph/GraphService.ts +888 -887
- package/src/graph/KnowledgeGraphManager.ts +728 -728
- package/src/graph/index.ts +25 -25
- package/src/index.ts +498 -498
- package/src/infrastructure/index.ts +22 -22
- package/src/infrastructure/seal/EncryptionService.ts +628 -628
- package/src/infrastructure/seal/SealService.ts +613 -613
- package/src/infrastructure/seal/index.ts +9 -9
- package/src/infrastructure/sui/BlockchainManager.ts +627 -627
- package/src/infrastructure/sui/SuiService.ts +888 -888
- package/src/infrastructure/sui/index.ts +9 -9
- package/src/infrastructure/walrus/StorageManager.ts +604 -604
- package/src/infrastructure/walrus/WalrusStorageService.ts +637 -612
- package/src/infrastructure/walrus/index.ts +9 -9
- package/src/langchain/createPDWRAG.ts +303 -303
- package/src/langchain/index.ts +47 -47
- package/src/permissions/ConsentRepository.browser.ts +249 -249
- package/src/permissions/ConsentRepository.ts +364 -364
- package/src/pipeline/MemoryPipeline.ts +863 -862
- package/src/pipeline/PipelineManager.ts +683 -683
- package/src/pipeline/index.ts +26 -26
- package/src/retrieval/AdvancedSearchService.ts +629 -629
- package/src/retrieval/MemoryAnalyticsService.ts +711 -711
- package/src/retrieval/MemoryDecryptionPipeline.ts +825 -825
- package/src/retrieval/index.ts +42 -42
- package/src/services/BatchService.ts +352 -352
- package/src/services/CapabilityService.ts +464 -464
- package/src/services/ClassifierService.ts +465 -465
- package/src/services/CrossContextPermissionService.ts +486 -486
- package/src/services/EmbeddingService.ts +796 -771
- package/src/services/EncryptionService.ts +712 -712
- package/src/services/GeminiAIService.ts +754 -753
- package/src/services/MemoryIndexService.ts +1009 -1003
- package/src/services/MemoryService.ts +369 -369
- package/src/services/QueryService.ts +890 -890
- package/src/services/StorageService.ts +1185 -1182
- package/src/services/TransactionService.ts +838 -838
- package/src/services/VectorService.ts +462 -462
- package/src/services/ViewService.ts +484 -484
- package/src/services/index.ts +25 -25
- package/src/services/storage/BlobAttributesManager.ts +333 -333
- package/src/services/storage/KnowledgeGraphManager.ts +425 -425
- package/src/services/storage/MemorySearchManager.ts +387 -387
- package/src/services/storage/QuiltBatchManager.ts +1157 -1130
- package/src/services/storage/WalrusMetadataManager.ts +268 -268
- package/src/services/storage/WalrusStorageManager.ts +333 -287
- package/src/services/storage/index.ts +57 -57
- package/src/types/index.ts +13 -13
- package/src/utils/index.ts +76 -76
- package/src/utils/memoryIndexOnChain.ts +507 -507
- package/src/vector/BrowserHnswIndexService.ts +758 -758
- package/src/vector/HnswWasmService.ts +731 -731
- package/src/vector/IHnswService.ts +233 -233
- package/src/vector/NodeHnswService.ts +833 -833
- package/src/vector/createHnswService.ts +147 -135
- package/src/vector/index.ts +56 -56
- package/src/wallet/ContextWalletService.ts +656 -656
- package/src/wallet/MainWalletService.ts +317 -317
|
@@ -1,221 +1,221 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Encryption Namespace - SEAL-based Encryption Operations
|
|
3
|
-
*
|
|
4
|
-
* Pure delegation to EncryptionService for SEAL encryption.
|
|
5
|
-
* Provides identity-based encryption with decentralized key management.
|
|
6
|
-
*
|
|
7
|
-
* @module client/namespaces
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { ServiceContainer } from '../SimplePDWClient';
|
|
11
|
-
import type { SessionKey } from '@mysten/seal';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Encryption result
|
|
15
|
-
*/
|
|
16
|
-
export interface EncryptionResult {
|
|
17
|
-
encryptedData: Uint8Array;
|
|
18
|
-
backupKey: Uint8Array;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Decryption options
|
|
23
|
-
*/
|
|
24
|
-
export interface DecryptionOptions {
|
|
25
|
-
encryptedData: Uint8Array;
|
|
26
|
-
sessionKey?: SessionKey;
|
|
27
|
-
requestingWallet?: string;
|
|
28
|
-
/** MemoryCap object ID for capability-based access control */
|
|
29
|
-
memoryCapId?: string;
|
|
30
|
-
/** SEAL key ID bytes - required with memoryCapId */
|
|
31
|
-
keyId?: Uint8Array;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Encryption Namespace
|
|
36
|
-
*
|
|
37
|
-
* Handles SEAL-based encryption with identity-based access control
|
|
38
|
-
*/
|
|
39
|
-
export class EncryptionNamespace {
|
|
40
|
-
constructor(private services: ServiceContainer) {}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Encrypt data using SEAL
|
|
44
|
-
*
|
|
45
|
-
* Delegates to: EncryptionService.encrypt()
|
|
46
|
-
*
|
|
47
|
-
* NOTE: This uses userAddress as identity. For capability pattern,
|
|
48
|
-
* use encryptWithKeyId() instead.
|
|
49
|
-
*
|
|
50
|
-
* @param data - Data to encrypt
|
|
51
|
-
* @param threshold - Min key servers required (default: 2)
|
|
52
|
-
* @returns Encrypted data and backup key
|
|
53
|
-
*/
|
|
54
|
-
async encrypt(data: Uint8Array, threshold: number = 2): Promise<EncryptionResult> {
|
|
55
|
-
if (!this.services.encryption) {
|
|
56
|
-
throw new Error('Encryption service not configured. Initialize with encryption config.');
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const result = await this.services.encryption.encrypt(
|
|
60
|
-
data,
|
|
61
|
-
this.services.config.userAddress,
|
|
62
|
-
threshold
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
return {
|
|
66
|
-
encryptedData: result.encryptedObject,
|
|
67
|
-
backupKey: result.backupKey
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Encrypt data using SEAL with capability-based key ID
|
|
73
|
-
*
|
|
74
|
-
* Use this for capability pattern where keyId = keccak256(owner || nonce)
|
|
75
|
-
* The keyId MUST match what's passed to seal_approve during decryption.
|
|
76
|
-
*
|
|
77
|
-
* @param data - Data to encrypt
|
|
78
|
-
* @param keyId - Key ID bytes (compute with computeKeyId())
|
|
79
|
-
* @param threshold - Min key servers required (default: 2)
|
|
80
|
-
* @returns Encrypted data and backup key
|
|
81
|
-
*/
|
|
82
|
-
async encryptWithKeyId(data: Uint8Array, keyId: Uint8Array, threshold: number = 2): Promise<EncryptionResult> {
|
|
83
|
-
if (!this.services.encryption) {
|
|
84
|
-
throw new Error('Encryption service not configured. Initialize with encryption config.');
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Convert keyId to hex string for SEAL identity
|
|
88
|
-
const keyIdHex = '0x' + Array.from(keyId).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
89
|
-
console.log(`🔒 Encrypting with capability keyId: ${keyIdHex.substring(0, 20)}...`);
|
|
90
|
-
|
|
91
|
-
const result = await this.services.encryption.encrypt(
|
|
92
|
-
data,
|
|
93
|
-
keyIdHex,
|
|
94
|
-
threshold
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
return {
|
|
98
|
-
encryptedData: result.encryptedObject,
|
|
99
|
-
backupKey: result.backupKey
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Decrypt SEAL-encrypted data
|
|
105
|
-
*
|
|
106
|
-
* Delegates to: EncryptionService.decrypt()
|
|
107
|
-
*
|
|
108
|
-
* Supports two access control patterns:
|
|
109
|
-
* 1. Capability pattern (recommended): Pass memoryCapId and keyId
|
|
110
|
-
* 2. Legacy allowlist pattern: Only requestingWallet needed
|
|
111
|
-
*
|
|
112
|
-
* @param options - Decryption options
|
|
113
|
-
* @returns Decrypted data
|
|
114
|
-
*/
|
|
115
|
-
async decrypt(options: DecryptionOptions): Promise<Uint8Array> {
|
|
116
|
-
if (!this.services.encryption) {
|
|
117
|
-
throw new Error('Encryption service not configured.');
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return await this.services.encryption.decrypt({
|
|
121
|
-
encryptedContent: options.encryptedData,
|
|
122
|
-
userAddress: this.services.config.userAddress,
|
|
123
|
-
sessionKey: options.sessionKey,
|
|
124
|
-
requestingWallet: options.requestingWallet || this.services.config.userAddress,
|
|
125
|
-
memoryCapId: options.memoryCapId,
|
|
126
|
-
keyId: options.keyId
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Compute SEAL key_id from owner and nonce
|
|
132
|
-
*
|
|
133
|
-
* Use this to compute the key_id needed for capability-based decryption.
|
|
134
|
-
* The nonce comes from the MemoryCap object on-chain.
|
|
135
|
-
*
|
|
136
|
-
* @param ownerAddress - Owner's Sui address
|
|
137
|
-
* @param nonce - Nonce from MemoryCap object (32 bytes)
|
|
138
|
-
* @returns key_id bytes for SEAL approval
|
|
139
|
-
*/
|
|
140
|
-
computeKeyId(ownerAddress: string, nonce: Uint8Array): Uint8Array {
|
|
141
|
-
if (!this.services.encryption) {
|
|
142
|
-
throw new Error('Encryption service not configured.');
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
return this.services.encryption.computeKeyId(ownerAddress, nonce);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
/**
|
|
149
|
-
* Create session key for SEAL operations
|
|
150
|
-
*
|
|
151
|
-
* Delegates to: EncryptionService.createSessionKey()
|
|
152
|
-
*
|
|
153
|
-
* @param signer - Optional signer (keypair or signPersonalMessage function)
|
|
154
|
-
* @returns Session key
|
|
155
|
-
*/
|
|
156
|
-
async createSessionKey(signer?: {
|
|
157
|
-
signPersonalMessageFn?: (message: string) => Promise<{ signature: string }>;
|
|
158
|
-
keypair?: any;
|
|
159
|
-
}): Promise<SessionKey> {
|
|
160
|
-
if (!this.services.encryption) {
|
|
161
|
-
throw new Error('Encryption service not configured.');
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
return await this.services.encryption.createSessionKey(
|
|
165
|
-
this.services.config.userAddress,
|
|
166
|
-
signer
|
|
167
|
-
);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Get or create session key (cached)
|
|
172
|
-
*
|
|
173
|
-
* Delegates to: EncryptionService.getOrCreateSessionKey()
|
|
174
|
-
*
|
|
175
|
-
* @returns Cached or new session key
|
|
176
|
-
*/
|
|
177
|
-
async getSessionKey(): Promise<SessionKey> {
|
|
178
|
-
if (!this.services.encryption) {
|
|
179
|
-
throw new Error('Encryption service not configured.');
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return await this.services.encryption.getOrCreateSessionKey(
|
|
183
|
-
this.services.config.userAddress
|
|
184
|
-
);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* Export session key for persistence
|
|
189
|
-
*
|
|
190
|
-
* Delegates to: EncryptionService.exportSessionKey()
|
|
191
|
-
*
|
|
192
|
-
* @param sessionKey - Session key to export
|
|
193
|
-
* @returns Serialized session key
|
|
194
|
-
*/
|
|
195
|
-
async exportSessionKey(sessionKey: SessionKey): Promise<string> {
|
|
196
|
-
if (!this.services.encryption) {
|
|
197
|
-
throw new Error('Encryption service not configured.');
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return await this.services.encryption.exportSessionKey(sessionKey);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
/**
|
|
204
|
-
* Import previously exported session key
|
|
205
|
-
*
|
|
206
|
-
* Delegates to: EncryptionService.importSessionKey()
|
|
207
|
-
*
|
|
208
|
-
* @param exportedKey - Serialized session key
|
|
209
|
-
* @returns Session key instance
|
|
210
|
-
*/
|
|
211
|
-
async importSessionKey(exportedKey: string): Promise<SessionKey> {
|
|
212
|
-
if (!this.services.encryption) {
|
|
213
|
-
throw new Error('Encryption service not configured.');
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return await this.services.encryption.importSessionKey(
|
|
217
|
-
exportedKey,
|
|
218
|
-
this.services.config.userAddress
|
|
219
|
-
);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Encryption Namespace - SEAL-based Encryption Operations
|
|
3
|
+
*
|
|
4
|
+
* Pure delegation to EncryptionService for SEAL encryption.
|
|
5
|
+
* Provides identity-based encryption with decentralized key management.
|
|
6
|
+
*
|
|
7
|
+
* @module client/namespaces
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { ServiceContainer } from '../SimplePDWClient';
|
|
11
|
+
import type { SessionKey } from '@mysten/seal';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Encryption result
|
|
15
|
+
*/
|
|
16
|
+
export interface EncryptionResult {
|
|
17
|
+
encryptedData: Uint8Array;
|
|
18
|
+
backupKey: Uint8Array;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Decryption options
|
|
23
|
+
*/
|
|
24
|
+
export interface DecryptionOptions {
|
|
25
|
+
encryptedData: Uint8Array;
|
|
26
|
+
sessionKey?: SessionKey;
|
|
27
|
+
requestingWallet?: string;
|
|
28
|
+
/** MemoryCap object ID for capability-based access control */
|
|
29
|
+
memoryCapId?: string;
|
|
30
|
+
/** SEAL key ID bytes - required with memoryCapId */
|
|
31
|
+
keyId?: Uint8Array;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Encryption Namespace
|
|
36
|
+
*
|
|
37
|
+
* Handles SEAL-based encryption with identity-based access control
|
|
38
|
+
*/
|
|
39
|
+
export class EncryptionNamespace {
|
|
40
|
+
constructor(private services: ServiceContainer) {}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Encrypt data using SEAL
|
|
44
|
+
*
|
|
45
|
+
* Delegates to: EncryptionService.encrypt()
|
|
46
|
+
*
|
|
47
|
+
* NOTE: This uses userAddress as identity. For capability pattern,
|
|
48
|
+
* use encryptWithKeyId() instead.
|
|
49
|
+
*
|
|
50
|
+
* @param data - Data to encrypt
|
|
51
|
+
* @param threshold - Min key servers required (default: 2)
|
|
52
|
+
* @returns Encrypted data and backup key
|
|
53
|
+
*/
|
|
54
|
+
async encrypt(data: Uint8Array, threshold: number = 2): Promise<EncryptionResult> {
|
|
55
|
+
if (!this.services.encryption) {
|
|
56
|
+
throw new Error('Encryption service not configured. Initialize with encryption config.');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const result = await this.services.encryption.encrypt(
|
|
60
|
+
data,
|
|
61
|
+
this.services.config.userAddress,
|
|
62
|
+
threshold
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
encryptedData: result.encryptedObject,
|
|
67
|
+
backupKey: result.backupKey
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Encrypt data using SEAL with capability-based key ID
|
|
73
|
+
*
|
|
74
|
+
* Use this for capability pattern where keyId = keccak256(owner || nonce)
|
|
75
|
+
* The keyId MUST match what's passed to seal_approve during decryption.
|
|
76
|
+
*
|
|
77
|
+
* @param data - Data to encrypt
|
|
78
|
+
* @param keyId - Key ID bytes (compute with computeKeyId())
|
|
79
|
+
* @param threshold - Min key servers required (default: 2)
|
|
80
|
+
* @returns Encrypted data and backup key
|
|
81
|
+
*/
|
|
82
|
+
async encryptWithKeyId(data: Uint8Array, keyId: Uint8Array, threshold: number = 2): Promise<EncryptionResult> {
|
|
83
|
+
if (!this.services.encryption) {
|
|
84
|
+
throw new Error('Encryption service not configured. Initialize with encryption config.');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Convert keyId to hex string for SEAL identity
|
|
88
|
+
const keyIdHex = '0x' + Array.from(keyId).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
89
|
+
console.log(`🔒 Encrypting with capability keyId: ${keyIdHex.substring(0, 20)}...`);
|
|
90
|
+
|
|
91
|
+
const result = await this.services.encryption.encrypt(
|
|
92
|
+
data,
|
|
93
|
+
keyIdHex,
|
|
94
|
+
threshold
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
return {
|
|
98
|
+
encryptedData: result.encryptedObject,
|
|
99
|
+
backupKey: result.backupKey
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Decrypt SEAL-encrypted data
|
|
105
|
+
*
|
|
106
|
+
* Delegates to: EncryptionService.decrypt()
|
|
107
|
+
*
|
|
108
|
+
* Supports two access control patterns:
|
|
109
|
+
* 1. Capability pattern (recommended): Pass memoryCapId and keyId
|
|
110
|
+
* 2. Legacy allowlist pattern: Only requestingWallet needed
|
|
111
|
+
*
|
|
112
|
+
* @param options - Decryption options
|
|
113
|
+
* @returns Decrypted data
|
|
114
|
+
*/
|
|
115
|
+
async decrypt(options: DecryptionOptions): Promise<Uint8Array> {
|
|
116
|
+
if (!this.services.encryption) {
|
|
117
|
+
throw new Error('Encryption service not configured.');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return await this.services.encryption.decrypt({
|
|
121
|
+
encryptedContent: options.encryptedData,
|
|
122
|
+
userAddress: this.services.config.userAddress,
|
|
123
|
+
sessionKey: options.sessionKey,
|
|
124
|
+
requestingWallet: options.requestingWallet || this.services.config.userAddress,
|
|
125
|
+
memoryCapId: options.memoryCapId,
|
|
126
|
+
keyId: options.keyId
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Compute SEAL key_id from owner and nonce
|
|
132
|
+
*
|
|
133
|
+
* Use this to compute the key_id needed for capability-based decryption.
|
|
134
|
+
* The nonce comes from the MemoryCap object on-chain.
|
|
135
|
+
*
|
|
136
|
+
* @param ownerAddress - Owner's Sui address
|
|
137
|
+
* @param nonce - Nonce from MemoryCap object (32 bytes)
|
|
138
|
+
* @returns key_id bytes for SEAL approval
|
|
139
|
+
*/
|
|
140
|
+
computeKeyId(ownerAddress: string, nonce: Uint8Array): Uint8Array {
|
|
141
|
+
if (!this.services.encryption) {
|
|
142
|
+
throw new Error('Encryption service not configured.');
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return this.services.encryption.computeKeyId(ownerAddress, nonce);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Create session key for SEAL operations
|
|
150
|
+
*
|
|
151
|
+
* Delegates to: EncryptionService.createSessionKey()
|
|
152
|
+
*
|
|
153
|
+
* @param signer - Optional signer (keypair or signPersonalMessage function)
|
|
154
|
+
* @returns Session key
|
|
155
|
+
*/
|
|
156
|
+
async createSessionKey(signer?: {
|
|
157
|
+
signPersonalMessageFn?: (message: string) => Promise<{ signature: string }>;
|
|
158
|
+
keypair?: any;
|
|
159
|
+
}): Promise<SessionKey> {
|
|
160
|
+
if (!this.services.encryption) {
|
|
161
|
+
throw new Error('Encryption service not configured.');
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return await this.services.encryption.createSessionKey(
|
|
165
|
+
this.services.config.userAddress,
|
|
166
|
+
signer
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Get or create session key (cached)
|
|
172
|
+
*
|
|
173
|
+
* Delegates to: EncryptionService.getOrCreateSessionKey()
|
|
174
|
+
*
|
|
175
|
+
* @returns Cached or new session key
|
|
176
|
+
*/
|
|
177
|
+
async getSessionKey(): Promise<SessionKey> {
|
|
178
|
+
if (!this.services.encryption) {
|
|
179
|
+
throw new Error('Encryption service not configured.');
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return await this.services.encryption.getOrCreateSessionKey(
|
|
183
|
+
this.services.config.userAddress
|
|
184
|
+
);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Export session key for persistence
|
|
189
|
+
*
|
|
190
|
+
* Delegates to: EncryptionService.exportSessionKey()
|
|
191
|
+
*
|
|
192
|
+
* @param sessionKey - Session key to export
|
|
193
|
+
* @returns Serialized session key
|
|
194
|
+
*/
|
|
195
|
+
async exportSessionKey(sessionKey: SessionKey): Promise<string> {
|
|
196
|
+
if (!this.services.encryption) {
|
|
197
|
+
throw new Error('Encryption service not configured.');
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return await this.services.encryption.exportSessionKey(sessionKey);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Import previously exported session key
|
|
205
|
+
*
|
|
206
|
+
* Delegates to: EncryptionService.importSessionKey()
|
|
207
|
+
*
|
|
208
|
+
* @param exportedKey - Serialized session key
|
|
209
|
+
* @returns Session key instance
|
|
210
|
+
*/
|
|
211
|
+
async importSessionKey(exportedKey: string): Promise<SessionKey> {
|
|
212
|
+
if (!this.services.encryption) {
|
|
213
|
+
throw new Error('Encryption service not configured.');
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
return await this.services.encryption.importSessionKey(
|
|
217
|
+
exportedKey,
|
|
218
|
+
this.services.config.userAddress
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
}
|