starknet 8.1.2 → 8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -36,7 +36,16 @@ __export(constants_exports, {
36
36
  PRIME: () => PRIME,
37
37
  RANGE_FELT: () => RANGE_FELT,
38
38
  RANGE_I128: () => RANGE_I128,
39
+ RANGE_I16: () => RANGE_I16,
40
+ RANGE_I32: () => RANGE_I32,
41
+ RANGE_I64: () => RANGE_I64,
42
+ RANGE_I8: () => RANGE_I8,
39
43
  RANGE_U128: () => RANGE_U128,
44
+ RANGE_U16: () => RANGE_U16,
45
+ RANGE_U32: () => RANGE_U32,
46
+ RANGE_U64: () => RANGE_U64,
47
+ RANGE_U8: () => RANGE_U8,
48
+ RANGE_U96: () => RANGE_U96,
40
49
  RPC_DEFAULT_NODES: () => RPC_DEFAULT_NODES,
41
50
  SNIP9_V1_INTERFACE_ID: () => SNIP9_V1_INTERFACE_ID,
42
51
  SNIP9_V2_INTERFACE_ID: () => SNIP9_V2_INTERFACE_ID,
@@ -81,16 +90,22 @@ __export(encode_exports, {
81
90
  addHexPrefix: () => addHexPrefix,
82
91
  arrayBufferToString: () => arrayBufferToString,
83
92
  atobUniversal: () => atobUniversal,
93
+ bigIntToUint8Array: () => bigIntToUint8Array,
84
94
  btoaUniversal: () => btoaUniversal,
85
95
  buf2hex: () => buf2hex,
86
96
  calcByteLength: () => calcByteLength,
87
97
  concatenateArrayBuffer: () => concatenateArrayBuffer,
98
+ hexStringToUint8Array: () => hexStringToUint8Array,
88
99
  padLeft: () => padLeft,
89
100
  pascalToSnake: () => pascalToSnake,
90
101
  removeHexPrefix: () => removeHexPrefix,
91
102
  sanitizeBytes: () => sanitizeBytes,
92
103
  sanitizeHex: () => sanitizeHex,
93
- utf8ToArray: () => utf8ToArray
104
+ stringToUint8Array: () => stringToUint8Array,
105
+ uint8ArrayToBigInt: () => uint8ArrayToBigInt,
106
+ utf8ToArray: () => utf8ToArray,
107
+ utf8ToBigInt: () => utf8ToBigInt,
108
+ utf8ToUint8Array: () => utf8ToUint8Array
94
109
  });
95
110
  import { base64 } from "@scure/base";
96
111
  var IS_BROWSER = typeof window !== "undefined";
@@ -98,9 +113,13 @@ var STRING_ZERO = "0";
98
113
  function arrayBufferToString(array) {
99
114
  return new Uint8Array(array).reduce((data, byte) => data + String.fromCharCode(byte), "");
100
115
  }
101
- function utf8ToArray(str) {
116
+ function utf8ToUint8Array(str) {
102
117
  return new TextEncoder().encode(str);
103
118
  }
119
+ var utf8ToArray = utf8ToUint8Array;
120
+ function utf8ToBigInt(str) {
121
+ return uint8ArrayToBigInt(utf8ToUint8Array(str));
122
+ }
104
123
  function atobUniversal(a) {
105
124
  return base64.decode(a);
106
125
  }
@@ -152,6 +171,61 @@ function concatenateArrayBuffer(uint8arrays) {
152
171
  });
153
172
  return result;
154
173
  }
174
+ function hexStringToUint8Array(hex) {
175
+ const cleanHex2 = hex.startsWith("0x") ? hex.slice(2) : hex;
176
+ if (cleanHex2.length > 0 && !/^[0-9a-fA-F]+$/.test(cleanHex2)) {
177
+ throw new Error(`Invalid hex string: "${hex}" contains non-hexadecimal characters`);
178
+ }
179
+ const paddedHex = cleanHex2.length % 2 !== 0 ? `0${cleanHex2}` : cleanHex2;
180
+ const bytes = new Uint8Array(paddedHex.length / 2);
181
+ for (let i = 0; i < paddedHex.length; i += 2) {
182
+ bytes[i / 2] = parseInt(paddedHex.substring(i, i + 2), 16);
183
+ }
184
+ return bytes;
185
+ }
186
+ function isHexString(hex) {
187
+ return /^0[xX][0-9a-fA-F]*$/.test(hex);
188
+ }
189
+ function isDecimalString(str) {
190
+ return /^[0-9]+$/.test(str);
191
+ }
192
+ function stringToUint8Array(str) {
193
+ if (isHexString(str)) {
194
+ return hexStringToUint8Array(str);
195
+ }
196
+ if (isDecimalString(str)) {
197
+ const value = BigInt(str);
198
+ return bigIntToUint8Array(value);
199
+ }
200
+ return utf8ToUint8Array(str);
201
+ }
202
+ function bigIntToUint8Array(value) {
203
+ if (value < 0n) {
204
+ throw new Error(`Cannot convert negative bigint ${value} to Uint8Array`);
205
+ }
206
+ if (value === 0n) {
207
+ return new Uint8Array([0]);
208
+ }
209
+ let hex = value.toString(16);
210
+ if (hex.length % 2 !== 0) {
211
+ hex = `0${hex}`;
212
+ }
213
+ const bytes = new Uint8Array(hex.length / 2);
214
+ for (let i = 0; i < hex.length; i += 2) {
215
+ bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
216
+ }
217
+ return bytes;
218
+ }
219
+ function uint8ArrayToBigInt(data) {
220
+ if (!data || data.length === 0) {
221
+ return 0n;
222
+ }
223
+ let hex = "0x";
224
+ for (let i = 0; i < data.length; i += 1) {
225
+ hex += data[i].toString(16).padStart(2, "0");
226
+ }
227
+ return BigInt(hex);
228
+ }
155
229
 
156
230
  // src/global/constants.ts
157
231
  var TEXT_TO_FELT_MAX_LEN = 31;
@@ -164,8 +238,17 @@ var MAX_STORAGE_ITEM_SIZE = 256n;
164
238
  var ADDR_BOUND = 2n ** 251n - MAX_STORAGE_ITEM_SIZE;
165
239
  var range = (min, max) => ({ min, max });
166
240
  var RANGE_FELT = range(ZERO, PRIME - 1n);
167
- var RANGE_I128 = range(-(2n ** 127n), 2n ** 127n - 1n);
241
+ var RANGE_U8 = range(ZERO, 2n ** 8n - 1n);
242
+ var RANGE_U16 = range(ZERO, 2n ** 16n - 1n);
243
+ var RANGE_U32 = range(ZERO, 2n ** 32n - 1n);
244
+ var RANGE_U64 = range(ZERO, 2n ** 64n - 1n);
245
+ var RANGE_U96 = range(ZERO, 2n ** 96n - 1n);
168
246
  var RANGE_U128 = range(ZERO, 2n ** 128n - 1n);
247
+ var RANGE_I8 = range(-(2n ** 7n), 2n ** 7n - 1n);
248
+ var RANGE_I16 = range(-(2n ** 15n), 2n ** 15n - 1n);
249
+ var RANGE_I32 = range(-(2n ** 31n), 2n ** 31n - 1n);
250
+ var RANGE_I64 = range(-(2n ** 63n), 2n ** 63n - 1n);
251
+ var RANGE_I128 = range(-(2n ** 127n), 2n ** 127n - 1n);
169
252
  var LegacyUDC = {
170
253
  ADDRESS: "0x041a78e741e5af2fec34b695679bc6891742439f7afb8484ecd7766661ad02bf",
171
254
  ENTRYPOINT: "deployContract"
@@ -232,7 +315,8 @@ var DEFAULT_GLOBAL_CONFIG = {
232
315
  },
233
316
  defaultTipType: "recommendedTip",
234
317
  fetch: void 0,
235
- websocket: void 0
318
+ websocket: void 0,
319
+ buffer: void 0
236
320
  };
237
321
  var RPC_DEFAULT_NODES = {
238
322
  SN_MAIN: [`https://starknet-mainnet.public.blastapi.io/rpc/`],
@@ -250,7 +334,10 @@ var SYSTEM_MESSAGES = {
250
334
  unsupportedSpecVersion: "The connected node specification version is not supported by this library",
251
335
  maxFeeInV3: "maxFee is not supported in V3 transactions, use resourceBounds instead",
252
336
  declareNonSierra: "Declaring non Sierra (Cairo0)contract using RPC 0.8+",
253
- unsupportedMethodForRpcVersion: "Unsupported method for RPC version"
337
+ unsupportedMethodForRpcVersion: "Unsupported method for RPC version",
338
+ txEvictedFromMempool: "Transaction TTL, evicted from the mempool, try to increase the tip",
339
+ consensusFailed: "Consensus failed to finalize the block proposal",
340
+ txFailsBlockBuildingValidation: "Transaction fails block building validation"
254
341
  };
255
342
 
256
343
  // src/global/config.ts
@@ -473,12 +560,20 @@ var Uint = {
473
560
  u16: "core::integer::u16",
474
561
  u32: "core::integer::u32",
475
562
  u64: "core::integer::u64",
563
+ u96: "core::integer::u96",
476
564
  u128: "core::integer::u128",
477
565
  u256: "core::integer::u256",
478
566
  // This one is struct
479
567
  u512: "core::integer::u512"
480
568
  // This one is struct
481
569
  };
570
+ var Int = {
571
+ i8: "core::integer::i8",
572
+ i16: "core::integer::i16",
573
+ i32: "core::integer::i32",
574
+ i64: "core::integer::i64",
575
+ i128: "core::integer::i128"
576
+ };
482
577
  var Literal = {
483
578
  ClassHash: "core::starknet::class_hash::ClassHash",
484
579
  ContractAddress: "core::starknet::contract_address::ContractAddress",
@@ -662,10 +757,12 @@ __export(num_exports, {
662
757
  getDecimalString: () => getDecimalString,
663
758
  getHexString: () => getHexString,
664
759
  getHexStringArray: () => getHexStringArray,
760
+ getNext: () => getNext,
665
761
  hexToBytes: () => hexToBytes,
666
762
  hexToDecimalString: () => hexToDecimalString,
667
763
  isBigNumberish: () => isBigNumberish,
668
764
  isHex: () => isHex,
765
+ isHexString: () => isHexString2,
669
766
  isStringWholeNumber: () => isStringWholeNumber,
670
767
  stringToSha256ToArrayBuff4: () => stringToSha256ToArrayBuff4,
671
768
  toBigInt: () => toBigInt,
@@ -695,14 +792,21 @@ function isBigInt(value) {
695
792
  function isString(value) {
696
793
  return typeof value === "string";
697
794
  }
795
+ function isBuffer(obj) {
796
+ return typeof Buffer !== "undefined" && obj instanceof Buffer;
797
+ }
698
798
  function isObject(item) {
699
799
  return !!item && typeof item === "object" && !Array.isArray(item);
700
800
  }
801
+ function isInteger2(value) {
802
+ return Number.isInteger(value);
803
+ }
701
804
 
702
805
  // src/utils/num.ts
703
806
  function isHex(hex) {
704
807
  return /^0[xX][0-9a-fA-F]*$/.test(hex);
705
808
  }
809
+ var isHexString2 = isHex;
706
810
  function toBigInt(value) {
707
811
  return BigInt(value);
708
812
  }
@@ -790,6 +894,11 @@ function stringToSha256ToArrayBuff4(str) {
790
894
  function isBigNumberish(input) {
791
895
  return isNumber(input) || isBigInt(input) || isString(input) && (isHex(input) || isStringWholeNumber(input));
792
896
  }
897
+ function getNext(iterator) {
898
+ const it = iterator.next();
899
+ if (it.done) throw new Error("Unexpected end of response");
900
+ return it.value;
901
+ }
793
902
 
794
903
  // src/utils/hash/selector.ts
795
904
  var selector_exports = {};
@@ -855,7 +964,7 @@ __export(shortString_exports, {
855
964
  decodeShortString: () => decodeShortString,
856
965
  encodeShortString: () => encodeShortString,
857
966
  isASCII: () => isASCII,
858
- isDecimalString: () => isDecimalString,
967
+ isDecimalString: () => isDecimalString2,
859
968
  isLongText: () => isLongText,
860
969
  isShortString: () => isShortString,
861
970
  isShortText: () => isShortText,
@@ -868,7 +977,7 @@ function isASCII(str) {
868
977
  function isShortString(str) {
869
978
  return str.length <= TEXT_TO_FELT_MAX_LEN;
870
979
  }
871
- function isDecimalString(str) {
980
+ function isDecimalString2(str) {
872
981
  return /^[0-9]*$/i.test(str);
873
982
  }
874
983
  function isText(val) {
@@ -890,7 +999,7 @@ function decodeShortString(str) {
890
999
  if (isHex(str)) {
891
1000
  return removeHexPrefix(str).replace(/.{2}/g, (hex) => String.fromCharCode(parseInt(hex, 16)));
892
1001
  }
893
- if (isDecimalString(str)) {
1002
+ if (isDecimalString2(str)) {
894
1003
  return decodeShortString("0X".concat(BigInt(str).toString(16)));
895
1004
  }
896
1005
  throw new Error(`${str} is not Hex or decimal`);
@@ -932,12 +1041,11 @@ __export(cairo_exports, {
932
1041
  isLen: () => isLen,
933
1042
  isTypeArray: () => isTypeArray,
934
1043
  isTypeBool: () => isTypeBool,
935
- isTypeByteArray: () => isTypeByteArray,
936
- isTypeBytes31: () => isTypeBytes31,
937
1044
  isTypeContractAddress: () => isTypeContractAddress,
938
1045
  isTypeEnum: () => isTypeEnum,
939
1046
  isTypeEthAddress: () => isTypeEthAddress,
940
1047
  isTypeFelt: () => isTypeFelt,
1048
+ isTypeInt: () => isTypeInt,
941
1049
  isTypeLiteral: () => isTypeLiteral,
942
1050
  isTypeNamedTuple: () => isTypeNamedTuple,
943
1051
  isTypeNonZero: () => isTypeNonZero,
@@ -954,6 +1062,16 @@ __export(cairo_exports, {
954
1062
  uint512: () => uint512
955
1063
  });
956
1064
 
1065
+ // src/utils/helpers.ts
1066
+ function addCompiledFlag(compiled) {
1067
+ Object.defineProperty(compiled, "__compiled__", {
1068
+ enumerable: false,
1069
+ writable: false,
1070
+ value: true
1071
+ });
1072
+ return compiled;
1073
+ }
1074
+
957
1075
  // src/utils/cairoDataTypes/felt.ts
958
1076
  function CairoFelt(it) {
959
1077
  if (isBigInt(it) || Number.isInteger(it)) {
@@ -980,6 +1098,69 @@ function CairoFelt(it) {
980
1098
  }
981
1099
  throw new Error(`${it} can't be computed by felt()`);
982
1100
  }
1101
+ var CairoFelt252 = class _CairoFelt252 {
1102
+ /**
1103
+ * byte representation of the felt252
1104
+ */
1105
+ data;
1106
+ static abiSelector = "core::felt252";
1107
+ constructor(data) {
1108
+ _CairoFelt252.validate(data);
1109
+ this.data = _CairoFelt252.__processData(data);
1110
+ }
1111
+ static __processData(data) {
1112
+ if (isString(data)) {
1113
+ return stringToUint8Array(data);
1114
+ }
1115
+ if (isBigInt(data)) {
1116
+ return bigIntToUint8Array(data);
1117
+ }
1118
+ if (Number.isInteger(data)) {
1119
+ return bigIntToUint8Array(BigInt(data));
1120
+ }
1121
+ if (isBoolean(data)) {
1122
+ return bigIntToUint8Array(BigInt(data ? 1 : 0));
1123
+ }
1124
+ throw new Error(`${data} can't be computed by felt()`);
1125
+ }
1126
+ toBigInt() {
1127
+ return uint8ArrayToBigInt(this.data);
1128
+ }
1129
+ decodeUtf8() {
1130
+ return new TextDecoder().decode(this.data);
1131
+ }
1132
+ toHexString() {
1133
+ return addHexPrefix(this.toBigInt().toString(16));
1134
+ }
1135
+ toApiRequest() {
1136
+ return addCompiledFlag([this.toHexString()]);
1137
+ }
1138
+ static validate(data) {
1139
+ assert(data !== null, "null value is not allowed for felt252");
1140
+ assert(data !== void 0, "undefined value is not allowed for felt252");
1141
+ assert(
1142
+ isString(data) || isNumber(data) || isBigInt(data) || isBoolean(data),
1143
+ `Unsupported data type '${typeof data}' for felt252. Expected string, number, bigint, or boolean`
1144
+ );
1145
+ const value = _CairoFelt252.__processData(data);
1146
+ const bn = uint8ArrayToBigInt(value);
1147
+ assert(bn >= 0n && bn < PRIME, `Value ${value} is out of felt252 range [0, ${PRIME})`);
1148
+ }
1149
+ static is(data) {
1150
+ try {
1151
+ _CairoFelt252.validate(data);
1152
+ return true;
1153
+ } catch {
1154
+ return false;
1155
+ }
1156
+ }
1157
+ static isAbiType(abiType) {
1158
+ return abiType === _CairoFelt252.abiSelector;
1159
+ }
1160
+ static factoryFromApiResponse(responseIterator) {
1161
+ return new _CairoFelt252(getNext(responseIterator));
1162
+ }
1163
+ };
983
1164
 
984
1165
  // src/utils/cairoDataTypes/uint256.ts
985
1166
  var UINT_128_MAX = (1n << 128n) - 1n;
@@ -991,11 +1172,16 @@ var UINT_256_LOW_MIN = 0n;
991
1172
  var UINT_256_HIGH_MIN = 0n;
992
1173
  var CairoUint256 = class _CairoUint256 {
993
1174
  low;
1175
+ // TODO should be u128
994
1176
  high;
1177
+ // TODO should be u128
995
1178
  static abiSelector = "core::integer::u256";
996
1179
  constructor(...arr) {
997
1180
  if (isObject(arr[0]) && arr.length === 1 && "low" in arr[0] && "high" in arr[0]) {
998
- const props = _CairoUint256.validateProps(arr[0].low, arr[0].high);
1181
+ const props = _CairoUint256.validateProps(
1182
+ arr[0].low,
1183
+ arr[0].high
1184
+ );
999
1185
  this.low = props.low;
1000
1186
  this.high = props.high;
1001
1187
  } else if (arr.length === 1) {
@@ -1014,9 +1200,15 @@ var CairoUint256 = class _CairoUint256 {
1014
1200
  * Validate if BigNumberish can be represented as Unit256
1015
1201
  */
1016
1202
  static validate(bigNumberish) {
1203
+ assert(bigNumberish !== null, "null value is not allowed for u256");
1204
+ assert(bigNumberish !== void 0, "undefined value is not allowed for u256");
1205
+ assert(
1206
+ isBigNumberish(bigNumberish) || isObject(bigNumberish),
1207
+ `Unsupported data type '${typeof bigNumberish}' for u256. Expected string, number, bigint, or Uint256 object`
1208
+ );
1017
1209
  const bigInt = BigInt(bigNumberish);
1018
- if (bigInt < UINT_256_MIN) throw Error("bigNumberish is smaller than UINT_256_MIN");
1019
- if (bigInt > UINT_256_MAX) throw new Error("bigNumberish is bigger than UINT_256_MAX");
1210
+ assert(bigInt >= UINT_256_MIN, "bigNumberish is smaller than UINT_256_MIN");
1211
+ assert(bigInt <= UINT_256_MAX, "bigNumberish is bigger than UINT_256_MAX");
1020
1212
  return bigInt;
1021
1213
  }
1022
1214
  /**
@@ -1025,12 +1217,14 @@ var CairoUint256 = class _CairoUint256 {
1025
1217
  static validateProps(low, high) {
1026
1218
  const bigIntLow = BigInt(low);
1027
1219
  const bigIntHigh = BigInt(high);
1028
- if (bigIntLow < UINT_256_LOW_MIN || bigIntLow > UINT_256_LOW_MAX) {
1029
- throw new Error("low is out of range UINT_256_LOW_MIN - UINT_256_LOW_MAX");
1030
- }
1031
- if (bigIntHigh < UINT_256_HIGH_MIN || bigIntHigh > UINT_256_HIGH_MAX) {
1032
- throw new Error("high is out of range UINT_256_HIGH_MIN - UINT_256_HIGH_MAX");
1033
- }
1220
+ assert(
1221
+ bigIntLow >= UINT_256_LOW_MIN && bigIntLow <= UINT_256_LOW_MAX,
1222
+ "low is out of range UINT_256_LOW_MIN - UINT_256_LOW_MAX"
1223
+ );
1224
+ assert(
1225
+ bigIntHigh >= UINT_256_HIGH_MIN && bigIntHigh <= UINT_256_HIGH_MAX,
1226
+ "high is out of range UINT_256_HIGH_MIN - UINT_256_HIGH_MAX"
1227
+ );
1034
1228
  return { low: bigIntLow, high: bigIntHigh };
1035
1229
  }
1036
1230
  /**
@@ -1050,6 +1244,11 @@ var CairoUint256 = class _CairoUint256 {
1050
1244
  static isAbiType(abiType) {
1051
1245
  return abiType === _CairoUint256.abiSelector;
1052
1246
  }
1247
+ static factoryFromApiResponse(responseIterator) {
1248
+ const low = getNext(responseIterator);
1249
+ const high = getNext(responseIterator);
1250
+ return new _CairoUint256(low, high);
1251
+ }
1053
1252
  /**
1054
1253
  * Return bigint representation
1055
1254
  */
@@ -1090,9 +1289,13 @@ var UINT_512_MIN = 0n;
1090
1289
  var UINT_128_MIN = 0n;
1091
1290
  var CairoUint512 = class _CairoUint512 {
1092
1291
  limb0;
1292
+ // TODO should be u128
1093
1293
  limb1;
1294
+ // TODO should be u128
1094
1295
  limb2;
1296
+ // TODO should be u128
1095
1297
  limb3;
1298
+ // TODO should be u128
1096
1299
  static abiSelector = "core::integer::u512";
1097
1300
  constructor(...arr) {
1098
1301
  if (isObject(arr[0]) && arr.length === 1 && "limb0" in arr[0] && "limb1" in arr[0] && "limb2" in arr[0] && "limb3" in arr[0]) {
@@ -1126,9 +1329,15 @@ var CairoUint512 = class _CairoUint512 {
1126
1329
  * Validate if BigNumberish can be represented as Uint512
1127
1330
  */
1128
1331
  static validate(bigNumberish) {
1332
+ assert(bigNumberish !== null, "null value is not allowed for u512");
1333
+ assert(bigNumberish !== void 0, "undefined value is not allowed for u512");
1334
+ assert(
1335
+ isBigNumberish(bigNumberish) || isObject(bigNumberish),
1336
+ `Unsupported data type '${typeof bigNumberish}' for u512. Expected string, number, bigint, or Uint512 object`
1337
+ );
1129
1338
  const bigInt = BigInt(bigNumberish);
1130
- if (bigInt < UINT_512_MIN) throw Error("bigNumberish is smaller than UINT_512_MIN.");
1131
- if (bigInt > UINT_512_MAX) throw Error("bigNumberish is bigger than UINT_512_MAX.");
1339
+ assert(bigInt >= UINT_512_MIN, "bigNumberish is smaller than UINT_512_MIN.");
1340
+ assert(bigInt <= UINT_512_MAX, "bigNumberish is bigger than UINT_512_MAX.");
1132
1341
  return bigInt;
1133
1342
  }
1134
1343
  /**
@@ -1140,9 +1349,10 @@ var CairoUint512 = class _CairoUint512 {
1140
1349
  const l2 = BigInt(limb2);
1141
1350
  const l3 = BigInt(limb3);
1142
1351
  [l0, l1, l2, l3].forEach((value, index) => {
1143
- if (value < UINT_128_MIN || value > UINT_128_MAX) {
1144
- throw Error(`limb${index} is not in the range of a u128 number`);
1145
- }
1352
+ assert(
1353
+ value >= UINT_128_MIN && value <= UINT_128_MAX,
1354
+ `limb${index} is not in the range of a u128 number`
1355
+ );
1146
1356
  });
1147
1357
  return { limb0: l0, limb1: l1, limb2: l2, limb3: l3 };
1148
1358
  }
@@ -1163,6 +1373,13 @@ var CairoUint512 = class _CairoUint512 {
1163
1373
  static isAbiType(abiType) {
1164
1374
  return abiType === _CairoUint512.abiSelector;
1165
1375
  }
1376
+ static factoryFromApiResponse(responseIterator) {
1377
+ const limb0 = getNext(responseIterator);
1378
+ const limb1 = getNext(responseIterator);
1379
+ const limb2 = getNext(responseIterator);
1380
+ const limb3 = getNext(responseIterator);
1381
+ return new _CairoUint512(limb0, limb1, limb2, limb3);
1382
+ }
1166
1383
  /**
1167
1384
  * Return bigint representation
1168
1385
  */
@@ -1217,13 +1434,12 @@ var isTypeEnum = (type, enums) => type in enums;
1217
1434
  var isTypeOption = (type) => type.startsWith("core::option::Option::");
1218
1435
  var isTypeResult = (type) => type.startsWith("core::result::Result::");
1219
1436
  var isTypeUint = (type) => Object.values(Uint).includes(type);
1437
+ var isTypeInt = (type) => Object.values(Int).includes(type);
1220
1438
  var isTypeUint256 = (type) => CairoUint256.isAbiType(type);
1221
1439
  var isTypeLiteral = (type) => Object.values(Literal).includes(type);
1222
1440
  var isTypeBool = (type) => type === "core::bool";
1223
1441
  var isTypeContractAddress = (type) => type === Literal.ContractAddress;
1224
1442
  var isTypeEthAddress = (type) => type === ETH_ADDRESS;
1225
- var isTypeBytes31 = (type) => type === "core::bytes_31::bytes31";
1226
- var isTypeByteArray = (type) => type === "core::byte_array::ByteArray";
1227
1443
  var isTypeU96 = (type) => type === "core::internal::bounded_int::BoundedInt::<0, 79228162514264337593543950335>";
1228
1444
  var isTypeSecp256k1Point = (type) => type === Literal.Secp256k1Point;
1229
1445
  var isCairo1Type = (type) => type.includes("::");
@@ -1482,11 +1698,1344 @@ function formatter(data, type, sameType) {
1482
1698
  );
1483
1699
  }
1484
1700
 
1485
- // src/utils/calldata/parser/parser-0-1.1.0.ts
1486
- var AbiParser1 = class {
1487
- abi;
1488
- constructor(abi) {
1489
- this.abi = abi;
1701
+ // src/utils/calldata/parser/interface.ts
1702
+ var AbiParserInterface = class {
1703
+ };
1704
+
1705
+ // src/utils/cairoDataTypes/bytes31.ts
1706
+ var CairoBytes31 = class _CairoBytes31 {
1707
+ static MAX_BYTE_SIZE = 31;
1708
+ data;
1709
+ static abiSelector = "core::bytes_31::bytes31";
1710
+ constructor(data) {
1711
+ _CairoBytes31.validate(data);
1712
+ this.data = _CairoBytes31.__processData(data);
1713
+ }
1714
+ static __processData(data) {
1715
+ if (isString(data)) {
1716
+ return stringToUint8Array(data);
1717
+ }
1718
+ if (isBuffer(data)) {
1719
+ return new Uint8Array(data);
1720
+ }
1721
+ if (data instanceof Uint8Array) {
1722
+ return new Uint8Array(data);
1723
+ }
1724
+ throw new Error("Invalid input type for CairoBytes31. Expected string, Buffer, or Uint8Array");
1725
+ }
1726
+ toApiRequest() {
1727
+ return addCompiledFlag([this.toHexString()]);
1728
+ }
1729
+ toBigInt() {
1730
+ return uint8ArrayToBigInt(this.data);
1731
+ }
1732
+ decodeUtf8() {
1733
+ return new TextDecoder().decode(this.data);
1734
+ }
1735
+ toHexString() {
1736
+ return addHexPrefix(this.toBigInt().toString(16));
1737
+ }
1738
+ static validate(data) {
1739
+ const byteLength = _CairoBytes31.__processData(data).length;
1740
+ assert(
1741
+ byteLength <= this.MAX_BYTE_SIZE,
1742
+ `Data is too long: ${byteLength} bytes (max ${this.MAX_BYTE_SIZE} bytes)`
1743
+ );
1744
+ }
1745
+ static is(data) {
1746
+ try {
1747
+ _CairoBytes31.validate(data);
1748
+ return true;
1749
+ } catch {
1750
+ return false;
1751
+ }
1752
+ }
1753
+ /**
1754
+ * Check if provided abi type is this data type
1755
+ */
1756
+ static isAbiType(abiType) {
1757
+ return abiType === _CairoBytes31.abiSelector;
1758
+ }
1759
+ static factoryFromApiResponse(responseIterator) {
1760
+ return new _CairoBytes31(getNext(responseIterator));
1761
+ }
1762
+ };
1763
+
1764
+ // src/utils/errors/rpc.ts
1765
+ var errorCodes = {
1766
+ FAILED_TO_RECEIVE_TXN: 1,
1767
+ NO_TRACE_AVAILABLE: 10,
1768
+ CONTRACT_NOT_FOUND: 20,
1769
+ ENTRYPOINT_NOT_FOUND: 21,
1770
+ BLOCK_NOT_FOUND: 24,
1771
+ INVALID_TXN_INDEX: 27,
1772
+ CLASS_HASH_NOT_FOUND: 28,
1773
+ TXN_HASH_NOT_FOUND: 29,
1774
+ PAGE_SIZE_TOO_BIG: 31,
1775
+ NO_BLOCKS: 32,
1776
+ INVALID_CONTINUATION_TOKEN: 33,
1777
+ TOO_MANY_KEYS_IN_FILTER: 34,
1778
+ CONTRACT_ERROR: 40,
1779
+ TRANSACTION_EXECUTION_ERROR: 41,
1780
+ STORAGE_PROOF_NOT_SUPPORTED: 42,
1781
+ CLASS_ALREADY_DECLARED: 51,
1782
+ INVALID_TRANSACTION_NONCE: 52,
1783
+ INSUFFICIENT_RESOURCES_FOR_VALIDATE: 53,
1784
+ INSUFFICIENT_ACCOUNT_BALANCE: 54,
1785
+ VALIDATION_FAILURE: 55,
1786
+ COMPILATION_FAILED: 56,
1787
+ CONTRACT_CLASS_SIZE_IS_TOO_LARGE: 57,
1788
+ NON_ACCOUNT: 58,
1789
+ DUPLICATE_TX: 59,
1790
+ COMPILED_CLASS_HASH_MISMATCH: 60,
1791
+ UNSUPPORTED_TX_VERSION: 61,
1792
+ UNSUPPORTED_CONTRACT_CLASS_VERSION: 62,
1793
+ UNEXPECTED_ERROR: 63,
1794
+ INVALID_SUBSCRIPTION_ID: 66,
1795
+ TOO_MANY_ADDRESSES_IN_FILTER: 67,
1796
+ TOO_MANY_BLOCKS_BACK: 68,
1797
+ COMPILATION_ERROR: 100,
1798
+ INVALID_ADDRESS: 150,
1799
+ TOKEN_NOT_SUPPORTED: 151,
1800
+ INVALID_SIGNATURE: 153,
1801
+ MAX_AMOUNT_TOO_LOW: 154,
1802
+ CLASS_HASH_NOT_SUPPORTED: 155,
1803
+ PAYMASTER_TRANSACTION_EXECUTION_ERROR: 156,
1804
+ INVALID_TIME_BOUNDS: 157,
1805
+ INVALID_DEPLOYMENT_DATA: 158,
1806
+ INVALID_CLASS_HASH: 159,
1807
+ INVALID_ID: 160,
1808
+ UNKNOWN_ERROR: 163
1809
+ };
1810
+ var rpc_default = errorCodes;
1811
+
1812
+ // src/utils/errors/index.ts
1813
+ function fixStack(target, fn = target.constructor) {
1814
+ const { captureStackTrace } = Error;
1815
+ captureStackTrace && captureStackTrace(target, fn);
1816
+ }
1817
+ function fixProto(target, prototype) {
1818
+ const { setPrototypeOf } = Object;
1819
+ setPrototypeOf ? setPrototypeOf(target, prototype) : target.__proto__ = prototype;
1820
+ }
1821
+ var CustomError = class extends Error {
1822
+ name;
1823
+ constructor(message) {
1824
+ super(message);
1825
+ Object.defineProperty(this, "name", {
1826
+ value: new.target.name,
1827
+ enumerable: false,
1828
+ configurable: true
1829
+ });
1830
+ fixProto(this, new.target.prototype);
1831
+ fixStack(this);
1832
+ }
1833
+ };
1834
+ var LibraryError = class extends CustomError {
1835
+ };
1836
+ var RpcError = class extends LibraryError {
1837
+ constructor(baseError, method, params) {
1838
+ super(`RPC: ${method} with params ${stringify2(params, null, 2)}
1839
+
1840
+ ${baseError.code}: ${baseError.message}: ${stringify2(baseError.data)}`);
1841
+ this.baseError = baseError;
1842
+ this.request = { method, params };
1843
+ }
1844
+ request;
1845
+ get code() {
1846
+ return this.baseError.code;
1847
+ }
1848
+ /**
1849
+ * Verifies the underlying RPC error, also serves as a type guard for the _baseError_ property
1850
+ * @example
1851
+ * ```typescript
1852
+ * SomeError.isType('UNEXPECTED_ERROR');
1853
+ * ```
1854
+ */
1855
+ isType(typeName) {
1856
+ return rpc_default[typeName] === this.code;
1857
+ }
1858
+ };
1859
+ var TimeoutError = class extends LibraryError {
1860
+ constructor(message) {
1861
+ super(message);
1862
+ this.name = "TimeoutError";
1863
+ }
1864
+ };
1865
+ var WebSocketNotConnectedError = class extends LibraryError {
1866
+ constructor(message) {
1867
+ super(message);
1868
+ this.name = "WebSocketNotConnectedError";
1869
+ }
1870
+ };
1871
+
1872
+ // src/utils/connect/buffer.ts
1873
+ var buffer_default = config.get("buffer") || typeof Buffer !== "undefined" && Buffer || typeof globalThis !== "undefined" && globalThis.Buffer || typeof window !== "undefined" && window.Buffer || typeof global !== "undefined" && global.Buffer || class {
1874
+ constructor() {
1875
+ throw new LibraryError(
1876
+ `Buffer not detected, use 'config.set("buffer", YourBufferPolyfill)' or polyfill or Node.js environment for Buffer support`
1877
+ );
1878
+ }
1879
+ static from(_data) {
1880
+ throw new LibraryError(
1881
+ `Buffer not detected, use 'config.set("buffer", YourBufferPolyfill)' or polyfill or Node.js environment for Buffer support`
1882
+ );
1883
+ }
1884
+ static isBuffer(obj) {
1885
+ const BufferImpl = config.get("buffer") || typeof Buffer !== "undefined" && Buffer;
1886
+ return BufferImpl && BufferImpl.isBuffer && BufferImpl.isBuffer(obj);
1887
+ }
1888
+ };
1889
+
1890
+ // src/utils/cairoDataTypes/uint32.ts
1891
+ var CairoUint32 = class _CairoUint32 {
1892
+ data;
1893
+ static abiSelector = "core::u32::u32";
1894
+ constructor(data) {
1895
+ _CairoUint32.validate(data);
1896
+ this.data = _CairoUint32.__processData(data);
1897
+ }
1898
+ static __processData(data) {
1899
+ if (isString(data) && isText(data)) {
1900
+ return utf8ToBigInt(data);
1901
+ }
1902
+ return BigInt(data);
1903
+ }
1904
+ toApiRequest() {
1905
+ return addCompiledFlag([this.toHexString()]);
1906
+ }
1907
+ toBigInt() {
1908
+ return this.data;
1909
+ }
1910
+ decodeUtf8() {
1911
+ return new TextDecoder().decode(bigIntToUint8Array(this.data));
1912
+ }
1913
+ toHexString() {
1914
+ return addHexPrefix(this.toBigInt().toString(16));
1915
+ }
1916
+ static validate(data) {
1917
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
1918
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
1919
+ assert(
1920
+ !isNumber(data) || Number.isInteger(data),
1921
+ "Invalid input: decimal numbers are not supported, only integers"
1922
+ );
1923
+ const value = _CairoUint32.__processData(data);
1924
+ assert(value >= 0n && value <= 2n ** 32n - 1n, "Value is out of u32 range [0, 2^32)");
1925
+ }
1926
+ static is(data) {
1927
+ try {
1928
+ _CairoUint32.validate(data);
1929
+ return true;
1930
+ } catch {
1931
+ return false;
1932
+ }
1933
+ }
1934
+ /**
1935
+ * Check if provided abi type is this data type
1936
+ */
1937
+ static isAbiType(abiType) {
1938
+ return abiType === _CairoUint32.abiSelector;
1939
+ }
1940
+ static factoryFromApiResponse(responseIterator) {
1941
+ return new _CairoUint32(getNext(responseIterator));
1942
+ }
1943
+ };
1944
+
1945
+ // src/utils/cairoDataTypes/byteArray.ts
1946
+ var CairoByteArray = class _CairoByteArray {
1947
+ /**
1948
+ * entire dataset
1949
+ */
1950
+ data = [];
1951
+ /**
1952
+ * cairo specific implementation helper
1953
+ */
1954
+ pending_word;
1955
+ // felt
1956
+ /**
1957
+ * cairo specific implementation helper
1958
+ */
1959
+ pending_word_len;
1960
+ // u32
1961
+ static abiSelector = "core::byte_array::ByteArray";
1962
+ constructor(...arr) {
1963
+ if (arr.length === 3) {
1964
+ const [dataArg, pendingWord, pendingWordLen] = arr;
1965
+ assert(
1966
+ Array.isArray(dataArg) && pendingWord instanceof CairoFelt252 && pendingWordLen instanceof CairoUint32,
1967
+ "Invalid constructor parameters. Expected (CairoBytes31[], CairoFelt252, CairoUint32)"
1968
+ );
1969
+ this.data = dataArg;
1970
+ this.pending_word = pendingWord;
1971
+ this.pending_word_len = pendingWordLen;
1972
+ return;
1973
+ }
1974
+ const inData = arr[0];
1975
+ _CairoByteArray.validate(inData);
1976
+ const { data, pending_word, pending_word_len } = _CairoByteArray.__processData(inData);
1977
+ this.data = data;
1978
+ this.pending_word = pending_word;
1979
+ this.pending_word_len = pending_word_len;
1980
+ }
1981
+ static __processData(inData) {
1982
+ let fullData;
1983
+ if (inData instanceof Uint8Array) {
1984
+ fullData = inData;
1985
+ } else if (isBuffer(inData)) {
1986
+ fullData = new Uint8Array(inData);
1987
+ } else if (isString(inData)) {
1988
+ fullData = stringToUint8Array(inData);
1989
+ } else if (isBigInt(inData)) {
1990
+ fullData = bigIntToUint8Array(inData);
1991
+ } else if (isInteger2(inData)) {
1992
+ fullData = bigIntToUint8Array(BigInt(inData));
1993
+ } else {
1994
+ throw new Error("Invalid input type. Expected Uint8Array, Buffer, string, number, or bigint");
1995
+ }
1996
+ const CHUNK_SIZE = CairoBytes31.MAX_BYTE_SIZE;
1997
+ const completeChunks = Math.floor(fullData.length / CHUNK_SIZE);
1998
+ const remainderLength = fullData.length % CHUNK_SIZE;
1999
+ const data = [];
2000
+ let pending_word;
2001
+ let pending_word_len;
2002
+ for (let i = 0; i < completeChunks; i += 1) {
2003
+ const chunkStart = i * CHUNK_SIZE;
2004
+ const chunkEnd = chunkStart + CHUNK_SIZE;
2005
+ const chunk = fullData.slice(chunkStart, chunkEnd);
2006
+ data.push(new CairoBytes31(chunk));
2007
+ }
2008
+ if (remainderLength > 0) {
2009
+ const remainder = fullData.slice(completeChunks * CHUNK_SIZE);
2010
+ let hex = "0x";
2011
+ for (let i = 0; i < remainder.length; i += 1) {
2012
+ hex += remainder[i].toString(16).padStart(2, "0");
2013
+ }
2014
+ pending_word = new CairoFelt252(hex);
2015
+ pending_word_len = new CairoUint32(remainderLength);
2016
+ } else {
2017
+ pending_word = new CairoFelt252(0);
2018
+ pending_word_len = new CairoUint32(0);
2019
+ }
2020
+ return { data, pending_word, pending_word_len };
2021
+ }
2022
+ toApiRequest() {
2023
+ this.assertInitialized();
2024
+ return addCompiledFlag([
2025
+ addHexPrefix(this.data.length.toString(16)),
2026
+ ...this.data.flatMap((bytes31) => bytes31.toApiRequest()),
2027
+ ...this.pending_word.toApiRequest(),
2028
+ ...this.pending_word_len.toApiRequest()
2029
+ ]);
2030
+ }
2031
+ decodeUtf8() {
2032
+ const allBytes = this.reconstructBytes();
2033
+ const fullBytes = new Uint8Array(allBytes);
2034
+ return new TextDecoder().decode(fullBytes);
2035
+ }
2036
+ toBigInt() {
2037
+ const allBytes = this.reconstructBytes();
2038
+ if (allBytes.length === 0) {
2039
+ return 0n;
2040
+ }
2041
+ let result = 0n;
2042
+ allBytes.forEach((byte) => {
2043
+ result = result * 256n + BigInt(byte);
2044
+ });
2045
+ return result;
2046
+ }
2047
+ toHexString() {
2048
+ return addHexPrefix(this.toBigInt().toString(16));
2049
+ }
2050
+ toBuffer() {
2051
+ this.assertInitialized();
2052
+ const allBytes = [];
2053
+ this.data.forEach((chunk) => {
2054
+ const chunkBytes = chunk.data;
2055
+ for (let i = 0; i < chunkBytes.length; i += 1) {
2056
+ allBytes.push(chunkBytes[i]);
2057
+ }
2058
+ });
2059
+ const pendingLen = Number(this.pending_word_len.toBigInt());
2060
+ if (pendingLen > 0) {
2061
+ const hex = this.pending_word.toHexString();
2062
+ const hexWithoutPrefix = hex.startsWith("0x") ? hex.slice(2) : hex;
2063
+ const paddedHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;
2064
+ for (let i = 0; i < pendingLen; i += 1) {
2065
+ const byteHex = paddedHex.slice(i * 2, i * 2 + 2);
2066
+ if (byteHex.length >= 2) {
2067
+ const byteValue = parseInt(byteHex, 16);
2068
+ if (!Number.isNaN(byteValue)) {
2069
+ allBytes.push(byteValue);
2070
+ }
2071
+ }
2072
+ }
2073
+ }
2074
+ return buffer_default.from(allBytes);
2075
+ }
2076
+ static validate(data) {
2077
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2078
+ assert(
2079
+ !Array.isArray(data) || data instanceof Uint8Array,
2080
+ "Invalid input: arrays are not supported, use Uint8Array"
2081
+ );
2082
+ assert(
2083
+ typeof data !== "object" || isBuffer(data) || data instanceof Uint8Array,
2084
+ "Invalid input for CairoByteArray: objects are not supported"
2085
+ );
2086
+ assert(
2087
+ !isNumber(data) || Number.isInteger(data),
2088
+ "Invalid input for CairoByteArray: decimal numbers are not supported, only integers"
2089
+ );
2090
+ assert(
2091
+ !isNumber(data) || data >= 0,
2092
+ "Invalid input for CairoByteArray: negative numbers are not supported"
2093
+ );
2094
+ assert(
2095
+ !isBigInt(data) || data >= 0n,
2096
+ "Invalid input for CairoByteArray: negative bigints are not supported"
2097
+ );
2098
+ assert(
2099
+ data instanceof Uint8Array || isBuffer(data) || isString(data) || isNumber(data) || isBigInt(data),
2100
+ "Invalid input type. Expected Uint8Array, Buffer, string, number, or bigint"
2101
+ );
2102
+ }
2103
+ /**
2104
+ * Check if the provided data is a valid CairoByteArray
2105
+ *
2106
+ * @param data - The data to check
2107
+ * @returns True if the data is a valid CairoByteArray, false otherwise
2108
+ */
2109
+ static is(data) {
2110
+ try {
2111
+ _CairoByteArray.validate(data);
2112
+ return true;
2113
+ } catch {
2114
+ return false;
2115
+ }
2116
+ }
2117
+ /**
2118
+ * Check if provided abi type is this data type
2119
+ */
2120
+ static isAbiType(abiType) {
2121
+ return abiType === _CairoByteArray.abiSelector;
2122
+ }
2123
+ /**
2124
+ * Private helper to check if the CairoByteArray is properly initialized
2125
+ */
2126
+ assertInitialized() {
2127
+ assert(
2128
+ this.data && this.pending_word !== void 0 && this.pending_word_len !== void 0,
2129
+ "CairoByteArray is not properly initialized"
2130
+ );
2131
+ }
2132
+ /**
2133
+ * Private helper to reconstruct the full byte sequence from chunks and pending word
2134
+ */
2135
+ reconstructBytes() {
2136
+ this.assertInitialized();
2137
+ const allBytes = [];
2138
+ this.data.forEach((chunk) => {
2139
+ const chunkBytes = chunk.data;
2140
+ for (let i = 0; i < chunkBytes.length; i += 1) {
2141
+ allBytes.push(chunkBytes[i]);
2142
+ }
2143
+ });
2144
+ const pendingLen = Number(this.pending_word_len.toBigInt());
2145
+ if (pendingLen > 0) {
2146
+ const hex = this.pending_word.toHexString();
2147
+ const hexWithoutPrefix = hex.startsWith("0x") ? hex.slice(2) : hex;
2148
+ const paddedHex = hexWithoutPrefix.length % 2 === 0 ? hexWithoutPrefix : `0${hexWithoutPrefix}`;
2149
+ for (let i = 0; i < pendingLen; i += 1) {
2150
+ const byteHex = paddedHex.slice(i * 2, i * 2 + 2);
2151
+ if (byteHex.length < 2) {
2152
+ allBytes.push(0);
2153
+ } else {
2154
+ const byteValue = parseInt(byteHex, 16);
2155
+ if (Number.isNaN(byteValue)) {
2156
+ throw new Error(`Invalid hex byte: ${byteHex}`);
2157
+ }
2158
+ allBytes.push(byteValue);
2159
+ }
2160
+ }
2161
+ }
2162
+ return allBytes;
2163
+ }
2164
+ static factoryFromApiResponse(responseIterator) {
2165
+ const data = Array.from(
2166
+ { length: Number(getNext(responseIterator)) },
2167
+ () => CairoBytes31.factoryFromApiResponse(responseIterator)
2168
+ );
2169
+ const pending_word = CairoFelt252.factoryFromApiResponse(responseIterator);
2170
+ const pending_word_len = CairoUint32.factoryFromApiResponse(responseIterator);
2171
+ return new _CairoByteArray(data, pending_word, pending_word_len);
2172
+ }
2173
+ };
2174
+
2175
+ // src/utils/cairoDataTypes/uint8.ts
2176
+ var CairoUint8 = class _CairoUint8 {
2177
+ data;
2178
+ static abiSelector = "core::integer::u8";
2179
+ constructor(data) {
2180
+ _CairoUint8.validate(data);
2181
+ this.data = _CairoUint8.__processData(data);
2182
+ }
2183
+ static __processData(data) {
2184
+ if (isString(data) && isText(data)) {
2185
+ return utf8ToBigInt(data);
2186
+ }
2187
+ return BigInt(data);
2188
+ }
2189
+ toApiRequest() {
2190
+ return addCompiledFlag([this.toHexString()]);
2191
+ }
2192
+ toBigInt() {
2193
+ return this.data;
2194
+ }
2195
+ decodeUtf8() {
2196
+ return new TextDecoder().decode(bigIntToUint8Array(this.data));
2197
+ }
2198
+ toHexString() {
2199
+ return addHexPrefix(this.toBigInt().toString(16));
2200
+ }
2201
+ static validate(data) {
2202
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2203
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2204
+ assert(
2205
+ !isNumber(data) || Number.isInteger(data),
2206
+ "Invalid input: decimal numbers are not supported, only integers"
2207
+ );
2208
+ const value = _CairoUint8.__processData(data);
2209
+ assert(
2210
+ value >= RANGE_U8.min && value <= RANGE_U8.max,
2211
+ `Value is out of u8 range [${RANGE_U8.min}, ${RANGE_U8.max}]`
2212
+ );
2213
+ }
2214
+ static is(data) {
2215
+ try {
2216
+ _CairoUint8.validate(data);
2217
+ return true;
2218
+ } catch {
2219
+ return false;
2220
+ }
2221
+ }
2222
+ /**
2223
+ * Check if provided abi type is this data type
2224
+ */
2225
+ static isAbiType(abiType) {
2226
+ return abiType === _CairoUint8.abiSelector;
2227
+ }
2228
+ static factoryFromApiResponse(responseIterator) {
2229
+ return new _CairoUint8(getNext(responseIterator));
2230
+ }
2231
+ };
2232
+
2233
+ // src/utils/cairoDataTypes/uint16.ts
2234
+ var CairoUint16 = class _CairoUint16 {
2235
+ data;
2236
+ static abiSelector = "core::integer::u16";
2237
+ constructor(data) {
2238
+ _CairoUint16.validate(data);
2239
+ this.data = _CairoUint16.__processData(data);
2240
+ }
2241
+ static __processData(data) {
2242
+ if (isString(data) && isText(data)) {
2243
+ return utf8ToBigInt(data);
2244
+ }
2245
+ return BigInt(data);
2246
+ }
2247
+ toApiRequest() {
2248
+ return addCompiledFlag([this.toHexString()]);
2249
+ }
2250
+ toBigInt() {
2251
+ return this.data;
2252
+ }
2253
+ decodeUtf8() {
2254
+ return new TextDecoder().decode(bigIntToUint8Array(this.data));
2255
+ }
2256
+ toHexString() {
2257
+ return addHexPrefix(this.toBigInt().toString(16));
2258
+ }
2259
+ static validate(data) {
2260
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2261
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2262
+ assert(
2263
+ !isNumber(data) || Number.isInteger(data),
2264
+ "Invalid input: decimal numbers are not supported, only integers"
2265
+ );
2266
+ const value = _CairoUint16.__processData(data);
2267
+ assert(
2268
+ value >= RANGE_U16.min && value <= RANGE_U16.max,
2269
+ `Value is out of u16 range [${RANGE_U16.min}, ${RANGE_U16.max}]`
2270
+ );
2271
+ }
2272
+ static is(data) {
2273
+ try {
2274
+ _CairoUint16.validate(data);
2275
+ return true;
2276
+ } catch {
2277
+ return false;
2278
+ }
2279
+ }
2280
+ /**
2281
+ * Check if provided abi type is this data type
2282
+ */
2283
+ static isAbiType(abiType) {
2284
+ return abiType === _CairoUint16.abiSelector;
2285
+ }
2286
+ static factoryFromApiResponse(responseIterator) {
2287
+ return new _CairoUint16(getNext(responseIterator));
2288
+ }
2289
+ };
2290
+
2291
+ // src/utils/cairoDataTypes/uint64.ts
2292
+ var CairoUint64 = class _CairoUint64 {
2293
+ data;
2294
+ static abiSelector = "core::integer::u64";
2295
+ constructor(data) {
2296
+ _CairoUint64.validate(data);
2297
+ this.data = _CairoUint64.__processData(data);
2298
+ }
2299
+ static __processData(data) {
2300
+ if (isString(data) && isText(data)) {
2301
+ return utf8ToBigInt(data);
2302
+ }
2303
+ return BigInt(data);
2304
+ }
2305
+ toApiRequest() {
2306
+ return addCompiledFlag([this.toHexString()]);
2307
+ }
2308
+ toBigInt() {
2309
+ return this.data;
2310
+ }
2311
+ decodeUtf8() {
2312
+ return new TextDecoder().decode(bigIntToUint8Array(this.data));
2313
+ }
2314
+ toHexString() {
2315
+ return addHexPrefix(this.toBigInt().toString(16));
2316
+ }
2317
+ static validate(data) {
2318
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2319
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2320
+ assert(
2321
+ !isNumber(data) || Number.isInteger(data),
2322
+ "Invalid input: decimal numbers are not supported, only integers"
2323
+ );
2324
+ const value = _CairoUint64.__processData(data);
2325
+ assert(
2326
+ value >= RANGE_U64.min && value <= RANGE_U64.max,
2327
+ `Value is out of u64 range [${RANGE_U64.min}, ${RANGE_U64.max}]`
2328
+ );
2329
+ }
2330
+ static is(data) {
2331
+ try {
2332
+ _CairoUint64.validate(data);
2333
+ return true;
2334
+ } catch {
2335
+ return false;
2336
+ }
2337
+ }
2338
+ /**
2339
+ * Check if provided abi type is this data type
2340
+ */
2341
+ static isAbiType(abiType) {
2342
+ return abiType === _CairoUint64.abiSelector;
2343
+ }
2344
+ static factoryFromApiResponse(responseIterator) {
2345
+ return new _CairoUint64(getNext(responseIterator));
2346
+ }
2347
+ };
2348
+
2349
+ // src/utils/cairoDataTypes/uint96.ts
2350
+ var CairoUint96 = class _CairoUint96 {
2351
+ data;
2352
+ static abiSelector = "core::integer::u96";
2353
+ constructor(data) {
2354
+ _CairoUint96.validate(data);
2355
+ this.data = _CairoUint96.__processData(data);
2356
+ }
2357
+ static __processData(data) {
2358
+ if (isString(data) && isText(data)) {
2359
+ return utf8ToBigInt(data);
2360
+ }
2361
+ return BigInt(data);
2362
+ }
2363
+ toApiRequest() {
2364
+ return addCompiledFlag([this.toHexString()]);
2365
+ }
2366
+ toBigInt() {
2367
+ return this.data;
2368
+ }
2369
+ decodeUtf8() {
2370
+ return new TextDecoder().decode(bigIntToUint8Array(this.data));
2371
+ }
2372
+ toHexString() {
2373
+ return addHexPrefix(this.toBigInt().toString(16));
2374
+ }
2375
+ static validate(data) {
2376
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2377
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2378
+ assert(
2379
+ !isNumber(data) || Number.isInteger(data),
2380
+ "Invalid input: decimal numbers are not supported, only integers"
2381
+ );
2382
+ const value = _CairoUint96.__processData(data);
2383
+ assert(
2384
+ value >= RANGE_U96.min && value <= RANGE_U96.max,
2385
+ `Value is out of u96 range [${RANGE_U96.min}, ${RANGE_U96.max}]`
2386
+ );
2387
+ }
2388
+ static is(data) {
2389
+ try {
2390
+ _CairoUint96.validate(data);
2391
+ return true;
2392
+ } catch {
2393
+ return false;
2394
+ }
2395
+ }
2396
+ /**
2397
+ * Check if provided abi type is this data type
2398
+ */
2399
+ static isAbiType(abiType) {
2400
+ return abiType === _CairoUint96.abiSelector;
2401
+ }
2402
+ static factoryFromApiResponse(responseIterator) {
2403
+ return new _CairoUint96(getNext(responseIterator));
2404
+ }
2405
+ };
2406
+
2407
+ // src/utils/cairoDataTypes/uint128.ts
2408
+ var CairoUint128 = class _CairoUint128 {
2409
+ data;
2410
+ static abiSelector = "core::integer::u128";
2411
+ constructor(data) {
2412
+ _CairoUint128.validate(data);
2413
+ this.data = _CairoUint128.__processData(data);
2414
+ }
2415
+ static __processData(data) {
2416
+ if (isString(data) && isText(data)) {
2417
+ return utf8ToBigInt(data);
2418
+ }
2419
+ return BigInt(data);
2420
+ }
2421
+ toApiRequest() {
2422
+ return addCompiledFlag([this.toHexString()]);
2423
+ }
2424
+ toBigInt() {
2425
+ return this.data;
2426
+ }
2427
+ decodeUtf8() {
2428
+ return new TextDecoder().decode(bigIntToUint8Array(this.data));
2429
+ }
2430
+ toHexString() {
2431
+ return addHexPrefix(this.toBigInt().toString(16));
2432
+ }
2433
+ static validate(data) {
2434
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2435
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2436
+ assert(
2437
+ !isNumber(data) || Number.isInteger(data),
2438
+ "Invalid input: decimal numbers are not supported, only integers"
2439
+ );
2440
+ const value = _CairoUint128.__processData(data);
2441
+ assert(
2442
+ value >= RANGE_U128.min && value <= RANGE_U128.max,
2443
+ `Value is out of u128 range [${RANGE_U128.min}, ${RANGE_U128.max}]`
2444
+ );
2445
+ }
2446
+ static is(data) {
2447
+ try {
2448
+ _CairoUint128.validate(data);
2449
+ return true;
2450
+ } catch {
2451
+ return false;
2452
+ }
2453
+ }
2454
+ /**
2455
+ * Check if provided abi type is this data type
2456
+ */
2457
+ static isAbiType(abiType) {
2458
+ return abiType === _CairoUint128.abiSelector;
2459
+ }
2460
+ static factoryFromApiResponse(responseIterator) {
2461
+ return new _CairoUint128(getNext(responseIterator));
2462
+ }
2463
+ };
2464
+
2465
+ // src/utils/cairoDataTypes/int8.ts
2466
+ var CairoInt8 = class _CairoInt8 {
2467
+ data;
2468
+ static abiSelector = "core::integer::i8";
2469
+ constructor(data) {
2470
+ _CairoInt8.validate(data);
2471
+ this.data = _CairoInt8.__processData(data);
2472
+ }
2473
+ static __processData(data) {
2474
+ if (isString(data) && isText(data)) {
2475
+ return utf8ToBigInt(data);
2476
+ }
2477
+ return BigInt(data);
2478
+ }
2479
+ toApiRequest() {
2480
+ return addCompiledFlag([this.toHexString()]);
2481
+ }
2482
+ toBigInt() {
2483
+ return this.data;
2484
+ }
2485
+ decodeUtf8() {
2486
+ return new TextDecoder().decode(
2487
+ bigIntToUint8Array(this.data >= 0n ? this.data : 256n + this.data)
2488
+ );
2489
+ }
2490
+ /**
2491
+ * For negative values field element representation as positive hex string.
2492
+ * @returns cairo field arithmetic hex string
2493
+ */
2494
+ toHexString() {
2495
+ const value = this.toBigInt();
2496
+ if (value < 0n) {
2497
+ const fieldElement = PRIME + value;
2498
+ return addHexPrefix(fieldElement.toString(16));
2499
+ }
2500
+ return addHexPrefix(value.toString(16));
2501
+ }
2502
+ static validate(data) {
2503
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2504
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2505
+ assert(
2506
+ !isNumber(data) || Number.isInteger(data),
2507
+ "Invalid input: decimal numbers are not supported, only integers"
2508
+ );
2509
+ const value = _CairoInt8.__processData(data);
2510
+ assert(
2511
+ value >= RANGE_I8.min && value <= RANGE_I8.max,
2512
+ `Value is out of i8 range [${RANGE_I8.min}, ${RANGE_I8.max}]`
2513
+ );
2514
+ }
2515
+ static is(data) {
2516
+ try {
2517
+ _CairoInt8.validate(data);
2518
+ return true;
2519
+ } catch {
2520
+ return false;
2521
+ }
2522
+ }
2523
+ /**
2524
+ * Check if provided abi type is this data type
2525
+ */
2526
+ static isAbiType(abiType) {
2527
+ return abiType === _CairoInt8.abiSelector;
2528
+ }
2529
+ static factoryFromApiResponse(responseIterator) {
2530
+ const response = getNext(responseIterator);
2531
+ const value = BigInt(response);
2532
+ const signedValue = value > PRIME / 2n ? value - PRIME : value;
2533
+ return new _CairoInt8(signedValue);
2534
+ }
2535
+ };
2536
+
2537
+ // src/utils/cairoDataTypes/int16.ts
2538
+ var CairoInt16 = class _CairoInt16 {
2539
+ data;
2540
+ static abiSelector = "core::integer::i16";
2541
+ constructor(data) {
2542
+ _CairoInt16.validate(data);
2543
+ this.data = _CairoInt16.__processData(data);
2544
+ }
2545
+ static __processData(data) {
2546
+ if (isString(data) && isText(data)) {
2547
+ return utf8ToBigInt(data);
2548
+ }
2549
+ return BigInt(data);
2550
+ }
2551
+ toApiRequest() {
2552
+ return addCompiledFlag([this.toHexString()]);
2553
+ }
2554
+ toBigInt() {
2555
+ return this.data;
2556
+ }
2557
+ decodeUtf8() {
2558
+ return new TextDecoder().decode(
2559
+ bigIntToUint8Array(this.data >= 0n ? this.data : 65536n + this.data)
2560
+ );
2561
+ }
2562
+ /**
2563
+ * For negative values field element representation as positive hex string.
2564
+ * @returns cairo field arithmetic hex string
2565
+ */
2566
+ toHexString() {
2567
+ const value = this.toBigInt();
2568
+ if (value < 0n) {
2569
+ const fieldElement = PRIME + value;
2570
+ return addHexPrefix(fieldElement.toString(16));
2571
+ }
2572
+ return addHexPrefix(value.toString(16));
2573
+ }
2574
+ static validate(data) {
2575
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2576
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2577
+ assert(
2578
+ !isNumber(data) || Number.isInteger(data),
2579
+ "Invalid input: decimal numbers are not supported, only integers"
2580
+ );
2581
+ const value = _CairoInt16.__processData(data);
2582
+ assert(
2583
+ value >= RANGE_I16.min && value <= RANGE_I16.max,
2584
+ `Value is out of i16 range [${RANGE_I16.min}, ${RANGE_I16.max}]`
2585
+ );
2586
+ }
2587
+ static is(data) {
2588
+ try {
2589
+ _CairoInt16.validate(data);
2590
+ return true;
2591
+ } catch {
2592
+ return false;
2593
+ }
2594
+ }
2595
+ /**
2596
+ * Check if provided abi type is this data type
2597
+ */
2598
+ static isAbiType(abiType) {
2599
+ return abiType === _CairoInt16.abiSelector;
2600
+ }
2601
+ static factoryFromApiResponse(responseIterator) {
2602
+ const response = getNext(responseIterator);
2603
+ const value = BigInt(response);
2604
+ const signedValue = value > PRIME / 2n ? value - PRIME : value;
2605
+ return new _CairoInt16(signedValue);
2606
+ }
2607
+ };
2608
+
2609
+ // src/utils/cairoDataTypes/int32.ts
2610
+ var CairoInt32 = class _CairoInt32 {
2611
+ data;
2612
+ static abiSelector = "core::integer::i32";
2613
+ constructor(data) {
2614
+ _CairoInt32.validate(data);
2615
+ this.data = _CairoInt32.__processData(data);
2616
+ }
2617
+ static __processData(data) {
2618
+ if (isString(data) && isText(data)) {
2619
+ return utf8ToBigInt(data);
2620
+ }
2621
+ return BigInt(data);
2622
+ }
2623
+ toApiRequest() {
2624
+ return addCompiledFlag([this.toHexString()]);
2625
+ }
2626
+ toBigInt() {
2627
+ return this.data;
2628
+ }
2629
+ decodeUtf8() {
2630
+ return new TextDecoder().decode(
2631
+ bigIntToUint8Array(this.data >= 0n ? this.data : 4294967296n + this.data)
2632
+ );
2633
+ }
2634
+ /**
2635
+ * For negative values field element representation as positive hex string.
2636
+ * @returns cairo field arithmetic hex string
2637
+ */
2638
+ toHexString() {
2639
+ const value = this.toBigInt();
2640
+ if (value < 0n) {
2641
+ const fieldElement = PRIME + value;
2642
+ return addHexPrefix(fieldElement.toString(16));
2643
+ }
2644
+ return addHexPrefix(value.toString(16));
2645
+ }
2646
+ static validate(data) {
2647
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2648
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2649
+ assert(
2650
+ !isNumber(data) || Number.isInteger(data),
2651
+ "Invalid input: decimal numbers are not supported, only integers"
2652
+ );
2653
+ const value = _CairoInt32.__processData(data);
2654
+ assert(
2655
+ value >= RANGE_I32.min && value <= RANGE_I32.max,
2656
+ `Value is out of i32 range [${RANGE_I32.min}, ${RANGE_I32.max}]`
2657
+ );
2658
+ }
2659
+ static is(data) {
2660
+ try {
2661
+ _CairoInt32.validate(data);
2662
+ return true;
2663
+ } catch {
2664
+ return false;
2665
+ }
2666
+ }
2667
+ /**
2668
+ * Check if provided abi type is this data type
2669
+ */
2670
+ static isAbiType(abiType) {
2671
+ return abiType === _CairoInt32.abiSelector;
2672
+ }
2673
+ static factoryFromApiResponse(responseIterator) {
2674
+ const response = getNext(responseIterator);
2675
+ const value = BigInt(response);
2676
+ const signedValue = value > PRIME / 2n ? value - PRIME : value;
2677
+ return new _CairoInt32(signedValue);
2678
+ }
2679
+ };
2680
+
2681
+ // src/utils/cairoDataTypes/int64.ts
2682
+ var CairoInt64 = class _CairoInt64 {
2683
+ data;
2684
+ static abiSelector = "core::integer::i64";
2685
+ constructor(data) {
2686
+ _CairoInt64.validate(data);
2687
+ this.data = _CairoInt64.__processData(data);
2688
+ }
2689
+ static __processData(data) {
2690
+ if (isString(data) && isText(data)) {
2691
+ return utf8ToBigInt(data);
2692
+ }
2693
+ return BigInt(data);
2694
+ }
2695
+ toApiRequest() {
2696
+ return addCompiledFlag([this.toHexString()]);
2697
+ }
2698
+ toBigInt() {
2699
+ return this.data;
2700
+ }
2701
+ decodeUtf8() {
2702
+ return new TextDecoder().decode(
2703
+ bigIntToUint8Array(this.data >= 0n ? this.data : 2n ** 64n + this.data)
2704
+ );
2705
+ }
2706
+ /**
2707
+ * For negative values field element representation as positive hex string.
2708
+ * @returns cairo field arithmetic hex string
2709
+ */
2710
+ toHexString() {
2711
+ const value = this.toBigInt();
2712
+ if (value < 0n) {
2713
+ const fieldElement = PRIME + value;
2714
+ return addHexPrefix(fieldElement.toString(16));
2715
+ }
2716
+ return addHexPrefix(value.toString(16));
2717
+ }
2718
+ static validate(data) {
2719
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2720
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2721
+ assert(
2722
+ !isNumber(data) || Number.isInteger(data),
2723
+ "Invalid input: decimal numbers are not supported, only integers"
2724
+ );
2725
+ const value = _CairoInt64.__processData(data);
2726
+ assert(
2727
+ value >= RANGE_I64.min && value <= RANGE_I64.max,
2728
+ `Value is out of i64 range [${RANGE_I64.min}, ${RANGE_I64.max}]`
2729
+ );
2730
+ }
2731
+ static is(data) {
2732
+ try {
2733
+ _CairoInt64.validate(data);
2734
+ return true;
2735
+ } catch {
2736
+ return false;
2737
+ }
2738
+ }
2739
+ /**
2740
+ * Check if provided abi type is this data type
2741
+ */
2742
+ static isAbiType(abiType) {
2743
+ return abiType === _CairoInt64.abiSelector;
2744
+ }
2745
+ static factoryFromApiResponse(responseIterator) {
2746
+ const response = getNext(responseIterator);
2747
+ const value = BigInt(response);
2748
+ const signedValue = value > PRIME / 2n ? value - PRIME : value;
2749
+ return new _CairoInt64(signedValue);
2750
+ }
2751
+ };
2752
+
2753
+ // src/utils/cairoDataTypes/int128.ts
2754
+ var CairoInt128 = class _CairoInt128 {
2755
+ data;
2756
+ static abiSelector = "core::integer::i128";
2757
+ constructor(data) {
2758
+ _CairoInt128.validate(data);
2759
+ this.data = _CairoInt128.__processData(data);
2760
+ }
2761
+ static __processData(data) {
2762
+ if (isString(data) && isText(data)) {
2763
+ return utf8ToBigInt(data);
2764
+ }
2765
+ return BigInt(data);
2766
+ }
2767
+ toApiRequest() {
2768
+ return addCompiledFlag([this.toHexString()]);
2769
+ }
2770
+ toBigInt() {
2771
+ return this.data;
2772
+ }
2773
+ decodeUtf8() {
2774
+ return new TextDecoder().decode(
2775
+ bigIntToUint8Array(this.data >= 0n ? this.data : 2n ** 128n + this.data)
2776
+ );
2777
+ }
2778
+ /**
2779
+ * For negative values field element representation as positive hex string.
2780
+ * @returns cairo field arithmetic hex string
2781
+ */
2782
+ toHexString() {
2783
+ const value = this.toBigInt();
2784
+ if (value < 0n) {
2785
+ const fieldElement = PRIME + value;
2786
+ return addHexPrefix(fieldElement.toString(16));
2787
+ }
2788
+ return addHexPrefix(value.toString(16));
2789
+ }
2790
+ static validate(data) {
2791
+ assert(data !== null && data !== void 0, "Invalid input: null or undefined");
2792
+ assert(!isObject(data) && !Array.isArray(data), "Invalid input: objects are not supported");
2793
+ assert(
2794
+ !isNumber(data) || Number.isInteger(data),
2795
+ "Invalid input: decimal numbers are not supported, only integers"
2796
+ );
2797
+ const value = _CairoInt128.__processData(data);
2798
+ assert(
2799
+ value >= RANGE_I128.min && value <= RANGE_I128.max,
2800
+ `Value is out of i128 range [${RANGE_I128.min}, ${RANGE_I128.max}]`
2801
+ );
2802
+ }
2803
+ static is(data) {
2804
+ try {
2805
+ _CairoInt128.validate(data);
2806
+ return true;
2807
+ } catch {
2808
+ return false;
2809
+ }
2810
+ }
2811
+ /**
2812
+ * Check if provided abi type is this data type
2813
+ */
2814
+ static isAbiType(abiType) {
2815
+ return abiType === _CairoInt128.abiSelector;
2816
+ }
2817
+ static factoryFromApiResponse(responseIterator) {
2818
+ const response = getNext(responseIterator);
2819
+ const value = BigInt(response);
2820
+ const signedValue = value > PRIME / 2n ? value - PRIME : value;
2821
+ return new _CairoInt128(signedValue);
2822
+ }
2823
+ };
2824
+
2825
+ // src/utils/calldata/parser/parsingStrategy.ts
2826
+ var hdParsingStrategy = {
2827
+ // TODO: provjeri svi request parseri stvaraju array, dali je to ok sa requstParserom
2828
+ request: {
2829
+ [CairoBytes31.abiSelector]: (val) => {
2830
+ return new CairoBytes31(val).toApiRequest();
2831
+ },
2832
+ [CairoByteArray.abiSelector]: (val) => {
2833
+ return new CairoByteArray(val).toApiRequest();
2834
+ },
2835
+ [CairoFelt252.abiSelector]: (val) => {
2836
+ return new CairoFelt252(val).toApiRequest();
2837
+ },
2838
+ [CairoUint256.abiSelector]: (val) => {
2839
+ return new CairoUint256(val).toApiRequest();
2840
+ },
2841
+ [CairoUint512.abiSelector]: (val) => {
2842
+ return new CairoUint512(val).toApiRequest();
2843
+ },
2844
+ [CairoUint8.abiSelector]: (val) => {
2845
+ return new CairoUint8(val).toApiRequest();
2846
+ },
2847
+ [CairoUint16.abiSelector]: (val) => {
2848
+ return new CairoUint16(val).toApiRequest();
2849
+ },
2850
+ [CairoUint64.abiSelector]: (val) => {
2851
+ return new CairoUint64(val).toApiRequest();
2852
+ },
2853
+ [CairoUint96.abiSelector]: (val) => {
2854
+ return new CairoUint96(val).toApiRequest();
2855
+ },
2856
+ [CairoUint128.abiSelector]: (val) => {
2857
+ return new CairoUint128(val).toApiRequest();
2858
+ },
2859
+ [CairoInt8.abiSelector]: (val) => {
2860
+ return new CairoInt8(val).toApiRequest();
2861
+ },
2862
+ [CairoInt16.abiSelector]: (val) => {
2863
+ return new CairoInt16(val).toApiRequest();
2864
+ },
2865
+ [CairoInt32.abiSelector]: (val) => {
2866
+ return new CairoInt32(val).toApiRequest();
2867
+ },
2868
+ [CairoInt64.abiSelector]: (val) => {
2869
+ return new CairoInt64(val).toApiRequest();
2870
+ },
2871
+ [CairoInt128.abiSelector]: (val) => {
2872
+ return new CairoInt128(val).toApiRequest();
2873
+ }
2874
+ },
2875
+ response: {
2876
+ [CairoBytes31.abiSelector]: (responseIterator) => {
2877
+ return CairoBytes31.factoryFromApiResponse(responseIterator).decodeUtf8();
2878
+ },
2879
+ [CairoByteArray.abiSelector]: (responseIterator) => {
2880
+ return CairoByteArray.factoryFromApiResponse(responseIterator).decodeUtf8();
2881
+ },
2882
+ [CairoFelt252.abiSelector]: (responseIterator) => {
2883
+ return CairoFelt252.factoryFromApiResponse(responseIterator).toBigInt();
2884
+ },
2885
+ [CairoUint256.abiSelector]: (responseIterator) => {
2886
+ return CairoUint256.factoryFromApiResponse(responseIterator).toBigInt();
2887
+ },
2888
+ [CairoUint512.abiSelector]: (responseIterator) => {
2889
+ return CairoUint512.factoryFromApiResponse(responseIterator).toBigInt();
2890
+ },
2891
+ [CairoUint8.abiSelector]: (responseIterator) => {
2892
+ return CairoUint8.factoryFromApiResponse(responseIterator).toBigInt();
2893
+ },
2894
+ [CairoUint16.abiSelector]: (responseIterator) => {
2895
+ return CairoUint16.factoryFromApiResponse(responseIterator).toBigInt();
2896
+ },
2897
+ [CairoUint64.abiSelector]: (responseIterator) => {
2898
+ return CairoUint64.factoryFromApiResponse(responseIterator).toBigInt();
2899
+ },
2900
+ [CairoUint96.abiSelector]: (responseIterator) => {
2901
+ return CairoUint96.factoryFromApiResponse(responseIterator).toBigInt();
2902
+ },
2903
+ [CairoUint128.abiSelector]: (responseIterator) => {
2904
+ return CairoUint128.factoryFromApiResponse(responseIterator).toBigInt();
2905
+ },
2906
+ [CairoInt8.abiSelector]: (responseIterator) => {
2907
+ return CairoInt8.factoryFromApiResponse(responseIterator).toBigInt();
2908
+ },
2909
+ [CairoInt16.abiSelector]: (responseIterator) => {
2910
+ return CairoInt16.factoryFromApiResponse(responseIterator).toBigInt();
2911
+ },
2912
+ [CairoInt32.abiSelector]: (responseIterator) => {
2913
+ return CairoInt32.factoryFromApiResponse(responseIterator).toBigInt();
2914
+ },
2915
+ [CairoInt64.abiSelector]: (responseIterator) => {
2916
+ return CairoInt64.factoryFromApiResponse(responseIterator).toBigInt();
2917
+ },
2918
+ [CairoInt128.abiSelector]: (responseIterator) => {
2919
+ return CairoInt128.factoryFromApiResponse(responseIterator).toBigInt();
2920
+ }
2921
+ }
2922
+ };
2923
+ var fastParsingStrategy = {
2924
+ request: {
2925
+ [CairoBytes31.abiSelector]: (val) => {
2926
+ return new CairoBytes31(val).toApiRequest();
2927
+ },
2928
+ [CairoByteArray.abiSelector]: (val) => {
2929
+ return new CairoByteArray(val).toApiRequest();
2930
+ },
2931
+ [CairoFelt252.abiSelector]: (val) => {
2932
+ return felt(val);
2933
+ },
2934
+ [CairoUint256.abiSelector]: (val) => {
2935
+ return new CairoUint256(val).toApiRequest();
2936
+ },
2937
+ [CairoUint512.abiSelector]: (val) => {
2938
+ return new CairoUint512(val).toApiRequest();
2939
+ },
2940
+ [CairoUint8.abiSelector]: (val) => {
2941
+ return felt(val);
2942
+ },
2943
+ [CairoUint16.abiSelector]: (val) => {
2944
+ return felt(val);
2945
+ },
2946
+ [CairoUint64.abiSelector]: (val) => {
2947
+ return felt(val);
2948
+ },
2949
+ [CairoUint96.abiSelector]: (val) => {
2950
+ return felt(val);
2951
+ },
2952
+ [CairoUint128.abiSelector]: (val) => {
2953
+ return felt(val);
2954
+ },
2955
+ [CairoInt8.abiSelector]: (val) => {
2956
+ return new CairoInt8(val).toApiRequest();
2957
+ },
2958
+ [CairoInt16.abiSelector]: (val) => {
2959
+ return new CairoInt16(val).toApiRequest();
2960
+ },
2961
+ [CairoInt32.abiSelector]: (val) => {
2962
+ return new CairoInt32(val).toApiRequest();
2963
+ },
2964
+ [CairoInt64.abiSelector]: (val) => {
2965
+ return new CairoInt64(val).toApiRequest();
2966
+ },
2967
+ [CairoInt128.abiSelector]: (val) => {
2968
+ return new CairoInt128(val).toApiRequest();
2969
+ }
2970
+ },
2971
+ response: {
2972
+ [CairoBytes31.abiSelector]: (responseIterator) => {
2973
+ return CairoBytes31.factoryFromApiResponse(responseIterator).decodeUtf8();
2974
+ },
2975
+ [CairoByteArray.abiSelector]: (responseIterator) => {
2976
+ return CairoByteArray.factoryFromApiResponse(responseIterator).decodeUtf8();
2977
+ },
2978
+ [CairoFelt252.abiSelector]: (responseIterator) => {
2979
+ return BigInt(getNext(responseIterator));
2980
+ },
2981
+ [CairoUint256.abiSelector]: (responseIterator) => {
2982
+ return CairoUint256.factoryFromApiResponse(responseIterator).toBigInt();
2983
+ },
2984
+ [CairoUint512.abiSelector]: (responseIterator) => {
2985
+ return CairoUint512.factoryFromApiResponse(responseIterator).toBigInt();
2986
+ },
2987
+ [CairoUint8.abiSelector]: (responseIterator) => {
2988
+ return BigInt(getNext(responseIterator));
2989
+ },
2990
+ [CairoUint16.abiSelector]: (responseIterator) => {
2991
+ return BigInt(getNext(responseIterator));
2992
+ },
2993
+ [CairoUint64.abiSelector]: (responseIterator) => {
2994
+ return BigInt(getNext(responseIterator));
2995
+ },
2996
+ [CairoUint96.abiSelector]: (responseIterator) => {
2997
+ return BigInt(getNext(responseIterator));
2998
+ },
2999
+ [CairoUint128.abiSelector]: (responseIterator) => {
3000
+ return BigInt(getNext(responseIterator));
3001
+ },
3002
+ [CairoInt8.abiSelector]: (responseIterator) => {
3003
+ return BigInt(getNext(responseIterator));
3004
+ },
3005
+ [CairoInt16.abiSelector]: (responseIterator) => {
3006
+ return BigInt(getNext(responseIterator));
3007
+ },
3008
+ [CairoInt32.abiSelector]: (responseIterator) => {
3009
+ return BigInt(getNext(responseIterator));
3010
+ },
3011
+ [CairoInt64.abiSelector]: (responseIterator) => {
3012
+ return BigInt(getNext(responseIterator));
3013
+ },
3014
+ [CairoInt128.abiSelector]: (responseIterator) => {
3015
+ return BigInt(getNext(responseIterator));
3016
+ }
3017
+ }
3018
+ };
3019
+
3020
+ // src/utils/calldata/parser/parser-0-1.1.0.ts
3021
+ var AbiParser1 = class {
3022
+ abi;
3023
+ parsingStrategy;
3024
+ constructor(abi, parsingStrategy) {
3025
+ this.abi = abi;
3026
+ this.parsingStrategy = parsingStrategy || fastParsingStrategy;
3027
+ }
3028
+ getRequestParser(abiType) {
3029
+ if (this.parsingStrategy.request[abiType]) {
3030
+ return this.parsingStrategy.request[abiType];
3031
+ }
3032
+ throw new Error(`Parser for ${abiType} not found`);
3033
+ }
3034
+ getResponseParser(abiType) {
3035
+ if (this.parsingStrategy.response[abiType]) {
3036
+ return this.parsingStrategy.response[abiType];
3037
+ }
3038
+ throw new Error(`Parser for ${abiType} not found`);
1490
3039
  }
1491
3040
  /**
1492
3041
  * abi method inputs length without '_len' inputs
@@ -1517,8 +3066,22 @@ var AbiParser1 = class {
1517
3066
  // src/utils/calldata/parser/parser-2.0.0.ts
1518
3067
  var AbiParser2 = class {
1519
3068
  abi;
1520
- constructor(abi) {
3069
+ parsingStrategy;
3070
+ constructor(abi, parsingStrategy) {
1521
3071
  this.abi = abi;
3072
+ this.parsingStrategy = parsingStrategy || fastParsingStrategy;
3073
+ }
3074
+ getRequestParser(abiType) {
3075
+ if (this.parsingStrategy.request[abiType]) {
3076
+ return this.parsingStrategy.request[abiType];
3077
+ }
3078
+ throw new Error(`Parser for ${abiType} not found`);
3079
+ }
3080
+ getResponseParser(abiType) {
3081
+ if (this.parsingStrategy.response[abiType]) {
3082
+ return this.parsingStrategy.response[abiType];
3083
+ }
3084
+ throw new Error(`Parser for ${abiType} not found`);
1522
3085
  }
1523
3086
  /**
1524
3087
  * abi method inputs length
@@ -1551,13 +3114,13 @@ var AbiParser2 = class {
1551
3114
  };
1552
3115
 
1553
3116
  // src/utils/calldata/parser/index.ts
1554
- function createAbiParser(abi) {
3117
+ function createAbiParser(abi, parsingStrategy) {
1555
3118
  const version = getAbiVersion(abi);
1556
3119
  if (version === 0 || version === 1) {
1557
- return new AbiParser1(abi);
3120
+ return new AbiParser1(abi, parsingStrategy);
1558
3121
  }
1559
3122
  if (version === 2) {
1560
- return new AbiParser2(abi);
3123
+ return new AbiParser2(abi, parsingStrategy);
1561
3124
  }
1562
3125
  throw Error(`Unsupported ABI version ${version}`);
1563
3126
  }
@@ -1684,16 +3247,17 @@ var CairoFixedArray = class _CairoFixedArray {
1684
3247
  `The type ${arrayType} do not includes any content type. Needs [type; length].`
1685
3248
  );
1686
3249
  }
3250
+ let arraySize;
1687
3251
  try {
1688
- _CairoFixedArray.getFixedArraySize(arrayType);
3252
+ arraySize = _CairoFixedArray.getFixedArraySize(arrayType);
1689
3253
  } catch {
1690
3254
  throw new Error(
1691
3255
  `The type ${arrayType} type do not includes any length. Needs [type; length].`
1692
3256
  );
1693
3257
  }
1694
3258
  assert(
1695
- _CairoFixedArray.getFixedArraySize(arrayType) === content.length,
1696
- `The ABI type ${arrayType} is expecting ${_CairoFixedArray.getFixedArraySize(arrayType)} items. ${content.length} items provided.`
3259
+ arraySize === content.length,
3260
+ `The ABI type ${arrayType} is expecting ${arraySize} items. ${content.length} items provided.`
1697
3261
  );
1698
3262
  this.content = content;
1699
3263
  this.arrayType = arrayType;
@@ -1790,6 +3354,7 @@ var CairoFixedArray = class _CairoFixedArray {
1790
3354
  }
1791
3355
  /**
1792
3356
  * Checks if the given Cairo type is a fixed-array type.
3357
+ * structure: [string; number]
1793
3358
  *
1794
3359
  * @param {string} type - The type to check.
1795
3360
  * @returns - `true` if the type is a fixed array type, `false` otherwise.
@@ -1834,7 +3399,7 @@ function orderPropsByAbi(unorderedObject, abiOfObject, structs, enums) {
1834
3399
  if (isTypeNonZero(abiType)) {
1835
3400
  return unorderedItem;
1836
3401
  }
1837
- if (isTypeByteArray(abiType)) {
3402
+ if (CairoByteArray.isAbiType(abiType)) {
1838
3403
  return unorderedItem;
1839
3404
  }
1840
3405
  if (isTypeU96(abiType)) {
@@ -1992,14 +3557,38 @@ function orderPropsByAbi(unorderedObject, abiOfObject, structs, enums) {
1992
3557
  }
1993
3558
 
1994
3559
  // src/utils/calldata/requestParser.ts
1995
- function parseBaseTypes(type, val) {
3560
+ function parseBaseTypes({
3561
+ type,
3562
+ val,
3563
+ parser
3564
+ }) {
1996
3565
  switch (true) {
1997
3566
  case CairoUint256.isAbiType(type):
1998
- return new CairoUint256(val).toApiRequest();
3567
+ return parser.getRequestParser(type)(val);
1999
3568
  case CairoUint512.isAbiType(type):
2000
- return new CairoUint512(val).toApiRequest();
2001
- case isTypeBytes31(type):
2002
- return encodeShortString(val.toString());
3569
+ return parser.getRequestParser(type)(val);
3570
+ case CairoUint8.isAbiType(type):
3571
+ return parser.getRequestParser(type)(val);
3572
+ case CairoUint16.isAbiType(type):
3573
+ return parser.getRequestParser(type)(val);
3574
+ case CairoUint64.isAbiType(type):
3575
+ return parser.getRequestParser(type)(val);
3576
+ case CairoUint96.isAbiType(type):
3577
+ return parser.getRequestParser(type)(val);
3578
+ case CairoUint128.isAbiType(type):
3579
+ return parser.getRequestParser(type)(val);
3580
+ case CairoInt8.isAbiType(type):
3581
+ return parser.getRequestParser(type)(val);
3582
+ case CairoInt16.isAbiType(type):
3583
+ return parser.getRequestParser(type)(val);
3584
+ case CairoInt32.isAbiType(type):
3585
+ return parser.getRequestParser(type)(val);
3586
+ case CairoInt64.isAbiType(type):
3587
+ return parser.getRequestParser(type)(val);
3588
+ case CairoInt128.isAbiType(type):
3589
+ return parser.getRequestParser(type)(val);
3590
+ case CairoBytes31.isAbiType(type):
3591
+ return parser.getRequestParser(type)(val);
2003
3592
  case isTypeSecp256k1Point(type): {
2004
3593
  const pubKeyETH = removeHexPrefix(toHex(val)).padStart(128, "0");
2005
3594
  const pubKeyETHy = uint256(addHexPrefix(pubKeyETH.slice(-64)));
@@ -2012,7 +3601,7 @@ function parseBaseTypes(type, val) {
2012
3601
  ];
2013
3602
  }
2014
3603
  default:
2015
- return felt(val);
3604
+ return parser.getRequestParser(CairoFelt252.abiSelector)(val);
2016
3605
  }
2017
3606
  }
2018
3607
  function parseTuple(element, typeStr) {
@@ -2032,16 +3621,13 @@ function parseTuple(element, typeStr) {
2032
3621
  };
2033
3622
  });
2034
3623
  }
2035
- function parseByteArray(element) {
2036
- const myByteArray = byteArrayFromString(element);
2037
- return [
2038
- myByteArray.data.length.toString(),
2039
- ...myByteArray.data.map((bn) => bn.toString()),
2040
- myByteArray.pending_word.toString(),
2041
- myByteArray.pending_word_len.toString()
2042
- ];
2043
- }
2044
- function parseCalldataValue(element, type, structs, enums) {
3624
+ function parseCalldataValue({
3625
+ element,
3626
+ type,
3627
+ structs,
3628
+ enums,
3629
+ parser
3630
+ }) {
2045
3631
  if (element === void 0) {
2046
3632
  throw Error(`Missing parameter for type ${type}`);
2047
3633
  }
@@ -2061,7 +3647,9 @@ function parseCalldataValue(element, type, structs, enums) {
2061
3647
  throw new Error(`ABI type ${type}: not an Array representing a cairo.fixedArray() provided.`);
2062
3648
  }
2063
3649
  return values.reduce((acc, it) => {
2064
- return acc.concat(parseCalldataValue(it, arrayType, structs, enums));
3650
+ return acc.concat(
3651
+ parseCalldataValue({ element: it, type: arrayType, structs, enums, parser })
3652
+ );
2065
3653
  }, []);
2066
3654
  }
2067
3655
  if (Array.isArray(element)) {
@@ -2069,37 +3657,51 @@ function parseCalldataValue(element, type, structs, enums) {
2069
3657
  result.push(felt(element.length));
2070
3658
  const arrayType = getArrayType(type);
2071
3659
  return element.reduce((acc, it) => {
2072
- return acc.concat(parseCalldataValue(it, arrayType, structs, enums));
3660
+ return acc.concat(
3661
+ parseCalldataValue({ element: it, type: arrayType, structs, enums, parser })
3662
+ );
2073
3663
  }, result);
2074
3664
  }
3665
+ if (CairoUint256.isAbiType(type)) {
3666
+ return parser.getRequestParser(type)(element);
3667
+ }
3668
+ if (CairoUint512.isAbiType(type)) {
3669
+ return parser.getRequestParser(type)(element);
3670
+ }
2075
3671
  if (structs[type] && structs[type].members.length) {
2076
- if (CairoUint256.isAbiType(type)) {
2077
- return new CairoUint256(element).toApiRequest();
3672
+ if (isTypeEthAddress(type)) {
3673
+ return parseBaseTypes({ type, val: element, parser });
2078
3674
  }
2079
- if (CairoUint512.isAbiType(type)) {
2080
- return new CairoUint512(element).toApiRequest();
3675
+ if (CairoByteArray.isAbiType(type)) {
3676
+ return parser.getRequestParser(type)(element);
2081
3677
  }
2082
- if (isTypeEthAddress(type)) return parseBaseTypes(type, element);
2083
- if (isTypeByteArray(type)) return parseByteArray(element);
2084
3678
  const { members } = structs[type];
2085
3679
  const subElement = element;
2086
3680
  return members.reduce((acc, it) => {
2087
- return acc.concat(parseCalldataValue(subElement[it.name], it.type, structs, enums));
3681
+ return acc.concat(
3682
+ parseCalldataValue({
3683
+ element: subElement[it.name],
3684
+ type: it.type,
3685
+ structs,
3686
+ enums,
3687
+ parser
3688
+ })
3689
+ );
2088
3690
  }, []);
2089
3691
  }
2090
3692
  if (isTypeTuple(type)) {
2091
3693
  const tupled = parseTuple(element, type);
2092
3694
  return tupled.reduce((acc, it) => {
2093
- const parsedData = parseCalldataValue(it.element, it.type, structs, enums);
3695
+ const parsedData = parseCalldataValue({
3696
+ element: it.element,
3697
+ type: it.type,
3698
+ structs,
3699
+ enums,
3700
+ parser
3701
+ });
2094
3702
  return acc.concat(parsedData);
2095
3703
  }, []);
2096
3704
  }
2097
- if (CairoUint256.isAbiType(type)) {
2098
- return new CairoUint256(element).toApiRequest();
2099
- }
2100
- if (CairoUint512.isAbiType(type)) {
2101
- return new CairoUint512(element).toApiRequest();
2102
- }
2103
3705
  if (isTypeEnum(type, enums)) {
2104
3706
  const { variants } = enums[type];
2105
3707
  if (isTypeOption(type)) {
@@ -2113,12 +3715,13 @@ function parseCalldataValue(element, type, structs, enums) {
2113
3715
  if (typeVariantSome === "()") {
2114
3716
  return CairoOptionVariant.Some.toString();
2115
3717
  }
2116
- const parsedParameter2 = parseCalldataValue(
2117
- myOption.unwrap(),
2118
- typeVariantSome,
3718
+ const parsedParameter2 = parseCalldataValue({
3719
+ element: myOption.unwrap(),
3720
+ type: typeVariantSome,
2119
3721
  structs,
2120
- enums
2121
- );
3722
+ enums,
3723
+ parser
3724
+ });
2122
3725
  if (Array.isArray(parsedParameter2)) {
2123
3726
  return [CairoOptionVariant.Some.toString(), ...parsedParameter2];
2124
3727
  }
@@ -2137,12 +3740,13 @@ function parseCalldataValue(element, type, structs, enums) {
2137
3740
  if (typeVariantOk === "()") {
2138
3741
  return CairoResultVariant.Ok.toString();
2139
3742
  }
2140
- const parsedParameter3 = parseCalldataValue(
2141
- myResult.unwrap(),
2142
- typeVariantOk,
3743
+ const parsedParameter3 = parseCalldataValue({
3744
+ element: myResult.unwrap(),
3745
+ type: typeVariantOk,
2143
3746
  structs,
2144
- enums
2145
- );
3747
+ enums,
3748
+ parser
3749
+ });
2146
3750
  if (Array.isArray(parsedParameter3)) {
2147
3751
  return [CairoResultVariant.Ok.toString(), ...parsedParameter3];
2148
3752
  }
@@ -2156,7 +3760,13 @@ function parseCalldataValue(element, type, structs, enums) {
2156
3760
  if (typeVariantErr === "()") {
2157
3761
  return CairoResultVariant.Err.toString();
2158
3762
  }
2159
- const parsedParameter2 = parseCalldataValue(myResult.unwrap(), typeVariantErr, structs, enums);
3763
+ const parsedParameter2 = parseCalldataValue({
3764
+ element: myResult.unwrap(),
3765
+ type: typeVariantErr,
3766
+ structs,
3767
+ enums,
3768
+ parser
3769
+ });
2160
3770
  if (Array.isArray(parsedParameter2)) {
2161
3771
  return [CairoResultVariant.Err.toString(), ...parsedParameter2];
2162
3772
  }
@@ -2173,21 +3783,33 @@ function parseCalldataValue(element, type, structs, enums) {
2173
3783
  if (typeActiveVariant === "()") {
2174
3784
  return numActiveVariant.toString();
2175
3785
  }
2176
- const parsedParameter = parseCalldataValue(myEnum.unwrap(), typeActiveVariant, structs, enums);
3786
+ const parsedParameter = parseCalldataValue({
3787
+ element: myEnum.unwrap(),
3788
+ type: typeActiveVariant,
3789
+ structs,
3790
+ enums,
3791
+ parser
3792
+ });
2177
3793
  if (Array.isArray(parsedParameter)) {
2178
3794
  return [numActiveVariant.toString(), ...parsedParameter];
2179
3795
  }
2180
3796
  return [numActiveVariant.toString(), parsedParameter];
2181
3797
  }
2182
3798
  if (isTypeNonZero(type)) {
2183
- return parseBaseTypes(getArrayType(type), element);
3799
+ return parseBaseTypes({ type: getArrayType(type), val: element, parser });
2184
3800
  }
2185
3801
  if (typeof element === "object") {
2186
3802
  throw Error(`Parameter ${element} do not align with abi parameter ${type}`);
2187
3803
  }
2188
- return parseBaseTypes(type, element);
3804
+ return parseBaseTypes({ type, val: element, parser });
2189
3805
  }
2190
- function parseCalldataField(argsIterator, input, structs, enums) {
3806
+ function parseCalldataField({
3807
+ argsIterator,
3808
+ input,
3809
+ structs,
3810
+ enums,
3811
+ parser
3812
+ }) {
2191
3813
  const { name, type } = input;
2192
3814
  let { value } = argsIterator.next();
2193
3815
  switch (true) {
@@ -2196,7 +3818,7 @@ function parseCalldataField(argsIterator, input, structs, enums) {
2196
3818
  if (!Array.isArray(value) && !(typeof value === "object")) {
2197
3819
  throw Error(`ABI expected parameter ${name} to be an array or an object, got ${value}`);
2198
3820
  }
2199
- return parseCalldataValue(value, input.type, structs, enums);
3821
+ return parseCalldataValue({ element: value, type: input.type, structs, enums, parser });
2200
3822
  // Normal Array
2201
3823
  case isTypeArray(type):
2202
3824
  if (!Array.isArray(value) && !isText(value)) {
@@ -2205,51 +3827,71 @@ function parseCalldataField(argsIterator, input, structs, enums) {
2205
3827
  if (isString(value)) {
2206
3828
  value = splitLongString(value);
2207
3829
  }
2208
- return parseCalldataValue(value, input.type, structs, enums);
3830
+ return parseCalldataValue({ element: value, type: input.type, structs, enums, parser });
2209
3831
  case isTypeNonZero(type):
2210
- return parseBaseTypes(getArrayType(type), value);
3832
+ return parseBaseTypes({ type: getArrayType(type), val: value, parser });
2211
3833
  case isTypeEthAddress(type):
2212
- return parseBaseTypes(type, value);
3834
+ return parseBaseTypes({ type, val: value, parser });
2213
3835
  // Struct or Tuple
2214
3836
  case (isTypeStruct(type, structs) || isTypeTuple(type) || CairoUint256.isAbiType(type)):
2215
- return parseCalldataValue(value, type, structs, enums);
3837
+ return parseCalldataValue({
3838
+ element: value,
3839
+ type,
3840
+ structs,
3841
+ enums,
3842
+ parser
3843
+ });
2216
3844
  // Enums
2217
3845
  case isTypeEnum(type, enums):
2218
- return parseCalldataValue(
2219
- value,
3846
+ return parseCalldataValue({
3847
+ element: value,
2220
3848
  type,
2221
3849
  structs,
2222
- enums
2223
- );
3850
+ enums,
3851
+ parser
3852
+ });
2224
3853
  // Felt or unhandled
2225
3854
  default:
2226
- return parseBaseTypes(type, value);
3855
+ return parseBaseTypes({ type, val: value, parser });
2227
3856
  }
2228
3857
  }
2229
3858
 
2230
3859
  // src/utils/calldata/responseParser.ts
2231
- function parseBaseTypes2(type, it) {
3860
+ function parseBaseTypes2(type, it, parser) {
2232
3861
  let temp;
2233
3862
  switch (true) {
2234
3863
  case isTypeBool(type):
2235
3864
  temp = it.next().value;
2236
3865
  return Boolean(BigInt(temp));
2237
3866
  case CairoUint256.isAbiType(type):
2238
- const low = it.next().value;
2239
- const high = it.next().value;
2240
- return new CairoUint256(low, high).toBigInt();
3867
+ return parser.getResponseParser(type)(it);
2241
3868
  case CairoUint512.isAbiType(type):
2242
- const limb0 = it.next().value;
2243
- const limb1 = it.next().value;
2244
- const limb2 = it.next().value;
2245
- const limb3 = it.next().value;
2246
- return new CairoUint512(limb0, limb1, limb2, limb3).toBigInt();
3869
+ return parser.getResponseParser(type)(it);
3870
+ case CairoUint8.isAbiType(type):
3871
+ return parser.getResponseParser(type)(it);
3872
+ case CairoUint16.isAbiType(type):
3873
+ return parser.getResponseParser(type)(it);
3874
+ case CairoUint64.isAbiType(type):
3875
+ return parser.getResponseParser(type)(it);
3876
+ case CairoUint96.isAbiType(type):
3877
+ return parser.getResponseParser(type)(it);
3878
+ case CairoUint128.isAbiType(type):
3879
+ return parser.getResponseParser(type)(it);
3880
+ case CairoInt8.isAbiType(type):
3881
+ return parser.getResponseParser(type)(it);
3882
+ case CairoInt16.isAbiType(type):
3883
+ return parser.getResponseParser(type)(it);
3884
+ case CairoInt32.isAbiType(type):
3885
+ return parser.getResponseParser(type)(it);
3886
+ case CairoInt64.isAbiType(type):
3887
+ return parser.getResponseParser(type)(it);
3888
+ case CairoInt128.isAbiType(type):
3889
+ return parser.getResponseParser(type)(it);
2247
3890
  case isTypeEthAddress(type):
2248
3891
  temp = it.next().value;
2249
3892
  return BigInt(temp);
2250
- case isTypeBytes31(type):
2251
- temp = it.next().value;
2252
- return decodeShortString(temp);
3893
+ case CairoBytes31.isAbiType(type):
3894
+ return parser.getResponseParser(type)(it);
2253
3895
  case isTypeSecp256k1Point(type):
2254
3896
  const xLow = removeHexPrefix(it.next().value).padStart(32, "0");
2255
3897
  const xHigh = removeHexPrefix(it.next().value).padStart(32, "0");
@@ -2258,47 +3900,28 @@ function parseBaseTypes2(type, it) {
2258
3900
  const pubK = BigInt(addHexPrefix(xHigh + xLow + yHigh + yLow));
2259
3901
  return pubK;
2260
3902
  default:
2261
- temp = it.next().value;
2262
- return BigInt(temp);
3903
+ return parser.getResponseParser(CairoFelt252.abiSelector)(it);
2263
3904
  }
2264
3905
  }
2265
- function parseResponseValue(responseIterator, element, structs, enums) {
3906
+ function parseResponseValue(responseIterator, element, parser, structs, enums) {
2266
3907
  if (element.type === "()") {
2267
3908
  return {};
2268
3909
  }
2269
3910
  if (CairoUint256.isAbiType(element.type)) {
2270
- const low = responseIterator.next().value;
2271
- const high = responseIterator.next().value;
2272
- return new CairoUint256(low, high).toBigInt();
3911
+ return parser.getResponseParser(element.type)(responseIterator);
2273
3912
  }
2274
3913
  if (CairoUint512.isAbiType(element.type)) {
2275
- const limb0 = responseIterator.next().value;
2276
- const limb1 = responseIterator.next().value;
2277
- const limb2 = responseIterator.next().value;
2278
- const limb3 = responseIterator.next().value;
2279
- return new CairoUint512(limb0, limb1, limb2, limb3).toBigInt();
2280
- }
2281
- if (isTypeByteArray(element.type)) {
2282
- const parsedBytes31Arr = [];
2283
- const bytes31ArrLen = BigInt(responseIterator.next().value);
2284
- while (parsedBytes31Arr.length < bytes31ArrLen) {
2285
- parsedBytes31Arr.push(toHex(responseIterator.next().value));
2286
- }
2287
- const pending_word = toHex(responseIterator.next().value);
2288
- const pending_word_len = BigInt(responseIterator.next().value);
2289
- const myByteArray = {
2290
- data: parsedBytes31Arr,
2291
- pending_word,
2292
- pending_word_len
2293
- };
2294
- return stringFromByteArray(myByteArray);
3914
+ return parser.getResponseParser(element.type)(responseIterator);
3915
+ }
3916
+ if (CairoByteArray.isAbiType(element.type)) {
3917
+ return parser.getResponseParser(element.type)(responseIterator);
2295
3918
  }
2296
3919
  if (CairoFixedArray.isTypeFixedArray(element.type)) {
2297
3920
  const parsedDataArr = [];
2298
3921
  const el = { name: "", type: CairoFixedArray.getFixedArrayType(element.type) };
2299
3922
  const arraySize = CairoFixedArray.getFixedArraySize(element.type);
2300
3923
  while (parsedDataArr.length < arraySize) {
2301
- parsedDataArr.push(parseResponseValue(responseIterator, el, structs, enums));
3924
+ parsedDataArr.push(parseResponseValue(responseIterator, el, parser, structs, enums));
2302
3925
  }
2303
3926
  return parsedDataArr;
2304
3927
  }
@@ -2307,20 +3930,20 @@ function parseResponseValue(responseIterator, element, structs, enums) {
2307
3930
  const el = { name: "", type: getArrayType(element.type) };
2308
3931
  const len = BigInt(responseIterator.next().value);
2309
3932
  while (parsedDataArr.length < len) {
2310
- parsedDataArr.push(parseResponseValue(responseIterator, el, structs, enums));
3933
+ parsedDataArr.push(parseResponseValue(responseIterator, el, parser, structs, enums));
2311
3934
  }
2312
3935
  return parsedDataArr;
2313
3936
  }
2314
3937
  if (isTypeNonZero(element.type)) {
2315
3938
  const el = { name: "", type: getArrayType(element.type) };
2316
- return parseResponseValue(responseIterator, el, structs, enums);
3939
+ return parseResponseValue(responseIterator, el, parser, structs, enums);
2317
3940
  }
2318
3941
  if (structs && element.type in structs && structs[element.type]) {
2319
3942
  if (isTypeEthAddress(element.type)) {
2320
- return parseBaseTypes2(element.type, responseIterator);
3943
+ return parseBaseTypes2(element.type, responseIterator, parser);
2321
3944
  }
2322
3945
  return structs[element.type].members.reduce((acc, el) => {
2323
- acc[el.name] = parseResponseValue(responseIterator, el, structs, enums);
3946
+ acc[el.name] = parseResponseValue(responseIterator, el, parser, structs, enums);
2324
3947
  return acc;
2325
3948
  }, {});
2326
3949
  }
@@ -2331,6 +3954,7 @@ function parseResponseValue(responseIterator, element, structs, enums) {
2331
3954
  acc[variant.name] = parseResponseValue(
2332
3955
  responseIterator,
2333
3956
  { name: "", type: variant.type },
3957
+ parser,
2334
3958
  structs,
2335
3959
  enums
2336
3960
  );
@@ -2361,7 +3985,7 @@ function parseResponseValue(responseIterator, element, structs, enums) {
2361
3985
  const name = it?.name ? it.name : idx;
2362
3986
  const type = it?.type ? it.type : it;
2363
3987
  const el = { name, type };
2364
- acc[name] = parseResponseValue(responseIterator, el, structs, enums);
3988
+ acc[name] = parseResponseValue(responseIterator, el, parser, structs, enums);
2365
3989
  return acc;
2366
3990
  }, {});
2367
3991
  }
@@ -2370,13 +3994,20 @@ function parseResponseValue(responseIterator, element, structs, enums) {
2370
3994
  const el = { name: "", type: getArrayType(element.type) };
2371
3995
  const len = BigInt(responseIterator.next().value);
2372
3996
  while (parsedDataArr.length < len) {
2373
- parsedDataArr.push(parseResponseValue(responseIterator, el, structs, enums));
3997
+ parsedDataArr.push(parseResponseValue(responseIterator, el, parser, structs, enums));
2374
3998
  }
2375
3999
  return parsedDataArr;
2376
4000
  }
2377
- return parseBaseTypes2(element.type, responseIterator);
4001
+ return parseBaseTypes2(element.type, responseIterator, parser);
2378
4002
  }
2379
- function responseParser(responseIterator, output, structs, enums, parsedResult) {
4003
+ function responseParser({
4004
+ responseIterator,
4005
+ output,
4006
+ structs,
4007
+ enums,
4008
+ parsedResult,
4009
+ parser
4010
+ }) {
2380
4011
  const { name, type } = output;
2381
4012
  let temp;
2382
4013
  switch (true) {
@@ -2384,14 +4015,14 @@ function responseParser(responseIterator, output, structs, enums, parsedResult)
2384
4015
  temp = responseIterator.next().value;
2385
4016
  return BigInt(temp);
2386
4017
  case (structs && type in structs || isTypeTuple(type)):
2387
- return parseResponseValue(responseIterator, output, structs, enums);
4018
+ return parseResponseValue(responseIterator, output, parser, structs, enums);
2388
4019
  case (enums && isTypeEnum(type, enums)):
2389
- return parseResponseValue(responseIterator, output, structs, enums);
4020
+ return parseResponseValue(responseIterator, output, parser, structs, enums);
2390
4021
  case CairoFixedArray.isTypeFixedArray(type):
2391
- return parseResponseValue(responseIterator, output, structs, enums);
4022
+ return parseResponseValue(responseIterator, output, parser, structs, enums);
2392
4023
  case isTypeArray(type):
2393
4024
  if (isCairo1Type(type)) {
2394
- return parseResponseValue(responseIterator, output, structs, enums);
4025
+ return parseResponseValue(responseIterator, output, parser, structs, enums);
2395
4026
  }
2396
4027
  const parsedDataArr = [];
2397
4028
  if (parsedResult && parsedResult[`${name}_len`]) {
@@ -2401,6 +4032,7 @@ function responseParser(responseIterator, output, structs, enums, parsedResult)
2401
4032
  parseResponseValue(
2402
4033
  responseIterator,
2403
4034
  { name, type: output.type.replace("*", "") },
4035
+ parser,
2404
4036
  structs,
2405
4037
  enums
2406
4038
  )
@@ -2409,9 +4041,9 @@ function responseParser(responseIterator, output, structs, enums, parsedResult)
2409
4041
  }
2410
4042
  return parsedDataArr;
2411
4043
  case isTypeNonZero(type):
2412
- return parseResponseValue(responseIterator, output, structs, enums);
4044
+ return parseResponseValue(responseIterator, output, parser, structs, enums);
2413
4045
  default:
2414
- return parseBaseTypes2(type, responseIterator);
4046
+ return parseBaseTypes2(type, responseIterator, parser);
2415
4047
  }
2416
4048
  }
2417
4049
 
@@ -2429,16 +4061,6 @@ var validateFelt = (parameter, input) => {
2429
4061
  `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`
2430
4062
  );
2431
4063
  };
2432
- var validateBytes31 = (parameter, input) => {
2433
- assert(isString(parameter), `Validate: arg ${input.name} should be a string.`);
2434
- assert(
2435
- parameter.length < 32,
2436
- `Validate: arg ${input.name} cairo typed ${input.type} should be a string of less than 32 characters.`
2437
- );
2438
- };
2439
- var validateByteArray = (parameter, input) => {
2440
- assert(isString(parameter), `Validate: arg ${input.name} should be a string.`);
2441
- };
2442
4064
  var validateUint = (parameter, input) => {
2443
4065
  if (isNumber(parameter)) {
2444
4066
  assert(
@@ -2690,8 +4312,8 @@ function validateFields(abiMethod, args, structs, enums) {
2690
4312
  case isTypeFelt(input.type):
2691
4313
  validateFelt(parameter, input);
2692
4314
  break;
2693
- case isTypeBytes31(input.type):
2694
- validateBytes31(parameter, input);
4315
+ case CairoBytes31.isAbiType(input.type):
4316
+ CairoBytes31.validate(parameter);
2695
4317
  break;
2696
4318
  case (isTypeUint(input.type) || isTypeLiteral(input.type)):
2697
4319
  validateUint(parameter, input);
@@ -2699,8 +4321,23 @@ function validateFields(abiMethod, args, structs, enums) {
2699
4321
  case isTypeBool(input.type):
2700
4322
  validateBool(parameter, input);
2701
4323
  break;
2702
- case isTypeByteArray(input.type):
2703
- validateByteArray(parameter, input);
4324
+ case CairoByteArray.isAbiType(input.type):
4325
+ CairoByteArray.validate(parameter);
4326
+ break;
4327
+ case CairoInt8.isAbiType(input.type):
4328
+ CairoInt8.validate(parameter);
4329
+ break;
4330
+ case CairoInt16.isAbiType(input.type):
4331
+ CairoInt16.validate(parameter);
4332
+ break;
4333
+ case CairoInt32.isAbiType(input.type):
4334
+ CairoInt32.validate(parameter);
4335
+ break;
4336
+ case CairoInt64.isAbiType(input.type):
4337
+ CairoInt64.validate(parameter);
4338
+ break;
4339
+ case CairoInt128.isAbiType(input.type):
4340
+ CairoInt128.validate(parameter);
2704
4341
  break;
2705
4342
  case (isTypeArray(input.type) || CairoFixedArray.isTypeFixedArray(input.type)):
2706
4343
  validateArray(parameter, input, structs, enums);
@@ -2732,10 +4369,10 @@ var CallData = class _CallData {
2732
4369
  parser;
2733
4370
  structs;
2734
4371
  enums;
2735
- constructor(abi) {
4372
+ constructor(abi, parsingStrategy) {
2736
4373
  this.structs = _CallData.getAbiStruct(abi);
2737
4374
  this.enums = _CallData.getAbiEnum(abi);
2738
- this.parser = createAbiParser(abi);
4375
+ this.parser = createAbiParser(abi, parsingStrategy);
2739
4376
  this.abi = this.parser.getLegacyFormat();
2740
4377
  }
2741
4378
  /**
@@ -2804,7 +4441,15 @@ var CallData = class _CallData {
2804
4441
  }
2805
4442
  const argsIterator = args[Symbol.iterator]();
2806
4443
  const callArray = abiMethod.inputs.reduce(
2807
- (acc, input) => isLen(input.name) && !isCairo1Type(input.type) ? acc : acc.concat(parseCalldataField(argsIterator, input, this.structs, this.enums)),
4444
+ (acc, input) => isLen(input.name) && !isCairo1Type(input.type) ? acc : acc.concat(
4445
+ parseCalldataField({
4446
+ argsIterator,
4447
+ input,
4448
+ structs: this.structs,
4449
+ enums: this.enums,
4450
+ parser: this.parser
4451
+ })
4452
+ ),
2808
4453
  []
2809
4454
  );
2810
4455
  Object.defineProperty(callArray, "__compiled__", {
@@ -2891,7 +4536,14 @@ var CallData = class _CallData {
2891
4536
  const responseIterator = response.flat()[Symbol.iterator]();
2892
4537
  const parsed = outputs.flat().reduce((acc, output, idx) => {
2893
4538
  const propName = output.name ?? idx;
2894
- acc[propName] = responseParser(responseIterator, output, this.structs, this.enums, acc);
4539
+ acc[propName] = responseParser({
4540
+ responseIterator,
4541
+ output,
4542
+ structs: this.structs,
4543
+ enums: this.enums,
4544
+ parsedResult: acc,
4545
+ parser: this.parser
4546
+ });
2895
4547
  if (acc[propName] && acc[`${propName}_len`]) {
2896
4548
  delete acc[`${propName}_len`];
2897
4549
  }
@@ -2971,12 +4623,13 @@ var CallData = class _CallData {
2971
4623
  const typeCairoArray = Array.isArray(typeCairo) ? typeCairo : [typeCairo];
2972
4624
  const responseIterator = response.flat()[Symbol.iterator]();
2973
4625
  const decodedArray = typeCairoArray.map(
2974
- (typeParam) => responseParser(
4626
+ (typeParam) => responseParser({
2975
4627
  responseIterator,
2976
- { name: "", type: typeParam },
2977
- this.structs,
2978
- this.enums
2979
- )
4628
+ output: { name: "", type: typeParam },
4629
+ parser: this.parser,
4630
+ structs: this.structs,
4631
+ enums: this.enums
4632
+ })
2980
4633
  );
2981
4634
  return decodedArray.length === 1 ? decodedArray[0] : decodedArray;
2982
4635
  }
@@ -3661,114 +5314,6 @@ function contractClassResponseToLegacyCompiledContract(ccr) {
3661
5314
  return { ...contract, program: decompressProgram(contract.program) };
3662
5315
  }
3663
5316
 
3664
- // src/utils/errors/rpc.ts
3665
- var errorCodes = {
3666
- FAILED_TO_RECEIVE_TXN: 1,
3667
- NO_TRACE_AVAILABLE: 10,
3668
- CONTRACT_NOT_FOUND: 20,
3669
- ENTRYPOINT_NOT_FOUND: 21,
3670
- BLOCK_NOT_FOUND: 24,
3671
- INVALID_TXN_INDEX: 27,
3672
- CLASS_HASH_NOT_FOUND: 28,
3673
- TXN_HASH_NOT_FOUND: 29,
3674
- PAGE_SIZE_TOO_BIG: 31,
3675
- NO_BLOCKS: 32,
3676
- INVALID_CONTINUATION_TOKEN: 33,
3677
- TOO_MANY_KEYS_IN_FILTER: 34,
3678
- CONTRACT_ERROR: 40,
3679
- TRANSACTION_EXECUTION_ERROR: 41,
3680
- STORAGE_PROOF_NOT_SUPPORTED: 42,
3681
- CLASS_ALREADY_DECLARED: 51,
3682
- INVALID_TRANSACTION_NONCE: 52,
3683
- INSUFFICIENT_RESOURCES_FOR_VALIDATE: 53,
3684
- INSUFFICIENT_ACCOUNT_BALANCE: 54,
3685
- VALIDATION_FAILURE: 55,
3686
- COMPILATION_FAILED: 56,
3687
- CONTRACT_CLASS_SIZE_IS_TOO_LARGE: 57,
3688
- NON_ACCOUNT: 58,
3689
- DUPLICATE_TX: 59,
3690
- COMPILED_CLASS_HASH_MISMATCH: 60,
3691
- UNSUPPORTED_TX_VERSION: 61,
3692
- UNSUPPORTED_CONTRACT_CLASS_VERSION: 62,
3693
- UNEXPECTED_ERROR: 63,
3694
- INVALID_SUBSCRIPTION_ID: 66,
3695
- TOO_MANY_ADDRESSES_IN_FILTER: 67,
3696
- TOO_MANY_BLOCKS_BACK: 68,
3697
- COMPILATION_ERROR: 100,
3698
- INVALID_ADDRESS: 150,
3699
- TOKEN_NOT_SUPPORTED: 151,
3700
- INVALID_SIGNATURE: 153,
3701
- MAX_AMOUNT_TOO_LOW: 154,
3702
- CLASS_HASH_NOT_SUPPORTED: 155,
3703
- PAYMASTER_TRANSACTION_EXECUTION_ERROR: 156,
3704
- INVALID_TIME_BOUNDS: 157,
3705
- INVALID_DEPLOYMENT_DATA: 158,
3706
- INVALID_CLASS_HASH: 159,
3707
- INVALID_ID: 160,
3708
- UNKNOWN_ERROR: 163
3709
- };
3710
- var rpc_default = errorCodes;
3711
-
3712
- // src/utils/errors/index.ts
3713
- function fixStack(target, fn = target.constructor) {
3714
- const { captureStackTrace } = Error;
3715
- captureStackTrace && captureStackTrace(target, fn);
3716
- }
3717
- function fixProto(target, prototype) {
3718
- const { setPrototypeOf } = Object;
3719
- setPrototypeOf ? setPrototypeOf(target, prototype) : target.__proto__ = prototype;
3720
- }
3721
- var CustomError = class extends Error {
3722
- name;
3723
- constructor(message) {
3724
- super(message);
3725
- Object.defineProperty(this, "name", {
3726
- value: new.target.name,
3727
- enumerable: false,
3728
- configurable: true
3729
- });
3730
- fixProto(this, new.target.prototype);
3731
- fixStack(this);
3732
- }
3733
- };
3734
- var LibraryError = class extends CustomError {
3735
- };
3736
- var RpcError = class extends LibraryError {
3737
- constructor(baseError, method, params) {
3738
- super(`RPC: ${method} with params ${stringify2(params, null, 2)}
3739
-
3740
- ${baseError.code}: ${baseError.message}: ${stringify2(baseError.data)}`);
3741
- this.baseError = baseError;
3742
- this.request = { method, params };
3743
- }
3744
- request;
3745
- get code() {
3746
- return this.baseError.code;
3747
- }
3748
- /**
3749
- * Verifies the underlying RPC error, also serves as a type guard for the _baseError_ property
3750
- * @example
3751
- * ```typescript
3752
- * SomeError.isType('UNEXPECTED_ERROR');
3753
- * ```
3754
- */
3755
- isType(typeName) {
3756
- return rpc_default[typeName] === this.code;
3757
- }
3758
- };
3759
- var TimeoutError = class extends LibraryError {
3760
- constructor(message) {
3761
- super(message);
3762
- this.name = "TimeoutError";
3763
- }
3764
- };
3765
- var WebSocketNotConnectedError = class extends LibraryError {
3766
- constructor(message) {
3767
- super(message);
3768
- this.name = "WebSocketNotConnectedError";
3769
- }
3770
- };
3771
-
3772
5317
  // src/utils/eth.ts
3773
5318
  var eth_exports = {};
3774
5319
  __export(eth_exports, {
@@ -3907,7 +5452,7 @@ var Block = class {
3907
5452
  tag = null;
3908
5453
  setIdentifier(__identifier) {
3909
5454
  if (isString(__identifier)) {
3910
- if (isDecimalString(__identifier)) {
5455
+ if (isDecimalString2(__identifier)) {
3911
5456
  this.number = parseInt(__identifier, 10);
3912
5457
  } else if (isHex(__identifier)) {
3913
5458
  this.hash = __identifier;
@@ -4356,11 +5901,13 @@ var RpcChannel = class {
4356
5901
  RPCSPEC08.ETransactionStatus.ACCEPTED_ON_L2,
4357
5902
  RPCSPEC08.ETransactionStatus.ACCEPTED_ON_L1
4358
5903
  ];
5904
+ const txLife = [];
4359
5905
  let txStatus;
4360
5906
  while (!onchain) {
4361
5907
  await wait(retryInterval);
4362
5908
  try {
4363
5909
  txStatus = await this.getTransactionStatus(transactionHash);
5910
+ txLife.push(txStatus.finality_status);
4364
5911
  const executionStatus = txStatus.execution_status;
4365
5912
  const finalityStatus = txStatus.finality_status;
4366
5913
  if (!finalityStatus) {
@@ -4380,6 +5927,18 @@ var RpcChannel = class {
4380
5927
  if (error instanceof Error && isErrorState) {
4381
5928
  throw error;
4382
5929
  }
5930
+ if (error instanceof RpcError && error.isType("TXN_HASH_NOT_FOUND")) {
5931
+ logger.info("txLife: ", txLife);
5932
+ const errorMessages = {
5933
+ [RPCSPEC09.ETransactionStatus.RECEIVED]: SYSTEM_MESSAGES.txEvictedFromMempool,
5934
+ [RPCSPEC09.ETransactionStatus.PRE_CONFIRMED]: SYSTEM_MESSAGES.consensusFailed,
5935
+ [RPCSPEC09.ETransactionStatus.CANDIDATE]: SYSTEM_MESSAGES.txFailsBlockBuildingValidation
5936
+ };
5937
+ const errorMessage = errorMessages[txLife.at(-1)];
5938
+ if (errorMessage) {
5939
+ throw new Error(errorMessage);
5940
+ }
5941
+ }
4383
5942
  if (retries <= 0) {
4384
5943
  throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);
4385
5944
  }
@@ -4929,11 +6488,13 @@ var RpcChannel2 = class {
4929
6488
  RPCSPEC09.ETransactionFinalityStatus.ACCEPTED_ON_L2,
4930
6489
  RPCSPEC09.ETransactionFinalityStatus.ACCEPTED_ON_L1
4931
6490
  ];
6491
+ const txLife = [];
4932
6492
  let txStatus;
4933
6493
  while (!onchain) {
4934
6494
  await wait(retryInterval);
4935
6495
  try {
4936
6496
  txStatus = await this.getTransactionStatus(transactionHash);
6497
+ txLife.push(txStatus.finality_status);
4937
6498
  const executionStatus = txStatus.execution_status;
4938
6499
  const finalityStatus = txStatus.finality_status;
4939
6500
  if (!finalityStatus) {
@@ -4953,6 +6514,18 @@ var RpcChannel2 = class {
4953
6514
  if (error instanceof Error && isErrorState) {
4954
6515
  throw error;
4955
6516
  }
6517
+ if (error instanceof RpcError && error.isType("TXN_HASH_NOT_FOUND")) {
6518
+ logger.info("txLife: ", txLife);
6519
+ const errorMessages = {
6520
+ [RPCSPEC09.ETransactionStatus.RECEIVED]: SYSTEM_MESSAGES.txEvictedFromMempool,
6521
+ [RPCSPEC09.ETransactionStatus.PRE_CONFIRMED]: SYSTEM_MESSAGES.consensusFailed,
6522
+ [RPCSPEC09.ETransactionStatus.CANDIDATE]: SYSTEM_MESSAGES.txFailsBlockBuildingValidation
6523
+ };
6524
+ const errorMessage = errorMessages[txLife.at(-1)];
6525
+ if (errorMessage) {
6526
+ throw new Error(errorMessage);
6527
+ }
6528
+ }
4956
6529
  if (retries <= 0) {
4957
6530
  throw new Error(`waitForTransaction timed-out with retries ${this.retries}`);
4958
6531
  }
@@ -5296,7 +6869,7 @@ var Subscription = class {
5296
6869
  }
5297
6870
  };
5298
6871
 
5299
- // src/channel/ws/ws_0_8.ts
6872
+ // src/channel/ws/ws_0_9.ts
5300
6873
  var WebSocketChannel = class {
5301
6874
  /**
5302
6875
  * The URL of the WebSocket RPC Node.
@@ -5644,19 +7217,19 @@ var WebSocketChannel = class {
5644
7217
  }
5645
7218
  /**
5646
7219
  * Subscribes to new block headers.
5647
- * @param {SubscriptionBlockIdentifier} [blockIdentifier] - The block to start receiving notifications from. Defaults to 'latest'.
7220
+ * @param {SubscribeNewHeadsParams} params - The parameters for the subscription.
5648
7221
  * @returns {Promise<Subscription<BLOCK_HEADER>>} A Promise that resolves with a `Subscription` object for new block headers.
5649
7222
  */
5650
- async subscribeNewHeads(blockIdentifier) {
7223
+ async subscribeNewHeads(params = {}) {
5651
7224
  const method = "starknet_subscribeNewHeads";
5652
- const params = {
5653
- block_id: blockIdentifier ? new Block(blockIdentifier).identifier : void 0
7225
+ const rpcParams = {
7226
+ block_id: params.blockIdentifier ? new Block(params.blockIdentifier).identifier : void 0
5654
7227
  };
5655
- const subId = await this.sendReceive(method, params);
7228
+ const subId = await this.sendReceive(method, rpcParams);
5656
7229
  const subscription = new Subscription({
5657
7230
  channel: this,
5658
7231
  method,
5659
- params,
7232
+ params: rpcParams,
5660
7233
  id: subId,
5661
7234
  maxBufferSize: this.maxBufferSize
5662
7235
  });
@@ -5665,23 +7238,22 @@ var WebSocketChannel = class {
5665
7238
  }
5666
7239
  /**
5667
7240
  * Subscribes to events matching a given filter.
5668
- * @param {BigNumberish} [fromAddress] - The contract address to filter by.
5669
- * @param {string[][]} [keys] - The event keys to filter by.
5670
- * @param {SubscriptionBlockIdentifier} [blockIdentifier] - The block to start receiving notifications from. Defaults to 'latest'.
7241
+ * @param {SubscribeEventsParams} params - The parameters for the subscription.
5671
7242
  * @returns {Promise<Subscription<EMITTED_EVENT>>} A Promise that resolves with a `Subscription` object for the specified events.
5672
7243
  */
5673
- async subscribeEvents(fromAddress, keys, blockIdentifier) {
7244
+ async subscribeEvents(params = {}) {
5674
7245
  const method = "starknet_subscribeEvents";
5675
- const params = {
5676
- from_address: fromAddress !== void 0 ? toHex(fromAddress) : void 0,
5677
- keys,
5678
- block_id: blockIdentifier ? new Block(blockIdentifier).identifier : void 0
7246
+ const rpcParams = {
7247
+ from_address: params.fromAddress !== void 0 ? toHex(params.fromAddress) : void 0,
7248
+ keys: params.keys,
7249
+ block_id: params.blockIdentifier ? new Block(params.blockIdentifier).identifier : void 0,
7250
+ finality_status: params.finalityStatus
5679
7251
  };
5680
- const subId = await this.sendReceive(method, params);
7252
+ const subId = await this.sendReceive(method, rpcParams);
5681
7253
  const subscription = new Subscription({
5682
7254
  channel: this,
5683
7255
  method,
5684
- params,
7256
+ params: rpcParams,
5685
7257
  id: subId,
5686
7258
  maxBufferSize: this.maxBufferSize
5687
7259
  });
@@ -5690,21 +7262,20 @@ var WebSocketChannel = class {
5690
7262
  }
5691
7263
  /**
5692
7264
  * Subscribes to status updates for a specific transaction.
5693
- * @param {BigNumberish} transactionHash - The hash of the transaction to monitor.
5694
- * @param {SubscriptionBlockIdentifier} [blockIdentifier] - The block context. Not typically required.
7265
+ * @param {SubscribeTransactionStatusParams} params - The parameters for the subscription.
5695
7266
  * @returns {Promise<Subscription<NEW_TXN_STATUS>>} A Promise that resolves with a `Subscription` object for the transaction's status.
5696
7267
  */
5697
- async subscribeTransactionStatus(transactionHash, blockIdentifier) {
7268
+ async subscribeTransactionStatus(params) {
5698
7269
  const method = "starknet_subscribeTransactionStatus";
5699
- const params = {
5700
- transaction_hash: toHex(transactionHash),
5701
- block_id: blockIdentifier ? new Block(blockIdentifier).identifier : void 0
7270
+ const rpcParams = {
7271
+ transaction_hash: toHex(params.transactionHash),
7272
+ block_id: params.blockIdentifier ? new Block(params.blockIdentifier).identifier : void 0
5702
7273
  };
5703
- const subId = await this.sendReceive(method, params);
7274
+ const subId = await this.sendReceive(method, rpcParams);
5704
7275
  const subscription = new Subscription({
5705
7276
  channel: this,
5706
7277
  method,
5707
- params,
7278
+ params: rpcParams,
5708
7279
  id: subId,
5709
7280
  maxBufferSize: this.maxBufferSize
5710
7281
  });
@@ -5712,22 +7283,43 @@ var WebSocketChannel = class {
5712
7283
  return subscription;
5713
7284
  }
5714
7285
  /**
5715
- * Subscribes to pending transactions.
5716
- * @param {boolean} [transactionDetails] - If `true`, the full transaction details are included. Defaults to `false` (hash only).
5717
- * @param {BigNumberish[]} [senderAddress] - An array of sender addresses to filter by.
5718
- * @returns {Promise<Subscription<TXN_HASH | TXN_WITH_HASH>>} A Promise that resolves with a `Subscription` object for pending transactions.
7286
+ * Subscribes to new transaction receipts.
7287
+ * @param {SubscribeNewTransactionReceiptsParams} params - The parameters for the subscription.
7288
+ * @returns {Promise<Subscription<NewTransactionReceiptsEvent['result']>>} A Promise that resolves with a `Subscription` object for new transaction receipts.
5719
7289
  */
5720
- async subscribePendingTransaction(transactionDetails, senderAddress) {
5721
- const method = "starknet_subscribePendingTransactions";
5722
- const params = {
5723
- transaction_details: transactionDetails,
5724
- sender_address: senderAddress && bigNumberishArrayToHexadecimalStringArray(senderAddress)
7290
+ async subscribeNewTransactionReceipts(params = {}) {
7291
+ const method = "starknet_subscribeNewTransactionReceipts";
7292
+ const rpcParams = {
7293
+ finality_status: params.finalityStatus,
7294
+ sender_address: params.senderAddress && bigNumberishArrayToHexadecimalStringArray(params.senderAddress)
7295
+ };
7296
+ const subId = await this.sendReceive(method, rpcParams);
7297
+ const subscription = new Subscription({
7298
+ channel: this,
7299
+ method,
7300
+ params: rpcParams,
7301
+ id: subId,
7302
+ maxBufferSize: this.maxBufferSize
7303
+ });
7304
+ this.activeSubscriptions.set(subId, subscription);
7305
+ return subscription;
7306
+ }
7307
+ /**
7308
+ * Subscribes to new transactions.
7309
+ * @param {SubscribeNewTransactionsParams} params - The parameters for the subscription.
7310
+ * @returns {Promise<Subscription<NewTransactionEvent['result']>>} A Promise that resolves with a `Subscription` object for new transactions.
7311
+ */
7312
+ async subscribeNewTransactions(params = {}) {
7313
+ const method = "starknet_subscribeNewTransactions";
7314
+ const rpcParams = {
7315
+ finality_status: params.finalityStatus,
7316
+ sender_address: params.senderAddress && bigNumberishArrayToHexadecimalStringArray(params.senderAddress)
5725
7317
  };
5726
- const subId = await this.sendReceive(method, params);
7318
+ const subId = await this.sendReceive(method, rpcParams);
5727
7319
  const subscription = new Subscription({
5728
7320
  channel: this,
5729
7321
  method,
5730
- params,
7322
+ params: rpcParams,
5731
7323
  id: subId,
5732
7324
  maxBufferSize: this.maxBufferSize
5733
7325
  });
@@ -5998,56 +7590,123 @@ var ReceiptTx = class _ReceiptTx {
5998
7590
  statusReceipt;
5999
7591
  value;
6000
7592
  constructor(receipt) {
6001
- [this.statusReceipt, this.value] = _ReceiptTx.isSuccess(receipt) ? ["success", receipt] : _ReceiptTx.isReverted(receipt) ? ["reverted", receipt] : ["error", new Error("Unknown response type")];
6002
- for (const [key] of Object.entries(this)) {
6003
- Object.defineProperty(this, key, {
6004
- enumerable: false
6005
- });
6006
- }
6007
- for (const [key, value] of Object.entries(receipt)) {
6008
- Object.defineProperty(this, key, {
6009
- enumerable: true,
7593
+ Object.assign(this, receipt);
7594
+ const [statusReceipt, value] = _ReceiptTx.isSuccess(receipt) ? ["SUCCEEDED", receipt] : _ReceiptTx.isReverted(receipt) ? ["REVERTED", receipt] : ["ERROR", new Error("Unknown response type")];
7595
+ Object.defineProperties(this, {
7596
+ statusReceipt: {
7597
+ value: statusReceipt,
6010
7598
  writable: false,
6011
- value
6012
- });
6013
- }
6014
- }
6015
- match(callbacks) {
6016
- if (this.statusReceipt in callbacks) {
6017
- return callbacks[this.statusReceipt](this.value);
6018
- }
6019
- return callbacks._();
6020
- }
6021
- isSuccess() {
6022
- return this.statusReceipt === "success";
6023
- }
6024
- isReverted() {
6025
- return this.statusReceipt === "reverted";
6026
- }
6027
- // TODO: Missing is Pending or Production block
6028
- // Status do not exist on receipts
6029
- /* isRejected(): this is RejectedTransactionReceiptResponse {
6030
- return this.statusReceipt === 'rejected';
6031
- } */
6032
- isError() {
6033
- return this.statusReceipt === "error";
7599
+ enumerable: false,
7600
+ configurable: false
7601
+ },
7602
+ value: {
7603
+ value,
7604
+ writable: false,
7605
+ enumerable: false,
7606
+ configurable: false
7607
+ },
7608
+ match: {
7609
+ value(callbacks) {
7610
+ return statusReceipt in callbacks ? callbacks[statusReceipt](value) : callbacks._();
7611
+ },
7612
+ writable: false,
7613
+ enumerable: false,
7614
+ configurable: false
7615
+ },
7616
+ isSuccess: {
7617
+ value: () => statusReceipt === "SUCCEEDED",
7618
+ writable: false,
7619
+ enumerable: false,
7620
+ configurable: false
7621
+ },
7622
+ isReverted: {
7623
+ value: () => statusReceipt === "REVERTED",
7624
+ writable: false,
7625
+ enumerable: false,
7626
+ configurable: false
7627
+ },
7628
+ isError: {
7629
+ value: () => statusReceipt === "ERROR",
7630
+ writable: false,
7631
+ enumerable: false,
7632
+ configurable: false
7633
+ }
7634
+ });
6034
7635
  }
7636
+ match;
7637
+ isSuccess;
7638
+ isReverted;
7639
+ isError;
6035
7640
  static isSuccess(transactionReceipt) {
6036
7641
  return transactionReceipt.execution_status === TransactionExecutionStatus.SUCCEEDED;
6037
7642
  }
6038
7643
  static isReverted(transactionReceipt) {
6039
7644
  return transactionReceipt.execution_status === TransactionExecutionStatus.REVERTED;
6040
7645
  }
6041
- // Status do not exist on receipts
6042
- /* static isRejected(
6043
- transactionReceipt: GetTxReceiptResponseWithoutHelper
6044
- ): transactionReceipt is RejectedTransactionReceiptResponse {
6045
- return (
6046
- (transactionReceipt as RejectedTransactionReceiptResponse).status ===
6047
- TransactionExecutionStatus.REJECTED
6048
- );
6049
- } */
6050
7646
  };
7647
+ var RECEIPT_CONFIG = {
7648
+ [TransactionExecutionStatus.SUCCEEDED]: {
7649
+ statusReceipt: "SUCCEEDED",
7650
+ getBaseData: (receipt) => receipt,
7651
+ getValue: (receipt) => receipt
7652
+ },
7653
+ [TransactionExecutionStatus.REVERTED]: {
7654
+ statusReceipt: "REVERTED",
7655
+ getBaseData: (receipt) => receipt,
7656
+ getValue: (receipt) => receipt
7657
+ }
7658
+ };
7659
+ function createTransactionReceipt(receipt) {
7660
+ const config2 = RECEIPT_CONFIG[receipt.execution_status];
7661
+ let obj;
7662
+ if (config2) {
7663
+ const { statusReceipt, getBaseData, getValue } = config2;
7664
+ const value = getValue(receipt);
7665
+ obj = {
7666
+ ...getBaseData(receipt),
7667
+ statusReceipt,
7668
+ value,
7669
+ match(callbacks) {
7670
+ return statusReceipt in callbacks ? callbacks[statusReceipt](value) : callbacks._();
7671
+ },
7672
+ isSuccess() {
7673
+ return statusReceipt === "SUCCEEDED";
7674
+ },
7675
+ isReverted() {
7676
+ return statusReceipt === "REVERTED";
7677
+ },
7678
+ isError() {
7679
+ return false;
7680
+ }
7681
+ };
7682
+ } else {
7683
+ const errorValue = new Error("Unknown response type");
7684
+ obj = {
7685
+ statusReceipt: "ERROR",
7686
+ value: errorValue,
7687
+ match(callbacks) {
7688
+ return "ERROR" in callbacks ? callbacks.ERROR(errorValue) : callbacks._();
7689
+ },
7690
+ isSuccess() {
7691
+ return false;
7692
+ },
7693
+ isReverted() {
7694
+ return false;
7695
+ },
7696
+ isError() {
7697
+ return true;
7698
+ }
7699
+ };
7700
+ }
7701
+ Object.setPrototypeOf(obj, ReceiptTx.prototype);
7702
+ Object.defineProperty(obj, "constructor", {
7703
+ value: ReceiptTx,
7704
+ writable: false,
7705
+ enumerable: false,
7706
+ configurable: false
7707
+ });
7708
+ return obj;
7709
+ }
6051
7710
 
6052
7711
  // src/utils/typedData.ts
6053
7712
  var typedData_exports = {};
@@ -6716,7 +8375,7 @@ var RpcProvider = class {
6716
8375
  async getTransactionReceipt(txHash) {
6717
8376
  const txReceiptWoHelper = await this.channel.getTransactionReceipt(txHash);
6718
8377
  const txReceiptWoHelperModified = this.responseParser.parseTransactionReceipt(txReceiptWoHelper);
6719
- return new ReceiptTx(txReceiptWoHelperModified);
8378
+ return createTransactionReceipt(txReceiptWoHelperModified);
6720
8379
  }
6721
8380
  async getTransactionTrace(txHash) {
6722
8381
  return this.channel.getTransactionTrace(txHash);
@@ -6732,7 +8391,7 @@ var RpcProvider = class {
6732
8391
  txHash,
6733
8392
  options
6734
8393
  );
6735
- return new ReceiptTx(receiptWoHelper);
8394
+ return createTransactionReceipt(receiptWoHelper);
6736
8395
  }
6737
8396
  async getStorageAt(contractAddress, key, blockIdentifier) {
6738
8397
  return this.channel.getStorageAt(contractAddress, key, blockIdentifier);
@@ -7739,12 +9398,12 @@ var LedgerSigner111 = class {
7739
9398
  */
7740
9399
  async signRaw(msgHash) {
7741
9400
  addHexPrefix(
7742
- buf2hex(await this._transporter.send(Number("0x5a"), 2, 0, 0, Buffer.from(this.pathBuffer)))
9401
+ buf2hex(await this._transporter.send(Number("0x5a"), 2, 0, 0, buffer_default.from(this.pathBuffer)))
7743
9402
  );
7744
9403
  const shiftedHash = toHex(BigInt(msgHash) << 4n);
7745
9404
  const buff2 = hexToBytes(shiftedHash);
7746
9405
  const respSign2 = Uint8Array.from(
7747
- await this._transporter.send(Number("0x5a"), 2, 1, 0, Buffer.from(buff2))
9406
+ await this._transporter.send(Number("0x5a"), 2, 1, 0, buffer_default.from(buff2))
7748
9407
  );
7749
9408
  const r = BigInt(addHexPrefix(buf2hex(respSign2.subarray(1, 33))));
7750
9409
  const s = BigInt(addHexPrefix(buf2hex(respSign2.subarray(33, 65))));
@@ -7757,7 +9416,7 @@ var LedgerSigner111 = class {
7757
9416
  async getPublicKeys() {
7758
9417
  const pathBuff = this.pathBuffer;
7759
9418
  const respGetPublic = Uint8Array.from(
7760
- await this._transporter.send(Number("0x5a"), 1, 0, 0, Buffer.from(pathBuff))
9419
+ await this._transporter.send(Number("0x5a"), 1, 0, 0, buffer_default.from(pathBuff))
7761
9420
  );
7762
9421
  this.pubKey = addHexPrefix(buf2hex(respGetPublic.subarray(1, 33)));
7763
9422
  this.fullPubKey = addHexPrefix(buf2hex(respGetPublic.subarray(0, 65)));
@@ -8013,7 +9672,7 @@ var LedgerSigner221 = class extends LedgerSigner111 {
8013
9672
  txDetails.accountDeploymentData.length <= 7,
8014
9673
  "accountDeploymentData includes more than 7 items"
8015
9674
  );
8016
- await this._transporter.send(Number("0x5a"), 3, 0, 0, Buffer.from(this.pathBuffer));
9675
+ await this._transporter.send(Number("0x5a"), 3, 0, 0, buffer_default.from(this.pathBuffer));
8017
9676
  const accountAddressBuf = this.convertBnToLedger(txDetails.walletAddress);
8018
9677
  const tipBuf = this.convertBnToLedger(txDetails.tip);
8019
9678
  const chainIdBuf = this.convertBnToLedger(txDetails.chainId);
@@ -8035,30 +9694,30 @@ var LedgerSigner221 = class extends LedgerSigner111 {
8035
9694
  nonceBuf,
8036
9695
  dAModeHashBuf
8037
9696
  ]);
8038
- await this._transporter.send(Number("0x5a"), 3, 1, 0, Buffer.from(dataBuf));
9697
+ await this._transporter.send(Number("0x5a"), 3, 1, 0, buffer_default.from(dataBuf));
8039
9698
  const paymasterBuf = concatenateArrayBuffer(
8040
9699
  txDetails.paymasterData.map((value) => {
8041
9700
  const a = this.convertBnToLedger(value);
8042
9701
  return a;
8043
9702
  })
8044
9703
  );
8045
- await this._transporter.send(Number("0x5a"), 3, 2, 0, Buffer.from(paymasterBuf));
9704
+ await this._transporter.send(Number("0x5a"), 3, 2, 0, buffer_default.from(paymasterBuf));
8046
9705
  const accountDeployDataBuf = concatenateArrayBuffer(
8047
9706
  txDetails.paymasterData.map((value) => {
8048
9707
  const a = this.convertBnToLedger(value);
8049
9708
  return a;
8050
9709
  })
8051
9710
  );
8052
- await this._transporter.send(Number("0x5a"), 3, 3, 0, Buffer.from(accountDeployDataBuf));
9711
+ await this._transporter.send(Number("0x5a"), 3, 3, 0, buffer_default.from(accountDeployDataBuf));
8053
9712
  const nbCallsBuf = this.convertBnToLedger(calls.length);
8054
- await this._transporter.send(Number("0x5a"), 3, 4, 0, Buffer.from(nbCallsBuf));
9713
+ await this._transporter.send(Number("0x5a"), 3, 4, 0, buffer_default.from(nbCallsBuf));
8055
9714
  let respSign = new Uint8Array(0);
8056
9715
  for (const call of calls) {
8057
9716
  const calldatas = this.encodeCall(call);
8058
- await this._transporter.send(Number("0x5a"), 3, 5, 0, Buffer.from(calldatas[0]));
9717
+ await this._transporter.send(Number("0x5a"), 3, 5, 0, buffer_default.from(calldatas[0]));
8059
9718
  if (calldatas.length > 1) {
8060
9719
  calldatas.slice(1).forEach(async (part) => {
8061
- await this._transporter.send(Number("0x5a"), 3, 5, 1, Buffer.from(part));
9720
+ await this._transporter.send(Number("0x5a"), 3, 5, 1, buffer_default.from(part));
8062
9721
  });
8063
9722
  }
8064
9723
  respSign = await this._transporter.send(Number("0x5a"), 3, 5, 2);
@@ -8095,7 +9754,7 @@ var LedgerSigner221 = class extends LedgerSigner111 {
8095
9754
  * ```
8096
9755
  */
8097
9756
  async signDeployAccountV3(deployAccountDetail) {
8098
- await this._transporter.send(Number("0x5a"), 5, 0, 0, Buffer.from(this.pathBuffer));
9757
+ await this._transporter.send(Number("0x5a"), 5, 0, 0, buffer_default.from(this.pathBuffer));
8099
9758
  const accountAddressBuf = this.convertBnToLedger(
8100
9759
  deployAccountDetail.contractAddress
8101
9760
  );
@@ -8117,7 +9776,7 @@ var LedgerSigner221 = class extends LedgerSigner111 {
8117
9776
  classHashBuf,
8118
9777
  saltBuf
8119
9778
  ]);
8120
- await this._transporter.send(Number("0x5a"), 5, 1, 0, Buffer.from(dataBuf));
9779
+ await this._transporter.send(Number("0x5a"), 5, 1, 0, buffer_default.from(dataBuf));
8121
9780
  const tipBuf = this.convertBnToLedger(deployAccountDetail.tip);
8122
9781
  const l1_gasBuf = this.convertBnToLedger(
8123
9782
  encodeResourceBoundsL1(deployAccountDetail.resourceBounds)
@@ -8126,17 +9785,17 @@ var LedgerSigner221 = class extends LedgerSigner111 {
8126
9785
  encodeResourceBoundsL2(deployAccountDetail.resourceBounds)
8127
9786
  );
8128
9787
  const feeBuf = concatenateArrayBuffer([tipBuf, l1_gasBuf, l2_gasBuf]);
8129
- await this._transporter.send(Number("0x5a"), 5, 2, 0, Buffer.from(feeBuf));
9788
+ await this._transporter.send(Number("0x5a"), 5, 2, 0, buffer_default.from(feeBuf));
8130
9789
  const paymasterBuf = concatenateArrayBuffer(
8131
9790
  deployAccountDetail.paymasterData.map((value) => {
8132
9791
  const a = this.convertBnToLedger(value);
8133
9792
  return a;
8134
9793
  })
8135
9794
  );
8136
- await this._transporter.send(Number("0x5a"), 5, 3, 0, Buffer.from(paymasterBuf));
9795
+ await this._transporter.send(Number("0x5a"), 5, 3, 0, buffer_default.from(paymasterBuf));
8137
9796
  const compiledConstructor = CallData.compile(deployAccountDetail.constructorCalldata);
8138
9797
  const constructorLengthBuf = this.convertBnToLedger(compiledConstructor.length);
8139
- await this._transporter.send(Number("0x5a"), 5, 4, 0, Buffer.from(constructorLengthBuf));
9798
+ await this._transporter.send(Number("0x5a"), 5, 4, 0, buffer_default.from(constructorLengthBuf));
8140
9799
  const constructorBuf = concatenateArrayBuffer(
8141
9800
  compiledConstructor.map((parameter) => {
8142
9801
  const a = this.convertBnToLedger(parameter);
@@ -8149,7 +9808,7 @@ var LedgerSigner221 = class extends LedgerSigner111 {
8149
9808
  constructorChunks.push(constructorBuf.subarray(i, i + chunkSize));
8150
9809
  let respSign = new Uint8Array(0);
8151
9810
  for (const chunk of constructorChunks) {
8152
- respSign = await this._transporter.send(Number("0x5a"), 5, 5, 0, Buffer.from(chunk));
9811
+ respSign = await this._transporter.send(Number("0x5a"), 5, 5, 0, buffer_default.from(chunk));
8153
9812
  }
8154
9813
  return this.decodeSignatureLedger(respSign);
8155
9814
  }
@@ -8239,7 +9898,7 @@ var LedgerSigner231 = class extends LedgerSigner221 {
8239
9898
  txDetails.accountDeploymentData.length <= 7,
8240
9899
  "accountDeploymentData includes more than 7 items"
8241
9900
  );
8242
- await this._transporter.send(Number("0x5a"), 3, 0, 0, Buffer.from(this.pathBuffer));
9901
+ await this._transporter.send(Number("0x5a"), 3, 0, 0, buffer_default.from(this.pathBuffer));
8243
9902
  const accountAddressBuf = this.convertBnToLedger(txDetails.walletAddress);
8244
9903
  const chainIdBuf = this.convertBnToLedger(txDetails.chainId);
8245
9904
  const nonceBuf = this.convertBnToLedger(txDetails.nonce);
@@ -8255,7 +9914,7 @@ var LedgerSigner231 = class extends LedgerSigner221 {
8255
9914
  nonceBuf,
8256
9915
  dAModeHashBuf
8257
9916
  ]);
8258
- await this._transporter.send(Number("0x5a"), 3, 1, 0, Buffer.from(dataBuf));
9917
+ await this._transporter.send(Number("0x5a"), 3, 1, 0, buffer_default.from(dataBuf));
8259
9918
  if (isRPC08Plus_ResourceBoundsBN(txDetails.resourceBounds)) {
8260
9919
  const tipBuf = this.convertBnToLedger(txDetails.tip);
8261
9920
  const l1_gasBuf = this.convertBnToLedger(encodeResourceBoundsL1(txDetails.resourceBounds));
@@ -8269,7 +9928,7 @@ var LedgerSigner231 = class extends LedgerSigner221 {
8269
9928
  l2_gasBuf,
8270
9929
  l1_data_gasBuf
8271
9930
  ]);
8272
- await this._transporter.send(Number("0x5a"), 3, 2, 0, Buffer.from(feeBuf));
9931
+ await this._transporter.send(Number("0x5a"), 3, 2, 0, buffer_default.from(feeBuf));
8273
9932
  }
8274
9933
  const paymasterBuf = concatenateArrayBuffer(
8275
9934
  txDetails.paymasterData.map((value) => {
@@ -8277,23 +9936,23 @@ var LedgerSigner231 = class extends LedgerSigner221 {
8277
9936
  return a;
8278
9937
  })
8279
9938
  );
8280
- await this._transporter.send(Number("0x5a"), 3, 3, 0, Buffer.from(paymasterBuf));
9939
+ await this._transporter.send(Number("0x5a"), 3, 3, 0, buffer_default.from(paymasterBuf));
8281
9940
  const accountDeployDataBuf = concatenateArrayBuffer(
8282
9941
  txDetails.paymasterData.map((value) => {
8283
9942
  const a = this.convertBnToLedger(value);
8284
9943
  return a;
8285
9944
  })
8286
9945
  );
8287
- await this._transporter.send(Number("0x5a"), 3, 4, 0, Buffer.from(accountDeployDataBuf));
9946
+ await this._transporter.send(Number("0x5a"), 3, 4, 0, buffer_default.from(accountDeployDataBuf));
8288
9947
  const nbCallsBuf = this.convertBnToLedger(calls.length);
8289
- await this._transporter.send(Number("0x5a"), 3, 5, 0, Buffer.from(nbCallsBuf));
9948
+ await this._transporter.send(Number("0x5a"), 3, 5, 0, buffer_default.from(nbCallsBuf));
8290
9949
  let respSign = new Uint8Array(0);
8291
9950
  for (const call of calls) {
8292
9951
  const calldatas = this.encodeCall(call);
8293
- respSign = await this._transporter.send(Number("0x5a"), 3, 6, 0, Buffer.from(calldatas[0]));
9952
+ respSign = await this._transporter.send(Number("0x5a"), 3, 6, 0, buffer_default.from(calldatas[0]));
8294
9953
  if (calldatas.length > 1) {
8295
9954
  calldatas.slice(1).forEach(async (part) => {
8296
- respSign = await this._transporter.send(Number("0x5a"), 3, 6, 1, Buffer.from(part));
9955
+ respSign = await this._transporter.send(Number("0x5a"), 3, 6, 1, buffer_default.from(part));
8297
9956
  });
8298
9957
  }
8299
9958
  }
@@ -8329,7 +9988,7 @@ var LedgerSigner231 = class extends LedgerSigner221 {
8329
9988
  * ```
8330
9989
  */
8331
9990
  async signDeployAccountV3(deployAccountDetail) {
8332
- await this._transporter.send(Number("0x5a"), 5, 0, 0, Buffer.from(this.pathBuffer));
9991
+ await this._transporter.send(Number("0x5a"), 5, 0, 0, buffer_default.from(this.pathBuffer));
8333
9992
  const accountAddressBuf = this.convertBnToLedger(
8334
9993
  deployAccountDetail.contractAddress
8335
9994
  );
@@ -8351,7 +10010,7 @@ var LedgerSigner231 = class extends LedgerSigner221 {
8351
10010
  classHashBuf,
8352
10011
  saltBuf
8353
10012
  ]);
8354
- await this._transporter.send(Number("0x5a"), 5, 1, 0, Buffer.from(dataBuf));
10013
+ await this._transporter.send(Number("0x5a"), 5, 1, 0, buffer_default.from(dataBuf));
8355
10014
  if (isRPC08Plus_ResourceBoundsBN(deployAccountDetail.resourceBounds)) {
8356
10015
  const tipBuf = this.convertBnToLedger(deployAccountDetail.tip);
8357
10016
  const l1_gasBuf = this.convertBnToLedger(
@@ -8369,7 +10028,7 @@ var LedgerSigner231 = class extends LedgerSigner221 {
8369
10028
  l2_gasBuf,
8370
10029
  l1_data_gasBuf
8371
10030
  ]);
8372
- await this._transporter.send(Number("0x5a"), 5, 2, 0, Buffer.from(feeBuf));
10031
+ await this._transporter.send(Number("0x5a"), 5, 2, 0, buffer_default.from(feeBuf));
8373
10032
  }
8374
10033
  const paymasterBuf = concatenateArrayBuffer(
8375
10034
  deployAccountDetail.paymasterData.map((value) => {
@@ -8377,10 +10036,10 @@ var LedgerSigner231 = class extends LedgerSigner221 {
8377
10036
  return a;
8378
10037
  })
8379
10038
  );
8380
- await this._transporter.send(Number("0x5a"), 5, 3, 0, Buffer.from(paymasterBuf));
10039
+ await this._transporter.send(Number("0x5a"), 5, 3, 0, buffer_default.from(paymasterBuf));
8381
10040
  const compiledConstructor = CallData.compile(deployAccountDetail.constructorCalldata);
8382
10041
  const constructorLengthBuf = this.convertBnToLedger(compiledConstructor.length);
8383
- await this._transporter.send(Number("0x5a"), 5, 4, 0, Buffer.from(constructorLengthBuf));
10042
+ await this._transporter.send(Number("0x5a"), 5, 4, 0, buffer_default.from(constructorLengthBuf));
8384
10043
  const constructorBuf = concatenateArrayBuffer(
8385
10044
  compiledConstructor.map((parameter) => {
8386
10045
  const a = this.convertBnToLedger(parameter);
@@ -8393,7 +10052,7 @@ var LedgerSigner231 = class extends LedgerSigner221 {
8393
10052
  constructorChunks.push(constructorBuf.subarray(i, i + chunkSize));
8394
10053
  let respSign = new Uint8Array(0);
8395
10054
  for (const chunk of constructorChunks) {
8396
- respSign = await this._transporter.send(Number("0x5a"), 5, 5, 0, Buffer.from(chunk));
10055
+ respSign = await this._transporter.send(Number("0x5a"), 5, 5, 0, buffer_default.from(chunk));
8397
10056
  }
8398
10057
  return this.decodeSignatureLedger(respSign);
8399
10058
  }
@@ -9921,7 +11580,11 @@ function mergeAbiEvents(target, source) {
9921
11580
  Object.keys(source).forEach((key) => {
9922
11581
  if (isObject(source[key])) {
9923
11582
  if (!(key in target)) Object.assign(output, { [key]: source[key] });
9924
- else output[key] = mergeAbiEvents(target[key], source[key]);
11583
+ else
11584
+ output[key] = mergeAbiEvents(
11585
+ target[key],
11586
+ source[key]
11587
+ );
9925
11588
  } else {
9926
11589
  Object.assign(output, { [key]: source[key] });
9927
11590
  }
@@ -9929,7 +11592,7 @@ function mergeAbiEvents(target, source) {
9929
11592
  }
9930
11593
  return output;
9931
11594
  }
9932
- function parseEvents(providerReceivedEvents, abiEvents, abiStructs, abiEnums) {
11595
+ function parseEvents(providerReceivedEvents, abiEvents, abiStructs, abiEnums, parser) {
9933
11596
  const ret = providerReceivedEvents.flat().reduce((acc, recEvent) => {
9934
11597
  const currentEvent = JSON.parse(JSON.stringify(recEvent));
9935
11598
  let abiEvent = abiEvents[currentEvent.keys.shift() ?? 0];
@@ -9948,22 +11611,24 @@ function parseEvents(providerReceivedEvents, abiEvents, abiStructs, abiEnums) {
9948
11611
  const abiEventKeys = abiEvent.members?.filter((it) => it.kind === "key") || abiEvent.keys;
9949
11612
  const abiEventData = abiEvent.members?.filter((it) => it.kind === "data") || abiEvent.data;
9950
11613
  abiEventKeys.forEach((key) => {
9951
- parsedEvent[abiEvent.name][key.name] = responseParser(
9952
- keysIter,
9953
- key,
9954
- abiStructs,
9955
- abiEnums,
9956
- parsedEvent[abiEvent.name]
9957
- );
11614
+ parsedEvent[abiEvent.name][key.name] = responseParser({
11615
+ responseIterator: keysIter,
11616
+ output: key,
11617
+ structs: abiStructs,
11618
+ enums: abiEnums,
11619
+ parser,
11620
+ parsedResult: parsedEvent[abiEvent.name]
11621
+ });
9958
11622
  });
9959
11623
  abiEventData.forEach((data) => {
9960
- parsedEvent[abiEvent.name][data.name] = responseParser(
9961
- dataIter,
9962
- data,
9963
- abiStructs,
9964
- abiEnums,
9965
- parsedEvent[abiEvent.name]
9966
- );
11624
+ parsedEvent[abiEvent.name][data.name] = responseParser({
11625
+ responseIterator: dataIter,
11626
+ output: data,
11627
+ structs: abiStructs,
11628
+ enums: abiEnums,
11629
+ parser,
11630
+ parsedResult: parsedEvent[abiEvent.name]
11631
+ });
9967
11632
  });
9968
11633
  if ("block_hash" in currentEvent) parsedEvent.block_hash = currentEvent.block_hash;
9969
11634
  if ("block_number" in currentEvent) parsedEvent.block_number = currentEvent.block_number;
@@ -9981,8 +11646,8 @@ function buildCall(contract, functionAbi) {
9981
11646
  const options = { ...contract.withOptionsProps };
9982
11647
  contract.withOptionsProps = void 0;
9983
11648
  return contract.call(functionAbi.name, args, {
9984
- parseRequest: true,
9985
- parseResponse: true,
11649
+ parseRequest: contract.parseRequest,
11650
+ parseResponse: contract.parseResponse,
9986
11651
  ...options
9987
11652
  });
9988
11653
  };
@@ -9992,7 +11657,7 @@ function buildInvoke(contract, functionAbi) {
9992
11657
  const options = { ...contract.withOptionsProps };
9993
11658
  contract.withOptionsProps = void 0;
9994
11659
  return contract.invoke(functionAbi.name, args, {
9995
- parseRequest: true,
11660
+ parseRequest: contract.parseRequest,
9996
11661
  ...options
9997
11662
  });
9998
11663
  };
@@ -10020,6 +11685,8 @@ var Contract = class _Contract {
10020
11685
  address;
10021
11686
  providerOrAccount;
10022
11687
  classHash;
11688
+ parseRequest;
11689
+ parseResponse;
10023
11690
  structs;
10024
11691
  events;
10025
11692
  functions;
@@ -10028,6 +11695,7 @@ var Contract = class _Contract {
10028
11695
  estimateFee;
10029
11696
  callData;
10030
11697
  withOptionsProps;
11698
+ parsingStrategy;
10031
11699
  /**
10032
11700
  * @param options
10033
11701
  * - abi: Abi of the contract object (required)
@@ -10035,14 +11703,18 @@ var Contract = class _Contract {
10035
11703
  * - providerOrAccount?: Provider or Account to attach to (fallback to defaultProvider)
10036
11704
  * - parseRequest?: compile and validate arguments (optional, default true)
10037
11705
  * - parseResponse?: Parse elements of the response array and structuring them into response object (optional, default true)
11706
+ * - parser?: Abi parser (optional, default createAbiParser(options.abi))
10038
11707
  */
10039
11708
  constructor(options) {
10040
- const parser = createAbiParser(options.abi);
10041
- this.address = options.address && options.address.toLowerCase();
11709
+ this.parsingStrategy = options.parsingStrategy;
11710
+ const parser = createAbiParser(options.abi, options.parsingStrategy);
10042
11711
  this.abi = parser.getLegacyFormat();
11712
+ this.address = options.address && options.address.toLowerCase();
10043
11713
  this.providerOrAccount = options.providerOrAccount ?? defaultProvider;
11714
+ this.parseRequest = options.parseRequest ?? true;
11715
+ this.parseResponse = options.parseResponse ?? true;
10044
11716
  this.classHash = options.classHash;
10045
- this.callData = new CallData(options.abi);
11717
+ this.callData = new CallData(options.abi, options.parsingStrategy);
10046
11718
  this.structs = CallData.getAbiStruct(options.abi);
10047
11719
  this.events = getAbiEvents(options.abi);
10048
11720
  const methodTypes = { enumerable: true, value: {}, writable: false };
@@ -10094,8 +11766,9 @@ var Contract = class _Contract {
10094
11766
  attach(address, abi) {
10095
11767
  this.address = address;
10096
11768
  if (abi) {
10097
- this.abi = createAbiParser(abi).getLegacyFormat();
10098
- this.callData = new CallData(abi);
11769
+ const parser = createAbiParser(abi, this.parsingStrategy);
11770
+ this.abi = parser.getLegacyFormat();
11771
+ this.callData = new CallData(abi, this.parsingStrategy);
10099
11772
  this.structs = CallData.getAbiStruct(abi);
10100
11773
  this.events = getAbiEvents(abi);
10101
11774
  }
@@ -10141,7 +11814,8 @@ var Contract = class _Contract {
10141
11814
  return this.callData.parse(method, it);
10142
11815
  });
10143
11816
  }
10144
- invoke(method, args = [], { parseRequest = true, signature, ...RestInvokeOptions } = {}) {
11817
+ async invoke(method, args = [], options = {}) {
11818
+ const { parseRequest = true, signature, waitForTransaction, ...RestInvokeOptions } = options;
10145
11819
  assert(this.address !== null, "contract is not connected to an address");
10146
11820
  const calldata = getCompiledCalldata(args, () => {
10147
11821
  if (parseRequest) {
@@ -10157,9 +11831,17 @@ var Contract = class _Contract {
10157
11831
  entrypoint: method
10158
11832
  };
10159
11833
  if (isAccount(this.providerOrAccount)) {
10160
- return this.providerOrAccount.execute(invocation, {
11834
+ const result = await this.providerOrAccount.execute(invocation, {
10161
11835
  ...RestInvokeOptions
10162
11836
  });
11837
+ if (waitForTransaction) {
11838
+ const result2 = await this.providerOrAccount.waitForTransaction(result.transaction_hash);
11839
+ if (result2.isSuccess()) {
11840
+ return result2;
11841
+ }
11842
+ throw new Error("Transaction failed", { cause: result2 });
11843
+ }
11844
+ return result;
10163
11845
  }
10164
11846
  if (!RestInvokeOptions.nonce)
10165
11847
  throw new Error(`Manual nonce is required when invoking a function without an account`);
@@ -10197,9 +11879,9 @@ var Contract = class _Contract {
10197
11879
  // TODO: Demistify what is going on here ???
10198
11880
  // TODO: receipt status filtering test and fix this do not look right
10199
11881
  parseEvents(receipt) {
10200
- let parsed;
11882
+ let parsed = [];
10201
11883
  receipt.match({
10202
- success: (txR) => {
11884
+ SUCCEEDED: (txR) => {
10203
11885
  const emittedEvents = txR.events?.map((event) => {
10204
11886
  return {
10205
11887
  // TODO: this do not check that block is production and block_hash and block_number actually exists
@@ -10212,16 +11894,26 @@ var Contract = class _Contract {
10212
11894
  }).filter((event) => cleanHex(event.from_address) === cleanHex(this.address), []) || [];
10213
11895
  parsed = parseEvents(
10214
11896
  emittedEvents,
10215
- // TODO: any temp hotfix, fix this
10216
11897
  this.events,
10217
11898
  this.structs,
10218
- CallData.getAbiEnum(this.abi)
11899
+ CallData.getAbiEnum(this.abi),
11900
+ this.callData.parser
10219
11901
  );
10220
11902
  },
10221
11903
  _: () => {
10222
11904
  throw Error("This transaction was not successful.");
10223
11905
  }
10224
11906
  });
11907
+ Object.defineProperty(parsed, "getByPath", {
11908
+ value: (path) => {
11909
+ const event = parsed.find((ev) => Object.keys(ev).some((key) => key.includes(path)));
11910
+ const eventKey = Object.keys(event || {}).find((key) => key.includes(path));
11911
+ return eventKey && event ? event[eventKey] : null;
11912
+ },
11913
+ writable: false,
11914
+ enumerable: false,
11915
+ configurable: false
11916
+ });
10225
11917
  return parsed;
10226
11918
  }
10227
11919
  isCairo1() {
@@ -10338,7 +12030,10 @@ var Contract = class _Contract {
10338
12030
  abi,
10339
12031
  address: contract_address,
10340
12032
  providerOrAccount: account,
10341
- classHash
12033
+ classHash,
12034
+ parseRequest: params.parseRequest,
12035
+ parseResponse: params.parseResponse,
12036
+ parsingStrategy: params.parsingStrategy
10342
12037
  });
10343
12038
  }
10344
12039
  };
@@ -10394,19 +12089,33 @@ function units(amount, simbol = "fri") {
10394
12089
  }
10395
12090
  var export_TypedDataRevision = api_exports.TypedDataRevision;
10396
12091
  export {
12092
+ AbiParser1,
12093
+ AbiParser2,
12094
+ AbiParserInterface,
10397
12095
  Account,
10398
12096
  AccountInterface,
10399
12097
  BatchClient,
10400
12098
  BlockStatus,
10401
12099
  BlockTag,
12100
+ CairoByteArray,
10402
12101
  CairoCustomEnum,
10403
12102
  CairoFixedArray,
12103
+ CairoInt128,
12104
+ CairoInt16,
12105
+ CairoInt32,
12106
+ CairoInt64,
12107
+ CairoInt8,
10404
12108
  CairoOption,
10405
12109
  CairoOptionVariant,
10406
12110
  CairoResult,
10407
12111
  CairoResultVariant,
12112
+ CairoUint128,
12113
+ CairoUint16,
10408
12114
  CairoUint256,
10409
12115
  CairoUint512,
12116
+ CairoUint64,
12117
+ CairoUint8,
12118
+ CairoUint96,
10410
12119
  CallData,
10411
12120
  Contract,
10412
12121
  ContractInterface,
@@ -10422,6 +12131,7 @@ export {
10422
12131
  ETransactionVersion3,
10423
12132
  EntryPointType,
10424
12133
  EthSigner,
12134
+ Int,
10425
12135
  LedgerSigner111 as LedgerSigner,
10426
12136
  LedgerSigner111,
10427
12137
  LedgerSigner221,
@@ -10475,6 +12185,8 @@ export {
10475
12185
  config,
10476
12186
  constants_exports as constants,
10477
12187
  contractClassResponseToLegacyCompiledContract,
12188
+ createAbiParser,
12189
+ createTransactionReceipt,
10478
12190
  defaultDeployer,
10479
12191
  defaultPaymaster,
10480
12192
  defaultProvider,
@@ -10483,6 +12195,8 @@ export {
10483
12195
  eth_exports as eth,
10484
12196
  events_exports as events,
10485
12197
  extractContractHashes,
12198
+ fastParsingStrategy,
12199
+ getAbiVersion,
10486
12200
  getChecksumAddress,
10487
12201
  getGasPrices,
10488
12202
  getLedgerPathBuffer111 as getLedgerPathBuffer,
@@ -10490,7 +12204,9 @@ export {
10490
12204
  getLedgerPathBuffer221,
10491
12205
  getTipStatsFromBlocks,
10492
12206
  hash_exports as hash,
12207
+ hdParsingStrategy,
10493
12208
  isAccount,
12209
+ isNoConstructorValid,
10494
12210
  isPendingBlock,
10495
12211
  isPendingStateUpdate,
10496
12212
  isPendingTransaction,