@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,254 +1,254 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Permissions Namespace - OAuth-style Access Control
|
|
3
|
-
*
|
|
4
|
-
* Pure delegation to PermissionService for access management.
|
|
5
|
-
* Handles consent requests, grants, revocation, and validation.
|
|
6
|
-
*
|
|
7
|
-
* @module client/namespaces
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { ServiceContainer } from '../SimplePDWClient';
|
|
11
|
-
import type {
|
|
12
|
-
ConsentRequestRecord,
|
|
13
|
-
AccessGrant,
|
|
14
|
-
PermissionScope
|
|
15
|
-
} from '../../core/types/wallet';
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Consent request options
|
|
19
|
-
*/
|
|
20
|
-
export interface ConsentRequestOptions {
|
|
21
|
-
appId: string;
|
|
22
|
-
scopes: PermissionScope[];
|
|
23
|
-
purpose: string;
|
|
24
|
-
expiresIn?: number; // milliseconds
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Grant options
|
|
29
|
-
*/
|
|
30
|
-
export interface GrantOptions {
|
|
31
|
-
appId: string;
|
|
32
|
-
scopes: PermissionScope[];
|
|
33
|
-
expiresAt?: number; // timestamp
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Permissions Namespace
|
|
38
|
-
*
|
|
39
|
-
* Handles OAuth-style access control and consent management
|
|
40
|
-
*/
|
|
41
|
-
export class PermissionsNamespace {
|
|
42
|
-
constructor(private services: ServiceContainer) {}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Request user consent for data access
|
|
46
|
-
*
|
|
47
|
-
* Delegates to: PermissionService.requestConsent()
|
|
48
|
-
*
|
|
49
|
-
* @param appId - Application identifier
|
|
50
|
-
* @param scopes - Requested permission scopes
|
|
51
|
-
* @param purpose - Purpose description
|
|
52
|
-
* @returns Consent request record
|
|
53
|
-
*/
|
|
54
|
-
async request(
|
|
55
|
-
appId: string,
|
|
56
|
-
scopes: PermissionScope[],
|
|
57
|
-
purpose: string
|
|
58
|
-
): Promise<ConsentRequestRecord> {
|
|
59
|
-
if (!this.services.permissions) {
|
|
60
|
-
throw new Error('Permission service not configured.');
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return await this.services.permissions.requestConsent({
|
|
64
|
-
requesterWallet: appId,
|
|
65
|
-
targetWallet: this.services.config.userAddress,
|
|
66
|
-
scopes,
|
|
67
|
-
purpose
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Grant permissions to an app
|
|
73
|
-
*
|
|
74
|
-
* Delegates to: PermissionService.grantPermissions()
|
|
75
|
-
*
|
|
76
|
-
* @param appId - Application to grant access
|
|
77
|
-
* @param scopes - Scopes to grant
|
|
78
|
-
* @param expiresAt - Optional expiration timestamp
|
|
79
|
-
* @returns Access grant record
|
|
80
|
-
*/
|
|
81
|
-
async grant(
|
|
82
|
-
appId: string,
|
|
83
|
-
scopes: PermissionScope[],
|
|
84
|
-
expiresAt?: number
|
|
85
|
-
): Promise<AccessGrant> {
|
|
86
|
-
if (!this.services.permissions) {
|
|
87
|
-
throw new Error('Permission service not configured.');
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return await this.services.permissions.grantPermissions(
|
|
91
|
-
this.services.config.userAddress,
|
|
92
|
-
{
|
|
93
|
-
requestingWallet: appId,
|
|
94
|
-
targetWallet: this.services.config.userAddress,
|
|
95
|
-
scopes,
|
|
96
|
-
expiresAt,
|
|
97
|
-
signer: this.services.config.signer.getSigner()
|
|
98
|
-
}
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Revoke permission scope from an app
|
|
104
|
-
*
|
|
105
|
-
* Delegates to: PermissionService.revokePermissions()
|
|
106
|
-
*
|
|
107
|
-
* @param appId - Application to revoke from
|
|
108
|
-
* @param scope - Scope to revoke
|
|
109
|
-
* @returns Success status
|
|
110
|
-
*/
|
|
111
|
-
async revoke(appId: string, scope: PermissionScope): Promise<boolean> {
|
|
112
|
-
if (!this.services.permissions) {
|
|
113
|
-
throw new Error('Permission service not configured.');
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return await this.services.permissions.revokePermissions(
|
|
117
|
-
this.services.config.userAddress,
|
|
118
|
-
{
|
|
119
|
-
requestingWallet: appId,
|
|
120
|
-
targetWallet: this.services.config.userAddress,
|
|
121
|
-
scope,
|
|
122
|
-
signer: this.services.config.signer.getSigner()
|
|
123
|
-
}
|
|
124
|
-
);
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Check if app has specific permission
|
|
129
|
-
*
|
|
130
|
-
* Delegates to: PermissionService.checkPermission()
|
|
131
|
-
*
|
|
132
|
-
* @param appId - Application to check
|
|
133
|
-
* @param scope - Scope to check
|
|
134
|
-
* @returns True if permission exists and valid
|
|
135
|
-
*/
|
|
136
|
-
async check(appId: string, scope: PermissionScope): Promise<boolean> {
|
|
137
|
-
if (!this.services.permissions) {
|
|
138
|
-
throw new Error('Permission service not configured.');
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// checkPermission takes (appId, scope, targetWallet)
|
|
142
|
-
return await this.services.permissions.checkPermission(
|
|
143
|
-
appId,
|
|
144
|
-
scope,
|
|
145
|
-
this.services.config.userAddress
|
|
146
|
-
);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* List all permission grants for the current user
|
|
151
|
-
*
|
|
152
|
-
* Queries on-chain allowlist for permissions using event-based state reconstruction.
|
|
153
|
-
* Returns only active (non-expired) grants.
|
|
154
|
-
*
|
|
155
|
-
* @returns Array of active grants
|
|
156
|
-
*/
|
|
157
|
-
async list(): Promise<AccessGrant[]> {
|
|
158
|
-
if (!this.services.permissions) {
|
|
159
|
-
throw new Error('Permission service not configured.');
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// Use existing method that queries events and reduces to current state
|
|
163
|
-
const grants = await this.services.permissions.getGrantsByUser(
|
|
164
|
-
this.services.config.userAddress
|
|
165
|
-
);
|
|
166
|
-
|
|
167
|
-
// Filter for active (non-expired) grants
|
|
168
|
-
const now = Date.now();
|
|
169
|
-
return grants.filter(g => !g.expiresAt || g.expiresAt > now);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Get pending consent requests
|
|
174
|
-
*
|
|
175
|
-
* Delegates to: PermissionService.getPendingConsents()
|
|
176
|
-
*
|
|
177
|
-
* @returns Array of pending consent requests
|
|
178
|
-
*/
|
|
179
|
-
async getPendingConsents(): Promise<ConsentRequestRecord[]> {
|
|
180
|
-
if (!this.services.permissions) {
|
|
181
|
-
throw new Error('Permission service not configured.');
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
const consents = await this.services.permissions.getPendingConsents(
|
|
185
|
-
this.services.config.userAddress
|
|
186
|
-
);
|
|
187
|
-
|
|
188
|
-
// Convert ConsentRequest[] to ConsentRequestRecord[]
|
|
189
|
-
return consents.map(c => ({
|
|
190
|
-
...c,
|
|
191
|
-
requestId: c.requestId || `req_${Date.now()}`,
|
|
192
|
-
createdAt: c.createdAt || Date.now(),
|
|
193
|
-
updatedAt: c.updatedAt || Date.now(),
|
|
194
|
-
status: c.status || 'pending'
|
|
195
|
-
})) as ConsentRequestRecord[];
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Approve a consent request
|
|
200
|
-
*
|
|
201
|
-
* Delegates to: PermissionService.approveConsent()
|
|
202
|
-
*
|
|
203
|
-
* @param consentId - Consent request ID
|
|
204
|
-
* @returns Access grant
|
|
205
|
-
*/
|
|
206
|
-
async approve(consentId: string): Promise<AccessGrant> {
|
|
207
|
-
if (!this.services.permissions) {
|
|
208
|
-
throw new Error('Permission service not configured.');
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Get the consent request first
|
|
212
|
-
const consents = await this.getPendingConsents();
|
|
213
|
-
const consent = consents.find(c => c.requestId === consentId);
|
|
214
|
-
|
|
215
|
-
if (!consent) {
|
|
216
|
-
throw new Error(`Consent request ${consentId} not found`);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
// approveConsent takes (userAddress, consentRequest, contextId)
|
|
220
|
-
return await this.services.permissions.approveConsent(
|
|
221
|
-
this.services.config.userAddress,
|
|
222
|
-
consent as any,
|
|
223
|
-
consent.targetWallet
|
|
224
|
-
);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
/**
|
|
228
|
-
* Deny a consent request
|
|
229
|
-
*
|
|
230
|
-
* Delegates to: PermissionService.denyConsent()
|
|
231
|
-
*
|
|
232
|
-
* @param consentId - Consent request ID
|
|
233
|
-
* @returns Success status
|
|
234
|
-
*/
|
|
235
|
-
async deny(consentId: string): Promise<boolean> {
|
|
236
|
-
if (!this.services.permissions) {
|
|
237
|
-
throw new Error('Permission service not configured.');
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// Get the consent request first
|
|
241
|
-
const consents = await this.getPendingConsents();
|
|
242
|
-
const consent = consents.find(c => c.requestId === consentId);
|
|
243
|
-
|
|
244
|
-
if (!consent) {
|
|
245
|
-
throw new Error(`Consent request ${consentId} not found`);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// denyConsent takes (userAddress, consentRequest)
|
|
249
|
-
return await this.services.permissions.denyConsent(
|
|
250
|
-
this.services.config.userAddress,
|
|
251
|
-
consent as any
|
|
252
|
-
);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Permissions Namespace - OAuth-style Access Control
|
|
3
|
+
*
|
|
4
|
+
* Pure delegation to PermissionService for access management.
|
|
5
|
+
* Handles consent requests, grants, revocation, and validation.
|
|
6
|
+
*
|
|
7
|
+
* @module client/namespaces
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { ServiceContainer } from '../SimplePDWClient';
|
|
11
|
+
import type {
|
|
12
|
+
ConsentRequestRecord,
|
|
13
|
+
AccessGrant,
|
|
14
|
+
PermissionScope
|
|
15
|
+
} from '../../core/types/wallet';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Consent request options
|
|
19
|
+
*/
|
|
20
|
+
export interface ConsentRequestOptions {
|
|
21
|
+
appId: string;
|
|
22
|
+
scopes: PermissionScope[];
|
|
23
|
+
purpose: string;
|
|
24
|
+
expiresIn?: number; // milliseconds
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Grant options
|
|
29
|
+
*/
|
|
30
|
+
export interface GrantOptions {
|
|
31
|
+
appId: string;
|
|
32
|
+
scopes: PermissionScope[];
|
|
33
|
+
expiresAt?: number; // timestamp
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Permissions Namespace
|
|
38
|
+
*
|
|
39
|
+
* Handles OAuth-style access control and consent management
|
|
40
|
+
*/
|
|
41
|
+
export class PermissionsNamespace {
|
|
42
|
+
constructor(private services: ServiceContainer) {}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Request user consent for data access
|
|
46
|
+
*
|
|
47
|
+
* Delegates to: PermissionService.requestConsent()
|
|
48
|
+
*
|
|
49
|
+
* @param appId - Application identifier
|
|
50
|
+
* @param scopes - Requested permission scopes
|
|
51
|
+
* @param purpose - Purpose description
|
|
52
|
+
* @returns Consent request record
|
|
53
|
+
*/
|
|
54
|
+
async request(
|
|
55
|
+
appId: string,
|
|
56
|
+
scopes: PermissionScope[],
|
|
57
|
+
purpose: string
|
|
58
|
+
): Promise<ConsentRequestRecord> {
|
|
59
|
+
if (!this.services.permissions) {
|
|
60
|
+
throw new Error('Permission service not configured.');
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return await this.services.permissions.requestConsent({
|
|
64
|
+
requesterWallet: appId,
|
|
65
|
+
targetWallet: this.services.config.userAddress,
|
|
66
|
+
scopes,
|
|
67
|
+
purpose
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Grant permissions to an app
|
|
73
|
+
*
|
|
74
|
+
* Delegates to: PermissionService.grantPermissions()
|
|
75
|
+
*
|
|
76
|
+
* @param appId - Application to grant access
|
|
77
|
+
* @param scopes - Scopes to grant
|
|
78
|
+
* @param expiresAt - Optional expiration timestamp
|
|
79
|
+
* @returns Access grant record
|
|
80
|
+
*/
|
|
81
|
+
async grant(
|
|
82
|
+
appId: string,
|
|
83
|
+
scopes: PermissionScope[],
|
|
84
|
+
expiresAt?: number
|
|
85
|
+
): Promise<AccessGrant> {
|
|
86
|
+
if (!this.services.permissions) {
|
|
87
|
+
throw new Error('Permission service not configured.');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return await this.services.permissions.grantPermissions(
|
|
91
|
+
this.services.config.userAddress,
|
|
92
|
+
{
|
|
93
|
+
requestingWallet: appId,
|
|
94
|
+
targetWallet: this.services.config.userAddress,
|
|
95
|
+
scopes,
|
|
96
|
+
expiresAt,
|
|
97
|
+
signer: this.services.config.signer.getSigner()
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Revoke permission scope from an app
|
|
104
|
+
*
|
|
105
|
+
* Delegates to: PermissionService.revokePermissions()
|
|
106
|
+
*
|
|
107
|
+
* @param appId - Application to revoke from
|
|
108
|
+
* @param scope - Scope to revoke
|
|
109
|
+
* @returns Success status
|
|
110
|
+
*/
|
|
111
|
+
async revoke(appId: string, scope: PermissionScope): Promise<boolean> {
|
|
112
|
+
if (!this.services.permissions) {
|
|
113
|
+
throw new Error('Permission service not configured.');
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return await this.services.permissions.revokePermissions(
|
|
117
|
+
this.services.config.userAddress,
|
|
118
|
+
{
|
|
119
|
+
requestingWallet: appId,
|
|
120
|
+
targetWallet: this.services.config.userAddress,
|
|
121
|
+
scope,
|
|
122
|
+
signer: this.services.config.signer.getSigner()
|
|
123
|
+
}
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Check if app has specific permission
|
|
129
|
+
*
|
|
130
|
+
* Delegates to: PermissionService.checkPermission()
|
|
131
|
+
*
|
|
132
|
+
* @param appId - Application to check
|
|
133
|
+
* @param scope - Scope to check
|
|
134
|
+
* @returns True if permission exists and valid
|
|
135
|
+
*/
|
|
136
|
+
async check(appId: string, scope: PermissionScope): Promise<boolean> {
|
|
137
|
+
if (!this.services.permissions) {
|
|
138
|
+
throw new Error('Permission service not configured.');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// checkPermission takes (appId, scope, targetWallet)
|
|
142
|
+
return await this.services.permissions.checkPermission(
|
|
143
|
+
appId,
|
|
144
|
+
scope,
|
|
145
|
+
this.services.config.userAddress
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* List all permission grants for the current user
|
|
151
|
+
*
|
|
152
|
+
* Queries on-chain allowlist for permissions using event-based state reconstruction.
|
|
153
|
+
* Returns only active (non-expired) grants.
|
|
154
|
+
*
|
|
155
|
+
* @returns Array of active grants
|
|
156
|
+
*/
|
|
157
|
+
async list(): Promise<AccessGrant[]> {
|
|
158
|
+
if (!this.services.permissions) {
|
|
159
|
+
throw new Error('Permission service not configured.');
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// Use existing method that queries events and reduces to current state
|
|
163
|
+
const grants = await this.services.permissions.getGrantsByUser(
|
|
164
|
+
this.services.config.userAddress
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
// Filter for active (non-expired) grants
|
|
168
|
+
const now = Date.now();
|
|
169
|
+
return grants.filter(g => !g.expiresAt || g.expiresAt > now);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Get pending consent requests
|
|
174
|
+
*
|
|
175
|
+
* Delegates to: PermissionService.getPendingConsents()
|
|
176
|
+
*
|
|
177
|
+
* @returns Array of pending consent requests
|
|
178
|
+
*/
|
|
179
|
+
async getPendingConsents(): Promise<ConsentRequestRecord[]> {
|
|
180
|
+
if (!this.services.permissions) {
|
|
181
|
+
throw new Error('Permission service not configured.');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const consents = await this.services.permissions.getPendingConsents(
|
|
185
|
+
this.services.config.userAddress
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
// Convert ConsentRequest[] to ConsentRequestRecord[]
|
|
189
|
+
return consents.map(c => ({
|
|
190
|
+
...c,
|
|
191
|
+
requestId: c.requestId || `req_${Date.now()}`,
|
|
192
|
+
createdAt: c.createdAt || Date.now(),
|
|
193
|
+
updatedAt: c.updatedAt || Date.now(),
|
|
194
|
+
status: c.status || 'pending'
|
|
195
|
+
})) as ConsentRequestRecord[];
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Approve a consent request
|
|
200
|
+
*
|
|
201
|
+
* Delegates to: PermissionService.approveConsent()
|
|
202
|
+
*
|
|
203
|
+
* @param consentId - Consent request ID
|
|
204
|
+
* @returns Access grant
|
|
205
|
+
*/
|
|
206
|
+
async approve(consentId: string): Promise<AccessGrant> {
|
|
207
|
+
if (!this.services.permissions) {
|
|
208
|
+
throw new Error('Permission service not configured.');
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Get the consent request first
|
|
212
|
+
const consents = await this.getPendingConsents();
|
|
213
|
+
const consent = consents.find(c => c.requestId === consentId);
|
|
214
|
+
|
|
215
|
+
if (!consent) {
|
|
216
|
+
throw new Error(`Consent request ${consentId} not found`);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// approveConsent takes (userAddress, consentRequest, contextId)
|
|
220
|
+
return await this.services.permissions.approveConsent(
|
|
221
|
+
this.services.config.userAddress,
|
|
222
|
+
consent as any,
|
|
223
|
+
consent.targetWallet
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Deny a consent request
|
|
229
|
+
*
|
|
230
|
+
* Delegates to: PermissionService.denyConsent()
|
|
231
|
+
*
|
|
232
|
+
* @param consentId - Consent request ID
|
|
233
|
+
* @returns Success status
|
|
234
|
+
*/
|
|
235
|
+
async deny(consentId: string): Promise<boolean> {
|
|
236
|
+
if (!this.services.permissions) {
|
|
237
|
+
throw new Error('Permission service not configured.');
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Get the consent request first
|
|
241
|
+
const consents = await this.getPendingConsents();
|
|
242
|
+
const consent = consents.find(c => c.requestId === consentId);
|
|
243
|
+
|
|
244
|
+
if (!consent) {
|
|
245
|
+
throw new Error(`Consent request ${consentId} not found`);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// denyConsent takes (userAddress, consentRequest)
|
|
249
|
+
return await this.services.permissions.denyConsent(
|
|
250
|
+
this.services.config.userAddress,
|
|
251
|
+
consent as any
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
}
|