@chipi-stack/backend 1.0.0 → 1.1.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 CHANGED
@@ -1,4 +1,4 @@
1
- import { ChipiSDKConfig, ExecuteTransactionParams, TransferParams, ApproveParams, StakeVesuUsdcParams, WithdrawVesuUsdcParams, CallAnyContractParams, CreateWalletParams, CreateWalletResponse, RecordSendTransactionParams, Transaction } from '@chipi-stack/types';
1
+ import { ChipiSDKConfig, ExecuteTransactionParams, TransferParams, ApproveParams, StakeVesuUsdcParams, WithdrawVesuUsdcParams, CallAnyContractParams, CreateWalletParams, CreateWalletResponse, RecordSendTransactionParams, Transaction, GetWalletParams, GetWalletResponse } from '@chipi-stack/types';
2
2
  export * from '@chipi-stack/types';
3
3
  import { ChipiWallets } from './wallets.mjs';
4
4
  import { ChipiTransactions } from './transactions.mjs';
@@ -54,6 +54,7 @@ declare class ChipiSDK {
54
54
  params: RecordSendTransactionParams;
55
55
  bearerToken: string;
56
56
  }): Promise<Transaction>;
57
+ getWallet(params: Omit<GetWalletParams, "apiPublicKey" | "nodeUrl">): Promise<GetWalletResponse>;
57
58
  }
58
59
 
59
60
  declare const encryptPrivateKey: (privateKey: string, password: string) => string;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ChipiSDKConfig, ExecuteTransactionParams, TransferParams, ApproveParams, StakeVesuUsdcParams, WithdrawVesuUsdcParams, CallAnyContractParams, CreateWalletParams, CreateWalletResponse, RecordSendTransactionParams, Transaction } from '@chipi-stack/types';
1
+ import { ChipiSDKConfig, ExecuteTransactionParams, TransferParams, ApproveParams, StakeVesuUsdcParams, WithdrawVesuUsdcParams, CallAnyContractParams, CreateWalletParams, CreateWalletResponse, RecordSendTransactionParams, Transaction, GetWalletParams, GetWalletResponse } from '@chipi-stack/types';
2
2
  export * from '@chipi-stack/types';
3
3
  import { ChipiWallets } from './wallets.js';
4
4
  import { ChipiTransactions } from './transactions.js';
@@ -54,6 +54,7 @@ declare class ChipiSDK {
54
54
  params: RecordSendTransactionParams;
55
55
  bearerToken: string;
56
56
  }): Promise<Transaction>;
57
+ getWallet(params: Omit<GetWalletParams, "apiPublicKey" | "nodeUrl">): Promise<GetWalletResponse>;
57
58
  }
58
59
 
59
60
  declare const encryptPrivateKey: (privateKey: string, password: string) => string;
package/dist/index.js CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  var shared = require('@chipi-stack/shared');
4
4
  var starknet = require('starknet');
5
- var CryptoJS2 = require('crypto-js');
5
+ var CryptoJS = require('crypto-js');
6
6
  var types = require('@chipi-stack/types');
7
7
 
8
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
9
 
10
- var CryptoJS2__default = /*#__PURE__*/_interopDefault(CryptoJS2);
10
+ var CryptoJS__default = /*#__PURE__*/_interopDefault(CryptoJS);
11
11
 
12
12
  // src/chipi-sdk.ts
13
13
  var ChipiClient = class {
@@ -166,7 +166,10 @@ var ChipiWallets = class {
166
166
  if (!privateKey || !password) {
167
167
  throw new Error("Private key and password are required");
168
168
  }
169
- return CryptoJS2__default.default.AES.encrypt(privateKey, password).toString();
169
+ return CryptoJS__default.default.AES.encrypt(privateKey, password).toString();
170
+ };
171
+ this.decryptPrivateKey = (encryptedPrivateKey, encryptKey) => {
172
+ return CryptoJS__default.default.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS__default.default.enc.Utf8);
170
173
  };
171
174
  }
