@chipi-stack/backend 5.1.0 → 5.3.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.
@@ -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 GetWalletParams,\n GetWalletResponse,\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\";\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 return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(\n CryptoJS.enc.Utf8\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<BackendGetWalletResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n const walletData = getExternalUserWalletResponse.data;\n if (walletData && walletData.encryptedPrivateKey) {\n const decryptedKey = this.decryptPrivateKey(\n walletData.encryptedPrivateKey,\n encryptKey\n );\n\n // Debug logging\n console.log('Wallet data from server:', {\n publicKey: walletData.publicKey,\n encryptedPrivateKey: walletData.encryptedPrivateKey,\n decryptedKey: decryptedKey,\n encryptKeyLength: encryptKey?.length\n });\n\n if (!decryptedKey) {\n console.error('Failed to decrypt private key');\n return {\n success: false,\n wallet: {\n publicKey: walletData.publicKey,\n decryptedWallet: \"\",\n encryptedPrivateKey: walletData.encryptedPrivateKey,\n },\n };\n }\n\n return {\n success: true,\n wallet: {\n publicKey: walletData.publicKey,\n decryptedWallet: decryptedKey,\n encryptedPrivateKey: walletData.encryptedPrivateKey,\n },\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"]}
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 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;\n\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;\n if (executeTransaction) {\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`,\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 \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 & { 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 externalUserWalletResponse = getExternalUserWalletResponse.data;\n \n if (getExternalUserWalletResponse.success) {\n const decryptedKey = this.decryptPrivateKey(\n externalUserWalletResponse.encryptedPrivateKey\n ,\n encryptKey\n );\n \n return {\n success: true,\n wallet: {\n publicKey: externalUserWalletResponse.publicKey,\n decryptedWallet: decryptedKey,\n encryptedPrivateKey: externalUserWalletResponse.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"]}
package/dist/wallets.mjs CHANGED
@@ -13,9 +13,11 @@ var ChipiWallets = class {
13
13
  return CryptoJS.AES.encrypt(privateKey, password).toString();
14
14
  };
15
15
  this.decryptPrivateKey = (encryptedPrivateKey, encryptKey) => {
16
- return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(
17
- CryptoJS.enc.Utf8
18
- );
16
+ try {
17
+ return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(CryptoJS.enc.Utf8);
18
+ } catch (error) {
19
+ throw new Error(`Failed to decrypt private key: ${error instanceof Error ? error.message : "Unknown error"}`);
20
+ }
19
21
  };
20
22
  }
21
23
  /**
@@ -76,7 +78,7 @@ var ChipiWallets = class {
76
78
  publicKey
77
79
  }
78
80
  });
79
- const { typeData, accountClassHash: accountClassHashResponse } = typeDataResponse.data;
81
+ const { typeData, accountClassHash: accountClassHashResponse } = typeDataResponse;
80
82
  const userSignature = await account.signMessage(typeData);
81
83
  const deploymentData = {
82
84
  class_hash: accountClassHashResponse,
@@ -108,8 +110,8 @@ var ChipiWallets = class {
108
110
  }
109
111
  }
110
112
  });
111
- const executeTransaction = executeTransactionResponse.data;
112
- if (executeTransaction.success) {
113
+ const executeTransaction = executeTransactionResponse;
114
+ if (executeTransaction) {
113
115
  return {
114
116
  success: true,
115
117
  txHash: executeTransaction.txHash,
@@ -118,7 +120,7 @@ var ChipiWallets = class {
118
120
  };
119
121
  } else {
120
122
  throw new ChipiTransactionError(
121
- `Failed to create wallet: ${executeTransaction.message}`,
123
+ `Failed to create wallet`,
122
124
  "WALLET_CREATION_FAILED"
123
125
  );
124
126
  }
@@ -147,7 +149,7 @@ var ChipiWallets = class {
147
149
  bearerToken,
148
150
  body: params
149
151
  });
150
- return response.data;
152
+ return response;
151
153
  }
152
154
  async getWallet(params) {
153
155
  try {
@@ -157,35 +159,18 @@ var ChipiWallets = class {
157
159
  params: { externalUserId },
158
160
  bearerToken
159
161
  });
160
- const walletData = getExternalUserWalletResponse.data;
161
- if (walletData && walletData.encryptedPrivateKey) {
162
+ const externalUserWalletResponse = getExternalUserWalletResponse.data;
163
+ if (getExternalUserWalletResponse.success) {
162
164
  const decryptedKey = this.decryptPrivateKey(
163
- walletData.encryptedPrivateKey,
165
+ externalUserWalletResponse.encryptedPrivateKey,
164
166
  encryptKey
165
167
  );
166
- console.log("Wallet data from server:", {
167
- publicKey: walletData.publicKey,
168
- encryptedPrivateKey: walletData.encryptedPrivateKey,
169
- decryptedKey,
170
- encryptKeyLength: encryptKey?.length
171
- });
172
- if (!decryptedKey) {
173
- console.error("Failed to decrypt private key");
174
- return {
175
- success: false,
176
- wallet: {
177
- publicKey: walletData.publicKey,
178
- decryptedWallet: "",
179
- encryptedPrivateKey: walletData.encryptedPrivateKey
180
- }
181
- };
182
- }
183
168
  return {
184
169
  success: true,
185
170
  wallet: {
186
- publicKey: walletData.publicKey,
171
+ publicKey: externalUserWalletResponse.publicKey,
187
172
  decryptedWallet: decryptedKey,
188
- encryptedPrivateKey: walletData.encryptedPrivateKey
173
+ encryptedPrivateKey: externalUserWalletResponse.encryptedPrivateKey
189
174
  }
190
175
  };
191
176
  }
@@ -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 GetWalletParams,\n GetWalletResponse,\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\";\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 return CryptoJS.AES.decrypt(encryptedPrivateKey, encryptKey).toString(\n CryptoJS.enc.Utf8\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<BackendGetWalletResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n const walletData = getExternalUserWalletResponse.data;\n if (walletData && walletData.encryptedPrivateKey) {\n const decryptedKey = this.decryptPrivateKey(\n walletData.encryptedPrivateKey,\n encryptKey\n );\n\n // Debug logging\n console.log('Wallet data from server:', {\n publicKey: walletData.publicKey,\n encryptedPrivateKey: walletData.encryptedPrivateKey,\n decryptedKey: decryptedKey,\n encryptKeyLength: encryptKey?.length\n });\n\n if (!decryptedKey) {\n console.error('Failed to decrypt private key');\n return {\n success: false,\n wallet: {\n publicKey: walletData.publicKey,\n decryptedWallet: \"\",\n encryptedPrivateKey: walletData.encryptedPrivateKey,\n },\n };\n }\n\n return {\n success: true,\n wallet: {\n publicKey: walletData.publicKey,\n decryptedWallet: decryptedKey,\n encryptedPrivateKey: walletData.encryptedPrivateKey,\n },\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"]}
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 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;\n\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;\n if (executeTransaction) {\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`,\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 \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 & { 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 externalUserWalletResponse = getExternalUserWalletResponse.data;\n \n if (getExternalUserWalletResponse.success) {\n const decryptedKey = this.decryptPrivateKey(\n externalUserWalletResponse.encryptedPrivateKey\n ,\n encryptKey\n );\n \n return {\n success: true,\n wallet: {\n publicKey: externalUserWalletResponse.publicKey,\n decryptedWallet: decryptedKey,\n encryptedPrivateKey: externalUserWalletResponse.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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chipi-stack/backend",
3
- "version": "5.1.0",
3
+ "version": "5.3.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": {
@@ -67,8 +67,8 @@
67
67
  "@avnu/gasless-sdk": "0.1.8",
68
68
  "crypto-js": "^4.2.0",
69
69
  "starknet": "6.11.0",
70
- "@chipi-stack/shared": "^5.1.0",
71
- "@chipi-stack/types": "^5.1.0"
70
+ "@chipi-stack/types": "^5.3.0",
71
+ "@chipi-stack/shared": "^5.3.0"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@types/node": "^22.15.15",