@chipi-stack/backend 11.9.0 → 11.10.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/dist/index.d.mts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +35 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +35 -13
- package/dist/index.mjs.map +1 -1
- package/dist/skuTransactions.d.mts +1 -1
- package/dist/skuTransactions.d.ts +1 -1
- package/dist/skuTransactions.js +4 -4
- package/dist/skuTransactions.js.map +1 -1
- package/dist/skuTransactions.mjs +4 -4
- package/dist/skuTransactions.mjs.map +1 -1
- package/dist/skus.d.mts +14 -7
- package/dist/skus.d.ts +14 -7
- package/dist/skus.js +20 -8
- package/dist/skus.js.map +1 -1
- package/dist/skus.mjs +20 -8
- package/dist/skus.mjs.map +1 -1
- package/dist/transactions.js +3 -3
- package/dist/transactions.js.map +1 -1
- package/dist/transactions.mjs +3 -3
- package/dist/transactions.mjs.map +1 -1
- package/package.json +3 -3
package/dist/skus.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GetSkuListQuery, PaginatedResponse, Sku } from '@chipi-stack/types';
|
|
2
2
|
import { C as ChipiClient } from './client-CqyuW1C1.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -8,12 +8,19 @@ declare class ChipiSkus {
|
|
|
8
8
|
private client;
|
|
9
9
|
constructor(client: ChipiClient);
|
|
10
10
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
* Get available SKUs for purchase with pagination
|
|
12
|
+
* @param bearerToken - Authentication token for API calls
|
|
13
|
+
* @param query - Pagination query parameters
|
|
14
|
+
* @returns Promise<PaginatedResponse<Sku>> - Paginated list of available SKUs
|
|
15
|
+
*/
|
|
16
|
+
getSkuList(params: GetSkuListQuery, bearerToken: string): Promise<PaginatedResponse<Sku>>;
|
|
17
|
+
/**
|
|
18
|
+
* Get a single SKU by ID
|
|
19
|
+
* @param bearerToken - Authentication token for API calls
|
|
20
|
+
* @param id - SKU ID
|
|
21
|
+
* @returns Promise<Sku> - Single SKU
|
|
22
|
+
*/
|
|
23
|
+
getSku(id: string, bearerToken: string): Promise<Sku>;
|
|
17
24
|
}
|
|
18
25
|
|
|
19
26
|
export { ChipiSkus };
|
package/dist/skus.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { GetSkuListQuery, PaginatedResponse, Sku } from '@chipi-stack/types';
|
|
2
2
|
import { C as ChipiClient } from './client-CqyuW1C1.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -8,12 +8,19 @@ declare class ChipiSkus {
|
|
|
8
8
|
private client;
|
|
9
9
|
constructor(client: ChipiClient);
|
|
10
10
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
* Get available SKUs for purchase with pagination
|
|
12
|
+
* @param bearerToken - Authentication token for API calls
|
|
13
|
+
* @param query - Pagination query parameters
|
|
14
|
+
* @returns Promise<PaginatedResponse<Sku>> - Paginated list of available SKUs
|
|
15
|
+
*/
|
|
16
|
+
getSkuList(params: GetSkuListQuery, bearerToken: string): Promise<PaginatedResponse<Sku>>;
|
|
17
|
+
/**
|
|
18
|
+
* Get a single SKU by ID
|
|
19
|
+
* @param bearerToken - Authentication token for API calls
|
|
20
|
+
* @param id - SKU ID
|
|
21
|
+
* @returns Promise<Sku> - Single SKU
|
|
22
|
+
*/
|
|
23
|
+
getSku(id: string, bearerToken: string): Promise<Sku>;
|
|
17
24
|
}
|
|
18
25
|
|
|
19
26
|
export { ChipiSkus };
|
package/dist/skus.js
CHANGED
|
@@ -8,19 +8,31 @@ var ChipiSkus = class {
|
|
|
8
8
|
this.client = client;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
async
|
|
11
|
+
* Get available SKUs for purchase with pagination
|
|
12
|
+
* @param bearerToken - Authentication token for API calls
|
|
13
|
+
* @param query - Pagination query parameters
|
|
14
|
+
* @returns Promise<PaginatedResponse<Sku>> - Paginated list of available SKUs
|
|
15
|
+
*/
|
|
16
|
+
async getSkuList(params, bearerToken) {
|
|
17
17
|
const response = await this.client.get({
|
|
18
|
-
endpoint: `${shared.API_ENDPOINTS.SKUS}
|
|
19
|
-
params
|
|
18
|
+
endpoint: `${shared.API_ENDPOINTS.SKUS}`,
|
|
19
|
+
params,
|
|
20
20
|
bearerToken
|
|
21
21
|
});
|
|
22
22
|
return response;
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Get a single SKU by ID
|
|
26
|
+
* @param bearerToken - Authentication token for API calls
|
|
27
|
+
* @param id - SKU ID
|
|
28
|
+
* @returns Promise<Sku> - Single SKU
|
|
29
|
+
*/
|
|
30
|
+
async getSku(id, bearerToken) {
|
|
31
|
+
return this.client.get({
|
|
32
|
+
endpoint: `${shared.API_ENDPOINTS.SKUS}/${id}`,
|
|
33
|
+
bearerToken
|
|
34
|
+
});
|
|
35
|
+
}
|
|
24
36
|
};
|
|
25
37
|
|
|
26
38
|
exports.ChipiSkus = ChipiSkus;
|
package/dist/skus.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/skus.ts"],"names":["API_ENDPOINTS"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"sources":["../src/skus.ts"],"names":["API_ENDPOINTS"],"mappings":";;;;;AAWO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAAoB,MAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,MAAM,UAAA,CACJ,MAAA,EACA,WAAA,EACiC;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAA4B;AAAA,MAC7D,QAAA,EAAU,CAAA,EAAGA,oBAAA,CAAc,IAAI,CAAA,CAAA;AAAA,MAC/B,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,CACJ,EAAA,EACA,WAAA,EACc;AACd,IAAA,OAAO,IAAA,CAAK,OAAO,GAAA,CAAS;AAAA,MAC1B,QAAA,EAAU,CAAA,EAAGA,oBAAA,CAAc,IAAI,IAAI,EAAE,CAAA,CAAA;AAAA,MACrC;AAAA,KACD,CAAA;AAAA,EACH;AACF","file":"skus.js","sourcesContent":["import type {\n PaginatedResponse,\n Sku,\n GetSkuListQuery,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n/**\n * SKU (Stock Keeping Unit) management utilities\n */\nexport class ChipiSkus {\n constructor(private client: ChipiClient) {}\n /**\n * Get available SKUs for purchase with pagination\n * @param bearerToken - Authentication token for API calls\n * @param query - Pagination query parameters\n * @returns Promise<PaginatedResponse<Sku>> - Paginated list of available SKUs\n */\n async getSkuList(\n params: GetSkuListQuery,\n bearerToken: string,\n ): Promise<PaginatedResponse<Sku>> {\n const response = await this.client.get<PaginatedResponse<Sku>>({\n endpoint: `${API_ENDPOINTS.SKUS}`,\n params,\n bearerToken,\n });\n\n return response;\n }\n\n /**\n * Get a single SKU by ID\n * @param bearerToken - Authentication token for API calls\n * @param id - SKU ID\n * @returns Promise<Sku> - Single SKU\n */\n async getSku( \n id: string,\n bearerToken: string,\n ): Promise<Sku> {\n return this.client.get<Sku>({\n endpoint: `${API_ENDPOINTS.SKUS}/${id}`,\n bearerToken,\n });\n }\n}"]}
|
package/dist/skus.mjs
CHANGED
|
@@ -6,19 +6,31 @@ var ChipiSkus = class {
|
|
|
6
6
|
this.client = client;
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
async
|
|
9
|
+
* Get available SKUs for purchase with pagination
|
|
10
|
+
* @param bearerToken - Authentication token for API calls
|
|
11
|
+
* @param query - Pagination query parameters
|
|
12
|
+
* @returns Promise<PaginatedResponse<Sku>> - Paginated list of available SKUs
|
|
13
|
+
*/
|
|
14
|
+
async getSkuList(params, bearerToken) {
|
|
15
15
|
const response = await this.client.get({
|
|
16
|
-
endpoint: `${API_ENDPOINTS.SKUS}
|
|
17
|
-
params
|
|
16
|
+
endpoint: `${API_ENDPOINTS.SKUS}`,
|
|
17
|
+
params,
|
|
18
18
|
bearerToken
|
|
19
19
|
});
|
|
20
20
|
return response;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Get a single SKU by ID
|
|
24
|
+
* @param bearerToken - Authentication token for API calls
|
|
25
|
+
* @param id - SKU ID
|
|
26
|
+
* @returns Promise<Sku> - Single SKU
|
|
27
|
+
*/
|
|
28
|
+
async getSku(id, bearerToken) {
|
|
29
|
+
return this.client.get({
|
|
30
|
+
endpoint: `${API_ENDPOINTS.SKUS}/${id}`,
|
|
31
|
+
bearerToken
|
|
32
|
+
});
|
|
33
|
+
}
|
|
22
34
|
};
|
|
23
35
|
|
|
24
36
|
export { ChipiSkus };
|
package/dist/skus.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/skus.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"sources":["../src/skus.ts"],"names":[],"mappings":";;;AAWO,IAAM,YAAN,MAAgB;AAAA,EACrB,YAAoB,MAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,MAAM,UAAA,CACJ,MAAA,EACA,WAAA,EACiC;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAA4B;AAAA,MAC7D,QAAA,EAAU,CAAA,EAAG,aAAA,CAAc,IAAI,CAAA,CAAA;AAAA,MAC/B,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,CACJ,EAAA,EACA,WAAA,EACc;AACd,IAAA,OAAO,IAAA,CAAK,OAAO,GAAA,CAAS;AAAA,MAC1B,QAAA,EAAU,CAAA,EAAG,aAAA,CAAc,IAAI,IAAI,EAAE,CAAA,CAAA;AAAA,MACrC;AAAA,KACD,CAAA;AAAA,EACH;AACF","file":"skus.mjs","sourcesContent":["import type {\n PaginatedResponse,\n Sku,\n GetSkuListQuery,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n/**\n * SKU (Stock Keeping Unit) management utilities\n */\nexport class ChipiSkus {\n constructor(private client: ChipiClient) {}\n /**\n * Get available SKUs for purchase with pagination\n * @param bearerToken - Authentication token for API calls\n * @param query - Pagination query parameters\n * @returns Promise<PaginatedResponse<Sku>> - Paginated list of available SKUs\n */\n async getSkuList(\n params: GetSkuListQuery,\n bearerToken: string,\n ): Promise<PaginatedResponse<Sku>> {\n const response = await this.client.get<PaginatedResponse<Sku>>({\n endpoint: `${API_ENDPOINTS.SKUS}`,\n params,\n bearerToken,\n });\n\n return response;\n }\n\n /**\n * Get a single SKU by ID\n * @param bearerToken - Authentication token for API calls\n * @param id - SKU ID\n * @returns Promise<Sku> - Single SKU\n */\n async getSku( \n id: string,\n bearerToken: string,\n ): Promise<Sku> {\n return this.client.get<Sku>({\n endpoint: `${API_ENDPOINTS.SKUS}/${id}`,\n bearerToken,\n });\n }\n}"]}
|
package/dist/transactions.js
CHANGED
|
@@ -64,7 +64,7 @@ var executePaymasterTransaction = async ({
|
|
|
64
64
|
);
|
|
65
65
|
if (!typeDataResponse.ok) {
|
|
66
66
|
const errorText = await typeDataResponse.text();
|
|
67
|
-
throw new Error(`Error
|
|
67
|
+
throw new Error(`Error in API: ${errorText}`);
|
|
68
68
|
}
|
|
69
69
|
const typeData = await typeDataResponse.json();
|
|
70
70
|
const userSignature = await account.signMessage(typeData);
|
|
@@ -90,11 +90,11 @@ var executePaymasterTransaction = async ({
|
|
|
90
90
|
);
|
|
91
91
|
if (!executeTransaction.ok) {
|
|
92
92
|
const errorText = await executeTransaction.text();
|
|
93
|
-
throw new Error(`Error
|
|
93
|
+
throw new Error(`Error executing sponsored transaction: ${errorText}`);
|
|
94
94
|
}
|
|
95
95
|
const result = await executeTransaction.json();
|
|
96
96
|
if (!result.transactionHash) {
|
|
97
|
-
throw new Error("
|
|
97
|
+
throw new Error("The response does not contain the transaction hash");
|
|
98
98
|
}
|
|
99
99
|
return result.transactionHash;
|
|
100
100
|
} catch (error) {
|
package/dist/transactions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/encryption.ts","../src/execute-paymaster-transaction.ts","../src/transactions.ts"],"names":["CryptoES","RpcProvider","Account","STARKNET_CONTRACTS","formatAmount","API_ENDPOINTS"],"mappings":"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","file":"transactions.js","sourcesContent":["import CryptoES from \"crypto-es\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string\n): string => {\n return CryptoES.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string\n): string => {\n try {\n const bytes = CryptoES.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoES.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) throw new Error(\"Decryption failed\");\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n throw new Error(`Decryption failed: ${error}`);\n }\n};\n","import type {\n ExecuteSponsoredTransactionResponse,\n ExecuteTransactionParams,\n} from \"@chipi-stack/types\";\nimport { Account, RpcProvider, TypedData } from \"starknet\";\nimport { decryptPrivateKey } from \"./encryption\";\n\n// This will need to be imported from the actual gasless SDK or implemented\n// For now, this is a placeholder implementation based on the original SDK\n\n/**\n * Execute a paymaster transaction (gasless)\n */\nexport const executePaymasterTransaction = async (\n {\n params,\n bearerToken,\n apiPublicKey,\n backendUrl,\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n apiPublicKey: string;\n backendUrl: string;\n }\n): Promise<string> => {\n // Backend url shit is temporary\n try {\n const { encryptKey, wallet, calls } = params;\n\n // Fetch the encrypted private key from clerk public metadata\n const privateKeyDecrypted = decryptPrivateKey(\n wallet.encryptedPrivateKey,\n encryptKey\n );\n\n if (!privateKeyDecrypted) {\n throw new Error(\"Failed to decrypt private key\");\n }\n\n const provider = new RpcProvider({\n nodeUrl: \"https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7\",\n });\n\n const account = new Account(\n provider,\n wallet.publicKey,\n privateKeyDecrypted\n );\n\n // Build the type data\n const typeDataResponse = await fetch(\n `${backendUrl}/transactions/prepare-typed-data`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n calls: calls,\n accountClassHash:\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n }),\n }\n );\n\n if (!typeDataResponse.ok) {\n const errorText = await typeDataResponse.text();\n throw new Error(`Error en la API: ${errorText}`);\n }\n\n const typeData = (await typeDataResponse.json()) as TypedData;\n\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // Execute the transaction\n const executeTransaction = await fetch(\n `${backendUrl}/transactions/execute-sponsored-transaction`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n typeData: typeData,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n }),\n }\n );\n\n if (!executeTransaction.ok) {\n const errorText = await executeTransaction.text();\n throw new Error(`Error en la API de ejecución: ${errorText}`);\n }\n\n const result =\n (await executeTransaction.json()) as ExecuteSponsoredTransactionResponse;\n\n if (!result.transactionHash) {\n throw new Error(\"La respuesta no contiene el hash de la transacción\");\n }\n\n return result.transactionHash;\n } catch (error) {\n console.error(\"Error sending transaction with paymaster\", error);\n throw error;\n }\n};\n","import {\n CallAnyContractParams,\n STARKNET_CONTRACTS,\n WalletData,\n type ExecuteTransactionParams,\n type RecordSendTransactionParams,\n type Transaction,\n type TransferParams,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS, formatAmount } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { executePaymasterTransaction } from \"./execute-paymaster-transaction\";\n\n/**\n * Transaction management utilities\n */\nexport class ChipiTransactions {\n constructor(private client: ChipiClient) {}\n /**\n * Execute a gasless transaction using paymaster\n */\n async executeTransaction({\n params,\n bearerToken,\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n }): Promise<string> {\n return executePaymasterTransaction({\n params,\n bearerToken,\n backendUrl: this.client.baseUrl,\n apiPublicKey: this.client.getApiPublicKey(),\n });\n }\n\n /**\n * Transfer tokens\n */\n async transfer({\n params,\n bearerToken,\n }: {\n params: TransferParams;\n bearerToken: string;\n }): Promise<string> {\n const { encryptKey, wallet, token, otherToken, recipient, amount } = params;\n const contract = STARKNET_CONTRACTS[token];\n let contractAddress = contract.contractAddress;\n let decimals = contract.decimals;\n if (token === \"OTHER\") {\n if (!otherToken) {\n throw new Error(\"Other token is required when token is OTHER\");\n }\n contractAddress = otherToken.contractAddress;\n decimals = otherToken.decimals;\n }\n const formattedAmount = formatAmount(amount, decimals);\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress,\n entrypoint: \"transfer\",\n calldata: [recipient, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: WalletData;\n contractAddress: string;\n spender: string;\n amount: string ;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n\n return this.executeTransaction({\n params: {\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: \"approve\",\n calldata: [params.spender, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken: params.bearerToken,\n });\n }\n\n /**\n * Call any contract method\n */\n // {\n // encryptKey: string;\n // wallet: any;\n // calls: any[];\n // bearerToken: string;\n // }\n\n async callAnyContract({\n params,\n bearerToken,\n }: {\n params: CallAnyContractParams;\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n params,\n bearerToken,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n const response = await this.client.post<Transaction>({\n endpoint: `${API_ENDPOINTS.TRANSACTIONS}/record-send`,\n bearerToken,\n body: params,\n });\n return response;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/encryption.ts","../src/execute-paymaster-transaction.ts","../src/transactions.ts"],"names":["CryptoES","RpcProvider","Account","STARKNET_CONTRACTS","formatAmount","API_ENDPOINTS"],"mappings":"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","file":"transactions.js","sourcesContent":["import CryptoES from \"crypto-es\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string\n): string => {\n return CryptoES.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string\n): string => {\n try {\n const bytes = CryptoES.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoES.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) throw new Error(\"Decryption failed\");\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n throw new Error(`Decryption failed: ${error}`);\n }\n};\n","import type {\n ExecuteSponsoredTransactionResponse,\n ExecuteTransactionParams,\n} from \"@chipi-stack/types\";\nimport { Account, RpcProvider, TypedData } from \"starknet\";\nimport { decryptPrivateKey } from \"./encryption\";\n\n// This will need to be imported from the actual gasless SDK or implemented\n// For now, this is a placeholder implementation based on the original SDK\n\n/**\n * Execute a paymaster transaction (gasless)\n */\nexport const executePaymasterTransaction = async (\n {\n params,\n bearerToken,\n apiPublicKey,\n backendUrl,\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n apiPublicKey: string;\n backendUrl: string;\n }\n): Promise<string> => {\n // Backend url shit is temporary\n try {\n const { encryptKey, wallet, calls } = params;\n\n // Fetch the encrypted private key from clerk public metadata\n const privateKeyDecrypted = decryptPrivateKey(\n wallet.encryptedPrivateKey,\n encryptKey\n );\n\n if (!privateKeyDecrypted) {\n throw new Error(\"Failed to decrypt private key\");\n }\n\n const provider = new RpcProvider({\n nodeUrl: \"https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7\",\n });\n\n const account = new Account(\n provider,\n wallet.publicKey,\n privateKeyDecrypted\n );\n\n // Build the type data\n const typeDataResponse = await fetch(\n `${backendUrl}/transactions/prepare-typed-data`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n calls: calls,\n accountClassHash:\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n }),\n }\n );\n\n if (!typeDataResponse.ok) {\n const errorText = await typeDataResponse.text();\n throw new Error(`Error in API: ${errorText}`);\n }\n\n const typeData = (await typeDataResponse.json()) as TypedData;\n\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // Execute the transaction\n const executeTransaction = await fetch(\n `${backendUrl}/transactions/execute-sponsored-transaction`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n typeData: typeData,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n }),\n }\n );\n\n if (!executeTransaction.ok) {\n const errorText = await executeTransaction.text();\n throw new Error(`Error executing sponsored transaction: ${errorText}`);\n }\n\n const result =\n (await executeTransaction.json()) as ExecuteSponsoredTransactionResponse;\n\n if (!result.transactionHash) {\n throw new Error(\"The response does not contain the transaction hash\");\n }\n\n return result.transactionHash;\n } catch (error) {\n console.error(\"Error sending transaction with paymaster\", error);\n throw error;\n }\n};\n","import {\n CallAnyContractParams,\n STARKNET_CONTRACTS,\n WalletData,\n type ExecuteTransactionParams,\n type RecordSendTransactionParams,\n type Transaction,\n type TransferParams,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS, formatAmount } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { executePaymasterTransaction } from \"./execute-paymaster-transaction\";\n\n/**\n * Transaction management utilities\n */\nexport class ChipiTransactions {\n constructor(private client: ChipiClient) {}\n /**\n * Execute a gasless transaction using paymaster\n */\n async executeTransaction({\n params,\n bearerToken,\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n }): Promise<string> {\n return executePaymasterTransaction({\n params,\n bearerToken,\n backendUrl: this.client.baseUrl,\n apiPublicKey: this.client.getApiPublicKey(),\n });\n }\n\n /**\n * Transfer tokens\n */\n async transfer({\n params,\n bearerToken,\n }: {\n params: TransferParams;\n bearerToken: string;\n }): Promise<string> {\n const { encryptKey, wallet, token, otherToken, recipient, amount } = params;\n const contract = STARKNET_CONTRACTS[token];\n let contractAddress = contract.contractAddress;\n let decimals = contract.decimals;\n if (token === \"OTHER\") {\n if (!otherToken) {\n throw new Error(\"Other token is required when token is OTHER\");\n }\n contractAddress = otherToken.contractAddress;\n decimals = otherToken.decimals;\n }\n const formattedAmount = formatAmount(amount, decimals);\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress,\n entrypoint: \"transfer\",\n calldata: [recipient, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: WalletData;\n contractAddress: string;\n spender: string;\n amount: string ;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n\n return this.executeTransaction({\n params: {\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: \"approve\",\n calldata: [params.spender, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken: params.bearerToken,\n });\n }\n\n /**\n * Call any contract method\n */\n // {\n // encryptKey: string;\n // wallet: any;\n // calls: any[];\n // bearerToken: string;\n // }\n\n async callAnyContract({\n params,\n bearerToken,\n }: {\n params: CallAnyContractParams;\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n params,\n bearerToken,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n const response = await this.client.post<Transaction>({\n endpoint: `${API_ENDPOINTS.TRANSACTIONS}/record-send`,\n bearerToken,\n body: params,\n });\n return response;\n }\n}\n"]}
|
package/dist/transactions.mjs
CHANGED
|
@@ -58,7 +58,7 @@ var executePaymasterTransaction = async ({
|
|
|
58
58
|
);
|
|
59
59
|
if (!typeDataResponse.ok) {
|
|
60
60
|
const errorText = await typeDataResponse.text();
|
|
61
|
-
throw new Error(`Error
|
|
61
|
+
throw new Error(`Error in API: ${errorText}`);
|
|
62
62
|
}
|
|
63
63
|
const typeData = await typeDataResponse.json();
|
|
64
64
|
const userSignature = await account.signMessage(typeData);
|
|
@@ -84,11 +84,11 @@ var executePaymasterTransaction = async ({
|
|
|
84
84
|
);
|
|
85
85
|
if (!executeTransaction.ok) {
|
|
86
86
|
const errorText = await executeTransaction.text();
|
|
87
|
-
throw new Error(`Error
|
|
87
|
+
throw new Error(`Error executing sponsored transaction: ${errorText}`);
|
|
88
88
|
}
|
|
89
89
|
const result = await executeTransaction.json();
|
|
90
90
|
if (!result.transactionHash) {
|
|
91
|
-
throw new Error("
|
|
91
|
+
throw new Error("The response does not contain the transaction hash");
|
|
92
92
|
}
|
|
93
93
|
return result.transactionHash;
|
|
94
94
|
} catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/encryption.ts","../src/execute-paymaster-transaction.ts","../src/transactions.ts"],"names":[],"mappings":";;;;;;AASO,IAAM,iBAAA,GAAoB,CAC/B,mBAAA,EACA,QAAA,KACW;AACX,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,qBAAqB,QAAQ,CAAA;AAChE,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,QAAA,CAAS,QAAA,CAAS,IAAI,IAAI,CAAA;AAGlD,IAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAEnD,IAAA,OAAO,SAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,KAAK,CAAA;AACzC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AAAA,EAC/C;AACF,CAAA;;;ACZO,IAAM,8BAA8B,OACzC;AAAA,EACE,MAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAMoB;AAEpB,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,UAAA,EAAY,MAAA,EAAQ,KAAA,EAAM,GAAI,MAAA;AAGtC,IAAA,MAAM,mBAAA,GAAsB,iBAAA;AAAA,MAC1B,MAAA,CAAO,mBAAA;AAAA,MACP;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,WAAA,CAAY;AAAA,MAC/B,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,MAAM,UAAU,IAAI,OAAA;AAAA,MAClB,QAAA;AAAA,MACA,MAAA,CAAO,SAAA;AAAA,MACP;AAAA,KACF;AAGA,IAAA,MAAM,mBAAmB,MAAM,KAAA;AAAA,MAC7B,GAAG,UAAU,CAAA,gCAAA,CAAA;AAAA,MACb;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,UAAU,WAAW,CAAA,CAAA;AAAA,UACpC,WAAA,EAAa;AAAA,SACf;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,KAAA;AAAA,UACA,gBAAA,EACE;AAAA,SACH;AAAA;AACH,KACF;AAEA,IAAA,IAAI,CAAC,iBAAiB,EAAA,EAAI;AACxB,MAAA,MAAM,SAAA,GAAY,MAAM,gBAAA,CAAiB,IAAA,EAAK;AAC9C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,SAAS,CAAA,CAAE,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,QAAA,GAAY,MAAM,gBAAA,CAAiB,IAAA,EAAK;AAG9C,IAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,WAAA,CAAY,QAAQ,CAAA;AAGxD,IAAA,MAAM,qBAAqB,MAAM,KAAA;AAAA,MAC/B,GAAG,UAAU,CAAA,2CAAA,CAAA;AAAA,MACb;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,UAAU,WAAW,CAAA,CAAA;AAAA,UACpC,WAAA,EAAa;AAAA,SACf;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,QAAA;AAAA,UACA,aAAA,EAAe;AAAA,YACb,CAAA,EAAI,aAAA,CAAsB,CAAA,CAAE,QAAA,EAAS;AAAA,YACrC,CAAA,EAAI,aAAA,CAAsB,CAAA,CAAE,QAAA,EAAS;AAAA,YACrC,UAAW,aAAA,CAAsB;AAAA;AACnC,SACD;AAAA;AACH,KACF;AAEA,IAAA,IAAI,CAAC,mBAAmB,EAAA,EAAI;AAC1B,MAAA,MAAM,SAAA,GAAY,MAAM,kBAAA,CAAmB,IAAA,EAAK;AAChD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAiC,SAAS,CAAA,CAAE,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,MAAA,GACH,MAAM,kBAAA,CAAmB,IAAA,EAAK;AAEjC,IAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC3B,MAAA,MAAM,IAAI,MAAM,uDAAoD,CAAA;AAAA,IACtE;AAEA,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,EAChB,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,KAAK,CAAA;AAC/D,IAAA,MAAM,KAAA;AAAA,EACR;AACF,CAAA;;;ACtGO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAAoB,MAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAsB;AAAA;AAAA;AAAA;AAAA,EAI1C,MAAM,kBAAA,CAAmB;AAAA,IACvB,MAAA;AAAA,IACA;AAAA,GACF,EAGoB;AAClB,IAAA,OAAO,2BAAA,CAA4B;AAAA,MACjC,MAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA,EAAY,KAAK,MAAA,CAAO,OAAA;AAAA,MACxB,YAAA,EAAc,IAAA,CAAK,MAAA,CAAO,eAAA;AAAgB,KAC3C,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CAAS;AAAA,IACb,MAAA;AAAA,IACA;AAAA,GACF,EAGoB;AAClB,IAAA,MAAM,EAAE,UAAA,EAAY,MAAA,EAAQ,OAAO,UAAA,EAAY,SAAA,EAAW,QAAO,GAAI,MAAA;AACrE,IAAA,MAAM,QAAA,GAAW,mBAAmB,KAAK,CAAA;AACzC,IAAA,IAAI,kBAAkB,QAAA,CAAS,eAAA;AAC/B,IAAA,IAAI,WAAW,QAAA,CAAS,QAAA;AACxB,IAAA,IAAI,UAAU,OAAA,EAAS;AACrB,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,MAC/D;AACA,MAAA,eAAA,GAAkB,UAAA,CAAW,eAAA;AAC7B,MAAA,QAAA,GAAW,UAAA,CAAW,QAAA;AAAA,IACxB;AACA,IAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,MAAA,EAAQ,QAAQ,CAAA;AACrD,IAAA,OAAO,KAAK,kBAAA,CAAmB;AAAA,MAC7B,MAAA,EAAQ;AAAA,QACN,UAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL;AAAA,YACE,eAAA;AAAA,YACA,UAAA,EAAY,UAAA;AAAA,YACZ,QAAA,EAAU,CAAC,SAAA,EAAW,eAAA,EAAiB,KAAK;AAAA;AAC9C;AACF,OACF;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,MAAA,EAQM;AAClB,IAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAEnE,IAAA,OAAO,KAAK,kBAAA,CAAmB;AAAA,MAC7B,MAAA,EAAQ;AAAA,QACN,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,KAAA,EAAO;AAAA,UACL;AAAA,YACE,iBAAiB,MAAA,CAAO,eAAA;AAAA,YACxB,UAAA,EAAY,SAAA;AAAA,YACZ,QAAA,EAAU,CAAC,MAAA,CAAO,OAAA,EAAS,iBAAiB,KAAK;AAAA;AACnD;AACF,OACF;AAAA,MACA,aAAa,MAAA,CAAO;AAAA,KACrB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,eAAA,CAAgB;AAAA,IACpB,MAAA;AAAA,IACA;AAAA,GACF,EAGoB;AAClB,IAAA,OAAO,KAAK,kBAAA,CAAmB;AAAA,MAC7B,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAA,CAAsB;AAAA,IAC1B,MAAA;AAAA,IACA;AAAA,GACF,EAGyB;AACvB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAkB;AAAA,MACnD,QAAA,EAAU,CAAA,EAAG,aAAA,CAAc,YAAY,CAAA,YAAA,CAAA;AAAA,MACvC,WAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO,QAAA;AAAA,EACT;AACF","file":"transactions.mjs","sourcesContent":["import CryptoES from \"crypto-es\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string\n): string => {\n return CryptoES.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string\n): string => {\n try {\n const bytes = CryptoES.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoES.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) throw new Error(\"Decryption failed\");\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n throw new Error(`Decryption failed: ${error}`);\n }\n};\n","import type {\n ExecuteSponsoredTransactionResponse,\n ExecuteTransactionParams,\n} from \"@chipi-stack/types\";\nimport { Account, RpcProvider, TypedData } from \"starknet\";\nimport { decryptPrivateKey } from \"./encryption\";\n\n// This will need to be imported from the actual gasless SDK or implemented\n// For now, this is a placeholder implementation based on the original SDK\n\n/**\n * Execute a paymaster transaction (gasless)\n */\nexport const executePaymasterTransaction = async (\n {\n params,\n bearerToken,\n apiPublicKey,\n backendUrl,\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n apiPublicKey: string;\n backendUrl: string;\n }\n): Promise<string> => {\n // Backend url shit is temporary\n try {\n const { encryptKey, wallet, calls } = params;\n\n // Fetch the encrypted private key from clerk public metadata\n const privateKeyDecrypted = decryptPrivateKey(\n wallet.encryptedPrivateKey,\n encryptKey\n );\n\n if (!privateKeyDecrypted) {\n throw new Error(\"Failed to decrypt private key\");\n }\n\n const provider = new RpcProvider({\n nodeUrl: \"https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7\",\n });\n\n const account = new Account(\n provider,\n wallet.publicKey,\n privateKeyDecrypted\n );\n\n // Build the type data\n const typeDataResponse = await fetch(\n `${backendUrl}/transactions/prepare-typed-data`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n calls: calls,\n accountClassHash:\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n }),\n }\n );\n\n if (!typeDataResponse.ok) {\n const errorText = await typeDataResponse.text();\n throw new Error(`Error en la API: ${errorText}`);\n }\n\n const typeData = (await typeDataResponse.json()) as TypedData;\n\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // Execute the transaction\n const executeTransaction = await fetch(\n `${backendUrl}/transactions/execute-sponsored-transaction`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n typeData: typeData,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n }),\n }\n );\n\n if (!executeTransaction.ok) {\n const errorText = await executeTransaction.text();\n throw new Error(`Error en la API de ejecución: ${errorText}`);\n }\n\n const result =\n (await executeTransaction.json()) as ExecuteSponsoredTransactionResponse;\n\n if (!result.transactionHash) {\n throw new Error(\"La respuesta no contiene el hash de la transacción\");\n }\n\n return result.transactionHash;\n } catch (error) {\n console.error(\"Error sending transaction with paymaster\", error);\n throw error;\n }\n};\n","import {\n CallAnyContractParams,\n STARKNET_CONTRACTS,\n WalletData,\n type ExecuteTransactionParams,\n type RecordSendTransactionParams,\n type Transaction,\n type TransferParams,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS, formatAmount } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { executePaymasterTransaction } from \"./execute-paymaster-transaction\";\n\n/**\n * Transaction management utilities\n */\nexport class ChipiTransactions {\n constructor(private client: ChipiClient) {}\n /**\n * Execute a gasless transaction using paymaster\n */\n async executeTransaction({\n params,\n bearerToken,\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n }): Promise<string> {\n return executePaymasterTransaction({\n params,\n bearerToken,\n backendUrl: this.client.baseUrl,\n apiPublicKey: this.client.getApiPublicKey(),\n });\n }\n\n /**\n * Transfer tokens\n */\n async transfer({\n params,\n bearerToken,\n }: {\n params: TransferParams;\n bearerToken: string;\n }): Promise<string> {\n const { encryptKey, wallet, token, otherToken, recipient, amount } = params;\n const contract = STARKNET_CONTRACTS[token];\n let contractAddress = contract.contractAddress;\n let decimals = contract.decimals;\n if (token === \"OTHER\") {\n if (!otherToken) {\n throw new Error(\"Other token is required when token is OTHER\");\n }\n contractAddress = otherToken.contractAddress;\n decimals = otherToken.decimals;\n }\n const formattedAmount = formatAmount(amount, decimals);\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress,\n entrypoint: \"transfer\",\n calldata: [recipient, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: WalletData;\n contractAddress: string;\n spender: string;\n amount: string ;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n\n return this.executeTransaction({\n params: {\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: \"approve\",\n calldata: [params.spender, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken: params.bearerToken,\n });\n }\n\n /**\n * Call any contract method\n */\n // {\n // encryptKey: string;\n // wallet: any;\n // calls: any[];\n // bearerToken: string;\n // }\n\n async callAnyContract({\n params,\n bearerToken,\n }: {\n params: CallAnyContractParams;\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n params,\n bearerToken,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n const response = await this.client.post<Transaction>({\n endpoint: `${API_ENDPOINTS.TRANSACTIONS}/record-send`,\n bearerToken,\n body: params,\n });\n return response;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/encryption.ts","../src/execute-paymaster-transaction.ts","../src/transactions.ts"],"names":[],"mappings":";;;;;;AASO,IAAM,iBAAA,GAAoB,CAC/B,mBAAA,EACA,QAAA,KACW;AACX,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,qBAAqB,QAAQ,CAAA;AAChE,IAAA,MAAM,SAAA,GAAY,KAAA,CAAM,QAAA,CAAS,QAAA,CAAS,IAAI,IAAI,CAAA;AAGlD,IAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,MAAM,mBAAmB,CAAA;AAEnD,IAAA,OAAO,SAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,sBAAsB,KAAK,CAAA;AACzC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AAAA,EAC/C;AACF,CAAA;;;ACZO,IAAM,8BAA8B,OACzC;AAAA,EACE,MAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAMoB;AAEpB,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,UAAA,EAAY,MAAA,EAAQ,KAAA,EAAM,GAAI,MAAA;AAGtC,IAAA,MAAM,mBAAA,GAAsB,iBAAA;AAAA,MAC1B,MAAA,CAAO,mBAAA;AAAA,MACP;AAAA,KACF;AAEA,IAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,WAAA,CAAY;AAAA,MAC/B,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,MAAM,UAAU,IAAI,OAAA;AAAA,MAClB,QAAA;AAAA,MACA,MAAA,CAAO,SAAA;AAAA,MACP;AAAA,KACF;AAGA,IAAA,MAAM,mBAAmB,MAAM,KAAA;AAAA,MAC7B,GAAG,UAAU,CAAA,gCAAA,CAAA;AAAA,MACb;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,UAAU,WAAW,CAAA,CAAA;AAAA,UACpC,WAAA,EAAa;AAAA,SACf;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,KAAA;AAAA,UACA,gBAAA,EACE;AAAA,SACH;AAAA;AACH,KACF;AAEA,IAAA,IAAI,CAAC,iBAAiB,EAAA,EAAI;AACxB,MAAA,MAAM,SAAA,GAAY,MAAM,gBAAA,CAAiB,IAAA,EAAK;AAC9C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,SAAS,CAAA,CAAE,CAAA;AAAA,IAC9C;AAEA,IAAA,MAAM,QAAA,GAAY,MAAM,gBAAA,CAAiB,IAAA,EAAK;AAG9C,IAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,WAAA,CAAY,QAAQ,CAAA;AAGxD,IAAA,MAAM,qBAAqB,MAAM,KAAA;AAAA,MAC/B,GAAG,UAAU,CAAA,2CAAA,CAAA;AAAA,MACb;AAAA,QACE,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe,UAAU,WAAW,CAAA,CAAA;AAAA,UACpC,WAAA,EAAa;AAAA,SACf;AAAA,QACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,UACnB,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,QAAA;AAAA,UACA,aAAA,EAAe;AAAA,YACb,CAAA,EAAI,aAAA,CAAsB,CAAA,CAAE,QAAA,EAAS;AAAA,YACrC,CAAA,EAAI,aAAA,CAAsB,CAAA,CAAE,QAAA,EAAS;AAAA,YACrC,UAAW,aAAA,CAAsB;AAAA;AACnC,SACD;AAAA;AACH,KACF;AAEA,IAAA,IAAI,CAAC,mBAAmB,EAAA,EAAI;AAC1B,MAAA,MAAM,SAAA,GAAY,MAAM,kBAAA,CAAmB,IAAA,EAAK;AAChD,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,SAAS,CAAA,CAAE,CAAA;AAAA,IACvE;AAEA,IAAA,MAAM,MAAA,GACH,MAAM,kBAAA,CAAmB,IAAA,EAAK;AAEjC,IAAA,IAAI,CAAC,OAAO,eAAA,EAAiB;AAC3B,MAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,IACtE;AAEA,IAAA,OAAO,MAAA,CAAO,eAAA;AAAA,EAChB,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,4CAA4C,KAAK,CAAA;AAC/D,IAAA,MAAM,KAAA;AAAA,EACR;AACF,CAAA;;;ACtGO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAAoB,MAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAAsB;AAAA;AAAA;AAAA;AAAA,EAI1C,MAAM,kBAAA,CAAmB;AAAA,IACvB,MAAA;AAAA,IACA;AAAA,GACF,EAGoB;AAClB,IAAA,OAAO,2BAAA,CAA4B;AAAA,MACjC,MAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA,EAAY,KAAK,MAAA,CAAO,OAAA;AAAA,MACxB,YAAA,EAAc,IAAA,CAAK,MAAA,CAAO,eAAA;AAAgB,KAC3C,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CAAS;AAAA,IACb,MAAA;AAAA,IACA;AAAA,GACF,EAGoB;AAClB,IAAA,MAAM,EAAE,UAAA,EAAY,MAAA,EAAQ,OAAO,UAAA,EAAY,SAAA,EAAW,QAAO,GAAI,MAAA;AACrE,IAAA,MAAM,QAAA,GAAW,mBAAmB,KAAK,CAAA;AACzC,IAAA,IAAI,kBAAkB,QAAA,CAAS,eAAA;AAC/B,IAAA,IAAI,WAAW,QAAA,CAAS,QAAA;AACxB,IAAA,IAAI,UAAU,OAAA,EAAS;AACrB,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,MAC/D;AACA,MAAA,eAAA,GAAkB,UAAA,CAAW,eAAA;AAC7B,MAAA,QAAA,GAAW,UAAA,CAAW,QAAA;AAAA,IACxB;AACA,IAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,MAAA,EAAQ,QAAQ,CAAA;AACrD,IAAA,OAAO,KAAK,kBAAA,CAAmB;AAAA,MAC7B,MAAA,EAAQ;AAAA,QACN,UAAA;AAAA,QACA,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACL;AAAA,YACE,eAAA;AAAA,YACA,UAAA,EAAY,UAAA;AAAA,YACZ,QAAA,EAAU,CAAC,SAAA,EAAW,eAAA,EAAiB,KAAK;AAAA;AAC9C;AACF,OACF;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAQ,MAAA,EAQM;AAClB,IAAA,MAAM,eAAA,GAAkB,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAEnE,IAAA,OAAO,KAAK,kBAAA,CAAmB;AAAA,MAC7B,MAAA,EAAQ;AAAA,QACN,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,KAAA,EAAO;AAAA,UACL;AAAA,YACE,iBAAiB,MAAA,CAAO,eAAA;AAAA,YACxB,UAAA,EAAY,SAAA;AAAA,YACZ,QAAA,EAAU,CAAC,MAAA,CAAO,OAAA,EAAS,iBAAiB,KAAK;AAAA;AACnD;AACF,OACF;AAAA,MACA,aAAa,MAAA,CAAO;AAAA,KACrB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,eAAA,CAAgB;AAAA,IACpB,MAAA;AAAA,IACA;AAAA,GACF,EAGoB;AAClB,IAAA,OAAO,KAAK,kBAAA,CAAmB;AAAA,MAC7B,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAA,CAAsB;AAAA,IAC1B,MAAA;AAAA,IACA;AAAA,GACF,EAGyB;AACvB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAkB;AAAA,MACnD,QAAA,EAAU,CAAA,EAAG,aAAA,CAAc,YAAY,CAAA,YAAA,CAAA;AAAA,MACvC,WAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO,QAAA;AAAA,EACT;AACF","file":"transactions.mjs","sourcesContent":["import CryptoES from \"crypto-es\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string\n): string => {\n return CryptoES.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string\n): string => {\n try {\n const bytes = CryptoES.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoES.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) throw new Error(\"Decryption failed\");\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n throw new Error(`Decryption failed: ${error}`);\n }\n};\n","import type {\n ExecuteSponsoredTransactionResponse,\n ExecuteTransactionParams,\n} from \"@chipi-stack/types\";\nimport { Account, RpcProvider, TypedData } from \"starknet\";\nimport { decryptPrivateKey } from \"./encryption\";\n\n// This will need to be imported from the actual gasless SDK or implemented\n// For now, this is a placeholder implementation based on the original SDK\n\n/**\n * Execute a paymaster transaction (gasless)\n */\nexport const executePaymasterTransaction = async (\n {\n params,\n bearerToken,\n apiPublicKey,\n backendUrl,\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n apiPublicKey: string;\n backendUrl: string;\n }\n): Promise<string> => {\n // Backend url shit is temporary\n try {\n const { encryptKey, wallet, calls } = params;\n\n // Fetch the encrypted private key from clerk public metadata\n const privateKeyDecrypted = decryptPrivateKey(\n wallet.encryptedPrivateKey,\n encryptKey\n );\n\n if (!privateKeyDecrypted) {\n throw new Error(\"Failed to decrypt private key\");\n }\n\n const provider = new RpcProvider({\n nodeUrl: \"https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7\",\n });\n\n const account = new Account(\n provider,\n wallet.publicKey,\n privateKeyDecrypted\n );\n\n // Build the type data\n const typeDataResponse = await fetch(\n `${backendUrl}/transactions/prepare-typed-data`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n calls: calls,\n accountClassHash:\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n }),\n }\n );\n\n if (!typeDataResponse.ok) {\n const errorText = await typeDataResponse.text();\n throw new Error(`Error in API: ${errorText}`);\n }\n\n const typeData = (await typeDataResponse.json()) as TypedData;\n\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // Execute the transaction\n const executeTransaction = await fetch(\n `${backendUrl}/transactions/execute-sponsored-transaction`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n typeData: typeData,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n }),\n }\n );\n\n if (!executeTransaction.ok) {\n const errorText = await executeTransaction.text();\n throw new Error(`Error executing sponsored transaction: ${errorText}`);\n }\n\n const result =\n (await executeTransaction.json()) as ExecuteSponsoredTransactionResponse;\n\n if (!result.transactionHash) {\n throw new Error(\"The response does not contain the transaction hash\");\n }\n\n return result.transactionHash;\n } catch (error) {\n console.error(\"Error sending transaction with paymaster\", error);\n throw error;\n }\n};\n","import {\n CallAnyContractParams,\n STARKNET_CONTRACTS,\n WalletData,\n type ExecuteTransactionParams,\n type RecordSendTransactionParams,\n type Transaction,\n type TransferParams,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS, formatAmount } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { executePaymasterTransaction } from \"./execute-paymaster-transaction\";\n\n/**\n * Transaction management utilities\n */\nexport class ChipiTransactions {\n constructor(private client: ChipiClient) {}\n /**\n * Execute a gasless transaction using paymaster\n */\n async executeTransaction({\n params,\n bearerToken,\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n }): Promise<string> {\n return executePaymasterTransaction({\n params,\n bearerToken,\n backendUrl: this.client.baseUrl,\n apiPublicKey: this.client.getApiPublicKey(),\n });\n }\n\n /**\n * Transfer tokens\n */\n async transfer({\n params,\n bearerToken,\n }: {\n params: TransferParams;\n bearerToken: string;\n }): Promise<string> {\n const { encryptKey, wallet, token, otherToken, recipient, amount } = params;\n const contract = STARKNET_CONTRACTS[token];\n let contractAddress = contract.contractAddress;\n let decimals = contract.decimals;\n if (token === \"OTHER\") {\n if (!otherToken) {\n throw new Error(\"Other token is required when token is OTHER\");\n }\n contractAddress = otherToken.contractAddress;\n decimals = otherToken.decimals;\n }\n const formattedAmount = formatAmount(amount, decimals);\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress,\n entrypoint: \"transfer\",\n calldata: [recipient, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: WalletData;\n contractAddress: string;\n spender: string;\n amount: string ;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n\n return this.executeTransaction({\n params: {\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: \"approve\",\n calldata: [params.spender, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken: params.bearerToken,\n });\n }\n\n /**\n * Call any contract method\n */\n // {\n // encryptKey: string;\n // wallet: any;\n // calls: any[];\n // bearerToken: string;\n // }\n\n async callAnyContract({\n params,\n bearerToken,\n }: {\n params: CallAnyContractParams;\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n params,\n bearerToken,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n const response = await this.client.post<Transaction>({\n endpoint: `${API_ENDPOINTS.TRANSACTIONS}/record-send`,\n bearerToken,\n body: params,\n });\n return response;\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chipi-stack/backend",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.10.0",
|
|
4
4
|
"description": "Chipi Backend SDK - Server utilities for wallet creation, transactions, and SKU management",
|
|
5
5
|
"homepage": "https://github.com/chipi-pay/chipi-sdk",
|
|
6
6
|
"bugs": {
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"@avnu/gasless-sdk": "0.1.8",
|
|
79
79
|
"crypto-es": "^2.1.0",
|
|
80
80
|
"starknet": "6.11.0",
|
|
81
|
-
"@chipi-stack/shared": "^11.
|
|
82
|
-
"@chipi-stack/types": "^11.
|
|
81
|
+
"@chipi-stack/shared": "^11.10.0",
|
|
82
|
+
"@chipi-stack/types": "^11.10.0"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
85
|
"@types/node": "^22.15.15",
|