@chipi-stack/backend 6.0.0 → 7.0.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.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { isValidApiKey, ChipiAuthError, validateErrorResponse, ChipiApiError, handleApiError, API_ENDPOINTS, ChipiTransactionError, formatAmount, STARKNET_NETWORKS, CONTRACT_ADDRESSES } from '@chipi-stack/shared';
1
+ import { isValidApiKey, ChipiAuthError, STARKNET_NETWORKS, validateErrorResponse, ChipiApiError, handleApiError, API_ENDPOINTS, ChipiTransactionError, formatAmount, CONTRACT_ADDRESSES } from '@chipi-stack/shared';
2
2
  import { RpcProvider, stark, ec, CairoCustomEnum, CairoOption, CairoOptionVariant, CallData, hash, Account, num } from 'starknet';
3
3
  import CryptoJS from 'crypto-js';
4
4
  import { STARKNET_CONTRACTS } from '@chipi-stack/types';
@@ -12,6 +12,7 @@ var ChipiClient = class {
12
12
  this.apiPublicKey = config.apiPublicKey;
13
13
  this.environment = config.environment || "production";
14
14
  this.baseUrl = this.getBaseUrl();
15
+ this.nodeUrl = config.nodeUrl || STARKNET_NETWORKS.MAINNET;
15
16
  }
