@chipi-stack/shared 13.13.0 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-2026 Chipi Pay
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,21 @@
1
1
  # @chipi-stack/shared
2
2
 
3
- Utilities for Chipi SDKs
3
+ Shared constants, utilities, error classes, and validators for the Chipi SDK ecosystem.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @chipi-stack/shared
9
+ ```
10
+
11
+ ## Key Exports
12
+
13
+ - **Constants** (`constants/`): WALLET_CLASS_HASHES, LEGACY_CHIPI_CLASS_HASHES, CONTRACT_ADDRESSES, STARKNET_NETWORKS, API_ENDPOINTS, TOKEN_DECIMALS, SKU_CONTRACTS, CHAIN_TOKEN_TYPES, WALLET_RPC_ENDPOINTS, PAYMASTER_CONFIG, SESSION_DEFAULTS, SESSION_ERRORS, SESSION_ENTRYPOINTS, getWalletTypeFromClassHash
14
+ - **Errors** (`errors.ts`): ChipiError, ChipiApiError, ChipiWalletError, ChipiTransactionError, ChipiSessionError, ChipiSkuError, ChipiValidationError, ChipiAuthError, isChipiError, hasHttpStatus, handleApiError
15
+ - **Formatters** (`formatters.ts`): formatCurrency, formatNumber, formatDate, formatAddress, formatTransactionHash, camelToSnake, snakeToCamel, capitalizeFirst
16
+ - **Utils** (`utils/`): isValidAddress, isValidApiKey, formatAmount, parseAmount, sleep, retry, createPaginatedResponse, validatePagination, sanitizeUrl, deepMerge
17
+ - **Validation** (`validation.ts`): ApiResponseSchema, ErrorResponseSchema, SuccessResponseSchema, validateApiResponse, validateErrorResponse
18
+
19
+ ## License
20
+
21
+ MIT
@@ -17,8 +17,9 @@ declare const API_VERSIONING: {
17
17
  readonly VERSION_DATE: "2025-12-30";
18
18
  };
19
19
  declare const STARKNET_NETWORKS: {
20
- readonly MAINNET: "https://starknet-mainnet.public.blastapi.io/rpc/v0_7";
21
- readonly SEPOLIA: "https://starknet-sepolia.public.blastapi.io/rpc/v0_7";
20
+ readonly MAINNET: string;
21
+ readonly MAINNET_FALLBACK: "https://rpc.starknet.lava.build";
22
+ readonly SEPOLIA: string;
22
23
  };
23
24
  declare const CONTRACT_ADDRESSES: {
24
25
  readonly USDC_MAINNET: "0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb";
@@ -70,8 +71,22 @@ declare const CHAIN_TOKEN_TYPES: {
70
71
  readonly WBTC: "WBTC";
71
72
  readonly OTHER: "OTHER";
72
73
  };
73
- declare const WALLET_CLASS_HASHES: Record<WalletType, string>;
74
- declare const WALLET_RPC_ENDPOINTS: Record<WalletType, string>;
74
+ declare const WALLET_CLASS_HASHES: Record<string, string>;
75
+ /**
76
+ * Previous CHIPI wallet class hashes that are still deployed on-chain.
77
+ * Used by getWalletTypeFromClassHash() to identify legacy wallets.
78
+ * Ordered newest → oldest.
79
+ */
80
+ declare const LEGACY_CHIPI_CLASS_HASHES: string[];
81
+ /**
82
+ * Determine wallet type from an on-chain class hash.
83
+ * - If it matches the READY hash → READY
84
+ * - If it matches the current CHIPI hash → CHIPI
85
+ * - If it matches a legacy CHIPI hash → CHIPI
86
+ * - Otherwise → null (unknown class hash, caller should handle accordingly)
87
+ */
88
+ declare function getWalletTypeFromClassHash(classHash: string): WalletType | null;
89
+ declare const WALLET_RPC_ENDPOINTS: Record<string, string>;
75
90
  declare const PAYMASTER_CONFIG: {
76
91
  readonly URL: "https://paymaster.chipipay.com";
77
92
  };
@@ -98,6 +113,8 @@ declare const SESSION_ERRORS: {
98
113
  readonly SESSION_DECRYPTION_FAILED: "SESSION_DECRYPTION_FAILED";
99
114
  /** Failed to create session key */
100
115
  readonly SESSION_CREATION_FAILED: "SESSION_CREATION_FAILED";
116
+ /** Backend returned an invalid response shape */
117
+ readonly SESSION_INVALID_RESPONSE: "SESSION_INVALID_RESPONSE";
101
118
  };
102
119
  declare const SESSION_ENTRYPOINTS: {
103
120
  /** Add or update a session key (owner only) */
@@ -108,4 +125,4 @@ declare const SESSION_ENTRYPOINTS: {
108
125
  readonly GET_DATA: "get_session_data";
109
126
  };
110
127
 
111
- export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS };
128
+ export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, LEGACY_CHIPI_CLASS_HASHES, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS, getWalletTypeFromClassHash };
@@ -17,8 +17,9 @@ declare const API_VERSIONING: {
17
17
  readonly VERSION_DATE: "2025-12-30";
18
18
  };
19
19
  declare const STARKNET_NETWORKS: {
20
- readonly MAINNET: "https://starknet-mainnet.public.blastapi.io/rpc/v0_7";
21
- readonly SEPOLIA: "https://starknet-sepolia.public.blastapi.io/rpc/v0_7";
20
+ readonly MAINNET: string;
21
+ readonly MAINNET_FALLBACK: "https://rpc.starknet.lava.build";
22
+ readonly SEPOLIA: string;
22
23
  };
23
24
  declare const CONTRACT_ADDRESSES: {
24
25
  readonly USDC_MAINNET: "0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb";
@@ -70,8 +71,22 @@ declare const CHAIN_TOKEN_TYPES: {
70
71
  readonly WBTC: "WBTC";
71
72
  readonly OTHER: "OTHER";
72
73
  };
73
- declare const WALLET_CLASS_HASHES: Record<WalletType, string>;
74
- declare const WALLET_RPC_ENDPOINTS: Record<WalletType, string>;
74
+ declare const WALLET_CLASS_HASHES: Record<string, string>;
75
+ /**
76
+ * Previous CHIPI wallet class hashes that are still deployed on-chain.
77
+ * Used by getWalletTypeFromClassHash() to identify legacy wallets.
78
+ * Ordered newest → oldest.
79
+ */
80
+ declare const LEGACY_CHIPI_CLASS_HASHES: string[];
81
+ /**
82
+ * Determine wallet type from an on-chain class hash.
83
+ * - If it matches the READY hash → READY
84
+ * - If it matches the current CHIPI hash → CHIPI
85
+ * - If it matches a legacy CHIPI hash → CHIPI
86
+ * - Otherwise → null (unknown class hash, caller should handle accordingly)
87
+ */
88
+ declare function getWalletTypeFromClassHash(classHash: string): WalletType | null;
89
+ declare const WALLET_RPC_ENDPOINTS: Record<string, string>;
75
90
  declare const PAYMASTER_CONFIG: {
76
91
  readonly URL: "https://paymaster.chipipay.com";
77
92
  };
@@ -98,6 +113,8 @@ declare const SESSION_ERRORS: {
98
113
  readonly SESSION_DECRYPTION_FAILED: "SESSION_DECRYPTION_FAILED";
99
114
  /** Failed to create session key */
100
115
  readonly SESSION_CREATION_FAILED: "SESSION_CREATION_FAILED";
116
+ /** Backend returned an invalid response shape */
117
+ readonly SESSION_INVALID_RESPONSE: "SESSION_INVALID_RESPONSE";
101
118
  };
102
119
  declare const SESSION_ENTRYPOINTS: {
103
120
  /** Add or update a session key (owner only) */
@@ -108,4 +125,4 @@ declare const SESSION_ENTRYPOINTS: {
108
125
  readonly GET_DATA: "get_session_data";
109
126
  };
110
127
 
111
- export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS };
128
+ export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, LEGACY_CHIPI_CLASS_HASHES, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS, getWalletTypeFromClassHash };
@@ -7,9 +7,12 @@ var API_VERSIONING = {
7
7
  VERSION_DATE: "2025-12-30"
8
8
  // Detailed version - sent as query param for tracking
9
9
  };
10
+ var DEFAULT_MAINNET_RPC = "https://starknet-mainnet.infura.io/v3/4a4a1fdd7d704509aa99154fb29886e2";
11
+ var DEFAULT_SEPOLIA_RPC = "https://starknet-sepolia.infura.io/v3/4a4a1fdd7d704509aa99154fb29886e2";
10
12
  var STARKNET_NETWORKS = {
11
- MAINNET: "https://starknet-mainnet.public.blastapi.io/rpc/v0_7",
12
- SEPOLIA: "https://starknet-sepolia.public.blastapi.io/rpc/v0_7"
13
+ MAINNET: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,
14
+ MAINNET_FALLBACK: "https://rpc.starknet.lava.build",
15
+ SEPOLIA: process.env.STARKNET_RPC_URL_SEPOLIA ?? DEFAULT_SEPOLIA_RPC
13
16
  };
14
17
  var CONTRACT_ADDRESSES = {
15
18
  USDC_MAINNET: "0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb",
@@ -65,13 +68,39 @@ var CHAIN_TOKEN_TYPES = {
65
68
  OTHER: "OTHER"
66
69
  };
67
70
  var WALLET_CLASS_HASHES = {
68
- CHIPI: "0x53f4f8791ed5bed0fddaa553d180c664e32cfaf8316bb232ae77bb08f459f2a",
69
- // CHIPI: "0x2de1565226d5215a38b68c4d9a4913989b54edff64c68c45e453c417b44cd83", // Old class Hash
71
+ CHIPI: "0x053f4f8791ed5bed0fddaa553d180c664e32cfaf8316bb232ae77bb08f459f2a",
72
+ // v29 — must match backend until coordinated v33 upgrade
70
73
  READY: "0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f"
71
74
  };
75
+ var LEGACY_CHIPI_CLASS_HASHES = [
76
+ "0x0484bbd2404b3c7264bea271f7267d6d4004821ac7787a9eed7f472e79ef40d1",
77
+ // v33 — wallets created during brief v33 window
78
+ "0x035a2251aca25daba18a5d8950deffa8372a7d84774554e75283cb85552eebc9",
79
+ // v32 — audit 3
80
+ "0x0254f6dd0427319ec614c29e4e3929500d1ba95d0da87ff81d67051ce572667",
81
+ // v31
82
+ "0x072b77b033a874fa1b8f7ff52e18be8fb5ce01a00c59cd184ae15f5b29bc0e57",
83
+ // v30
84
+ "0x02de1565226d5215a38b68c4d9a4913989b54edff64c68c45e453c417b44cd83"
85
+ // v28
86
+ ];
87
+ function getWalletTypeFromClassHash(classHash) {
88
+ const normalized = classHash.toLowerCase().replace(/^0x0+/, "0x");
89
+ const normalize = (h) => h.toLowerCase().replace(/^0x0+/, "0x");
90
+ if (normalize(WALLET_CLASS_HASHES.READY) === normalized) {
91
+ return "READY";
92
+ }
93
+ if (normalize(WALLET_CLASS_HASHES.CHIPI) === normalized) {
94
+ return "CHIPI";
95
+ }
96
+ if (LEGACY_CHIPI_CLASS_HASHES.some((h) => normalize(h) === normalized)) {
97
+ return "CHIPI";
98
+ }
99
+ return null;
100
+ }
72
101
  var WALLET_RPC_ENDPOINTS = {
73
- CHIPI: "https://starknet-mainnet.public.blastapi.io/rpc/v0_7",
74
- READY: "https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7"
102
+ CHIPI: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,
103
+ READY: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC
75
104
  };
76
105
  var PAYMASTER_CONFIG = {
77
106
  URL: "https://paymaster.chipipay.com"
@@ -98,7 +127,9 @@ var SESSION_ERRORS = {
98
127
  /** Failed to decrypt session private key */
99
128
  SESSION_DECRYPTION_FAILED: "SESSION_DECRYPTION_FAILED",
100
129
  /** Failed to create session key */
101
- SESSION_CREATION_FAILED: "SESSION_CREATION_FAILED"
130
+ SESSION_CREATION_FAILED: "SESSION_CREATION_FAILED",
131
+ /** Backend returned an invalid response shape */
132
+ SESSION_INVALID_RESPONSE: "SESSION_INVALID_RESPONSE"
102
133
  };
103
134
  var SESSION_ENTRYPOINTS = {
104
135
  /** Add or update a session key (owner only) */
@@ -116,6 +147,7 @@ exports.CHAIN_TOKEN_TYPES = CHAIN_TOKEN_TYPES;
116
147
  exports.CHAIN_TYPES = CHAIN_TYPES;
117
148
  exports.CONTRACT_ADDRESSES = CONTRACT_ADDRESSES;
118
149
  exports.ERRORS = ERRORS;
150
+ exports.LEGACY_CHIPI_CLASS_HASHES = LEGACY_CHIPI_CLASS_HASHES;
119
151
  exports.PAYMASTER_CONFIG = PAYMASTER_CONFIG;
120
152
  exports.SERVICE_TYPES = SERVICE_TYPES;
121
153
  exports.SESSION_DEFAULTS = SESSION_DEFAULTS;
@@ -126,5 +158,6 @@ exports.STARKNET_NETWORKS = STARKNET_NETWORKS;
126
158
  exports.TOKEN_DECIMALS = TOKEN_DECIMALS;
127
159
  exports.WALLET_CLASS_HASHES = WALLET_CLASS_HASHES;
128
160
  exports.WALLET_RPC_ENDPOINTS = WALLET_RPC_ENDPOINTS;
161
+ exports.getWalletTypeFromClassHash = getWalletTypeFromClassHash;
129
162
  //# sourceMappingURL=index.js.map
130
163
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/constants/index.ts"],"names":[],"mappings":";;;AAcO,IAAM,cAAA,GAAiB;AAAA,EAC5B,OAAA,EAAS,GAAA;AAAA;AAAA,EACT,YAAA,EAAc;AAAA;AAChB;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,OAAA,EAAS,sDAAA;AAAA,EACT,OAAA,EAAS;AACX;AAEO,IAAM,kBAAA,GAAqB;AAAA,EAChC,YAAA,EACE,oEAAA;AAAA;AAAA,EACF,iBAAA,EACE;AACJ;AAEO,IAAM,cAAA,GAAiB;AAAA,EAC5B,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,GAAA,EAAK,EAAA;AAAA,EACL,IAAA,EAAM,EAAA;AAAA,EACN,GAAA,EAAK;AACP;AAEO,IAAM,aAAA,GAAgB;AAAA,EAC3B,aAAA,EAAe,gBAAA;AAAA,EACf,YAAA,EAAc,eAAA;AAAA,EACd,IAAA,EAAM,OAAA;AAAA,EACN,aAAA,EAAe,gBAAA;AAAA,EACf,SAAA,EAAW,YAAA;AAAA,EACX,KAAA,EAAO;AACT;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,eAAA,EAAiB,iBAAA;AAAA,EACjB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,iBAAA,EAAmB,mBAAA;AAAA,EACnB,aAAA,EAAe,eAAA;AAAA,EACf,eAAA,EAAiB;AACnB;AAEO,IAAM,aAAA,GAAgB;AAAA,EAC3B,2BAAA,EACE,oEAAA;AAAA;AAAA,EACF,kBAAA,EACE;AACJ;AAGO,IAAM,aAAA,GAAgB;AAAA,EAC3B,WAAA,EAAa;AACf;AAGO,IAAM,WAAA,GAAc;AAAA,EACzB,SAAA,EAAW;AACb;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,QAAA,EAAU;AACZ;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,IAAA,EAAM,MAAA;AAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO;AACT;AAEO,IAAM,mBAAA,GAAkD;AAAA,EAC7D,KAAA,EAAO,mEAAA;AAAA;AAAA,EAEP,KAAA,EAAO;AACT;AAGO,IAAM,oBAAA,GAAmD;AAAA,EAC9D,KAAA,EAAO,sDAAA;AAAA,EACP,KAAA,EAAO;AACT;AAGO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,GAAA,EAAK;AACP;AAGO,IAAM,gBAAA,GAAmB;AAAA;AAAA,EAE9B,gBAAA,EAAkB,KAAA;AAAA;AAAA,EAElB,SAAA,EAAW;AACb;AAGO,IAAM,cAAA,GAAiB;AAAA;AAAA,EAE5B,+BAAA,EAAiC,iCAAA;AAAA;AAAA,EAEjC,eAAA,EAAiB,iBAAA;AAAA;AAAA,EAEjB,sBAAA,EAAwB,wBAAA;AAAA;AAAA,EAExB,eAAA,EAAiB,iBAAA;AAAA;AAAA,EAEjB,0BAAA,EAA4B,4BAAA;AAAA;AAAA,EAE5B,8BAAA,EAAgC,gCAAA;AAAA;AAAA,EAEhC,yBAAA,EAA2B,2BAAA;AAAA;AAAA,EAE3B,uBAAA,EAAyB;AAC3B;AAGO,IAAM,mBAAA,GAAsB;AAAA;AAAA,EAEjC,aAAA,EAAe,2BAAA;AAAA;AAAA,EAEf,MAAA,EAAQ,oBAAA;AAAA;AAAA,EAER,QAAA,EAAU;AACZ","file":"index.js","sourcesContent":["/**\n * Constants used across Chipi SDK packages\n */\n\nimport { WalletType } from \"@chipi-stack/types\";\n\n/**\n * API Versioning\n * - VERSION: Major version for path-based versioning (/v1, /v2, etc.)\n * - VERSION_DATE: Detailed version for tracking breaking changes (YYYY-MM-DD format)\n *\n * Update VERSION_DATE when making API changes.\n * Update VERSION when making major breaking changes (typically 1-2 times per year).\n */\nexport const API_VERSIONING = {\n VERSION: \"1\", // Major version - used in URL path\n VERSION_DATE: \"2025-12-30\", // Detailed version - sent as query param for tracking\n} as const;\n\nexport const STARKNET_NETWORKS = {\n MAINNET: \"https://starknet-mainnet.public.blastapi.io/rpc/v0_7\",\n SEPOLIA: \"https://starknet-sepolia.public.blastapi.io/rpc/v0_7\",\n} as const;\n\nexport const CONTRACT_ADDRESSES = {\n USDC_MAINNET:\n \"0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb\", // Changed to Native USDC (was bridged USDC.e)\n VESU_USDC_MAINNET:\n \"0x017f19582c61479f2fe0b6606300e975c0a8f439102f43eeecc1d0e9b3d84350\",\n} as const;\n\nexport const TOKEN_DECIMALS = {\n USDC: 6,\n USDT: 6,\n ETH: 18,\n STRK: 18,\n DAI: 18,\n} as const;\n\nexport const API_ENDPOINTS = {\n CHIPI_WALLETS: \"/chipi-wallets\",\n TRANSACTIONS: \"/transactions\",\n SKUS: \"/skus\",\n SKU_PURCHASES: \"/sku-purchases\",\n EXCHANGES: \"/exchanges\",\n USERS: \"/users\",\n} as const;\n\nexport const ERRORS = {\n INVALID_API_KEY: \"INVALID_API_KEY\",\n WALLET_NOT_FOUND: \"WALLET_NOT_FOUND\",\n INSUFFICIENT_BALANCE: \"INSUFFICIENT_BALANCE\",\n TRANSACTION_FAILED: \"TRANSACTION_FAILED\",\n INVALID_SIGNATURE: \"INVALID_SIGNATURE\",\n SKU_NOT_FOUND: \"SKU_NOT_FOUND\",\n SKU_UNAVAILABLE: \"SKU_UNAVAILABLE\",\n} as const;\n\nexport const SKU_CONTRACTS = {\n RECHARGER_WITH_STRK_MAINNET:\n \"0x02d65bb726d2c29e3c97669cf297c5145eac19284fb6f935c05c0bfc68dae2b7\", //changed contract address used to be 0x0f3\n CHIPI_BILL_SERVICE:\n \"0x4e8150110d580069de26adec9b179023289d55859ea07487aaade5458d7aa8b\",\n} as const;\n\n// Service types\nexport const SERVICE_TYPES = {\n BUY_SERVICE: \"BUY_SERVICE\",\n} as const;\n\n// Carrier IDs\nexport const CARRIER_IDS = {\n CHIPI_PAY: \"chipi_pay\",\n} as const;\n\nexport const CHAIN_TYPES = {\n STARKNET: \"STARKNET\",\n} as const;\n\nexport const CHAIN_TOKEN_TYPES = {\n USDC: \"USDC\", // Changed to Native USDC (was bridged USDC.e)\n USDT: \"USDT\",\n ETH: \"ETH\",\n STRK: \"STRK\",\n DAI: \"DAI\",\n WBTC: \"WBTC\",\n OTHER: \"OTHER\",\n} as const;\n\nexport const WALLET_CLASS_HASHES: Record<WalletType, string> = {\n CHIPI: \"0x53f4f8791ed5bed0fddaa553d180c664e32cfaf8316bb232ae77bb08f459f2a\",\n // CHIPI: \"0x2de1565226d5215a38b68c4d9a4913989b54edff64c68c45e453c417b44cd83\", // Old class Hash\n READY: \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n};\n\n// RPC endpoints per wallet type\nexport const WALLET_RPC_ENDPOINTS: Record<WalletType, string> = {\n CHIPI: \"https://starknet-mainnet.public.blastapi.io/rpc/v0_7\",\n READY: \"https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7\",\n};\n\n// Paymaster configuration\nexport const PAYMASTER_CONFIG = {\n URL: \"https://paymaster.chipipay.com\",\n} as const;\n\n// Session key configuration (CHIPI wallets only - SNIP-9 compatible)\nexport const SESSION_DEFAULTS = {\n /** Default session duration: 6 hours in seconds */\n DURATION_SECONDS: 21600,\n /** Default max calls per session */\n MAX_CALLS: 1000,\n} as const;\n\n// Session-specific error codes\nexport const SESSION_ERRORS = {\n /** Session keys only work with CHIPI wallets */\n INVALID_WALLET_TYPE_FOR_SESSION: \"INVALID_WALLET_TYPE_FOR_SESSION\",\n /** Session has expired (validUntil < now) */\n SESSION_EXPIRED: \"SESSION_EXPIRED\",\n /** Session key not registered on contract */\n SESSION_NOT_REGISTERED: \"SESSION_NOT_REGISTERED\",\n /** Session key has been revoked */\n SESSION_REVOKED: \"SESSION_REVOKED\",\n /** Session has exceeded max calls */\n SESSION_MAX_CALLS_EXCEEDED: \"SESSION_MAX_CALLS_EXCEEDED\",\n /** Entrypoint not allowed for this session */\n SESSION_ENTRYPOINT_NOT_ALLOWED: \"SESSION_ENTRYPOINT_NOT_ALLOWED\",\n /** Failed to decrypt session private key */\n SESSION_DECRYPTION_FAILED: \"SESSION_DECRYPTION_FAILED\",\n /** Failed to create session key */\n SESSION_CREATION_FAILED: \"SESSION_CREATION_FAILED\",\n} as const;\n\n// Session contract entrypoint names\nexport const SESSION_ENTRYPOINTS = {\n /** Add or update a session key (owner only) */\n ADD_OR_UPDATE: \"add_or_update_session_key\",\n /** Revoke a session key (owner only) */\n REVOKE: \"revoke_session_key\",\n /** Query session data (public read) */\n GET_DATA: \"get_session_data\",\n} as const;\n"]}
1
+ {"version":3,"sources":["../../src/constants/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Constants used across Chipi SDK packages\n */\n\nimport type { WalletType } from \"@chipi-stack/types\";\n\n/**\n * API Versioning\n * - VERSION: Major version for path-based versioning (/v1, /v2, etc.)\n * - VERSION_DATE: Detailed version for tracking breaking changes (YYYY-MM-DD format)\n *\n * Update VERSION_DATE when making API changes.\n * Update VERSION when making major breaking changes (typically 1-2 times per year).\n */\nexport const API_VERSIONING = {\n VERSION: \"1\", // Major version - used in URL path\n VERSION_DATE: \"2025-12-30\", // Detailed version - sent as query param for tracking\n} as const;\n\n// Default RPC URLs — override via STARKNET_RPC_URL / STARKNET_RPC_URL_SEPOLIA env vars.\nconst DEFAULT_MAINNET_RPC =\n \"https://starknet-mainnet.infura.io/v3/4a4a1fdd7d704509aa99154fb29886e2\";\nconst DEFAULT_SEPOLIA_RPC =\n \"https://starknet-sepolia.infura.io/v3/4a4a1fdd7d704509aa99154fb29886e2\";\n\nexport const STARKNET_NETWORKS = {\n MAINNET: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,\n MAINNET_FALLBACK: \"https://rpc.starknet.lava.build\",\n SEPOLIA: process.env.STARKNET_RPC_URL_SEPOLIA ?? DEFAULT_SEPOLIA_RPC,\n} as const;\n\nexport const CONTRACT_ADDRESSES = {\n USDC_MAINNET: \"0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb\", // Changed to Native USDC (was bridged USDC.e)\n VESU_USDC_MAINNET: \"0x017f19582c61479f2fe0b6606300e975c0a8f439102f43eeecc1d0e9b3d84350\",\n} as const;\n\nexport const TOKEN_DECIMALS = {\n USDC: 6,\n USDT: 6,\n ETH: 18,\n STRK: 18,\n DAI: 18,\n} as const;\n\nexport const API_ENDPOINTS = {\n CHIPI_WALLETS: \"/chipi-wallets\",\n TRANSACTIONS: \"/transactions\",\n SKUS: \"/skus\",\n SKU_PURCHASES: \"/sku-purchases\",\n EXCHANGES: \"/exchanges\",\n USERS: \"/users\",\n} as const;\n\nexport const ERRORS = {\n INVALID_API_KEY: \"INVALID_API_KEY\",\n WALLET_NOT_FOUND: \"WALLET_NOT_FOUND\",\n INSUFFICIENT_BALANCE: \"INSUFFICIENT_BALANCE\",\n TRANSACTION_FAILED: \"TRANSACTION_FAILED\",\n INVALID_SIGNATURE: \"INVALID_SIGNATURE\",\n SKU_NOT_FOUND: \"SKU_NOT_FOUND\",\n SKU_UNAVAILABLE: \"SKU_UNAVAILABLE\",\n} as const;\n\nexport const SKU_CONTRACTS = {\n RECHARGER_WITH_STRK_MAINNET: \"0x02d65bb726d2c29e3c97669cf297c5145eac19284fb6f935c05c0bfc68dae2b7\", //changed contract address used to be 0x0f3\n CHIPI_BILL_SERVICE: \"0x4e8150110d580069de26adec9b179023289d55859ea07487aaade5458d7aa8b\",\n} as const;\n\n// Service types\nexport const SERVICE_TYPES = {\n BUY_SERVICE: \"BUY_SERVICE\",\n} as const;\n\n// Carrier IDs\nexport const CARRIER_IDS = {\n CHIPI_PAY: \"chipi_pay\",\n} as const;\n\nexport const CHAIN_TYPES = {\n STARKNET: \"STARKNET\",\n} as const;\n\nexport const CHAIN_TOKEN_TYPES = {\n USDC: \"USDC\", // Changed to Native USDC (was bridged USDC.e)\n USDT: \"USDT\",\n ETH: \"ETH\",\n STRK: \"STRK\",\n DAI: \"DAI\",\n WBTC: \"WBTC\",\n OTHER: \"OTHER\",\n} as const;\n\nexport const WALLET_CLASS_HASHES: Record<string, string> = {\n CHIPI: \"0x053f4f8791ed5bed0fddaa553d180c664e32cfaf8316bb232ae77bb08f459f2a\", // v29 — must match backend until coordinated v33 upgrade\n READY: \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n};\n\n/**\n * Previous CHIPI wallet class hashes that are still deployed on-chain.\n * Used by getWalletTypeFromClassHash() to identify legacy wallets.\n * Ordered newest → oldest.\n */\nexport const LEGACY_CHIPI_CLASS_HASHES: string[] = [\n \"0x0484bbd2404b3c7264bea271f7267d6d4004821ac7787a9eed7f472e79ef40d1\", // v33 — wallets created during brief v33 window\n \"0x035a2251aca25daba18a5d8950deffa8372a7d84774554e75283cb85552eebc9\", // v32 — audit 3\n \"0x0254f6dd0427319ec614c29e4e3929500d1ba95d0da87ff81d67051ce572667\", // v31\n \"0x072b77b033a874fa1b8f7ff52e18be8fb5ce01a00c59cd184ae15f5b29bc0e57\", // v30\n \"0x02de1565226d5215a38b68c4d9a4913989b54edff64c68c45e453c417b44cd83\", // v28\n];\n\n/**\n * Determine wallet type from an on-chain class hash.\n * - If it matches the READY hash → READY\n * - If it matches the current CHIPI hash → CHIPI\n * - If it matches a legacy CHIPI hash → CHIPI\n * - Otherwise → null (unknown class hash, caller should handle accordingly)\n */\nexport function getWalletTypeFromClassHash(classHash: string): WalletType | null {\n const normalized = classHash.toLowerCase().replace(/^0x0+/, \"0x\");\n const normalize = (h: string) => h.toLowerCase().replace(/^0x0+/, \"0x\");\n\n if (normalize(WALLET_CLASS_HASHES.READY) === normalized) {\n return \"READY\";\n }\n // Current or legacy CHIPI hashes\n if (normalize(WALLET_CLASS_HASHES.CHIPI) === normalized) {\n return \"CHIPI\";\n }\n if (LEGACY_CHIPI_CLASS_HASHES.some((h) => normalize(h) === normalized)) {\n return \"CHIPI\";\n }\n // Unknown class hash — return null so callers can handle explicitly\n return null;\n}\n\n// RPC endpoints per wallet type — any standard Starknet RPC works for all wallet types.\n// Override via STARKNET_RPC_URL env var; falls back to the default Infura endpoint.\nexport const WALLET_RPC_ENDPOINTS: Record<string, string> = {\n CHIPI: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,\n READY: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,\n};\n\n// Paymaster configuration\nexport const PAYMASTER_CONFIG = {\n URL: \"https://paymaster.chipipay.com\",\n} as const;\n\n// Session key configuration (CHIPI wallets only - SNIP-9 compatible)\nexport const SESSION_DEFAULTS = {\n /** Default session duration: 6 hours in seconds */\n DURATION_SECONDS: 21600,\n /** Default max calls per session */\n MAX_CALLS: 1000,\n} as const;\n\n// Session-specific error codes\nexport const SESSION_ERRORS = {\n /** Session keys only work with CHIPI wallets */\n INVALID_WALLET_TYPE_FOR_SESSION: \"INVALID_WALLET_TYPE_FOR_SESSION\",\n /** Session has expired (validUntil < now) */\n SESSION_EXPIRED: \"SESSION_EXPIRED\",\n /** Session key not registered on contract */\n SESSION_NOT_REGISTERED: \"SESSION_NOT_REGISTERED\",\n /** Session key has been revoked */\n SESSION_REVOKED: \"SESSION_REVOKED\",\n /** Session has exceeded max calls */\n SESSION_MAX_CALLS_EXCEEDED: \"SESSION_MAX_CALLS_EXCEEDED\",\n /** Entrypoint not allowed for this session */\n SESSION_ENTRYPOINT_NOT_ALLOWED: \"SESSION_ENTRYPOINT_NOT_ALLOWED\",\n /** Failed to decrypt session private key */\n SESSION_DECRYPTION_FAILED: \"SESSION_DECRYPTION_FAILED\",\n /** Failed to create session key */\n SESSION_CREATION_FAILED: \"SESSION_CREATION_FAILED\",\n /** Backend returned an invalid response shape */\n SESSION_INVALID_RESPONSE: \"SESSION_INVALID_RESPONSE\",\n} as const;\n\n// Session contract entrypoint names\nexport const SESSION_ENTRYPOINTS = {\n /** Add or update a session key (owner only) */\n ADD_OR_UPDATE: \"add_or_update_session_key\",\n /** Revoke a session key (owner only) */\n REVOKE: \"revoke_session_key\",\n /** Query session data (public read) */\n GET_DATA: \"get_session_data\",\n} as const;\n"]}
@@ -5,9 +5,12 @@ var API_VERSIONING = {
5
5
  VERSION_DATE: "2025-12-30"
6
6
  // Detailed version - sent as query param for tracking
7
7
  };
8
+ var DEFAULT_MAINNET_RPC = "https://starknet-mainnet.infura.io/v3/4a4a1fdd7d704509aa99154fb29886e2";
9
+ var DEFAULT_SEPOLIA_RPC = "https://starknet-sepolia.infura.io/v3/4a4a1fdd7d704509aa99154fb29886e2";
8
10
  var STARKNET_NETWORKS = {
9
- MAINNET: "https://starknet-mainnet.public.blastapi.io/rpc/v0_7",
10
- SEPOLIA: "https://starknet-sepolia.public.blastapi.io/rpc/v0_7"
11
+ MAINNET: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,
12
+ MAINNET_FALLBACK: "https://rpc.starknet.lava.build",
13
+ SEPOLIA: process.env.STARKNET_RPC_URL_SEPOLIA ?? DEFAULT_SEPOLIA_RPC
11
14
  };
12
15
  var CONTRACT_ADDRESSES = {
13
16
  USDC_MAINNET: "0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb",
@@ -63,13 +66,39 @@ var CHAIN_TOKEN_TYPES = {
63
66
  OTHER: "OTHER"
64
67
  };
65
68
  var WALLET_CLASS_HASHES = {
66
- CHIPI: "0x53f4f8791ed5bed0fddaa553d180c664e32cfaf8316bb232ae77bb08f459f2a",
67
- // CHIPI: "0x2de1565226d5215a38b68c4d9a4913989b54edff64c68c45e453c417b44cd83", // Old class Hash
69
+ CHIPI: "0x053f4f8791ed5bed0fddaa553d180c664e32cfaf8316bb232ae77bb08f459f2a",
70
+ // v29 — must match backend until coordinated v33 upgrade
68
71
  READY: "0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f"
69
72
  };
73
+ var LEGACY_CHIPI_CLASS_HASHES = [
74
+ "0x0484bbd2404b3c7264bea271f7267d6d4004821ac7787a9eed7f472e79ef40d1",
75
+ // v33 — wallets created during brief v33 window
76
+ "0x035a2251aca25daba18a5d8950deffa8372a7d84774554e75283cb85552eebc9",
77
+ // v32 — audit 3
78
+ "0x0254f6dd0427319ec614c29e4e3929500d1ba95d0da87ff81d67051ce572667",
79
+ // v31
80
+ "0x072b77b033a874fa1b8f7ff52e18be8fb5ce01a00c59cd184ae15f5b29bc0e57",
81
+ // v30
82
+ "0x02de1565226d5215a38b68c4d9a4913989b54edff64c68c45e453c417b44cd83"
83
+ // v28
84
+ ];
85
+ function getWalletTypeFromClassHash(classHash) {
86
+ const normalized = classHash.toLowerCase().replace(/^0x0+/, "0x");
87
+ const normalize = (h) => h.toLowerCase().replace(/^0x0+/, "0x");
88
+ if (normalize(WALLET_CLASS_HASHES.READY) === normalized) {
89
+ return "READY";
90
+ }
91
+ if (normalize(WALLET_CLASS_HASHES.CHIPI) === normalized) {
92
+ return "CHIPI";
93
+ }
94
+ if (LEGACY_CHIPI_CLASS_HASHES.some((h) => normalize(h) === normalized)) {
95
+ return "CHIPI";
96
+ }
97
+ return null;
98
+ }
70
99
  var WALLET_RPC_ENDPOINTS = {
71
- CHIPI: "https://starknet-mainnet.public.blastapi.io/rpc/v0_7",
72
- READY: "https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7"
100
+ CHIPI: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,
101
+ READY: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC
73
102
  };
74
103
  var PAYMASTER_CONFIG = {
75
104
  URL: "https://paymaster.chipipay.com"
@@ -96,7 +125,9 @@ var SESSION_ERRORS = {
96
125
  /** Failed to decrypt session private key */
97
126
  SESSION_DECRYPTION_FAILED: "SESSION_DECRYPTION_FAILED",
98
127
  /** Failed to create session key */
99
- SESSION_CREATION_FAILED: "SESSION_CREATION_FAILED"
128
+ SESSION_CREATION_FAILED: "SESSION_CREATION_FAILED",
129
+ /** Backend returned an invalid response shape */
130
+ SESSION_INVALID_RESPONSE: "SESSION_INVALID_RESPONSE"
100
131
  };
101
132
  var SESSION_ENTRYPOINTS = {
102
133
  /** Add or update a session key (owner only) */
@@ -107,6 +138,6 @@ var SESSION_ENTRYPOINTS = {
107
138
  GET_DATA: "get_session_data"
108
139
  };
109
140
 
110
- export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS };
141
+ export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, LEGACY_CHIPI_CLASS_HASHES, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS, getWalletTypeFromClassHash };
111
142
  //# sourceMappingURL=index.mjs.map
112
143
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/constants/index.ts"],"names":[],"mappings":";AAcO,IAAM,cAAA,GAAiB;AAAA,EAC5B,OAAA,EAAS,GAAA;AAAA;AAAA,EACT,YAAA,EAAc;AAAA;AAChB;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,OAAA,EAAS,sDAAA;AAAA,EACT,OAAA,EAAS;AACX;AAEO,IAAM,kBAAA,GAAqB;AAAA,EAChC,YAAA,EACE,oEAAA;AAAA;AAAA,EACF,iBAAA,EACE;AACJ;AAEO,IAAM,cAAA,GAAiB;AAAA,EAC5B,IAAA,EAAM,CAAA;AAAA,EACN,IAAA,EAAM,CAAA;AAAA,EACN,GAAA,EAAK,EAAA;AAAA,EACL,IAAA,EAAM,EAAA;AAAA,EACN,GAAA,EAAK;AACP;AAEO,IAAM,aAAA,GAAgB;AAAA,EAC3B,aAAA,EAAe,gBAAA;AAAA,EACf,YAAA,EAAc,eAAA;AAAA,EACd,IAAA,EAAM,OAAA;AAAA,EACN,aAAA,EAAe,gBAAA;AAAA,EACf,SAAA,EAAW,YAAA;AAAA,EACX,KAAA,EAAO;AACT;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,eAAA,EAAiB,iBAAA;AAAA,EACjB,gBAAA,EAAkB,kBAAA;AAAA,EAClB,oBAAA,EAAsB,sBAAA;AAAA,EACtB,kBAAA,EAAoB,oBAAA;AAAA,EACpB,iBAAA,EAAmB,mBAAA;AAAA,EACnB,aAAA,EAAe,eAAA;AAAA,EACf,eAAA,EAAiB;AACnB;AAEO,IAAM,aAAA,GAAgB;AAAA,EAC3B,2BAAA,EACE,oEAAA;AAAA;AAAA,EACF,kBAAA,EACE;AACJ;AAGO,IAAM,aAAA,GAAgB;AAAA,EAC3B,WAAA,EAAa;AACf;AAGO,IAAM,WAAA,GAAc;AAAA,EACzB,SAAA,EAAW;AACb;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,QAAA,EAAU;AACZ;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,IAAA,EAAM,MAAA;AAAA;AAAA,EACN,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,GAAA,EAAK,KAAA;AAAA,EACL,IAAA,EAAM,MAAA;AAAA,EACN,KAAA,EAAO;AACT;AAEO,IAAM,mBAAA,GAAkD;AAAA,EAC7D,KAAA,EAAO,mEAAA;AAAA;AAAA,EAEP,KAAA,EAAO;AACT;AAGO,IAAM,oBAAA,GAAmD;AAAA,EAC9D,KAAA,EAAO,sDAAA;AAAA,EACP,KAAA,EAAO;AACT;AAGO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,GAAA,EAAK;AACP;AAGO,IAAM,gBAAA,GAAmB;AAAA;AAAA,EAE9B,gBAAA,EAAkB,KAAA;AAAA;AAAA,EAElB,SAAA,EAAW;AACb;AAGO,IAAM,cAAA,GAAiB;AAAA;AAAA,EAE5B,+BAAA,EAAiC,iCAAA;AAAA;AAAA,EAEjC,eAAA,EAAiB,iBAAA;AAAA;AAAA,EAEjB,sBAAA,EAAwB,wBAAA;AAAA;AAAA,EAExB,eAAA,EAAiB,iBAAA;AAAA;AAAA,EAEjB,0BAAA,EAA4B,4BAAA;AAAA;AAAA,EAE5B,8BAAA,EAAgC,gCAAA;AAAA;AAAA,EAEhC,yBAAA,EAA2B,2BAAA;AAAA;AAAA,EAE3B,uBAAA,EAAyB;AAC3B;AAGO,IAAM,mBAAA,GAAsB;AAAA;AAAA,EAEjC,aAAA,EAAe,2BAAA;AAAA;AAAA,EAEf,MAAA,EAAQ,oBAAA;AAAA;AAAA,EAER,QAAA,EAAU;AACZ","file":"index.mjs","sourcesContent":["/**\n * Constants used across Chipi SDK packages\n */\n\nimport { WalletType } from \"@chipi-stack/types\";\n\n/**\n * API Versioning\n * - VERSION: Major version for path-based versioning (/v1, /v2, etc.)\n * - VERSION_DATE: Detailed version for tracking breaking changes (YYYY-MM-DD format)\n *\n * Update VERSION_DATE when making API changes.\n * Update VERSION when making major breaking changes (typically 1-2 times per year).\n */\nexport const API_VERSIONING = {\n VERSION: \"1\", // Major version - used in URL path\n VERSION_DATE: \"2025-12-30\", // Detailed version - sent as query param for tracking\n} as const;\n\nexport const STARKNET_NETWORKS = {\n MAINNET: \"https://starknet-mainnet.public.blastapi.io/rpc/v0_7\",\n SEPOLIA: \"https://starknet-sepolia.public.blastapi.io/rpc/v0_7\",\n} as const;\n\nexport const CONTRACT_ADDRESSES = {\n USDC_MAINNET:\n \"0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb\", // Changed to Native USDC (was bridged USDC.e)\n VESU_USDC_MAINNET:\n \"0x017f19582c61479f2fe0b6606300e975c0a8f439102f43eeecc1d0e9b3d84350\",\n} as const;\n\nexport const TOKEN_DECIMALS = {\n USDC: 6,\n USDT: 6,\n ETH: 18,\n STRK: 18,\n DAI: 18,\n} as const;\n\nexport const API_ENDPOINTS = {\n CHIPI_WALLETS: \"/chipi-wallets\",\n TRANSACTIONS: \"/transactions\",\n SKUS: \"/skus\",\n SKU_PURCHASES: \"/sku-purchases\",\n EXCHANGES: \"/exchanges\",\n USERS: \"/users\",\n} as const;\n\nexport const ERRORS = {\n INVALID_API_KEY: \"INVALID_API_KEY\",\n WALLET_NOT_FOUND: \"WALLET_NOT_FOUND\",\n INSUFFICIENT_BALANCE: \"INSUFFICIENT_BALANCE\",\n TRANSACTION_FAILED: \"TRANSACTION_FAILED\",\n INVALID_SIGNATURE: \"INVALID_SIGNATURE\",\n SKU_NOT_FOUND: \"SKU_NOT_FOUND\",\n SKU_UNAVAILABLE: \"SKU_UNAVAILABLE\",\n} as const;\n\nexport const SKU_CONTRACTS = {\n RECHARGER_WITH_STRK_MAINNET:\n \"0x02d65bb726d2c29e3c97669cf297c5145eac19284fb6f935c05c0bfc68dae2b7\", //changed contract address used to be 0x0f3\n CHIPI_BILL_SERVICE:\n \"0x4e8150110d580069de26adec9b179023289d55859ea07487aaade5458d7aa8b\",\n} as const;\n\n// Service types\nexport const SERVICE_TYPES = {\n BUY_SERVICE: \"BUY_SERVICE\",\n} as const;\n\n// Carrier IDs\nexport const CARRIER_IDS = {\n CHIPI_PAY: \"chipi_pay\",\n} as const;\n\nexport const CHAIN_TYPES = {\n STARKNET: \"STARKNET\",\n} as const;\n\nexport const CHAIN_TOKEN_TYPES = {\n USDC: \"USDC\", // Changed to Native USDC (was bridged USDC.e)\n USDT: \"USDT\",\n ETH: \"ETH\",\n STRK: \"STRK\",\n DAI: \"DAI\",\n WBTC: \"WBTC\",\n OTHER: \"OTHER\",\n} as const;\n\nexport const WALLET_CLASS_HASHES: Record<WalletType, string> = {\n CHIPI: \"0x53f4f8791ed5bed0fddaa553d180c664e32cfaf8316bb232ae77bb08f459f2a\",\n // CHIPI: \"0x2de1565226d5215a38b68c4d9a4913989b54edff64c68c45e453c417b44cd83\", // Old class Hash\n READY: \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n};\n\n// RPC endpoints per wallet type\nexport const WALLET_RPC_ENDPOINTS: Record<WalletType, string> = {\n CHIPI: \"https://starknet-mainnet.public.blastapi.io/rpc/v0_7\",\n READY: \"https://cloud.argent-api.com/v1/starknet/mainnet/rpc/v0.7\",\n};\n\n// Paymaster configuration\nexport const PAYMASTER_CONFIG = {\n URL: \"https://paymaster.chipipay.com\",\n} as const;\n\n// Session key configuration (CHIPI wallets only - SNIP-9 compatible)\nexport const SESSION_DEFAULTS = {\n /** Default session duration: 6 hours in seconds */\n DURATION_SECONDS: 21600,\n /** Default max calls per session */\n MAX_CALLS: 1000,\n} as const;\n\n// Session-specific error codes\nexport const SESSION_ERRORS = {\n /** Session keys only work with CHIPI wallets */\n INVALID_WALLET_TYPE_FOR_SESSION: \"INVALID_WALLET_TYPE_FOR_SESSION\",\n /** Session has expired (validUntil < now) */\n SESSION_EXPIRED: \"SESSION_EXPIRED\",\n /** Session key not registered on contract */\n SESSION_NOT_REGISTERED: \"SESSION_NOT_REGISTERED\",\n /** Session key has been revoked */\n SESSION_REVOKED: \"SESSION_REVOKED\",\n /** Session has exceeded max calls */\n SESSION_MAX_CALLS_EXCEEDED: \"SESSION_MAX_CALLS_EXCEEDED\",\n /** Entrypoint not allowed for this session */\n SESSION_ENTRYPOINT_NOT_ALLOWED: \"SESSION_ENTRYPOINT_NOT_ALLOWED\",\n /** Failed to decrypt session private key */\n SESSION_DECRYPTION_FAILED: \"SESSION_DECRYPTION_FAILED\",\n /** Failed to create session key */\n SESSION_CREATION_FAILED: \"SESSION_CREATION_FAILED\",\n} as const;\n\n// Session contract entrypoint names\nexport const SESSION_ENTRYPOINTS = {\n /** Add or update a session key (owner only) */\n ADD_OR_UPDATE: \"add_or_update_session_key\",\n /** Revoke a session key (owner only) */\n REVOKE: \"revoke_session_key\",\n /** Query session data (public read) */\n GET_DATA: \"get_session_data\",\n} as const;\n"]}
1
+ {"version":3,"sources":["../../src/constants/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Constants used across Chipi SDK packages\n */\n\nimport type { WalletType } from \"@chipi-stack/types\";\n\n/**\n * API Versioning\n * - VERSION: Major version for path-based versioning (/v1, /v2, etc.)\n * - VERSION_DATE: Detailed version for tracking breaking changes (YYYY-MM-DD format)\n *\n * Update VERSION_DATE when making API changes.\n * Update VERSION when making major breaking changes (typically 1-2 times per year).\n */\nexport const API_VERSIONING = {\n VERSION: \"1\", // Major version - used in URL path\n VERSION_DATE: \"2025-12-30\", // Detailed version - sent as query param for tracking\n} as const;\n\n// Default RPC URLs — override via STARKNET_RPC_URL / STARKNET_RPC_URL_SEPOLIA env vars.\nconst DEFAULT_MAINNET_RPC =\n \"https://starknet-mainnet.infura.io/v3/4a4a1fdd7d704509aa99154fb29886e2\";\nconst DEFAULT_SEPOLIA_RPC =\n \"https://starknet-sepolia.infura.io/v3/4a4a1fdd7d704509aa99154fb29886e2\";\n\nexport const STARKNET_NETWORKS = {\n MAINNET: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,\n MAINNET_FALLBACK: \"https://rpc.starknet.lava.build\",\n SEPOLIA: process.env.STARKNET_RPC_URL_SEPOLIA ?? DEFAULT_SEPOLIA_RPC,\n} as const;\n\nexport const CONTRACT_ADDRESSES = {\n USDC_MAINNET: \"0x033068F6539f8e6e6b131e6B2B814e6c34A5224bC66947c47DaB9dFeE93b35fb\", // Changed to Native USDC (was bridged USDC.e)\n VESU_USDC_MAINNET: \"0x017f19582c61479f2fe0b6606300e975c0a8f439102f43eeecc1d0e9b3d84350\",\n} as const;\n\nexport const TOKEN_DECIMALS = {\n USDC: 6,\n USDT: 6,\n ETH: 18,\n STRK: 18,\n DAI: 18,\n} as const;\n\nexport const API_ENDPOINTS = {\n CHIPI_WALLETS: \"/chipi-wallets\",\n TRANSACTIONS: \"/transactions\",\n SKUS: \"/skus\",\n SKU_PURCHASES: \"/sku-purchases\",\n EXCHANGES: \"/exchanges\",\n USERS: \"/users\",\n} as const;\n\nexport const ERRORS = {\n INVALID_API_KEY: \"INVALID_API_KEY\",\n WALLET_NOT_FOUND: \"WALLET_NOT_FOUND\",\n INSUFFICIENT_BALANCE: \"INSUFFICIENT_BALANCE\",\n TRANSACTION_FAILED: \"TRANSACTION_FAILED\",\n INVALID_SIGNATURE: \"INVALID_SIGNATURE\",\n SKU_NOT_FOUND: \"SKU_NOT_FOUND\",\n SKU_UNAVAILABLE: \"SKU_UNAVAILABLE\",\n} as const;\n\nexport const SKU_CONTRACTS = {\n RECHARGER_WITH_STRK_MAINNET: \"0x02d65bb726d2c29e3c97669cf297c5145eac19284fb6f935c05c0bfc68dae2b7\", //changed contract address used to be 0x0f3\n CHIPI_BILL_SERVICE: \"0x4e8150110d580069de26adec9b179023289d55859ea07487aaade5458d7aa8b\",\n} as const;\n\n// Service types\nexport const SERVICE_TYPES = {\n BUY_SERVICE: \"BUY_SERVICE\",\n} as const;\n\n// Carrier IDs\nexport const CARRIER_IDS = {\n CHIPI_PAY: \"chipi_pay\",\n} as const;\n\nexport const CHAIN_TYPES = {\n STARKNET: \"STARKNET\",\n} as const;\n\nexport const CHAIN_TOKEN_TYPES = {\n USDC: \"USDC\", // Changed to Native USDC (was bridged USDC.e)\n USDT: \"USDT\",\n ETH: \"ETH\",\n STRK: \"STRK\",\n DAI: \"DAI\",\n WBTC: \"WBTC\",\n OTHER: \"OTHER\",\n} as const;\n\nexport const WALLET_CLASS_HASHES: Record<string, string> = {\n CHIPI: \"0x053f4f8791ed5bed0fddaa553d180c664e32cfaf8316bb232ae77bb08f459f2a\", // v29 — must match backend until coordinated v33 upgrade\n READY: \"0x036078334509b514626504edc9fb252328d1a240e4e948bef8d0c08dff45927f\",\n};\n\n/**\n * Previous CHIPI wallet class hashes that are still deployed on-chain.\n * Used by getWalletTypeFromClassHash() to identify legacy wallets.\n * Ordered newest → oldest.\n */\nexport const LEGACY_CHIPI_CLASS_HASHES: string[] = [\n \"0x0484bbd2404b3c7264bea271f7267d6d4004821ac7787a9eed7f472e79ef40d1\", // v33 — wallets created during brief v33 window\n \"0x035a2251aca25daba18a5d8950deffa8372a7d84774554e75283cb85552eebc9\", // v32 — audit 3\n \"0x0254f6dd0427319ec614c29e4e3929500d1ba95d0da87ff81d67051ce572667\", // v31\n \"0x072b77b033a874fa1b8f7ff52e18be8fb5ce01a00c59cd184ae15f5b29bc0e57\", // v30\n \"0x02de1565226d5215a38b68c4d9a4913989b54edff64c68c45e453c417b44cd83\", // v28\n];\n\n/**\n * Determine wallet type from an on-chain class hash.\n * - If it matches the READY hash → READY\n * - If it matches the current CHIPI hash → CHIPI\n * - If it matches a legacy CHIPI hash → CHIPI\n * - Otherwise → null (unknown class hash, caller should handle accordingly)\n */\nexport function getWalletTypeFromClassHash(classHash: string): WalletType | null {\n const normalized = classHash.toLowerCase().replace(/^0x0+/, \"0x\");\n const normalize = (h: string) => h.toLowerCase().replace(/^0x0+/, \"0x\");\n\n if (normalize(WALLET_CLASS_HASHES.READY) === normalized) {\n return \"READY\";\n }\n // Current or legacy CHIPI hashes\n if (normalize(WALLET_CLASS_HASHES.CHIPI) === normalized) {\n return \"CHIPI\";\n }\n if (LEGACY_CHIPI_CLASS_HASHES.some((h) => normalize(h) === normalized)) {\n return \"CHIPI\";\n }\n // Unknown class hash — return null so callers can handle explicitly\n return null;\n}\n\n// RPC endpoints per wallet type — any standard Starknet RPC works for all wallet types.\n// Override via STARKNET_RPC_URL env var; falls back to the default Infura endpoint.\nexport const WALLET_RPC_ENDPOINTS: Record<string, string> = {\n CHIPI: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,\n READY: process.env.STARKNET_RPC_URL ?? DEFAULT_MAINNET_RPC,\n};\n\n// Paymaster configuration\nexport const PAYMASTER_CONFIG = {\n URL: \"https://paymaster.chipipay.com\",\n} as const;\n\n// Session key configuration (CHIPI wallets only - SNIP-9 compatible)\nexport const SESSION_DEFAULTS = {\n /** Default session duration: 6 hours in seconds */\n DURATION_SECONDS: 21600,\n /** Default max calls per session */\n MAX_CALLS: 1000,\n} as const;\n\n// Session-specific error codes\nexport const SESSION_ERRORS = {\n /** Session keys only work with CHIPI wallets */\n INVALID_WALLET_TYPE_FOR_SESSION: \"INVALID_WALLET_TYPE_FOR_SESSION\",\n /** Session has expired (validUntil < now) */\n SESSION_EXPIRED: \"SESSION_EXPIRED\",\n /** Session key not registered on contract */\n SESSION_NOT_REGISTERED: \"SESSION_NOT_REGISTERED\",\n /** Session key has been revoked */\n SESSION_REVOKED: \"SESSION_REVOKED\",\n /** Session has exceeded max calls */\n SESSION_MAX_CALLS_EXCEEDED: \"SESSION_MAX_CALLS_EXCEEDED\",\n /** Entrypoint not allowed for this session */\n SESSION_ENTRYPOINT_NOT_ALLOWED: \"SESSION_ENTRYPOINT_NOT_ALLOWED\",\n /** Failed to decrypt session private key */\n SESSION_DECRYPTION_FAILED: \"SESSION_DECRYPTION_FAILED\",\n /** Failed to create session key */\n SESSION_CREATION_FAILED: \"SESSION_CREATION_FAILED\",\n /** Backend returned an invalid response shape */\n SESSION_INVALID_RESPONSE: \"SESSION_INVALID_RESPONSE\",\n} as const;\n\n// Session contract entrypoint names\nexport const SESSION_ENTRYPOINTS = {\n /** Add or update a session key (owner only) */\n ADD_OR_UPDATE: \"add_or_update_session_key\",\n /** Revoke a session key (owner only) */\n REVOKE: \"revoke_session_key\",\n /** Query session data (public read) */\n GET_DATA: \"get_session_data\",\n} as const;\n"]}
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { createPaginatedResponse, deepMerge, formatAmount, isValidAddress, isValidApiKey, parseAmount, retry, sanitizeUrl, sleep, validatePagination } from './utils/index.mjs';
2
- export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS } from './constants/index.mjs';
2
+ export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, LEGACY_CHIPI_CLASS_HASHES, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS, getWalletTypeFromClassHash } from './constants/index.mjs';
3
3
  import { ErrorWithCode } from '@chipi-stack/types';
4
4
  import { z } from 'zod';
5
5
 
@@ -32,7 +32,24 @@ declare class ChipiValidationError extends ChipiError {
32
32
  declare class ChipiAuthError extends ChipiError {
33
33
  constructor(message: string, code?: string);
34
34
  }
35
- declare function isChipiError(error: any): error is ChipiError;
35
+ declare class WalletNotCompatibleError extends ChipiWalletError {
36
+ constructor(message: string);
37
+ }
38
+ declare class WalletClassHashNotFoundError extends ChipiWalletError {
39
+ constructor(walletType: string);
40
+ }
41
+ declare class PaymasterIncompatibleError extends ChipiError {
42
+ constructor(classHash: string);
43
+ }
44
+ declare function isChipiError(error: unknown): error is ChipiError;
45
+ /**
46
+ * Type guard to check if an error has an HTTP status property.
47
+ * Useful for retry logic where you need to distinguish API errors
48
+ * (which have status codes) from network errors (which don't).
49
+ */
50
+ declare function hasHttpStatus(error: unknown): error is {
51
+ status: number;
52
+ };
36
53
  declare function handleApiError(error: any): ChipiError;
37
54
 
38
55
  /**
@@ -46,8 +63,8 @@ declare function formatNumber(value: number, options?: {
46
63
  }): string;
47
64
  declare function formatDate(date: Date | string, options?: {
48
65
  locale?: string;
49
- dateStyle?: 'full' | 'long' | 'medium' | 'short';
50
- timeStyle?: 'full' | 'long' | 'medium' | 'short';
66
+ dateStyle?: "full" | "long" | "medium" | "short";
67
+ timeStyle?: "full" | "long" | "medium" | "short";
51
68
  }): string;
52
69
  declare function formatAddress(address: string, length?: number): string;
53
70
  declare function formatTransactionHash(hash: string): string;
@@ -66,11 +83,17 @@ declare const ErrorResponseSchema: z.ZodObject<{
66
83
  status: z.ZodOptional<z.ZodNumber>;
67
84
  }, z.core.$strip>;
68
85
  declare const SuccessResponseSchema: <T extends z.ZodTypeAny>(dataSchema: T) => z.ZodObject<{
86
+ message: z.ZodOptional<z.ZodString>;
87
+ code: z.ZodOptional<z.ZodString>;
69
88
  data: T;
70
89
  }, z.core.$strip>;
71
- type ApiResponse<T> = z.infer<ReturnType<typeof SuccessResponseSchema<z.ZodType<T>>>>;
90
+ type ApiResponse<T> = {
91
+ data: T;
92
+ message?: string;
93
+ code?: string;
94
+ };
72
95
  type ErrorResponse = z.infer<typeof ErrorResponseSchema>;
73
96
  declare function validateApiResponse<T>(response: unknown, dataSchema: z.ZodType<T>): void;
74
97
  declare function validateErrorResponse(response: unknown): ErrorResponse;
75
98
 
76
- export { type ApiResponse, ApiResponseSchema, ChipiApiError, ChipiAuthError, ChipiError, ChipiSessionError, ChipiSkuError, ChipiTransactionError, ChipiValidationError, ChipiWalletError, type ErrorResponse, ErrorResponseSchema, SuccessResponseSchema, camelToSnake, capitalizeFirst, formatAddress, formatCurrency, formatDate, formatNumber, formatTransactionHash, handleApiError, isChipiError, snakeToCamel, validateApiResponse, validateErrorResponse };
99
+ export { type ApiResponse, ApiResponseSchema, ChipiApiError, ChipiAuthError, ChipiError, ChipiSessionError, ChipiSkuError, ChipiTransactionError, ChipiValidationError, ChipiWalletError, type ErrorResponse, ErrorResponseSchema, PaymasterIncompatibleError, SuccessResponseSchema, WalletClassHashNotFoundError, WalletNotCompatibleError, camelToSnake, capitalizeFirst, formatAddress, formatCurrency, formatDate, formatNumber, formatTransactionHash, handleApiError, hasHttpStatus, isChipiError, snakeToCamel, validateApiResponse, validateErrorResponse };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export { createPaginatedResponse, deepMerge, formatAmount, isValidAddress, isValidApiKey, parseAmount, retry, sanitizeUrl, sleep, validatePagination } from './utils/index.js';
2
- export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS } from './constants/index.js';
2
+ export { API_ENDPOINTS, API_VERSIONING, CARRIER_IDS, CHAIN_TOKEN_TYPES, CHAIN_TYPES, CONTRACT_ADDRESSES, ERRORS, LEGACY_CHIPI_CLASS_HASHES, PAYMASTER_CONFIG, SERVICE_TYPES, SESSION_DEFAULTS, SESSION_ENTRYPOINTS, SESSION_ERRORS, SKU_CONTRACTS, STARKNET_NETWORKS, TOKEN_DECIMALS, WALLET_CLASS_HASHES, WALLET_RPC_ENDPOINTS, getWalletTypeFromClassHash } from './constants/index.js';
3
3
  import { ErrorWithCode } from '@chipi-stack/types';
4
4
  import { z } from 'zod';
5
5
 
@@ -32,7 +32,24 @@ declare class ChipiValidationError extends ChipiError {
32
32
  declare class ChipiAuthError extends ChipiError {
33
33
  constructor(message: string, code?: string);
34
34
  }
35
- declare function isChipiError(error: any): error is ChipiError;
35
+ declare class WalletNotCompatibleError extends ChipiWalletError {
36
+ constructor(message: string);
37
+ }
38
+ declare class WalletClassHashNotFoundError extends ChipiWalletError {
39
+ constructor(walletType: string);
40
+ }
41
+ declare class PaymasterIncompatibleError extends ChipiError {
42
+ constructor(classHash: string);
43
+ }
44
+ declare function isChipiError(error: unknown): error is ChipiError;
45
+ /**
46
+ * Type guard to check if an error has an HTTP status property.
47
+ * Useful for retry logic where you need to distinguish API errors
48
+ * (which have status codes) from network errors (which don't).
49
+ */
50
+ declare function hasHttpStatus(error: unknown): error is {
51
+ status: number;
52
+ };
36
53
  declare function handleApiError(error: any): ChipiError;
37
54
 
38
55
  /**
@@ -46,8 +63,8 @@ declare function formatNumber(value: number, options?: {
46
63
  }): string;
47
64
  declare function formatDate(date: Date | string, options?: {
48
65
  locale?: string;
49
- dateStyle?: 'full' | 'long' | 'medium' | 'short';
50
- timeStyle?: 'full' | 'long' | 'medium' | 'short';
66
+ dateStyle?: "full" | "long" | "medium" | "short";
67
+ timeStyle?: "full" | "long" | "medium" | "short";
51
68
  }): string;
52
69
  declare function formatAddress(address: string, length?: number): string;
53
70
  declare function formatTransactionHash(hash: string): string;
@@ -66,11 +83,17 @@ declare const ErrorResponseSchema: z.ZodObject<{
66
83
  status: z.ZodOptional<z.ZodNumber>;
67
84
  }, z.core.$strip>;
68
85
  declare const SuccessResponseSchema: <T extends z.ZodTypeAny>(dataSchema: T) => z.ZodObject<{
86
+ message: z.ZodOptional<z.ZodString>;
87
+ code: z.ZodOptional<z.ZodString>;
69
88
  data: T;
70
89
  }, z.core.$strip>;
71
- type ApiResponse<T> = z.infer<ReturnType<typeof SuccessResponseSchema<z.ZodType<T>>>>;
90
+ type ApiResponse<T> = {
91
+ data: T;
92
+ message?: string;
93
+ code?: string;
94
+ };
72
95
  type ErrorResponse = z.infer<typeof ErrorResponseSchema>;
73
96
  declare function validateApiResponse<T>(response: unknown, dataSchema: z.ZodType<T>): void;
74
97
  declare function validateErrorResponse(response: unknown): ErrorResponse;
75
98
 
76
- export { type ApiResponse, ApiResponseSchema, ChipiApiError, ChipiAuthError, ChipiError, ChipiSessionError, ChipiSkuError, ChipiTransactionError, ChipiValidationError, ChipiWalletError, type ErrorResponse, ErrorResponseSchema, SuccessResponseSchema, camelToSnake, capitalizeFirst, formatAddress, formatCurrency, formatDate, formatNumber, formatTransactionHash, handleApiError, isChipiError, snakeToCamel, validateApiResponse, validateErrorResponse };
99
+ export { type ApiResponse, ApiResponseSchema, ChipiApiError, ChipiAuthError, ChipiError, ChipiSessionError, ChipiSkuError, ChipiTransactionError, ChipiValidationError, ChipiWalletError, type ErrorResponse, ErrorResponseSchema, PaymasterIncompatibleError, SuccessResponseSchema, WalletClassHashNotFoundError, WalletNotCompatibleError, camelToSnake, capitalizeFirst, formatAddress, formatCurrency, formatDate, formatNumber, formatTransactionHash, handleApiError, hasHttpStatus, isChipiError, snakeToCamel, validateApiResponse, validateErrorResponse };