@zksdk/js-private-token-slots-fhe 0.1.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/dist/Client.d.ts +92 -0
- package/dist/Client.d.ts.map +1 -0
- package/dist/Client.js +127 -0
- package/dist/Client.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/vaultHelpers.d.ts +62 -0
- package/dist/vaultHelpers.d.ts.map +1 -0
- package/dist/vaultHelpers.js +108 -0
- package/dist/vaultHelpers.js.map +1 -0
- package/package.json +42 -0
package/dist/Client.d.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client for Private Token Slots
|
|
3
|
+
*
|
|
4
|
+
* Manages vault registration, key storage, and transfer operations.
|
|
5
|
+
*/
|
|
6
|
+
import { type VaultParams } from './vaultHelpers.js';
|
|
7
|
+
/** Client configuration */
|
|
8
|
+
export interface ClientConfig {
|
|
9
|
+
/** FHE Worker URL */
|
|
10
|
+
workerUrl: string;
|
|
11
|
+
/** Optional API key for authentication */
|
|
12
|
+
apiKey?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Client - Main client for private token slot operations
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { Client } from '@zksdk/private-token-slots';
|
|
20
|
+
*
|
|
21
|
+
* const client = new Client({ workerUrl: 'http://localhost:8000' });
|
|
22
|
+
*
|
|
23
|
+
* // Create a new vault
|
|
24
|
+
* const { vaultKeyId, clientKey } = await client.createVault();
|
|
25
|
+
* // Save clientKey securely - you need it to decrypt!
|
|
26
|
+
*
|
|
27
|
+
* // Encrypt a transfer
|
|
28
|
+
* const encrypted = await client.encryptTransfer(0, 1, 50);
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare class Client {
|
|
32
|
+
private config;
|
|
33
|
+
private tfheClient;
|
|
34
|
+
private vaultKeyId;
|
|
35
|
+
private clientKeyB64;
|
|
36
|
+
constructor(config: ClientConfig);
|
|
37
|
+
/**
|
|
38
|
+
* Initialize the client
|
|
39
|
+
*/
|
|
40
|
+
init(): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Create a new vault with client-side key generation
|
|
43
|
+
*
|
|
44
|
+
* SECURITY: ClientKey stays on your machine!
|
|
45
|
+
*/
|
|
46
|
+
createVault(): Promise<{
|
|
47
|
+
vaultKeyId: string;
|
|
48
|
+
clientKey: string;
|
|
49
|
+
serverKey: string;
|
|
50
|
+
publicKey: string;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Load an existing vault by ID
|
|
54
|
+
*
|
|
55
|
+
* @param vaultKeyId - 64-char hex vault key ID
|
|
56
|
+
* @param clientKeyB64 - Your saved ClientKey (for decryption)
|
|
57
|
+
*/
|
|
58
|
+
loadVault(vaultKeyId: string, clientKeyB64?: string): Promise<VaultParams>;
|
|
59
|
+
/**
|
|
60
|
+
* Get current vault key ID
|
|
61
|
+
*/
|
|
62
|
+
getVaultKeyId(): string | null;
|
|
63
|
+
/**
|
|
64
|
+
* Encrypt transfer parameters
|
|
65
|
+
*
|
|
66
|
+
* @param senderIdx - Sender's slot index (0-255)
|
|
67
|
+
* @param receiverIdx - Receiver's slot index (0-255)
|
|
68
|
+
* @param amount - Transfer amount (0-255)
|
|
69
|
+
*/
|
|
70
|
+
encryptTransfer(senderIdx: number, receiverIdx: number, amount: number): {
|
|
71
|
+
encrypted_data: string;
|
|
72
|
+
vault_key_id: string;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Store encrypted balance blob
|
|
76
|
+
*/
|
|
77
|
+
storeBalanceBlob(encryptedBlob: string): Promise<string>;
|
|
78
|
+
/**
|
|
79
|
+
* Fetch encrypted balance blob by CID
|
|
80
|
+
*/
|
|
81
|
+
fetchBalanceBlob(cid: string): Promise<string>;
|
|
82
|
+
/**
|
|
83
|
+
* Decrypt CMUX token result
|
|
84
|
+
*
|
|
85
|
+
* Requires ClientKey - only vault owner can call this!
|
|
86
|
+
*/
|
|
87
|
+
decryptResult(encryptedResultB64: string): {
|
|
88
|
+
balances: number[];
|
|
89
|
+
isValid: boolean;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=Client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAE3B,2BAA2B;AAC3B,MAAM,WAAW,YAAY;IAC3B,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,YAAY,CAAuB;gBAE/B,MAAM,EAAE,YAAY;IAKhC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;;OAIG;IACG,WAAW,IAAI,OAAO,CAAC;QAC3B,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IA2BF;;;;;OAKG;IACG,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAmBhF;;OAEG;IACH,aAAa,IAAI,MAAM,GAAG,IAAI;IAI9B;;;;;;OAMG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QACvE,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;KACtB;IAaD;;OAEG;IACG,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9D;;OAEG;IACG,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpD;;;;OAIG;IACH,aAAa,CAAC,kBAAkB,EAAE,MAAM,GAAG;QACzC,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;KAClB;CAOF"}
|
package/dist/Client.js
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client for Private Token Slots
|
|
3
|
+
*
|
|
4
|
+
* Manages vault registration, key storage, and transfer operations.
|
|
5
|
+
*/
|
|
6
|
+
import { TfheClient } from '@zksdk/core';
|
|
7
|
+
import { registerVault, getVaultParams, storeData, fetchData, } from './vaultHelpers.js';
|
|
8
|
+
/**
|
|
9
|
+
* Client - Main client for private token slot operations
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { Client } from '@zksdk/private-token-slots';
|
|
14
|
+
*
|
|
15
|
+
* const client = new Client({ workerUrl: 'http://localhost:8000' });
|
|
16
|
+
*
|
|
17
|
+
* // Create a new vault
|
|
18
|
+
* const { vaultKeyId, clientKey } = await client.createVault();
|
|
19
|
+
* // Save clientKey securely - you need it to decrypt!
|
|
20
|
+
*
|
|
21
|
+
* // Encrypt a transfer
|
|
22
|
+
* const encrypted = await client.encryptTransfer(0, 1, 50);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export class Client {
|
|
26
|
+
constructor(config) {
|
|
27
|
+
this.vaultKeyId = null;
|
|
28
|
+
this.clientKeyB64 = null;
|
|
29
|
+
this.config = config;
|
|
30
|
+
this.tfheClient = new TfheClient();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Initialize the client
|
|
34
|
+
*/
|
|
35
|
+
async init() {
|
|
36
|
+
await this.tfheClient.init();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create a new vault with client-side key generation
|
|
40
|
+
*
|
|
41
|
+
* SECURITY: ClientKey stays on your machine!
|
|
42
|
+
*/
|
|
43
|
+
async createVault() {
|
|
44
|
+
await this.init();
|
|
45
|
+
// Generate keys client-side
|
|
46
|
+
const keys = await this.tfheClient.generateVaultKeys();
|
|
47
|
+
// Register vault with worker (only server + public keys sent)
|
|
48
|
+
const registration = await registerVault(this.config.workerUrl, keys.serverKey, keys.publicKey, this.config.apiKey);
|
|
49
|
+
this.vaultKeyId = registration.vault_key_id;
|
|
50
|
+
this.clientKeyB64 = keys.clientKey;
|
|
51
|
+
console.log(`Vault created: ${registration.vault_key_id}`);
|
|
52
|
+
return {
|
|
53
|
+
vaultKeyId: registration.vault_key_id,
|
|
54
|
+
clientKey: keys.clientKey,
|
|
55
|
+
serverKey: keys.serverKey,
|
|
56
|
+
publicKey: keys.publicKey,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Load an existing vault by ID
|
|
61
|
+
*
|
|
62
|
+
* @param vaultKeyId - 64-char hex vault key ID
|
|
63
|
+
* @param clientKeyB64 - Your saved ClientKey (for decryption)
|
|
64
|
+
*/
|
|
65
|
+
async loadVault(vaultKeyId, clientKeyB64) {
|
|
66
|
+
await this.init();
|
|
67
|
+
// Verify vault exists
|
|
68
|
+
const params = await getVaultParams(this.config.workerUrl, vaultKeyId);
|
|
69
|
+
this.vaultKeyId = vaultKeyId;
|
|
70
|
+
if (clientKeyB64) {
|
|
71
|
+
this.clientKeyB64 = clientKeyB64;
|
|
72
|
+
this.tfheClient.loadClientKey(clientKeyB64);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
// External user - load public key for encryption only
|
|
76
|
+
await this.tfheClient.loadVaultPublicKey(this.config.workerUrl, vaultKeyId);
|
|
77
|
+
}
|
|
78
|
+
return params;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get current vault key ID
|
|
82
|
+
*/
|
|
83
|
+
getVaultKeyId() {
|
|
84
|
+
return this.vaultKeyId;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Encrypt transfer parameters
|
|
88
|
+
*
|
|
89
|
+
* @param senderIdx - Sender's slot index (0-255)
|
|
90
|
+
* @param receiverIdx - Receiver's slot index (0-255)
|
|
91
|
+
* @param amount - Transfer amount (0-255)
|
|
92
|
+
*/
|
|
93
|
+
encryptTransfer(senderIdx, receiverIdx, amount) {
|
|
94
|
+
if (!this.vaultKeyId) {
|
|
95
|
+
throw new Error('No vault loaded. Call createVault() or loadVault() first.');
|
|
96
|
+
}
|
|
97
|
+
const { encrypted_data } = this.tfheClient.encryptTransferParams(senderIdx, receiverIdx, amount);
|
|
98
|
+
return {
|
|
99
|
+
encrypted_data,
|
|
100
|
+
vault_key_id: this.vaultKeyId,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Store encrypted balance blob
|
|
105
|
+
*/
|
|
106
|
+
async storeBalanceBlob(encryptedBlob) {
|
|
107
|
+
return storeData(this.config.workerUrl, encryptedBlob, this.config.apiKey);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Fetch encrypted balance blob by CID
|
|
111
|
+
*/
|
|
112
|
+
async fetchBalanceBlob(cid) {
|
|
113
|
+
return fetchData(this.config.workerUrl, cid);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Decrypt CMUX token result
|
|
117
|
+
*
|
|
118
|
+
* Requires ClientKey - only vault owner can call this!
|
|
119
|
+
*/
|
|
120
|
+
decryptResult(encryptedResultB64) {
|
|
121
|
+
if (!this.clientKeyB64) {
|
|
122
|
+
throw new Error('No ClientKey loaded. Only vault owner can decrypt.');
|
|
123
|
+
}
|
|
124
|
+
return this.tfheClient.decryptCmuxToken(encryptedResultB64);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=Client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zksdk/private-token-slots - Vault management for private token transfers
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { SlotVaultClient } from '@zksdk/private-token-slots';
|
|
7
|
+
*
|
|
8
|
+
* const client = new SlotVaultClient({ workerUrl: 'http://localhost:8000' });
|
|
9
|
+
*
|
|
10
|
+
* // Create a vault
|
|
11
|
+
* const { vaultKeyId, clientKey } = await client.createVault();
|
|
12
|
+
* // IMPORTANT: Save clientKey securely!
|
|
13
|
+
*
|
|
14
|
+
* // Encrypt a transfer
|
|
15
|
+
* const encrypted = client.encryptTransfer(0, 1, 50);
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export { Client, type ClientConfig } from './Client.js';
|
|
19
|
+
export { Client as SlotVaultClient } from './Client.js';
|
|
20
|
+
export { registerVault, getVaultParams, getVaultPublicKey, vaultExists, storeData, fetchData, type VaultParams, } from './vaultHelpers.js';
|
|
21
|
+
/** Circuit ID for private token slots */
|
|
22
|
+
export declare const CIRCUIT_ID = "private_token_slots_v1";
|
|
23
|
+
/** Legacy circuit ID (deprecated) */
|
|
24
|
+
export declare const CIRCUIT_ID_LEGACY = "cmux_token_v1_linear";
|
|
25
|
+
/** Package version */
|
|
26
|
+
export declare const VERSION = "0.1.0";
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EACL,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,SAAS,EACT,KAAK,WAAW,GACjB,MAAM,mBAAmB,CAAC;AAE3B,yCAAyC;AACzC,eAAO,MAAM,UAAU,2BAA2B,CAAC;AACnD,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,yBAAyB,CAAC;AAExD,sBAAsB;AACtB,eAAO,MAAM,OAAO,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zksdk/private-token-slots - Vault management for private token transfers
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* import { SlotVaultClient } from '@zksdk/private-token-slots';
|
|
7
|
+
*
|
|
8
|
+
* const client = new SlotVaultClient({ workerUrl: 'http://localhost:8000' });
|
|
9
|
+
*
|
|
10
|
+
* // Create a vault
|
|
11
|
+
* const { vaultKeyId, clientKey } = await client.createVault();
|
|
12
|
+
* // IMPORTANT: Save clientKey securely!
|
|
13
|
+
*
|
|
14
|
+
* // Encrypt a transfer
|
|
15
|
+
* const encrypted = client.encryptTransfer(0, 1, 50);
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export { Client } from './Client.js';
|
|
19
|
+
// Export SlotVaultClient as an alias for better developer experience
|
|
20
|
+
export { Client as SlotVaultClient } from './Client.js';
|
|
21
|
+
export { registerVault, getVaultParams, getVaultPublicKey, vaultExists, storeData, fetchData, } from './vaultHelpers.js';
|
|
22
|
+
/** Circuit ID for private token slots */
|
|
23
|
+
export const CIRCUIT_ID = 'private_token_slots_v1';
|
|
24
|
+
/** Legacy circuit ID (deprecated) */
|
|
25
|
+
export const CIRCUIT_ID_LEGACY = 'cmux_token_v1_linear';
|
|
26
|
+
/** Package version */
|
|
27
|
+
export const VERSION = '0.1.0';
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AAExD,qEAAqE;AACrE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EACL,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,SAAS,GAEV,MAAM,mBAAmB,CAAC;AAE3B,yCAAyC;AACzC,MAAM,CAAC,MAAM,UAAU,GAAG,wBAAwB,CAAC;AACnD,qCAAqC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AAExD,sBAAsB;AACtB,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault Helper Functions for Private Token Slots
|
|
3
|
+
*
|
|
4
|
+
* These functions interact with the FHE Worker API to manage vaults.
|
|
5
|
+
*/
|
|
6
|
+
import type { VaultRegistration } from '@zksdk/core';
|
|
7
|
+
/** Vault parameters returned from worker */
|
|
8
|
+
export interface VaultParams {
|
|
9
|
+
vault_key_id: string;
|
|
10
|
+
num_slots: number;
|
|
11
|
+
created_at: string;
|
|
12
|
+
}
|
|
13
|
+
/** Options for vault registration */
|
|
14
|
+
export interface RegisterVaultOptions {
|
|
15
|
+
workerUrl: string;
|
|
16
|
+
serverKeyB64: string;
|
|
17
|
+
publicKeyB64: string;
|
|
18
|
+
numSlots?: number;
|
|
19
|
+
apiKey?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Register a new vault with the FHE worker
|
|
23
|
+
*
|
|
24
|
+
* SECURITY: Only ServerKey and PublicKey are sent.
|
|
25
|
+
* ClientKey stays on your machine!
|
|
26
|
+
*
|
|
27
|
+
* @param options - Registration options
|
|
28
|
+
* @param options.workerUrl - FHE Worker base URL
|
|
29
|
+
* @param options.serverKeyB64 - Base64 encoded ServerKey
|
|
30
|
+
* @param options.publicKeyB64 - Base64 encoded PublicKey
|
|
31
|
+
* @param options.numSlots - Number of balance slots (1-256, default 32)
|
|
32
|
+
* @param options.apiKey - Optional API key for authentication
|
|
33
|
+
*/
|
|
34
|
+
export declare function registerVault(options: RegisterVaultOptions): Promise<VaultRegistration>;
|
|
35
|
+
/**
|
|
36
|
+
* Register a new vault with the FHE worker (legacy signature)
|
|
37
|
+
* @deprecated Use options object signature instead
|
|
38
|
+
*/
|
|
39
|
+
export declare function registerVault(workerUrl: string, serverKeyB64: string, publicKeyB64: string, apiKey?: string): Promise<VaultRegistration>;
|
|
40
|
+
/**
|
|
41
|
+
* Get vault parameters
|
|
42
|
+
*/
|
|
43
|
+
export declare function getVaultParams(workerUrl: string, vaultKeyId: string): Promise<VaultParams>;
|
|
44
|
+
/**
|
|
45
|
+
* Get vault's public key for encryption
|
|
46
|
+
*/
|
|
47
|
+
export declare function getVaultPublicKey(workerUrl: string, vaultKeyId: string): Promise<string>;
|
|
48
|
+
/**
|
|
49
|
+
* Check if vault exists
|
|
50
|
+
*/
|
|
51
|
+
export declare function vaultExists(workerUrl: string, vaultKeyId: string): Promise<boolean>;
|
|
52
|
+
/**
|
|
53
|
+
* Store encrypted data in worker storage
|
|
54
|
+
*
|
|
55
|
+
* @returns CID (content identifier) for retrieval
|
|
56
|
+
*/
|
|
57
|
+
export declare function storeData(workerUrl: string, data: string, apiKey?: string): Promise<string>;
|
|
58
|
+
/**
|
|
59
|
+
* Fetch encrypted data by CID
|
|
60
|
+
*/
|
|
61
|
+
export declare function fetchData(workerUrl: string, cid: string): Promise<string>;
|
|
62
|
+
//# sourceMappingURL=vaultHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultHelpers.d.ts","sourceRoot":"","sources":["../src/vaultHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qCAAqC;AACrC,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC/F;;;GAGG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAAC;AA4C9B;;GAEG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,CAAC,CAStB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAsBjB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,CAAC,CAUjB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vault Helper Functions for Private Token Slots
|
|
3
|
+
*
|
|
4
|
+
* These functions interact with the FHE Worker API to manage vaults.
|
|
5
|
+
*/
|
|
6
|
+
export async function registerVault(optionsOrWorkerUrl, serverKeyB64, publicKeyB64, apiKey) {
|
|
7
|
+
// Normalize to options object
|
|
8
|
+
const options = typeof optionsOrWorkerUrl === 'string'
|
|
9
|
+
? {
|
|
10
|
+
workerUrl: optionsOrWorkerUrl,
|
|
11
|
+
serverKeyB64: serverKeyB64,
|
|
12
|
+
publicKeyB64: publicKeyB64,
|
|
13
|
+
apiKey,
|
|
14
|
+
}
|
|
15
|
+
: optionsOrWorkerUrl;
|
|
16
|
+
const headers = {
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
};
|
|
19
|
+
if (options.apiKey) {
|
|
20
|
+
headers['X-API-Key'] = options.apiKey;
|
|
21
|
+
}
|
|
22
|
+
const response = await fetch(`${options.workerUrl}/api/v1/vault/register`, {
|
|
23
|
+
method: 'POST',
|
|
24
|
+
headers,
|
|
25
|
+
body: JSON.stringify({
|
|
26
|
+
server_key: options.serverKeyB64,
|
|
27
|
+
public_key: options.publicKeyB64,
|
|
28
|
+
num_slots: options.numSlots,
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
const error = await response.text();
|
|
33
|
+
throw new Error(`Failed to register vault: ${error}`);
|
|
34
|
+
}
|
|
35
|
+
return response.json();
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get vault parameters
|
|
39
|
+
*/
|
|
40
|
+
export async function getVaultParams(workerUrl, vaultKeyId) {
|
|
41
|
+
const response = await fetch(`${workerUrl}/api/v1/vault/${vaultKeyId}`);
|
|
42
|
+
if (!response.ok) {
|
|
43
|
+
const error = await response.text();
|
|
44
|
+
throw new Error(`Failed to get vault params: ${error}`);
|
|
45
|
+
}
|
|
46
|
+
return response.json();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Get vault's public key for encryption
|
|
50
|
+
*/
|
|
51
|
+
export async function getVaultPublicKey(workerUrl, vaultKeyId) {
|
|
52
|
+
const response = await fetch(`${workerUrl}/api/v1/vault/${vaultKeyId}/public-key`);
|
|
53
|
+
if (!response.ok) {
|
|
54
|
+
const error = await response.text();
|
|
55
|
+
throw new Error(`Failed to get vault public key: ${error}`);
|
|
56
|
+
}
|
|
57
|
+
const data = await response.json();
|
|
58
|
+
return data.public_key;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Check if vault exists
|
|
62
|
+
*/
|
|
63
|
+
export async function vaultExists(workerUrl, vaultKeyId) {
|
|
64
|
+
try {
|
|
65
|
+
const response = await fetch(`${workerUrl}/api/v1/vault/${vaultKeyId}`);
|
|
66
|
+
return response.ok;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Store encrypted data in worker storage
|
|
74
|
+
*
|
|
75
|
+
* @returns CID (content identifier) for retrieval
|
|
76
|
+
*/
|
|
77
|
+
export async function storeData(workerUrl, data, apiKey) {
|
|
78
|
+
const headers = {
|
|
79
|
+
'Content-Type': 'application/json',
|
|
80
|
+
};
|
|
81
|
+
if (apiKey) {
|
|
82
|
+
headers['X-API-Key'] = apiKey;
|
|
83
|
+
}
|
|
84
|
+
const response = await fetch(`${workerUrl}/api/v1/storage`, {
|
|
85
|
+
method: 'POST',
|
|
86
|
+
headers,
|
|
87
|
+
body: JSON.stringify({ data }),
|
|
88
|
+
});
|
|
89
|
+
if (!response.ok) {
|
|
90
|
+
const error = await response.text();
|
|
91
|
+
throw new Error(`Failed to store data: ${error}`);
|
|
92
|
+
}
|
|
93
|
+
const result = await response.json();
|
|
94
|
+
return result.cid;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Fetch encrypted data by CID
|
|
98
|
+
*/
|
|
99
|
+
export async function fetchData(workerUrl, cid) {
|
|
100
|
+
const response = await fetch(`${workerUrl}/api/v1/storage/${cid}`);
|
|
101
|
+
if (!response.ok) {
|
|
102
|
+
const error = await response.text();
|
|
103
|
+
throw new Error(`Failed to fetch data: ${error}`);
|
|
104
|
+
}
|
|
105
|
+
const result = await response.json();
|
|
106
|
+
return result.data;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=vaultHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultHelpers.js","sourceRoot":"","sources":["../src/vaultHelpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA4CH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,kBAAiD,EACjD,YAAqB,EACrB,YAAqB,EACrB,MAAe;IAEf,8BAA8B;IAC9B,MAAM,OAAO,GACX,OAAO,kBAAkB,KAAK,QAAQ;QACpC,CAAC,CAAC;YACE,SAAS,EAAE,kBAAkB;YAC7B,YAAY,EAAE,YAAa;YAC3B,YAAY,EAAE,YAAa;YAC3B,MAAM;SACP;QACH,CAAC,CAAC,kBAAkB,CAAC;IAEzB,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,wBAAwB,EAAE;QACzE,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,UAAU,EAAE,OAAO,CAAC,YAAY;YAChC,UAAU,EAAE,OAAO,CAAC,YAAY;YAChC,SAAS,EAAE,OAAO,CAAC,QAAQ;SAC5B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,6BAA6B,KAAK,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,UAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,iBAAiB,UAAU,EAAE,CAAC,CAAC;IAExE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAiB,EACjB,UAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,iBAAiB,UAAU,aAAa,CAAC,CAAC;IAEnF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC,UAAU,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAiB,EACjB,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,iBAAiB,UAAU,EAAE,CAAC,CAAC;QACxE,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAAiB,EACjB,IAAY,EACZ,MAAe;IAEf,MAAM,OAAO,GAA2B;QACtC,cAAc,EAAE,kBAAkB;KACnC,CAAC;IAEF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,iBAAiB,EAAE;QAC1D,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;KAC/B,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAAiB,EACjB,GAAW;IAEX,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,mBAAmB,GAAG,EAAE,CAAC,CAAC;IAEnE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zksdk/js-private-token-slots-fhe",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "ZKSDK Private Token Slots (FHE) - FHE-powered vault management for private token transfers",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc",
|
|
19
|
+
"clean": "rm -rf dist",
|
|
20
|
+
"prepublishOnly": "npm run build"
|
|
21
|
+
},
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public",
|
|
24
|
+
"registry": "https://registry.npmjs.org/"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@zksdk/core": "^0.1.1"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"zksdk",
|
|
31
|
+
"privacy",
|
|
32
|
+
"fhe",
|
|
33
|
+
"token",
|
|
34
|
+
"vault",
|
|
35
|
+
"slots"
|
|
36
|
+
],
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^22.0.0",
|
|
40
|
+
"typescript": "^5.3.0"
|
|
41
|
+
}
|
|
42
|
+
}
|