@chipi-stack/backend 0.1.0 → 0.2.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/wallets.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { ChipiTransactionError, API_ENDPOINTS } from '@chipi-stack/shared';
1
+ import { API_ENDPOINTS, ChipiTransactionError } from '@chipi-stack/shared';
2
2
  import { RpcProvider, stark, ec, CairoCustomEnum, CairoOption, CairoOptionVariant, CallData, hash, Account, num } from 'starknet';
3
3
  import CryptoJS from 'crypto-js';
4
4
 
@@ -44,7 +44,7 @@ var ChipiWallets = class {
44
44
  // }
45
45
  async createWallet(params) {
46
46
  try {
47
- const { encryptKey, apiPublicKey, bearerToken, nodeUrl, backendUrl } = params;
47
+ const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;
48
48
  const provider = new RpcProvider({ nodeUrl });
49
49
  const privateKeyAX = stark.randomAddress();
50
50
  const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);
@@ -64,19 +64,14 @@ var ChipiWallets = class {
64
64
  0
65
65
  );
66
66
  const account = new Account(provider, publicKey, privateKeyAX);
67
- console.log("apiPublicKey", apiPublicKey);
68
- const typeDataResponse = await fetch(`${backendUrl}/chipi-wallets/prepare-creation`, {
69
- method: "POST",
70
- headers: {
71
- "Content-Type": "application/json",
72
- "Authorization": `Bearer ${bearerToken}`,
73
- "x-api-key": apiPublicKey
74
- },
75
- body: JSON.stringify({
67
+ const typeDataResponse = await this.client.post({
68
+ endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,
69
+ bearerToken,
70
+ body: {
76
71
  publicKey
77
- })
72
+ }
78
73
  });
79
- const { typeData, accountClassHash: accountClassHashResponse } = await typeDataResponse.json();
74
+ const { typeData, accountClassHash: accountClassHashResponse } = typeDataResponse.data;
80
75
  const userSignature = await account.signMessage(typeData);
81
76
  const deploymentData = {
82
77
  class_hash: accountClassHashResponse,
@@ -84,16 +79,15 @@ var ChipiWallets = class {
84
79
  unique: `${num.toHex(0)}`,
85
80
  calldata: AXConstructorCallData.map((value) => num.toHex(value))
86
81
  };
87
- const encryptedPrivateKey = this.encryptPrivateKey(privateKeyAX, encryptKey);
88
- const executeTransactionResponse = await fetch(`${backendUrl}/chipi-wallets`, {
89
- method: "POST",
90
- headers: {
91
- "Content-Type": "application/json",
92
- "Authorization": `Bearer ${bearerToken}`,
93
- "x-api-key": apiPublicKey
94
- },
95
- body: JSON.stringify({
96
- apiPublicKey,
82
+ const encryptedPrivateKey = this.encryptPrivateKey(
83
+ privateKeyAX,
84
+ encryptKey
85
+ );
86
+ const executeTransactionResponse = await this.client.post({
87
+ endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,
88
+ bearerToken,
89
+ body: {
90
+ externalUserId,
97
91
  publicKey,
98
92
  userSignature: {
99
93
  r: userSignature.r.toString(),
@@ -107,9 +101,9 @@ var ChipiWallets = class {
107
101
  salt: `${deploymentData.salt}`,
108
102
  calldata: deploymentData.calldata.map((data) => `${data}`)
109
103
  }
110
- })
104
+ }
111
105
  });
112
- const executeTransaction = await executeTransactionResponse.json();
106
+ const executeTransaction = executeTransactionResponse.data;
113
107
  if (executeTransaction.success) {
114
108
  return {
115
109
  success: true,
@@ -118,21 +112,16 @@ var ChipiWallets = class {
118
112
  wallet: executeTransaction.wallet
119
113
  };
120
114
  } else {
121
- return {
122
- success: false,
123
- txHash: "",
124
- walletPublicKey: "",
125
- wallet: {
126
- publicKey: "",
127
- encryptedPrivateKey: ""
128
- }
129
- };
115
+ throw new ChipiTransactionError(
116
+ `Failed to create wallet: ${executeTransaction.message}`,
117
+ "WALLET_CREATION_FAILED"
118
+ );
130
119
  }
131
120
  } catch (error) {
132
121
  console.error("Error detallado:", error);
133
122
  if (error instanceof Error && error.message.includes("SSL")) {
134
123
  throw new Error(
135
- "Error de conexi\xF3n SSL. Intenta usando NODE_TLS_REJECT_UNAUTHORIZED=0 o verifica la URL del RPC"
124
+ "SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL"
136
125
  );
137
126
  }
138
127
  throw new ChipiTransactionError(
@@ -144,37 +133,15 @@ var ChipiWallets = class {
144
133
  /**
145
134
  * Create a custodial merchant wallet
146
135
  */
147
- async createCustodialWallet(params, orgId) {
148
- const response = await this.client.post(
149
- `${API_ENDPOINTS.CHIPI_WALLETS}/merchant`,
150
- {
151
- ...params,
152
- orgId
153
- }
154
- );
155
- return response.data;
156
- }
157
- /**
158
- * Get merchant wallet by API key and chain
159
- */
160
- async getMerchantWallet(params) {
161
- const response = await this.client.get(
162
- `${API_ENDPOINTS.CHIPI_WALLETS}/merchant`,
163
- {
164
- apiKeyId: params.apiKeyId,
165
- chain: params.chain
166
- }
167
- );
168
- return response.data;
169
- }
170
- /**
171
- * Get wallets for an organization
172
- */
173
- async getWallets(query) {
174
- const response = await this.client.get(
175
- API_ENDPOINTS.CHIPI_WALLETS,
176
- query
177
- );
136
+ async createCustodialWallet({
137
+ params,
138
+ bearerToken
139
+ }) {
140
+ const response = await this.client.post({
141
+ endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,
142
+ bearerToken,
143
+ body: params
144
+ });
178
145
  return response.data;
179
146
  }
180
147
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/wallets.ts"],"names":[],"mappings":"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","file":"wallets.mjs","sourcesContent":["import type {\n CreateWalletParams,\n CreateWalletResponse,\n PrepareWalletCreationParams,\n PrepareWalletCreationResponse,\n CreateCustodialWalletParams,\n GetMerchantWalletParams,\n PaginationQuery,\n PaginatedResponse,\n WalletData,\n} from '@chipi-stack/types';\nimport { API_ENDPOINTS } from '@chipi-stack/shared';\nimport { ChipiClient } from './client';\n\nimport { ChipiTransactionError } from '@chipi-stack/shared';\nimport { Account, CairoCustomEnum, CairoOption, CairoOptionVariant, CallData, ec, hash, num, RpcProvider, stark } from 'starknet';\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from '@avnu/gasless-sdk';\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(params: CreateWalletParams & { backendUrl: string }): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, apiPublicKey, bearerToken, nodeUrl, backendUrl } = 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 = \"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 // Backend Call API to create the wallet\n console.log(\"apiPublicKey\", apiPublicKey);\n const typeDataResponse = await fetch(`${backendUrl}/chipi-wallets/prepare-creation`, {\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,\n }),\n });\n const { typeData, accountClassHash: accountClassHashResponse } = await typeDataResponse.json() as PrepareWalletCreationResponse;\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(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 fetch(`${backendUrl}/chipi-wallets`, {\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 apiPublicKey,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map(data => `${data}`),\n }\n }),\n });\n const executeTransaction = await executeTransactionResponse.json() as CreateWalletResponse;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n return {\n success: false,\n txHash: \"\",\n walletPublicKey: \"\",\n wallet: {\n publicKey: \"\",\n encryptedPrivateKey: \"\",\n }\n }\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n \n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"Error de conexión SSL. Intenta usando NODE_TLS_REJECT_UNAUTHORIZED=0 o verifica la URL del RPC\"\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 encryptPrivateKey = (\n privateKey: string,\n password: string,\n ): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n \n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n\n\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet(\n params: Omit<CreateCustodialWalletParams, 'orgId'>,\n orgId: string\n ): Promise<WalletData> {\n const response = await this.client.post<WalletData>(\n `${API_ENDPOINTS.CHIPI_WALLETS}/merchant`,\n {\n ...params,\n orgId,\n }\n );\n\n return response.data!;\n }\n\n /**\n * Get merchant wallet by API key and chain\n */\n async getMerchantWallet(\n params: GetMerchantWalletParams\n ): Promise<WalletData> {\n const response = await this.client.get<WalletData>(\n `${API_ENDPOINTS.CHIPI_WALLETS}/merchant`,\n {\n apiKeyId: params.apiKeyId,\n chain: params.chain,\n }\n );\n\n return response.data!;\n }\n\n /**\n * Get wallets for an organization\n */\n async getWallets(\n query: PaginationQuery & {\n apiKeyId: string;\n orgId: string;\n }\n ): Promise<PaginatedResponse<WalletData>> {\n const response = await this.client.get<PaginatedResponse<WalletData>>(\n API_ENDPOINTS.CHIPI_WALLETS,\n query\n );\n\n return response.data!;\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} from \"@chipi-stack/types\";\nimport { API_ENDPOINTS } from \"@chipi-stack/shared\";\nimport { ChipiClient } from \"./client\";\n\nimport { ChipiTransactionError } from \"@chipi-stack/shared\";\nimport {\n Account,\n CairoCustomEnum,\n CairoOption,\n CairoOptionVariant,\n CallData,\n ec,\n hash,\n num,\n RpcProvider,\n stark,\n} from \"starknet\";\nimport CryptoJS from \"crypto-js\";\nimport { DeploymentData } from \"@avnu/gasless-sdk\";\n\n/**\n * Wallet management utilities\n */\nexport class ChipiWallets {\n constructor(private client: ChipiClient) {}\n\n /**\n * Prepare wallet creation data\n */\n // async prepareWalletCreation(\n // params: Omit<PrepareWalletCreationParams, 'apiPublicKey'>\n // ): Promise<PrepareWalletCreationResponse> {\n // const response = await this.client.post<PrepareWalletCreationResponse>(\n // `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n // params\n // );\n\n // return response.data!;\n // }\n\n /**\n * Create a new wallet\n */\n // async createWallet(\n // params: Omit<CreateWalletParams, 'apiPublicKey' | 'nodeUrl'>,\n // nodeUrl?: string\n // ): Promise<CreateWalletResponse> {\n // const response = await this.client.post<CreateWalletResponse>(\n // API_ENDPOINTS.CHIPI_WALLETS,\n // {\n // ...params,\n // nodeUrl,\n // },\n // params.bearerToken\n // );\n\n // return response.data!;\n // }\n\n async createWallet(\n params: CreateWalletParams & { bearerToken: string }\n ): Promise<CreateWalletResponse> {\n try {\n const { encryptKey, nodeUrl, externalUserId, bearerToken } = params;\n\n const provider = new RpcProvider({ nodeUrl: nodeUrl });\n // Generating the private key with Stark Curve\n const privateKeyAX = stark.randomAddress();\n const starkKeyPubAX = ec.starkCurve.getStarkKey(privateKeyAX);\n\n // Using Argent X Account v0.4.0 class hash\n const accountClassHash =\n \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\"; //params.argentClassHash;\n\n // Calculate future address of the ArgentX account\n const axSigner = new CairoCustomEnum({\n Starknet: { pubkey: starkKeyPubAX },\n });\n // Set the dApp Guardian address\n const axGuardian = new CairoOption<unknown>(CairoOptionVariant.None);\n\n const AXConstructorCallData = CallData.compile({\n owner: axSigner,\n guardian: axGuardian,\n });\n\n const publicKey = hash.calculateContractAddressFromHash(\n starkKeyPubAX,\n accountClassHash,\n AXConstructorCallData,\n 0\n );\n // console.log(\"Contract address: \", contractAddress);\n\n // Initiating Account\n const account = new Account(provider, publicKey, privateKeyAX);\n // console.log(\"Account \", { ...account });\n const typeDataResponse =\n await this.client.post<PrepareWalletCreationResponse>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/prepare-creation`,\n bearerToken,\n body: {\n publicKey,\n },\n });\n\n const { typeData, accountClassHash: accountClassHashResponse } =\n typeDataResponse.data;\n\n // console.log(\"Type data: \", typeData);\n // Sign the message\n const userSignature = await account.signMessage(typeData);\n\n // console.log(\"User signature: \", userSignature);\n const deploymentData: DeploymentData = {\n class_hash: accountClassHashResponse,\n salt: starkKeyPubAX,\n unique: `${num.toHex(0)}`,\n calldata: AXConstructorCallData.map((value) => num.toHex(value)),\n };\n\n // console.log(\"Deployment data: ------ \", deploymentData);\n const encryptedPrivateKey = this.encryptPrivateKey(\n privateKeyAX,\n encryptKey\n );\n // console.log(\"Encrypted private key: \", encryptedPrivateKey);\n\n // Llamar a la API para guardar la wallet en dashboard\n const executeTransactionResponse = await this.client.post<\n CreateWalletResponse & { message: string }\n >({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}`,\n bearerToken,\n body: {\n externalUserId,\n publicKey,\n userSignature: {\n r: (userSignature as any).r.toString(),\n s: (userSignature as any).s.toString(),\n recovery: (userSignature as any).recovery,\n },\n typeData,\n encryptedPrivateKey,\n deploymentData: {\n ...deploymentData,\n salt: `${deploymentData.salt}`,\n calldata: deploymentData.calldata.map((data) => `${data}`),\n },\n },\n });\n const executeTransaction = executeTransactionResponse.data;\n if (executeTransaction.success) {\n return {\n success: true,\n txHash: executeTransaction.txHash,\n walletPublicKey: executeTransaction.walletPublicKey,\n wallet: executeTransaction.wallet,\n };\n } else {\n throw new ChipiTransactionError(\n `Failed to create wallet: ${executeTransaction.message}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n } catch (error: unknown) {\n console.error(\"Error detallado:\", error);\n\n if (error instanceof Error && error.message.includes(\"SSL\")) {\n throw new Error(\n \"SSL connection error. Try using NODE_TLS_REJECT_UNAUTHORIZED=0 or verify the RPC URL\"\n );\n }\n throw new ChipiTransactionError(\n `Failed to create wallet: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n \"WALLET_CREATION_FAILED\"\n );\n }\n }\n\n encryptPrivateKey = (privateKey: string, password: string): string => {\n if (!privateKey || !password) {\n throw new Error(\"Private key and password are required\");\n }\n\n return CryptoJS.AES.encrypt(privateKey, password).toString();\n };\n\n /**\n * Create a custodial merchant wallet\n */\n async createCustodialWallet({\n params,\n bearerToken,\n }: {\n params: Omit<CreateCustodialWalletParams, \"orgId\">;\n bearerToken: string;\n }): Promise<WalletData> {\n const response = await this.client.post<WalletData>({\n endpoint: `${API_ENDPOINTS.CHIPI_WALLETS}/custodial`,\n bearerToken,\n body: params,\n });\n\n return response.data!;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chipi-stack/backend",
3
- "version": "0.1.0",
3
+ "version": "0.2.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": {
@@ -1,24 +0,0 @@
1
- import { ChipiSDKConfig } from '@chipi-stack/types';
2
- import { ApiResponse } from '@chipi-stack/shared';
3
-
4
- /**
5
- * HTTP client for Chipi API interactions
6
- */
7
- declare class ChipiClient {
8
- private apiPublicKey;
9
- baseUrl: string;
10
- private environment;
11
- constructor(config: ChipiSDKConfig);
12
- /**
13
- * Get the API public key (for internal SDK use)
14
- */
15
- getApiPublicKey(): string;
16
- private getBaseUrl;
17
- private getHeaders;
18
- get<T>(endpoint: string, params?: Record<string, any>, bearerToken?: string): Promise<ApiResponse<T>>;
19
- post<T>(endpoint: string, body?: any, bearerToken?: string): Promise<ApiResponse<T>>;
20
- put<T>(endpoint: string, body?: any, bearerToken?: string): Promise<ApiResponse<T>>;
21
- delete<T>(endpoint: string, bearerToken?: string): Promise<ApiResponse<T>>;
22
- }
23
-
24
- export { ChipiClient as C };
@@ -1,24 +0,0 @@
1
- import { ChipiSDKConfig } from '@chipi-stack/types';
2
- import { ApiResponse } from '@chipi-stack/shared';
3
-
4
- /**
5
- * HTTP client for Chipi API interactions
6
- */
7
- declare class ChipiClient {
8
- private apiPublicKey;
9
- baseUrl: string;
10
- private environment;
11
- constructor(config: ChipiSDKConfig);
12
- /**
13
- * Get the API public key (for internal SDK use)
14
- */
15
- getApiPublicKey(): string;
16
- private getBaseUrl;
17
- private getHeaders;
18
- get<T>(endpoint: string, params?: Record<string, any>, bearerToken?: string): Promise<ApiResponse<T>>;
19
- post<T>(endpoint: string, body?: any, bearerToken?: string): Promise<ApiResponse<T>>;
20
- put<T>(endpoint: string, body?: any, bearerToken?: string): Promise<ApiResponse<T>>;
21
- delete<T>(endpoint: string, bearerToken?: string): Promise<ApiResponse<T>>;
22
- }
23
-
24
- export { ChipiClient as C };