@cmdoss/memwal-sdk 0.6.1 → 0.6.2
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 +181 -181
- package/dist/ai-sdk/PDWVectorStore.d.ts.map +1 -1
- package/dist/ai-sdk/PDWVectorStore.js +4 -1
- package/dist/ai-sdk/PDWVectorStore.js.map +1 -1
- package/dist/browser.d.ts +5 -6
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +7 -6
- package/dist/browser.js.map +1 -1
- package/dist/client/ClientMemoryManager.d.ts +1 -0
- package/dist/client/ClientMemoryManager.d.ts.map +1 -1
- package/dist/client/ClientMemoryManager.js +5 -1
- package/dist/client/ClientMemoryManager.js.map +1 -1
- package/dist/client/PersonalDataWallet.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.d.ts +23 -0
- package/dist/client/SimplePDWClient.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.js +15 -2
- package/dist/client/SimplePDWClient.js.map +1 -1
- package/dist/client/namespaces/IndexNamespace.d.ts +38 -9
- package/dist/client/namespaces/IndexNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/IndexNamespace.js +77 -10
- package/dist/client/namespaces/IndexNamespace.js.map +1 -1
- package/dist/client/namespaces/SearchNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/SearchNamespace.js +25 -14
- package/dist/client/namespaces/SearchNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/BlockchainNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js +49 -1
- package/dist/client/namespaces/consolidated/BlockchainNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts +46 -0
- package/dist/client/namespaces/consolidated/StorageNamespace.d.ts.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.js +34 -0
- package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
- package/dist/graph/GraphService.js +1 -1
- package/dist/permissions/ConsentRepository.browser.d.ts +56 -0
- package/dist/permissions/ConsentRepository.browser.d.ts.map +1 -0
- package/dist/permissions/ConsentRepository.browser.js +198 -0
- package/dist/permissions/ConsentRepository.browser.js.map +1 -0
- package/dist/services/GeminiAIService.d.ts.map +1 -1
- package/dist/services/GeminiAIService.js +283 -27
- package/dist/services/GeminiAIService.js.map +1 -1
- package/dist/services/MemoryIndexService.d.ts +31 -2
- package/dist/services/MemoryIndexService.d.ts.map +1 -1
- package/dist/services/MemoryIndexService.js +75 -3
- package/dist/services/MemoryIndexService.js.map +1 -1
- package/dist/services/storage/QuiltBatchManager.d.ts +10 -3
- package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
- package/dist/services/storage/QuiltBatchManager.js +49 -27
- package/dist/services/storage/QuiltBatchManager.js.map +1 -1
- package/dist/utils/rebuildIndexNode.d.ts.map +1 -1
- package/dist/utils/rebuildIndexNode.js +109 -35
- package/dist/utils/rebuildIndexNode.js.map +1 -1
- package/dist/vector/NodeHnswService.d.ts.map +1 -1
- package/dist/vector/NodeHnswService.js +26 -7
- package/dist/vector/NodeHnswService.js.map +1 -1
- package/package.json +1 -1
- package/src/access/index.ts +8 -8
- package/src/aggregation/index.ts +8 -8
- package/src/ai-sdk/PDWVectorStore.ts +4 -1
- package/src/browser.ts +15 -10
- package/src/client/ClientMemoryManager.ts +6 -1
- package/src/client/SimplePDWClient.ts +40 -2
- package/src/client/namespaces/IndexNamespace.ts +89 -11
- package/src/client/namespaces/SearchNamespace.ts +27 -14
- package/src/client/namespaces/consolidated/BlockchainNamespace.ts +55 -1
- package/src/client/namespaces/consolidated/StorageNamespace.ts +57 -0
- package/src/client/signers/DappKitSigner.ts +207 -207
- package/src/generated/pdw/capability.ts +319 -319
- package/src/generated/pdw/deps/sui/object.ts +12 -12
- package/src/generated/pdw/deps/sui/vec_map.ts +32 -32
- package/src/generated/pdw/memory.ts +1087 -1087
- package/src/generated/pdw/wallet.ts +123 -123
- package/src/generated/utils/index.ts +159 -159
- package/src/graph/GraphService.ts +1 -1
- package/src/permissions/ConsentRepository.browser.ts +249 -0
- package/src/permissions/index.ts +9 -9
- package/src/services/GeminiAIService.ts +283 -27
- package/src/services/MemoryIndexService.ts +85 -3
- package/src/services/storage/QuiltBatchManager.ts +55 -29
- package/src/utils/rebuildIndexNode.ts +126 -43
- package/src/vector/NodeHnswService.ts +29 -7
- package/src/wallet/index.ts +17 -17
|
@@ -1,319 +1,319 @@
|
|
|
1
|
-
/**************************************************************
|
|
2
|
-
* THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *
|
|
3
|
-
**************************************************************/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Capability-based access control module for Personal Data Wallet
|
|
8
|
-
*
|
|
9
|
-
* This module implements the SEAL PrivateData pattern for simplified access
|
|
10
|
-
* control using Move's capability pattern.
|
|
11
|
-
*
|
|
12
|
-
* Key benefits:
|
|
13
|
-
*
|
|
14
|
-
* - 1 user wallet instead of N HD wallets
|
|
15
|
-
* - Object ownership = access permission (SEAL idiomatic)
|
|
16
|
-
* - No global registry needed
|
|
17
|
-
* - 60% gas savings vs allowlist pattern
|
|
18
|
-
* - Type-safe access control
|
|
19
|
-
*
|
|
20
|
-
* Pattern combines:
|
|
21
|
-
*
|
|
22
|
-
* - Move Capability Pattern (object = proof of permission)
|
|
23
|
-
* - SEAL PrivateData (nonce-based key derivation)
|
|
24
|
-
* - PDW Requirements (app contexts)
|
|
25
|
-
*
|
|
26
|
-
* Reference:
|
|
27
|
-
* https://github.com/MystenLabs/seal/blob/main/move/patterns/sources/private_data.move
|
|
28
|
-
*/
|
|
29
|
-
|
|
30
|
-
import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js';
|
|
31
|
-
import { bcs } from '@mysten/sui/bcs';
|
|
32
|
-
import { type Transaction } from '@mysten/sui/transactions';
|
|
33
|
-
import * as object from './deps/sui/object.js';
|
|
34
|
-
const $moduleName = '@local-pkg/pdw::capability';
|
|
35
|
-
export const MemoryCap = new MoveStruct({ name: `${$moduleName}::MemoryCap`, fields: {
|
|
36
|
-
id: object.UID,
|
|
37
|
-
/**
|
|
38
|
-
* Random nonce for SEAL key derivation key_id = keccak256(package_id || owner ||
|
|
39
|
-
* nonce)
|
|
40
|
-
*/
|
|
41
|
-
nonce: bcs.vector(bcs.u8()),
|
|
42
|
-
/** Application context (e.g., "MEMO", "HEALTH") */
|
|
43
|
-
app_id: bcs.string()
|
|
44
|
-
} });
|
|
45
|
-
export const MemoryCapCreated = new MoveStruct({ name: `${$moduleName}::MemoryCapCreated`, fields: {
|
|
46
|
-
cap_id: bcs.Address,
|
|
47
|
-
owner: bcs.Address,
|
|
48
|
-
app_id: bcs.string(),
|
|
49
|
-
nonce: bcs.vector(bcs.u8()),
|
|
50
|
-
created_at: bcs.u64()
|
|
51
|
-
} });
|
|
52
|
-
export const MemoryCapTransferred = new MoveStruct({ name: `${$moduleName}::MemoryCapTransferred`, fields: {
|
|
53
|
-
cap_id: bcs.Address,
|
|
54
|
-
from: bcs.Address,
|
|
55
|
-
to: bcs.Address,
|
|
56
|
-
app_id: bcs.string()
|
|
57
|
-
} });
|
|
58
|
-
export const MemoryCapBurned = new MoveStruct({ name: `${$moduleName}::MemoryCapBurned`, fields: {
|
|
59
|
-
cap_id: bcs.Address,
|
|
60
|
-
owner: bcs.Address,
|
|
61
|
-
app_id: bcs.string()
|
|
62
|
-
} });
|
|
63
|
-
export const SealApproved = new MoveStruct({ name: `${$moduleName}::SealApproved`, fields: {
|
|
64
|
-
cap_id: bcs.Address,
|
|
65
|
-
owner: bcs.Address,
|
|
66
|
-
app_id: bcs.string(),
|
|
67
|
-
key_id: bcs.vector(bcs.u8())
|
|
68
|
-
} });
|
|
69
|
-
export interface CreateMemoryCapArguments {
|
|
70
|
-
appId: RawTransactionArgument<string>;
|
|
71
|
-
}
|
|
72
|
-
export interface CreateMemoryCapOptions {
|
|
73
|
-
package?: string;
|
|
74
|
-
arguments: CreateMemoryCapArguments | [
|
|
75
|
-
appId: RawTransactionArgument<string>
|
|
76
|
-
];
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Create a new memory capability for an app context
|
|
80
|
-
*
|
|
81
|
-
* This creates a MemoryCap object owned by the caller. The capability can be used
|
|
82
|
-
* to:
|
|
83
|
-
*
|
|
84
|
-
* - Encrypt/decrypt memories for this app context
|
|
85
|
-
* - Share access by transferring the capability
|
|
86
|
-
*
|
|
87
|
-
* @param app_id: Application identifier (e.g., "MEMO", "HEALTH") @param ctx:
|
|
88
|
-
* Transaction context
|
|
89
|
-
*/
|
|
90
|
-
export function createMemoryCap(options: CreateMemoryCapOptions) {
|
|
91
|
-
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
92
|
-
const argumentsTypes = [
|
|
93
|
-
'0x0000000000000000000000000000000000000000000000000000000000000001::string::String'
|
|
94
|
-
] satisfies string[];
|
|
95
|
-
const parameterNames = ["appId"];
|
|
96
|
-
return (tx: Transaction) => tx.moveCall({
|
|
97
|
-
package: packageAddress,
|
|
98
|
-
module: 'capability',
|
|
99
|
-
function: 'create_memory_cap',
|
|
100
|
-
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
export interface SealApproveArguments {
|
|
104
|
-
cap: RawTransactionArgument<string>;
|
|
105
|
-
keyId: RawTransactionArgument<number[]>;
|
|
106
|
-
}
|
|
107
|
-
export interface SealApproveOptions {
|
|
108
|
-
package?: string;
|
|
109
|
-
arguments: SealApproveArguments | [
|
|
110
|
-
cap: RawTransactionArgument<string>,
|
|
111
|
-
keyId: RawTransactionArgument<number[]>
|
|
112
|
-
];
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* SEAL-compliant approval function
|
|
116
|
-
*
|
|
117
|
-
* This function follows the SEAL PrivateData pattern:
|
|
118
|
-
*
|
|
119
|
-
* - Entry function that aborts on denial (SEAL requirement)
|
|
120
|
-
* - Object holder can pass seal_approve
|
|
121
|
-
* - Any dApp can call with user's connected wallet
|
|
122
|
-
*
|
|
123
|
-
* Flow:
|
|
124
|
-
*
|
|
125
|
-
* 1. Verify caller owns the capability (via object reference)
|
|
126
|
-
* 2. Compute expected key_id from capability
|
|
127
|
-
* 3. Validate provided key_id matches
|
|
128
|
-
* 4. If valid, function returns (access granted)
|
|
129
|
-
* 5. If invalid, function aborts (access denied)
|
|
130
|
-
*
|
|
131
|
-
* @param cap: Reference to the MemoryCap object @param key_id: SEAL key identifier
|
|
132
|
-
* to validate @param ctx: Transaction context
|
|
133
|
-
*/
|
|
134
|
-
export function sealApprove(options: SealApproveOptions) {
|
|
135
|
-
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
136
|
-
const argumentsTypes = [
|
|
137
|
-
`${packageAddress}::capability::MemoryCap`,
|
|
138
|
-
'vector<u8>'
|
|
139
|
-
] satisfies string[];
|
|
140
|
-
const parameterNames = ["cap", "keyId"];
|
|
141
|
-
return (tx: Transaction) => tx.moveCall({
|
|
142
|
-
package: packageAddress,
|
|
143
|
-
module: 'capability',
|
|
144
|
-
function: 'seal_approve',
|
|
145
|
-
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
export interface TransferCapArguments {
|
|
149
|
-
cap: RawTransactionArgument<string>;
|
|
150
|
-
recipient: RawTransactionArgument<string>;
|
|
151
|
-
}
|
|
152
|
-
export interface TransferCapOptions {
|
|
153
|
-
package?: string;
|
|
154
|
-
arguments: TransferCapArguments | [
|
|
155
|
-
cap: RawTransactionArgument<string>,
|
|
156
|
-
recipient: RawTransactionArgument<string>
|
|
157
|
-
];
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Transfer capability to another address (for delegation/sharing)
|
|
161
|
-
*
|
|
162
|
-
* After transfer:
|
|
163
|
-
*
|
|
164
|
-
* - New owner can call seal_approve
|
|
165
|
-
* - New owner can decrypt memories
|
|
166
|
-
* - Original owner loses access
|
|
167
|
-
*
|
|
168
|
-
* @param cap: The capability to transfer (consumed) @param recipient: Address to
|
|
169
|
-
* receive the capability
|
|
170
|
-
*/
|
|
171
|
-
export function transferCap(options: TransferCapOptions) {
|
|
172
|
-
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
173
|
-
const argumentsTypes = [
|
|
174
|
-
`${packageAddress}::capability::MemoryCap`,
|
|
175
|
-
'address'
|
|
176
|
-
] satisfies string[];
|
|
177
|
-
const parameterNames = ["cap", "recipient"];
|
|
178
|
-
return (tx: Transaction) => tx.moveCall({
|
|
179
|
-
package: packageAddress,
|
|
180
|
-
module: 'capability',
|
|
181
|
-
function: 'transfer_cap',
|
|
182
|
-
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
export interface BurnCapArguments {
|
|
186
|
-
cap: RawTransactionArgument<string>;
|
|
187
|
-
}
|
|
188
|
-
export interface BurnCapOptions {
|
|
189
|
-
package?: string;
|
|
190
|
-
arguments: BurnCapArguments | [
|
|
191
|
-
cap: RawTransactionArgument<string>
|
|
192
|
-
];
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Burn (delete) a capability
|
|
196
|
-
*
|
|
197
|
-
* This permanently revokes the capability. After burning:
|
|
198
|
-
*
|
|
199
|
-
* - No one can decrypt memories for this context
|
|
200
|
-
* - Object is permanently deleted
|
|
201
|
-
*
|
|
202
|
-
* @param cap: The capability to burn (consumed)
|
|
203
|
-
*/
|
|
204
|
-
export function burnCap(options: BurnCapOptions) {
|
|
205
|
-
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
206
|
-
const argumentsTypes = [
|
|
207
|
-
`${packageAddress}::capability::MemoryCap`
|
|
208
|
-
] satisfies string[];
|
|
209
|
-
const parameterNames = ["cap"];
|
|
210
|
-
return (tx: Transaction) => tx.moveCall({
|
|
211
|
-
package: packageAddress,
|
|
212
|
-
module: 'capability',
|
|
213
|
-
function: 'burn_cap',
|
|
214
|
-
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
215
|
-
});
|
|
216
|
-
}
|
|
217
|
-
export interface GetAppIdArguments {
|
|
218
|
-
cap: RawTransactionArgument<string>;
|
|
219
|
-
}
|
|
220
|
-
export interface GetAppIdOptions {
|
|
221
|
-
package?: string;
|
|
222
|
-
arguments: GetAppIdArguments | [
|
|
223
|
-
cap: RawTransactionArgument<string>
|
|
224
|
-
];
|
|
225
|
-
}
|
|
226
|
-
/** Get the app_id from a capability */
|
|
227
|
-
export function getAppId(options: GetAppIdOptions) {
|
|
228
|
-
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
229
|
-
const argumentsTypes = [
|
|
230
|
-
`${packageAddress}::capability::MemoryCap`
|
|
231
|
-
] satisfies string[];
|
|
232
|
-
const parameterNames = ["cap"];
|
|
233
|
-
return (tx: Transaction) => tx.moveCall({
|
|
234
|
-
package: packageAddress,
|
|
235
|
-
module: 'capability',
|
|
236
|
-
function: 'get_app_id',
|
|
237
|
-
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
export interface GetNonceArguments {
|
|
241
|
-
cap: RawTransactionArgument<string>;
|
|
242
|
-
}
|
|
243
|
-
export interface GetNonceOptions {
|
|
244
|
-
package?: string;
|
|
245
|
-
arguments: GetNonceArguments | [
|
|
246
|
-
cap: RawTransactionArgument<string>
|
|
247
|
-
];
|
|
248
|
-
}
|
|
249
|
-
/** Get the nonce from a capability */
|
|
250
|
-
export function getNonce(options: GetNonceOptions) {
|
|
251
|
-
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
252
|
-
const argumentsTypes = [
|
|
253
|
-
`${packageAddress}::capability::MemoryCap`
|
|
254
|
-
] satisfies string[];
|
|
255
|
-
const parameterNames = ["cap"];
|
|
256
|
-
return (tx: Transaction) => tx.moveCall({
|
|
257
|
-
package: packageAddress,
|
|
258
|
-
module: 'capability',
|
|
259
|
-
function: 'get_nonce',
|
|
260
|
-
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
export interface GetCapIdArguments {
|
|
264
|
-
cap: RawTransactionArgument<string>;
|
|
265
|
-
}
|
|
266
|
-
export interface GetCapIdOptions {
|
|
267
|
-
package?: string;
|
|
268
|
-
arguments: GetCapIdArguments | [
|
|
269
|
-
cap: RawTransactionArgument<string>
|
|
270
|
-
];
|
|
271
|
-
}
|
|
272
|
-
/** Get the object ID of a capability */
|
|
273
|
-
export function getCapId(options: GetCapIdOptions) {
|
|
274
|
-
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
275
|
-
const argumentsTypes = [
|
|
276
|
-
`${packageAddress}::capability::MemoryCap`
|
|
277
|
-
] satisfies string[];
|
|
278
|
-
const parameterNames = ["cap"];
|
|
279
|
-
return (tx: Transaction) => tx.moveCall({
|
|
280
|
-
package: packageAddress,
|
|
281
|
-
module: 'capability',
|
|
282
|
-
function: 'get_cap_id',
|
|
283
|
-
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
284
|
-
});
|
|
285
|
-
}
|
|
286
|
-
export interface ComputeSealKeyIdArguments {
|
|
287
|
-
cap: RawTransactionArgument<string>;
|
|
288
|
-
owner: RawTransactionArgument<string>;
|
|
289
|
-
}
|
|
290
|
-
export interface ComputeSealKeyIdOptions {
|
|
291
|
-
package?: string;
|
|
292
|
-
arguments: ComputeSealKeyIdArguments | [
|
|
293
|
-
cap: RawTransactionArgument<string>,
|
|
294
|
-
owner: RawTransactionArgument<string>
|
|
295
|
-
];
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Compute the SEAL key_id for this capability
|
|
299
|
-
*
|
|
300
|
-
* This can be called off-chain to get the key_id needed for encryption. key_id =
|
|
301
|
-
* keccak256(owner || nonce)
|
|
302
|
-
*
|
|
303
|
-
* @param cap: Reference to the capability @param owner: Owner address (needed for
|
|
304
|
-
* key derivation) @return: The computed key_id bytes
|
|
305
|
-
*/
|
|
306
|
-
export function computeSealKeyId(options: ComputeSealKeyIdOptions) {
|
|
307
|
-
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
308
|
-
const argumentsTypes = [
|
|
309
|
-
`${packageAddress}::capability::MemoryCap`,
|
|
310
|
-
'address'
|
|
311
|
-
] satisfies string[];
|
|
312
|
-
const parameterNames = ["cap", "owner"];
|
|
313
|
-
return (tx: Transaction) => tx.moveCall({
|
|
314
|
-
package: packageAddress,
|
|
315
|
-
module: 'capability',
|
|
316
|
-
function: 'compute_seal_key_id',
|
|
317
|
-
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
318
|
-
});
|
|
319
|
-
}
|
|
1
|
+
/**************************************************************
|
|
2
|
+
* THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *
|
|
3
|
+
**************************************************************/
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Capability-based access control module for Personal Data Wallet
|
|
8
|
+
*
|
|
9
|
+
* This module implements the SEAL PrivateData pattern for simplified access
|
|
10
|
+
* control using Move's capability pattern.
|
|
11
|
+
*
|
|
12
|
+
* Key benefits:
|
|
13
|
+
*
|
|
14
|
+
* - 1 user wallet instead of N HD wallets
|
|
15
|
+
* - Object ownership = access permission (SEAL idiomatic)
|
|
16
|
+
* - No global registry needed
|
|
17
|
+
* - 60% gas savings vs allowlist pattern
|
|
18
|
+
* - Type-safe access control
|
|
19
|
+
*
|
|
20
|
+
* Pattern combines:
|
|
21
|
+
*
|
|
22
|
+
* - Move Capability Pattern (object = proof of permission)
|
|
23
|
+
* - SEAL PrivateData (nonce-based key derivation)
|
|
24
|
+
* - PDW Requirements (app contexts)
|
|
25
|
+
*
|
|
26
|
+
* Reference:
|
|
27
|
+
* https://github.com/MystenLabs/seal/blob/main/move/patterns/sources/private_data.move
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import { MoveStruct, normalizeMoveArguments, type RawTransactionArgument } from '../utils/index.js';
|
|
31
|
+
import { bcs } from '@mysten/sui/bcs';
|
|
32
|
+
import { type Transaction } from '@mysten/sui/transactions';
|
|
33
|
+
import * as object from './deps/sui/object.js';
|
|
34
|
+
const $moduleName = '@local-pkg/pdw::capability';
|
|
35
|
+
export const MemoryCap = new MoveStruct({ name: `${$moduleName}::MemoryCap`, fields: {
|
|
36
|
+
id: object.UID,
|
|
37
|
+
/**
|
|
38
|
+
* Random nonce for SEAL key derivation key_id = keccak256(package_id || owner ||
|
|
39
|
+
* nonce)
|
|
40
|
+
*/
|
|
41
|
+
nonce: bcs.vector(bcs.u8()),
|
|
42
|
+
/** Application context (e.g., "MEMO", "HEALTH") */
|
|
43
|
+
app_id: bcs.string()
|
|
44
|
+
} });
|
|
45
|
+
export const MemoryCapCreated = new MoveStruct({ name: `${$moduleName}::MemoryCapCreated`, fields: {
|
|
46
|
+
cap_id: bcs.Address,
|
|
47
|
+
owner: bcs.Address,
|
|
48
|
+
app_id: bcs.string(),
|
|
49
|
+
nonce: bcs.vector(bcs.u8()),
|
|
50
|
+
created_at: bcs.u64()
|
|
51
|
+
} });
|
|
52
|
+
export const MemoryCapTransferred = new MoveStruct({ name: `${$moduleName}::MemoryCapTransferred`, fields: {
|
|
53
|
+
cap_id: bcs.Address,
|
|
54
|
+
from: bcs.Address,
|
|
55
|
+
to: bcs.Address,
|
|
56
|
+
app_id: bcs.string()
|
|
57
|
+
} });
|
|
58
|
+
export const MemoryCapBurned = new MoveStruct({ name: `${$moduleName}::MemoryCapBurned`, fields: {
|
|
59
|
+
cap_id: bcs.Address,
|
|
60
|
+
owner: bcs.Address,
|
|
61
|
+
app_id: bcs.string()
|
|
62
|
+
} });
|
|
63
|
+
export const SealApproved = new MoveStruct({ name: `${$moduleName}::SealApproved`, fields: {
|
|
64
|
+
cap_id: bcs.Address,
|
|
65
|
+
owner: bcs.Address,
|
|
66
|
+
app_id: bcs.string(),
|
|
67
|
+
key_id: bcs.vector(bcs.u8())
|
|
68
|
+
} });
|
|
69
|
+
export interface CreateMemoryCapArguments {
|
|
70
|
+
appId: RawTransactionArgument<string>;
|
|
71
|
+
}
|
|
72
|
+
export interface CreateMemoryCapOptions {
|
|
73
|
+
package?: string;
|
|
74
|
+
arguments: CreateMemoryCapArguments | [
|
|
75
|
+
appId: RawTransactionArgument<string>
|
|
76
|
+
];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Create a new memory capability for an app context
|
|
80
|
+
*
|
|
81
|
+
* This creates a MemoryCap object owned by the caller. The capability can be used
|
|
82
|
+
* to:
|
|
83
|
+
*
|
|
84
|
+
* - Encrypt/decrypt memories for this app context
|
|
85
|
+
* - Share access by transferring the capability
|
|
86
|
+
*
|
|
87
|
+
* @param app_id: Application identifier (e.g., "MEMO", "HEALTH") @param ctx:
|
|
88
|
+
* Transaction context
|
|
89
|
+
*/
|
|
90
|
+
export function createMemoryCap(options: CreateMemoryCapOptions) {
|
|
91
|
+
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
92
|
+
const argumentsTypes = [
|
|
93
|
+
'0x0000000000000000000000000000000000000000000000000000000000000001::string::String'
|
|
94
|
+
] satisfies string[];
|
|
95
|
+
const parameterNames = ["appId"];
|
|
96
|
+
return (tx: Transaction) => tx.moveCall({
|
|
97
|
+
package: packageAddress,
|
|
98
|
+
module: 'capability',
|
|
99
|
+
function: 'create_memory_cap',
|
|
100
|
+
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
export interface SealApproveArguments {
|
|
104
|
+
cap: RawTransactionArgument<string>;
|
|
105
|
+
keyId: RawTransactionArgument<number[]>;
|
|
106
|
+
}
|
|
107
|
+
export interface SealApproveOptions {
|
|
108
|
+
package?: string;
|
|
109
|
+
arguments: SealApproveArguments | [
|
|
110
|
+
cap: RawTransactionArgument<string>,
|
|
111
|
+
keyId: RawTransactionArgument<number[]>
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* SEAL-compliant approval function
|
|
116
|
+
*
|
|
117
|
+
* This function follows the SEAL PrivateData pattern:
|
|
118
|
+
*
|
|
119
|
+
* - Entry function that aborts on denial (SEAL requirement)
|
|
120
|
+
* - Object holder can pass seal_approve
|
|
121
|
+
* - Any dApp can call with user's connected wallet
|
|
122
|
+
*
|
|
123
|
+
* Flow:
|
|
124
|
+
*
|
|
125
|
+
* 1. Verify caller owns the capability (via object reference)
|
|
126
|
+
* 2. Compute expected key_id from capability
|
|
127
|
+
* 3. Validate provided key_id matches
|
|
128
|
+
* 4. If valid, function returns (access granted)
|
|
129
|
+
* 5. If invalid, function aborts (access denied)
|
|
130
|
+
*
|
|
131
|
+
* @param cap: Reference to the MemoryCap object @param key_id: SEAL key identifier
|
|
132
|
+
* to validate @param ctx: Transaction context
|
|
133
|
+
*/
|
|
134
|
+
export function sealApprove(options: SealApproveOptions) {
|
|
135
|
+
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
136
|
+
const argumentsTypes = [
|
|
137
|
+
`${packageAddress}::capability::MemoryCap`,
|
|
138
|
+
'vector<u8>'
|
|
139
|
+
] satisfies string[];
|
|
140
|
+
const parameterNames = ["cap", "keyId"];
|
|
141
|
+
return (tx: Transaction) => tx.moveCall({
|
|
142
|
+
package: packageAddress,
|
|
143
|
+
module: 'capability',
|
|
144
|
+
function: 'seal_approve',
|
|
145
|
+
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
export interface TransferCapArguments {
|
|
149
|
+
cap: RawTransactionArgument<string>;
|
|
150
|
+
recipient: RawTransactionArgument<string>;
|
|
151
|
+
}
|
|
152
|
+
export interface TransferCapOptions {
|
|
153
|
+
package?: string;
|
|
154
|
+
arguments: TransferCapArguments | [
|
|
155
|
+
cap: RawTransactionArgument<string>,
|
|
156
|
+
recipient: RawTransactionArgument<string>
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Transfer capability to another address (for delegation/sharing)
|
|
161
|
+
*
|
|
162
|
+
* After transfer:
|
|
163
|
+
*
|
|
164
|
+
* - New owner can call seal_approve
|
|
165
|
+
* - New owner can decrypt memories
|
|
166
|
+
* - Original owner loses access
|
|
167
|
+
*
|
|
168
|
+
* @param cap: The capability to transfer (consumed) @param recipient: Address to
|
|
169
|
+
* receive the capability
|
|
170
|
+
*/
|
|
171
|
+
export function transferCap(options: TransferCapOptions) {
|
|
172
|
+
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
173
|
+
const argumentsTypes = [
|
|
174
|
+
`${packageAddress}::capability::MemoryCap`,
|
|
175
|
+
'address'
|
|
176
|
+
] satisfies string[];
|
|
177
|
+
const parameterNames = ["cap", "recipient"];
|
|
178
|
+
return (tx: Transaction) => tx.moveCall({
|
|
179
|
+
package: packageAddress,
|
|
180
|
+
module: 'capability',
|
|
181
|
+
function: 'transfer_cap',
|
|
182
|
+
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
export interface BurnCapArguments {
|
|
186
|
+
cap: RawTransactionArgument<string>;
|
|
187
|
+
}
|
|
188
|
+
export interface BurnCapOptions {
|
|
189
|
+
package?: string;
|
|
190
|
+
arguments: BurnCapArguments | [
|
|
191
|
+
cap: RawTransactionArgument<string>
|
|
192
|
+
];
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Burn (delete) a capability
|
|
196
|
+
*
|
|
197
|
+
* This permanently revokes the capability. After burning:
|
|
198
|
+
*
|
|
199
|
+
* - No one can decrypt memories for this context
|
|
200
|
+
* - Object is permanently deleted
|
|
201
|
+
*
|
|
202
|
+
* @param cap: The capability to burn (consumed)
|
|
203
|
+
*/
|
|
204
|
+
export function burnCap(options: BurnCapOptions) {
|
|
205
|
+
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
206
|
+
const argumentsTypes = [
|
|
207
|
+
`${packageAddress}::capability::MemoryCap`
|
|
208
|
+
] satisfies string[];
|
|
209
|
+
const parameterNames = ["cap"];
|
|
210
|
+
return (tx: Transaction) => tx.moveCall({
|
|
211
|
+
package: packageAddress,
|
|
212
|
+
module: 'capability',
|
|
213
|
+
function: 'burn_cap',
|
|
214
|
+
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
export interface GetAppIdArguments {
|
|
218
|
+
cap: RawTransactionArgument<string>;
|
|
219
|
+
}
|
|
220
|
+
export interface GetAppIdOptions {
|
|
221
|
+
package?: string;
|
|
222
|
+
arguments: GetAppIdArguments | [
|
|
223
|
+
cap: RawTransactionArgument<string>
|
|
224
|
+
];
|
|
225
|
+
}
|
|
226
|
+
/** Get the app_id from a capability */
|
|
227
|
+
export function getAppId(options: GetAppIdOptions) {
|
|
228
|
+
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
229
|
+
const argumentsTypes = [
|
|
230
|
+
`${packageAddress}::capability::MemoryCap`
|
|
231
|
+
] satisfies string[];
|
|
232
|
+
const parameterNames = ["cap"];
|
|
233
|
+
return (tx: Transaction) => tx.moveCall({
|
|
234
|
+
package: packageAddress,
|
|
235
|
+
module: 'capability',
|
|
236
|
+
function: 'get_app_id',
|
|
237
|
+
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
export interface GetNonceArguments {
|
|
241
|
+
cap: RawTransactionArgument<string>;
|
|
242
|
+
}
|
|
243
|
+
export interface GetNonceOptions {
|
|
244
|
+
package?: string;
|
|
245
|
+
arguments: GetNonceArguments | [
|
|
246
|
+
cap: RawTransactionArgument<string>
|
|
247
|
+
];
|
|
248
|
+
}
|
|
249
|
+
/** Get the nonce from a capability */
|
|
250
|
+
export function getNonce(options: GetNonceOptions) {
|
|
251
|
+
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
252
|
+
const argumentsTypes = [
|
|
253
|
+
`${packageAddress}::capability::MemoryCap`
|
|
254
|
+
] satisfies string[];
|
|
255
|
+
const parameterNames = ["cap"];
|
|
256
|
+
return (tx: Transaction) => tx.moveCall({
|
|
257
|
+
package: packageAddress,
|
|
258
|
+
module: 'capability',
|
|
259
|
+
function: 'get_nonce',
|
|
260
|
+
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
export interface GetCapIdArguments {
|
|
264
|
+
cap: RawTransactionArgument<string>;
|
|
265
|
+
}
|
|
266
|
+
export interface GetCapIdOptions {
|
|
267
|
+
package?: string;
|
|
268
|
+
arguments: GetCapIdArguments | [
|
|
269
|
+
cap: RawTransactionArgument<string>
|
|
270
|
+
];
|
|
271
|
+
}
|
|
272
|
+
/** Get the object ID of a capability */
|
|
273
|
+
export function getCapId(options: GetCapIdOptions) {
|
|
274
|
+
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
275
|
+
const argumentsTypes = [
|
|
276
|
+
`${packageAddress}::capability::MemoryCap`
|
|
277
|
+
] satisfies string[];
|
|
278
|
+
const parameterNames = ["cap"];
|
|
279
|
+
return (tx: Transaction) => tx.moveCall({
|
|
280
|
+
package: packageAddress,
|
|
281
|
+
module: 'capability',
|
|
282
|
+
function: 'get_cap_id',
|
|
283
|
+
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
export interface ComputeSealKeyIdArguments {
|
|
287
|
+
cap: RawTransactionArgument<string>;
|
|
288
|
+
owner: RawTransactionArgument<string>;
|
|
289
|
+
}
|
|
290
|
+
export interface ComputeSealKeyIdOptions {
|
|
291
|
+
package?: string;
|
|
292
|
+
arguments: ComputeSealKeyIdArguments | [
|
|
293
|
+
cap: RawTransactionArgument<string>,
|
|
294
|
+
owner: RawTransactionArgument<string>
|
|
295
|
+
];
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Compute the SEAL key_id for this capability
|
|
299
|
+
*
|
|
300
|
+
* This can be called off-chain to get the key_id needed for encryption. key_id =
|
|
301
|
+
* keccak256(owner || nonce)
|
|
302
|
+
*
|
|
303
|
+
* @param cap: Reference to the capability @param owner: Owner address (needed for
|
|
304
|
+
* key derivation) @return: The computed key_id bytes
|
|
305
|
+
*/
|
|
306
|
+
export function computeSealKeyId(options: ComputeSealKeyIdOptions) {
|
|
307
|
+
const packageAddress = options.package ?? '@local-pkg/pdw';
|
|
308
|
+
const argumentsTypes = [
|
|
309
|
+
`${packageAddress}::capability::MemoryCap`,
|
|
310
|
+
'address'
|
|
311
|
+
] satisfies string[];
|
|
312
|
+
const parameterNames = ["cap", "owner"];
|
|
313
|
+
return (tx: Transaction) => tx.moveCall({
|
|
314
|
+
package: packageAddress,
|
|
315
|
+
module: 'capability',
|
|
316
|
+
function: 'compute_seal_key_id',
|
|
317
|
+
arguments: normalizeMoveArguments(options.arguments, argumentsTypes, parameterNames),
|
|
318
|
+
});
|
|
319
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
/**************************************************************
|
|
2
|
-
* THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *
|
|
3
|
-
**************************************************************/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
/** Sui object identifiers */
|
|
7
|
-
|
|
8
|
-
import { MoveStruct } from '../../../utils/index.js';
|
|
9
|
-
import { bcs } from '@mysten/sui/bcs';
|
|
10
|
-
const $moduleName = '0x2::object';
|
|
11
|
-
export const UID = new MoveStruct({ name: `${$moduleName}::UID`, fields: {
|
|
12
|
-
id: bcs.Address
|
|
1
|
+
/**************************************************************
|
|
2
|
+
* THIS FILE IS GENERATED AND SHOULD NOT BE MANUALLY MODIFIED *
|
|
3
|
+
**************************************************************/
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
/** Sui object identifiers */
|
|
7
|
+
|
|
8
|
+
import { MoveStruct } from '../../../utils/index.js';
|
|
9
|
+
import { bcs } from '@mysten/sui/bcs';
|
|
10
|
+
const $moduleName = '0x2::object';
|
|
11
|
+
export const UID = new MoveStruct({ name: `${$moduleName}::UID`, fields: {
|
|
12
|
+
id: bcs.Address
|
|
13
13
|
} });
|