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,201 @@
1
+ import { CairoUint256 } from "../cairoDataTypes/uint256.mjs";
2
+ import { CairoUint512 } from "../cairoDataTypes/uint512.mjs";
3
+ import { addHexPrefix, removeHexPrefix } from "../encode.mjs";
4
+ import { toHex } from "../num.mjs";
5
+ import { decodeShortString } from "../shortString.mjs";
6
+ import { stringFromByteArray } from "./byteArray.mjs";
7
+ import {
8
+ getArrayType,
9
+ isCairo1Type,
10
+ isLen,
11
+ isTypeArray,
12
+ isTypeBool,
13
+ isTypeByteArray,
14
+ isTypeEnum,
15
+ isTypeNonZero,
16
+ isTypeSecp256k1Point,
17
+ isTypeTuple
18
+ } from "./cairo.mjs";
19
+ import {
20
+ CairoCustomEnum,
21
+ CairoOption,
22
+ CairoOptionVariant,
23
+ CairoResult,
24
+ CairoResultVariant
25
+ } from "./enum/index.mjs";
26
+ import extractTupleMemberTypes from "./tuple.mjs";
27
+ function parseBaseTypes(type, it) {
28
+ let temp;
29
+ switch (true) {
30
+ case isTypeBool(type):
31
+ temp = it.next().value;
32
+ return Boolean(BigInt(temp));
33
+ case CairoUint256.isAbiType(type):
34
+ const low = it.next().value;
35
+ const high = it.next().value;
36
+ return new CairoUint256(low, high).toBigInt();
37
+ case CairoUint512.isAbiType(type):
38
+ const limb0 = it.next().value;
39
+ const limb1 = it.next().value;
40
+ const limb2 = it.next().value;
41
+ const limb3 = it.next().value;
42
+ return new CairoUint512(limb0, limb1, limb2, limb3).toBigInt();
43
+ case type === "core::starknet::eth_address::EthAddress":
44
+ temp = it.next().value;
45
+ return BigInt(temp);
46
+ case type === "core::bytes_31::bytes31":
47
+ temp = it.next().value;
48
+ return decodeShortString(temp);
49
+ case isTypeSecp256k1Point(type):
50
+ const xLow = removeHexPrefix(it.next().value).padStart(32, "0");
51
+ const xHigh = removeHexPrefix(it.next().value).padStart(32, "0");
52
+ const yLow = removeHexPrefix(it.next().value).padStart(32, "0");
53
+ const yHigh = removeHexPrefix(it.next().value).padStart(32, "0");
54
+ const pubK = BigInt(addHexPrefix(xHigh + xLow + yHigh + yLow));
55
+ return pubK;
56
+ default:
57
+ temp = it.next().value;
58
+ return BigInt(temp);
59
+ }
60
+ }
61
+ function parseResponseValue(responseIterator, element, structs, enums) {
62
+ if (element.type === "()") {
63
+ return {};
64
+ }
65
+ if (CairoUint256.isAbiType(element.type)) {
66
+ const low = responseIterator.next().value;
67
+ const high = responseIterator.next().value;
68
+ return new CairoUint256(low, high).toBigInt();
69
+ }
70
+ if (CairoUint512.isAbiType(element.type)) {
71
+ const limb0 = responseIterator.next().value;
72
+ const limb1 = responseIterator.next().value;
73
+ const limb2 = responseIterator.next().value;
74
+ const limb3 = responseIterator.next().value;
75
+ return new CairoUint512(limb0, limb1, limb2, limb3).toBigInt();
76
+ }
77
+ if (isTypeByteArray(element.type)) {
78
+ const parsedBytes31Arr = [];
79
+ const bytes31ArrLen = BigInt(responseIterator.next().value);
80
+ while (parsedBytes31Arr.length < bytes31ArrLen) {
81
+ parsedBytes31Arr.push(toHex(responseIterator.next().value));
82
+ }
83
+ const pending_word = toHex(responseIterator.next().value);
84
+ const pending_word_len = BigInt(responseIterator.next().value);
85
+ const myByteArray = {
86
+ data: parsedBytes31Arr,
87
+ pending_word,
88
+ pending_word_len
89
+ };
90
+ return stringFromByteArray(myByteArray);
91
+ }
92
+ if (isTypeArray(element.type)) {
93
+ const parsedDataArr = [];
94
+ const el = { name: "", type: getArrayType(element.type) };
95
+ const len = BigInt(responseIterator.next().value);
96
+ while (parsedDataArr.length < len) {
97
+ parsedDataArr.push(parseResponseValue(responseIterator, el, structs, enums));
98
+ }
99
+ return parsedDataArr;
100
+ }
101
+ if (isTypeNonZero(element.type)) {
102
+ const el = { name: "", type: getArrayType(element.type) };
103
+ return parseResponseValue(responseIterator, el, structs, enums);
104
+ }
105
+ if (structs && element.type in structs && structs[element.type]) {
106
+ if (element.type === "core::starknet::eth_address::EthAddress") {
107
+ return parseBaseTypes(element.type, responseIterator);
108
+ }
109
+ return structs[element.type].members.reduce((acc, el) => {
110
+ acc[el.name] = parseResponseValue(responseIterator, el, structs, enums);
111
+ return acc;
112
+ }, {});
113
+ }
114
+ if (enums && element.type in enums && enums[element.type]) {
115
+ const variantNum = Number(responseIterator.next().value);
116
+ const rawEnum = enums[element.type].variants.reduce((acc, variant, num) => {
117
+ if (num === variantNum) {
118
+ acc[variant.name] = parseResponseValue(
119
+ responseIterator,
120
+ { name: "", type: variant.type },
121
+ structs,
122
+ enums
123
+ );
124
+ return acc;
125
+ }
126
+ acc[variant.name] = void 0;
127
+ return acc;
128
+ }, {});
129
+ if (element.type.startsWith("core::option::Option")) {
130
+ const content = variantNum === CairoOptionVariant.Some ? rawEnum.Some : void 0;
131
+ return new CairoOption(variantNum, content);
132
+ }
133
+ if (element.type.startsWith("core::result::Result")) {
134
+ let content;
135
+ if (variantNum === CairoResultVariant.Ok) {
136
+ content = rawEnum.Ok;
137
+ } else {
138
+ content = rawEnum.Err;
139
+ }
140
+ return new CairoResult(variantNum, content);
141
+ }
142
+ const customEnum = new CairoCustomEnum(rawEnum);
143
+ return customEnum;
144
+ }
145
+ if (isTypeTuple(element.type)) {
146
+ const memberTypes = extractTupleMemberTypes(element.type);
147
+ return memberTypes.reduce((acc, it, idx) => {
148
+ const name = it?.name ? it.name : idx;
149
+ const type = it?.type ? it.type : it;
150
+ const el = { name, type };
151
+ acc[name] = parseResponseValue(responseIterator, el, structs, enums);
152
+ return acc;
153
+ }, {});
154
+ }
155
+ if (isTypeArray(element.type)) {
156
+ const parsedDataArr = [];
157
+ const el = { name: "", type: getArrayType(element.type) };
158
+ const len = BigInt(responseIterator.next().value);
159
+ while (parsedDataArr.length < len) {
160
+ parsedDataArr.push(parseResponseValue(responseIterator, el, structs, enums));
161
+ }
162
+ return parsedDataArr;
163
+ }
164
+ return parseBaseTypes(element.type, responseIterator);
165
+ }
166
+ export default function responseParser(responseIterator, output, structs, enums, parsedResult) {
167
+ const { name, type } = output;
168
+ let temp;
169
+ switch (true) {
170
+ case isLen(name):
171
+ temp = responseIterator.next().value;
172
+ return BigInt(temp);
173
+ case (structs && type in structs || isTypeTuple(type)):
174
+ return parseResponseValue(responseIterator, output, structs, enums);
175
+ case (enums && isTypeEnum(type, enums)):
176
+ return parseResponseValue(responseIterator, output, structs, enums);
177
+ case isTypeArray(type):
178
+ if (isCairo1Type(type)) {
179
+ return parseResponseValue(responseIterator, output, structs, enums);
180
+ }
181
+ const parsedDataArr = [];
182
+ if (parsedResult && parsedResult[`${name}_len`]) {
183
+ const arrLen = parsedResult[`${name}_len`];
184
+ while (parsedDataArr.length < arrLen) {
185
+ parsedDataArr.push(
186
+ parseResponseValue(
187
+ responseIterator,
188
+ { name, type: output.type.replace("*", "") },
189
+ structs,
190
+ enums
191
+ )
192
+ );
193
+ }
194
+ }
195
+ return parsedDataArr;
196
+ case isTypeNonZero(type):
197
+ return parseResponseValue(responseIterator, output, structs, enums);
198
+ default:
199
+ return parseBaseTypes(type, responseIterator);
200
+ }
201
+ }
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ module.exports = extractTupleMemberTypes;
7
+ var _cairo = require("./cairo.cjs");
8
+ function parseNamedTuple(namedTuple) {
9
+ const name = namedTuple.substring(0, namedTuple.indexOf(":"));
10
+ const type = namedTuple.substring(name.length + ":".length);
11
+ return {
12
+ name,
13
+ type
14
+ };
15
+ }
16
+ function parseSubTuple(s) {
17
+ if (!s.includes("(")) return {
18
+ subTuple: [],
19
+ result: s
20
+ };
21
+ const subTuple = [];
22
+ let result = "";
23
+ let i = 0;
24
+ while (i < s.length) {
25
+ if (s[i] === "(") {
26
+ let counter = 1;
27
+ const lBracket = i;
28
+ i++;
29
+ while (counter) {
30
+ if (s[i] === ")") counter--;
31
+ if (s[i] === "(") counter++;
32
+ i++;
33
+ }
34
+ subTuple.push(s.substring(lBracket, i));
35
+ result += " ";
36
+ i--;
37
+ } else {
38
+ result += s[i];
39
+ }
40
+ i++;
41
+ }
42
+ return {
43
+ subTuple,
44
+ result
45
+ };
46
+ }
47
+ function extractCairo0Tuple(type) {
48
+ const cleanType = type.replace(/\s/g, "").slice(1, -1);
49
+ const {
50
+ subTuple,
51
+ result
52
+ } = parseSubTuple(cleanType);
53
+ let recomposed = result.split(",").map(it => {
54
+ return subTuple.length ? it.replace(" ", subTuple.shift()) : it;
55
+ });
56
+ if ((0, _cairo.isTypeNamedTuple)(type)) {
57
+ recomposed = recomposed.reduce((acc, it) => {
58
+ return acc.concat(parseNamedTuple(it));
59
+ }, []);
60
+ }
61
+ return recomposed;
62
+ }
63
+ function getClosureOffset(input, open, close) {
64
+ for (let i = 0, counter = 0; i < input.length; i++) {
65
+ if (input[i] === open) {
66
+ counter++;
67
+ } else if (input[i] === close && --counter === 0) {
68
+ return i;
69
+ }
70
+ }
71
+ return Number.POSITIVE_INFINITY;
72
+ }
73
+ function extractCairo1Tuple(type) {
74
+ const input = type.slice(1, -1);
75
+ const result = [];
76
+ let currentIndex = 0;
77
+ let limitIndex;
78
+ while (currentIndex < input.length) {
79
+ switch (true) {
80
+ case input[currentIndex] === "(":
81
+ {
82
+ limitIndex = currentIndex + getClosureOffset(input.slice(currentIndex), "(", ")") + 1;
83
+ break;
84
+ }
85
+ case input.startsWith("core::result::Result::<", currentIndex) || input.startsWith("core::array::Array::<", currentIndex) || input.startsWith("core::option::Option::<", currentIndex):
86
+ {
87
+ limitIndex = currentIndex + getClosureOffset(input.slice(currentIndex), "<", ">") + 1;
88
+ break;
89
+ }
90
+ default:
91
+ {
92
+ const commaIndex = input.indexOf(",", currentIndex);
93
+ limitIndex = commaIndex !== -1 ? commaIndex : Number.POSITIVE_INFINITY;
94
+ }
95
+ }
96
+ result.push(input.slice(currentIndex, limitIndex));
97
+ currentIndex = limitIndex + 2;
98
+ }
99
+ return result;
100
+ }
101
+ function extractTupleMemberTypes(type) {
102
+ if ((0, _cairo.isCairo1Type)(type)) {
103
+ return extractCairo1Tuple(type);
104
+ }
105
+ return extractCairo0Tuple(type);
106
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Convert tuple string definition into object like definition
3
+ * @param type tuple string definition
4
+ * @returns object like tuple
5
+ */
6
+ export default function extractTupleMemberTypes(type: string): (string | object)[];
@@ -0,0 +1,88 @@
1
+ import { isCairo1Type, isTypeNamedTuple } from "./cairo.mjs";
2
+ function parseNamedTuple(namedTuple) {
3
+ const name = namedTuple.substring(0, namedTuple.indexOf(":"));
4
+ const type = namedTuple.substring(name.length + ":".length);
5
+ return { name, type };
6
+ }
7
+ function parseSubTuple(s) {
8
+ if (!s.includes("(")) return { subTuple: [], result: s };
9
+ const subTuple = [];
10
+ let result = "";
11
+ let i = 0;
12
+ while (i < s.length) {
13
+ if (s[i] === "(") {
14
+ let counter = 1;
15
+ const lBracket = i;
16
+ i++;
17
+ while (counter) {
18
+ if (s[i] === ")") counter--;
19
+ if (s[i] === "(") counter++;
20
+ i++;
21
+ }
22
+ subTuple.push(s.substring(lBracket, i));
23
+ result += " ";
24
+ i--;
25
+ } else {
26
+ result += s[i];
27
+ }
28
+ i++;
29
+ }
30
+ return {
31
+ subTuple,
32
+ result
33
+ };
34
+ }
35
+ function extractCairo0Tuple(type) {
36
+ const cleanType = type.replace(/\s/g, "").slice(1, -1);
37
+ const { subTuple, result } = parseSubTuple(cleanType);
38
+ let recomposed = result.split(",").map((it) => {
39
+ return subTuple.length ? it.replace(" ", subTuple.shift()) : it;
40
+ });
41
+ if (isTypeNamedTuple(type)) {
42
+ recomposed = recomposed.reduce((acc, it) => {
43
+ return acc.concat(parseNamedTuple(it));
44
+ }, []);
45
+ }
46
+ return recomposed;
47
+ }
48
+ function getClosureOffset(input, open, close) {
49
+ for (let i = 0, counter = 0; i < input.length; i++) {
50
+ if (input[i] === open) {
51
+ counter++;
52
+ } else if (input[i] === close && --counter === 0) {
53
+ return i;
54
+ }
55
+ }
56
+ return Number.POSITIVE_INFINITY;
57
+ }
58
+ function extractCairo1Tuple(type) {
59
+ const input = type.slice(1, -1);
60
+ const result = [];
61
+ let currentIndex = 0;
62
+ let limitIndex;
63
+ while (currentIndex < input.length) {
64
+ switch (true) {
65
+ case input[currentIndex] === "(": {
66
+ limitIndex = currentIndex + getClosureOffset(input.slice(currentIndex), "(", ")") + 1;
67
+ break;
68
+ }
69
+ case (input.startsWith("core::result::Result::<", currentIndex) || input.startsWith("core::array::Array::<", currentIndex) || input.startsWith("core::option::Option::<", currentIndex)): {
70
+ limitIndex = currentIndex + getClosureOffset(input.slice(currentIndex), "<", ">") + 1;
71
+ break;
72
+ }
73
+ default: {
74
+ const commaIndex = input.indexOf(",", currentIndex);
75
+ limitIndex = commaIndex !== -1 ? commaIndex : Number.POSITIVE_INFINITY;
76
+ }
77
+ }
78
+ result.push(input.slice(currentIndex, limitIndex));
79
+ currentIndex = limitIndex + 2;
80
+ }
81
+ return result;
82
+ }
83
+ export default function extractTupleMemberTypes(type) {
84
+ if (isCairo1Type(type)) {
85
+ return extractCairo1Tuple(type);
86
+ }
87
+ return extractCairo0Tuple(type);
88
+ }
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ module.exports = validateFields;
7
+ var _types = require("../../types/index.cjs");
8
+ var _assert = _interopRequireDefault(require("../assert.cjs"));
9
+ var _uint = require("../cairoDataTypes/uint256.cjs");
10
+ var _uint2 = require("../cairoDataTypes/uint512.cjs");
11
+ var _num = require("../num.cjs");
12
+ var _shortString = require("../shortString.cjs");
13
+ var _cairo = require("./cairo.cjs");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
15
+ const validateFelt = (parameter, input) => {
16
+ (0, _assert.default)((0, _shortString.isString)(parameter) || (0, _num.isNumber)(parameter) || (0, _num.isBigInt)(parameter), `Validate: arg ${input.name} should be a felt typed as (String, Number or BigInt)`);
17
+ if ((0, _shortString.isString)(parameter) && !(0, _num.isHex)(parameter)) return;
18
+ const param = BigInt(parameter.toString(10));
19
+ (0, _assert.default)(
20
+ // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1266
21
+ param >= 0n && param <= 2n ** 252n - 1n, `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`);
22
+ };
23
+ const validateBytes31 = (parameter, input) => {
24
+ (0, _assert.default)((0, _shortString.isString)(parameter), `Validate: arg ${input.name} should be a string.`);
25
+ (0, _assert.default)(parameter.length < 32, `Validate: arg ${input.name} cairo typed ${input.type} should be a string of less than 32 characters.`);
26
+ };
27
+ const validateByteArray = (parameter, input) => {
28
+ (0, _assert.default)((0, _shortString.isString)(parameter), `Validate: arg ${input.name} should be a string.`);
29
+ };
30
+ const validateUint = (parameter, input) => {
31
+ if ((0, _num.isNumber)(parameter)) {
32
+ (0, _assert.default)(parameter <= Number.MAX_SAFE_INTEGER, `Validation: Parameter is to large to be typed as Number use (BigInt or String)`);
33
+ }
34
+ (0, _assert.default)((0, _shortString.isString)(parameter) || (0, _num.isNumber)(parameter) || (0, _num.isBigInt)(parameter) || typeof parameter === "object" && "low" in parameter && "high" in parameter || typeof parameter === "object" && ["limb0", "limb1", "limb2", "limb3"].every(key => key in parameter), `Validate: arg ${input.name} of cairo type ${input.type} should be type (String, Number or BigInt), but is ${typeof parameter} ${parameter}.`);
35
+ let param;
36
+ switch (input.type) {
37
+ case _types.Uint.u256:
38
+ param = new _uint.CairoUint256(parameter).toBigInt();
39
+ break;
40
+ case _types.Uint.u512:
41
+ param = new _uint2.CairoUint512(parameter).toBigInt();
42
+ break;
43
+ default:
44
+ param = (0, _num.toBigInt)(parameter);
45
+ }
46
+ switch (input.type) {
47
+ case _types.Uint.u8:
48
+ (0, _assert.default)(param >= 0n && param <= 255n, `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0 - 255]`);
49
+ break;
50
+ case _types.Uint.u16:
51
+ (0, _assert.default)(param >= 0n && param <= 65535n, `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 65535]`);
52
+ break;
53
+ case _types.Uint.u32:
54
+ (0, _assert.default)(param >= 0n && param <= 4294967295n, `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 4294967295]`);
55
+ break;
56
+ case _types.Uint.u64:
57
+ (0, _assert.default)(param >= 0n && param <= 2n ** 64n - 1n, `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^64-1]`);
58
+ break;
59
+ case _types.Uint.u128:
60
+ (0, _assert.default)(param >= 0n && param <= 2n ** 128n - 1n, `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^128-1]`);
61
+ break;
62
+ case _types.Uint.u256:
63
+ (0, _assert.default)(param >= 0n && param <= 2n ** 256n - 1n, `Validate: arg ${input.name} is ${input.type} 0 - 2^256-1`);
64
+ break;
65
+ case _types.Uint.u512:
66
+ (0, _assert.default)(_uint2.CairoUint512.is(param), `Validate: arg ${input.name} is ${input.type} 0 - 2^512-1`);
67
+ break;
68
+ case _types.Literal.ClassHash:
69
+ (0, _assert.default)(
70
+ // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1670
71
+ param >= 0n && param <= 2n ** 252n - 1n, `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`);
72
+ break;
73
+ case _types.Literal.ContractAddress:
74
+ (0, _assert.default)(
75
+ // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1245
76
+ param >= 0n && param <= 2n ** 252n - 1n, `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^252-1]`);
77
+ break;
78
+ case _types.Literal.Secp256k1Point:
79
+ {
80
+ (0, _assert.default)(param >= 0n && param <= 2n ** 512n - 1n, `Validate: arg ${input.name} must be ${input.type} : a 512 bits number.`);
81
+ break;
82
+ }
83
+ default:
84
+ break;
85
+ }
86
+ };
87
+ const validateBool = (parameter, input) => {
88
+ (0, _assert.default)((0, _num.isBoolean)(parameter), `Validate: arg ${input.name} of cairo type ${input.type} should be type (Boolean)`);
89
+ };
90
+ const validateStruct = (parameter, input, structs) => {
91
+ if (input.type === _types.Uint.u256 || input.type === _types.Uint.u512) {
92
+ validateUint(parameter, input);
93
+ return;
94
+ }
95
+ if (input.type === "core::starknet::eth_address::EthAddress") {
96
+ (0, _assert.default)(typeof parameter !== "object", `EthAddress type is waiting a BigNumberish. Got ${parameter}`);
97
+ const param = BigInt(parameter.toString(10));
98
+ (0, _assert.default)(
99
+ // from : https://github.com/starkware-libs/starknet-specs/blob/29bab650be6b1847c92d4461d4c33008b5e50b1a/api/starknet_api_openrpc.json#L1259
100
+ param >= 0n && param <= 2n ** 160n - 1n, `Validate: arg ${input.name} cairo typed ${input.type} should be in range [0, 2^160-1]`);
101
+ return;
102
+ }
103
+ (0, _assert.default)(typeof parameter === "object" && !Array.isArray(parameter), `Validate: arg ${input.name} is cairo type struct (${input.type}), and should be defined as js object (not array)`);
104
+ structs[input.type].members.forEach(({
105
+ name
106
+ }) => {
107
+ (0, _assert.default)(Object.keys(parameter).includes(name), `Validate: arg ${input.name} should have a property ${name}`);
108
+ });
109
+ };
110
+ const validateEnum = (parameter, input) => {
111
+ (0, _assert.default)(typeof parameter === "object" && !Array.isArray(parameter), `Validate: arg ${input.name} is cairo type Enum (${input.type}), and should be defined as js object (not array)`);
112
+ const methodsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf(parameter));
113
+ const keys = [...Object.getOwnPropertyNames(parameter), ...methodsKeys];
114
+ if ((0, _cairo.isTypeOption)(input.type) && keys.includes("isSome") && keys.includes("isNone")) {
115
+ return;
116
+ }
117
+ if ((0, _cairo.isTypeResult)(input.type) && keys.includes("isOk") && keys.includes("isErr")) {
118
+ return;
119
+ }
120
+ if (keys.includes("variant") && keys.includes("activeVariant")) {
121
+ return;
122
+ }
123
+ throw new Error(`Validate Enum: argument ${input.name}, type ${input.type}, value received ${parameter}, is not an Enum.`);
124
+ };
125
+ const validateTuple = (parameter, input) => {
126
+ (0, _assert.default)(typeof parameter === "object" && !Array.isArray(parameter), `Validate: arg ${input.name} should be a tuple (defined as object)`);
127
+ };
128
+ const validateArray = (parameter, input, structs, enums) => {
129
+ const baseType = (0, _cairo.getArrayType)(input.type);
130
+ if ((0, _cairo.isTypeFelt)(baseType) && (0, _shortString.isLongText)(parameter)) {
131
+ return;
132
+ }
133
+ (0, _assert.default)(Array.isArray(parameter), `Validate: arg ${input.name} should be an Array`);
134
+ switch (true) {
135
+ case (0, _cairo.isTypeFelt)(baseType):
136
+ parameter.forEach(param => validateFelt(param, input));
137
+ break;
138
+ case (0, _cairo.isTypeTuple)(baseType):
139
+ parameter.forEach(it => validateTuple(it, {
140
+ name: input.name,
141
+ type: baseType
142
+ }));
143
+ break;
144
+ case (0, _cairo.isTypeArray)(baseType):
145
+ parameter.forEach(param => validateArray(param, {
146
+ name: "",
147
+ type: baseType
148
+ }, structs, enums));
149
+ break;
150
+ case (0, _cairo.isTypeStruct)(baseType, structs):
151
+ parameter.forEach(it => validateStruct(it, {
152
+ name: input.name,
153
+ type: baseType
154
+ }, structs));
155
+ break;
156
+ case (0, _cairo.isTypeEnum)(baseType, enums):
157
+ parameter.forEach(it => validateEnum(it, {
158
+ name: input.name,
159
+ type: baseType
160
+ }));
161
+ break;
162
+ case (0, _cairo.isTypeUint)(baseType) || (0, _cairo.isTypeLiteral)(baseType):
163
+ parameter.forEach(param => validateUint(param, {
164
+ name: "",
165
+ type: baseType
166
+ }));
167
+ break;
168
+ case (0, _cairo.isTypeBool)(baseType):
169
+ parameter.forEach(param => validateBool(param, input));
170
+ break;
171
+ default:
172
+ throw new Error(`Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`);
173
+ }
174
+ };
175
+ const validateNonZero = (parameter, input) => {
176
+ const baseType = (0, _cairo.getArrayType)(input.type);
177
+ (0, _assert.default)((0, _cairo.isTypeUint)(baseType) && baseType !== _uint2.CairoUint512.abiSelector || (0, _cairo.isTypeFelt)(baseType), `Validate: ${input.name} type is not authorized for NonZero type.`);
178
+ switch (true) {
179
+ case (0, _cairo.isTypeFelt)(baseType):
180
+ validateFelt(parameter, input);
181
+ (0, _assert.default)(BigInt(parameter.toString(10)) > 0, "Validate: value 0 is not authorized in NonZero felt252 type.");
182
+ break;
183
+ case (0, _cairo.isTypeUint)(baseType):
184
+ validateUint(parameter, {
185
+ name: "",
186
+ type: baseType
187
+ });
188
+ switch (input.type) {
189
+ case _types.Uint.u256:
190
+ (0, _assert.default)(new _uint.CairoUint256(parameter).toBigInt() > 0, "Validate: value 0 is not authorized in NonZero uint256 type.");
191
+ break;
192
+ default:
193
+ (0, _assert.default)((0, _num.toBigInt)(parameter) > 0, "Validate: value 0 is not authorized in NonZero uint type.");
194
+ }
195
+ break;
196
+ default:
197
+ throw new Error(`Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`);
198
+ }
199
+ };
200
+ function validateFields(abiMethod, args, structs, enums) {
201
+ abiMethod.inputs.reduce((acc, input) => {
202
+ const parameter = args[acc];
203
+ switch (true) {
204
+ case (0, _cairo.isLen)(input.name):
205
+ return acc;
206
+ case (0, _cairo.isTypeFelt)(input.type):
207
+ validateFelt(parameter, input);
208
+ break;
209
+ case (0, _cairo.isTypeBytes31)(input.type):
210
+ validateBytes31(parameter, input);
211
+ break;
212
+ case (0, _cairo.isTypeUint)(input.type) || (0, _cairo.isTypeLiteral)(input.type):
213
+ validateUint(parameter, input);
214
+ break;
215
+ case (0, _cairo.isTypeBool)(input.type):
216
+ validateBool(parameter, input);
217
+ break;
218
+ case (0, _cairo.isTypeByteArray)(input.type):
219
+ validateByteArray(parameter, input);
220
+ break;
221
+ case (0, _cairo.isTypeArray)(input.type):
222
+ validateArray(parameter, input, structs, enums);
223
+ break;
224
+ case (0, _cairo.isTypeStruct)(input.type, structs):
225
+ validateStruct(parameter, input, structs);
226
+ break;
227
+ case (0, _cairo.isTypeEnum)(input.type, enums):
228
+ validateEnum(parameter, input);
229
+ break;
230
+ case (0, _cairo.isTypeTuple)(input.type):
231
+ validateTuple(parameter, input);
232
+ break;
233
+ case (0, _cairo.isTypeNonZero)(input.type):
234
+ validateNonZero(parameter, input);
235
+ break;
236
+ default:
237
+ throw new Error(`Validate Unhandled: argument ${input.name}, type ${input.type}, value ${parameter}`);
238
+ }
239
+ return acc + 1;
240
+ }, 0);
241
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Validate cairo contract method arguments
3
+ * Flow: Determine type from abi and than validate against parameter
4
+ */
5
+ import { AbiEnums, AbiStructs, FunctionAbi } from '../../types';
6
+ export default function validateFields(abiMethod: FunctionAbi, args: Array<any>, structs: AbiStructs, enums: AbiEnums): void;