@cmdoss/memwal-sdk 0.9.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.
Files changed (174) hide show
  1. package/README.md +157 -52
  2. package/dist/client/ClientMemoryManager.d.ts.map +1 -1
  3. package/dist/client/ClientMemoryManager.js +25 -8
  4. package/dist/client/ClientMemoryManager.js.map +1 -1
  5. package/dist/client/PersonalDataWallet.d.ts.map +1 -1
  6. package/dist/client/SimplePDWClient.d.ts +2 -1
  7. package/dist/client/SimplePDWClient.d.ts.map +1 -1
  8. package/dist/client/SimplePDWClient.js +23 -6
  9. package/dist/client/SimplePDWClient.js.map +1 -1
  10. package/dist/client/namespaces/MemoryNamespace.d.ts +6 -0
  11. package/dist/client/namespaces/MemoryNamespace.d.ts.map +1 -1
  12. package/dist/client/namespaces/MemoryNamespace.js +131 -18
  13. package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
  14. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +3 -1
  15. package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
  16. package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
  17. package/dist/config/ConfigurationHelper.js +61 -61
  18. package/dist/config/index.d.ts +1 -0
  19. package/dist/config/index.d.ts.map +1 -1
  20. package/dist/config/index.js +2 -0
  21. package/dist/config/index.js.map +1 -1
  22. package/dist/config/modelDefaults.d.ts +67 -0
  23. package/dist/config/modelDefaults.d.ts.map +1 -0
  24. package/dist/config/modelDefaults.js +91 -0
  25. package/dist/config/modelDefaults.js.map +1 -0
  26. package/dist/graph/GraphService.d.ts.map +1 -1
  27. package/dist/graph/GraphService.js +22 -21
  28. package/dist/graph/GraphService.js.map +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/langchain/createPDWRAG.js +30 -30
  34. package/dist/pipeline/MemoryPipeline.d.ts.map +1 -1
  35. package/dist/pipeline/MemoryPipeline.js +2 -1
  36. package/dist/pipeline/MemoryPipeline.js.map +1 -1
  37. package/dist/services/GeminiAIService.d.ts.map +1 -1
  38. package/dist/services/GeminiAIService.js +311 -310
  39. package/dist/services/GeminiAIService.js.map +1 -1
  40. package/dist/services/StorageService.d.ts +4 -1
  41. package/dist/services/StorageService.d.ts.map +1 -1
  42. package/dist/services/StorageService.js.map +1 -1
  43. package/dist/services/storage/QuiltBatchManager.d.ts +7 -0
  44. package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
  45. package/dist/services/storage/QuiltBatchManager.js +24 -5
  46. package/dist/services/storage/QuiltBatchManager.js.map +1 -1
  47. package/dist/services/storage/WalrusStorageManager.d.ts +10 -1
  48. package/dist/services/storage/WalrusStorageManager.d.ts.map +1 -1
  49. package/dist/services/storage/WalrusStorageManager.js +53 -12
  50. package/dist/services/storage/WalrusStorageManager.js.map +1 -1
  51. package/dist/vector/BrowserHnswIndexService.js +2 -2
  52. package/dist/vector/BrowserHnswIndexService.js.map +1 -1
  53. package/dist/vector/NodeHnswService.js +4 -4
  54. package/dist/vector/NodeHnswService.js.map +1 -1
  55. package/dist/vector/createHnswService.d.ts +4 -0
  56. package/dist/vector/createHnswService.d.ts.map +1 -1
  57. package/dist/vector/createHnswService.js +15 -3
  58. package/dist/vector/createHnswService.js.map +1 -1
  59. package/package.json +1 -1
  60. package/src/access/PermissionService.ts +635 -635
  61. package/src/aggregation/AggregationService.ts +389 -389
  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 +1004 -987
  72. package/src/client/PersonalDataWallet.ts +345 -345
  73. package/src/client/SimplePDWClient.ts +1387 -1369
  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/EncryptionNamespace.ts +221 -221
  82. package/src/client/namespaces/GraphNamespace.ts +468 -468
  83. package/src/client/namespaces/IndexNamespace.ts +364 -364
  84. package/src/client/namespaces/MemoryNamespace.ts +1704 -1569
  85. package/src/client/namespaces/PermissionsNamespace.ts +254 -254
  86. package/src/client/namespaces/PipelineNamespace.ts +220 -220
  87. package/src/client/namespaces/StorageNamespace.ts +458 -458
  88. package/src/client/namespaces/TxNamespace.ts +260 -260
  89. package/src/client/namespaces/WalletNamespace.ts +243 -243
  90. package/src/client/namespaces/consolidated/BlockchainNamespace.ts +607 -607
  91. package/src/client/namespaces/consolidated/SecurityNamespace.ts +648 -648
  92. package/src/client/namespaces/consolidated/StorageNamespace.ts +1143 -1141
  93. package/src/client/namespaces/consolidated/index.ts +41 -41
  94. package/src/client/signers/KeypairSigner.ts +108 -108
  95. package/src/client/signers/UnifiedSigner.ts +110 -110
  96. package/src/client/signers/WalletAdapterSigner.ts +159 -159
  97. package/src/client/signers/index.ts +26 -26
  98. package/src/config/ConfigurationHelper.ts +412 -412
  99. package/src/config/defaults.ts +56 -56
  100. package/src/config/index.ts +16 -9
  101. package/src/config/modelDefaults.ts +103 -0
  102. package/src/config/validation.ts +70 -70
  103. package/src/core/index.ts +14 -14
  104. package/src/core/interfaces/IService.ts +307 -307
  105. package/src/core/interfaces/index.ts +8 -8
  106. package/src/core/types/capability.ts +297 -297
  107. package/src/core/types/index.ts +874 -874
  108. package/src/core/types/wallet.ts +270 -270
  109. package/src/core/types.ts +9 -9
  110. package/src/core/wallet.ts +222 -222
  111. package/src/embedding/index.ts +19 -19
  112. package/src/embedding/types.ts +357 -357
  113. package/src/errors/index.ts +602 -602
  114. package/src/errors/recovery.ts +461 -461
  115. package/src/errors/validation.ts +567 -567
  116. package/src/generated/pdw/capability.ts +319 -319
  117. package/src/graph/GraphService.ts +888 -887
  118. package/src/graph/KnowledgeGraphManager.ts +728 -728
  119. package/src/graph/index.ts +25 -25
  120. package/src/index.ts +498 -498
  121. package/src/infrastructure/index.ts +22 -22
  122. package/src/infrastructure/seal/EncryptionService.ts +628 -628
  123. package/src/infrastructure/seal/SealService.ts +613 -613
  124. package/src/infrastructure/seal/index.ts +9 -9
  125. package/src/infrastructure/sui/BlockchainManager.ts +627 -627
  126. package/src/infrastructure/sui/SuiService.ts +888 -888
  127. package/src/infrastructure/sui/index.ts +9 -9
  128. package/src/infrastructure/walrus/StorageManager.ts +604 -604
  129. package/src/infrastructure/walrus/WalrusStorageService.ts +637 -637
  130. package/src/infrastructure/walrus/index.ts +9 -9
  131. package/src/langchain/createPDWRAG.ts +303 -303
  132. package/src/langchain/index.ts +47 -47
  133. package/src/permissions/ConsentRepository.browser.ts +249 -249
  134. package/src/permissions/ConsentRepository.ts +364 -364
  135. package/src/pipeline/MemoryPipeline.ts +863 -862
  136. package/src/pipeline/PipelineManager.ts +683 -683
  137. package/src/pipeline/index.ts +26 -26
  138. package/src/retrieval/AdvancedSearchService.ts +629 -629
  139. package/src/retrieval/MemoryAnalyticsService.ts +711 -711
  140. package/src/retrieval/MemoryDecryptionPipeline.ts +825 -825
  141. package/src/retrieval/index.ts +42 -42
  142. package/src/services/BatchService.ts +352 -352
  143. package/src/services/CapabilityService.ts +464 -464
  144. package/src/services/ClassifierService.ts +465 -465
  145. package/src/services/CrossContextPermissionService.ts +486 -486
  146. package/src/services/EmbeddingService.ts +796 -796
  147. package/src/services/EncryptionService.ts +712 -712
  148. package/src/services/GeminiAIService.ts +754 -753
  149. package/src/services/MemoryIndexService.ts +1009 -1009
  150. package/src/services/MemoryService.ts +369 -369
  151. package/src/services/QueryService.ts +890 -890
  152. package/src/services/StorageService.ts +1185 -1182
  153. package/src/services/TransactionService.ts +838 -838
  154. package/src/services/VectorService.ts +462 -462
  155. package/src/services/ViewService.ts +484 -484
  156. package/src/services/index.ts +25 -25
  157. package/src/services/storage/BlobAttributesManager.ts +333 -333
  158. package/src/services/storage/KnowledgeGraphManager.ts +425 -425
  159. package/src/services/storage/MemorySearchManager.ts +387 -387
  160. package/src/services/storage/QuiltBatchManager.ts +1157 -1130
  161. package/src/services/storage/WalrusMetadataManager.ts +268 -268
  162. package/src/services/storage/WalrusStorageManager.ts +333 -287
  163. package/src/services/storage/index.ts +57 -57
  164. package/src/types/index.ts +13 -13
  165. package/src/utils/index.ts +76 -76
  166. package/src/utils/memoryIndexOnChain.ts +507 -507
  167. package/src/vector/BrowserHnswIndexService.ts +758 -758
  168. package/src/vector/HnswWasmService.ts +731 -731
  169. package/src/vector/IHnswService.ts +233 -233
  170. package/src/vector/NodeHnswService.ts +833 -833
  171. package/src/vector/createHnswService.ts +147 -135
  172. package/src/vector/index.ts +56 -56
  173. package/src/wallet/ContextWalletService.ts +656 -656
  174. package/src/wallet/MainWalletService.ts +317 -317
