@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.
@@ -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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"}
@@ -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":"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"}
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
+ }