starknet 6.9.0 → 6.10.1

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.
Files changed (315) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +1 -1
  3. package/README.md +5 -9
  4. package/dist/account/default.cjs +655 -0
  5. package/dist/account/default.d.ts +67 -0
  6. package/dist/account/default.mjs +652 -0
  7. package/dist/account/index.cjs +27 -0
  8. package/dist/account/index.d.ts +2 -0
  9. package/dist/account/index.mjs +2 -0
  10. package/dist/account/interface.cjs +9 -0
  11. package/dist/account/interface.d.ts +301 -0
  12. package/dist/account/interface.mjs +3 -0
  13. package/dist/channel/index.cjs +27 -0
  14. package/dist/channel/index.d.ts +3 -0
  15. package/dist/channel/index.mjs +3 -0
  16. package/dist/channel/rpc_0_6.cjs +607 -0
  17. package/dist/channel/rpc_0_6.d.ts +78 -0
  18. package/dist/channel/rpc_0_6.mjs +543 -0
  19. package/dist/channel/rpc_0_7.cjs +619 -0
  20. package/dist/channel/rpc_0_7.d.ts +81 -0
  21. package/dist/channel/rpc_0_7.mjs +561 -0
  22. package/dist/constants.cjs +76 -0
  23. package/dist/constants.d.ts +70 -0
  24. package/dist/constants.mjs +60 -0
  25. package/dist/contract/contractFactory.cjs +93 -0
  26. package/dist/contract/contractFactory.d.ts +46 -0
  27. package/dist/contract/contractFactory.mjs +83 -0
  28. package/dist/contract/default.cjs +269 -0
  29. package/dist/contract/default.d.ts +58 -0
  30. package/dist/contract/default.mjs +254 -0
  31. package/dist/contract/index.cjs +38 -0
  32. package/dist/contract/index.d.ts +3 -0
  33. package/dist/contract/index.mjs +3 -0
  34. package/dist/contract/interface.cjs +13 -0
  35. package/dist/contract/interface.d.ts +128 -0
  36. package/dist/contract/interface.mjs +6 -0
  37. package/dist/index.cjs +267 -0
  38. package/dist/index.d.ts +45 -5991
  39. package/dist/index.global.js +728 -609
  40. package/dist/index.global.js.map +1 -1
  41. package/dist/index.mjs +39 -7320
  42. package/dist/provider/errors.cjs +50 -0
  43. package/dist/provider/errors.d.ts +16 -0
  44. package/dist/provider/errors.mjs +35 -0
  45. package/dist/provider/extensions/default.cjs +11 -0
  46. package/dist/provider/extensions/default.d.ts +6 -0
  47. package/dist/provider/extensions/default.mjs +5 -0
  48. package/dist/provider/extensions/starknetId.cjs +174 -0
  49. package/dist/provider/extensions/starknetId.d.ts +10 -0
  50. package/dist/provider/extensions/starknetId.mjs +230 -0
  51. package/dist/provider/index.cjs +56 -0
  52. package/dist/provider/index.d.ts +6 -0
  53. package/dist/provider/index.mjs +6 -0
  54. package/dist/provider/interface.cjs +8 -0
  55. package/dist/provider/interface.d.ts +261 -0
  56. package/dist/provider/interface.mjs +2 -0
  57. package/dist/provider/rpc.cjs +301 -0
  58. package/dist/provider/rpc.d.ts +115 -0
  59. package/dist/provider/rpc.mjs +302 -0
  60. package/dist/service/types.cjs +1 -0
  61. package/dist/service/types.d.ts +5 -0
  62. package/dist/service/types.mjs +0 -0
  63. package/dist/signer/default.cjs +105 -0
  64. package/dist/signer/default.d.ts +12 -0
  65. package/dist/signer/default.mjs +102 -0
  66. package/dist/signer/ethSigner.cjs +123 -0
  67. package/dist/signer/ethSigner.d.ts +25 -0
  68. package/dist/signer/ethSigner.mjs +140 -0
  69. package/dist/signer/index.cjs +38 -0
  70. package/dist/signer/index.d.ts +3 -0
  71. package/dist/signer/index.mjs +3 -0
  72. package/dist/signer/interface.cjs +8 -0
  73. package/dist/signer/interface.d.ts +115 -0
  74. package/dist/signer/interface.mjs +2 -0
  75. package/dist/types/account.cjs +1 -0
  76. package/dist/types/account.d.ts +79 -0
  77. package/dist/types/account.mjs +0 -0
  78. package/dist/types/api/index.cjs +30 -0
  79. package/dist/types/api/index.d.ts +4 -0
  80. package/dist/types/api/index.mjs +4 -0
  81. package/dist/types/api/jsonrpc/index.cjs +1 -0
  82. package/dist/types/api/jsonrpc/index.d.ts +21 -0
  83. package/dist/types/api/jsonrpc/index.mjs +0 -0
  84. package/dist/types/api/rpcspec_0_6/components.cjs +1 -0
  85. package/dist/types/api/rpcspec_0_6/components.d.ts +541 -0
  86. package/dist/types/api/rpcspec_0_6/components.mjs +0 -0
  87. package/dist/types/api/rpcspec_0_6/contract.cjs +1 -0
  88. package/dist/types/api/rpcspec_0_6/contract.d.ts +85 -0
  89. package/dist/types/api/rpcspec_0_6/contract.mjs +0 -0
  90. package/dist/types/api/rpcspec_0_6/errors.cjs +1 -0
  91. package/dist/types/api/rpcspec_0_6/errors.d.ts +128 -0
  92. package/dist/types/api/rpcspec_0_6/errors.mjs +0 -0
  93. package/dist/types/api/rpcspec_0_6/index.cjs +45 -0
  94. package/dist/types/api/rpcspec_0_6/index.d.ts +8 -0
  95. package/dist/types/api/rpcspec_0_6/index.mjs +5 -0
  96. package/dist/types/api/rpcspec_0_6/methods.cjs +1 -0
  97. package/dist/types/api/rpcspec_0_6/methods.d.ts +207 -0
  98. package/dist/types/api/rpcspec_0_6/methods.mjs +0 -0
  99. package/dist/types/api/rpcspec_0_6/nonspec.cjs +65 -0
  100. package/dist/types/api/rpcspec_0_6/nonspec.d.ts +147 -0
  101. package/dist/types/api/rpcspec_0_6/nonspec.mjs +59 -0
  102. package/dist/types/cairoEnum.cjs +1 -0
  103. package/dist/types/cairoEnum.d.ts +2 -0
  104. package/dist/types/cairoEnum.mjs +0 -0
  105. package/dist/types/calldata.cjs +27 -0
  106. package/dist/types/calldata.d.ts +23 -0
  107. package/dist/types/calldata.mjs +21 -0
  108. package/dist/types/contract.cjs +1 -0
  109. package/dist/types/contract.d.ts +27 -0
  110. package/dist/types/contract.mjs +0 -0
  111. package/dist/types/helpers/valuesType.cjs +1 -0
  112. package/dist/types/helpers/valuesType.d.ts +1 -0
  113. package/dist/types/helpers/valuesType.mjs +0 -0
  114. package/dist/types/index.cjs +121 -0
  115. package/dist/types/index.d.ts +10 -0
  116. package/dist/types/index.mjs +10 -0
  117. package/dist/types/lib/contract/abi.cjs +1 -0
  118. package/dist/types/lib/contract/abi.d.ts +71 -0
  119. package/dist/types/lib/contract/abi.mjs +0 -0
  120. package/dist/types/lib/contract/index.cjs +50 -0
  121. package/dist/types/lib/contract/index.d.ts +26 -0
  122. package/dist/types/lib/contract/index.mjs +8 -0
  123. package/dist/types/lib/contract/legacy.cjs +1 -0
  124. package/dist/types/lib/contract/legacy.d.ts +33 -0
  125. package/dist/types/lib/contract/legacy.mjs +0 -0
  126. package/dist/types/lib/contract/sierra.cjs +1 -0
  127. package/dist/types/lib/contract/sierra.d.ts +52 -0
  128. package/dist/types/lib/contract/sierra.mjs +0 -0
  129. package/dist/types/lib/index.cjs +61 -0
  130. package/dist/types/lib/index.d.ts +259 -0
  131. package/dist/types/lib/index.mjs +36 -0
  132. package/dist/types/provider/configuration.cjs +1 -0
  133. package/dist/types/provider/configuration.d.ts +20 -0
  134. package/dist/types/provider/configuration.mjs +0 -0
  135. package/dist/types/provider/index.cjs +27 -0
  136. package/dist/types/provider/index.d.ts +2 -0
  137. package/dist/types/provider/index.mjs +2 -0
  138. package/dist/types/provider/response.cjs +30 -0
  139. package/dist/types/provider/response.d.ts +98 -0
  140. package/dist/types/provider/response.mjs +1 -0
  141. package/dist/types/provider/spec.cjs +1 -0
  142. package/dist/types/provider/spec.d.ts +49 -0
  143. package/dist/types/provider/spec.mjs +0 -0
  144. package/dist/types/signer.cjs +1 -0
  145. package/dist/types/signer.d.ts +49 -0
  146. package/dist/types/signer.mjs +0 -0
  147. package/dist/types/transactionReceipt.cjs +1 -0
  148. package/dist/types/transactionReceipt.d.ts +23 -0
  149. package/dist/types/transactionReceipt.mjs +0 -0
  150. package/dist/types/typedData.cjs +12 -0
  151. package/dist/types/typedData.d.ts +1 -0
  152. package/dist/types/typedData.mjs +3 -0
  153. package/dist/utils/address.cjs +44 -0
  154. package/dist/utils/address.d.ts +55 -0
  155. package/dist/utils/address.mjs +35 -0
  156. package/dist/utils/assert.cjs +11 -0
  157. package/dist/utils/assert.d.ts +12 -0
  158. package/dist/utils/assert.mjs +5 -0
  159. package/dist/utils/cairoDataTypes/felt.cjs +31 -0
  160. package/dist/utils/cairoDataTypes/felt.d.ts +6 -0
  161. package/dist/utils/cairoDataTypes/felt.mjs +27 -0
  162. package/dist/utils/cairoDataTypes/uint256.cjs +113 -0
  163. package/dist/utils/cairoDataTypes/uint256.d.ts +72 -0
  164. package/dist/utils/cairoDataTypes/uint256.mjs +103 -0
  165. package/dist/utils/cairoDataTypes/uint512.cjs +125 -0
  166. package/dist/utils/cairoDataTypes/uint512.d.ts +76 -0
  167. package/dist/utils/cairoDataTypes/uint512.mjs +123 -0
  168. package/dist/utils/calldata/byteArray.cjs +27 -0
  169. package/dist/utils/calldata/byteArray.d.ts +32 -0
  170. package/dist/utils/calldata/byteArray.mjs +20 -0
  171. package/dist/utils/calldata/cairo.cjs +114 -0
  172. package/dist/utils/calldata/cairo.d.ts +196 -0
  173. package/dist/utils/calldata/cairo.mjs +68 -0
  174. package/dist/utils/calldata/enum/CairoCustomEnum.cjs +55 -0
  175. package/dist/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  176. package/dist/utils/calldata/enum/CairoCustomEnum.mjs +50 -0
  177. package/dist/utils/calldata/enum/CairoOption.cjs +55 -0
  178. package/dist/utils/calldata/enum/CairoOption.d.ts +37 -0
  179. package/dist/utils/calldata/enum/CairoOption.mjs +50 -0
  180. package/dist/utils/calldata/enum/CairoResult.cjs +54 -0
  181. package/dist/utils/calldata/enum/CairoResult.d.ts +36 -0
  182. package/dist/utils/calldata/enum/CairoResult.mjs +47 -0
  183. package/dist/utils/calldata/enum/index.cjs +38 -0
  184. package/dist/utils/calldata/enum/index.d.ts +3 -0
  185. package/dist/utils/calldata/enum/index.mjs +3 -0
  186. package/dist/utils/calldata/formatter.cjs +55 -0
  187. package/dist/utils/calldata/formatter.d.ts +9 -0
  188. package/dist/utils/calldata/formatter.mjs +58 -0
  189. package/dist/utils/calldata/index.cjs +272 -0
  190. package/dist/utils/calldata/index.d.ts +90 -0
  191. package/dist/utils/calldata/index.mjs +276 -0
  192. package/dist/utils/calldata/parser/index.cjs +29 -0
  193. package/dist/utils/calldata/parser/index.d.ts +5 -0
  194. package/dist/utils/calldata/parser/index.mjs +21 -0
  195. package/dist/utils/calldata/parser/interface.cjs +8 -0
  196. package/dist/utils/calldata/parser/interface.d.ts +20 -0
  197. package/dist/utils/calldata/parser/interface.mjs +2 -0
  198. package/dist/utils/calldata/parser/parser-0-1.1.0.cjs +38 -0
  199. package/dist/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  200. package/dist/utils/calldata/parser/parser-0-1.1.0.mjs +31 -0
  201. package/dist/utils/calldata/parser/parser-2.0.0.cjs +42 -0
  202. package/dist/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  203. package/dist/utils/calldata/parser/parser-2.0.0.mjs +37 -0
  204. package/dist/utils/calldata/propertyOrder.cjs +159 -0
  205. package/dist/utils/calldata/propertyOrder.d.ts +2 -0
  206. package/dist/utils/calldata/propertyOrder.mjs +189 -0
  207. package/dist/utils/calldata/requestParser.cjs +204 -0
  208. package/dist/utils/calldata/requestParser.d.ts +11 -0
  209. package/dist/utils/calldata/requestParser.mjs +231 -0
  210. package/dist/utils/calldata/responseParser.cjs +200 -0
  211. package/dist/utils/calldata/responseParser.d.ts +11 -0
  212. package/dist/utils/calldata/responseParser.mjs +201 -0
  213. package/dist/utils/calldata/tuple.cjs +106 -0
  214. package/dist/utils/calldata/tuple.d.ts +6 -0
  215. package/dist/utils/calldata/tuple.mjs +88 -0
  216. package/dist/utils/calldata/validate.cjs +241 -0
  217. package/dist/utils/calldata/validate.d.ts +6 -0
  218. package/dist/utils/calldata/validate.mjs +315 -0
  219. package/dist/utils/contract.cjs +40 -0
  220. package/dist/utils/contract.d.ts +37 -0
  221. package/dist/utils/contract.mjs +31 -0
  222. package/dist/utils/ec.cjs +12 -0
  223. package/dist/utils/ec.d.ts +2 -0
  224. package/dist/utils/ec.mjs +2 -0
  225. package/dist/utils/encode.cjs +78 -0
  226. package/dist/utils/encode.d.ts +207 -0
  227. package/dist/utils/encode.mjs +56 -0
  228. package/dist/utils/eth.cjs +22 -0
  229. package/dist/utils/eth.d.ts +22 -0
  230. package/dist/utils/eth.mjs +14 -0
  231. package/dist/utils/events/index.cjs +144 -0
  232. package/dist/utils/events/index.d.ts +84 -0
  233. package/dist/utils/events/index.mjs +136 -0
  234. package/dist/utils/fetchPonyfill.cjs +14 -0
  235. package/dist/utils/fetchPonyfill.d.ts +2 -0
  236. package/dist/utils/fetchPonyfill.mjs +5 -0
  237. package/dist/utils/hash/classHash.cjs +151 -0
  238. package/dist/utils/hash/classHash.d.ts +120 -0
  239. package/dist/utils/hash/classHash.mjs +168 -0
  240. package/dist/utils/hash/index.cjs +49 -0
  241. package/dist/utils/hash/index.d.ts +7 -0
  242. package/dist/utils/hash/index.mjs +4 -0
  243. package/dist/utils/hash/selector.cjs +37 -0
  244. package/dist/utils/hash/selector.d.ts +57 -0
  245. package/dist/utils/hash/selector.mjs +28 -0
  246. package/dist/utils/hash/transactionHash/index.cjs +38 -0
  247. package/dist/utils/hash/transactionHash/index.d.ts +81 -0
  248. package/dist/utils/hash/transactionHash/index.mjs +102 -0
  249. package/dist/utils/hash/transactionHash/v2.cjs +31 -0
  250. package/dist/utils/hash/transactionHash/v2.d.ts +34 -0
  251. package/dist/utils/hash/transactionHash/v2.mjs +57 -0
  252. package/dist/utils/hash/transactionHash/v3.cjs +45 -0
  253. package/dist/utils/hash/transactionHash/v3.d.ts +24 -0
  254. package/dist/utils/hash/transactionHash/v3.mjs +80 -0
  255. package/dist/utils/json.cjs +21 -0
  256. package/dist/utils/json.d.ts +50 -0
  257. package/dist/utils/json.mjs +10 -0
  258. package/dist/utils/merkle.cjs +118 -0
  259. package/dist/utils/merkle.d.ts +87 -0
  260. package/dist/utils/merkle.mjs +114 -0
  261. package/dist/utils/num.cjs +109 -0
  262. package/dist/utils/num.d.ts +283 -0
  263. package/dist/utils/num.mjs +86 -0
  264. package/dist/utils/provider.cjs +182 -0
  265. package/dist/utils/provider.d.ts +217 -0
  266. package/dist/utils/provider.mjs +158 -0
  267. package/dist/utils/responseParser/index.cjs +27 -0
  268. package/dist/utils/responseParser/index.d.ts +2 -0
  269. package/dist/utils/responseParser/index.mjs +2 -0
  270. package/dist/utils/responseParser/interface.cjs +8 -0
  271. package/dist/utils/responseParser/interface.d.ts +13 -0
  272. package/dist/utils/responseParser/interface.mjs +2 -0
  273. package/dist/utils/responseParser/rpc.cjs +83 -0
  274. package/dist/utils/responseParser/rpc.d.ts +19 -0
  275. package/dist/utils/responseParser/rpc.mjs +77 -0
  276. package/dist/utils/shortString.cjs +56 -0
  277. package/dist/utils/shortString.d.ts +116 -0
  278. package/dist/utils/shortString.mjs +39 -0
  279. package/dist/utils/stark.cjs +137 -0
  280. package/dist/utils/stark.d.ts +224 -0
  281. package/dist/utils/stark.mjs +109 -0
  282. package/dist/utils/starknetId.cjs +196 -0
  283. package/dist/utils/starknetId.d.ts +182 -0
  284. package/dist/utils/starknetId.mjs +185 -0
  285. package/dist/utils/transaction.cjs +115 -0
  286. package/dist/utils/transaction.d.ts +185 -0
  287. package/dist/utils/transaction.mjs +98 -0
  288. package/dist/utils/transactionReceipt.cjs +54 -0
  289. package/dist/utils/transactionReceipt.d.ts +33 -0
  290. package/dist/utils/transactionReceipt.mjs +49 -0
  291. package/dist/utils/typedData.cjs +285 -0
  292. package/dist/utils/typedData.d.ts +54 -0
  293. package/dist/utils/typedData.mjs +286 -0
  294. package/dist/utils/uint256.cjs +30 -0
  295. package/dist/utils/uint256.d.ts +45 -0
  296. package/dist/utils/uint256.mjs +11 -0
  297. package/dist/utils/url.cjs +35 -0
  298. package/dist/utils/url.d.ts +29 -0
  299. package/dist/utils/url.mjs +27 -0
  300. package/dist/wallet/account.cjs +115 -0
  301. package/dist/wallet/account.d.ts +31 -0
  302. package/dist/wallet/account.mjs +112 -0
  303. package/dist/wallet/connect.cjs +90 -0
  304. package/dist/wallet/connect.d.ts +82 -0
  305. package/dist/wallet/connect.mjs +64 -0
  306. package/dist/wallet/index.cjs +16 -0
  307. package/dist/wallet/index.d.ts +1 -0
  308. package/dist/wallet/index.mjs +1 -0
  309. package/dist/wallet/types.cjs +1 -0
  310. package/dist/wallet/types.d.ts +4 -0
  311. package/dist/wallet/types.mjs +0 -0
  312. package/package.json +13 -13
  313. package/dist/index.js +0 -7426
  314. package/dist/index.js.map +0 -1
  315. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.cairo = exports.byteArray = exports.CallData = void 0;