@@ -1,123 +1,123 @@
1
- /**
2
- * Cache Namespace - LRU Cache Operations
3
- *
4
- * Pure delegation to BatchService cache methods.
5
- * Provides fast in-memory caching with TTL support.
6
- *
7
- * @module client/namespaces
8
- */
9
-
10
- import type { ServiceContainer } from '../SimplePDWClient';
11
-
12
- /**
13
- * Cache statistics
14
- */
15
- export interface CacheStats {
16
- size: number;
17
- totalAccess: number;
18
- hitRate: number;
19
- oldestItem?: Date;
20
- newestItem?: Date;
21
- }
22
-
23
- /**
24
- * Cache Namespace
25
- *
26
- * Handles in-memory caching operations with TTL and LRU eviction
27
- */
28
- export class CacheNamespace {
29
- constructor(private services: ServiceContainer) {}
30
-
31
- /**
32
- * Get cached value
33
- *
34
- * Delegates to: BatchService.getCache()
35
- *
36
- * @param key - Cache key
37
- * @returns Cached value or null if not found/expired
38
- */
39
- get<T = any>(key: string): T | null {
40
- if (!this.services.batchService) {
41
- throw new Error('Batch service (cache) not configured.');
42
- }
43
-
44
- return this.services.batchService.getCache<T>(key);
45
- }
46
-
47
- /**
48
- * Set cache value
49
- *
50
- * Delegates to: BatchService.setCache()
51
- *
52
- * @param key - Cache key
53
- * @param value - Value to cache
54
- * @param ttl - Time-to-live in milliseconds (optional)
55
- */
56
- set<T = any>(key: string, value: T, ttl?: number): void {
57
- if (!this.services.batchService) {
58
- throw new Error('Batch service (cache) not configured.');
59
- }
60
-
61
- this.services.batchService.setCache(key, value, ttl);
62
- }
63
-
64
- /**
65
- * Check if key exists in cache
66
- *
67
- * Delegates to: BatchService.hasCache()
68
- *
69
- * @param key - Cache key
70
- * @returns True if key exists and not expired
71
- */
72
- has(key: string): boolean {
73
- if (!this.services.batchService) {
74
- throw new Error('Batch service (cache) not configured.');
75
- }
76
-
77
- return this.services.batchService.hasCache(key);
78
- }
79
-
80
- /**
81
- * Delete cache entry
82
- *
83
- * Delegates to: BatchService.deleteCache()
84
- *
85
- * @param key - Cache key
86
- * @returns True if deleted, false if not found
87
- */
88
- delete(key: string): boolean {
89
- if (!this.services.batchService) {
90
- throw new Error('Batch service (cache) not configured.');
91
- }
92
-
93
- return this.services.batchService.deleteCache(key);
94
- }
95
-
96
- /**
97
- * Clear all cache entries
98
- *
99
- * Delegates to: BatchService.clearCache()
100
- */
101
- clear(): void {
102
- if (!this.services.batchService) {
103
- throw new Error('Batch service (cache) not configured.');
104
- }
105
-
106
- this.services.batchService.clearCache();
107
- }
108
-
109
- /**
110
- * Get cache statistics
111
- *
112
- * Delegates to: BatchService.getCacheStats()
113
- *
114
- * @returns Cache statistics
115
- */
116
- stats(): CacheStats {
117
- if (!this.services.batchService) {
118
- throw new Error('Batch service (cache) not configured.');
119
- }
120
-
121
- return this.services.batchService.getCacheStats();
122
- }
123
- }
1
+ /**
2
+ * Cache Namespace - LRU Cache Operations
3
+ *
4
+ * Pure delegation to BatchService cache methods.
5
+ * Provides fast in-memory caching with TTL support.
6
+ *
7
+ * @module client/namespaces
8
+ */
9
+
10
+ import type { ServiceContainer } from '../SimplePDWClient';
11
+
12
+ /**
13
+ * Cache statistics
14
+ */
15
+ export interface CacheStats {
16
+ size: number;
17
+ totalAccess: number;
18
+ hitRate: number;
19
+ oldestItem?: Date;
20
+ newestItem?: Date;
21
+ }
22
+
23
+ /**
24
+ * Cache Namespace
25
+ *
26
+ * Handles in-memory caching operations with TTL and LRU eviction
27
+ */
28
+ export class CacheNamespace {
29
+ constructor(private services: ServiceContainer) {}
30
+
31
+ /**
32
+ * Get cached value
33
+ *
34
+ * Delegates to: BatchService.getCache()
35
+ *
36
+ * @param key - Cache key
37
+ * @returns Cached value or null if not found/expired
38
+ */
39
+ get<T = any>(key: string): T | null {
40
+ if (!this.services.batchService) {
41
+ throw new Error('Batch service (cache) not configured.');
42
+ }
43
+
44
+ return this.services.batchService.getCache<T>(key);
45
+ }
46
+
47
+ /**
48
+ * Set cache value
49
+ *
50
+ * Delegates to: BatchService.setCache()
51
+ *
52
+ * @param key - Cache key
53
+ * @param value - Value to cache
54
+ * @param ttl - Time-to-live in milliseconds (optional)
55
+ */
56
+ set<T = any>(key: string, value: T, ttl?: number): void {
57
+ if (!this.services.batchService) {
58
+ throw new Error('Batch service (cache) not configured.');
59
+ }
60
+
61
+ this.services.batchService.setCache(key, value, ttl);
62
+ }
63
+
64
+ /**
65
+ * Check if key exists in cache
66
+ *
67
+ * Delegates to: BatchService.hasCache()
68
+ *
69
+ * @param key - Cache key
70
+ * @returns True if key exists and not expired
71
+ */
72
+ has(key: string): boolean {
73
+ if (!this.services.batchService) {
74
+ throw new Error('Batch service (cache) not configured.');
75
+ }
76
+
77
+ return this.services.batchService.hasCache(key);
78
+ }
79
+
80
+ /**
81
+ * Delete cache entry
82
+ *
83
+ * Delegates to: BatchService.deleteCache()
84
+ *
85
+ * @param key - Cache key
86
+ * @returns True if deleted, false if not found
87
+ */
88
+ delete(key: string): boolean {
89
+ if (!this.services.batchService) {
90
+ throw new Error('Batch service (cache) not configured.');
91
+ }
92
+
93
+ return this.services.batchService.deleteCache(key);
94
+ }
95
+
96
+ /**
97
+ * Clear all cache entries
98
+ *
99
+ * Delegates to: BatchService.clearCache()
100
+ */
101
+ clear(): void {
102
+ if (!this.services.batchService) {
103
+ throw new Error('Batch service (cache) not configured.');
104
+ }
105
+
106
+ this.services.batchService.clearCache();
107
+ }
108
+
109
+ /**
110
+ * Get cache statistics
111
+ *
112
+ * Delegates to: BatchService.getCacheStats()
113
+ *
114
+ * @returns Cache statistics
115
+ */
116
+ stats(): CacheStats {
117
+ if (!this.services.batchService) {
118
+ throw new Error('Batch service (cache) not configured.');
119
+ }
120
+
121
+ return this.services.batchService.getCacheStats();
122
+ }
123
+ }
@@ -1,217 +1,217 @@
1
- /**
2
- * Capability Namespace - MemoryCap Object Operations
3
- *
4
- * Provides API for managing MemoryCap capability objects using
5
- * the SEAL PrivateData pattern.
6
- *
7
- * Key concepts:
8
- * - MemoryCap: Capability object for app context access
9
- * - Object ownership = access permission (SEAL idiomatic)
10
- * - Transfer capability = share access
11
- * - Burn capability = revoke access
12
- *
13
- * @module client/namespaces
14
- */
15
-
16
- import type { ServiceContainer } from '../SimplePDWClient';
17
- import type { MemoryCap } from '../../core/types/capability';
18
- import { CapabilityService } from '../../services/CapabilityService';
19
-
20
- /**
21
- * Options for creating a capability
22
- */
23
- export interface CreateCapabilityOptions {
24
- appId: string;
25
- }
26
-
27
- /**
28
- * Options for listing capabilities
29
- */
30
- export interface ListCapabilityOptions {
31
- appId?: string;
32
- }
33
-
34
- /**
35
- * Capability Namespace
36
- *
37
- * Handles MemoryCap CRUD operations
38
- */
39
- export class CapabilityNamespace {
40
- private capService: CapabilityService | null = null;
41
-
42
- constructor(private services: ServiceContainer) {
43
- // Initialize CapabilityService if SuiClient and packageId available
44
- const suiClient = this.services.config.sui?.client;
45
- const packageId = this.services.config.sui?.packageId;
46
-
47
- if (suiClient && packageId) {
48
- this.capService = new CapabilityService({
49
- suiClient,
50
- packageId,
51
- });
52
- }
53
- }
54
-
55
- /**
56
- * Ensure CapabilityService is initialized
57
- */
58
- private ensureService(): CapabilityService {
59
- if (!this.capService) {
60
- throw new Error('CapabilityService not initialized. Check Sui configuration.');
61
- }
62
- return this.capService;
63
- }
64
-
65
- /**
66
- * Create a new MemoryCap for an app context
67
- *
68
- * @param appId - Application identifier (e.g., "MEMO", "HEALTH")
69
- * @returns Created MemoryCap
70
- *
71
- * @example
72
- * ```typescript
73
- * const cap = await pdw.capability.create('MEMO');
74
- * console.log(cap.id, cap.appId, cap.nonce);
75
- * ```
76
- */
77
- async create(appId: string): Promise<MemoryCap> {
78
- const service = this.ensureService();
79
- const signer = this.services.config.signer.getSigner();
80
-
81
- return await service.create({ appId }, signer);
82
- }
83
-
84
- /**
85
- * Get an existing capability by app ID
86
- *
87
- * @param appId - Application identifier
88
- * @returns MemoryCap or null if not found
89
- */
90
- async get(appId: string): Promise<MemoryCap | null> {
91
- const service = this.ensureService();
92
- return await service.get(this.services.config.userAddress, appId);
93
- }
94
-
95
- /**
96
- * Get or create a capability for an app context
97
- *
98
- * Convenience method that returns existing capability if found,
99
- * otherwise creates a new one.
100
- *
101
- * @param appId - Application identifier
102
- * @returns Existing or newly created MemoryCap
103
- */
104
- async getOrCreate(appId: string): Promise<MemoryCap> {
105
- const service = this.ensureService();
106
- const signer = this.services.config.signer.getSigner();
107
-
108
- return await service.getOrCreate(
109
- { appId, userAddress: this.services.config.userAddress },
110
- signer
111
- );
112
- }
113
-
114
- /**
115
- * List all capabilities owned by the current user
116
- *
117
- * @param options - Optional filter by appId
118
- * @returns Array of MemoryCaps
119
- *
120
- * @example
121
- * ```typescript
122
- * // List all capabilities
123
- * const allCaps = await pdw.capability.list();
124
- *
125
- * // Filter by app ID
126
- * const memoCaps = await pdw.capability.list({ appId: 'MEMO' });
127
- * ```
128
- */
129
- async list(options?: ListCapabilityOptions): Promise<MemoryCap[]> {
130
- const service = this.ensureService();
131
-
132
- return await service.list({
133
- userAddress: this.services.config.userAddress,
134
- appId: options?.appId,
135
- });
136
- }
137
-
138
- /**
139
- * Transfer a capability to another address
140
- *
141
- * After transfer:
142
- * - New owner can decrypt memories for this context
143
- * - Original owner loses access
144
- *
145
- * @param capId - Capability object ID to transfer
146
- * @param recipient - Recipient's Sui address
147
- *
148
- * @example
149
- * ```typescript
150
- * await pdw.capability.transfer(cap.id, '0x1234...');
151
- * ```
152
- */
153
- async transfer(capId: string, recipient: string): Promise<void> {
154
- const service = this.ensureService();
155
- const signer = this.services.config.signer.getSigner();
156
-
157
- await service.transfer({ capId, recipient }, signer);
158
- }
159
-
160
- /**
161
- * Burn (revoke) a capability
162
- *
163
- * This permanently revokes the capability.
164
- * After burning:
165
- * - No one can decrypt memories for this context
166
- * - Object is permanently deleted
167
- *
168
- * @param capId - Capability object ID to burn
169
- *
170
- * @example
171
- * ```typescript
172
- * await pdw.capability.burn(cap.id);
173
- * ```
174
- */
175
- async burn(capId: string): Promise<void> {
176
- const service = this.ensureService();
177
- const signer = this.services.config.signer.getSigner();
178
-
179
- await service.burn({ capId }, signer);
180
- }
181
-
182
- /**
183
- * Check if user has capability for an app context
184
- *
185
- * @param appId - Application identifier
186
- * @returns True if capability exists
187
- */
188
- async has(appId: string): Promise<boolean> {
189
- const service = this.ensureService();
190
- return await service.hasCapability(this.services.config.userAddress, appId);
191
- }
192
-
193
- /**
194
- * Get capability by object ID
195
- *
196
- * @param capId - Capability object ID
197
- * @returns MemoryCap or null
198
- */
199
- async getById(capId: string): Promise<MemoryCap | null> {
200
- const service = this.ensureService();
201
- return await service.getById(capId);
202
- }
203
-
204
- /**
205
- * Compute SEAL key ID for a capability
206
- *
207
- * Used for SEAL encryption/decryption key derivation.
208
- * key_id = keccak256(owner || nonce)
209
- *
210
- * @param cap - MemoryCap object
211
- * @returns Key ID as hex string
212
- */
213
- computeKeyId(cap: MemoryCap): string {
214
- const service = this.ensureService();
215
- return service.computeKeyId(cap);
216
- }
217
- }
1
+ /**
2
+ * Capability Namespace - MemoryCap Object Operations
3
+ *
4
+ * Provides API for managing MemoryCap capability objects using
5
+ * the SEAL PrivateData pattern.
6
+ *
7
+ * Key concepts:
8
+ * - MemoryCap: Capability object for app context access
9
+ * - Object ownership = access permission (SEAL idiomatic)
10
+ * - Transfer capability = share access
11
+ * - Burn capability = revoke access
12
+ *
13
+ * @module client/namespaces
14
+ */
15
+
16
+ import type { ServiceContainer } from '../SimplePDWClient';
17
+ import type { MemoryCap } from '../../core/types/capability';
18
+ import { CapabilityService } from '../../services/CapabilityService';
19
+
20
+ /**
21
+ * Options for creating a capability
22
+ */
23
+ export interface CreateCapabilityOptions {
24
+ appId: string;
25
+ }
26
+
27
+ /**
28
+ * Options for listing capabilities
29
+ */
30
+ export interface ListCapabilityOptions {
31
+ appId?: string;
32
+ }
33
+
34
+ /**
35
+ * Capability Namespace
36
+ *
37
+ * Handles MemoryCap CRUD operations
38
+ */
39
+ export class CapabilityNamespace {
40
+ private capService: CapabilityService | null = null;
41
+
42
+ constructor(private services: ServiceContainer) {
43
+ // Initialize CapabilityService if SuiClient and packageId available
44
+ const suiClient = this.services.config.sui?.client;
45
+ const packageId = this.services.config.sui?.packageId;
46
+
47
+ if (suiClient && packageId) {
48
+ this.capService = new CapabilityService({
49
+ suiClient,
50
+ packageId,
51
+ });
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Ensure CapabilityService is initialized
57
+ */
58
+ private ensureService(): CapabilityService {
59
+ if (!this.capService) {
60
+ throw new Error('CapabilityService not initialized. Check Sui configuration.');
61
+ }
62
+ return this.capService;
63
+ }
64
+
65
+ /**
66
+ * Create a new MemoryCap for an app context
67
+ *
68
+ * @param appId - Application identifier (e.g., "MEMO", "HEALTH")
69
+ * @returns Created MemoryCap
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * const cap = await pdw.capability.create('MEMO');
74
+ * console.log(cap.id, cap.appId, cap.nonce);
75
+ * ```
76
+ */
77
+ async create(appId: string): Promise<MemoryCap> {
78
+ const service = this.ensureService();
79
+ const signer = this.services.config.signer.getSigner();
80
+
81
+ return await service.create({ appId }, signer);
82
+ }
83
+
84
+ /**
85
+ * Get an existing capability by app ID
86
+ *
87
+ * @param appId - Application identifier
88
+ * @returns MemoryCap or null if not found
89
+ */
90
+ async get(appId: string): Promise<MemoryCap | null> {
91
+ const service = this.ensureService();
92
+ return await service.get(this.services.config.userAddress, appId);
93
+ }
94
+
95
+ /**
96
+ * Get or create a capability for an app context
97
+ *
98
+ * Convenience method that returns existing capability if found,
99
+ * otherwise creates a new one.
100
+ *
101
+ * @param appId - Application identifier
102
+ * @returns Existing or newly created MemoryCap
103
+ */
104
+ async getOrCreate(appId: string): Promise<MemoryCap> {
105
+ const service = this.ensureService();
106
+ const signer = this.services.config.signer.getSigner();
107
+
108
+ return await service.getOrCreate(
109
+ { appId, userAddress: this.services.config.userAddress },
110
+ signer
111
+ );
112
+ }
113
+
114
+ /**
115
+ * List all capabilities owned by the current user
116
+ *
117
+ * @param options - Optional filter by appId
118
+ * @returns Array of MemoryCaps
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * // List all capabilities
123
+ * const allCaps = await pdw.capability.list();
124
+ *
125
+ * // Filter by app ID
126
+ * const memoCaps = await pdw.capability.list({ appId: 'MEMO' });
127
+ * ```
128
+ */
129
+ async list(options?: ListCapabilityOptions): Promise<MemoryCap[]> {
130
+ const service = this.ensureService();
131
+
132
+ return await service.list({
133
+ userAddress: this.services.config.userAddress,
134
+ appId: options?.appId,
135
+ });
136
+ }
137
+
138
+ /**
139
+ * Transfer a capability to another address
140
+ *
141
+ * After transfer:
142
+ * - New owner can decrypt memories for this context
143
+ * - Original owner loses access
144
+ *
145
+ * @param capId - Capability object ID to transfer
146
+ * @param recipient - Recipient's Sui address
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * await pdw.capability.transfer(cap.id, '0x1234...');
151
+ * ```
152
+ */
153
+ async transfer(capId: string, recipient: string): Promise<void> {
154
+ const service = this.ensureService();
155
+ const signer = this.services.config.signer.getSigner();
156
+
157
+ await service.transfer({ capId, recipient }, signer);
158
+ }
159
+
160
+ /**
161
+ * Burn (revoke) a capability
162
+ *
163
+ * This permanently revokes the capability.
164
+ * After burning:
165
+ * - No one can decrypt memories for this context
166
+ * - Object is permanently deleted
167
+ *
168
+ * @param capId - Capability object ID to burn
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * await pdw.capability.burn(cap.id);
173
+ * ```
174
+ */
175
+ async burn(capId: string): Promise<void> {
176
+ const service = this.ensureService();
177
+ const signer = this.services.config.signer.getSigner();
178
+
179
+ await service.burn({ capId }, signer);
180
+ }
181
+
182
+ /**
183
+ * Check if user has capability for an app context
184
+ *
185
+ * @param appId - Application identifier
186
+ * @returns True if capability exists
187
+ */
188
+ async has(appId: string): Promise<boolean> {
189
+ const service = this.ensureService();
190
+ return await service.hasCapability(this.services.config.userAddress, appId);
191
+ }
192
+
193
+ /**
194
+ * Get capability by object ID
195
+ *
196
+ * @param capId - Capability object ID
197
+ * @returns MemoryCap or null
198
+ */
199
+ async getById(capId: string): Promise<MemoryCap | null> {
200
+ const service = this.ensureService();
201
+ return await service.getById(capId);
202
+ }
203
+
204
+ /**
205
+ * Compute SEAL key ID for a capability
206
+ *
207
+ * Used for SEAL encryption/decryption key derivation.
208
+ * key_id = keccak256(owner || nonce)
209
+ *
210
+ * @param cap - MemoryCap object
211
+ * @returns Key ID as hex string
212
+ */
213
+ computeKeyId(cap: MemoryCap): string {
214
+ const service = this.ensureService();
215
+ return service.computeKeyId(cap);
216
+ }
217
+ }