172
175
  /**
@@ -300,12 +303,52 @@ var ChipiWallets = class {
300
303
  });
301
304
  return response.data;
302
305
  }
306
+ async getWallet(params) {
307
+ try {
308
+ const {
309
+ externalUserId,
310
+ bearerToken,
311
+ encryptKey
312
+ } = params;
313
+ const getExternalUserWalletResponse = await this.client.get({
314
+ endpoint: `${shared.API_ENDPOINTS.CHIPI_WALLETS}/by-user`,
315
+ params: { externalUserId },
316
+ bearerToken
317
+ });
318
+ console.log("getExternalUserWalletResponse", getExternalUserWalletResponse);
319
+ const walletData = getExternalUserWalletResponse.data;
320
+ console.log("walletData", walletData);
321
+ if (walletData && walletData.encryptedPrivateKey) {
322
+ const decryptedKey = this.decryptPrivateKey(
323
+ walletData.encryptedPrivateKey,
324
+ encryptKey
325
+ );
326
+ console.log("decryptedKey", decryptedKey);
327
+ return {
328
+ success: true,
329
+ wallet: {
330
+ publicKey: walletData.publicKey,
331
+ encryptedPrivateKey: decryptedKey
332
+ }
333
+ };
334
+ }
335
+ return {
336
+ success: false,
337
+ wallet: {
338
+ publicKey: "",
339
+ encryptedPrivateKey: ""
340
+ }
341
+ };
342
+ } catch (err) {
343
+ throw new Error(`getWallet error: ${String(err)}`);
344
+ }
345
+ }
303
346
  };
304
347
  var encryptPrivateKey = (privateKey, password) => {
305
348
  if (!privateKey || !password) {
306
349
  throw new Error("Private key and password are required");
307
350
  }
308
- return CryptoJS2__default.default.AES.encrypt(privateKey, password).toString();
351
+ return CryptoJS__default.default.AES.encrypt(privateKey, password).toString();
309
352
  };
310
353
  var decryptPrivateKey = (encryptedPrivateKey, password) => {
311
354
  if (!encryptedPrivateKey || !password) {
@@ -313,8 +356,8 @@ var decryptPrivateKey = (encryptedPrivateKey, password) => {
313
356
  return null;
314
357
  }
315
358
  try {
316
- const bytes = CryptoJS2__default.default.AES.decrypt(encryptedPrivateKey, password);
317
- const decrypted = bytes.toString(CryptoJS2__default.default.enc.Utf8);
359
+ const bytes = CryptoJS__default.default.AES.decrypt(encryptedPrivateKey, password);
360
+ const decrypted = bytes.toString(CryptoJS__default.default.enc.Utf8);
318
361
  if (!decrypted) {
319
362
  return null;
320
363
  }
@@ -643,6 +686,17 @@ var ChipiSDK = class {
643
686
  bearerToken
644
687
  });
645
688
  }
689
+ async getWallet(params) {
690
+ const { encryptKey, bearerToken, externalUserId } = params;
691
+ return this.wallets.getWallet({
692
+ encryptKey,
693
+ apiPublicKey: this.client.getApiPublicKey(),
694
+ bearerToken,
695
+ nodeUrl: this.nodeUrl,
696
+ backendUrl: this.client.baseUrl,
697
+ externalUserId
698
+ });
699
+ }
646
700
  };
647
701
 
648
702
  exports.ChipiClient = ChipiClient;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/wallets.ts","../src/lib/encryption.ts","../src/gasless.ts","../src/transactions.ts","../src/skus.ts","../src/chipi-sdk.ts"],"names":["isValidApiKey","ChipiAuthError","validateErrorResponse","ChipiApiError","validateApiResponse","handleApiError","CryptoJS","RpcProvider","stark","ec","CairoCustomEnum","CairoOption","CairoOptionVariant","CallData","hash","Account","API_ENDPOINTS","num","ChipiTransactionError","STARKNET_CONTRACTS","formatAmount","STARKNET_NETWORKS","CONTRACT_ADDRESSES"],"mappings":"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","file":"index.js","sourcesContent":["import type { ChipiSDKConfig } from '@chipi-stack/types';\nimport { isValidApiKey, handleApiError, validateApiResponse, validateErrorResponse, type ApiResponse } from '@chipi-stack/shared';\nimport { ChipiAuthError, ChipiApiError } from '@chipi-stack/shared';\n\n/**\n * HTTP client for Chipi API interactions\n */\nexport class ChipiClient {\n private apiPublicKey: string;\n baseUrl: string;\n private environment: 'development' | 'production';\n\n constructor(config: ChipiSDKConfig) {\n if (!isValidApiKey(config.apiPublicKey)) {\n throw new ChipiAuthError('Invalid API key format');\n }\n\n this.apiPublicKey = config.apiPublicKey;\n this.environment = config.environment || 'production';\n this.baseUrl = this.getBaseUrl();\n }\n\n /**\n * Get the API public key (for internal SDK use)\n */\n getApiPublicKey(): string {\n return this.apiPublicKey;\n }\n\n private getBaseUrl(): string {\n if (this.environment === 'development') {\n return 'http://localhost:3000/v1';\n }\n return 'https://api.chipipay.com/v1';\n }\n\n private getHeaders(bearerToken?: string): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiPublicKey,\n };\n\n if (bearerToken) {\n headers['Authorization'] = `Bearer ${bearerToken}`;\n }\n\n return headers;\n }\n\n async get<T>(\n {\n endpoint,\n params,\n bearerToken,\n }: {\n endpoint: string;\n params?: Record<string, any>;\n bearerToken?: string;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const url = new URL(`${this.baseUrl}${endpoint}`);\n \n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'GET',\n headers: this.getHeaders(bearerToken),\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async post<T>(\n {\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'POST',\n headers: this.getHeaders(bearerToken),\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async put<T>(\n {\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'PUT',\n headers: this.getHeaders(bearerToken),\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async delete<T>(\n {\n endpoint,\n bearerToken,\n }: {\n endpoint: string;\n bearerToken: string;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'DELETE',\n headers: this.getHeaders(bearerToken),\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n}\n","import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationParams,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetMerchantWalletParams,\n PaginationQuery,\n PaginatedResponse,\n WalletData,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\nimport { ChipiTransactionError } from \"@chipi-stack/shared\";\nimport {\n Account,\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CallData,\n ec,\n hash,\n num,\n RpcProvider,\n stark,\n} from \"starknet\";\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from \"@avnu/gasless-sdk\";\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: nodeUrl });\n // Generating the private key with Stark Curve\n const privateKeyAX = stark.randomAddress();\n const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);\n\n // Using Argent X Account v0.4.0 class hash\n const accountClassHash =\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"; //params.argentClassHash;\n\n // Calculate future address of the ArgentX account\n const axSigner = new CairoCustomEnum({\n Starknet: { pubkey: starkKeyPubAX },\n });\n // Set the dApp Guardian address\n const axGuardian = new CairoOption<unknown>(CairoOptionVariant.None);\n\n const AXConstructorCallData = CallData.compile({\n owner: axSigner,\n guardian: axGuardian,\n });\n\n const publicKey = hash.calculateContractAddressFromHash(\n starkKeyPubAX,\n accountClassHash,\n AXConstructorCallData,\n 0\n );\n // console.log(\"Contract address: \", contractAddress);\n\n // Initiating Account\n const account = new Account(provider, publicKey, privateKeyAX);\n // console.log(\"Account \", { ...account });\n const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\n // console.log(\"Type data: \", typeData);\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // console.log(\"User signature: \", userSignature);\n const deploymentData: DeploymentData = {\n class_hash: accountClassHashResponse,\n salt: starkKeyPubAX,\n unique: `${num.toHex(0)}`,\n calldata: AXConstructorCallData.map((value) => num.toHex(value)),\n };\n\n // console.log(\"Deployment data: ------ \", deploymentData);\n const encryptedPrivateKey = this.encryptPrivateKey(\n privateKeyAX,\n encryptKey\n );\n // console.log(\"Encrypted private key: \", encryptedPrivateKey);\n\n // Llamar a la API para guardar la wallet en dashboard\n const executeTransactionResponse = await this.client.post<\n CreateWalletResponse & { message: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,\n bearerToken,\n body: {\n externalUserId,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map((data) => `${data}`),\n },\n },\n });\n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n throw new ChipiTransactionError(\n `Failed to create wallet: ${executeTransaction.message}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n\n encryptPrivateKey = (privateKey: string, password: string): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet({\n params,\n bearerToken,\n }: {\n params: Omit<CreateCustodialWalletParams, \"orgId\">;\n bearerToken: string;\n }): Promise<WalletData> {\n const response = await this.client.post<WalletData>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,\n bearerToken,\n body: params,\n });\n\n return response.data!;\n }\n}\n","import CryptoJS from \"crypto-js\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string,\n): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string,\n): string | null => {\n if (!encryptedPrivateKey || !password) {\n console.error(\"Encrypted private key and password are required\");\n return null;\n }\n\n try {\n const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoJS.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) {\n return null;\n }\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n return null;\n }\n};\n","import type { ExecuteSponsoredTransactionResponse, ExecuteTransactionParams } from '@chipi-stack/types';\nimport { Account, RpcProvider, TypedData } from 'starknet';\nimport { decryptPrivateKey } from './lib';\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 params: ExecuteTransactionParams & {backendUrl: string} // Backend url shit is temporary\n): Promise<string> => {\n try {\n const { encryptKey, wallet, calls, apiPublicKey, bearerToken,backendUrl } = 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(`${backendUrl}/transactions/prepare-typed-data`, {\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: \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"\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 \n // Execute the transaction\n const executeTransaction = await fetch(`${backendUrl}/transactions/execute-sponsored-transaction`, {\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 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 = 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\n","import {\n STARKNET_CONTRACTS,\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 './gasless';\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: Omit<ExecuteTransactionParams, 'apiPublicKey'>\n ): Promise<string> {\n return executePaymasterTransaction({\n ...params,\n apiPublicKey: this.client.getApiPublicKey(),\n backendUrl: this.client.baseUrl,\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 encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress,\n entrypoint: 'transfer',\n calldata: [\n recipient,\n formattedAmount,\n '0x0',\n ],\n },\n ],\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: any;\n contractAddress: string;\n spender: string;\n amount: string | number;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n \n return this.executeTransaction({\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n bearerToken: params.bearerToken,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: 'approve',\n calldata: [\n params.spender,\n formattedAmount,\n '0x0',\n ],\n },\n ],\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract(params: {\n encryptKey: string;\n wallet: any;\n calls: any[];\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n bearerToken: params.bearerToken,\n calls: params.calls,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction(\n {\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }\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.data;\n }\n}\n","import type {\n FindSkusParams,\n FindSkusResponse,\n CreateSkuTransactionParams,\n SkuTransaction,\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","import type {\n ChipiSDKConfig,\n CreateWalletParams,\n CreateWalletResponse,\n TransferParams,\n ApproveParams,\n StakeVesuUsdcParams,\n WithdrawVesuUsdcParams,\n CallAnyContractParams,\n ExecuteTransactionParams,\n RecordSendTransactionParams,\n SkuTransaction,\n CreateSkuTransactionParams,\n Transaction\n} from \"@chipi-stack/types\";\nimport {\n STARKNET_NETWORKS,\n CONTRACT_ADDRESSES,\n formatAmount,\n} from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { ChipiWallets } from \"./wallets\";\nimport { ChipiTransactions } from \"./transactions\";\nimport { ChipiSkus } from \"./skus\";\n\n/**\n * Main Chipi SDK class\n */\nexport class ChipiSDK {\n private client: ChipiClient;\n private nodeUrl: string;\n\n public readonly wallets: ChipiWallets;\n public readonly transactions: ChipiTransactions;\n public readonly skus: ChipiSkus;\n\n constructor(config: ChipiSDKConfig) {\n this.client = new ChipiClient(config);\n this.nodeUrl = config.nodeUrl || STARKNET_NETWORKS.MAINNET;\n\n // Initialize service classes\n this.wallets = new ChipiWallets(this.client);\n this.transactions = new ChipiTransactions(this.client);\n this.skus = new ChipiSkus(this.client);\n\n // Bind methods to preserve context\n this.executeTransaction = this.executeTransaction.bind(this);\n this.transfer = this.transfer.bind(this);\n this.approve = this.approve.bind(this);\n this.stakeVesuUsdc = this.stakeVesuUsdc.bind(this);\n this.withdrawVesuUsdc = this.withdrawVesuUsdc.bind(this);\n this.callAnyContract = this.callAnyContract.bind(this);\n this.createWallet = this.createWallet.bind(this);\n this.recordSendTransaction = this.recordSendTransaction.bind(this);\n }\n\n /**\n * Execute a gasless transaction\n */\n async executeTransaction(\n input: Omit<ExecuteTransactionParams, \"apiPublicKey\">\n ): Promise<string> {\n return this.transactions.executeTransaction(input);\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 return this.transactions.transfer({\n params,\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: Omit<ApproveParams, \"apiPublicKey\">): Promise<string> {\n const {\n encryptKey,\n wallet,\n contractAddress,\n spender,\n amount,\n decimals,\n bearerToken,\n } = params;\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress,\n entrypoint: \"approve\",\n calldata: [spender, formatAmount(amount, decimals), \"0x0\"],\n },\n ],\n });\n }\n\n /**\n * Stake USDC in Vesu protocol\n */\n async stakeVesuUsdc(\n params: Omit<StakeVesuUsdcParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, amount, receiverWallet, bearerToken } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.USDC_MAINNET,\n entrypoint: \"approve\",\n calldata: [\n CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n formattedAmount,\n \"0x0\",\n ],\n },\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"deposit\",\n calldata: [formattedAmount, \"0x0\", receiverWallet],\n },\n ],\n });\n }\n\n /**\n * Withdraw USDC from Vesu protocol\n */\n async withdrawVesuUsdc(\n params: Omit<WithdrawVesuUsdcParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, amount, recipient, bearerToken } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"withdraw\",\n calldata: [formattedAmount, recipient, \"0x0\"],\n },\n ],\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract(\n params: Omit<CallAnyContractParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, calls, bearerToken } = params;\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls,\n });\n }\n\n /**\n * Create a new wallet\n */\n async createWallet({\n params,\n bearerToken,\n }: {\n params: CreateWalletParams;\n bearerToken: string;\n }): Promise<CreateWalletResponse> {\n return this.wallets.createWallet({\n ...params,\n bearerToken,\n });\n }\n\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n return this.transactions.recordSendTransaction({\n params,\n bearerToken,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/wallets.ts","../src/lib/encryption.ts","../src/gasless.ts","../src/transactions.ts","../src/skus.ts","../src/chipi-sdk.ts"],"names":["isValidApiKey","ChipiAuthError","validateErrorResponse","ChipiApiError","validateApiResponse","handleApiError","CryptoJS","RpcProvider","stark","ec","CairoCustomEnum","CairoOption","CairoOptionVariant","CallData","hash","Account","API_ENDPOINTS","num","ChipiTransactionError","STARKNET_CONTRACTS","formatAmount","STARKNET_NETWORKS","CONTRACT_ADDRESSES"],"mappings":"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","file":"index.js","sourcesContent":["import type { ChipiSDKConfig } from '@chipi-stack/types';\nimport { isValidApiKey, handleApiError, validateApiResponse, validateErrorResponse, type ApiResponse } from '@chipi-stack/shared';\nimport { ChipiAuthError, ChipiApiError } from '@chipi-stack/shared';\n\n/**\n * HTTP client for Chipi API interactions\n */\nexport class ChipiClient {\n private apiPublicKey: string;\n baseUrl: string;\n private environment: 'development' | 'production';\n\n constructor(config: ChipiSDKConfig) {\n if (!isValidApiKey(config.apiPublicKey)) {\n throw new ChipiAuthError('Invalid API key format');\n }\n\n this.apiPublicKey = config.apiPublicKey;\n this.environment = config.environment || 'production';\n this.baseUrl = this.getBaseUrl();\n }\n\n /**\n * Get the API public key (for internal SDK use)\n */\n getApiPublicKey(): string {\n return this.apiPublicKey;\n }\n\n private getBaseUrl(): string {\n if (this.environment === 'development') {\n return 'http://localhost:3000/v1';\n }\n return 'https://api.chipipay.com/v1';\n }\n\n private getHeaders(bearerToken?: string): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiPublicKey,\n };\n\n if (bearerToken) {\n headers['Authorization'] = `Bearer ${bearerToken}`;\n }\n\n return headers;\n }\n\n async get<T>(\n {\n endpoint,\n params,\n bearerToken,\n }: {\n endpoint: string;\n params?: Record<string, any>;\n bearerToken?: string;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const url = new URL(`${this.baseUrl}${endpoint}`);\n \n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'GET',\n headers: this.getHeaders(bearerToken),\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async post<T>(\n {\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'POST',\n headers: this.getHeaders(bearerToken),\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async put<T>(\n {\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'PUT',\n headers: this.getHeaders(bearerToken),\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async delete<T>(\n {\n endpoint,\n bearerToken,\n }: {\n endpoint: string;\n bearerToken: string;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'DELETE',\n headers: this.getHeaders(bearerToken),\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n}\n","import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationParams,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetMerchantWalletParams,\n PaginationQuery,\n PaginatedResponse,\n WalletData,\n GetWalletParams,\n GetWalletResponse,\n BackendGetWalletResponse,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n\nimport { ChipiTransactionError } from \"@chipi-stack/shared\";\nimport {\n Account,\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CallData,\n ec,\n hash,\n num,\n RpcProvider,\n stark,\n} from \"starknet\";\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from \"@avnu/gasless-sdk\";\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: nodeUrl });\n // Generating the private key with Stark Curve\n const privateKeyAX = stark.randomAddress();\n const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);\n\n // Using Argent X Account v0.4.0 class hash\n const accountClassHash =\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"; //params.argentClassHash;\n\n // Calculate future address of the ArgentX account\n const axSigner = new CairoCustomEnum({\n Starknet: { pubkey: starkKeyPubAX },\n });\n // Set the dApp Guardian address\n const axGuardian = new CairoOption<unknown>(CairoOptionVariant.None);\n\n const AXConstructorCallData = CallData.compile({\n owner: axSigner,\n guardian: axGuardian,\n });\n\n const publicKey = hash.calculateContractAddressFromHash(\n starkKeyPubAX,\n accountClassHash,\n AXConstructorCallData,\n 0\n );\n // console.log(\"Contract address: \", contractAddress);\n\n // Initiating Account\n const account = new Account(provider, publicKey, privateKeyAX);\n // console.log(\"Account \", { ...account });\n const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\n // console.log(\"Type data: \", typeData);\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // console.log(\"User signature: \", userSignature);\n const deploymentData: DeploymentData = {\n class_hash: accountClassHashResponse,\n salt: starkKeyPubAX,\n unique: `${num.toHex(0)}`,\n calldata: AXConstructorCallData.map((value) => num.toHex(value)),\n };\n\n // console.log(\"Deployment data: ------ \", deploymentData);\n const encryptedPrivateKey = this.encryptPrivateKey(\n privateKeyAX,\n encryptKey\n );\n // console.log(\"Encrypted private key: \", encryptedPrivateKey);\n\n // Llamar a la API para guardar la wallet en dashboard\n const executeTransactionResponse = await this.client.post<\n CreateWalletResponse & { message: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,\n bearerToken,\n body: {\n externalUserId,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map((data) => `${data}`),\n },\n },\n });\n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n throw new ChipiTransactionError(\n `Failed to create wallet: ${executeTransaction.message}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n encryptPrivateKey = (privateKey: string, password: string): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n decryptPrivateKey = (encryptedPrivateKey: string, encryptKey: string): string => {\n return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);\n };\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet({\n params,\n bearerToken,\n }: {\n params: Omit<CreateCustodialWalletParams, \"orgId\">;\n bearerToken: string;\n }): Promise<WalletData> {\n const response = await this.client.post<WalletData>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,\n bearerToken,\n body: params,\n });\n\n return response.data!;\n }\n\n async getWallet(\n params: GetWalletParams & { backendUrl: string }\n ): Promise<GetWalletResponse> {\n try {\n const {\n externalUserId,\n bearerToken,\n encryptKey,\n } = params;\n\n /* const getExternalUserWalletResponse = await fetch(\n `${backendUrl}/chipi-wallets/by-user?externalUserId=${externalUserId}`,\n {\n method: \"GET\",\n headers: {\n 'Authorization': `Bearer ${bearerToken}`,\n 'x-api-key': apiPublicKey,\n 'content-type': 'application/json',\n },\n }\n ); */\n const getExternalUserWalletResponse = await this.client.get<BackendGetWalletResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n\n console.log(\"getExternalUserWalletResponse\", getExternalUserWalletResponse);\n const walletData = getExternalUserWalletResponse.data;\n console.log(\"walletData\", walletData);\n if (walletData && walletData.encryptedPrivateKey) {\n const decryptedKey = this.decryptPrivateKey(\n walletData.encryptedPrivateKey,\n encryptKey\n );\n console.log(\"decryptedKey\", decryptedKey);\n return {\n success: true,\n wallet: {\n publicKey: walletData.publicKey,\n encryptedPrivateKey: decryptedKey,\n },\n };\n }\n\n return {\n success: false,\n wallet: {\n publicKey: \"\",\n encryptedPrivateKey: \"\",\n },\n };\n } catch (err) {\n throw new Error(`getWallet error: ${String(err)}`);\n }\n }\n}\n","import CryptoJS from \"crypto-js\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string,\n): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string,\n): string | null => {\n if (!encryptedPrivateKey || !password) {\n console.error(\"Encrypted private key and password are required\");\n return null;\n }\n\n try {\n const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoJS.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) {\n return null;\n }\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n return null;\n }\n};\n","import type { ExecuteSponsoredTransactionResponse, ExecuteTransactionParams } from '@chipi-stack/types';\nimport { Account, RpcProvider, TypedData } from 'starknet';\nimport { decryptPrivateKey } from './lib';\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 params: ExecuteTransactionParams & {backendUrl: string} // Backend url shit is temporary\n): Promise<string> => {\n try {\n const { encryptKey, wallet, calls, apiPublicKey, bearerToken,backendUrl } = 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(`${backendUrl}/transactions/prepare-typed-data`, {\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: \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"\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 \n // Execute the transaction\n const executeTransaction = await fetch(`${backendUrl}/transactions/execute-sponsored-transaction`, {\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 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 = 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\n","import {\n STARKNET_CONTRACTS,\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 './gasless';\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: Omit<ExecuteTransactionParams, 'apiPublicKey'>\n ): Promise<string> {\n return executePaymasterTransaction({\n ...params,\n apiPublicKey: this.client.getApiPublicKey(),\n backendUrl: this.client.baseUrl,\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 encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress,\n entrypoint: 'transfer',\n calldata: [\n recipient,\n formattedAmount,\n '0x0',\n ],\n },\n ],\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: any;\n contractAddress: string;\n spender: string;\n amount: string | number;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n \n return this.executeTransaction({\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n bearerToken: params.bearerToken,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: 'approve',\n calldata: [\n params.spender,\n formattedAmount,\n '0x0',\n ],\n },\n ],\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract(params: {\n encryptKey: string;\n wallet: any;\n calls: any[];\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n bearerToken: params.bearerToken,\n calls: params.calls,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction(\n {\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }\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.data;\n }\n}\n","import type {\n FindSkusParams,\n FindSkusResponse,\n CreateSkuTransactionParams,\n SkuTransaction,\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","import type {\n ChipiSDKConfig,\n CreateWalletParams,\n CreateWalletResponse,\n GetWalletParams,\n GetWalletResponse,\n TransferParams,\n ApproveParams,\n StakeVesuUsdcParams,\n WithdrawVesuUsdcParams,\n CallAnyContractParams,\n ExecuteTransactionParams,\n RecordSendTransactionParams,\n SkuTransaction,\n CreateSkuTransactionParams,\n Transaction\n} from \"@chipi-stack/types\";\nimport {\n STARKNET_NETWORKS,\n CONTRACT_ADDRESSES,\n formatAmount,\n} from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { ChipiWallets } from \"./wallets\";\nimport { ChipiTransactions } from \"./transactions\";\nimport { ChipiSkus } from \"./skus\";\n\n/**\n * Main Chipi SDK class\n */\nexport class ChipiSDK {\n private client: ChipiClient;\n private nodeUrl: string;\n\n public readonly wallets: ChipiWallets;\n public readonly transactions: ChipiTransactions;\n public readonly skus: ChipiSkus;\n\n constructor(config: ChipiSDKConfig) {\n this.client = new ChipiClient(config);\n this.nodeUrl = config.nodeUrl || STARKNET_NETWORKS.MAINNET;\n\n // Initialize service classes\n this.wallets = new ChipiWallets(this.client);\n this.transactions = new ChipiTransactions(this.client);\n this.skus = new ChipiSkus(this.client);\n\n // Bind methods to preserve context\n this.executeTransaction = this.executeTransaction.bind(this);\n this.transfer = this.transfer.bind(this);\n this.approve = this.approve.bind(this);\n this.stakeVesuUsdc = this.stakeVesuUsdc.bind(this);\n this.withdrawVesuUsdc = this.withdrawVesuUsdc.bind(this);\n this.callAnyContract = this.callAnyContract.bind(this);\n this.createWallet = this.createWallet.bind(this);\n this.recordSendTransaction = this.recordSendTransaction.bind(this);\n }\n\n /**\n * Execute a gasless transaction\n */\n async executeTransaction(\n input: Omit<ExecuteTransactionParams, \"apiPublicKey\">\n ): Promise<string> {\n return this.transactions.executeTransaction(input);\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 return this.transactions.transfer({\n params,\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: Omit<ApproveParams, \"apiPublicKey\">): Promise<string> {\n const {\n encryptKey,\n wallet,\n contractAddress,\n spender,\n amount,\n decimals,\n bearerToken,\n } = params;\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress,\n entrypoint: \"approve\",\n calldata: [spender, formatAmount(amount, decimals), \"0x0\"],\n },\n ],\n });\n }\n\n /**\n * Stake USDC in Vesu protocol\n */\n async stakeVesuUsdc(\n params: Omit<StakeVesuUsdcParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, amount, receiverWallet, bearerToken } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.USDC_MAINNET,\n entrypoint: \"approve\",\n calldata: [\n CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n formattedAmount,\n \"0x0\",\n ],\n },\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"deposit\",\n calldata: [formattedAmount, \"0x0\", receiverWallet],\n },\n ],\n });\n }\n\n /**\n * Withdraw USDC from Vesu protocol\n */\n async withdrawVesuUsdc(\n params: Omit<WithdrawVesuUsdcParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, amount, recipient, bearerToken } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"withdraw\",\n calldata: [formattedAmount, recipient, \"0x0\"],\n },\n ],\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract(\n params: Omit<CallAnyContractParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, calls, bearerToken } = params;\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls,\n });\n }\n\n /**\n * Create a new wallet\n */\n async createWallet({\n params,\n bearerToken,\n }: {\n params: CreateWalletParams;\n bearerToken: string;\n }): Promise<CreateWalletResponse> {\n return this.wallets.createWallet({\n ...params,\n bearerToken,\n });\n }\n\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n return this.transactions.recordSendTransaction({\n params,\n bearerToken,\n });\n }\n\n async getWallet(params: Omit<GetWalletParams, \"apiPublicKey\" | \"nodeUrl\">)\n :Promise<GetWalletResponse> {\n const { encryptKey, bearerToken, externalUserId } = params;\n return this.wallets.getWallet({\n encryptKey,\n apiPublicKey: this.client.getApiPublicKey(),\n bearerToken,\n nodeUrl: this.nodeUrl,\n backendUrl: this.client.baseUrl,\n externalUserId,\n });\n ;\n }\n\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { isValidApiKey, ChipiAuthError, validateErrorResponse, ChipiApiError, validateApiResponse, handleApiError, API_ENDPOINTS, ChipiTransactionError, formatAmount, STARKNET_NETWORKS, CONTRACT_ADDRESSES } from '@chipi-stack/shared';
2
2
  import { RpcProvider, stark, ec, CairoCustomEnum, CairoOption, CairoOptionVariant, CallData, hash, Account, num } from 'starknet';
3
- import CryptoJS2 from 'crypto-js';
3
+ import CryptoJS from 'crypto-js';
4
4
  import { STARKNET_CONTRACTS } from '@chipi-stack/types';
5
5
 
6
6
  // src/chipi-sdk.ts
@@ -160,7 +160,10 @@ var ChipiWallets = class {
160
160
  if (!privateKey || !password) {
161
161
  throw new Error("Private key and password are required");
162
162
  }
163
- return CryptoJS2.AES.encrypt(privateKey, password).toString();
163
+ return CryptoJS.AES.encrypt(privateKey, password).toString();
164
+ };
165
+ this.decryptPrivateKey = (encryptedPrivateKey, encryptKey) => {
166
+ return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);
164
167
  };
165
168
  }
166
169
  /**
@@ -294,12 +297,52 @@ var ChipiWallets = class {
294
297
  });
295
298
  return response.data;
296
299
  }
300
+ async getWallet(params) {
301
+ try {
302
+ const {
303
+ externalUserId,
304
+ bearerToken,
305
+ encryptKey
306
+ } = params;
307
+ const getExternalUserWalletResponse = await this.client.get({
308
+ endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,
309
+ params: { externalUserId },
310
+ bearerToken
311
+ });
312
+ console.log("getExternalUserWalletResponse", getExternalUserWalletResponse);
313
+ const walletData = getExternalUserWalletResponse.data;
314
+ console.log("walletData", walletData);
315
+ if (walletData && walletData.encryptedPrivateKey) {
316
+ const decryptedKey = this.decryptPrivateKey(
317
+ walletData.encryptedPrivateKey,
318
+ encryptKey
319
+ );
320
+ console.log("decryptedKey", decryptedKey);
321
+ return {
322
+ success: true,
323
+ wallet: {
324
+ publicKey: walletData.publicKey,
325
+ encryptedPrivateKey: decryptedKey
326
+ }
327
+ };
328
+ }
329
+ return {
330
+ success: false,
331
+ wallet: {
332
+ publicKey: "",
333
+ encryptedPrivateKey: ""
334
+ }
335
+ };
336
+ } catch (err) {
337
+ throw new Error(`getWallet error: ${String(err)}`);
338
+ }
339
+ }
297
340
  };
298
341
  var encryptPrivateKey = (privateKey, password) => {
299
342
  if (!privateKey || !password) {
300
343
  throw new Error("Private key and password are required");
301
344
  }
302
- return CryptoJS2.AES.encrypt(privateKey, password).toString();
345
+ return CryptoJS.AES.encrypt(privateKey, password).toString();
303
346
  };
304
347
  var decryptPrivateKey = (encryptedPrivateKey, password) => {
305
348
  if (!encryptedPrivateKey || !password) {
@@ -307,8 +350,8 @@ var decryptPrivateKey = (encryptedPrivateKey, password) => {
307
350
  return null;
308
351
  }
309
352
  try {
310
- const bytes = CryptoJS2.AES.decrypt(encryptedPrivateKey, password);
311
- const decrypted = bytes.toString(CryptoJS2.enc.Utf8);
353
+ const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);
354
+ const decrypted = bytes.toString(CryptoJS.enc.Utf8);
312
355
  if (!decrypted) {
313
356
  return null;
314
357
  }
@@ -637,6 +680,17 @@ var ChipiSDK = class {
637
680
  bearerToken
638
681
  });
639
682
  }
683
+ async getWallet(params) {
684
+ const { encryptKey, bearerToken, externalUserId } = params;
685
+ return this.wallets.getWallet({
686
+ encryptKey,
687
+ apiPublicKey: this.client.getApiPublicKey(),
688
+ bearerToken,
689
+ nodeUrl: this.nodeUrl,
690
+ backendUrl: this.client.baseUrl,
691
+ externalUserId
692
+ });
693
+ }
640
694
  };
641
695
 
642
696
  export { ChipiClient, ChipiSDK, ChipiSkus, ChipiTransactions, ChipiWallets, decryptPrivateKey, encryptPrivateKey };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/wallets.ts","../src/lib/encryption.ts","../src/gasless.ts","../src/transactions.ts","../src/skus.ts","../src/chipi-sdk.ts"],"names":["CryptoJS","RpcProvider","Account","API_ENDPOINTS","formatAmount"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ChipiSDKConfig } from '@chipi-stack/types';\nimport { isValidApiKey, handleApiError, validateApiResponse, validateErrorResponse, type ApiResponse } from '@chipi-stack/shared';\nimport { ChipiAuthError, ChipiApiError } from '@chipi-stack/shared';\n\n/**\n * HTTP client for Chipi API interactions\n */\nexport class ChipiClient {\n private apiPublicKey: string;\n baseUrl: string;\n private environment: 'development' | 'production';\n\n constructor(config: ChipiSDKConfig) {\n if (!isValidApiKey(config.apiPublicKey)) {\n throw new ChipiAuthError('Invalid API key format');\n }\n\n this.apiPublicKey = config.apiPublicKey;\n this.environment = config.environment || 'production';\n this.baseUrl = this.getBaseUrl();\n }\n\n /**\n * Get the API public key (for internal SDK use)\n */\n getApiPublicKey(): string {\n return this.apiPublicKey;\n }\n\n private getBaseUrl(): string {\n if (this.environment === 'development') {\n return 'http://localhost:3000/v1';\n }\n return 'https://api.chipipay.com/v1';\n }\n\n private getHeaders(bearerToken?: string): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiPublicKey,\n };\n\n if (bearerToken) {\n headers['Authorization'] = `Bearer ${bearerToken}`;\n }\n\n return headers;\n }\n\n async get<T>(\n {\n endpoint,\n params,\n bearerToken,\n }: {\n endpoint: string;\n params?: Record<string, any>;\n bearerToken?: string;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const url = new URL(`${this.baseUrl}${endpoint}`);\n \n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'GET',\n headers: this.getHeaders(bearerToken),\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async post<T>(\n {\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'POST',\n headers: this.getHeaders(bearerToken),\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async put<T>(\n {\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'PUT',\n headers: this.getHeaders(bearerToken),\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async delete<T>(\n {\n endpoint,\n bearerToken,\n }: {\n endpoint: string;\n bearerToken: string;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'DELETE',\n headers: this.getHeaders(bearerToken),\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n}\n","import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationParams,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetMerchantWalletParams,\n PaginationQuery,\n PaginatedResponse,\n WalletData,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\nimport { ChipiTransactionError } from \"@chipi-stack/shared\";\nimport {\n Account,\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CallData,\n ec,\n hash,\n num,\n RpcProvider,\n stark,\n} from \"starknet\";\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from \"@avnu/gasless-sdk\";\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: nodeUrl });\n // Generating the private key with Stark Curve\n const privateKeyAX = stark.randomAddress();\n const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);\n\n // Using Argent X Account v0.4.0 class hash\n const accountClassHash =\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"; //params.argentClassHash;\n\n // Calculate future address of the ArgentX account\n const axSigner = new CairoCustomEnum({\n Starknet: { pubkey: starkKeyPubAX },\n });\n // Set the dApp Guardian address\n const axGuardian = new CairoOption<unknown>(CairoOptionVariant.None);\n\n const AXConstructorCallData = CallData.compile({\n owner: axSigner,\n guardian: axGuardian,\n });\n\n const publicKey = hash.calculateContractAddressFromHash(\n starkKeyPubAX,\n accountClassHash,\n AXConstructorCallData,\n 0\n );\n // console.log(\"Contract address: \", contractAddress);\n\n // Initiating Account\n const account = new Account(provider, publicKey, privateKeyAX);\n // console.log(\"Account \", { ...account });\n const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\n // console.log(\"Type data: \", typeData);\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // console.log(\"User signature: \", userSignature);\n const deploymentData: DeploymentData = {\n class_hash: accountClassHashResponse,\n salt: starkKeyPubAX,\n unique: `${num.toHex(0)}`,\n calldata: AXConstructorCallData.map((value) => num.toHex(value)),\n };\n\n // console.log(\"Deployment data: ------ \", deploymentData);\n const encryptedPrivateKey = this.encryptPrivateKey(\n privateKeyAX,\n encryptKey\n );\n // console.log(\"Encrypted private key: \", encryptedPrivateKey);\n\n // Llamar a la API para guardar la wallet en dashboard\n const executeTransactionResponse = await this.client.post<\n CreateWalletResponse & { message: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,\n bearerToken,\n body: {\n externalUserId,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map((data) => `${data}`),\n },\n },\n });\n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n throw new ChipiTransactionError(\n `Failed to create wallet: ${executeTransaction.message}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n\n encryptPrivateKey = (privateKey: string, password: string): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet({\n params,\n bearerToken,\n }: {\n params: Omit<CreateCustodialWalletParams, \"orgId\">;\n bearerToken: string;\n }): Promise<WalletData> {\n const response = await this.client.post<WalletData>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,\n bearerToken,\n body: params,\n });\n\n return response.data!;\n }\n}\n","import CryptoJS from \"crypto-js\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string,\n): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string,\n): string | null => {\n if (!encryptedPrivateKey || !password) {\n console.error(\"Encrypted private key and password are required\");\n return null;\n }\n\n try {\n const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoJS.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) {\n return null;\n }\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n return null;\n }\n};\n","import type { ExecuteSponsoredTransactionResponse, ExecuteTransactionParams } from '@chipi-stack/types';\nimport { Account, RpcProvider, TypedData } from 'starknet';\nimport { decryptPrivateKey } from './lib';\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 params: ExecuteTransactionParams & {backendUrl: string} // Backend url shit is temporary\n): Promise<string> => {\n try {\n const { encryptKey, wallet, calls, apiPublicKey, bearerToken,backendUrl } = 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(`${backendUrl}/transactions/prepare-typed-data`, {\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: \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"\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 \n // Execute the transaction\n const executeTransaction = await fetch(`${backendUrl}/transactions/execute-sponsored-transaction`, {\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 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 = 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\n","import {\n STARKNET_CONTRACTS,\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 './gasless';\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: Omit<ExecuteTransactionParams, 'apiPublicKey'>\n ): Promise<string> {\n return executePaymasterTransaction({\n ...params,\n apiPublicKey: this.client.getApiPublicKey(),\n backendUrl: this.client.baseUrl,\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 encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress,\n entrypoint: 'transfer',\n calldata: [\n recipient,\n formattedAmount,\n '0x0',\n ],\n },\n ],\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: any;\n contractAddress: string;\n spender: string;\n amount: string | number;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n \n return this.executeTransaction({\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n bearerToken: params.bearerToken,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: 'approve',\n calldata: [\n params.spender,\n formattedAmount,\n '0x0',\n ],\n },\n ],\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract(params: {\n encryptKey: string;\n wallet: any;\n calls: any[];\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n bearerToken: params.bearerToken,\n calls: params.calls,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction(\n {\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }\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.data;\n }\n}\n","import type {\n FindSkusParams,\n FindSkusResponse,\n CreateSkuTransactionParams,\n SkuTransaction,\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","import type {\n ChipiSDKConfig,\n CreateWalletParams,\n CreateWalletResponse,\n TransferParams,\n ApproveParams,\n StakeVesuUsdcParams,\n WithdrawVesuUsdcParams,\n CallAnyContractParams,\n ExecuteTransactionParams,\n RecordSendTransactionParams,\n SkuTransaction,\n CreateSkuTransactionParams,\n Transaction\n} from \"@chipi-stack/types\";\nimport {\n STARKNET_NETWORKS,\n CONTRACT_ADDRESSES,\n formatAmount,\n} from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { ChipiWallets } from \"./wallets\";\nimport { ChipiTransactions } from \"./transactions\";\nimport { ChipiSkus } from \"./skus\";\n\n/**\n * Main Chipi SDK class\n */\nexport class ChipiSDK {\n private client: ChipiClient;\n private nodeUrl: string;\n\n public readonly wallets: ChipiWallets;\n public readonly transactions: ChipiTransactions;\n public readonly skus: ChipiSkus;\n\n constructor(config: ChipiSDKConfig) {\n this.client = new ChipiClient(config);\n this.nodeUrl = config.nodeUrl || STARKNET_NETWORKS.MAINNET;\n\n // Initialize service classes\n this.wallets = new ChipiWallets(this.client);\n this.transactions = new ChipiTransactions(this.client);\n this.skus = new ChipiSkus(this.client);\n\n // Bind methods to preserve context\n this.executeTransaction = this.executeTransaction.bind(this);\n this.transfer = this.transfer.bind(this);\n this.approve = this.approve.bind(this);\n this.stakeVesuUsdc = this.stakeVesuUsdc.bind(this);\n this.withdrawVesuUsdc = this.withdrawVesuUsdc.bind(this);\n this.callAnyContract = this.callAnyContract.bind(this);\n this.createWallet = this.createWallet.bind(this);\n this.recordSendTransaction = this.recordSendTransaction.bind(this);\n }\n\n /**\n * Execute a gasless transaction\n */\n async executeTransaction(\n input: Omit<ExecuteTransactionParams, \"apiPublicKey\">\n ): Promise<string> {\n return this.transactions.executeTransaction(input);\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 return this.transactions.transfer({\n params,\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: Omit<ApproveParams, \"apiPublicKey\">): Promise<string> {\n const {\n encryptKey,\n wallet,\n contractAddress,\n spender,\n amount,\n decimals,\n bearerToken,\n } = params;\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress,\n entrypoint: \"approve\",\n calldata: [spender, formatAmount(amount, decimals), \"0x0\"],\n },\n ],\n });\n }\n\n /**\n * Stake USDC in Vesu protocol\n */\n async stakeVesuUsdc(\n params: Omit<StakeVesuUsdcParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, amount, receiverWallet, bearerToken } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.USDC_MAINNET,\n entrypoint: \"approve\",\n calldata: [\n CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n formattedAmount,\n \"0x0\",\n ],\n },\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"deposit\",\n calldata: [formattedAmount, \"0x0\", receiverWallet],\n },\n ],\n });\n }\n\n /**\n * Withdraw USDC from Vesu protocol\n */\n async withdrawVesuUsdc(\n params: Omit<WithdrawVesuUsdcParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, amount, recipient, bearerToken } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"withdraw\",\n calldata: [formattedAmount, recipient, \"0x0\"],\n },\n ],\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract(\n params: Omit<CallAnyContractParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, calls, bearerToken } = params;\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls,\n });\n }\n\n /**\n * Create a new wallet\n */\n async createWallet({\n params,\n bearerToken,\n }: {\n params: CreateWalletParams;\n bearerToken: string;\n }): Promise<CreateWalletResponse> {\n return this.wallets.createWallet({\n ...params,\n bearerToken,\n });\n }\n\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n return this.transactions.recordSendTransaction({\n params,\n bearerToken,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/wallets.ts","../src/lib/encryption.ts","../src/gasless.ts","../src/transactions.ts","../src/skus.ts","../src/chipi-sdk.ts"],"names":["CryptoJS","RpcProvider","Account","API_ENDPOINTS","formatAmount"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ChipiSDKConfig } from '@chipi-stack/types';\nimport { isValidApiKey, handleApiError, validateApiResponse, validateErrorResponse, type ApiResponse } from '@chipi-stack/shared';\nimport { ChipiAuthError, ChipiApiError } from '@chipi-stack/shared';\n\n/**\n * HTTP client for Chipi API interactions\n */\nexport class ChipiClient {\n private apiPublicKey: string;\n baseUrl: string;\n private environment: 'development' | 'production';\n\n constructor(config: ChipiSDKConfig) {\n if (!isValidApiKey(config.apiPublicKey)) {\n throw new ChipiAuthError('Invalid API key format');\n }\n\n this.apiPublicKey = config.apiPublicKey;\n this.environment = config.environment || 'production';\n this.baseUrl = this.getBaseUrl();\n }\n\n /**\n * Get the API public key (for internal SDK use)\n */\n getApiPublicKey(): string {\n return this.apiPublicKey;\n }\n\n private getBaseUrl(): string {\n if (this.environment === 'development') {\n return 'http://localhost:3000/v1';\n }\n return 'https://api.chipipay.com/v1';\n }\n\n private getHeaders(bearerToken?: string): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'x-api-key': this.apiPublicKey,\n };\n\n if (bearerToken) {\n headers['Authorization'] = `Bearer ${bearerToken}`;\n }\n\n return headers;\n }\n\n async get<T>(\n {\n endpoint,\n params,\n bearerToken,\n }: {\n endpoint: string;\n params?: Record<string, any>;\n bearerToken?: string;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const url = new URL(`${this.baseUrl}${endpoint}`);\n \n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n const response = await fetch(url.toString(), {\n method: 'GET',\n headers: this.getHeaders(bearerToken),\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async post<T>(\n {\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'POST',\n headers: this.getHeaders(bearerToken),\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async put<T>(\n {\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'PUT',\n headers: this.getHeaders(bearerToken),\n body: body ? JSON.stringify(body) : undefined,\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async delete<T>(\n {\n endpoint,\n bearerToken,\n }: {\n endpoint: string;\n bearerToken: string;\n }\n ): Promise<ApiResponse<T>> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: 'DELETE',\n headers: this.getHeaders(bearerToken),\n });\n\n const rawData = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(rawData);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return {\n success: true,\n data: validateApiResponse(rawData),\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n}\n","import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationParams,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetMerchantWalletParams,\n PaginationQuery,\n PaginatedResponse,\n WalletData,\n GetWalletParams,\n GetWalletResponse,\n BackendGetWalletResponse,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n\nimport { ChipiTransactionError } from \"@chipi-stack/shared\";\nimport {\n Account,\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CallData,\n ec,\n hash,\n num,\n RpcProvider,\n stark,\n} from \"starknet\";\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from \"@avnu/gasless-sdk\";\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: nodeUrl });\n // Generating the private key with Stark Curve\n const privateKeyAX = stark.randomAddress();\n const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);\n\n // Using Argent X Account v0.4.0 class hash\n const accountClassHash =\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"; //params.argentClassHash;\n\n // Calculate future address of the ArgentX account\n const axSigner = new CairoCustomEnum({\n Starknet: { pubkey: starkKeyPubAX },\n });\n // Set the dApp Guardian address\n const axGuardian = new CairoOption<unknown>(CairoOptionVariant.None);\n\n const AXConstructorCallData = CallData.compile({\n owner: axSigner,\n guardian: axGuardian,\n });\n\n const publicKey = hash.calculateContractAddressFromHash(\n starkKeyPubAX,\n accountClassHash,\n AXConstructorCallData,\n 0\n );\n // console.log(\"Contract address: \", contractAddress);\n\n // Initiating Account\n const account = new Account(provider, publicKey, privateKeyAX);\n // console.log(\"Account \", { ...account });\n const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\n // console.log(\"Type data: \", typeData);\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // console.log(\"User signature: \", userSignature);\n const deploymentData: DeploymentData = {\n class_hash: accountClassHashResponse,\n salt: starkKeyPubAX,\n unique: `${num.toHex(0)}`,\n calldata: AXConstructorCallData.map((value) => num.toHex(value)),\n };\n\n // console.log(\"Deployment data: ------ \", deploymentData);\n const encryptedPrivateKey = this.encryptPrivateKey(\n privateKeyAX,\n encryptKey\n );\n // console.log(\"Encrypted private key: \", encryptedPrivateKey);\n\n // Llamar a la API para guardar la wallet en dashboard\n const executeTransactionResponse = await this.client.post<\n CreateWalletResponse & { message: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,\n bearerToken,\n body: {\n externalUserId,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map((data) => `${data}`),\n },\n },\n });\n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n throw new ChipiTransactionError(\n `Failed to create wallet: ${executeTransaction.message}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n encryptPrivateKey = (privateKey: string, password: string): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n decryptPrivateKey = (encryptedPrivateKey: string, encryptKey: string): string => {\n return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);\n };\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet({\n params,\n bearerToken,\n }: {\n params: Omit<CreateCustodialWalletParams, \"orgId\">;\n bearerToken: string;\n }): Promise<WalletData> {\n const response = await this.client.post<WalletData>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,\n bearerToken,\n body: params,\n });\n\n return response.data!;\n }\n\n async getWallet(\n params: GetWalletParams & { backendUrl: string }\n ): Promise<GetWalletResponse> {\n try {\n const {\n externalUserId,\n bearerToken,\n encryptKey,\n } = params;\n\n /* const getExternalUserWalletResponse = await fetch(\n `${backendUrl}/chipi-wallets/by-user?externalUserId=${externalUserId}`,\n {\n method: \"GET\",\n headers: {\n 'Authorization': `Bearer ${bearerToken}`,\n 'x-api-key': apiPublicKey,\n 'content-type': 'application/json',\n },\n }\n ); */\n const getExternalUserWalletResponse = await this.client.get<BackendGetWalletResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n\n console.log(\"getExternalUserWalletResponse\", getExternalUserWalletResponse);\n const walletData = getExternalUserWalletResponse.data;\n console.log(\"walletData\", walletData);\n if (walletData && walletData.encryptedPrivateKey) {\n const decryptedKey = this.decryptPrivateKey(\n walletData.encryptedPrivateKey,\n encryptKey\n );\n console.log(\"decryptedKey\", decryptedKey);\n return {\n success: true,\n wallet: {\n publicKey: walletData.publicKey,\n encryptedPrivateKey: decryptedKey,\n },\n };\n }\n\n return {\n success: false,\n wallet: {\n publicKey: \"\",\n encryptedPrivateKey: \"\",\n },\n };\n } catch (err) {\n throw new Error(`getWallet error: ${String(err)}`);\n }\n }\n}\n","import CryptoJS from \"crypto-js\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string,\n): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string,\n): string | null => {\n if (!encryptedPrivateKey || !password) {\n console.error(\"Encrypted private key and password are required\");\n return null;\n }\n\n try {\n const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoJS.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) {\n return null;\n }\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n return null;\n }\n};\n","import type { ExecuteSponsoredTransactionResponse, ExecuteTransactionParams } from '@chipi-stack/types';\nimport { Account, RpcProvider, TypedData } from 'starknet';\nimport { decryptPrivateKey } from './lib';\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 params: ExecuteTransactionParams & {backendUrl: string} // Backend url shit is temporary\n): Promise<string> => {\n try {\n const { encryptKey, wallet, calls, apiPublicKey, bearerToken,backendUrl } = 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(`${backendUrl}/transactions/prepare-typed-data`, {\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: \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"\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 \n // Execute the transaction\n const executeTransaction = await fetch(`${backendUrl}/transactions/execute-sponsored-transaction`, {\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 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 = 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\n","import {\n STARKNET_CONTRACTS,\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 './gasless';\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: Omit<ExecuteTransactionParams, 'apiPublicKey'>\n ): Promise<string> {\n return executePaymasterTransaction({\n ...params,\n apiPublicKey: this.client.getApiPublicKey(),\n backendUrl: this.client.baseUrl,\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 encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress,\n entrypoint: 'transfer',\n calldata: [\n recipient,\n formattedAmount,\n '0x0',\n ],\n },\n ],\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: any;\n contractAddress: string;\n spender: string;\n amount: string | number;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n \n return this.executeTransaction({\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n bearerToken: params.bearerToken,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: 'approve',\n calldata: [\n params.spender,\n formattedAmount,\n '0x0',\n ],\n },\n ],\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract(params: {\n encryptKey: string;\n wallet: any;\n calls: any[];\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n bearerToken: params.bearerToken,\n calls: params.calls,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction(\n {\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }\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.data;\n }\n}\n","import type {\n FindSkusParams,\n FindSkusResponse,\n CreateSkuTransactionParams,\n SkuTransaction,\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","import type {\n ChipiSDKConfig,\n CreateWalletParams,\n CreateWalletResponse,\n GetWalletParams,\n GetWalletResponse,\n TransferParams,\n ApproveParams,\n StakeVesuUsdcParams,\n WithdrawVesuUsdcParams,\n CallAnyContractParams,\n ExecuteTransactionParams,\n RecordSendTransactionParams,\n SkuTransaction,\n CreateSkuTransactionParams,\n Transaction\n} from \"@chipi-stack/types\";\nimport {\n STARKNET_NETWORKS,\n CONTRACT_ADDRESSES,\n formatAmount,\n} from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { ChipiWallets } from \"./wallets\";\nimport { ChipiTransactions } from \"./transactions\";\nimport { ChipiSkus } from \"./skus\";\n\n/**\n * Main Chipi SDK class\n */\nexport class ChipiSDK {\n private client: ChipiClient;\n private nodeUrl: string;\n\n public readonly wallets: ChipiWallets;\n public readonly transactions: ChipiTransactions;\n public readonly skus: ChipiSkus;\n\n constructor(config: ChipiSDKConfig) {\n this.client = new ChipiClient(config);\n this.nodeUrl = config.nodeUrl || STARKNET_NETWORKS.MAINNET;\n\n // Initialize service classes\n this.wallets = new ChipiWallets(this.client);\n this.transactions = new ChipiTransactions(this.client);\n this.skus = new ChipiSkus(this.client);\n\n // Bind methods to preserve context\n this.executeTransaction = this.executeTransaction.bind(this);\n this.transfer = this.transfer.bind(this);\n this.approve = this.approve.bind(this);\n this.stakeVesuUsdc = this.stakeVesuUsdc.bind(this);\n this.withdrawVesuUsdc = this.withdrawVesuUsdc.bind(this);\n this.callAnyContract = this.callAnyContract.bind(this);\n this.createWallet = this.createWallet.bind(this);\n this.recordSendTransaction = this.recordSendTransaction.bind(this);\n }\n\n /**\n * Execute a gasless transaction\n */\n async executeTransaction(\n input: Omit<ExecuteTransactionParams, \"apiPublicKey\">\n ): Promise<string> {\n return this.transactions.executeTransaction(input);\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 return this.transactions.transfer({\n params,\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: Omit<ApproveParams, \"apiPublicKey\">): Promise<string> {\n const {\n encryptKey,\n wallet,\n contractAddress,\n spender,\n amount,\n decimals,\n bearerToken,\n } = params;\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress,\n entrypoint: \"approve\",\n calldata: [spender, formatAmount(amount, decimals), \"0x0\"],\n },\n ],\n });\n }\n\n /**\n * Stake USDC in Vesu protocol\n */\n async stakeVesuUsdc(\n params: Omit<StakeVesuUsdcParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, amount, receiverWallet, bearerToken } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.USDC_MAINNET,\n entrypoint: \"approve\",\n calldata: [\n CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n formattedAmount,\n \"0x0\",\n ],\n },\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"deposit\",\n calldata: [formattedAmount, \"0x0\", receiverWallet],\n },\n ],\n });\n }\n\n /**\n * Withdraw USDC from Vesu protocol\n */\n async withdrawVesuUsdc(\n params: Omit<WithdrawVesuUsdcParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, amount, recipient, bearerToken } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"withdraw\",\n calldata: [formattedAmount, recipient, \"0x0\"],\n },\n ],\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract(\n params: Omit<CallAnyContractParams, \"apiPublicKey\">\n ): Promise<string> {\n const { encryptKey, wallet, calls, bearerToken } = params;\n return this.executeTransaction({\n encryptKey,\n wallet,\n bearerToken,\n calls,\n });\n }\n\n /**\n * Create a new wallet\n */\n async createWallet({\n params,\n bearerToken,\n }: {\n params: CreateWalletParams;\n bearerToken: string;\n }): Promise<CreateWalletResponse> {\n return this.wallets.createWallet({\n ...params,\n bearerToken,\n });\n }\n\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n return this.transactions.recordSendTransaction({\n params,\n bearerToken,\n });\n }\n\n async getWallet(params: Omit<GetWalletParams, \"apiPublicKey\" | \"nodeUrl\">)\n :Promise<GetWalletResponse> {\n const { encryptKey, bearerToken, externalUserId } = params;\n return this.wallets.getWallet({\n encryptKey,\n apiPublicKey: this.client.getApiPublicKey(),\n bearerToken,\n nodeUrl: this.nodeUrl,\n backendUrl: this.client.baseUrl,\n externalUserId,\n });\n ;\n }\n\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { CreateWalletParams, CreateWalletResponse, CreateCustodialWalletParams, WalletData } from '@chipi-stack/types';
1
+ import { CreateWalletParams, CreateWalletResponse, CreateCustodialWalletParams, WalletData, GetWalletParams, GetWalletResponse } from '@chipi-stack/types';
2
2
  import { C as ChipiClient } from './client-BaNfges3.mjs';
3
3
  import '@chipi-stack/shared';
4
4
 
@@ -18,6 +18,7 @@ declare class ChipiWallets {
18
18
  bearerToken: string;
19
19
  }): Promise<CreateWalletResponse>;
20
20
  encryptPrivateKey: (privateKey: string, password: string) => string;
21
+ decryptPrivateKey: (encryptedPrivateKey: string, encryptKey: string) => string;
21
22
  /**
22
23
  * Create a custodial merchant wallet
23
24
  */
@@ -25,6 +26,9 @@ declare class ChipiWallets {
25
26
  params: Omit<CreateCustodialWalletParams, "orgId">;
26
27
  bearerToken: string;
27
28
  }): Promise<WalletData>;
29
+ getWallet(params: GetWalletParams & {
30
+ backendUrl: string;
31
+ }): Promise<GetWalletResponse>;
28
32
  }
29
33
 
30
34
  export { ChipiWallets };
package/dist/wallets.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { CreateWalletParams, CreateWalletResponse, CreateCustodialWalletParams, WalletData } from '@chipi-stack/types';
1
+ import { CreateWalletParams, CreateWalletResponse, CreateCustodialWalletParams, WalletData, GetWalletParams, GetWalletResponse } from '@chipi-stack/types';
2
2
  import { C as ChipiClient } from './client-BaNfges3.js';
3
3
  import '@chipi-stack/shared';
4
4
 
@@ -18,6 +18,7 @@ declare class ChipiWallets {
18
18
  bearerToken: string;
19
19
  }): Promise<CreateWalletResponse>;
20
20
  encryptPrivateKey: (privateKey: string, password: string) => string;
21
+ decryptPrivateKey: (encryptedPrivateKey: string, encryptKey: string) => string;
21
22
  /**
22
23
  * Create a custodial merchant wallet
23
24
  */
@@ -25,6 +26,9 @@ declare class ChipiWallets {
25
26
  params: Omit<CreateCustodialWalletParams, "orgId">;
26
27
  bearerToken: string;
27
28
  }): Promise<WalletData>;
29
+ getWallet(params: GetWalletParams & {
30
+ backendUrl: string;
31
+ }): Promise<GetWalletResponse>;
28
32
  }
29
33
 
30
34
  export { ChipiWallets };
package/dist/wallets.js CHANGED
@@ -18,6 +18,9 @@ var ChipiWallets = class {
18
18
  }
19
19
  return CryptoJS__default.default.AES.encrypt(privateKey, password).toString();
20
20
  };
21
+ this.decryptPrivateKey = (encryptedPrivateKey, encryptKey) => {
22
+ return CryptoJS__default.default.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS__default.default.enc.Utf8);
23
+ };
21
24
  }
22
25
  /**
23
26
  * Prepare wallet creation data
@@ -150,6 +153,46 @@ var ChipiWallets = class {
150
153
  });
151
154
  return response.data;
152
155
  }
156
+ async getWallet(params) {
157
+ try {
158
+ const {
159
+ externalUserId,
160
+ bearerToken,
161
+ encryptKey
162
+ } = params;
163
+ const getExternalUserWalletResponse = await this.client.get({
164
+ endpoint: `${shared.API_ENDPOINTS.CHIPI_WALLETS}/by-user`,
165
+ params: { externalUserId },
166
+ bearerToken
167
+ });
168
+ console.log("getExternalUserWalletResponse", getExternalUserWalletResponse);
169
+ const walletData = getExternalUserWalletResponse.data;
170
+ console.log("walletData", walletData);
171
+ if (walletData && walletData.encryptedPrivateKey) {
172
+ const decryptedKey = this.decryptPrivateKey(
173
+ walletData.encryptedPrivateKey,
174
+ encryptKey
175
+ );
176
+ console.log("decryptedKey", decryptedKey);
177
+ return {
178
+ success: true,
179
+ wallet: {
180
+ publicKey: walletData.publicKey,
181
+ encryptedPrivateKey: decryptedKey
182
+ }
183
+ };
184
+ }
185
+ return {
186
+ success: false,
187
+ wallet: {
188
+ publicKey: "",
189
+ encryptedPrivateKey: ""
190
+ }
191
+ };
192
+ } catch (err) {
193
+ throw new Error(`getWallet error: ${String(err)}`);
194
+ }
195
+ }
153
196
  };
154
197
 
155
198
  exports.ChipiWallets = ChipiWallets;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/wallets.ts"],"names":["CryptoJS","RpcProvider","stark","ec","CairoCustomEnum","CairoOption","CairoOptionVariant","CallData","hash","Account","API_ENDPOINTS","num","ChipiTransactionError"],"mappings":"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","file":"wallets.js","sourcesContent":["import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationParams,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetMerchantWalletParams,\n PaginationQuery,\n PaginatedResponse,\n WalletData,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\nimport { ChipiTransactionError } from \"@chipi-stack/shared\";\nimport {\n Account,\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CallData,\n ec,\n hash,\n num,\n RpcProvider,\n stark,\n} from \"starknet\";\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from \"@avnu/gasless-sdk\";\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: nodeUrl });\n // Generating the private key with Stark Curve\n const privateKeyAX = stark.randomAddress();\n const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);\n\n // Using Argent X Account v0.4.0 class hash\n const accountClassHash =\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"; //params.argentClassHash;\n\n // Calculate future address of the ArgentX account\n const axSigner = new CairoCustomEnum({\n Starknet: { pubkey: starkKeyPubAX },\n });\n // Set the dApp Guardian address\n const axGuardian = new CairoOption<unknown>(CairoOptionVariant.None);\n\n const AXConstructorCallData = CallData.compile({\n owner: axSigner,\n guardian: axGuardian,\n });\n\n const publicKey = hash.calculateContractAddressFromHash(\n starkKeyPubAX,\n accountClassHash,\n AXConstructorCallData,\n 0\n );\n // console.log(\"Contract address: \", contractAddress);\n\n // Initiating Account\n const account = new Account(provider, publicKey, privateKeyAX);\n // console.log(\"Account \", { ...account });\n const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\n // console.log(\"Type data: \", typeData);\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // console.log(\"User signature: \", userSignature);\n const deploymentData: DeploymentData = {\n class_hash: accountClassHashResponse,\n salt: starkKeyPubAX,\n unique: `${num.toHex(0)}`,\n calldata: AXConstructorCallData.map((value) => num.toHex(value)),\n };\n\n // console.log(\"Deployment data: ------ \", deploymentData);\n const encryptedPrivateKey = this.encryptPrivateKey(\n privateKeyAX,\n encryptKey\n );\n // console.log(\"Encrypted private key: \", encryptedPrivateKey);\n\n // Llamar a la API para guardar la wallet en dashboard\n const executeTransactionResponse = await this.client.post<\n CreateWalletResponse & { message: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,\n bearerToken,\n body: {\n externalUserId,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map((data) => `${data}`),\n },\n },\n });\n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n throw new ChipiTransactionError(\n `Failed to create wallet: ${executeTransaction.message}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n\n encryptPrivateKey = (privateKey: string, password: string): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet({\n params,\n bearerToken,\n }: {\n params: Omit<CreateCustodialWalletParams, \"orgId\">;\n bearerToken: string;\n }): Promise<WalletData> {\n const response = await this.client.post<WalletData>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,\n bearerToken,\n body: params,\n });\n\n return response.data!;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/wallets.ts"],"names":["CryptoJS","RpcProvider","stark","ec","CairoCustomEnum","CairoOption","CairoOptionVariant","CallData","hash","Account","API_ENDPOINTS","num","ChipiTransactionError"],"mappings":"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","file":"wallets.js","sourcesContent":["import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationParams,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetMerchantWalletParams,\n PaginationQuery,\n PaginatedResponse,\n WalletData,\n GetWalletParams,\n GetWalletResponse,\n BackendGetWalletResponse,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n\nimport { ChipiTransactionError } from \"@chipi-stack/shared\";\nimport {\n Account,\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CallData,\n ec,\n hash,\n num,\n RpcProvider,\n stark,\n} from \"starknet\";\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from \"@avnu/gasless-sdk\";\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: nodeUrl });\n // Generating the private key with Stark Curve\n const privateKeyAX = stark.randomAddress();\n const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);\n\n // Using Argent X Account v0.4.0 class hash\n const accountClassHash =\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"; //params.argentClassHash;\n\n // Calculate future address of the ArgentX account\n const axSigner = new CairoCustomEnum({\n Starknet: { pubkey: starkKeyPubAX },\n });\n // Set the dApp Guardian address\n const axGuardian = new CairoOption<unknown>(CairoOptionVariant.None);\n\n const AXConstructorCallData = CallData.compile({\n owner: axSigner,\n guardian: axGuardian,\n });\n\n const publicKey = hash.calculateContractAddressFromHash(\n starkKeyPubAX,\n accountClassHash,\n AXConstructorCallData,\n 0\n );\n // console.log(\"Contract address: \", contractAddress);\n\n // Initiating Account\n const account = new Account(provider, publicKey, privateKeyAX);\n // console.log(\"Account \", { ...account });\n const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\n // console.log(\"Type data: \", typeData);\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // console.log(\"User signature: \", userSignature);\n const deploymentData: DeploymentData = {\n class_hash: accountClassHashResponse,\n salt: starkKeyPubAX,\n unique: `${num.toHex(0)}`,\n calldata: AXConstructorCallData.map((value) => num.toHex(value)),\n };\n\n // console.log(\"Deployment data: ------ \", deploymentData);\n const encryptedPrivateKey = this.encryptPrivateKey(\n privateKeyAX,\n encryptKey\n );\n // console.log(\"Encrypted private key: \", encryptedPrivateKey);\n\n // Llamar a la API para guardar la wallet en dashboard\n const executeTransactionResponse = await this.client.post<\n CreateWalletResponse & { message: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,\n bearerToken,\n body: {\n externalUserId,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map((data) => `${data}`),\n },\n },\n });\n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n throw new ChipiTransactionError(\n `Failed to create wallet: ${executeTransaction.message}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n encryptPrivateKey = (privateKey: string, password: string): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n decryptPrivateKey = (encryptedPrivateKey: string, encryptKey: string): string => {\n return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);\n };\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet({\n params,\n bearerToken,\n }: {\n params: Omit<CreateCustodialWalletParams, \"orgId\">;\n bearerToken: string;\n }): Promise<WalletData> {\n const response = await this.client.post<WalletData>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,\n bearerToken,\n body: params,\n });\n\n return response.data!;\n }\n\n async getWallet(\n params: GetWalletParams & { backendUrl: string }\n ): Promise<GetWalletResponse> {\n try {\n const {\n externalUserId,\n bearerToken,\n encryptKey,\n } = params;\n\n /* const getExternalUserWalletResponse = await fetch(\n `${backendUrl}/chipi-wallets/by-user?externalUserId=${externalUserId}`,\n {\n method: \"GET\",\n headers: {\n 'Authorization': `Bearer ${bearerToken}`,\n 'x-api-key': apiPublicKey,\n 'content-type': 'application/json',\n },\n }\n ); */\n const getExternalUserWalletResponse = await this.client.get<BackendGetWalletResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n\n console.log(\"getExternalUserWalletResponse\", getExternalUserWalletResponse);\n const walletData = getExternalUserWalletResponse.data;\n console.log(\"walletData\", walletData);\n if (walletData && walletData.encryptedPrivateKey) {\n const decryptedKey = this.decryptPrivateKey(\n walletData.encryptedPrivateKey,\n encryptKey\n );\n console.log(\"decryptedKey\", decryptedKey);\n return {\n success: true,\n wallet: {\n publicKey: walletData.publicKey,\n encryptedPrivateKey: decryptedKey,\n },\n };\n }\n\n return {\n success: false,\n wallet: {\n publicKey: \"\",\n encryptedPrivateKey: \"\",\n },\n };\n } catch (err) {\n throw new Error(`getWallet error: ${String(err)}`);\n }\n }\n}\n"]}
package/dist/wallets.mjs CHANGED
@@ -12,6 +12,9 @@ var ChipiWallets = class {
12
12
  }
13
13
  return CryptoJS.AES.encrypt(privateKey, password).toString();
14
14
  };
