kasbah 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +126 -2
  3. package/dist/abi/abi.d.ts +86 -0
  4. package/dist/abi/abi.d.ts.map +1 -0
  5. package/dist/abi/abi.js +2 -0
  6. package/dist/abi/abi.js.map +1 -0
  7. package/dist/abi/codec.d.ts +26 -0
  8. package/dist/abi/codec.d.ts.map +1 -0
  9. package/dist/abi/codec.js +448 -0
  10. package/dist/abi/codec.js.map +1 -0
  11. package/dist/abi/events.d.ts +20 -0
  12. package/dist/abi/events.d.ts.map +1 -0
  13. package/dist/abi/events.js +142 -0
  14. package/dist/abi/events.js.map +1 -0
  15. package/dist/abi/functions.d.ts +15 -0
  16. package/dist/abi/functions.d.ts.map +1 -0
  17. package/dist/abi/functions.js +56 -0
  18. package/dist/abi/functions.js.map +1 -0
  19. package/dist/abi/history.d.ts +24 -0
  20. package/dist/abi/history.d.ts.map +1 -0
  21. package/dist/abi/history.js +81 -0
  22. package/dist/abi/history.js.map +1 -0
  23. package/dist/abi/selector.d.ts +7 -0
  24. package/dist/abi/selector.d.ts.map +1 -0
  25. package/dist/abi/selector.js +16 -0
  26. package/dist/abi/selector.js.map +1 -0
  27. package/dist/abi/types.d.ts +161 -0
  28. package/dist/abi/types.d.ts.map +1 -0
  29. package/dist/abi/types.js +2 -0
  30. package/dist/abi/types.js.map +1 -0
  31. package/dist/api/graphql.d.ts +44 -0
  32. package/dist/api/graphql.d.ts.map +1 -0
  33. package/dist/api/graphql.js +469 -0
  34. package/dist/api/graphql.js.map +1 -0
  35. package/dist/api/limits.d.ts +8 -0
  36. package/dist/api/limits.d.ts.map +1 -0
  37. package/dist/api/limits.js +40 -0
  38. package/dist/api/limits.js.map +1 -0
  39. package/dist/api/prometheus.d.ts +10 -0
  40. package/dist/api/prometheus.d.ts.map +1 -0
  41. package/dist/api/prometheus.js +15 -0
  42. package/dist/api/prometheus.js.map +1 -0
  43. package/dist/api/reader.d.ts +46 -0
  44. package/dist/api/reader.d.ts.map +1 -0
  45. package/dist/api/reader.js +157 -0
  46. package/dist/api/reader.js.map +1 -0
  47. package/dist/api/routes.d.ts +31 -0
  48. package/dist/api/routes.d.ts.map +1 -0
  49. package/dist/api/routes.js +39 -0
  50. package/dist/api/routes.js.map +1 -0
  51. package/dist/api/server.d.ts +32 -0
  52. package/dist/api/server.d.ts.map +1 -0
  53. package/dist/api/server.js +382 -0
  54. package/dist/api/server.js.map +1 -0
  55. package/dist/cli/commands/cache.d.ts +7 -0
  56. package/dist/cli/commands/cache.d.ts.map +1 -0
  57. package/dist/cli/commands/cache.js +29 -0
  58. package/dist/cli/commands/cache.js.map +1 -0
  59. package/dist/cli/commands/clean.d.ts +3 -0
  60. package/dist/cli/commands/clean.d.ts.map +1 -0
  61. package/dist/cli/commands/clean.js +25 -0
  62. package/dist/cli/commands/clean.js.map +1 -0
  63. package/dist/cli/commands/dev.d.ts +10 -0
  64. package/dist/cli/commands/dev.d.ts.map +1 -0
  65. package/dist/cli/commands/dev.js +76 -0
  66. package/dist/cli/commands/dev.js.map +1 -0
  67. package/dist/cli/commands/init.d.ts +42 -0
  68. package/dist/cli/commands/init.d.ts.map +1 -0
  69. package/dist/cli/commands/init.js +402 -0
  70. package/dist/cli/commands/init.js.map +1 -0
  71. package/dist/cli/commands/serve.d.ts +2 -0
  72. package/dist/cli/commands/serve.d.ts.map +1 -0
  73. package/dist/cli/commands/serve.js +12 -0
  74. package/dist/cli/commands/serve.js.map +1 -0
  75. package/dist/cli/commands/start.d.ts +8 -0
  76. package/dist/cli/commands/start.d.ts.map +1 -0
  77. package/dist/cli/commands/start.js +31 -0
  78. package/dist/cli/commands/start.js.map +1 -0
  79. package/dist/cli/devdb.d.ts +22 -0
  80. package/dist/cli/devdb.d.ts.map +1 -0
  81. package/dist/cli/devdb.js +108 -0
  82. package/dist/cli/devdb.js.map +1 -0
  83. package/dist/cli/main.d.ts +3 -0
  84. package/dist/cli/main.d.ts.map +1 -0
  85. package/dist/cli/main.js +126 -0
  86. package/dist/cli/main.js.map +1 -0
  87. package/dist/cli/project.d.ts +26 -0
  88. package/dist/cli/project.d.ts.map +1 -0
  89. package/dist/cli/project.js +64 -0
  90. package/dist/cli/project.js.map +1 -0
  91. package/dist/cli/ui/dashboard.d.ts +23 -0
  92. package/dist/cli/ui/dashboard.d.ts.map +1 -0
  93. package/dist/cli/ui/dashboard.js +376 -0
  94. package/dist/cli/ui/dashboard.js.map +1 -0
  95. package/dist/cli/ui/prompt.d.ts +31 -0
  96. package/dist/cli/ui/prompt.d.ts.map +1 -0
  97. package/dist/cli/ui/prompt.js +194 -0
  98. package/dist/cli/ui/prompt.js.map +1 -0
  99. package/dist/config/app.d.ts +236 -0
  100. package/dist/config/app.d.ts.map +1 -0
  101. package/dist/config/app.js +75 -0
  102. package/dist/config/app.js.map +1 -0
  103. package/dist/config/errors.d.ts +8 -0
  104. package/dist/config/errors.d.ts.map +1 -0
  105. package/dist/config/errors.js +8 -0
  106. package/dist/config/errors.js.map +1 -0
  107. package/dist/config/network.d.ts +11 -0
  108. package/dist/config/network.d.ts.map +1 -0
  109. package/dist/config/network.js +22 -0
  110. package/dist/config/network.js.map +1 -0
  111. package/dist/config/resolve.d.ts +49 -0
  112. package/dist/config/resolve.d.ts.map +1 -0
  113. package/dist/config/resolve.js +67 -0
  114. package/dist/config/resolve.js.map +1 -0
  115. package/dist/config/rpc.d.ts +10 -0
  116. package/dist/config/rpc.d.ts.map +1 -0
  117. package/dist/config/rpc.js +21 -0
  118. package/dist/config/rpc.js.map +1 -0
  119. package/dist/config/schema.d.ts +55 -0
  120. package/dist/config/schema.d.ts.map +1 -0
  121. package/dist/config/schema.js +12 -0
  122. package/dist/config/schema.js.map +1 -0
  123. package/dist/db/cache.d.ts +68 -0
  124. package/dist/db/cache.d.ts.map +1 -0
  125. package/dist/db/cache.js +339 -0
  126. package/dist/db/cache.js.map +1 -0
  127. package/dist/db/copy.d.ts +7 -0
  128. package/dist/db/copy.d.ts.map +1 -0
  129. package/dist/db/copy.js +68 -0
  130. package/dist/db/copy.js.map +1 -0
  131. package/dist/db/store.d.ts +55 -0
  132. package/dist/db/store.d.ts.map +1 -0
  133. package/dist/db/store.js +317 -0
  134. package/dist/db/store.js.map +1 -0
  135. package/dist/db/table.d.ts +43 -0
  136. package/dist/db/table.d.ts.map +1 -0
  137. package/dist/db/table.js +124 -0
  138. package/dist/db/table.js.map +1 -0
  139. package/dist/db/transaction.d.ts +4 -0
  140. package/dist/db/transaction.d.ts.map +1 -0
  141. package/dist/db/transaction.js +18 -0
  142. package/dist/db/transaction.js.map +1 -0
  143. package/dist/index.d.ts +25 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +17 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/indexer/client.d.ts +92 -0
  148. package/dist/indexer/client.d.ts.map +1 -0
  149. package/dist/indexer/client.js +162 -0
  150. package/dist/indexer/client.js.map +1 -0
  151. package/dist/indexer/commit.d.ts +97 -0
  152. package/dist/indexer/commit.d.ts.map +1 -0
  153. package/dist/indexer/commit.js +161 -0
  154. package/dist/indexer/commit.js.map +1 -0
  155. package/dist/indexer/events.d.ts +27 -0
  156. package/dist/indexer/events.d.ts.map +1 -0
  157. package/dist/indexer/events.js +151 -0
  158. package/dist/indexer/events.js.map +1 -0
  159. package/dist/indexer/filters.d.ts +14 -0
  160. package/dist/indexer/filters.d.ts.map +1 -0
  161. package/dist/indexer/filters.js +92 -0
  162. package/dist/indexer/filters.js.map +1 -0
  163. package/dist/indexer/finality.d.ts +14 -0
  164. package/dist/indexer/finality.d.ts.map +1 -0
  165. package/dist/indexer/finality.js +32 -0
  166. package/dist/indexer/finality.js.map +1 -0
  167. package/dist/indexer/handle.d.ts +22 -0
  168. package/dist/indexer/handle.d.ts.map +1 -0
  169. package/dist/indexer/handle.js +121 -0
  170. package/dist/indexer/handle.js.map +1 -0
  171. package/dist/indexer/lock.d.ts +41 -0
  172. package/dist/indexer/lock.d.ts.map +1 -0
  173. package/dist/indexer/lock.js +102 -0
  174. package/dist/indexer/lock.js.map +1 -0
  175. package/dist/indexer/metrics.d.ts +4 -0
  176. package/dist/indexer/metrics.d.ts.map +1 -0
  177. package/dist/indexer/metrics.js +88 -0
  178. package/dist/indexer/metrics.js.map +1 -0
  179. package/dist/indexer/open.d.ts +66 -0
  180. package/dist/indexer/open.d.ts.map +1 -0
  181. package/dist/indexer/open.js +319 -0
  182. package/dist/indexer/open.js.map +1 -0
  183. package/dist/indexer/phases/backfill.d.ts +4 -0
  184. package/dist/indexer/phases/backfill.d.ts.map +1 -0
  185. package/dist/indexer/phases/backfill.js +144 -0
  186. package/dist/indexer/phases/backfill.js.map +1 -0
  187. package/dist/indexer/phases/factories.d.ts +4 -0
  188. package/dist/indexer/phases/factories.d.ts.map +1 -0
  189. package/dist/indexer/phases/factories.js +35 -0
  190. package/dist/indexer/phases/factories.js.map +1 -0
  191. package/dist/indexer/phases/keys.d.ts +4 -0
  192. package/dist/indexer/phases/keys.d.ts.map +1 -0
  193. package/dist/indexer/phases/keys.js +21 -0
  194. package/dist/indexer/phases/keys.js.map +1 -0
  195. package/dist/indexer/phases/live.d.ts +10 -0
  196. package/dist/indexer/phases/live.d.ts.map +1 -0
  197. package/dist/indexer/phases/live.js +122 -0
  198. package/dist/indexer/phases/live.js.map +1 -0
  199. package/dist/indexer/plan.d.ts +18 -0
  200. package/dist/indexer/plan.d.ts.map +1 -0
  201. package/dist/indexer/plan.js +15 -0
  202. package/dist/indexer/plan.js.map +1 -0
  203. package/dist/indexer/run.d.ts +16 -0
  204. package/dist/indexer/run.d.ts.map +1 -0
  205. package/dist/indexer/run.js +49 -0
  206. package/dist/indexer/run.js.map +1 -0
  207. package/dist/indexer/sources.d.ts +124 -0
  208. package/dist/indexer/sources.d.ts.map +1 -0
  209. package/dist/indexer/sources.js +337 -0
  210. package/dist/indexer/sources.js.map +1 -0
  211. package/dist/indexer/status.d.ts +270 -0
  212. package/dist/indexer/status.d.ts.map +1 -0
  213. package/dist/indexer/status.js +282 -0
  214. package/dist/indexer/status.js.map +1 -0
  215. package/dist/rpc/client.d.ts +77 -0
  216. package/dist/rpc/client.d.ts.map +1 -0
  217. package/dist/rpc/client.js +403 -0
  218. package/dist/rpc/client.js.map +1 -0
  219. package/dist/rpc/methods.d.ts +58 -0
  220. package/dist/rpc/methods.d.ts.map +1 -0
  221. package/dist/rpc/methods.js +21 -0
  222. package/dist/rpc/methods.js.map +1 -0
  223. package/dist/rpc/probe.d.ts +13 -0
  224. package/dist/rpc/probe.d.ts.map +1 -0
  225. package/dist/rpc/probe.js +59 -0
  226. package/dist/rpc/probe.js.map +1 -0
  227. package/dist/sync/extras.d.ts +28 -0
  228. package/dist/sync/extras.d.ts.map +1 -0
  229. package/dist/sync/extras.js +69 -0
  230. package/dist/sync/extras.js.map +1 -0
  231. package/dist/sync/fetch.d.ts +55 -0
  232. package/dist/sync/fetch.d.ts.map +1 -0
  233. package/dist/sync/fetch.js +267 -0
  234. package/dist/sync/fetch.js.map +1 -0
  235. package/dist/sync/heads.d.ts +29 -0
  236. package/dist/sync/heads.d.ts.map +1 -0
  237. package/dist/sync/heads.js +118 -0
  238. package/dist/sync/heads.js.map +1 -0
  239. package/dist/sync/live.d.ts +52 -0
  240. package/dist/sync/live.d.ts.map +1 -0
  241. package/dist/sync/live.js +130 -0
  242. package/dist/sync/live.js.map +1 -0
  243. package/dist/types/block.d.ts +37 -0
  244. package/dist/types/block.d.ts.map +1 -0
  245. package/dist/types/block.js +28 -0
  246. package/dist/types/block.js.map +1 -0
  247. package/dist/types/felt.d.ts +11 -0
  248. package/dist/types/felt.d.ts.map +1 -0
  249. package/dist/types/felt.js +14 -0
  250. package/dist/types/felt.js.map +1 -0
  251. package/dist/types/transaction.d.ts +167 -0
  252. package/dist/types/transaction.d.ts.map +1 -0
  253. package/dist/types/transaction.js +69 -0
  254. package/dist/types/transaction.js.map +1 -0
  255. package/dist/utils/chunks.d.ts +3 -0
  256. package/dist/utils/chunks.d.ts.map +1 -0
  257. package/dist/utils/chunks.js +6 -0
  258. package/dist/utils/chunks.js.map +1 -0
  259. package/dist/utils/errors.d.ts +3 -0
  260. package/dist/utils/errors.d.ts.map +1 -0
  261. package/dist/utils/errors.js +3 -0
  262. package/dist/utils/errors.js.map +1 -0
  263. package/dist/utils/sleep.d.ts +3 -0
  264. package/dist/utils/sleep.d.ts.map +1 -0
  265. package/dist/utils/sleep.js +15 -0
  266. package/dist/utils/sleep.js.map +1 -0
  267. package/dist/utils/time.d.ts +3 -0
  268. package/dist/utils/time.d.ts.map +1 -0
  269. package/dist/utils/time.js +3 -0
  270. package/dist/utils/time.js.map +1 -0
  271. package/package.json +77 -4
  272. package/src/abi/abi.ts +97 -0
  273. package/src/abi/codec.ts +474 -0
  274. package/src/abi/events.ts +171 -0
  275. package/src/abi/functions.ts +65 -0
  276. package/src/abi/history.ts +114 -0
  277. package/src/abi/selector.ts +17 -0
  278. package/src/abi/types.ts +282 -0
  279. package/src/api/graphql.ts +611 -0
  280. package/src/api/limits.ts +45 -0
  281. package/src/api/prometheus.ts +18 -0
  282. package/src/api/reader.ts +183 -0
  283. package/src/api/routes.ts +56 -0
  284. package/src/api/server.ts +425 -0
  285. package/src/cli/commands/cache.ts +35 -0
  286. package/src/cli/commands/clean.ts +29 -0
  287. package/src/cli/commands/dev.ts +82 -0
  288. package/src/cli/commands/init.ts +543 -0
  289. package/src/cli/commands/serve.ts +12 -0
  290. package/src/cli/commands/start.ts +32 -0
  291. package/src/cli/devdb.ts +127 -0
  292. package/src/cli/main.ts +119 -0
  293. package/src/cli/project.ts +68 -0
  294. package/src/cli/ui/dashboard.ts +499 -0
  295. package/src/cli/ui/prompt.ts +228 -0
  296. package/src/config/app.ts +305 -0
  297. package/src/config/errors.ts +7 -0
  298. package/src/config/network.ts +26 -0
  299. package/src/config/resolve.ts +111 -0
  300. package/src/config/rpc.ts +28 -0
  301. package/src/config/schema.ts +13 -0
  302. package/src/db/cache.ts +463 -0
  303. package/src/db/copy.ts +71 -0
  304. package/src/db/store.ts +403 -0
  305. package/src/db/table.ts +145 -0
  306. package/src/db/transaction.ts +24 -0
  307. package/src/index.ts +118 -0
  308. package/src/indexer/client.ts +270 -0
  309. package/src/indexer/commit.ts +221 -0
  310. package/src/indexer/events.ts +178 -0
  311. package/src/indexer/filters.ts +114 -0
  312. package/src/indexer/finality.ts +36 -0
  313. package/src/indexer/handle.ts +133 -0
  314. package/src/indexer/lock.ts +148 -0
  315. package/src/indexer/metrics.ts +105 -0
  316. package/src/indexer/open.ts +490 -0
  317. package/src/indexer/phases/backfill.ts +164 -0
  318. package/src/indexer/phases/factories.ts +36 -0
  319. package/src/indexer/phases/keys.ts +24 -0
  320. package/src/indexer/phases/live.ts +135 -0
  321. package/src/indexer/plan.ts +38 -0
  322. package/src/indexer/run.ts +61 -0
  323. package/src/indexer/sources.ts +456 -0
  324. package/src/indexer/status.ts +415 -0
  325. package/src/rpc/client.ts +466 -0
  326. package/src/rpc/methods.ts +85 -0
  327. package/src/rpc/probe.ts +75 -0
  328. package/src/sync/extras.ts +91 -0
  329. package/src/sync/fetch.ts +334 -0
  330. package/src/sync/heads.ts +135 -0
  331. package/src/sync/live.ts +192 -0
  332. package/src/types/block.ts +62 -0
  333. package/src/types/felt.ts +16 -0
  334. package/src/types/transaction.ts +228 -0
  335. package/src/utils/chunks.ts +4 -0
  336. package/src/utils/errors.ts +3 -0
  337. package/src/utils/sleep.ts +13 -0
  338. package/src/utils/time.ts +2 -0
