@cmdoss/memwal-sdk 0.6.2 → 0.8.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/ARCHITECTURE.md +547 -547
- package/BENCHMARKS.md +238 -238
- package/README.md +310 -181
- package/dist/ai-sdk/tools.d.ts +2 -2
- package/dist/ai-sdk/tools.js +2 -2
- package/dist/client/ClientMemoryManager.js +2 -2
- package/dist/client/ClientMemoryManager.js.map +1 -1
- package/dist/client/PersonalDataWallet.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.d.ts +29 -1
- package/dist/client/SimplePDWClient.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.js +45 -13
- package/dist/client/SimplePDWClient.js.map +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.d.ts +1 -1
- package/dist/client/namespaces/EmbeddingsNamespace.js +1 -1
- package/dist/client/namespaces/MemoryNamespace.d.ts +31 -0
- package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/MemoryNamespace.js +272 -39
- package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/AINamespace.d.ts +2 -2
- package/dist/client/namespaces/consolidated/AINamespace.js +2 -2
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts +12 -2
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js +62 -4
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +67 -2
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.js +549 -16
- package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
- package/dist/config/ConfigurationHelper.js +61 -61
- package/dist/config/defaults.js +2 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/graph/GraphService.js +21 -21
- package/dist/graph/GraphService.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/seal/EncryptionService.d.ts +9 -5
- package/dist/infrastructure/seal/EncryptionService.d.ts.map +1 -1
- package/dist/infrastructure/seal/EncryptionService.js +37 -15
- package/dist/infrastructure/seal/EncryptionService.js.map +1 -1
- package/dist/infrastructure/seal/SealService.d.ts +13 -5
- package/dist/infrastructure/seal/SealService.d.ts.map +1 -1
- package/dist/infrastructure/seal/SealService.js +36 -34
- package/dist/infrastructure/seal/SealService.js.map +1 -1
- package/dist/langchain/createPDWRAG.js +30 -30
- package/dist/retrieval/MemoryDecryptionPipeline.d.ts.map +1 -1
- package/dist/retrieval/MemoryDecryptionPipeline.js +2 -1
- package/dist/retrieval/MemoryDecryptionPipeline.js.map +1 -1
- package/dist/retrieval/MemoryRetrievalService.d.ts +31 -0
- package/dist/retrieval/MemoryRetrievalService.d.ts.map +1 -1
- package/dist/retrieval/MemoryRetrievalService.js +44 -4
- package/dist/retrieval/MemoryRetrievalService.js.map +1 -1
- package/dist/services/CapabilityService.d.ts.map +1 -1
- package/dist/services/CapabilityService.js +30 -14
- package/dist/services/CapabilityService.js.map +1 -1
- package/dist/services/CrossContextPermissionService.d.ts.map +1 -1
- package/dist/services/CrossContextPermissionService.js +9 -7
- package/dist/services/CrossContextPermissionService.js.map +1 -1
- package/dist/services/EmbeddingService.d.ts +28 -1
- package/dist/services/EmbeddingService.d.ts.map +1 -1
- package/dist/services/EmbeddingService.js +54 -0
- package/dist/services/EmbeddingService.js.map +1 -1
- package/dist/services/EncryptionService.d.ts.map +1 -1
- package/dist/services/EncryptionService.js +6 -5
- package/dist/services/EncryptionService.js.map +1 -1
- package/dist/services/GeminiAIService.js +309 -309
- package/dist/services/IndexManager.d.ts +5 -1
- package/dist/services/IndexManager.d.ts.map +1 -1
- package/dist/services/IndexManager.js +17 -40
- package/dist/services/IndexManager.js.map +1 -1
- package/dist/services/QueryService.js +1 -1
- package/dist/services/QueryService.js.map +1 -1
- package/dist/services/StorageService.d.ts +11 -0
- package/dist/services/StorageService.d.ts.map +1 -1
- package/dist/services/StorageService.js +73 -10
- package/dist/services/StorageService.js.map +1 -1
- package/dist/services/TransactionService.d.ts +20 -0
- package/dist/services/TransactionService.d.ts.map +1 -1
- package/dist/services/TransactionService.js +43 -0
- package/dist/services/TransactionService.js.map +1 -1
- package/dist/services/ViewService.js +2 -2
- package/dist/services/ViewService.js.map +1 -1
- package/dist/services/storage/QuiltBatchManager.d.ts +101 -1
- package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
- package/dist/services/storage/QuiltBatchManager.js +410 -20
- package/dist/services/storage/QuiltBatchManager.js.map +1 -1
- package/dist/services/storage/index.d.ts +1 -1
- package/dist/services/storage/index.d.ts.map +1 -1
- package/dist/services/storage/index.js.map +1 -1
- package/dist/utils/LRUCache.d.ts +106 -0
- package/dist/utils/LRUCache.d.ts.map +1 -0
- package/dist/utils/LRUCache.js +281 -0
- package/dist/utils/LRUCache.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/memoryIndexOnChain.d.ts +212 -0
- package/dist/utils/memoryIndexOnChain.d.ts.map +1 -0
- package/dist/utils/memoryIndexOnChain.js +312 -0
- package/dist/utils/memoryIndexOnChain.js.map +1 -0
- package/dist/utils/rebuildIndexNode.d.ts +29 -0
- package/dist/utils/rebuildIndexNode.d.ts.map +1 -1
- package/dist/utils/rebuildIndexNode.js +366 -98
- package/dist/utils/rebuildIndexNode.js.map +1 -1
- package/dist/vector/HnswWasmService.d.ts +20 -5
- package/dist/vector/HnswWasmService.d.ts.map +1 -1
- package/dist/vector/HnswWasmService.js +73 -40
- package/dist/vector/HnswWasmService.js.map +1 -1
- package/dist/vector/IHnswService.d.ts +10 -1
- package/dist/vector/IHnswService.d.ts.map +1 -1
- package/dist/vector/IHnswService.js.map +1 -1
- package/dist/vector/NodeHnswService.d.ts +16 -0
- package/dist/vector/NodeHnswService.d.ts.map +1 -1
- package/dist/vector/NodeHnswService.js +84 -5
- package/dist/vector/NodeHnswService.js.map +1 -1
- package/dist/vector/createHnswService.d.ts +1 -1
- package/dist/vector/createHnswService.js +1 -1
- package/dist/vector/index.d.ts +1 -1
- package/dist/vector/index.js +1 -1
- package/package.json +157 -157
- 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 +987 -987
- package/src/client/PersonalDataWallet.ts +345 -345
- package/src/client/SimplePDWClient.ts +1289 -1222
- 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/EmbeddingsNamespace.ts +99 -99
- package/src/client/namespaces/EncryptionNamespace.ts +221 -221
- package/src/client/namespaces/GraphNamespace.ts +468 -468
- package/src/client/namespaces/IndexNamespace.ts +361 -361
- package/src/client/namespaces/MemoryNamespace.ts +1422 -1135
- package/src/client/namespaces/PermissionsNamespace.ts +254 -254
- package/src/client/namespaces/PipelineNamespace.ts +220 -220
- package/src/client/namespaces/SearchNamespace.ts +1049 -1049
- 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/AINamespace.ts +449 -449
- package/src/client/namespaces/consolidated/BlockchainNamespace.ts +607 -546
- package/src/client/namespaces/consolidated/SecurityNamespace.ts +648 -648
- package/src/client/namespaces/consolidated/StorageNamespace.ts +1141 -497
- package/src/client/namespaces/consolidated/index.ts +39 -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 +51 -51
- package/src/config/index.ts +8 -8
- 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 +870 -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 +887 -887
- package/src/graph/KnowledgeGraphManager.ts +728 -728
- package/src/graph/index.ts +25 -25
- package/src/index.ts +498 -474
- package/src/infrastructure/index.ts +22 -22
- package/src/infrastructure/seal/EncryptionService.ts +628 -603
- package/src/infrastructure/seal/SealService.ts +613 -615
- 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 +612 -612
- package/src/infrastructure/walrus/index.ts +9 -9
- package/src/langchain/PDWEmbeddings.ts +145 -145
- package/src/langchain/PDWVectorStore.ts +456 -456
- 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 +862 -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 -824
- package/src/retrieval/MemoryRetrievalService.ts +904 -830
- package/src/retrieval/index.ts +42 -42
- package/src/services/BatchService.ts +352 -352
- package/src/services/CapabilityService.ts +464 -448
- package/src/services/ClassifierService.ts +465 -465
- package/src/services/CrossContextPermissionService.ts +486 -484
- package/src/services/EmbeddingService.ts +771 -706
- package/src/services/EncryptionService.ts +712 -711
- package/src/services/GeminiAIService.ts +753 -753
- package/src/services/IndexManager.ts +977 -1004
- package/src/services/MemoryIndexService.ts +1003 -1003
- package/src/services/MemoryService.ts +369 -369
- package/src/services/QueryService.ts +890 -890
- package/src/services/StorageService.ts +1182 -1111
- package/src/services/TransactionService.ts +838 -790
- 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 +1130 -660
- package/src/services/storage/WalrusMetadataManager.ts +268 -268
- package/src/services/storage/WalrusStorageManager.ts +287 -287
- package/src/services/storage/index.ts +57 -52
- package/src/types/index.ts +13 -13
- package/src/utils/LRUCache.ts +378 -0
- package/src/utils/index.ts +76 -68
- package/src/utils/memoryIndexOnChain.ts +507 -0
- package/src/utils/rebuildIndex.ts +290 -290
- package/src/utils/rebuildIndexNode.ts +771 -424
- package/src/vector/BrowserHnswIndexService.ts +758 -758
- package/src/vector/HnswWasmService.ts +731 -679
- package/src/vector/IHnswService.ts +233 -224
- package/src/vector/NodeHnswService.ts +833 -735
- package/src/vector/VectorManager.ts +478 -478
- package/src/vector/createHnswService.ts +135 -135
- package/src/vector/index.ts +56 -56
- package/src/wallet/ContextWalletService.ts +656 -656
- package/src/wallet/MainWalletService.ts +317 -317
|
@@ -1,99 +1,99 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Embeddings Namespace - Direct Embedding Operations
|
|
3
|
-
*
|
|
4
|
-
* Pure delegation to EmbeddingService for direct embedding access.
|
|
5
|
-
* Useful for custom RAG pipelines and advanced AI integrations.
|
|
6
|
-
*
|
|
7
|
-
* @module client/namespaces
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { ServiceContainer } from '../SimplePDWClient';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Embeddings Namespace
|
|
14
|
-
*
|
|
15
|
-
* Handles direct embedding generation and operations
|
|
16
|
-
*/
|
|
17
|
-
export class EmbeddingsNamespace {
|
|
18
|
-
constructor(private services: ServiceContainer) {}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Generate embedding for single text
|
|
22
|
-
*
|
|
23
|
-
* Delegates to: EmbeddingService.embedText()
|
|
24
|
-
*
|
|
25
|
-
* @param text - Text to embed
|
|
26
|
-
* @param options - Embedding options
|
|
27
|
-
* @returns Embedding vector (
|
|
28
|
-
*/
|
|
29
|
-
async generate(text: string, options?: { type?: 'query' | 'document' }): Promise<number[]> {
|
|
30
|
-
if (!this.services.embedding) {
|
|
31
|
-
throw new Error('Embedding service not configured. Please provide geminiApiKey.');
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const result = await this.services.embedding.embedText({ text });
|
|
35
|
-
return result.vector;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Generate embeddings for multiple texts
|
|
40
|
-
*
|
|
41
|
-
* Delegates to: EmbeddingService.embedBatch()
|
|
42
|
-
*
|
|
43
|
-
* @param texts - Array of texts
|
|
44
|
-
* @returns Array of embedding vectors
|
|
45
|
-
*/
|
|
46
|
-
async batch(texts: string[]): Promise<number[][]> {
|
|
47
|
-
if (!this.services.embedding) {
|
|
48
|
-
throw new Error('Embedding service not configured.');
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const result = await this.services.embedding.embedBatch(texts);
|
|
52
|
-
return result.vectors;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Calculate cosine similarity between two vectors
|
|
57
|
-
*
|
|
58
|
-
* Delegates to: EmbeddingService.calculateCosineSimilarity()
|
|
59
|
-
*
|
|
60
|
-
* @param vector1 - First vector
|
|
61
|
-
* @param vector2 - Second vector
|
|
62
|
-
* @returns Similarity score (0-1, higher is more similar)
|
|
63
|
-
*/
|
|
64
|
-
similarity(vector1: number[], vector2: number[]): number {
|
|
65
|
-
if (!this.services.embedding) {
|
|
66
|
-
throw new Error('Embedding service not configured.');
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
return this.services.embedding.calculateCosineSimilarity(vector1, vector2);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Find most similar vectors from candidates
|
|
74
|
-
*
|
|
75
|
-
* Delegates to: EmbeddingService.findMostSimilar()
|
|
76
|
-
*
|
|
77
|
-
* @param queryVector - Query vector
|
|
78
|
-
* @param candidateVectors - Candidate vectors to compare
|
|
79
|
-
* @param k - Number of results (default: 5)
|
|
80
|
-
* @returns Top k similar vectors with scores
|
|
81
|
-
*/
|
|
82
|
-
findSimilar(
|
|
83
|
-
queryVector: number[],
|
|
84
|
-
candidateVectors: number[][],
|
|
85
|
-
k: number = 5
|
|
86
|
-
): Array<{ index: number; score: number }> {
|
|
87
|
-
if (!this.services.embedding) {
|
|
88
|
-
throw new Error('Embedding service not configured.');
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const results = this.services.embedding.findMostSimilar(queryVector, candidateVectors, k);
|
|
92
|
-
|
|
93
|
-
// Adapt result format (similarity → score)
|
|
94
|
-
return results.map(r => ({
|
|
95
|
-
index: r.index,
|
|
96
|
-
score: r.similarity
|
|
97
|
-
}));
|
|
98
|
-
}
|
|
99
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Embeddings Namespace - Direct Embedding Operations
|
|
3
|
+
*
|
|
4
|
+
* Pure delegation to EmbeddingService for direct embedding access.
|
|
5
|
+
* Useful for custom RAG pipelines and advanced AI integrations.
|
|
6
|
+
*
|
|
7
|
+
* @module client/namespaces
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { ServiceContainer } from '../SimplePDWClient';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Embeddings Namespace
|
|
14
|
+
*
|
|
15
|
+
* Handles direct embedding generation and operations
|
|
16
|
+
*/
|
|
17
|
+
export class EmbeddingsNamespace {
|
|
18
|
+
constructor(private services: ServiceContainer) {}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Generate embedding for single text
|
|
22
|
+
*
|
|
23
|
+
* Delegates to: EmbeddingService.embedText()
|
|
24
|
+
*
|
|
25
|
+
* @param text - Text to embed
|
|
26
|
+
* @param options - Embedding options
|
|
27
|
+
* @returns Embedding vector (3072 dimensions for Gemini)
|
|
28
|
+
*/
|
|
29
|
+
async generate(text: string, options?: { type?: 'query' | 'document' }): Promise<number[]> {
|
|
30
|
+
if (!this.services.embedding) {
|
|
31
|
+
throw new Error('Embedding service not configured. Please provide geminiApiKey.');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const result = await this.services.embedding.embedText({ text });
|
|
35
|
+
return result.vector;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Generate embeddings for multiple texts
|
|
40
|
+
*
|
|
41
|
+
* Delegates to: EmbeddingService.embedBatch()
|
|
42
|
+
*
|
|
43
|
+
* @param texts - Array of texts
|
|
44
|
+
* @returns Array of embedding vectors
|
|
45
|
+
*/
|
|
46
|
+
async batch(texts: string[]): Promise<number[][]> {
|
|
47
|
+
if (!this.services.embedding) {
|
|
48
|
+
throw new Error('Embedding service not configured.');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const result = await this.services.embedding.embedBatch(texts);
|
|
52
|
+
return result.vectors;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Calculate cosine similarity between two vectors
|
|
57
|
+
*
|
|
58
|
+
* Delegates to: EmbeddingService.calculateCosineSimilarity()
|
|
59
|
+
*
|
|
60
|
+
* @param vector1 - First vector
|
|
61
|
+
* @param vector2 - Second vector
|
|
62
|
+
* @returns Similarity score (0-1, higher is more similar)
|
|
63
|
+
*/
|
|
64
|
+
similarity(vector1: number[], vector2: number[]): number {
|
|
65
|
+
if (!this.services.embedding) {
|
|
66
|
+
throw new Error('Embedding service not configured.');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return this.services.embedding.calculateCosineSimilarity(vector1, vector2);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Find most similar vectors from candidates
|
|
74
|
+
*
|
|
75
|
+
* Delegates to: EmbeddingService.findMostSimilar()
|
|
76
|
+
*
|
|
77
|
+
* @param queryVector - Query vector
|
|
78
|
+
* @param candidateVectors - Candidate vectors to compare
|
|
79
|
+
* @param k - Number of results (default: 5)
|
|
80
|
+
* @returns Top k similar vectors with scores
|
|
81
|
+
*/
|
|
82
|
+
findSimilar(
|
|
83
|
+
queryVector: number[],
|
|
84
|
+
candidateVectors: number[][],
|
|
85
|
+
k: number = 5
|
|
86
|
+
): Array<{ index: number; score: number }> {
|
|
87
|
+
if (!this.services.embedding) {
|
|
88
|
+
throw new Error('Embedding service not configured.');
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const results = this.services.embedding.findMostSimilar(queryVector, candidateVectors, k);
|
|
92
|
+
|
|
93
|
+
// Adapt result format (similarity → score)
|
|
94
|
+
return results.map(r => ({
|
|
95
|
+
index: r.index,
|
|
96
|
+
score: r.similarity
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
@@ -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
|
+
}
|