15
+ this.decryptPrivateKey = (encryptedPrivateKey, encryptKey) => {
16
+ return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);
17
+ };
15
18
  }
16
19
  /**
17
20
  * Prepare wallet creation data
@@ -144,6 +147,46 @@ var ChipiWallets = class {
144
147
  });
145
148
  return response.data;
146
149
  }
150
+ async getWallet(params) {
151
+ try {
152
+ const {
153
+ externalUserId,
154
+ bearerToken,
155
+ encryptKey
156
+ } = params;
157
+ const getExternalUserWalletResponse = await this.client.get({
158
+ endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,
159
+ params: { externalUserId },
160
+ bearerToken
161
+ });
162
+ console.log("getExternalUserWalletResponse", getExternalUserWalletResponse);
163
+ const walletData = getExternalUserWalletResponse.data;
164
+ console.log("walletData", walletData);
165
+ if (walletData && walletData.encryptedPrivateKey) {
166
+ const decryptedKey = this.decryptPrivateKey(
167
+ walletData.encryptedPrivateKey,
168
+ encryptKey
169
+ );
170
+ console.log("decryptedKey", decryptedKey);
171
+ return {
172
+ success: true,
173
+ wallet: {
174
+ publicKey: walletData.publicKey,
175
+ encryptedPrivateKey: decryptedKey
176
+ }
177
+ };
178
+ }
179
+ return {
180
+ success: false,
181
+ wallet: {
182
+ publicKey: "",
183
+ encryptedPrivateKey: ""
184
+ }
185
+ };
186
+ } catch (err) {
187
+ throw new Error(`getWallet error: ${String(err)}`);
188
+ }
189
+ }
147
190
  };
148
191
 
149
192
  export { ChipiWallets };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/wallets.ts"],"names":[],"mappings":"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","file":"wallets.mjs","sourcesContent":["import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationParams,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetMerchantWalletParams,\n PaginationQuery,\n PaginatedResponse,\n WalletData,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\nimport { ChipiTransactionError } from \"@chipi-stack/shared\";\nimport {\n Account,\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CallData,\n ec,\n hash,\n num,\n RpcProvider,\n stark,\n} from \"starknet\";\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from \"@avnu/gasless-sdk\";\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: nodeUrl });\n // Generating the private key with Stark Curve\n const privateKeyAX = stark.randomAddress();\n const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);\n\n // Using Argent X Account v0.4.0 class hash\n const accountClassHash =\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"; //params.argentClassHash;\n\n // Calculate future address of the ArgentX account\n const axSigner = new CairoCustomEnum({\n Starknet: { pubkey: starkKeyPubAX },\n });\n // Set the dApp Guardian address\n const axGuardian = new CairoOption<unknown>(CairoOptionVariant.None);\n\n const AXConstructorCallData = CallData.compile({\n owner: axSigner,\n guardian: axGuardian,\n });\n\n const publicKey = hash.calculateContractAddressFromHash(\n starkKeyPubAX,\n accountClassHash,\n AXConstructorCallData,\n 0\n );\n // console.log(\"Contract address: \", contractAddress);\n\n // Initiating Account\n const account = new Account(provider, publicKey, privateKeyAX);\n // console.log(\"Account \", { ...account });\n const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\n // console.log(\"Type data: \", typeData);\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // console.log(\"User signature: \", userSignature);\n const deploymentData: DeploymentData = {\n class_hash: accountClassHashResponse,\n salt: starkKeyPubAX,\n unique: `${num.toHex(0)}`,\n calldata: AXConstructorCallData.map((value) => num.toHex(value)),\n };\n\n // console.log(\"Deployment data: ------ \", deploymentData);\n const encryptedPrivateKey = this.encryptPrivateKey(\n privateKeyAX,\n encryptKey\n );\n // console.log(\"Encrypted private key: \", encryptedPrivateKey);\n\n // Llamar a la API para guardar la wallet en dashboard\n const executeTransactionResponse = await this.client.post<\n CreateWalletResponse & { message: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,\n bearerToken,\n body: {\n externalUserId,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map((data) => `${data}`),\n },\n },\n });\n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n throw new ChipiTransactionError(\n `Failed to create wallet: ${executeTransaction.message}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n\n encryptPrivateKey = (privateKey: string, password: string): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet({\n params,\n bearerToken,\n }: {\n params: Omit<CreateCustodialWalletParams, \"orgId\">;\n bearerToken: string;\n }): Promise<WalletData> {\n const response = await this.client.post<WalletData>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,\n bearerToken,\n body: params,\n });\n\n return response.data!;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/wallets.ts"],"names":[],"mappings":";;;;;AAqCO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,MAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AA2JpB,IAAA,IAAA,CAAA,iBAAA,GAAoB,CAAC,YAAoB,QAAA,KAA6B;AACpE,MAAA,IAAI,CAAC,UAAA,IAAc,CAAC,QAAA,EAAU;AAC5B,QAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,MACzD;AAEA,MAAA,OAAO,SAAS,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,QAAQ,EAAE,QAAA,EAAS;AAAA,IAC7D,CAAA;AACA,IAAA,IAAA,CAAA,iBAAA,GAAoB,CAAC,qBAA6B,UAAA,KAA+B;AAC/E,MAAA,OAAO,QAAA,CAAS,IAAI,OAAA,CAAQ,mBAAA,EAAqB,UAAU,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAAA,IACzF,CAAA;AAAA,EApK0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmC1C,MAAM,aACJ,MAAA,EAC+B;AAC/B,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAS,cAAA,EAAgB,aAAY,GAAI,MAAA;AAE7D,MAAA,MAAM,QAAA,GAAW,IAAI,WAAA,CAAY,EAAE,SAAkB,CAAA;AAErD,MAAA,MAAM,YAAA,GAAe,MAAM,aAAA,EAAc;AACzC,MAAA,MAAM,aAAA,GAAgB,EAAA,CAAG,UAAA,CAAW,WAAA,CAAY,YAAY,CAAA;AAG5D,MAAA,MAAM,gBAAA,GACJ,oEAAA;AAGF,MAAA,MAAM,QAAA,GAAW,IAAI,eAAA,CAAgB;AAAA,QACnC,QAAA,EAAU,EAAE,MAAA,EAAQ,aAAA;AAAc,OACnC,CAAA;AAED,MAAA,MAAM,UAAA,GAAa,IAAI,WAAA,CAAqB,kBAAA,CAAmB,IAAI,CAAA;AAEnE,MAAA,MAAM,qBAAA,GAAwB,SAAS,OAAA,CAAQ;AAAA,QAC7C,KAAA,EAAO,QAAA;AAAA,QACP,QAAA,EAAU;AAAA,OACX,CAAA;AAED,MAAA,MAAM,YAAY,IAAA,CAAK,gCAAA;AAAA,QACrB,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,qBAAA;AAAA,QACA;AAAA,OACF;AAIA,MAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAQ,QAAA,EAAU,WAAW,YAAY,CAAA;AAE7D,MAAA,MAAM,gBAAA,GACJ,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAoC;AAAA,QACpD,QAAA,EAAU,CAAA,EAAG,aAAA,CAAc,aAAa,CAAA,iBAAA,CAAA;AAAA,QACxC,WAAA;AAAA,QACA,IAAA,EAAM;AAAA,UACJ;AAAA;AACF,OACD,CAAA;AAEH,MAAA,MAAM,EAAE,QAAA,EAAU,gBAAA,EAAkB,wBAAA,KAClC,gBAAA,CAAiB,IAAA;AAInB,MAAA,MAAM,aAAA,GAAgB,MAAM,OAAA,CAAQ,WAAA,CAAY,QAAQ,CAAA;AAGxD,MAAA,MAAM,cAAA,GAAiC;AAAA,QACrC,UAAA,EAAY,wBAAA;AAAA,QACZ,IAAA,EAAM,aAAA;AAAA,QACN,MAAA,EAAQ,CAAA,EAAG,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,QACvB,QAAA,EAAU,sBAAsB,GAAA,CAAI,CAAC,UAAU,GAAA,CAAI,KAAA,CAAM,KAAK,CAAC;AAAA,OACjE;AAGA,MAAA,MAAM,sBAAsB,IAAA,CAAK,iBAAA;AAAA,QAC/B,YAAA;AAAA,QACA;AAAA,OACF;AAIA,MAAA,MAAM,0BAAA,GAA6B,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAEnD;AAAA,QACA,QAAA,EAAU,CAAA,EAAG,aAAA,CAAc,aAAa,CAAA,CAAA;AAAA,QACxC,WAAA;AAAA,QACA,IAAA,EAAM;AAAA,UACJ,cAAA;AAAA,UACA,SAAA;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,WACnC;AAAA,UACA,QAAA;AAAA,UACA,mBAAA;AAAA,UACA,cAAA,EAAgB;AAAA,YACd,GAAG,cAAA;AAAA,YACH,IAAA,EAAM,CAAA,EAAG,cAAA,CAAe,IAAI,CAAA,CAAA;AAAA,YAC5B,QAAA,EAAU,eAAe,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS,CAAA,EAAG,IAAI,CAAA,CAAE;AAAA;AAC3D;AACF,OACD,CAAA;AACD,MAAA,MAAM,qBAAqB,0BAAA,CAA2B,IAAA;AACtD,MAAA,IAAI,mBAAmB,OAAA,EAAS;AAC9B,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,QAAQ,kBAAA,CAAmB,MAAA;AAAA,UAC3B,iBAAiB,kBAAA,CAAmB,eAAA;AAAA,UACpC,QAAQ,kBAAA,CAAmB;AAAA,SAC7B;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,qBAAA;AAAA,UACR,CAAA,yBAAA,EAA4B,mBAAmB,OAAO,CAAA,CAAA;AAAA,UACtD;AAAA,SACF;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAgB;AACvB,MAAA,OAAA,CAAQ,KAAA,CAAM,oBAAoB,KAAK,CAAA;AAEvC,MAAA,IAAI,iBAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3D,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,MAAM,IAAI,qBAAA;AAAA,QACR,CAAA,yBAAA,EAA4B,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAe,CAAA,CAAA;AAAA,QACpF;AAAA,OACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,qBAAA,CAAsB;AAAA,IAC1B,MAAA;AAAA,IACA;AAAA,GACF,EAGwB;AACtB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,CAAiB;AAAA,MAClD,QAAA,EAAU,CAAA,EAAG,aAAA,CAAc,aAAa,CAAA,UAAA,CAAA;AAAA,MACxC,WAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAED,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,UACJ,MAAA,EAC4B;AAC5B,IAAA,IAAI;AACF,MAAA,MAAM;AAAA,QACJ,cAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF,GAAI,MAAA;AAaJ,MAAA,MAAM,6BAAA,GAAgC,MAAM,IAAA,CAAK,MAAA,CAAO,GAAA,CAA8B;AAAA,QACpF,QAAA,EAAU,CAAA,EAAG,aAAA,CAAc,aAAa,CAAA,QAAA,CAAA;AAAA,QACxC,MAAA,EAAQ,EAAE,cAAA,EAAe;AAAA,QACzB;AAAA,OACD,CAAA;AAED,MAAA,OAAA,CAAQ,GAAA,CAAI,iCAAiC,6BAA6B,CAAA;AAC1E,MAAA,MAAM,aAAa,6BAAA,CAA8B,IAAA;AACjD,MAAA,OAAA,CAAQ,GAAA,CAAI,cAAc,UAAU,CAAA;AACpC,MAAA,IAAI,UAAA,IAAc,WAAW,mBAAA,EAAqB;AAChD,QAAA,MAAM,eAAe,IAAA,CAAK,iBAAA;AAAA,UACxB,UAAA,CAAW,mBAAA;AAAA,UACX;AAAA,SACF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,gBAAgB,YAAY,CAAA;AACxC,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,IAAA;AAAA,UACT,MAAA,EAAQ;AAAA,YACN,WAAW,UAAA,CAAW,SAAA;AAAA,YACtB,mBAAA,EAAqB;AAAA;AACvB,SACF;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAA;AAAA,QACT,MAAA,EAAQ;AAAA,UACN,SAAA,EAAW,EAAA;AAAA,UACX,mBAAA,EAAqB;AAAA;AACvB,OACF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IACnD;AAAA,EACF;AACF","file":"wallets.mjs","sourcesContent":["import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationParams,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetMerchantWalletParams,\n PaginationQuery,\n PaginatedResponse,\n WalletData,\n GetWalletParams,\n GetWalletResponse,\n BackendGetWalletResponse,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n\nimport { ChipiTransactionError } from \"@chipi-stack/shared\";\nimport {\n Account,\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CallData,\n ec,\n hash,\n num,\n RpcProvider,\n stark,\n} from \"starknet\";\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from \"@avnu/gasless-sdk\";\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: nodeUrl });\n // Generating the private key with Stark Curve\n const privateKeyAX = stark.randomAddress();\n const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);\n\n // Using Argent X Account v0.4.0 class hash\n const accountClassHash =\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"; //params.argentClassHash;\n\n // Calculate future address of the ArgentX account\n const axSigner = new CairoCustomEnum({\n Starknet: { pubkey: starkKeyPubAX },\n });\n // Set the dApp Guardian address\n const axGuardian = new CairoOption<unknown>(CairoOptionVariant.None);\n\n const AXConstructorCallData = CallData.compile({\n owner: axSigner,\n guardian: axGuardian,\n });\n\n const publicKey = hash.calculateContractAddressFromHash(\n starkKeyPubAX,\n accountClassHash,\n AXConstructorCallData,\n 0\n );\n // console.log(\"Contract address: \", contractAddress);\n\n // Initiating Account\n const account = new Account(provider, publicKey, privateKeyAX);\n // console.log(\"Account \", { ...account });\n const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\n // console.log(\"Type data: \", typeData);\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // console.log(\"User signature: \", userSignature);\n const deploymentData: DeploymentData = {\n class_hash: accountClassHashResponse,\n salt: starkKeyPubAX,\n unique: `${num.toHex(0)}`,\n calldata: AXConstructorCallData.map((value) => num.toHex(value)),\n };\n\n // console.log(\"Deployment data: ------ \", deploymentData);\n const encryptedPrivateKey = this.encryptPrivateKey(\n privateKeyAX,\n encryptKey\n );\n // console.log(\"Encrypted private key: \", encryptedPrivateKey);\n\n // Llamar a la API para guardar la wallet en dashboard\n const executeTransactionResponse = await this.client.post<\n CreateWalletResponse & { message: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,\n bearerToken,\n body: {\n externalUserId,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map((data) => `${data}`),\n },\n },\n });\n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n throw new ChipiTransactionError(\n `Failed to create wallet: ${executeTransaction.message}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n encryptPrivateKey = (privateKey: string, password: string): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n decryptPrivateKey = (encryptedPrivateKey: string, encryptKey: string): string => {\n return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);\n };\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet({\n params,\n bearerToken,\n }: {\n params: Omit<CreateCustodialWalletParams, \"orgId\">;\n bearerToken: string;\n }): Promise<WalletData> {\n const response = await this.client.post<WalletData>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,\n bearerToken,\n body: params,\n });\n\n return response.data!;\n }\n\n async getWallet(\n params: GetWalletParams & { backendUrl: string }\n ): Promise<GetWalletResponse> {\n try {\n const {\n externalUserId,\n bearerToken,\n encryptKey,\n } = params;\n\n /* const getExternalUserWalletResponse = await fetch(\n `${backendUrl}/chipi-wallets/by-user?externalUserId=${externalUserId}`,\n {\n method: \"GET\",\n headers: {\n 'Authorization': `Bearer ${bearerToken}`,\n 'x-api-key': apiPublicKey,\n 'content-type': 'application/json',\n },\n }\n ); */\n const getExternalUserWalletResponse = await this.client.get<BackendGetWalletResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n\n console.log(\"getExternalUserWalletResponse\", getExternalUserWalletResponse);\n const walletData = getExternalUserWalletResponse.data;\n console.log(\"walletData\", walletData);\n if (walletData && walletData.encryptedPrivateKey) {\n const decryptedKey = this.decryptPrivateKey(\n walletData.encryptedPrivateKey,\n encryptKey\n );\n console.log(\"decryptedKey\", decryptedKey);\n return {\n success: true,\n wallet: {\n publicKey: walletData.publicKey,\n encryptedPrivateKey: decryptedKey,\n },\n };\n }\n\n return {\n success: false,\n wallet: {\n publicKey: \"\",\n encryptedPrivateKey: \"\",\n },\n };\n } catch (err) {\n throw new Error(`getWallet error: ${String(err)}`);\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chipi-stack/backend",
3
- "version": "1.0.0",
3
+ "version": "1.1.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": {
@@ -68,7 +68,7 @@
68
68
  "crypto-js": "^4.2.0",
69
69
  "starknet": "6.11.0",
70
70
  "@chipi-stack/shared": "^1.0.0",
71
- "@chipi-stack/types": "^1.0.0"
71
+ "@chipi-stack/types": "^1.1.0"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@types/node": "^22.15.15",