@@ -0,0 +1,448 @@
1
+ const P = 2n ** 251n + 17n * 2n ** 192n + 1n;
2
+ const HALF_P = P / 2n;
3
+ const U128 = 128n;
4
+ const utf8 = new TextDecoder();
5
+ export class DecodeError extends Error {
6
+ }
7
+ function next(c) {
8
+ const felt = c.felts[c.i++];
9
+ if (felt === undefined)
10
+ throw new DecodeError("ran out of felts");
11
+ return felt;
12
+ }
13
+ const big = (c) => BigInt(next(c));
14
+ const small = (c) => Number(next(c));
15
+ const bool = (c) => next(c) !== "0x0";
16
+ const hex = (c) => next(c);
17
+ const signed = (asNumber) => (c) => {
18
+ const v = BigInt(next(c));
19
+ const s = v > HALF_P ? v - P : v;
20
+ return asNumber ? Number(s) : s;
21
+ };
22
+ const pad = (width) => (c) => `0x${next(c).slice(2).toLowerCase().padStart(width, "0")}`;
23
+ const u256 = (c) => {
24
+ const low = BigInt(next(c));
25
+ return low + (BigInt(next(c)) << U128);
26
+ };
27
+ const u512 = (c) => {
28
+ let v = 0n;
29
+ for (let limb = 0n; limb < 4n; limb++)
30
+ v += BigInt(next(c)) << (U128 * limb);
31
+ return v;
32
+ };
33
+ function wordBytes(word, length, out) {
34
+ for (let i = length - 1; i >= 0; i--)
35
+ out.push(Number((word >> BigInt(i * 8)) & 0xffn));
36
+ }
37
+ const byteArray = (c) => {
38
+ const words = Number(next(c));
39
+ const bytes = [];
40
+ for (let w = 0; w < words; w++)
41
+ wordBytes(BigInt(next(c)), 31, bytes);
42
+ const pending = BigInt(next(c));
43
+ wordBytes(pending, Number(next(c)), bytes);
44
+ return utf8.decode(new Uint8Array(bytes));
45
+ };
46
+ const unit = () => undefined;
47
+ const array = (item) => (c) => {
48
+ const length = Number(next(c));
49
+ const out = new Array(length);
50
+ for (let i = 0; i < length; i++)
51
+ out[i] = item(c);
52
+ return out;
53
+ };
54
+ const option = (inner) => (c) => next(c) === "0x0" ? inner(c) : null;
55
+ const result = (ok, err) => (c) => next(c) === "0x0" ? { ok: ok(c) } : { err: err(c) };
56
+ const tuple = (items) => (c) => items.map((r) => r(c));
57
+ const PRIMITIVES = {
58
+ "core::felt252": big,
59
+ felt: big,
60
+ "core::bool": bool,
61
+ "core::integer::u8": small,
62
+ "core::integer::u16": small,
63
+ "core::integer::u32": small,
64
+ "core::integer::usize": small,
65
+ "core::integer::u64": big,
66
+ "core::integer::u128": big,
67
+ "core::integer::u256": u256,
68
+ "core::integer::u512": u512,
69
+ "core::integer::i8": signed(true),
70
+ "core::integer::i16": signed(true),
71
+ "core::integer::i32": signed(true),
72
+ "core::integer::i64": signed(false),
73
+ "core::integer::i128": signed(false),
74
+ "core::starknet::contract_address::ContractAddress": pad(64),
75
+ "core::starknet::class_hash::ClassHash": pad(64),
76
+ "core::starknet::storage_access::StorageAddress": pad(64),
77
+ "core::starknet::eth_address::EthAddress": pad(40),
78
+ "core::bytes_31::bytes31": hex,
79
+ "core::byte_array::ByteArray": byteArray,
80
+ "()": unit,
81
+ };
82
+ const toFelt = (v) => {
83
+ if (typeof v === "bigint")
84
+ return v;
85
+ if (typeof v === "number" && Number.isSafeInteger(v))
86
+ return BigInt(v);
87
+ if (typeof v === "string" && v !== "")
88
+ return BigInt(v);
89
+ if (typeof v === "boolean")
90
+ return v ? 1n : 0n;
91
+ throw new TypeError(`not a number: ${String(v)}`);
92
+ };
93
+ const hexOf = (v) => `0x${v.toString(16)}`;
94
+ const W128 = (1n << U128) - 1n;
95
+ const wFelt = (v, out) => {
96
+ const x = toFelt(v);
97
+ if (x < 0n || x >= P)
98
+ throw new TypeError(`${x} is not a felt`);
99
+ out.push(hexOf(x));
100
+ };
101
+ const wUint = (bits) => (v, out) => {
102
+ const x = toFelt(v);
103
+ if (x < 0n || x >= 1n << BigInt(bits))
104
+ throw new TypeError(`${x} does not fit u${bits}`);
105
+ out.push(hexOf(x));
106
+ };
107
+ const wInt = (bits) => (v, out) => {
108
+ const x = toFelt(v);
109
+ const half = 1n << BigInt(bits - 1);
110
+ if (x < -half || x >= half)
111
+ throw new TypeError(`${x} does not fit i${bits}`);
112
+ out.push(hexOf(x < 0n ? P + x : x));
113
+ };
114
+ const wBool = (v, out) => {
115
+ if (typeof v !== "boolean")
116
+ throw new TypeError(`not a boolean: ${String(v)}`);
117
+ out.push(v ? "0x1" : "0x0");
118
+ };
119
+ const wLimbs = (limbs) => (v, out) => {
120
+ let x = toFelt(v);
121
+ if (x < 0n || x >= 1n << (U128 * BigInt(limbs)))
122
+ throw new TypeError(`${x} does not fit ${limbs * 128} bits`);
123
+ for (let i = 0; i < limbs; i++, x >>= U128)
124
+ out.push(hexOf(x & W128));
125
+ };
126
+ const wByteArray = (v, out) => {
127
+ if (typeof v !== "string")
128
+ throw new TypeError(`not a string: ${String(v)}`);
129
+ const bytes = new TextEncoder().encode(v);
130
+ const full = Math.floor(bytes.length / 31);
131
+ const word = (from, to) => {
132
+ let x = 0n;
133
+ for (let i = from; i < to; i++)
134
+ x = (x << 8n) | BigInt(bytes[i]);
135
+ return hexOf(x);
136
+ };
137
+ out.push(hexOf(BigInt(full)));
138
+ for (let w = 0; w < full; w++)
139
+ out.push(word(w * 31, w * 31 + 31));
140
+ out.push(word(full * 31, bytes.length), hexOf(BigInt(bytes.length - full * 31)));
141
+ };
142
+ const wUnit = () => { };
143
+ const WRITE_PRIMITIVES = {
144
+ "core::felt252": wFelt,
145
+ felt: wFelt,
146
+ "core::bool": wBool,
147
+ "core::integer::u8": wUint(8),
148
+ "core::integer::u16": wUint(16),
149
+ "core::integer::u32": wUint(32),
150
+ "core::integer::usize": wUint(32),
151
+ "core::integer::u64": wUint(64),
152
+ "core::integer::u128": wUint(128),
153
+ "core::integer::u256": wLimbs(2),
154
+ "core::integer::u512": wLimbs(4),
155
+ "core::integer::i8": wInt(8),
156
+ "core::integer::i16": wInt(16),
157
+ "core::integer::i32": wInt(32),
158
+ "core::integer::i64": wInt(64),
159
+ "core::integer::i128": wInt(128),
160
+ "core::starknet::contract_address::ContractAddress": wFelt,
161
+ "core::starknet::class_hash::ClassHash": wFelt,
162
+ "core::starknet::storage_access::StorageAddress": wFelt,
163
+ "core::starknet::eth_address::EthAddress": wUint(160),
164
+ "core::bytes_31::bytes31": wUint(248),
165
+ "core::byte_array::ByteArray": wByteArray,
166
+ "()": wUnit,
167
+ };
168
+ const record = (v, type) => {
169
+ if (typeof v !== "object" || v === null)
170
+ throw new TypeError(`${type}: expected an object`);
171
+ return v;
172
+ };
173
+ /** Splits `A, B<C, D>, (E, F)` on top-level commas. */
174
+ export function splitTopLevel(s) {
175
+ const parts = [];
176
+ let depth = 0;
177
+ let start = 0;
178
+ for (let i = 0; i < s.length; i++) {
179
+ const ch = s[i];
180
+ if (ch === "<" || ch === "(")
181
+ depth++;
182
+ else if (ch === ">" || ch === ")")
183
+ depth--;
184
+ else if (ch === "," && depth === 0) {
185
+ parts.push(s.slice(start, i).trim());
186
+ start = i + 1;
187
+ }
188
+ }
189
+ const last = s.slice(start).trim();
190
+ if (last !== "")
191
+ parts.push(last);
192
+ return parts;
193
+ }
194
+ function generic(type, prefix) {
195
+ return type.startsWith(`${prefix}::<`) && type.endsWith(">")
196
+ ? type.slice(prefix.length + 3, -1)
197
+ : undefined;
198
+ }
199
+ /** Compiles ABI type strings into readers, memoized per ABI. Cairo 0 and Cairo 1 type syntax share one namespace. */
200
+ export class Codec {
201
+ #structs = new Map();
202
+ #enums = new Map();
203
+ #readers = new Map();
204
+ #writers = new Map();
205
+ constructor(abi) {
206
+ for (const item of abi) {
207
+ if (item.type === "struct")
208
+ this.#structs.set(item.name, item);
209
+ else if (item.type === "enum")
210
+ this.#enums.set(item.name, item);
211
+ }
212
+ }
213
+ reader(type) {
214
+ let r = this.#readers.get(type);
215
+ if (r === undefined) {
216
+ r = this.#compile(type);
217
+ this.#readers.set(type, r);
218
+ }
219
+ return r;
220
+ }
221
+ /** Reader for a member list, producing an object. Cairo 0 `x_len` + `x: T*` pairs become one array `x`. */
222
+ members(members) {
223
+ const fields = [];
224
+ for (const [i, m] of members.entries()) {
225
+ const pointer = m.type.endsWith("*");
226
+ const nextMember = members[i + 1];
227
+ const hidden = nextMember?.type.endsWith("*") === true && m.name === `${nextMember.name}_len`;
228
+ fields.push({
229
+ name: m.name,
230
+ read: pointer ? this.reader(m.type.slice(0, -1)) : this.reader(m.type),
231
+ pointer,
232
+ hidden,
233
+ });
234
+ }
235
+ return (c) => {
236
+ const out = {};
237
+ let previous;
238
+ for (const f of fields) {
239
+ let value;
240
+ if (f.pointer) {
241
+ const length = Number(previous);
242
+ const items = new Array(length);
243
+ for (let j = 0; j < length; j++)
244
+ items[j] = f.read(c);
245
+ value = items;
246
+ }
247
+ else
248
+ value = f.read(c);
249
+ if (!f.hidden)
250
+ out[f.name] = value;
251
+ previous = value;
252
+ }
253
+ return out;
254
+ };
255
+ }
256
+ writer(type) {
257
+ let w = this.#writers.get(type);
258
+ if (w === undefined) {
259
+ // Set before compiling so recursive types resolve to the finished writer.
260
+ let compiled;
261
+ this.#writers.set(type, (v, out) => compiled(v, out));
262
+ compiled = this.#compileWriter(type);
263
+ w = compiled;
264
+ this.#writers.set(type, w);
265
+ }
266
+ return w;
267
+ }
268
+ /** Writer for a member list, from an object. Cairo 0 `x_len` is written from the length of `x`. */
269
+ membersWriter(members) {
270
+ const fields = members.map((m, i) => {
271
+ const nextMember = members[i + 1];
272
+ const lengthOf = nextMember?.type.endsWith("*") && m.name === `${nextMember.name}_len`
273
+ ? nextMember.name
274
+ : undefined;
275
+ const pointer = m.type.endsWith("*");
276
+ return {
277
+ name: m.name,
278
+ lengthOf,
279
+ pointer,
280
+ write: this.writer(pointer ? m.type.slice(0, -1) : m.type),
281
+ };
282
+ });
283
+ return (v, out) => {
284
+ const o = record(v, "arguments");
285
+ for (const f of fields) {
286
+ if (f.lengthOf !== undefined) {
287
+ const items = o[f.lengthOf];
288
+ if (!Array.isArray(items))
289
+ throw new TypeError(`${f.lengthOf}: expected an array`);
290
+ out.push(hexOf(BigInt(items.length)));
291
+ }
292
+ else if (f.pointer) {
293
+ for (const item of o[f.name])
294
+ f.write(item, out);
295
+ }
296
+ else {
297
+ if (!(f.name in o))
298
+ throw new TypeError(`missing ${f.name}`);
299
+ f.write(o[f.name], out);
300
+ }
301
+ }
302
+ };
303
+ }
304
+ #compileWriter(raw) {
305
+ const type = raw.startsWith("@") ? raw.slice(1) : raw;
306
+ const primitive = WRITE_PRIMITIVES[type];
307
+ if (primitive !== undefined)
308
+ return primitive;
309
+ const item = generic(type, "core::array::Array") ?? generic(type, "core::array::Span");
310
+ if (item !== undefined) {
311
+ const w = this.writer(item);
312
+ return (v, out) => {
313
+ if (!Array.isArray(v))
314
+ throw new TypeError(`${type}: expected an array`);
315
+ out.push(hexOf(BigInt(v.length)));
316
+ for (const x of v)
317
+ w(x, out);
318
+ };
319
+ }
320
+ const some = generic(type, "core::option::Option");
321
+ if (some !== undefined) {
322
+ const w = this.writer(some);
323
+ return (v, out) => {
324
+ if (v === null || v === undefined)
325
+ out.push("0x1");
326
+ else {
327
+ out.push("0x0");
328
+ w(v, out);
329
+ }
330
+ };
331
+ }
332
+ const res = generic(type, "core::result::Result");
333
+ if (res !== undefined) {
334
+ const [ok, err] = splitTopLevel(res).map((t) => this.writer(t));
335
+ return (v, out) => {
336
+ const r = record(v, type);
337
+ if ("ok" in r) {
338
+ out.push("0x0");
339
+ ok(r.ok, out);
340
+ }
341
+ else {
342
+ out.push("0x1");
343
+ err(r.err, out);
344
+ }
345
+ };
346
+ }
347
+ const nonZero = generic(type, "core::zeroable::NonZero");
348
+ if (nonZero !== undefined)
349
+ return this.writer(nonZero);
350
+ if (type.startsWith("core::internal::bounded_int::BoundedInt::<"))
351
+ return wFelt;
352
+ if (type.startsWith("(") && type.endsWith(")")) {
353
+ const parts = splitTopLevel(type.slice(1, -1));
354
+ const named = parts.length > 0 && parts.every((p) => p.includes(":") && !p.includes("::"));
355
+ if (named) {
356
+ return this.membersWriter(parts.map((p) => {
357
+ const at = p.indexOf(":");
358
+ return { name: p.slice(0, at).trim(), type: p.slice(at + 1).trim() };
359
+ }));
360
+ }
361
+ const items = parts.map((p) => this.writer(p));
362
+ return (v, out) => {
363
+ if (!Array.isArray(v) || v.length !== items.length)
364
+ throw new TypeError(`${type}: expected ${items.length} items`);
365
+ for (const [i, w] of items.entries())
366
+ w(v[i], out);
367
+ };
368
+ }
369
+ if (type === "Uint256")
370
+ return wLimbs(2);
371
+ const struct = this.#structs.get(type);
372
+ if (struct !== undefined)
373
+ return this.membersWriter(struct.members);
374
+ const en = this.#enums.get(type);
375
+ if (en !== undefined) {
376
+ const variants = new Map(en.variants.map((v, i) => [v.name, { index: i, write: this.writer(v.type) }]));
377
+ return (v, out) => {
378
+ const [name, value] = typeof v === "string"
379
+ ? [v, undefined]
380
+ : [record(v, type).variant, record(v, type).value];
381
+ const variant = variants.get(name);
382
+ if (variant === undefined)
383
+ throw new TypeError(`${type}: no variant ${name}`);
384
+ out.push(hexOf(BigInt(variant.index)));
385
+ variant.write(value, out);
386
+ };
387
+ }
388
+ throw new TypeError(`unsupported type ${raw}`);
389
+ }
390
+ #compile(raw) {
391
+ const type = raw.startsWith("@") ? raw.slice(1) : raw;
392
+ const primitive = PRIMITIVES[type];
393
+ if (primitive !== undefined)
394
+ return primitive;
395
+ const item = generic(type, "core::array::Array") ?? generic(type, "core::array::Span");
396
+ if (item !== undefined)
397
+ return array(this.reader(item));
398
+ const some = generic(type, "core::option::Option");
399
+ if (some !== undefined)
400
+ return option(this.reader(some));
401
+ const res = generic(type, "core::result::Result");
402
+ if (res !== undefined) {
403
+ const [ok, err] = splitTopLevel(res);
404
+ return result(this.reader(ok), this.reader(err));
405
+ }
406
+ const nonZero = generic(type, "core::zeroable::NonZero");
407
+ if (nonZero !== undefined)
408
+ return this.reader(nonZero);
409
+ if (type.startsWith("core::internal::bounded_int::BoundedInt::<"))
410
+ return signed(false);
411
+ if (type.startsWith("(") && type.endsWith(")")) {
412
+ const parts = splitTopLevel(type.slice(1, -1));
413
+ const named = parts.length > 0 && parts.every((p) => p.includes(":") && !p.includes("::"));
414
+ if (named) {
415
+ return this.members(parts.map((p) => {
416
+ const at = p.indexOf(":");
417
+ return { name: p.slice(0, at).trim(), type: p.slice(at + 1).trim() };
418
+ }));
419
+ }
420
+ return tuple(parts.map((p) => this.reader(p)));
421
+ }
422
+ if (type === "Uint256")
423
+ return u256;
424
+ const struct = this.#structs.get(type);
425
+ if (struct !== undefined)
426
+ return this.members(struct.members);
427
+ const en = this.#enums.get(type);
428
+ if (en !== undefined) {
429
+ const variants = en.variants.map((v) => ({
430
+ name: v.name,
431
+ read: this.reader(v.type),
432
+ unit: v.type === "()",
433
+ }));
434
+ const allUnit = variants.every((v) => v.unit);
435
+ return (c) => {
436
+ const index = Number(next(c));
437
+ const v = variants[index];
438
+ if (v === undefined)
439
+ throw new DecodeError(`${type}: no variant ${index}`);
440
+ if (allUnit)
441
+ return v.name;
442
+ return { variant: v.name, value: v.read(c) };
443
+ };
444
+ }
445
+ throw new DecodeError(`unsupported type ${raw}`);
446
+ }
447
+ }
448
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../src/abi/codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Abi, AbiMember } from "./abi.ts";
2
+ import type { DecodedEvent } from "./types.ts";
3
+ /** One concrete event a contract can emit, after resolving Cairo 1 enum nesting. */
4
+ export type EventDef = {
5
+ /** Variant path joined by `.` for Cairo 1 (`"Swapped"`, `"OwnedEvent.OwnershipTransferred"`), the name for Cairo 0. */
6
+ name: string;
7
+ /** The selector keys that identify it: `keys` starts with these. */
8
+ selectors: string[];
9
+ /** Members read from `keys` after the selectors, in order. Filters by argument can use these. */
10
+ keyMembers: AbiMember[];
11
+ dataMembers: AbiMember[];
12
+ };
13
+ /** Every event the ABI can emit, with its selector path. Throws if two events share the same selectors. */
14
+ export declare function abiEvents(abi: Abi): EventDef[];
15
+ /**
16
+ * Builds a decoder for every event in the ABI. The returned function returns `undefined` for events the ABI doesn't
17
+ * declare, and throws `DecodeError` when an event matches but its felts don't fit the ABI (wrong ABI or version).
18
+ */
19
+ export declare function createDecoder<const TAbi extends Abi>(abi: TAbi): (keys: readonly string[], data: readonly string[]) => DecodedEvent<TAbi> | undefined;
20
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/abi/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,GAAG,EAEH,SAAS,EAIV,MAAM,UAAU,CAAC;AAGlB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,oFAAoF;AACpF,MAAM,MAAM,QAAQ,GAAG;IACrB,uHAAuH;IACvH,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iGAAiG;IACjG,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,WAAW,EAAE,SAAS,EAAE,CAAC;CAC1B,CAAC;AAOF,2GAA2G;AAC3G,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,QAAQ,EAAE,CA8E9C;AAKD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,CAAC,IAAI,SAAS,GAAG,EAClD,GAAG,EAAE,IAAI,GACR,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAmDtF"}
@@ -0,0 +1,142 @@
1
+ import { felt } from "../types/felt.js";
2
+ import { Codec, DecodeError } from "./codec.js";
3
+ import { rawSelector } from "./selector.js";
4
+ function lastSegment(name) {
5
+ const at = name.lastIndexOf("::");
6
+ return at === -1 ? name : name.slice(at + 2);
7
+ }
8
+ /** Every event the ABI can emit, with its selector path. Throws if two events share the same selectors. */
9
+ export function abiEvents(abi) {
10
+ const events = abi.filter((i) => i.type === "event");
11
+ const byName = new Map(events.map((e) => [e.name, e]));
12
+ const out = [];
13
+ const leaf = (struct, name, selectors) => {
14
+ const unsupported = struct.members.find((m) => m.kind === "nested" || m.kind === "flat");
15
+ if (unsupported !== undefined) {
16
+ throw new DecodeError(`${struct.name}: event member ${unsupported.name} of kind ${unsupported.kind} is not supported`);
17
+ }
18
+ out.push({
19
+ name,
20
+ selectors,
21
+ keyMembers: struct.members.filter((m) => m.kind === "key"),
22
+ dataMembers: struct.members.filter((m) => m.kind === "data"),
23
+ });
24
+ };
25
+ const walk = (en, path, selectors) => {
26
+ for (const v of en.variants) {
27
+ const inner = byName.get(v.type);
28
+ if (inner === undefined || !("kind" in inner))
29
+ throw new DecodeError(`${en.name}: unknown event type ${v.type}`);
30
+ const flat = v.kind === "flat";
31
+ const nextPath = flat ? path : [...path, v.name];
32
+ const nextSelectors = flat ? selectors : [...selectors, rawSelector(v.name)];
33
+ if (inner.kind === "enum")
34
+ walk(inner, nextPath, nextSelectors);
35
+ else if (flat)
36
+ throw new DecodeError(`${en.name}: flat variant ${v.name} must wrap an enum`);
37
+ else
38
+ leaf(inner, nextPath.join("."), nextSelectors);
39
+ }
40
+ };
41
+ const referenced = new Set();
42
+ for (const e of events) {
43
+ if ("variants" in e)
44
+ for (const v of e.variants)
45
+ referenced.add(v.type);
46
+ }
47
+ for (const e of events) {
48
+ if ("keys" in e && "data" in e) {
49
+ out.push({
50
+ name: e.name,
51
+ selectors: [rawSelector(e.name)],
52
+ keyMembers: [...e.keys],
53
+ dataMembers: [...e.data],
54
+ });
55
+ }
56
+ else if ("inputs" in e) {
57
+ const name = lastSegment(e.name);
58
+ out.push({
59
+ name,
60
+ selectors: [rawSelector(name)],
61
+ keyMembers: [],
62
+ dataMembers: [...e.inputs],
63
+ });
64
+ }
65
+ else if (e.kind === "enum" && !referenced.has(e.name)) {
66
+ walk(e, [], []);
67
+ }
68
+ }
69
+ // Some Cairo 0 ABIs declare an event twice (JediSwap pairs: Transfer with `from_` and with `from_address`).
70
+ // The same layout decodes the same felts: keep the first. A different layout is ambiguous.
71
+ const layout = (e) => `${e.keyMembers.map((m) => m.type).join(",")}|${e.dataMembers.map((m) => m.type).join(",")}`;
72
+ const seen = new Map();
73
+ const kept = [];
74
+ for (const e of out) {
75
+ const id = e.selectors.join(",");
76
+ const other = seen.get(id);
77
+ if (other === undefined) {
78
+ seen.set(id, e);
79
+ kept.push(e);
80
+ }
81
+ else if (other.name !== e.name || layout(other) !== layout(e)) {
82
+ throw new DecodeError(`events ${other.name} and ${e.name} have the same selectors`);
83
+ }
84
+ }
85
+ return kept;
86
+ }
87
+ /**
88
+ * Builds a decoder for every event in the ABI. The returned function returns `undefined` for events the ABI doesn't
89
+ * declare, and throws `DecodeError` when an event matches but its felts don't fit the ABI (wrong ABI or version).
90
+ */
91
+ export function createDecoder(abi) {
92
+ const codec = new Codec(abi);
93
+ const root = { children: new Map() };
94
+ for (const def of abiEvents(abi)) {
95
+ let node = root;
96
+ for (const s of def.selectors) {
97
+ let child = node.children.get(s);
98
+ if (child === undefined) {
99
+ child = { children: new Map() };
100
+ // Keys as the node sends them or padded (`event.log`): both decode.
101
+ node.children.set(s, child).set(felt(s), child);
102
+ }
103
+ node = child;
104
+ }
105
+ node.event = {
106
+ name: def.name,
107
+ depth: def.selectors.length,
108
+ keys: codec.members(def.keyMembers),
109
+ data: codec.members(def.dataMembers),
110
+ };
111
+ }
112
+ return (keys, data) => {
113
+ let node = root;
114
+ let event;
115
+ for (const key of keys) {
116
+ const child = node.children.get(key);
117
+ if (child === undefined)
118
+ break;
119
+ node = child;
120
+ if (node.event !== undefined) {
121
+ event = node.event;
122
+ break;
123
+ }
124
+ }
125
+ if (event === undefined)
126
+ return undefined;
127
+ const k = { felts: keys, i: event.depth };
128
+ const d = { felts: data, i: 0 };
129
+ let args;
130
+ try {
131
+ args = { ...event.keys(k), ...event.data(d) };
132
+ }
133
+ catch (e) {
134
+ throw new DecodeError(`${event.name}: ${e.message}`);
135
+ }
136
+ if (k.i !== keys.length || d.i !== data.length) {
137
+ throw new DecodeError(`${event.name}: read ${k.i}/${keys.length} keys and ${d.i}/${data.length} data felts, the ABI doesn't match`);
138
+ }
139
+ return { name: event.name, args };
140
+ };
141
+ }
142
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/abi/events.ts"],"names":[],"mappings":"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"}