@cmdoss/memwal-sdk 0.7.0 → 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.
Files changed (192) hide show
  1. package/README.md +129 -0
  2. package/dist/client/ClientMemoryManager.js +2 -2
  3. package/dist/client/ClientMemoryManager.js.map +1 -1
  4. package/dist/client/PersonalDataWallet.d.ts.map +1 -1
  5. package/dist/client/SimplePDWClient.d.ts +28 -0
  6. package/dist/client/SimplePDWClient.d.ts.map +1 -1
  7. package/dist/client/SimplePDWClient.js +29 -6
  8. package/dist/client/SimplePDWClient.js.map +1 -1
  9. package/dist/client/namespaces/MemoryNamespace.d.ts +4 -0
  10. package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
  11. package/dist/client/namespaces/MemoryNamespace.js +168 -39
  12. package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
  13. package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts +12 -2
  14. package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
  15. package/dist/client/namespaces/consolidated/BlockchainNamespace.js +40 -2
  16. package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
  17. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +67 -2
  18. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
  19. package/dist/client/namespaces/consolidated/StorageNamespace.js +549 -16
  20. package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
  21. package/dist/config/ConfigurationHelper.js +61 -61
  22. package/dist/config/defaults.js +2 -2
  23. package/dist/config/defaults.js.map +1 -1
  24. package/dist/graph/GraphService.js +20 -20
  25. package/dist/infrastructure/seal/EncryptionService.d.ts +9 -5
  26. package/dist/infrastructure/seal/EncryptionService.d.ts.map +1 -1
  27. package/dist/infrastructure/seal/EncryptionService.js +37 -15
  28. package/dist/infrastructure/seal/EncryptionService.js.map +1 -1
  29. package/dist/infrastructure/seal/SealService.d.ts +13 -5
  30. package/dist/infrastructure/seal/SealService.d.ts.map +1 -1
  31. package/dist/infrastructure/seal/SealService.js +36 -34
  32. package/dist/infrastructure/seal/SealService.js.map +1 -1
  33. package/dist/langchain/createPDWRAG.js +30 -30
  34. package/dist/retrieval/MemoryDecryptionPipeline.d.ts.map +1 -1
  35. package/dist/retrieval/MemoryDecryptionPipeline.js +2 -1
  36. package/dist/retrieval/MemoryDecryptionPipeline.js.map +1 -1
  37. package/dist/services/CapabilityService.d.ts.map +1 -1
  38. package/dist/services/CapabilityService.js +30 -14
  39. package/dist/services/CapabilityService.js.map +1 -1
  40. package/dist/services/CrossContextPermissionService.d.ts.map +1 -1
  41. package/dist/services/CrossContextPermissionService.js +9 -7
  42. package/dist/services/CrossContextPermissionService.js.map +1 -1
  43. package/dist/services/EncryptionService.d.ts.map +1 -1
  44. package/dist/services/EncryptionService.js +6 -5
  45. package/dist/services/EncryptionService.js.map +1 -1
  46. package/dist/services/GeminiAIService.js +309 -309
  47. package/dist/services/StorageService.d.ts +1 -0
  48. package/dist/services/StorageService.d.ts.map +1 -1
  49. package/dist/services/StorageService.js +60 -10
  50. package/dist/services/StorageService.js.map +1 -1
  51. package/dist/services/TransactionService.d.ts +20 -0
  52. package/dist/services/TransactionService.d.ts.map +1 -1
  53. package/dist/services/TransactionService.js +43 -0
  54. package/dist/services/TransactionService.js.map +1 -1
  55. package/dist/services/ViewService.js +2 -2
  56. package/dist/services/ViewService.js.map +1 -1
  57. package/package.json +1 -1
  58. package/src/access/PermissionService.ts +635 -635
  59. package/src/access/index.ts +8 -8
  60. package/src/aggregation/AggregationService.ts +389 -389
  61. package/src/aggregation/index.ts +8 -8
  62. package/src/ai-sdk/PDWVectorStore.ts +715 -715
  63. package/src/ai-sdk/index.ts +65 -65
  64. package/src/ai-sdk/tools.ts +460 -460
  65. package/src/ai-sdk/types.ts +404 -404
  66. package/src/batch/BatchManager.ts +597 -597
  67. package/src/batch/BatchingService.ts +429 -429
  68. package/src/batch/MemoryProcessingCache.ts +492 -492
  69. package/src/batch/index.ts +30 -30
  70. package/src/browser.ts +200 -200
  71. package/src/client/ClientMemoryManager.ts +987 -987
  72. package/src/client/PersonalDataWallet.ts +345 -345
  73. package/src/client/SimplePDWClient.ts +1289 -1237
  74. package/src/client/factory.ts +154 -154
  75. package/src/client/namespaces/AnalyticsNamespace.ts +377 -377
  76. package/src/client/namespaces/BatchNamespace.ts +356 -356
  77. package/src/client/namespaces/CacheNamespace.ts +123 -123
  78. package/src/client/namespaces/CapabilityNamespace.ts +217 -217
  79. package/src/client/namespaces/ClassifyNamespace.ts +169 -169
  80. package/src/client/namespaces/ContextNamespace.ts +297 -297
  81. package/src/client/namespaces/EmbeddingsNamespace.ts +99 -99
  82. package/src/client/namespaces/EncryptionNamespace.ts +221 -221
  83. package/src/client/namespaces/GraphNamespace.ts +468 -468
  84. package/src/client/namespaces/IndexNamespace.ts +361 -361
  85. package/src/client/namespaces/MemoryNamespace.ts +1422 -1272
  86. package/src/client/namespaces/PermissionsNamespace.ts +254 -254
  87. package/src/client/namespaces/PipelineNamespace.ts +220 -220
  88. package/src/client/namespaces/SearchNamespace.ts +1049 -1049
  89. package/src/client/namespaces/StorageNamespace.ts +458 -458
  90. package/src/client/namespaces/TxNamespace.ts +260 -260
  91. package/src/client/namespaces/WalletNamespace.ts +243 -243
  92. package/src/client/namespaces/consolidated/AINamespace.ts +449 -449
  93. package/src/client/namespaces/consolidated/BlockchainNamespace.ts +607 -564
  94. package/src/client/namespaces/consolidated/SecurityNamespace.ts +648 -648
  95. package/src/client/namespaces/consolidated/StorageNamespace.ts +1141 -497
  96. package/src/client/namespaces/consolidated/index.ts +39 -39
  97. package/src/client/signers/DappKitSigner.ts +207 -207
  98. package/src/client/signers/KeypairSigner.ts +108 -108
  99. package/src/client/signers/UnifiedSigner.ts +110 -110
  100. package/src/client/signers/WalletAdapterSigner.ts +159 -159
  101. package/src/client/signers/index.ts +26 -26
  102. package/src/config/ConfigurationHelper.ts +412 -412
  103. package/src/config/defaults.ts +51 -51
  104. package/src/config/index.ts +8 -8
  105. package/src/config/validation.ts +70 -70
  106. package/src/core/index.ts +14 -14
  107. package/src/core/interfaces/IService.ts +307 -307
  108. package/src/core/interfaces/index.ts +8 -8
  109. package/src/core/types/capability.ts +297 -297
  110. package/src/core/types/index.ts +870 -870
  111. package/src/core/types/wallet.ts +270 -270
  112. package/src/core/types.ts +9 -9
  113. package/src/core/wallet.ts +222 -222
  114. package/src/embedding/index.ts +19 -19
  115. package/src/embedding/types.ts +357 -357
  116. package/src/errors/index.ts +602 -602
  117. package/src/errors/recovery.ts +461 -461
  118. package/src/errors/validation.ts +567 -567
  119. package/src/generated/pdw/capability.ts +319 -319
  120. package/src/generated/pdw/deps/sui/object.ts +12 -12
  121. package/src/generated/pdw/deps/sui/vec_map.ts +32 -32
  122. package/src/generated/pdw/memory.ts +1087 -1087
  123. package/src/generated/pdw/wallet.ts +123 -123
  124. package/src/generated/utils/index.ts +159 -159
  125. package/src/graph/GraphService.ts +887 -887
  126. package/src/graph/KnowledgeGraphManager.ts +728 -728
  127. package/src/graph/index.ts +25 -25
  128. package/src/index.ts +498 -498
  129. package/src/infrastructure/index.ts +22 -22
  130. package/src/infrastructure/seal/EncryptionService.ts +628 -603
  131. package/src/infrastructure/seal/SealService.ts +613 -615
  132. package/src/infrastructure/seal/index.ts +9 -9
  133. package/src/infrastructure/sui/BlockchainManager.ts +627 -627
  134. package/src/infrastructure/sui/SuiService.ts +888 -888
  135. package/src/infrastructure/sui/index.ts +9 -9
  136. package/src/infrastructure/walrus/StorageManager.ts +604 -604
  137. package/src/infrastructure/walrus/WalrusStorageService.ts +612 -612
  138. package/src/infrastructure/walrus/index.ts +9 -9
  139. package/src/langchain/PDWEmbeddings.ts +145 -145
  140. package/src/langchain/PDWVectorStore.ts +456 -456
  141. package/src/langchain/createPDWRAG.ts +303 -303
  142. package/src/langchain/index.ts +47 -47
  143. package/src/permissions/ConsentRepository.browser.ts +249 -249
  144. package/src/permissions/ConsentRepository.ts +364 -364
  145. package/src/permissions/index.ts +9 -9
  146. package/src/pipeline/MemoryPipeline.ts +862 -862
  147. package/src/pipeline/PipelineManager.ts +683 -683
  148. package/src/pipeline/index.ts +26 -26
  149. package/src/retrieval/AdvancedSearchService.ts +629 -629
  150. package/src/retrieval/MemoryAnalyticsService.ts +711 -711
  151. package/src/retrieval/MemoryDecryptionPipeline.ts +825 -824
  152. package/src/retrieval/MemoryRetrievalService.ts +904 -904
  153. package/src/retrieval/index.ts +42 -42
  154. package/src/services/BatchService.ts +352 -352
  155. package/src/services/CapabilityService.ts +464 -448
  156. package/src/services/ClassifierService.ts +465 -465
  157. package/src/services/CrossContextPermissionService.ts +486 -484
  158. package/src/services/EmbeddingService.ts +771 -771
  159. package/src/services/EncryptionService.ts +712 -711
  160. package/src/services/GeminiAIService.ts +753 -753
  161. package/src/services/IndexManager.ts +977 -977
  162. package/src/services/MemoryIndexService.ts +1003 -1003
  163. package/src/services/MemoryService.ts +369 -369
  164. package/src/services/QueryService.ts +890 -890
  165. package/src/services/StorageService.ts +1182 -1126
  166. package/src/services/TransactionService.ts +838 -790
  167. package/src/services/VectorService.ts +462 -462
  168. package/src/services/ViewService.ts +484 -484
  169. package/src/services/index.ts +25 -25
  170. package/src/services/storage/BlobAttributesManager.ts +333 -333
  171. package/src/services/storage/KnowledgeGraphManager.ts +425 -425
  172. package/src/services/storage/MemorySearchManager.ts +387 -387
  173. package/src/services/storage/QuiltBatchManager.ts +1130 -1130
  174. package/src/services/storage/WalrusMetadataManager.ts +268 -268
  175. package/src/services/storage/WalrusStorageManager.ts +287 -287
  176. package/src/services/storage/index.ts +57 -57
  177. package/src/types/index.ts +13 -13
  178. package/src/utils/LRUCache.ts +378 -378
  179. package/src/utils/index.ts +76 -76
  180. package/src/utils/memoryIndexOnChain.ts +507 -507
  181. package/src/utils/rebuildIndex.ts +290 -290
  182. package/src/utils/rebuildIndexNode.ts +771 -771
  183. package/src/vector/BrowserHnswIndexService.ts +758 -758
  184. package/src/vector/HnswWasmService.ts +731 -731
  185. package/src/vector/IHnswService.ts +233 -233
  186. package/src/vector/NodeHnswService.ts +833 -833
  187. package/src/vector/VectorManager.ts +478 -478
  188. package/src/vector/createHnswService.ts +135 -135
  189. package/src/vector/index.ts +56 -56
  190. package/src/wallet/ContextWalletService.ts +656 -656
  191. package/src/wallet/MainWalletService.ts +317 -317
  192. package/src/wallet/index.ts +17 -17
@@ -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 (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
+ /**
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
+ }