@chipi-stack/backend 11.14.0 → 11.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _chipi_stack_types from '@chipi-stack/types';
2
- import { User, CreateUserParams, ChipiSDKConfig, ExecuteTransactionParams, TransferParams, ApproveParams, StakeVesuUsdcParams, WithdrawVesuUsdcParams, CallAnyContractParams, CreateWalletParams, CreateWalletResponse, RecordSendTransactionParams, Transaction, GetWalletParams, GetTokenBalanceParams, GetTokenBalanceResponse, CreateSkuTransactionParams, SkuTransaction, GetSkuListQuery, PaginatedResponse, Sku, ChipiServerSDKConfig, ChipiBrowserSDKConfig } from '@chipi-stack/types';
2
+ import { GetUserParams, User, CreateUserParams, ChipiSDKConfig, ExecuteTransactionParams, TransferParams, ApproveParams, StakeVesuUsdcParams, WithdrawVesuUsdcParams, CallAnyContractParams, CreateWalletParams, CreateWalletResponse, RecordSendTransactionParams, Transaction, GetTransactionListQuery, PaginatedResponse, GetWalletParams, GetTokenBalanceParams, GetTokenBalanceResponse, CreateSkuTransactionParams, SkuTransaction, GetSkuListQuery, Sku, ChipiServerSDKConfig, ChipiBrowserSDKConfig } from '@chipi-stack/types';
3
3
  export * from '@chipi-stack/types';
4
4
  import { ChipiWallets } from './wallets.mjs';
5
5
  import { ChipiTransactions } from './transactions.mjs';
@@ -19,7 +19,7 @@ declare class Users {
19
19
  * @param id - SKU ID
20
20
  * @returns Promise<Sku> - Single SKU
21
21
  */
22
- getUserByExternalId(externalId: string, bearerToken: string): Promise<User>;
22
+ getUser(params: GetUserParams, bearerToken: string): Promise<User>;
23
23
  /**
24
24
  * Create a new user
25
25
  * @param bearerToken - Authentication token for API calls
@@ -99,6 +99,7 @@ declare class ChipiSDK {
99
99
  params: RecordSendTransactionParams;
100
100
  bearerToken?: string;
101
101
  }): Promise<Transaction>;
102
+ getTransactionList(query: GetTransactionListQuery, bearerToken?: string): Promise<PaginatedResponse<Transaction>>;
102
103
  getWallet(params: GetWalletParams, bearerToken?: string): Promise<(_chipi_stack_types.GetWalletResponse & {
103
104
  normalizedPublicKey: string;
104
105
  }) | null>;
@@ -112,7 +113,7 @@ declare class ChipiSDK {
112
113
  }): Promise<SkuTransaction>;
113
114
  getSkuList(params: GetSkuListQuery, bearerToken?: string): Promise<PaginatedResponse<Sku>>;
114
115
  getSku(id: string, bearerToken?: string): Promise<Sku>;
115
- getUserByExternalId(externalId: string, bearerToken?: string): Promise<User>;
116
+ getUser(params: GetUserParams, bearerToken?: string): Promise<User>;
116
117
  createUser(params: CreateUserParams, bearerToken?: string): Promise<User>;
117
118
  }
118
119
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _chipi_stack_types from '@chipi-stack/types';
2
- import { User, CreateUserParams, ChipiSDKConfig, ExecuteTransactionParams, TransferParams, ApproveParams, StakeVesuUsdcParams, WithdrawVesuUsdcParams, CallAnyContractParams, CreateWalletParams, CreateWalletResponse, RecordSendTransactionParams, Transaction, GetWalletParams, GetTokenBalanceParams, GetTokenBalanceResponse, CreateSkuTransactionParams, SkuTransaction, GetSkuListQuery, PaginatedResponse, Sku, ChipiServerSDKConfig, ChipiBrowserSDKConfig } from '@chipi-stack/types';
2
+ import { GetUserParams, User, CreateUserParams, ChipiSDKConfig, ExecuteTransactionParams, TransferParams, ApproveParams, StakeVesuUsdcParams, WithdrawVesuUsdcParams, CallAnyContractParams, CreateWalletParams, CreateWalletResponse, RecordSendTransactionParams, Transaction, GetTransactionListQuery, PaginatedResponse, GetWalletParams, GetTokenBalanceParams, GetTokenBalanceResponse, CreateSkuTransactionParams, SkuTransaction, GetSkuListQuery, Sku, ChipiServerSDKConfig, ChipiBrowserSDKConfig } from '@chipi-stack/types';
3
3
  export * from '@chipi-stack/types';
4
4
  import { ChipiWallets } from './wallets.js';
5
5
  import { ChipiTransactions } from './transactions.js';
@@ -19,7 +19,7 @@ declare class Users {
19
19
  * @param id - SKU ID
20
20
  * @returns Promise<Sku> - Single SKU
21
21
  */
22
- getUserByExternalId(externalId: string, bearerToken: string): Promise<User>;
22
+ getUser(params: GetUserParams, bearerToken: string): Promise<User>;
23
23
  /**
24
24
  * Create a new user
25
25
  * @param bearerToken - Authentication token for API calls
@@ -99,6 +99,7 @@ declare class ChipiSDK {
99
99
  params: RecordSendTransactionParams;
100
100
  bearerToken?: string;
101
101
  }): Promise<Transaction>;
102
+ getTransactionList(query: GetTransactionListQuery, bearerToken?: string): Promise<PaginatedResponse<Transaction>>;
102
103
  getWallet(params: GetWalletParams, bearerToken?: string): Promise<(_chipi_stack_types.GetWalletResponse & {
103
104
  normalizedPublicKey: string;
104
105
  }) | null>;
@@ -112,7 +113,7 @@ declare class ChipiSDK {
112
113
  }): Promise<SkuTransaction>;
113
114
  getSkuList(params: GetSkuListQuery, bearerToken?: string): Promise<PaginatedResponse<Sku>>;
114
115
  getSku(id: string, bearerToken?: string): Promise<Sku>;
115
- getUserByExternalId(externalId: string, bearerToken?: string): Promise<User>;
116
+ getUser(params: GetUserParams, bearerToken?: string): Promise<User>;
116
117
  createUser(params: CreateUserParams, bearerToken?: string): Promise<User>;
117
118
  }
118
119
 
package/dist/index.js CHANGED
@@ -181,7 +181,7 @@ var ChipiWallets = class {
181
181
  }
182
182
  async createWallet(params) {
183
183
  try {
184
- const { encryptKey, externalUserId, bearerToken } = params;
184
+ const { encryptKey, externalUserId, bearerToken, userId } = params;
185
185
  const provider = new starknet.RpcProvider({ nodeUrl: this.client.nodeUrl });
186
186
  const privateKeyAX = this.getPrivateKeyAX();
187
187
  const starkKeyPubAX = starknet.ec.starkCurve.getStarkKey(privateKeyAX);
@@ -222,6 +222,7 @@ var ChipiWallets = class {
222
222
  bearerToken,
223
223
  body: {
224
224
  externalUserId,
225
+ userId,
225
226
  publicKey,
226
227
  userSignature: {
227
228
  r: userSignature.r.toString(),
@@ -489,6 +490,17 @@ var ChipiTransactions = class {
489
490
  });
490
491
  return response;
491
492
  }
493
+ /**
494
+ * Get paginated transaction history
495
+ */
496
+ async getTransactionList(query, bearerToken) {
497
+ const response = await this.client.get({
498
+ endpoint: `${shared.API_ENDPOINTS.TRANSACTIONS}/transaction-list`,
499
+ params: query,
500
+ bearerToken
501
+ });
502
+ return response;
503
+ }
492
504
  };