16
17
  /**
17
18
  * Get the API public key (for internal SDK use)
@@ -23,7 +24,7 @@ var ChipiClient = class {
23
24
  if (this.environment === "development") {
24
25
  return "http://localhost:3000/v1";
25
26
  }
26
- return "https://celebrated-vision-production-66a5.up.railway.app/v1";
27
+ return "https://api.chipipay.com/v1";
27
28
  }
28
29
  getHeaders(bearerToken) {
29
30
  const headers = {
@@ -62,10 +63,7 @@ var ChipiClient = class {
62
63
  response.status
63
64
  );
64
65
  }
65
- return {
66
- success: true,
67
- data
68
- };
66
+ return data;
69
67
  } catch (error) {
70
68
  throw handleApiError(error);
71
69
  }
@@ -91,10 +89,7 @@ var ChipiClient = class {
91
89
  response.status
92
90
  );
93
91
  }
94
- return {
95
- success: true,
96
- data
97
- };
92
+ return data;
98
93
  } catch (error) {
99
94
  throw handleApiError(error);
100
95
  }
@@ -119,10 +114,7 @@ var ChipiClient = class {
119
114
  response.status
120
115
  );
121
116
  }
122
- return {
123
- success: true,
124
- data
125
- };
117
+ return data;
126
118
  } catch (error) {
127
119
  throw handleApiError(error);
128
120
  }
@@ -145,10 +137,7 @@ var ChipiClient = class {
145
137
  response.status
146
138
  );
147
139
  }
148
- return {
149
- success: true,
150
- data
151
- };
140
+ return data;
152
141
  } catch (error) {
153
142
  throw handleApiError(error);
154
143
  }
@@ -167,7 +156,6 @@ var ChipiWallets = class {
167
156
  try {
168
157
  return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);
169
158
  } catch (error) {
170
- console.error("Decryption failed:", error);
171
159
  throw new Error(`Failed to decrypt private key: ${error instanceof Error ? error.message : "Unknown error"}`);
172
160
  }
173
161
  };
@@ -203,8 +191,8 @@ var ChipiWallets = class {
203
191
  // }
204
192
  async createWallet(params) {
205
193
  try {
206
- const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;
207
- const provider = new RpcProvider({ nodeUrl });
194
+ const { encryptKey, externalUserId, bearerToken } = params;
195
+ const provider = new RpcProvider({ nodeUrl: this.client.nodeUrl });
208
196
  const privateKeyAX = stark.randomAddress();
209
197
  const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);
210
198
  const accountClassHash = "0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f";
@@ -230,7 +218,7 @@ var ChipiWallets = class {
230
218
  publicKey
231
219
  }
232
220
  });
233
- const { typeData, accountClassHash: accountClassHashResponse } = typeDataResponse.data;
221
+ const { typeData, accountClassHash: accountClassHashResponse } = typeDataResponse;
234
222
  const userSignature = await account.signMessage(typeData);
235
223
  const deploymentData = {
236
224
  class_hash: accountClassHashResponse,
@@ -262,20 +250,11 @@ var ChipiWallets = class {
262
250
  }
263
251
  }
264
252
  });
265
- const executeTransaction = executeTransactionResponse.data;
266
- if (executeTransaction.success) {
267
- return {
268
- success: true,
269
- txHash: executeTransaction.txHash,
270
- walletPublicKey: executeTransaction.walletPublicKey,
271
- wallet: executeTransaction.wallet
272
- };
273
- } else {
274
- throw new ChipiTransactionError(
275
- `Failed to create wallet: ${executeTransaction.message}`,
276
- "WALLET_CREATION_FAILED"
277
- );
278
- }
253
+ return {
254
+ txHash: executeTransactionResponse.txHash,
255
+ walletPublicKey: executeTransactionResponse.walletPublicKey,
256
+ wallet: executeTransactionResponse.wallet
257
+ };
279
258
  } catch (error) {
280
259
  console.error("Error detallado:", error);
281
260
  if (error instanceof Error && error.message.includes("SSL")) {
@@ -301,38 +280,19 @@ var ChipiWallets = class {
301
280
  bearerToken,
302
281
  body: params
303
282
  });
304
- return response.data;
283
+ return response;
305
284
  }
306
285
  async getWallet(params) {
307
286
  try {
308
- const { externalUserId, bearerToken, encryptKey } = params;
309
- const getExternalUserWalletResponse = await this.client.get({
287
+ const { externalUserId, bearerToken } = params;
288
+ const getWalletResponse = await this.client.get({
310
289
  endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,
311
290
  params: { externalUserId },
312
291
  bearerToken
313
292
  });
314
- const { data } = getExternalUserWalletResponse.data;
315
- if (getExternalUserWalletResponse.success) {
316
- const decryptedKey = this.decryptPrivateKey(
317
- data.encryptedPrivateKey,
318
- encryptKey
319
- );
320
- return {
321
- success: true,
322
- wallet: {
323
- publicKey: data.publicKey,
324
- decryptedWallet: decryptedKey,
325
- encryptedPrivateKey: data.encryptedPrivateKey
326
- }
327
- };
328
- }
329
293
  return {
330
- success: false,
331
- wallet: {
332
- publicKey: "",
333
- decryptedWallet: "",
334
- encryptedPrivateKey: ""
335
- }
294
+ publicKey: getWalletResponse.publicKey,
295
+ encryptedPrivateKey: getWalletResponse.encryptedPrivateKey
336
296
  };
337
297
  } catch (err) {
338
298
  throw new Error(`getWallet error: ${String(err)}`);
@@ -351,17 +311,8 @@ var decryptPrivateKey = (encryptedPrivateKey, password) => {
351
311
  return null;
352
312
  }
353
313
  try {
354
- console.log("Attempting to decrypt:", {
355
- encryptedLength: encryptedPrivateKey.length,
356
- passwordLength: password.length,
357
- encryptedStart: encryptedPrivateKey.substring(0, 20)
358
- });
359
314
  const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);
360
315
  const decrypted = bytes.toString(CryptoJS.enc.Utf8);
361
- console.log("Decryption result:", {
362
- decryptedLength: decrypted.length,
363
- decrypted: decrypted ? "SUCCESS" : "EMPTY"
364
- });
365
316
  if (!decrypted) {
366
317
  console.error("Decryption resulted in empty string");
367
318
  return null;
@@ -539,7 +490,7 @@ var ChipiTransactions = class {
539
490
  bearerToken,
540
491
  body: params
541
492
  });
542
- return response.data;
493
+ return response;
543
494
  }
544
495
  };
545
496
 
@@ -679,7 +630,6 @@ var ChipiSDK = class {
679
630
  }) {
680
631
  return this.wallets.createWallet({
681
632
  ...params,
682
- nodeUrl: this.nodeUrl,
683
633
  bearerToken
684
634
  });
685
635
  }
@@ -693,13 +643,9 @@ var ChipiSDK = class {
693
643
  });
694
644
  }
695
645
  async getWallet(params) {
696
- const { encryptKey, bearerToken, externalUserId } = params;
646
+ const { bearerToken, externalUserId } = params;
697
647
  return this.wallets.getWallet({
698
- encryptKey,
699
- apiPublicKey: this.client.getApiPublicKey(),
700
648
  bearerToken,
701
- nodeUrl: this.nodeUrl,
702
- backendUrl: this.client.baseUrl,
703
649
  externalUserId
704
650
  });
705
651
  }
@@ -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 {\n isValidApiKey,\n handleApiError,\n validateApiResponse,\n validateErrorResponse,\n type ApiResponse,\n} 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://celebrated-vision-production-66a5.up.railway.app/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 endpoint,\n params,\n bearerToken,\n }: {\n endpoint: string;\n params?: Record<string, any>;\n bearerToken?: string;\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 data = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(data);\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: data as T,\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async post<T>({\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\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 data = await response.json();\n\n if (!response.ok) {\n console.log(\"there was an error\", data);\n const errorData = validateErrorResponse(data);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n return {\n success: true,\n data: data as T,\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async put<T>({\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\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 data = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(data);\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: data as T,\n };\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async delete<T>({\n endpoint,\n bearerToken,\n }: {\n endpoint: string;\n bearerToken: string;\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 data = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(data);\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: data as T,\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 GetWalletAPIResponse,\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\";\nimport { WalletDataResponse } from \"@chipi-stack/types\";\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 \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\n \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 \n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\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 \n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n \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 = (\n encryptedPrivateKey: string,\n encryptKey: string\n ): string => {\n try {\n \n return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n throw new Error(`Failed to decrypt private key: ${error instanceof Error ? error.message : 'Unknown error'}`);\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 async getWallet(\n params: GetWalletParams & { backendUrl: string }\n ): Promise<GetWalletResponse> {\n try {\n const { externalUserId, bearerToken, encryptKey } = 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 =\n await this.client.get<GetWalletAPIResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n\n const { data } = getExternalUserWalletResponse.data;\n \n if (getExternalUserWalletResponse.success) {\n const decryptedKey = this.decryptPrivateKey(\n data.encryptedPrivateKey\n ,\n encryptKey\n );\n \n return {\n success: true,\n wallet: {\n publicKey: data.publicKey,\n decryptedWallet: decryptedKey,\n encryptedPrivateKey: data.encryptedPrivateKey,\n },\n };\n }\n return {\n success: false,\n wallet: {\n publicKey: \"\",\n decryptedWallet: \"\",\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 console.log(\"Attempting to decrypt:\", {\n encryptedLength: encryptedPrivateKey.length,\n passwordLength: password.length,\n encryptedStart: encryptedPrivateKey.substring(0, 20)\n });\n\n // CryptoJS.AES.decrypt expects the encrypted string in the format it was created\n const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoJS.enc.Utf8);\n\n console.log(\"Decryption result:\", {\n decryptedLength: decrypted.length,\n decrypted: decrypted ? \"SUCCESS\" : \"EMPTY\"\n });\n\n // Check if the decrypted string is empty\n if (!decrypted) {\n console.error(\"Decryption resulted in empty string\");\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: Omit<CreateWalletParams, \"nodeUrl\">;\n bearerToken: string;\n }): Promise<CreateWalletResponse> {\n return this.wallets.createWallet({\n ...params,\n nodeUrl: this.nodeUrl,\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(\n 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"]}
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","STARKNET_NETWORKS","formatAmount"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { ChipiSDKConfig } from \"@chipi-stack/types\";\nimport {\n isValidApiKey,\n handleApiError,\n validateApiResponse,\n validateErrorResponse,\n type ApiResponse,\n STARKNET_NETWORKS,\n} 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 nodeUrl: 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 this.nodeUrl = config.nodeUrl || STARKNET_NETWORKS.MAINNET;\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 endpoint,\n params,\n bearerToken,\n }: {\n endpoint: string;\n params?: Record<string, any>;\n bearerToken?: string;\n }): Promise<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 data = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(data);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return data as T;\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async post<T>({\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }): Promise<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 data = await response.json();\n\n if (!response.ok) {\n console.log(\"there was an error\", data);\n const errorData = validateErrorResponse(data);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n return data as T;\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async put<T>({\n endpoint,\n bearerToken,\n body,\n }: {\n endpoint: string;\n bearerToken: string;\n body?: Record<string, any>;\n }): Promise<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 data = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(data);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return data as T;\n } catch (error) {\n throw handleApiError(error);\n }\n }\n\n async delete<T>({\n endpoint,\n bearerToken,\n }: {\n endpoint: string;\n bearerToken: string;\n }): Promise<T> {\n try {\n const response = await fetch(`${this.baseUrl}${endpoint}`, {\n method: \"DELETE\",\n headers: this.getHeaders(bearerToken),\n });\n\n const data = await response.json();\n\n if (!response.ok) {\n const errorData = validateErrorResponse(data);\n throw new ChipiApiError(\n errorData.message,\n errorData.code || `HTTP_${response.status}`,\n response.status\n );\n }\n\n return data as T;\n } catch (error) {\n throw handleApiError(error);\n }\n }\n}\n","import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n WalletData,\n WalletDataResponse,\n GetWalletParams,\n BackendGetWalletResponse,\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 \n const { encryptKey, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: this.client.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\n \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 \n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse;\n\n\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 \n return {\n txHash: executeTransactionResponse.txHash,\n walletPublicKey: executeTransactionResponse.walletPublicKey,\n wallet: executeTransactionResponse.wallet,\n };\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 = (\n encryptedPrivateKey: string,\n encryptKey: string\n ): string => {\n try {\n \n return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);\n } catch (error) {\n \n throw new Error(`Failed to decrypt private key: ${error instanceof Error ? error.message : 'Unknown error'}`);\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!;\n }\n\n async getWallet(\n params:GetWalletParams\n ): Promise<WalletDataResponse> {\n try {\n const { externalUserId, bearerToken } = params;\n const getWalletResponse =\n await this.client.get<BackendGetWalletResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n \n return {\n publicKey: getWalletResponse.publicKey,\n encryptedPrivateKey: getWalletResponse.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 if (!decrypted) {\n console.error(\"Decryption resulted in empty string\");\n return null;\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;\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 TransferParams,\n ApproveParams,\n StakeVesuUsdcParams,\n WithdrawVesuUsdcParams,\n CallAnyContractParams,\n ExecuteTransactionParams,\n RecordSendTransactionParams,\n Transaction,\n WalletDataResponse,\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(\n params: Omit<GetWalletParams, \"apiPublicKey\">\n ): Promise<WalletDataResponse> {\n const { bearerToken, externalUserId } = params;\n return this.wallets.getWallet({\n bearerToken,\n externalUserId,\n });\n }\n}\n"]}
package/dist/skus.d.mts CHANGED
@@ -1,6 +1,5 @@
1
- import { C as ChipiClient } from './client-BaNfges3.mjs';
1
+ import { C as ChipiClient } from './client-D4ZnPqgQ.mjs';
2
2
  import '@chipi-stack/types';
3
- import '@chipi-stack/shared';
4
3
 
5
4
  /**
6
5
  * SKU (Stock Keeping Unit) management utilities
package/dist/skus.d.ts CHANGED
@@ -1,6 +1,5 @@
1
- import { C as ChipiClient } from './client-BaNfges3.js';
1
+ import { C as ChipiClient } from './client-D4ZnPqgQ.js';
2
2
  import '@chipi-stack/types';
3
- import '@chipi-stack/shared';
4
3
 
5
4
  /**
6
5
  * SKU (Stock Keeping Unit) management utilities
@@ -1,6 +1,5 @@
1
1
  import { ExecuteTransactionParams, TransferParams, RecordSendTransactionParams, Transaction } from '@chipi-stack/types';
2
- import { C as ChipiClient } from './client-BaNfges3.mjs';
3
- import '@chipi-stack/shared';
2
+ import { C as ChipiClient } from './client-D4ZnPqgQ.mjs';
4
3
 
5
4
  /**
6
5
  * Transaction management utilities
@@ -1,6 +1,5 @@
1
1
  import { ExecuteTransactionParams, TransferParams, RecordSendTransactionParams, Transaction } from '@chipi-stack/types';
2
- import { C as ChipiClient } from './client-BaNfges3.js';
3
- import '@chipi-stack/shared';
2
+ import { C as ChipiClient } from './client-D4ZnPqgQ.js';
4
3
 
5
4
  /**
6
5
  * Transaction management utilities
@@ -16,17 +16,8 @@ var decryptPrivateKey = (encryptedPrivateKey, password) => {
16
16
  return null;
17
17
  }
18
18
  try {
19
- console.log("Attempting to decrypt:", {
20
- encryptedLength: encryptedPrivateKey.length,
21
- passwordLength: password.length,
22
- encryptedStart: encryptedPrivateKey.substring(0, 20)
23
- });
24
19
  const bytes = CryptoJS__default.default.AES.decrypt(encryptedPrivateKey, password);
25
20
  const decrypted = bytes.toString(CryptoJS__default.default.enc.Utf8);
26
- console.log("Decryption result:", {
27
- decryptedLength: decrypted.length,
28
- decrypted: decrypted ? "SUCCESS" : "EMPTY"
29
- });
30
21
  if (!decrypted) {
31
22
  console.error("Decryption resulted in empty string");
32
23
  return null;
@@ -204,7 +195,7 @@ var ChipiTransactions = class {
204
195
  bearerToken,
205
196
  body: params
206
197
  });
207
- return response.data;
198
+ return response;
208
199
  }
209
200
  };
210
201
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/encryption.ts","../src/gasless.ts","../src/transactions.ts"],"names":["CryptoJS","RpcProvider","Account","STARKNET_CONTRACTS","formatAmount","API_ENDPOINTS"],"mappings":"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","file":"transactions.js","sourcesContent":["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 console.log(\"Attempting to decrypt:\", {\n encryptedLength: encryptedPrivateKey.length,\n passwordLength: password.length,\n encryptedStart: encryptedPrivateKey.substring(0, 20)\n });\n\n // CryptoJS.AES.decrypt expects the encrypted string in the format it was created\n const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoJS.enc.Utf8);\n\n console.log(\"Decryption result:\", {\n decryptedLength: decrypted.length,\n decrypted: decrypted ? \"SUCCESS\" : \"EMPTY\"\n });\n\n // Check if the decrypted string is empty\n if (!decrypted) {\n console.error(\"Decryption resulted in empty string\");\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"]}
1
+ {"version":3,"sources":["../src/lib/encryption.ts","../src/gasless.ts","../src/transactions.ts"],"names":["CryptoJS","RpcProvider","Account","STARKNET_CONTRACTS","formatAmount","API_ENDPOINTS"],"mappings":"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","file":"transactions.js","sourcesContent":["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 if (!decrypted) {\n console.error(\"Decryption resulted in empty string\");\n return null;\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;\n }\n}\n"]}
@@ -10,17 +10,8 @@ var decryptPrivateKey = (encryptedPrivateKey, password) => {
10
10
  return null;
11
11
  }
12
12
  try {
13
- console.log("Attempting to decrypt:", {
14
- encryptedLength: encryptedPrivateKey.length,
15
- passwordLength: password.length,
16
- encryptedStart: encryptedPrivateKey.substring(0, 20)
17
- });
18
13
  const bytes = CryptoJS.AES.decrypt(encryptedPrivateKey, password);
19
14
  const decrypted = bytes.toString(CryptoJS.enc.Utf8);
20
- console.log("Decryption result:", {
21
- decryptedLength: decrypted.length,
22
- decrypted: decrypted ? "SUCCESS" : "EMPTY"
23
- });
24
15
  if (!decrypted) {
25
16
  console.error("Decryption resulted in empty string");
26
17
  return null;
@@ -198,7 +189,7 @@ var ChipiTransactions = class {
198
189
  bearerToken,
199
190
  body: params
200
191
  });
201
- return response.data;
192
+ return response;
202
193
  }
203
194
  };
204
195