7
+ Object.defineProperty(exports, "parseCalldataField", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _requestParser.parseCalldataField;
11
+ }
12
+ });
13
+ var _types = require("../../types/index.cjs");
14
+ var _assert = _interopRequireDefault(require("../assert.cjs"));
15
+ var _num = require("../num.cjs");
16
+ var _selector = require("../hash/selector.cjs");
17
+ var _shortString = require("../shortString.cjs");
18
+ var _byteArray2 = _interopRequireWildcard(require("./byteArray.cjs"));
19
+ var _byteArray = _byteArray2;
20
+ exports.byteArray = _byteArray2;
21
+ var _cairo2 = _interopRequireWildcard(require("./cairo.cjs"));
22
+ var _cairo = _cairo2;
23
+ exports.cairo = _cairo2;
24
+ var _enum = require("./enum/index.cjs");
25
+ var _formatter = _interopRequireDefault(require("./formatter.cjs"));
26
+ var _parser = require("./parser/index.cjs");
27
+ var _propertyOrder = _interopRequireDefault(require("./propertyOrder.cjs"));
28
+ var _requestParser = require("./requestParser.cjs");
29
+ var _responseParser = _interopRequireDefault(require("./responseParser.cjs"));
30
+ var _validate = _interopRequireDefault(require("./validate.cjs"));
31
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
32
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
33
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
34
+ class CallData {
35
+ abi;
36
+ parser;
37
+ structs;
38
+ enums;
39
+ constructor(abi) {
40
+ this.structs = CallData.getAbiStruct(abi);
41
+ this.enums = CallData.getAbiEnum(abi);
42
+ this.parser = (0, _parser.createAbiParser)(abi);
43
+ this.abi = this.parser.getLegacyFormat();
44
+ }
45
+ /**
46
+ * Validate arguments passed to the method as corresponding to the ones in the abi
47
+ * @param type ValidateType - type of the method
48
+ * @param method string - name of the method
49
+ * @param args ArgsOrCalldata - arguments that are passed to the method
50
+ */
51
+ validate(type, method, args = []) {
52
+ if (type !== _types.ValidateType.DEPLOY) {
53
+ const invocableFunctionNames = this.abi.filter(abi => {
54
+ if (abi.type !== "function") return false;
55
+ const isView = abi.stateMutability === "view" || abi.state_mutability === "view";
56
+ return type === _types.ValidateType.INVOKE ? !isView : isView;
57
+ }).map(abi => abi.name);
58
+ (0, _assert.default)(invocableFunctionNames.includes(method), `${type === _types.ValidateType.INVOKE ? "invocable" : "viewable"} method not found in abi`);
59
+ }
60
+ const abiMethod = this.abi.find(abi => type === _types.ValidateType.DEPLOY ? abi.name === method && abi.type === "constructor" : abi.name === method && abi.type === "function");
61
+ if ((0, _parser.isNoConstructorValid)(method, args, abiMethod)) {
62
+ return;
63
+ }
64
+ const inputsLength = this.parser.methodInputsLength(abiMethod);
65
+ if (args.length !== inputsLength) {
66
+ throw Error(`Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`);
67
+ }
68
+ (0, _validate.default)(abiMethod, args, this.structs, this.enums);
69
+ }
70
+ /**
71
+ * Compile contract callData with abi
72
+ * Parse the calldata by using input fields from the abi for that method
73
+ * @param method string - method name
74
+ * @param argsCalldata RawArgs - arguments passed to the method. Can be an array of arguments (in the order of abi definition), or an object constructed in conformity with abi (in this case, the parameter can be in a wrong order).
75
+ * @return Calldata - parsed arguments in format that contract is expecting
76
+ * @example
77
+ * ```typescript
78
+ * const calldata = myCallData.compile("constructor", ["0x34a", [1, 3n]]);
79
+ * ```
80
+ * ```typescript
81
+ * const calldata2 = myCallData.compile("constructor", {list:[1, 3n], balance:"0x34"}); // wrong order is valid
82
+ * ```
83
+ */
84
+ compile(method, argsCalldata) {
85
+ const abiMethod = this.abi.find(abiFunction => abiFunction.name === method);
86
+ if ((0, _parser.isNoConstructorValid)(method, argsCalldata, abiMethod)) {
87
+ return [];
88
+ }
89
+ let args;
90
+ if (Array.isArray(argsCalldata)) {
91
+ args = argsCalldata;
92
+ } else {
93
+ const orderedObject = (0, _propertyOrder.default)(argsCalldata, abiMethod.inputs, this.structs, this.enums);
94
+ args = Object.values(orderedObject);
95
+ (0, _validate.default)(abiMethod, args, this.structs, this.enums);
96
+ }
97
+ const argsIterator = args[Symbol.iterator]();
98
+ const callArray = abiMethod.inputs.reduce((acc, input) => (0, _cairo2.isLen)(input.name) && !(0, _cairo2.isCairo1Type)(input.type) ? acc : acc.concat((0, _requestParser.parseCalldataField)(argsIterator, input, this.structs, this.enums)), []);
99
+ Object.defineProperty(callArray, "__compiled__", {
100
+ enumerable: false,
101
+ writable: false,
102
+ value: true
103
+ });
104
+ return callArray;
105
+ }
106
+ /**
107
+ * Compile contract callData without abi
108
+ * @param rawArgs RawArgs representing cairo method arguments or string array of compiled data
109
+ * @returns Calldata
110
+ */
111
+ static compile(rawArgs) {
112
+ const createTree = obj => {
113
+ const getEntries = (o, prefix = ".") => {
114
+ const oe = Array.isArray(o) ? [o.length.toString(), ...o] : o;
115
+ return Object.entries(oe).flatMap(([k, v]) => {
116
+ let value = v;
117
+ if (k === "entrypoint") value = (0, _selector.getSelectorFromName)(value);else if ((0, _shortString.isLongText)(value)) value = (0, _byteArray2.byteArrayFromString)(value);
118
+ const kk = Array.isArray(oe) && k === "0" ? "$$len" : k;
119
+ if ((0, _num.isBigInt)(value)) return [[`${prefix}${kk}`, (0, _cairo2.felt)(value)]];
120
+ if (Object(value) === value) {
121
+ const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(value));
122
+ const keys = [...Object.getOwnPropertyNames(value), ...methodsKeys];
123
+ if (keys.includes("isSome") && keys.includes("isNone")) {
124
+ const myOption = value;
125
+ const variantNb = myOption.isSome() ? _enum.CairoOptionVariant.Some : _enum.CairoOptionVariant.None;
126
+ if (myOption.isSome()) return getEntries({
127
+ 0: variantNb,
128
+ 1: myOption.unwrap()
129
+ }, `${prefix}${kk}.`);
130
+ return [[`${prefix}${kk}`, (0, _cairo2.felt)(variantNb)]];
131
+ }
132
+ if (keys.includes("isOk") && keys.includes("isErr")) {
133
+ const myResult = value;
134
+ const variantNb = myResult.isOk() ? _enum.CairoResultVariant.Ok : _enum.CairoResultVariant.Err;
135
+ return getEntries({
136
+ 0: variantNb,
137
+ 1: myResult.unwrap()
138
+ }, `${prefix}${kk}.`);
139
+ }
140
+ if (keys.includes("variant") && keys.includes("activeVariant")) {
141
+ const myEnum = value;
142
+ const activeVariant = myEnum.activeVariant();
143
+ const listVariants = Object.keys(myEnum.variant);
144
+ const activeVariantNb = listVariants.findIndex(variant => variant === activeVariant);
145
+ if (typeof myEnum.unwrap() === "object" && Object.keys(myEnum.unwrap()).length === 0) {
146
+ return [[`${prefix}${kk}`, (0, _cairo2.felt)(activeVariantNb)]];
147
+ }
148
+ return getEntries({
149
+ 0: activeVariantNb,
150
+ 1: myEnum.unwrap()
151
+ }, `${prefix}${kk}.`);
152
+ }
153
+ return getEntries(value, `${prefix}${kk}.`);
154
+ }
155
+ return [[`${prefix}${kk}`, (0, _cairo2.felt)(value)]];
156
+ });
157
+ };
158
+ const result = Object.fromEntries(getEntries(obj));
159
+ return result;
160
+ };
161
+ let callTreeArray;
162
+ if (!Array.isArray(rawArgs)) {
163
+ const callTree = createTree(rawArgs);
164
+ callTreeArray = Object.values(callTree);
165
+ } else {
166
+ const callObj = {
167
+ ...rawArgs
168
+ };
169
+ const callTree = createTree(callObj);
170
+ callTreeArray = Object.values(callTree);
171
+ }
172
+ Object.defineProperty(callTreeArray, "__compiled__", {
173
+ enumerable: false,
174
+ writable: false,
175
+ value: true
176
+ });
177
+ return callTreeArray;
178
+ }
179
+ /**
180
+ * Parse elements of the response array and structuring them into response object
181
+ * @param method string - method name
182
+ * @param response string[] - response from the method
183
+ * @return Result - parsed response corresponding to the abi
184
+ */
185
+ parse(method, response) {
186
+ const {
187
+ outputs
188
+ } = this.abi.find(abi => abi.name === method);
189
+ const responseIterator = response.flat()[Symbol.iterator]();
190
+ const parsed = outputs.flat().reduce((acc, output, idx) => {
191
+ const propName = output.name ?? idx;
192
+ acc[propName] = (0, _responseParser.default)(responseIterator, output, this.structs, this.enums, acc);
193
+ if (acc[propName] && acc[`${propName}_len`]) {
194
+ delete acc[`${propName}_len`];
195
+ }
196
+ return acc;
197
+ }, {});
198
+ return Object.keys(parsed).length === 1 && 0 in parsed ? parsed[0] : parsed;
199
+ }
200
+ /**
201
+ * Format cairo method response data to native js values based on provided format schema
202
+ * @param method string - cairo method name
203
+ * @param response string[] - cairo method response
204
+ * @param format object - formatter object schema
205
+ * @returns Result - parsed and formatted response object
206
+ */
207
+ format(method, response, format) {
208
+ const parsed = this.parse(method, response);
209
+ return (0, _formatter.default)(parsed, format);
210
+ }
211
+ /**
212
+ * Helper to extract structs from abi
213
+ * @param abi Abi
214
+ * @returns AbiStructs - structs from abi
215
+ */
216
+ static getAbiStruct(abi) {
217
+ return abi.filter(abiEntry => abiEntry.type === "struct").reduce((acc, abiEntry) => ({
218
+ ...acc,
219
+ [abiEntry.name]: abiEntry
220
+ }), {});
221
+ }
222
+ /**
223
+ * Helper to extract enums from abi
224
+ * @param abi Abi
225
+ * @returns AbiEnums - enums from abi
226
+ */
227
+ static getAbiEnum(abi) {
228
+ const fullEnumList = abi.filter(abiEntry => abiEntry.type === "enum").reduce((acc, abiEntry) => ({
229
+ ...acc,
230
+ [abiEntry.name]: abiEntry
231
+ }), {});
232
+ delete fullEnumList["core::bool"];
233
+ return fullEnumList;
234
+ }
235
+ /**
236
+ * Helper: Compile HexCalldata | RawCalldata | RawArgs
237
+ * @param rawCalldata HexCalldata | RawCalldata | RawArgs
238
+ * @returns Calldata
239
+ */
240
+ static toCalldata(rawCalldata = []) {
241
+ return CallData.compile(rawCalldata);
242
+ }
243
+ /**
244
+ * Helper: Convert raw to HexCalldata
245
+ * @param raw HexCalldata | RawCalldata | RawArgs
246
+ * @returns HexCalldata
247
+ */
248
+ static toHex(raw = []) {
249
+ const calldata = CallData.compile(raw);
250
+ return calldata.map(it => (0, _num.toHex)(it));
251
+ }
252
+ /**
253
+ * Parse the elements of a contract response and structure them into one or several Result.
254
+ * In Cairo 0, arrays are not supported.
255
+ * @param typeCairo string or string[] - Cairo type name, ex : "hello::hello::UserData"
256
+ * @param response string[] - serialized data corresponding to typeCairo.
257
+ * @return Result or Result[] - parsed response corresponding to typeData.
258
+ * @example
259
+ * const res2=helloCallData.decodeParameters("hello::hello::UserData",["0x123456","0x1"]);
260
+ * result = { address: 1193046n, is_claimed: true }
261
+ */
262
+ decodeParameters(typeCairo, response) {
263
+ const typeCairoArray = Array.isArray(typeCairo) ? typeCairo : [typeCairo];
264
+ const responseIterator = response.flat()[Symbol.iterator]();
265
+ const decodedArray = typeCairoArray.map(typeParam => (0, _responseParser.default)(responseIterator, {
266
+ name: "",
267
+ type: typeParam
268
+ }, this.structs, this.enums));
269
+ return decodedArray.length === 1 ? decodedArray[0] : decodedArray;
270
+ }
271
+ }
272
+ exports.CallData = CallData;
@@ -0,0 +1,90 @@
1
+ import { Abi, AbiEnums, AbiStructs, AllowArray, ArgsOrCalldata, Calldata, HexCalldata, RawArgs, Result, ValidateType } from '../../types';
2
+ import { AbiParserInterface } from './parser/interface';
3
+ export * as cairo from './cairo';
4
+ export * as byteArray from './byteArray';
5
+ export { parseCalldataField } from './requestParser';
6
+ export declare class CallData {
7
+ abi: Abi;
8
+ parser: AbiParserInterface;
9
+ protected readonly structs: AbiStructs;
10
+ protected readonly enums: AbiEnums;
11
+ constructor(abi: Abi);
12
+ /**
13
+ * Validate arguments passed to the method as corresponding to the ones in the abi
14
+ * @param type ValidateType - type of the method
15
+ * @param method string - name of the method
16
+ * @param args ArgsOrCalldata - arguments that are passed to the method
17
+ */
18
+ validate(type: ValidateType, method: string, args?: ArgsOrCalldata): void;
19
+ /**
20
+ * Compile contract callData with abi
21
+ * Parse the calldata by using input fields from the abi for that method
22
+ * @param method string - method name
23
+ * @param argsCalldata RawArgs - arguments passed to the method. Can be an array of arguments (in the order of abi definition), or an object constructed in conformity with abi (in this case, the parameter can be in a wrong order).
24
+ * @return Calldata - parsed arguments in format that contract is expecting
25
+ * @example
26
+ * ```typescript
27
+ * const calldata = myCallData.compile("constructor", ["0x34a", [1, 3n]]);
28
+ * ```
29
+ * ```typescript
30
+ * const calldata2 = myCallData.compile("constructor", {list:[1, 3n], balance:"0x34"}); // wrong order is valid
31
+ * ```
32
+ */
33
+ compile(method: string, argsCalldata: RawArgs): Calldata;
34
+ /**
35
+ * Compile contract callData without abi
36
+ * @param rawArgs RawArgs representing cairo method arguments or string array of compiled data
37
+ * @returns Calldata
38
+ */
39
+ static compile(rawArgs: RawArgs): Calldata;
40
+ /**
41
+ * Parse elements of the response array and structuring them into response object
42
+ * @param method string - method name
43
+ * @param response string[] - response from the method
44
+ * @return Result - parsed response corresponding to the abi
45
+ */
46
+ parse(method: string, response: string[]): Result;
47
+ /**
48
+ * Format cairo method response data to native js values based on provided format schema
49
+ * @param method string - cairo method name
50
+ * @param response string[] - cairo method response
51
+ * @param format object - formatter object schema
52
+ * @returns Result - parsed and formatted response object
53
+ */
54
+ format(method: string, response: string[], format: object): Result;
55
+ /**
56
+ * Helper to extract structs from abi
57
+ * @param abi Abi
58
+ * @returns AbiStructs - structs from abi
59
+ */
60
+ static getAbiStruct(abi: Abi): AbiStructs;
61
+ /**
62
+ * Helper to extract enums from abi
63
+ * @param abi Abi
64
+ * @returns AbiEnums - enums from abi
65
+ */
66
+ static getAbiEnum(abi: Abi): AbiEnums;
67
+ /**
68
+ * Helper: Compile HexCalldata | RawCalldata | RawArgs
69
+ * @param rawCalldata HexCalldata | RawCalldata | RawArgs
70
+ * @returns Calldata
71
+ */
72
+ static toCalldata(rawCalldata?: RawArgs): Calldata;
73
+ /**
74
+ * Helper: Convert raw to HexCalldata
75
+ * @param raw HexCalldata | RawCalldata | RawArgs
76
+ * @returns HexCalldata
77
+ */
78
+ static toHex(raw?: RawArgs): HexCalldata;
79
+ /**
80
+ * Parse the elements of a contract response and structure them into one or several Result.
81
+ * In Cairo 0, arrays are not supported.
82
+ * @param typeCairo string or string[] - Cairo type name, ex : "hello::hello::UserData"
83
+ * @param response string[] - serialized data corresponding to typeCairo.
84
+ * @return Result or Result[] - parsed response corresponding to typeData.
85
+ * @example
86
+ * const res2=helloCallData.decodeParameters("hello::hello::UserData",["0x123456","0x1"]);
87
+ * result = { address: 1193046n, is_claimed: true }
88
+ */
89
+ decodeParameters(typeCairo: AllowArray<string>, response: string[]): AllowArray<Result>;
90
+ }
@@ -0,0 +1,276 @@
1
+ import {
2
+ ValidateType
3
+ } from "../../types/index.mjs";
4
+ import assert from "../assert.mjs";
5
+ import { isBigInt, toHex } from "../num.mjs";
6
+ import { getSelectorFromName } from "../hash/selector.mjs";
7
+ import { isLongText } from "../shortString.mjs";
8
+ import { byteArrayFromString } from "./byteArray.mjs";
9
+ import { felt, isCairo1Type, isLen } from "./cairo.mjs";
10
+ import {
11
+ CairoOptionVariant,
12
+ CairoResultVariant
13
+ } from "./enum/index.mjs";
14
+ import formatter from "./formatter.mjs";
15
+ import { createAbiParser, isNoConstructorValid } from "./parser/index.mjs";
16
+ import orderPropsByAbi from "./propertyOrder.mjs";
17
+ import { parseCalldataField } from "./requestParser.mjs";
18
+ import responseParser from "./responseParser.mjs";
19
+ import validateFields from "./validate.mjs";
20
+ export * as cairo from "./cairo.mjs";
21
+ export * as byteArray from "./byteArray.mjs";
22
+ export { parseCalldataField } from "./requestParser.mjs";
23
+ export class CallData {
24
+ abi;
25
+ parser;
26
+ structs;
27
+ enums;
28
+ constructor(abi) {
29
+ this.structs = CallData.getAbiStruct(abi);
30
+ this.enums = CallData.getAbiEnum(abi);
31
+ this.parser = createAbiParser(abi);
32
+ this.abi = this.parser.getLegacyFormat();
33
+ }
34
+ /**
35
+ * Validate arguments passed to the method as corresponding to the ones in the abi
36
+ * @param type ValidateType - type of the method
37
+ * @param method string - name of the method
38
+ * @param args ArgsOrCalldata - arguments that are passed to the method
39
+ */
40
+ validate(type, method, args = []) {
41
+ if (type !== ValidateType.DEPLOY) {
42
+ const invocableFunctionNames = this.abi.filter((abi) => {
43
+ if (abi.type !== "function") return false;
44
+ const isView = abi.stateMutability === "view" || abi.state_mutability === "view";
45
+ return type === ValidateType.INVOKE ? !isView : isView;
46
+ }).map((abi) => abi.name);
47
+ assert(
48
+ invocableFunctionNames.includes(method),
49
+ `${type === ValidateType.INVOKE ? "invocable" : "viewable"} method not found in abi`
50
+ );
51
+ }
52
+ const abiMethod = this.abi.find(
53
+ (abi) => type === ValidateType.DEPLOY ? abi.name === method && abi.type === "constructor" : abi.name === method && abi.type === "function"
54
+ );
55
+ if (isNoConstructorValid(method, args, abiMethod)) {
56
+ return;
57
+ }
58
+ const inputsLength = this.parser.methodInputsLength(abiMethod);
59
+ if (args.length !== inputsLength) {
60
+ throw Error(
61
+ `Invalid number of arguments, expected ${inputsLength} arguments, but got ${args.length}`
62
+ );
63
+ }
64
+ validateFields(abiMethod, args, this.structs, this.enums);
65
+ }
66
+ /**
67
+ * Compile contract callData with abi
68
+ * Parse the calldata by using input fields from the abi for that method
69
+ * @param method string - method name
70
+ * @param argsCalldata RawArgs - arguments passed to the method. Can be an array of arguments (in the order of abi definition), or an object constructed in conformity with abi (in this case, the parameter can be in a wrong order).
71
+ * @return Calldata - parsed arguments in format that contract is expecting
72
+ * @example
73
+ * ```typescript
74
+ * const calldata = myCallData.compile("constructor", ["0x34a", [1, 3n]]);
75
+ * ```
76
+ * ```typescript
77
+ * const calldata2 = myCallData.compile("constructor", {list:[1, 3n], balance:"0x34"}); // wrong order is valid
78
+ * ```
79
+ */
80
+ compile(method, argsCalldata) {
81
+ const abiMethod = this.abi.find((abiFunction) => abiFunction.name === method);
82
+ if (isNoConstructorValid(method, argsCalldata, abiMethod)) {
83
+ return [];
84
+ }
85
+ let args;
86
+ if (Array.isArray(argsCalldata)) {
87
+ args = argsCalldata;
88
+ } else {
89
+ const orderedObject = orderPropsByAbi(
90
+ argsCalldata,
91
+ abiMethod.inputs,
92
+ this.structs,
93
+ this.enums
94
+ );
95
+ args = Object.values(orderedObject);
96
+ validateFields(abiMethod, args, this.structs, this.enums);
97
+ }
98
+ const argsIterator = args[Symbol.iterator]();
99
+ const callArray = abiMethod.inputs.reduce(
100
+ (acc, input) => isLen(input.name) && !isCairo1Type(input.type) ? acc : acc.concat(parseCalldataField(argsIterator, input, this.structs, this.enums)),
101
+ []
102
+ );
103
+ Object.defineProperty(callArray, "__compiled__", {
104
+ enumerable: false,
105
+ writable: false,
106
+ value: true
107
+ });
108
+ return callArray;
109
+ }
110
+ /**
111
+ * Compile contract callData without abi
112
+ * @param rawArgs RawArgs representing cairo method arguments or string array of compiled data
113
+ * @returns Calldata
114
+ */
115
+ static compile(rawArgs) {
116
+ const createTree = (obj) => {
117
+ const getEntries = (o, prefix = ".") => {
118
+ const oe = Array.isArray(o) ? [o.length.toString(), ...o] : o;
119
+ return Object.entries(oe).flatMap(([k, v]) => {
120
+ let value = v;
121
+ if (k === "entrypoint") value = getSelectorFromName(value);
122
+ else if (isLongText(value)) value = byteArrayFromString(value);
123
+ const kk = Array.isArray(oe) && k === "0" ? "$$len" : k;
124
+ if (isBigInt(value)) return [[`${prefix}${kk}`, felt(value)]];
125
+ if (Object(value) === value) {
126
+ const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(value));
127
+ const keys = [...Object.getOwnPropertyNames(value), ...methodsKeys];
128
+ if (keys.includes("isSome") && keys.includes("isNone")) {
129
+ const myOption = value;
130
+ const variantNb = myOption.isSome() ? CairoOptionVariant.Some : CairoOptionVariant.None;
131
+ if (myOption.isSome())
132
+ return getEntries({ 0: variantNb, 1: myOption.unwrap() }, `${prefix}${kk}.`);
133
+ return [[`${prefix}${kk}`, felt(variantNb)]];
134
+ }
135
+ if (keys.includes("isOk") && keys.includes("isErr")) {
136
+ const myResult = value;
137
+ const variantNb = myResult.isOk() ? CairoResultVariant.Ok : CairoResultVariant.Err;
138
+ return getEntries({ 0: variantNb, 1: myResult.unwrap() }, `${prefix}${kk}.`);
139
+ }
140
+ if (keys.includes("variant") && keys.includes("activeVariant")) {
141
+ const myEnum = value;
142
+ const activeVariant = myEnum.activeVariant();
143
+ const listVariants = Object.keys(myEnum.variant);
144
+ const activeVariantNb = listVariants.findIndex(
145
+ (variant) => variant === activeVariant
146
+ );
147
+ if (typeof myEnum.unwrap() === "object" && Object.keys(myEnum.unwrap()).length === 0) {
148
+ return [[`${prefix}${kk}`, felt(activeVariantNb)]];
149
+ }
150
+ return getEntries({ 0: activeVariantNb, 1: myEnum.unwrap() }, `${prefix}${kk}.`);
151
+ }
152
+ return getEntries(value, `${prefix}${kk}.`);
153
+ }
154
+ return [[`${prefix}${kk}`, felt(value)]];
155
+ });
156
+ };
157
+ const result = Object.fromEntries(getEntries(obj));
158
+ return result;
159
+ };
160
+ let callTreeArray;
161
+ if (!Array.isArray(rawArgs)) {
162
+ const callTree = createTree(rawArgs);
163
+ callTreeArray = Object.values(callTree);
164
+ } else {
165
+ const callObj = { ...rawArgs };
166
+ const callTree = createTree(callObj);
167
+ callTreeArray = Object.values(callTree);
168
+ }
169
+ Object.defineProperty(callTreeArray, "__compiled__", {
170
+ enumerable: false,
171
+ writable: false,
172
+ value: true
173
+ });
174
+ return callTreeArray;
175
+ }
176
+ /**
177
+ * Parse elements of the response array and structuring them into response object
178
+ * @param method string - method name
179
+ * @param response string[] - response from the method
180
+ * @return Result - parsed response corresponding to the abi
181
+ */
182
+ parse(method, response) {
183
+ const { outputs } = this.abi.find((abi) => abi.name === method);
184
+ const responseIterator = response.flat()[Symbol.iterator]();
185
+ const parsed = outputs.flat().reduce((acc, output, idx) => {
186
+ const propName = output.name ?? idx;
187
+ acc[propName] = responseParser(responseIterator, output, this.structs, this.enums, acc);
188
+ if (acc[propName] && acc[`${propName}_len`]) {
189
+ delete acc[`${propName}_len`];
190
+ }
191
+ return acc;
192
+ }, {});
193
+ return Object.keys(parsed).length === 1 && 0 in parsed ? parsed[0] : parsed;
194
+ }
195
+ /**
196
+ * Format cairo method response data to native js values based on provided format schema
197
+ * @param method string - cairo method name
198
+ * @param response string[] - cairo method response
199
+ * @param format object - formatter object schema
200
+ * @returns Result - parsed and formatted response object
201
+ */
202
+ format(method, response, format) {
203
+ const parsed = this.parse(method, response);
204
+ return formatter(parsed, format);
205
+ }
206
+ /**
207
+ * Helper to extract structs from abi
208
+ * @param abi Abi
209
+ * @returns AbiStructs - structs from abi
210
+ */
211
+ static getAbiStruct(abi) {
212
+ return abi.filter((abiEntry) => abiEntry.type === "struct").reduce(
213
+ (acc, abiEntry) => ({
214
+ ...acc,
215
+ [abiEntry.name]: abiEntry
216
+ }),
217
+ {}
218
+ );
219
+ }
220
+ /**
221
+ * Helper to extract enums from abi
222
+ * @param abi Abi
223
+ * @returns AbiEnums - enums from abi
224
+ */
225
+ static getAbiEnum(abi) {
226
+ const fullEnumList = abi.filter((abiEntry) => abiEntry.type === "enum").reduce(
227
+ (acc, abiEntry) => ({
228
+ ...acc,
229
+ [abiEntry.name]: abiEntry
230
+ }),
231
+ {}
232
+ );
233
+ delete fullEnumList["core::bool"];
234
+ return fullEnumList;
235
+ }
236
+ /**
237
+ * Helper: Compile HexCalldata | RawCalldata | RawArgs
238
+ * @param rawCalldata HexCalldata | RawCalldata | RawArgs
239
+ * @returns Calldata
240
+ */
241
+ static toCalldata(rawCalldata = []) {
242
+ return CallData.compile(rawCalldata);
243
+ }
244
+ /**
245
+ * Helper: Convert raw to HexCalldata
246
+ * @param raw HexCalldata | RawCalldata | RawArgs
247
+ * @returns HexCalldata
248
+ */
249
+ static toHex(raw = []) {
250
+ const calldata = CallData.compile(raw);
251
+ return calldata.map((it) => toHex(it));
252
+ }
253
+ /**
254
+ * Parse the elements of a contract response and structure them into one or several Result.
255
+ * In Cairo 0, arrays are not supported.
256
+ * @param typeCairo string or string[] - Cairo type name, ex : "hello::hello::UserData"
257
+ * @param response string[] - serialized data corresponding to typeCairo.
258
+ * @return Result or Result[] - parsed response corresponding to typeData.
259
+ * @example
260
+ * const res2=helloCallData.decodeParameters("hello::hello::UserData",["0x123456","0x1"]);
261
+ * result = { address: 1193046n, is_claimed: true }
262
+ */
263
+ decodeParameters(typeCairo, response) {
264
+ const typeCairoArray = Array.isArray(typeCairo) ? typeCairo : [typeCairo];
265
+ const responseIterator = response.flat()[Symbol.iterator]();
266
+ const decodedArray = typeCairoArray.map(
267
+ (typeParam) => responseParser(
268
+ responseIterator,
269
+ { name: "", type: typeParam },
270
+ this.structs,
271
+ this.enums
272
+ )
273
+ );
274
+ return decodedArray.length === 1 ? decodedArray[0] : decodedArray;
275
+ }
276
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createAbiParser = createAbiParser;
7
+ exports.getAbiVersion = getAbiVersion;
8
+ exports.isNoConstructorValid = isNoConstructorValid;
9
+ var _cairo = require("../cairo.cjs");
10
+ var _parser = require("./parser-0-1.1.0.cjs");
11
+ var _parser2 = require("./parser-2.0.0.cjs");
12
+ function createAbiParser(abi) {
13
+ const version = getAbiVersion(abi);
14
+ if (version === 0 || version === 1) {
15
+ return new _parser.AbiParser1(abi);
16
+ }
17
+ if (version === 2) {
18
+ return new _parser2.AbiParser2(abi);
19
+ }
20
+ throw Error(`Unsupported ABI version ${version}`);
21
+ }
22
+ function getAbiVersion(abi) {
23
+ if (abi.find(it => it.type === "interface")) return 2;
24
+ if ((0, _cairo.isCairo1Abi)(abi)) return 1;
25
+ return 0;
26
+ }
27
+ function isNoConstructorValid(method, argsCalldata, abiMethod) {
28
+ return method === "constructor" && !abiMethod && !argsCalldata.length;
29
+ }
@@ -0,0 +1,5 @@
1
+ import { Abi, FunctionAbi, RawArgs } from '../../../types';
2
+ import { AbiParserInterface } from './interface';
3
+ export declare function createAbiParser(abi: Abi): AbiParserInterface;
4
+ export declare function getAbiVersion(abi: Abi): 1 | 0 | 2;
5
+ export declare function isNoConstructorValid(method: string, argsCalldata: RawArgs, abiMethod?: FunctionAbi): boolean;