493
505
  var ChipiSkuTransactions = class {
494
506
  constructor(client) {
@@ -631,9 +643,16 @@ var Users = class {
631
643
  * @param id - SKU ID
632
644
  * @returns Promise<Sku> - Single SKU
633
645
  */
634
- async getUserByExternalId(externalId, bearerToken) {
646
+ async getUser(params, bearerToken) {
647
+ const { phone, ...rest } = params;
648
+ const queryParams = {
649
+ ...rest,
650
+ phoneCountryCode: phone?.phoneCountryCode?.toString() || void 0,
651
+ phoneNumber: phone?.phoneNumber?.toString() || void 0
652
+ };
635
653
  return this.client.get({
636
- endpoint: `${shared.API_ENDPOINTS.USERS}/external/${externalId}`,
654
+ endpoint: `${shared.API_ENDPOINTS.USERS}`,
655
+ params: queryParams,
637
656
  bearerToken
638
657
  });
639
658
  }
@@ -827,6 +846,12 @@ var ChipiSDK = class {
827
846
  bearerToken: this.resolveBearerToken(bearerToken)
828
847
  });
829
848
  }
849
+ async getTransactionList(query, bearerToken) {
850
+ return this.transactions.getTransactionList(
851
+ query,
852
+ this.resolveBearerToken(bearerToken)
853
+ );
854
+ }
830
855
  async getWallet(params, bearerToken) {
831
856
  return this.wallets.getWallet(params, this.resolveBearerToken(bearerToken));
832
857
  }
@@ -856,11 +881,8 @@ var ChipiSDK = class {
856
881
  return this.skus.getSku(id, this.resolveBearerToken(bearerToken));
857
882
  }
858
883
  // USERS
859
- async getUserByExternalId(externalId, bearerToken) {
860
- return this.users.getUserByExternalId(
861
- externalId,
862
- this.resolveBearerToken(bearerToken)
863
- );
884
+ async getUser(params, bearerToken) {
885
+ return this.users.getUser(params, this.resolveBearerToken(bearerToken));
864
886
  }
865
887
  async createUser(params, bearerToken) {
866
888
  return this.users.createUser(params, this.resolveBearerToken(bearerToken));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts","../src/encryption.ts","../src/wallets.ts","../src/execute-paymaster-transaction.ts","../src/transactions.ts","../src/sku-transactions.ts","../src/skus.ts","../src/users.ts","../src/chipi-sdk.ts","../src/chipi-server-sdk.ts","../src/chipi-browser-sdk.ts"],"names":["isValidApiKey","ChipiAuthError","STARKNET_NETWORKS","validateErrorResponse","ChipiApiError","handleApiError","CryptoES","RpcProvider","ec","CairoCustomEnum","CairoOption","CairoOptionVariant","CallData","hash","Account","API_ENDPOINTS","num","ChipiTransactionError","STARKNET_CONTRACTS","formatAmount","getUsdAmount","SKU_CONTRACTS","cairo","CARRIER_IDS","SERVICE_TYPES","CHAIN_TYPES","CHAIN_TOKEN_TYPES","CONTRACT_ADDRESSES"],"mappings":"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","file":"index.js","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 customAlphaUrl?: string;\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.customAlphaUrl = config.alphaUrl;\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.customAlphaUrl) {\n return this.customAlphaUrl.endsWith(\"/v1\") \n ? this.customAlphaUrl \n : `${this.customAlphaUrl.replace(/\\/$/, \"\")}/v1`;\n }\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<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 CryptoES from \"crypto-es\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string\n): string => {\n return CryptoES.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string\n): string => {\n try {\n const bytes = CryptoES.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoES.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) throw new Error(\"Decryption failed\");\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n throw new Error(`Decryption failed: ${error}`);\n }\n};\n","import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetWalletParams,\n WalletData,\n GetWalletResponse,\n GetTokenBalanceParams,\n GetTokenBalanceResponse,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport CryptoES from \"crypto-es\";\n\nimport { ChipiTransactionError, ChipiApiError } 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 { DeploymentData } from \"@avnu/gasless-sdk\";\nimport { encryptPrivateKey } from \"./encryption\";\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\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 privateKeyAX = this.getPrivateKeyAX();\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 const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse;\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 = encryptPrivateKey(privateKeyAX, encryptKey);\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 } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n\n /**\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 bearerToken: string\n ): Promise<(GetWalletResponse & { normalizedPublicKey: string }) | null> {\n try {\n const { externalUserId } = params;\n const getWalletResponse = await this.client.get<\n GetWalletResponse & { normalizedPublicKey: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n\n return getWalletResponse;\n } catch (err) {\n // Check if it's a 404 error (wallet not found)\n if (err instanceof ChipiApiError && err.status === 404) {\n return null;\n }\n throw new Error(`getWallet error: ${String(err)}`);\n }\n }\n\n getPrivateKeyAX = () => {\n // Generate 32 random bytes (256 bits)\n // const privateKeyBytes = Crypto.getRandomBytes(32); old implementation\n const privateKeyBytes = CryptoES.lib.WordArray.random(32);\n // Convert to hex string and ensure it's 64 characters (32 bytes)\n const privateKey = privateKeyBytes.toString(CryptoES.enc.Hex);\n\n // Add '0x' prefix\n const fullPrivateKey = `0x${privateKey}`;\n\n // Ensure the private key is within Starknet's valid range (0 to 2^251 - 1)\n // Convert to BigInt and take modulo 2^251\n const maxStarknetValue = BigInt(\n \"0x800000000000000000000000000000000000000000000000000000000000000\"\n );\n const privateKeyBigInt = BigInt(fullPrivateKey) % maxStarknetValue;\n\n // Convert back to hex string with '0x' prefix\n return `0x${privateKeyBigInt.toString(16)}`;\n };\n\n async getTokenBalance({\n params,\n bearerToken,\n }: {\n params: GetTokenBalanceParams;\n bearerToken: string;\n }): Promise<GetTokenBalanceResponse> {\n const getBalanceResponse = await this.client.get<GetTokenBalanceResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/token-balance`,\n params,\n bearerToken,\n });\n\n return getBalanceResponse;\n }\n}\n","import type {\n ExecuteSponsoredTransactionResponse,\n ExecuteTransactionParams,\n WalletData,\n} from \"@chipi-stack/types\";\nimport type { Call } from \"starknet\";\nimport { Account, RpcProvider, TypedData } from \"starknet\";\nimport { decryptPrivateKey } from \"./encryption\";\n\n// Internal type - not exported to users\ninterface ExecutePaymasterTransactionParams {\n encryptKey: string;\n wallet: WalletData;\n calls: Call[];\n saveToDatabase: boolean; // Internal only - always set by SDK, users cannot control this\n}\n\n// This will need to be imported from the actual gasless SDK or implemented\n// For now, this is a placeholder implementation based on the original SDK\n\n/**\n * Execute a paymaster transaction (gasless)\n */\nexport const executePaymasterTransaction = async (\n {\n params,\n bearerToken,\n apiPublicKey,\n backendUrl,\n }: {\n params: ExecutePaymasterTransactionParams;\n bearerToken: string;\n apiPublicKey: string;\n backendUrl: string;\n }\n): Promise<string> => {\n // Backend url shit is temporary\n try {\n const { encryptKey, wallet, calls, saveToDatabase } = params;\n\n // Fetch the encrypted private key from clerk public metadata\n const privateKeyDecrypted = decryptPrivateKey(\n wallet.encryptedPrivateKey,\n encryptKey\n );\n\n if (!privateKeyDecrypted) {\n throw new Error(\"Failed to decrypt private key\");\n }\n\n const provider = new RpcProvider({\n nodeUrl: \"https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7\",\n });\n\n const account = new Account(\n provider,\n wallet.publicKey,\n privateKeyDecrypted\n );\n\n // Build the type data\n const typeDataResponse = await fetch(\n `${backendUrl}/transactions/prepare-typed-data`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n calls: calls,\n accountClassHash:\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n }),\n }\n );\n\n if (!typeDataResponse.ok) {\n const errorText = await typeDataResponse.text();\n throw new Error(`Error in API: ${errorText}`);\n }\n\n const typeData = (await typeDataResponse.json()) as TypedData;\n\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // Execute the transaction\n const executeTransaction = await fetch(\n `${backendUrl}/transactions/execute-sponsored-transaction`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n typeData: typeData,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n saveToDatabase: saveToDatabase,\n }),\n }\n );\n\n if (!executeTransaction.ok) {\n const errorText = await executeTransaction.text();\n throw new Error(`Error executing sponsored transaction: ${errorText}`);\n }\n\n const result =\n (await executeTransaction.json()) as ExecuteSponsoredTransactionResponse;\n\n if (!result.transactionHash) {\n throw new Error(\"The response does not contain the transaction hash\");\n }\n\n return result.transactionHash;\n } catch (error) {\n console.error(\"Error sending transaction with paymaster\", error);\n throw error;\n }\n};\n","import {\n CallAnyContractParams,\n STARKNET_CONTRACTS,\n WalletData,\n type ExecuteTransactionParams,\n type RecordSendTransactionParams,\n type Transaction,\n type TransferParams,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS, formatAmount } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { executePaymasterTransaction } from \"./execute-paymaster-transaction\";\n\n/**\n * Transaction management utilities\n */\nexport class ChipiTransactions {\n constructor(private client: ChipiClient) {}\n /**\n * Execute a gasless transaction using paymaster\n * @internal saveToDatabase - Internal only, not exposed to clients\n */\n async executeTransaction({\n params,\n bearerToken,\n saveToDatabase = true, // Internal only - defaults to true, can be overridden internally\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n saveToDatabase?: boolean; // Internal only - not part of public API\n }): Promise<string> {\n return executePaymasterTransaction({\n params: {\n ...params,\n saveToDatabase,\n },\n bearerToken,\n backendUrl: this.client.baseUrl,\n apiPublicKey: this.client.getApiPublicKey(),\n });\n }\n\n /**\n * Transfer tokens\n */\n async transfer({\n params,\n bearerToken,\n }: {\n params: TransferParams;\n bearerToken: string;\n }): Promise<string> {\n const { encryptKey, wallet, token, otherToken, recipient, amount } = params;\n const contract = STARKNET_CONTRACTS[token];\n let contractAddress = contract.contractAddress;\n let decimals = contract.decimals;\n if (token === \"OTHER\") {\n if (!otherToken) {\n throw new Error(\"Other token is required when token is OTHER\");\n }\n contractAddress = otherToken.contractAddress;\n decimals = otherToken.decimals;\n }\n const formattedAmount = formatAmount(amount, decimals);\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress,\n entrypoint: \"transfer\",\n calldata: [recipient, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: WalletData;\n contractAddress: string;\n spender: string;\n amount: string ;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n\n return this.executeTransaction({\n params: {\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: \"approve\",\n calldata: [params.spender, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken: params.bearerToken,\n });\n }\n\n /**\n * Call any contract method\n */\n // {\n // encryptKey: string;\n // wallet: any;\n // calls: any[];\n // bearerToken: string;\n // }\n\n async callAnyContract({\n params,\n bearerToken,\n }: {\n params: CallAnyContractParams;\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n params,\n bearerToken,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n const response = await this.client.post<Transaction>({\n endpoint: `${API_ENDPOINTS.TRANSACTIONS}/record-send`,\n bearerToken,\n body: params,\n });\n return response;\n }\n}\n","import { CreateSkuTransactionParams, Sku, SkuTransaction, STARKNET_CONTRACTS } from \"@chipi-stack/types\";\nimport { ChipiClient } from \"./client\";\nimport { ChipiTransactions } from \"./transactions\";\n\nimport { CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, SERVICE_TYPES, SKU_CONTRACTS, formatAmount, getUsdAmount } from \"@chipi-stack/shared\";\nimport { Call, CallData, cairo, hash } from \"starknet\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport CryptoES from \"crypto-es\";\n\nexport class ChipiSkuTransactions {\n private transactions: ChipiTransactions;\n\n constructor(private client: ChipiClient) {\n this.transactions = new ChipiTransactions(client);\n }\n\n\n /**\n * Creates a SKU transaction with gasless execution\n * @param params - Transaction parameters including amount, SKU ID, wallet, etc.\n * @param bearerToken - Authentication token for API calls\n * @returns Promise<SkuTransaction> - The created transaction record\n */\n async createSkuTransaction(params: CreateSkuTransactionParams, bearerToken: string): Promise<SkuTransaction> {\n\n\n const { mxnAmount, skuId, wallet, reference, externalUserId } = params;\n const backendUrl = this.client.baseUrl;\n const usdAmount = await getUsdAmount(mxnAmount, bearerToken, this.client);\n const tokenAddress = STARKNET_CONTRACTS.USDC.contractAddress as `0x${string}`;\n if (usdAmount <= 0) {\n throw new Error(`Invalid USD amount: ${usdAmount}. Amount must be positive.`);\n }\n const minUsdAmount = Math.max(usdAmount, 0.000001);\n const parsedAmount = formatAmount(minUsdAmount.toString(), STARKNET_CONTRACTS.USDC.decimals);\n const calls: Call[] = [\n {\n contractAddress: tokenAddress,\n entrypoint: \"approve\",\n calldata: CallData.compile({\n spender: SKU_CONTRACTS.RECHARGER_WITH_STRK_MAINNET,\n amount: cairo.uint256(parsedAmount),\n }),\n },\n {\n contractAddress: SKU_CONTRACTS.RECHARGER_WITH_STRK_MAINNET,\n entrypoint: \"newRecharge\",\n calldata: CallData.compile({\n token_address: tokenAddress,\n amount: cairo.uint256(parsedAmount),\n rechargeId: CryptoES.SHA256(\n CryptoES.lib.WordArray.random(32), // 32 bytes = 256 bits entropy\n )\n .toString()\n .slice(0, 20),\n productId: skuId,\n carrierId: CARRIER_IDS.CHIPI_PAY,\n }),\n },\n {\n contractAddress: SKU_CONTRACTS.CHIPI_BILL_SERVICE,\n entrypoint: \"mint_item\",\n calldata: CallData.compile({\n recipient: wallet.publicKey,\n metadata: {\n service_type: SERVICE_TYPES.BUY_SERVICE,\n timestamp: Date.now(),\n chipi_user_id: hash.starknetKeccak(externalUserId || \"0x0\").toString(),\n kyc: true,\n amount: cairo.uint256(parsedAmount),\n },\n }),\n },\n ];\n\n const transactionHash = await this.transactions.executeTransaction({\n params: {\n encryptKey: params.encryptKey,\n wallet: wallet,\n calls: calls,\n },\n bearerToken: bearerToken,\n saveToDatabase: false, // Internal: SKU transactions don't save to transactions table\n });\n\n const input = {\n walletAddress: wallet.publicKey,\n skuId: skuId,\n chain: CHAIN_TYPES.STARKNET,\n chainToken: CHAIN_TOKEN_TYPES.USDC,\n mxnAmount: mxnAmount,\n reference: reference,\n transactionHash: transactionHash,\n usdAmount: minUsdAmount,\n }\n // Record the transaction and fetch the purchase of the service \n const response = await this.client.post<SkuTransaction>({\n endpoint: `${API_ENDPOINTS.SKU_TRANSACTIONS}`,\n bearerToken,\n body: input,\n });\n\n return response;\n }\n\n\n\n /**\n * Get a SKU transaction by transaction id\n * @param id - The SKU transaction id\n * @param bearerToken - Authentication token for API calls\n * @returns Promise<SkuTransaction> - Single SKU transaction\n */\n async getSkuTransaction(\n id: string,\n bearerToken: string,\n ): Promise<SkuTransaction> {\n const response = await this.client.get<SkuTransaction>({\n endpoint: `${API_ENDPOINTS.SKU_TRANSACTIONS}/${id}`,\n bearerToken,\n });\n return response;\n }\n\n \n \n}","import type {\n PaginatedResponse,\n Sku,\n GetSkuListQuery,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n/**\n * SKU (Stock Keeping Unit) management utilities\n */\nexport class ChipiSkus {\n constructor(private client: ChipiClient) {}\n /**\n * Get available SKUs for purchase with pagination\n * @param bearerToken - Authentication token for API calls\n * @param query - Pagination query parameters\n * @returns Promise<PaginatedResponse<Sku>> - Paginated list of available SKUs\n */\n async getSkuList(\n params: GetSkuListQuery,\n bearerToken: string,\n ): Promise<PaginatedResponse<Sku>> {\n const response = await this.client.get<PaginatedResponse<Sku>>({\n endpoint: `${API_ENDPOINTS.SKUS}`,\n params,\n bearerToken,\n });\n\n return response;\n }\n\n /**\n * Get a single SKU by ID\n * @param bearerToken - Authentication token for API calls\n * @param id - SKU ID\n * @returns Promise<Sku> - Single SKU\n */\n async getSku( \n id: string,\n bearerToken: string,\n ): Promise<Sku> {\n return this.client.get<Sku>({\n endpoint: `${API_ENDPOINTS.SKUS}/${id}`,\n bearerToken,\n });\n }\n}","import type {\n PaginatedResponse,\n Sku,\n GetSkuListQuery,\n User,\n CreateUserParams,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n/**\n * User management\n */\nexport class Users {\n constructor(private client: ChipiClient) {}\n\n /**\n * Get a single SKU by ID\n * @param bearerToken - Authentication token for API calls\n * @param id - SKU ID\n * @returns Promise<Sku> - Single SKU\n */\n async getUserByExternalId(\n externalId: string,\n bearerToken: string\n ): Promise<User> {\n return this.client.get<User>({\n endpoint: `${API_ENDPOINTS.USERS}/external/${externalId}`,\n bearerToken,\n });\n }\n\n /**\n * Create a new user\n * @param bearerToken - Authentication token for API calls\n * @param params - CreateUserParams\n * @returns Promise<User> - Single User\n */\n async createUser(\n params: CreateUserParams,\n bearerToken: string\n ): Promise<User> {\n return this.client.post<User>({\n endpoint: `${API_ENDPOINTS.USERS}`,\n bearerToken,\n body: params,\n });\n }\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 CreateSkuTransactionParams,\n SkuTransaction,\n GetTokenBalanceParams,\n GetTokenBalanceResponse,\n PaginatedResponse,\n Sku,\n GetSkuListQuery,\n User,\n CreateUserParams,\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 { ChipiSkuTransactions } from \"./sku-transactions\";\nimport { ChipiSkus } from \"./skus\";\nimport { Users } from \"./users\";\n\n/**\n * Main Chipi SDK class\n */\nexport class ChipiSDK {\n private client: ChipiClient;\n private nodeUrl: string;\n private apiSecretKey?: string;\n\n public readonly wallets: ChipiWallets;\n public readonly transactions: ChipiTransactions;\n public readonly skuTransactions: ChipiSkuTransactions;\n public readonly skus: ChipiSkus;\n public readonly users: Users;\n\n constructor(config: ChipiSDKConfig) {\n this.client = new ChipiClient(config);\n this.nodeUrl = config.nodeUrl || STARKNET_NETWORKS.MAINNET;\n this.apiSecretKey = config.apiSecretKey;\n\n // Initialize service classes\n this.wallets = new ChipiWallets(this.client);\n this.transactions = new ChipiTransactions(this.client);\n this.skuTransactions = new ChipiSkuTransactions(this.client);\n this.skus = new ChipiSkus(this.client);\n this.users = new Users(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 this.createSkuTransaction = this.createSkuTransaction.bind(this);\n }\n\n /**\n * Resolve bearer token - uses provided token or falls back to apiSecretKey\n */\n private resolveBearerToken(bearerToken?: string): string {\n const token = bearerToken ?? this.apiSecretKey;\n\n if (!token) {\n throw new Error(\n \"Authentication required: either pass a bearerToken or configure the SDK with an apiSecretKey\"\n );\n }\n\n return token;\n }\n\n /**\n * Execute a gasless transaction\n */\n async executeTransaction({\n params,\n bearerToken,\n }: {\n params: ExecuteTransactionParams;\n bearerToken?: string;\n }): Promise<string> {\n return this.transactions.executeTransaction({\n params,\n bearerToken: this.resolveBearerToken(bearerToken),\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 return this.transactions.transfer({\n params,\n bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Approve token spending\n */\n async approve({\n params,\n bearerToken,\n }: {\n params: ApproveParams;\n bearerToken?: string;\n }): Promise<string> {\n const { encryptKey, wallet, contractAddress, spender, amount, decimals } =\n params;\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress,\n entrypoint: \"approve\",\n calldata: [spender, formatAmount(amount, decimals), \"0x0\"],\n },\n ],\n },\n bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Stake USDC in Vesu protocol\n */\n async stakeVesuUsdc({\n params,\n bearerToken,\n }: {\n params: StakeVesuUsdcParams;\n bearerToken?: string;\n }): Promise<string> {\n const { encryptKey, wallet, amount, receiverWallet } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\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 bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Withdraw USDC from Vesu protocol\n */\n async withdrawVesuUsdc({\n params,\n bearerToken,\n }: {\n params: WithdrawVesuUsdcParams;\n bearerToken?: string;\n }): Promise<string> {\n const { encryptKey, wallet, amount, recipient } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"withdraw\",\n calldata: [formattedAmount, recipient, \"0x0\"],\n },\n ],\n },\n bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract({\n params,\n bearerToken,\n }: {\n params: CallAnyContractParams;\n bearerToken?: string;\n }): Promise<string> {\n const { encryptKey, wallet, calls } = params;\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls,\n },\n bearerToken: this.resolveBearerToken(bearerToken),\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: this.resolveBearerToken(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: this.resolveBearerToken(bearerToken),\n });\n }\n\n async getWallet(params: GetWalletParams, bearerToken?: string) {\n return this.wallets.getWallet(params, this.resolveBearerToken(bearerToken));\n }\n\n async getTokenBalance(\n params: GetTokenBalanceParams,\n bearerToken?: string\n ): Promise<GetTokenBalanceResponse> {\n return this.wallets.getTokenBalance({\n params,\n bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Create a SKU transaction\n */\n async createSkuTransaction({\n params,\n bearerToken,\n }: {\n params: CreateSkuTransactionParams;\n bearerToken?: string;\n }): Promise<SkuTransaction> {\n return this.skuTransactions.createSkuTransaction(\n params,\n this.resolveBearerToken(bearerToken)\n );\n }\n\n /// SKUS\n\n async getSkuList(\n params: GetSkuListQuery,\n bearerToken?: string\n ): Promise<PaginatedResponse<Sku>> {\n return this.skus.getSkuList(params, this.resolveBearerToken(bearerToken));\n }\n\n async getSku(id: string, bearerToken?: string): Promise<Sku> {\n return this.skus.getSku(id, this.resolveBearerToken(bearerToken));\n }\n\n // USERS\n async getUserByExternalId(\n externalId: string,\n bearerToken?: string\n ): Promise<User> {\n return this.users.getUserByExternalId(\n externalId,\n this.resolveBearerToken(bearerToken)\n );\n }\n\n async createUser(\n params: CreateUserParams,\n bearerToken?: string\n ): Promise<User> {\n return this.users.createUser(params, this.resolveBearerToken(bearerToken));\n }\n}\n","import type { ChipiServerSDKConfig } from \"@chipi-stack/types\";\nimport { ChipiSDK } from \"./chipi-sdk\";\n\n/**\n * Server-side Chipi SDK with built-in API Secret Key authentication\n * \n * This class is designed for server-side environments where you can safely store\n * the API Secret Key. All methods automatically use the secret key for authentication,\n * so you don't need to pass a bearer token with each call.\n * \n * The apiSecretKey is stored internally and used automatically for all authenticated requests.\n * All methods from ChipiSDK are inherited and work without requiring a bearerToken parameter.\n * \n * @example\n * ```typescript\n * const chipiServer = new ChipiServerSDK({\n * apiPublicKey: \"pk_...\",\n * apiSecretKey: \"sk_...\",\n * environment: \"production\"\n * });\n * \n * // No bearer token needed - automatically uses apiSecretKey!\n * const wallet = await chipiServer.createWallet({\n * params: {\n * encryptKey: \"user-encryption-key\",\n * externalUserId: \"user-123\"\n * }\n * });\n * \n * const userWallet = await chipiServer.getWallet({ externalUserId: \"user-123\" });\n * const txHash = await chipiServer.transfer({ params: { ... } });\n * ```\n */\nexport class ChipiServerSDK extends ChipiSDK {\n constructor(config: ChipiServerSDKConfig) {\n if (!config.apiSecretKey) {\n throw new Error(\n \"apiSecretKey is required for ChipiServerSDK. Use ChipiBrowserSDK for client-side applications.\"\n );\n }\n \n super(config);\n }\n \n // All methods are inherited from ChipiSDK\n // The apiSecretKey from config is automatically used via resolveBearerToken()\n}\n\n","import type { ChipiBrowserSDKConfig } from \"@chipi-stack/types\";\nimport { ChipiSDK } from \"./chipi-sdk\";\n\n/**\n * Browser-side Chipi SDK for client-side applications\n * \n * This class is designed for browser environments (Vue, Svelte, Angular, vanilla JS, etc.)\n * where you need to pass a bearer token (JWT) with each authenticated request.\n * \n * All methods require a bearerToken parameter since browser environments should not\n * store API Secret Keys.\n * \n * ⚠️ SECURITY WARNING: DO NOT use your API Secret Key in browser environments!\n * The secret key should only be used server-side with ChipiServerSDK.\n * \n * @example\n * ```typescript\n * const chipiBrowser = new ChipiBrowserSDK({\n * apiPublicKey: \"pk_...\",\n * environment: \"production\"\n * });\n * \n * // Get user's JWT token from your auth system\n * const userToken = await getUserJWT();\n * \n * // Pass bearer token with each call\n * const wallet = await chipiBrowser.createWallet({\n * params: {\n * encryptKey: \"user-encryption-key\",\n * externalUserId: \"user-123\"\n * },\n * bearerToken: userToken\n * });\n * \n * const userWallet = await chipiBrowser.getWallet({ externalUserId: \"user-123\" }, userToken);\n * const txHash = await chipiBrowser.transfer({ params: {...}, bearerToken: userToken });\n * ```\n */\nexport class ChipiBrowserSDK extends ChipiSDK {\n constructor(config: ChipiBrowserSDKConfig) {\n super(config);\n }\n \n // All methods are inherited from ChipiSDK\n // bearerToken parameter is required for each authenticated request\n}\n\n"]}
1
+ {"version":3,"sources":["../src/client.ts","../src/encryption.ts","../src/wallets.ts","../src/execute-paymaster-transaction.ts","../src/transactions.ts","../src/sku-transactions.ts","../src/skus.ts","../src/users.ts","../src/chipi-sdk.ts","../src/chipi-server-sdk.ts","../src/chipi-browser-sdk.ts"],"names":["isValidApiKey","ChipiAuthError","STARKNET_NETWORKS","validateErrorResponse","ChipiApiError","handleApiError","CryptoES","RpcProvider","ec","CairoCustomEnum","CairoOption","CairoOptionVariant","CallData","hash","Account","API_ENDPOINTS","num","ChipiTransactionError","STARKNET_CONTRACTS","formatAmount","getUsdAmount","SKU_CONTRACTS","cairo","CARRIER_IDS","SERVICE_TYPES","CHAIN_TYPES","CHAIN_TOKEN_TYPES","CONTRACT_ADDRESSES"],"mappings":"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","file":"index.js","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 customAlphaUrl?: string;\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.customAlphaUrl = config.alphaUrl;\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.customAlphaUrl) {\n return this.customAlphaUrl.endsWith(\"/v1\") \n ? this.customAlphaUrl \n : `${this.customAlphaUrl.replace(/\\/$/, \"\")}/v1`;\n }\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<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 CryptoES from \"crypto-es\";\n\nexport const encryptPrivateKey = (\n privateKey: string,\n password: string\n): string => {\n return CryptoES.AES.encrypt(privateKey, password).toString();\n};\n\nexport const decryptPrivateKey = (\n encryptedPrivateKey: string,\n password: string\n): string => {\n try {\n const bytes = CryptoES.AES.decrypt(encryptedPrivateKey, password);\n const decrypted = bytes.toString(CryptoES.enc.Utf8);\n\n // Check if the decrypted string is empty\n if (!decrypted) throw new Error(\"Decryption failed\");\n\n return decrypted;\n } catch (error) {\n console.error(\"Decryption failed:\", error);\n throw new Error(`Decryption failed: ${error}`);\n }\n};\n","import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetWalletParams,\n WalletData,\n GetWalletResponse,\n GetTokenBalanceParams,\n GetTokenBalanceResponse,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport CryptoES from \"crypto-es\";\n\nimport { ChipiTransactionError, ChipiApiError } 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 { DeploymentData } from \"@avnu/gasless-sdk\";\nimport { encryptPrivateKey } from \"./encryption\";\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, externalUserId, bearerToken, userId } = 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 privateKeyAX = this.getPrivateKeyAX();\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 const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse;\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 = encryptPrivateKey(privateKeyAX, encryptKey);\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 userId,\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 } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n\n /**\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 bearerToken: string\n ): Promise<(GetWalletResponse & { normalizedPublicKey: string }) | null> {\n try {\n const { externalUserId } = params;\n const getWalletResponse = await this.client.get<\n GetWalletResponse & { normalizedPublicKey: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/by-user`,\n params: { externalUserId },\n bearerToken,\n });\n\n return getWalletResponse;\n } catch (err) {\n // Check if it's a 404 error (wallet not found)\n if (err instanceof ChipiApiError && err.status === 404) {\n return null;\n }\n throw new Error(`getWallet error: ${String(err)}`);\n }\n }\n\n getPrivateKeyAX = () => {\n // Generate 32 random bytes (256 bits)\n // const privateKeyBytes = Crypto.getRandomBytes(32); old implementation\n const privateKeyBytes = CryptoES.lib.WordArray.random(32);\n // Convert to hex string and ensure it's 64 characters (32 bytes)\n const privateKey = privateKeyBytes.toString(CryptoES.enc.Hex);\n\n // Add '0x' prefix\n const fullPrivateKey = `0x${privateKey}`;\n\n // Ensure the private key is within Starknet's valid range (0 to 2^251 - 1)\n // Convert to BigInt and take modulo 2^251\n const maxStarknetValue = BigInt(\n \"0x800000000000000000000000000000000000000000000000000000000000000\"\n );\n const privateKeyBigInt = BigInt(fullPrivateKey) % maxStarknetValue;\n\n // Convert back to hex string with '0x' prefix\n return `0x${privateKeyBigInt.toString(16)}`;\n };\n\n async getTokenBalance({\n params,\n bearerToken,\n }: {\n params: GetTokenBalanceParams;\n bearerToken: string;\n }): Promise<GetTokenBalanceResponse> {\n const getBalanceResponse = await this.client.get<GetTokenBalanceResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/token-balance`,\n params,\n bearerToken,\n });\n\n return getBalanceResponse;\n }\n}\n","import type {\n ExecuteSponsoredTransactionResponse,\n ExecuteTransactionParams,\n WalletData,\n} from \"@chipi-stack/types\";\nimport type { Call } from \"starknet\";\nimport { Account, RpcProvider, TypedData } from \"starknet\";\nimport { decryptPrivateKey } from \"./encryption\";\n\n// Internal type - not exported to users\ninterface ExecutePaymasterTransactionParams {\n encryptKey: string;\n wallet: WalletData;\n calls: Call[];\n saveToDatabase: boolean; // Internal only - always set by SDK, users cannot control this\n}\n\n// This will need to be imported from the actual gasless SDK or implemented\n// For now, this is a placeholder implementation based on the original SDK\n\n/**\n * Execute a paymaster transaction (gasless)\n */\nexport const executePaymasterTransaction = async (\n {\n params,\n bearerToken,\n apiPublicKey,\n backendUrl,\n }: {\n params: ExecutePaymasterTransactionParams;\n bearerToken: string;\n apiPublicKey: string;\n backendUrl: string;\n }\n): Promise<string> => {\n // Backend url shit is temporary\n try {\n const { encryptKey, wallet, calls, saveToDatabase } = params;\n\n // Fetch the encrypted private key from clerk public metadata\n const privateKeyDecrypted = decryptPrivateKey(\n wallet.encryptedPrivateKey,\n encryptKey\n );\n\n if (!privateKeyDecrypted) {\n throw new Error(\"Failed to decrypt private key\");\n }\n\n const provider = new RpcProvider({\n nodeUrl: \"https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7\",\n });\n\n const account = new Account(\n provider,\n wallet.publicKey,\n privateKeyDecrypted\n );\n\n // Build the type data\n const typeDataResponse = await fetch(\n `${backendUrl}/transactions/prepare-typed-data`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n calls: calls,\n accountClassHash:\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n }),\n }\n );\n\n if (!typeDataResponse.ok) {\n const errorText = await typeDataResponse.text();\n throw new Error(`Error in API: ${errorText}`);\n }\n\n const typeData = (await typeDataResponse.json()) as TypedData;\n\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // Execute the transaction\n const executeTransaction = await fetch(\n `${backendUrl}/transactions/execute-sponsored-transaction`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${bearerToken}`,\n \"X-API-Key\": apiPublicKey,\n },\n body: JSON.stringify({\n publicKey: wallet.publicKey,\n typeData: typeData,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n saveToDatabase: saveToDatabase,\n }),\n }\n );\n\n if (!executeTransaction.ok) {\n const errorText = await executeTransaction.text();\n throw new Error(`Error executing sponsored transaction: ${errorText}`);\n }\n\n const result =\n (await executeTransaction.json()) as ExecuteSponsoredTransactionResponse;\n\n if (!result.transactionHash) {\n throw new Error(\"The response does not contain the transaction hash\");\n }\n\n return result.transactionHash;\n } catch (error) {\n console.error(\"Error sending transaction with paymaster\", error);\n throw error;\n }\n};\n","import {\n CallAnyContractParams,\n STARKNET_CONTRACTS,\n WalletData,\n type ExecuteTransactionParams,\n type RecordSendTransactionParams,\n type Transaction,\n type TransferParams,\n type GetTransactionListQuery,\n type PaginatedResponse,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS, formatAmount } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\nimport { executePaymasterTransaction } from \"./execute-paymaster-transaction\";\n\n/**\n * Transaction management utilities\n */\nexport class ChipiTransactions {\n constructor(private client: ChipiClient) {}\n /**\n * Execute a gasless transaction using paymaster\n * @internal saveToDatabase - Internal only, not exposed to clients\n */\n async executeTransaction({\n params,\n bearerToken,\n saveToDatabase = true, // Internal only - defaults to true, can be overridden internally\n }: {\n params: ExecuteTransactionParams;\n bearerToken: string;\n saveToDatabase?: boolean; // Internal only - not part of public API\n }): Promise<string> {\n return executePaymasterTransaction({\n params: {\n ...params,\n saveToDatabase,\n },\n bearerToken,\n backendUrl: this.client.baseUrl,\n apiPublicKey: this.client.getApiPublicKey(),\n });\n }\n\n /**\n * Transfer tokens\n */\n async transfer({\n params,\n bearerToken,\n }: {\n params: TransferParams;\n bearerToken: string;\n }): Promise<string> {\n const { encryptKey, wallet, token, otherToken, recipient, amount } = params;\n const contract = STARKNET_CONTRACTS[token];\n let contractAddress = contract.contractAddress;\n let decimals = contract.decimals;\n if (token === \"OTHER\") {\n if (!otherToken) {\n throw new Error(\"Other token is required when token is OTHER\");\n }\n contractAddress = otherToken.contractAddress;\n decimals = otherToken.decimals;\n }\n const formattedAmount = formatAmount(amount, decimals);\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress,\n entrypoint: \"transfer\",\n calldata: [recipient, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken,\n });\n }\n\n /**\n * Approve token spending\n */\n async approve(params: {\n encryptKey: string;\n wallet: WalletData;\n contractAddress: string;\n spender: string;\n amount: string ;\n decimals?: number;\n bearerToken: string;\n }): Promise<string> {\n const formattedAmount = formatAmount(params.amount, params.decimals);\n\n return this.executeTransaction({\n params: {\n encryptKey: params.encryptKey,\n wallet: params.wallet,\n calls: [\n {\n contractAddress: params.contractAddress,\n entrypoint: \"approve\",\n calldata: [params.spender, formattedAmount, \"0x0\"],\n },\n ],\n },\n bearerToken: params.bearerToken,\n });\n }\n\n /**\n * Call any contract method\n */\n // {\n // encryptKey: string;\n // wallet: any;\n // calls: any[];\n // bearerToken: string;\n // }\n\n async callAnyContract({\n params,\n bearerToken,\n }: {\n params: CallAnyContractParams;\n bearerToken: string;\n }): Promise<string> {\n return this.executeTransaction({\n params,\n bearerToken,\n });\n }\n\n /**\n * Record a send transaction\n */\n async recordSendTransaction({\n params,\n bearerToken,\n }: {\n params: RecordSendTransactionParams;\n bearerToken: string;\n }): Promise<Transaction> {\n const response = await this.client.post<Transaction>({\n endpoint: `${API_ENDPOINTS.TRANSACTIONS}/record-send`,\n bearerToken,\n body: params,\n });\n return response;\n }\n\n /**\n * Get paginated transaction history\n */\n async getTransactionList(\n query: GetTransactionListQuery,\n bearerToken: string\n ): Promise<PaginatedResponse<Transaction>> {\n const response = await this.client.get<PaginatedResponse<Transaction>>({\n endpoint: `${API_ENDPOINTS.TRANSACTIONS}/transaction-list`,\n params: query,\n bearerToken,\n });\n return response;\n }\n}\n","import { CreateSkuTransactionParams, Sku, SkuTransaction, STARKNET_CONTRACTS } from \"@chipi-stack/types\";\nimport { ChipiClient } from \"./client\";\nimport { ChipiTransactions } from \"./transactions\";\n\nimport { CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, SERVICE_TYPES, SKU_CONTRACTS, formatAmount, getUsdAmount } from \"@chipi-stack/shared\";\nimport { Call, CallData, cairo, hash } from \"starknet\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport CryptoES from \"crypto-es\";\n\nexport class ChipiSkuTransactions {\n private transactions: ChipiTransactions;\n\n constructor(private client: ChipiClient) {\n this.transactions = new ChipiTransactions(client);\n }\n\n\n /**\n * Creates a SKU transaction with gasless execution\n * @param params - Transaction parameters including amount, SKU ID, wallet, etc.\n * @param bearerToken - Authentication token for API calls\n * @returns Promise<SkuTransaction> - The created transaction record\n */\n async createSkuTransaction(params: CreateSkuTransactionParams, bearerToken: string): Promise<SkuTransaction> {\n\n\n const { mxnAmount, skuId, wallet, reference, externalUserId } = params;\n const backendUrl = this.client.baseUrl;\n const usdAmount = await getUsdAmount(mxnAmount, bearerToken, this.client);\n const tokenAddress = STARKNET_CONTRACTS.USDC.contractAddress as `0x${string}`;\n if (usdAmount <= 0) {\n throw new Error(`Invalid USD amount: ${usdAmount}. Amount must be positive.`);\n }\n const minUsdAmount = Math.max(usdAmount, 0.000001);\n const parsedAmount = formatAmount(minUsdAmount.toString(), STARKNET_CONTRACTS.USDC.decimals);\n const calls: Call[] = [\n {\n contractAddress: tokenAddress,\n entrypoint: \"approve\",\n calldata: CallData.compile({\n spender: SKU_CONTRACTS.RECHARGER_WITH_STRK_MAINNET,\n amount: cairo.uint256(parsedAmount),\n }),\n },\n {\n contractAddress: SKU_CONTRACTS.RECHARGER_WITH_STRK_MAINNET,\n entrypoint: \"newRecharge\",\n calldata: CallData.compile({\n token_address: tokenAddress,\n amount: cairo.uint256(parsedAmount),\n rechargeId: CryptoES.SHA256(\n CryptoES.lib.WordArray.random(32), // 32 bytes = 256 bits entropy\n )\n .toString()\n .slice(0, 20),\n productId: skuId,\n carrierId: CARRIER_IDS.CHIPI_PAY,\n }),\n },\n {\n contractAddress: SKU_CONTRACTS.CHIPI_BILL_SERVICE,\n entrypoint: \"mint_item\",\n calldata: CallData.compile({\n recipient: wallet.publicKey,\n metadata: {\n service_type: SERVICE_TYPES.BUY_SERVICE,\n timestamp: Date.now(),\n chipi_user_id: hash.starknetKeccak(externalUserId || \"0x0\").toString(),\n kyc: true,\n amount: cairo.uint256(parsedAmount),\n },\n }),\n },\n ];\n\n const transactionHash = await this.transactions.executeTransaction({\n params: {\n encryptKey: params.encryptKey,\n wallet: wallet,\n calls: calls,\n },\n bearerToken: bearerToken,\n saveToDatabase: false, // Internal: SKU transactions don't save to transactions table\n });\n\n const input = {\n walletAddress: wallet.publicKey,\n skuId: skuId,\n chain: CHAIN_TYPES.STARKNET,\n chainToken: CHAIN_TOKEN_TYPES.USDC,\n mxnAmount: mxnAmount,\n reference: reference,\n transactionHash: transactionHash,\n usdAmount: minUsdAmount,\n }\n // Record the transaction and fetch the purchase of the service \n const response = await this.client.post<SkuTransaction>({\n endpoint: `${API_ENDPOINTS.SKU_TRANSACTIONS}`,\n bearerToken,\n body: input,\n });\n\n return response;\n }\n\n\n\n /**\n * Get a SKU transaction by transaction id\n * @param id - The SKU transaction id\n * @param bearerToken - Authentication token for API calls\n * @returns Promise<SkuTransaction> - Single SKU transaction\n */\n async getSkuTransaction(\n id: string,\n bearerToken: string,\n ): Promise<SkuTransaction> {\n const response = await this.client.get<SkuTransaction>({\n endpoint: `${API_ENDPOINTS.SKU_TRANSACTIONS}/${id}`,\n bearerToken,\n });\n return response;\n }\n\n \n \n}","import type {\n PaginatedResponse,\n Sku,\n GetSkuListQuery,\n} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n/**\n * SKU (Stock Keeping Unit) management utilities\n */\nexport class ChipiSkus {\n constructor(private client: ChipiClient) {}\n /**\n * Get available SKUs for purchase with pagination\n * @param bearerToken - Authentication token for API calls\n * @param query - Pagination query parameters\n * @returns Promise<PaginatedResponse<Sku>> - Paginated list of available SKUs\n */\n async getSkuList(\n params: GetSkuListQuery,\n bearerToken: string,\n ): Promise<PaginatedResponse<Sku>> {\n const response = await this.client.get<PaginatedResponse<Sku>>({\n endpoint: `${API_ENDPOINTS.SKUS}`,\n params,\n bearerToken,\n });\n\n return response;\n }\n\n /**\n * Get a single SKU by ID\n * @param bearerToken - Authentication token for API calls\n * @param id - SKU ID\n * @returns Promise<Sku> - Single SKU\n */\n async getSku( \n id: string,\n bearerToken: string,\n ): Promise<Sku> {\n return this.client.get<Sku>({\n endpoint: `${API_ENDPOINTS.SKUS}/${id}`,\n bearerToken,\n });\n }\n}","import type { User, CreateUserParams, GetUserParams } from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\n/**\n * User management\n */\nexport class Users {\n constructor(private client: ChipiClient) {}\n\n /**\n * Get a single SKU by ID\n * @param bearerToken - Authentication token for API calls\n * @param id - SKU ID\n * @returns Promise<Sku> - Single SKU\n */\n async getUser(params: GetUserParams, bearerToken: string): Promise<User> {\n const { phone, ...rest } = params;\n const queryParams = {\n ...rest,\n phoneCountryCode: phone?.phoneCountryCode?.toString() || undefined,\n phoneNumber: phone?.phoneNumber?.toString() || undefined,\n };\n return this.client.get<User>({\n endpoint: `${API_ENDPOINTS.USERS}`,\n params: queryParams,\n bearerToken,\n });\n }\n\n /**\n * Create a new user\n * @param bearerToken - Authentication token for API calls\n * @param params - CreateUserParams\n * @returns Promise<User> - Single User\n */\n async createUser(\n params: CreateUserParams,\n bearerToken: string\n ): Promise<User> {\n return this.client.post<User>({\n endpoint: `${API_ENDPOINTS.USERS}`,\n bearerToken,\n body: params,\n });\n }\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 CreateSkuTransactionParams,\n SkuTransaction,\n GetTokenBalanceParams,\n GetTokenBalanceResponse,\n PaginatedResponse,\n Sku,\n GetSkuListQuery,\n GetTransactionListQuery,\n User,\n CreateUserParams,\n GetUserParams,\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 { ChipiSkuTransactions } from \"./sku-transactions\";\nimport { ChipiSkus } from \"./skus\";\nimport { Users } from \"./users\";\n\n/**\n * Main Chipi SDK class\n */\nexport class ChipiSDK {\n private client: ChipiClient;\n private nodeUrl: string;\n private apiSecretKey?: string;\n\n public readonly wallets: ChipiWallets;\n public readonly transactions: ChipiTransactions;\n public readonly skuTransactions: ChipiSkuTransactions;\n public readonly skus: ChipiSkus;\n public readonly users: Users;\n\n constructor(config: ChipiSDKConfig) {\n this.client = new ChipiClient(config);\n this.nodeUrl = config.nodeUrl || STARKNET_NETWORKS.MAINNET;\n this.apiSecretKey = config.apiSecretKey;\n\n // Initialize service classes\n this.wallets = new ChipiWallets(this.client);\n this.transactions = new ChipiTransactions(this.client);\n this.skuTransactions = new ChipiSkuTransactions(this.client);\n this.skus = new ChipiSkus(this.client);\n this.users = new Users(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 this.createSkuTransaction = this.createSkuTransaction.bind(this);\n }\n\n /**\n * Resolve bearer token - uses provided token or falls back to apiSecretKey\n */\n private resolveBearerToken(bearerToken?: string): string {\n const token = bearerToken ?? this.apiSecretKey;\n\n if (!token) {\n throw new Error(\n \"Authentication required: either pass a bearerToken or configure the SDK with an apiSecretKey\"\n );\n }\n\n return token;\n }\n\n /**\n * Execute a gasless transaction\n */\n async executeTransaction({\n params,\n bearerToken,\n }: {\n params: ExecuteTransactionParams;\n bearerToken?: string;\n }): Promise<string> {\n return this.transactions.executeTransaction({\n params,\n bearerToken: this.resolveBearerToken(bearerToken),\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 return this.transactions.transfer({\n params,\n bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Approve token spending\n */\n async approve({\n params,\n bearerToken,\n }: {\n params: ApproveParams;\n bearerToken?: string;\n }): Promise<string> {\n const { encryptKey, wallet, contractAddress, spender, amount, decimals } =\n params;\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress,\n entrypoint: \"approve\",\n calldata: [spender, formatAmount(amount, decimals), \"0x0\"],\n },\n ],\n },\n bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Stake USDC in Vesu protocol\n */\n async stakeVesuUsdc({\n params,\n bearerToken,\n }: {\n params: StakeVesuUsdcParams;\n bearerToken?: string;\n }): Promise<string> {\n const { encryptKey, wallet, amount, receiverWallet } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\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 bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Withdraw USDC from Vesu protocol\n */\n async withdrawVesuUsdc({\n params,\n bearerToken,\n }: {\n params: WithdrawVesuUsdcParams;\n bearerToken?: string;\n }): Promise<string> {\n const { encryptKey, wallet, amount, recipient } = params;\n const formattedAmount = formatAmount(amount, 6);\n\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls: [\n {\n contractAddress: CONTRACT_ADDRESSES.VESU_USDC_MAINNET,\n entrypoint: \"withdraw\",\n calldata: [formattedAmount, recipient, \"0x0\"],\n },\n ],\n },\n bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Call any contract method\n */\n async callAnyContract({\n params,\n bearerToken,\n }: {\n params: CallAnyContractParams;\n bearerToken?: string;\n }): Promise<string> {\n const { encryptKey, wallet, calls } = params;\n return this.executeTransaction({\n params: {\n encryptKey,\n wallet,\n calls,\n },\n bearerToken: this.resolveBearerToken(bearerToken),\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: this.resolveBearerToken(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: this.resolveBearerToken(bearerToken),\n });\n }\n\n async getTransactionList(\n query: GetTransactionListQuery,\n bearerToken?: string\n ): Promise<PaginatedResponse<Transaction>> {\n return this.transactions.getTransactionList(\n query,\n this.resolveBearerToken(bearerToken)\n );\n }\n\n async getWallet(params: GetWalletParams, bearerToken?: string) {\n return this.wallets.getWallet(params, this.resolveBearerToken(bearerToken));\n }\n\n async getTokenBalance(\n params: GetTokenBalanceParams,\n bearerToken?: string\n ): Promise<GetTokenBalanceResponse> {\n return this.wallets.getTokenBalance({\n params,\n bearerToken: this.resolveBearerToken(bearerToken),\n });\n }\n\n /**\n * Create a SKU transaction\n */\n async createSkuTransaction({\n params,\n bearerToken,\n }: {\n params: CreateSkuTransactionParams;\n bearerToken?: string;\n }): Promise<SkuTransaction> {\n return this.skuTransactions.createSkuTransaction(\n params,\n this.resolveBearerToken(bearerToken)\n );\n }\n\n /// SKUS\n async getSkuList(\n params: GetSkuListQuery,\n bearerToken?: string\n ): Promise<PaginatedResponse<Sku>> {\n return this.skus.getSkuList(params, this.resolveBearerToken(bearerToken));\n }\n\n async getSku(id: string, bearerToken?: string): Promise<Sku> {\n return this.skus.getSku(id, this.resolveBearerToken(bearerToken));\n }\n\n // USERS\n async getUser(params: GetUserParams, bearerToken?: string): Promise<User> {\n return this.users.getUser(params, this.resolveBearerToken(bearerToken));\n }\n\n async createUser(\n params: CreateUserParams,\n bearerToken?: string\n ): Promise<User> {\n return this.users.createUser(params, this.resolveBearerToken(bearerToken));\n }\n}\n","import type { ChipiServerSDKConfig } from \"@chipi-stack/types\";\nimport { ChipiSDK } from \"./chipi-sdk\";\n\n/**\n * Server-side Chipi SDK with built-in API Secret Key authentication\n * \n * This class is designed for server-side environments where you can safely store\n * the API Secret Key. All methods automatically use the secret key for authentication,\n * so you don't need to pass a bearer token with each call.\n * \n * The apiSecretKey is stored internally and used automatically for all authenticated requests.\n * All methods from ChipiSDK are inherited and work without requiring a bearerToken parameter.\n * \n * @example\n * ```typescript\n * const chipiServer = new ChipiServerSDK({\n * apiPublicKey: \"pk_...\",\n * apiSecretKey: \"sk_...\",\n * environment: \"production\"\n * });\n * \n * // No bearer token needed - automatically uses apiSecretKey!\n * const wallet = await chipiServer.createWallet({\n * params: {\n * encryptKey: \"user-encryption-key\",\n * externalUserId: \"user-123\"\n * }\n * });\n * \n * const userWallet = await chipiServer.getWallet({ externalUserId: \"user-123\" });\n * const txHash = await chipiServer.transfer({ params: { ... } });\n * ```\n */\nexport class ChipiServerSDK extends ChipiSDK {\n constructor(config: ChipiServerSDKConfig) {\n if (!config.apiSecretKey) {\n throw new Error(\n \"apiSecretKey is required for ChipiServerSDK. Use ChipiBrowserSDK for client-side applications.\"\n );\n }\n \n super(config);\n }\n \n // All methods are inherited from ChipiSDK\n // The apiSecretKey from config is automatically used via resolveBearerToken()\n}\n\n","import type { ChipiBrowserSDKConfig } from \"@chipi-stack/types\";\nimport { ChipiSDK } from \"./chipi-sdk\";\n\n/**\n * Browser-side Chipi SDK for client-side applications\n * \n * This class is designed for browser environments (Vue, Svelte, Angular, vanilla JS, etc.)\n * where you need to pass a bearer token (JWT) with each authenticated request.\n * \n * All methods require a bearerToken parameter since browser environments should not\n * store API Secret Keys.\n * \n * ⚠️ SECURITY WARNING: DO NOT use your API Secret Key in browser environments!\n * The secret key should only be used server-side with ChipiServerSDK.\n * \n * @example\n * ```typescript\n * const chipiBrowser = new ChipiBrowserSDK({\n * apiPublicKey: \"pk_...\",\n * environment: \"production\"\n * });\n * \n * // Get user's JWT token from your auth system\n * const userToken = await getUserJWT();\n * \n * // Pass bearer token with each call\n * const wallet = await chipiBrowser.createWallet({\n * params: {\n * encryptKey: \"user-encryption-key\",\n * externalUserId: \"user-123\"\n * },\n * bearerToken: userToken\n * });\n * \n * const userWallet = await chipiBrowser.getWallet({ externalUserId: \"user-123\" }, userToken);\n * const txHash = await chipiBrowser.transfer({ params: {...}, bearerToken: userToken });\n * ```\n */\nexport class ChipiBrowserSDK extends ChipiSDK {\n constructor(config: ChipiBrowserSDKConfig) {\n super(config);\n }\n \n // All methods are inherited from ChipiSDK\n // bearerToken parameter is required for each authenticated request\n}\n\n"]}
package/dist/index.mjs CHANGED
@@ -175,7 +175,7 @@ var ChipiWallets = class {
175
175
  }
176
176
  async createWallet(params) {
177
177
  try {
178
- const { encryptKey, externalUserId, bearerToken } = params;
178
+ const { encryptKey, externalUserId, bearerToken, userId } = params;
179
179
  const provider = new RpcProvider({ nodeUrl: this.client.nodeUrl });
180
180
  const privateKeyAX = this.getPrivateKeyAX();
181
181
  const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);
@@ -216,6 +216,7 @@ var ChipiWallets = class {
216
216
  bearerToken,
217
217
  body: {
218
218
  externalUserId,
219
+ userId,
219
220
  publicKey,
220
221
  userSignature: {
221
222
  r: userSignature.r.toString(),
@@ -483,6 +484,17 @@ var ChipiTransactions = class {
483
484
  });
484
485
  return response;
485
486
  }
487
+ /**
488
+ * Get paginated transaction history
489
+ */
490
+ async getTransactionList(query, bearerToken) {
491
+ const response = await this.client.get({
492
+ endpoint: `${API_ENDPOINTS.TRANSACTIONS}/transaction-list`,
493
+ params: query,
494
+ bearerToken
495
+ });
496
+ return response;
497
+ }
486
498
  };
487
499
  var ChipiSkuTransactions = class {
488
500
  constructor(client) {
@@ -625,9 +637,16 @@ var Users = class {
625
637
  * @param id - SKU ID
626
638
  * @returns Promise<Sku> - Single SKU
627
639
  */
628
- async getUserByExternalId(externalId, bearerToken) {
640
+ async getUser(params, bearerToken) {
641
+ const { phone, ...rest } = params;
642
+ const queryParams = {
643
+ ...rest,
644
+ phoneCountryCode: phone?.phoneCountryCode?.toString() || void 0,
645
+ phoneNumber: phone?.phoneNumber?.toString() || void 0
646
+ };
629
647
  return this.client.get({
630
- endpoint: `${API_ENDPOINTS.USERS}/external/${externalId}`,
648
+ endpoint: `${API_ENDPOINTS.USERS}`,
649
+ params: queryParams,
631
650
  bearerToken
632
651
  });
633
652
  }
@@ -821,6 +840,12 @@ var ChipiSDK = class {
821
840
  bearerToken: this.resolveBearerToken(bearerToken)
822
841
  });
823
842
  }
843
+ async getTransactionList(query, bearerToken) {
844
+ return this.transactions.getTransactionList(
845
+ query,
846
+ this.resolveBearerToken(bearerToken)
847
+ );
848
+ }
824
849
  async getWallet(params, bearerToken) {
825
850
  return this.wallets.getWallet(params, this.resolveBearerToken(bearerToken));
826
851
  }
@@ -850,11 +875,8 @@ var ChipiSDK = class {
850
875
  return this.skus.getSku(id, this.resolveBearerToken(bearerToken));
851
876
  }
852
877
  // USERS
853
- async getUserByExternalId(externalId, bearerToken) {
854
- return this.users.getUserByExternalId(
855
- externalId,
856
- this.resolveBearerToken(bearerToken)
857
- );
878
+ async getUser(params, bearerToken) {
879
+ return this.users.getUser(params, this.resolveBearerToken(bearerToken));
858
880
  }
859
881
  async createUser(params, bearerToken) {
860
882
  return this.users.createUser(params, this.resolveBearerToken(bearerToken));