@notuslabs/yail 0.2.1 → 0.4.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 (99) hide show
  1. package/README.md +31 -4
  2. package/dist/addresses/registry.d.ts +1 -1
  3. package/dist/addresses/registry.d.ts.map +1 -1
  4. package/dist/addresses/registry.js +4 -5
  5. package/dist/addresses/registry.js.map +1 -1
  6. package/dist/cache/cached.d.ts.map +1 -1
  7. package/dist/cache/cached.js +5 -3
  8. package/dist/cache/cached.js.map +1 -1
  9. package/dist/cli/index.d.ts.map +1 -1
  10. package/dist/cli/index.js +7 -4
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/config/create-config.d.ts +1 -1
  13. package/dist/config/create-config.d.ts.map +1 -1
  14. package/dist/config/create-config.js +5 -2
  15. package/dist/config/create-config.js.map +1 -1
  16. package/dist/config/types.d.ts +10 -5
  17. package/dist/config/types.d.ts.map +1 -1
  18. package/dist/index.d.ts +3 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/indexer/context.d.ts +6 -5
  23. package/dist/indexer/context.d.ts.map +1 -1
  24. package/dist/indexer/context.js.map +1 -1
  25. package/dist/indexer/events.d.ts +26 -2
  26. package/dist/indexer/events.d.ts.map +1 -1
  27. package/dist/indexer/events.js +17 -1
  28. package/dist/indexer/events.js.map +1 -1
  29. package/dist/indexer/indexer.d.ts +2 -12
  30. package/dist/indexer/indexer.d.ts.map +1 -1
  31. package/dist/indexer/indexer.js +27 -27
  32. package/dist/indexer/indexer.js.map +1 -1
  33. package/dist/indexer/jobs.d.ts +12 -1
  34. package/dist/indexer/jobs.d.ts.map +1 -1
  35. package/dist/indexer/jobs.js +65 -19
  36. package/dist/indexer/jobs.js.map +1 -1
  37. package/dist/indexer/plan.d.ts +6 -7
  38. package/dist/indexer/plan.d.ts.map +1 -1
  39. package/dist/indexer/plan.js +13 -36
  40. package/dist/indexer/plan.js.map +1 -1
  41. package/dist/indexer/runtime.d.ts +13 -8
  42. package/dist/indexer/runtime.d.ts.map +1 -1
  43. package/dist/indexer/runtime.js +70 -48
  44. package/dist/indexer/runtime.js.map +1 -1
  45. package/dist/schema/ddl.d.ts +5 -1
  46. package/dist/schema/ddl.d.ts.map +1 -1
  47. package/dist/schema/ddl.js +10 -2
  48. package/dist/schema/ddl.js.map +1 -1
  49. package/dist/sources/cached.d.ts.map +1 -1
  50. package/dist/sources/cached.js +37 -21
  51. package/dist/sources/cached.js.map +1 -1
  52. package/dist/sources/esplora.d.ts.map +1 -1
  53. package/dist/sources/esplora.js +8 -37
  54. package/dist/sources/esplora.js.map +1 -1
  55. package/dist/sources/fixture.d.ts +23 -2
  56. package/dist/sources/fixture.d.ts.map +1 -1
  57. package/dist/sources/fixture.js +34 -0
  58. package/dist/sources/fixture.js.map +1 -1
  59. package/dist/sources/hypersync.d.ts +10 -1
  60. package/dist/sources/hypersync.d.ts.map +1 -1
  61. package/dist/sources/hypersync.js +6 -0
  62. package/dist/sources/hypersync.js.map +1 -1
  63. package/dist/sources/index.d.ts +5 -4
  64. package/dist/sources/index.d.ts.map +1 -1
  65. package/dist/sources/index.js +2 -1
  66. package/dist/sources/index.js.map +1 -1
  67. package/dist/sources/rpc.d.ts +7 -1
  68. package/dist/sources/rpc.d.ts.map +1 -1
  69. package/dist/sources/rpc.js +7 -16
  70. package/dist/sources/rpc.js.map +1 -1
  71. package/dist/sources/solana/hypersync.d.ts +25 -0
  72. package/dist/sources/solana/hypersync.d.ts.map +1 -0
  73. package/dist/sources/solana/hypersync.js +117 -0
  74. package/dist/sources/solana/hypersync.js.map +1 -0
  75. package/dist/sources/solana/rpc.d.ts +25 -0
  76. package/dist/sources/solana/rpc.d.ts.map +1 -0
  77. package/dist/sources/solana/rpc.js +134 -0
  78. package/dist/sources/solana/rpc.js.map +1 -0
  79. package/dist/sources/solana/shared.d.ts +12 -0
  80. package/dist/sources/solana/shared.d.ts.map +1 -0
  81. package/dist/sources/solana/shared.js +30 -0
  82. package/dist/sources/solana/shared.js.map +1 -0
  83. package/dist/sources/types.d.ts +69 -11
  84. package/dist/sources/types.d.ts.map +1 -1
  85. package/dist/sources/types.js +2 -2
  86. package/dist/sources/types.js.map +1 -1
  87. package/dist/sources/union.d.ts +12 -0
  88. package/dist/sources/union.d.ts.map +1 -0
  89. package/dist/sources/union.js +65 -0
  90. package/dist/sources/union.js.map +1 -0
  91. package/dist/testing/index.d.ts +5 -4
  92. package/dist/testing/index.d.ts.map +1 -1
  93. package/dist/testing/index.js +22 -5
  94. package/dist/testing/index.js.map +1 -1
  95. package/dist/util.d.ts +9 -0
  96. package/dist/util.d.ts.map +1 -1
  97. package/dist/util.js +58 -0
  98. package/dist/util.js.map +1 -1
  99. package/package.json +3 -2
package/dist/util.js CHANGED
@@ -4,6 +4,15 @@ export function toArray(value) {
4
4
  return [...value];
5
5
  return [value];
6
6
  }
7
+ /** Split a list into consecutive slices of at most `size` items. */
8
+ export function chunkList(list, size) {
9
+ if (list.length === 0)
10
+ return [];
11
+ const out = [];
12
+ for (let i = 0; i < list.length; i += size)
13
+ out.push(list.slice(i, i + size));
14
+ return out;
15
+ }
7
16
  /** JSON.stringify replacer that turns bigints into decimal strings. */
8
17
  export function bigintReplacer(_key, value) {
9
18
  if (typeof value === "bigint")
@@ -22,4 +31,53 @@ export function decodeOr(value, fallback) {
22
31
  return decodeURIComponent(value);
23
32
  return fallback;
24
33
  }
34
+ /** Hex is case-insensitive and kept lowercase; base58 addresses (Solana, legacy Bitcoin) are not, and keep their case. */
35
+ export function normalizeHex(value) {
36
+ if (value.startsWith("0x"))
37
+ return value.toLowerCase();
38
+ return value;
39
+ }
40
+ /** `fn` over `items`, at most `limit` at a time, results in input order. */
41
+ export async function mapLimit(items, limit, fn) {
42
+ const out = new Array(items.length);
43
+ let next = 0;
44
+ await Promise.all(Array.from({ length: Math.min(limit, items.length) }, async () => {
45
+ while (next < items.length) {
46
+ const i = next++;
47
+ out[i] = await fn(items[i]);
48
+ }
49
+ }));
50
+ return out;
51
+ }
52
+ export function sleep(ms, signal) {
53
+ return new Promise((resolve, reject) => {
54
+ const t = setTimeout(resolve, ms);
55
+ signal?.addEventListener("abort", () => {
56
+ clearTimeout(t);
57
+ reject(signal.reason);
58
+ });
59
+ });
60
+ }
61
+ /** An HTTP response body, retried with backoff on 429, 5xx and network errors. Other statuses throw at once. */
62
+ export async function request(doFetch, url, init = {}) {
63
+ for (let attempt = 1;; attempt++) {
64
+ try {
65
+ const res = await doFetch(url, init);
66
+ if (res.ok)
67
+ return await res.text();
68
+ const body = await res.text().catch(() => "");
69
+ if (res.status !== 429 && res.status < 500)
70
+ throw new HttpError(`${url}: HTTP ${res.status} ${body.slice(0, 300)}`);
71
+ if (attempt === 12)
72
+ throw new Error(`${url}: HTTP ${res.status} after ${attempt} attempts`);
73
+ }
74
+ catch (err) {
75
+ if (err instanceof HttpError || init.signal?.aborted || attempt === 12)
76
+ throw err;
77
+ }
78
+ await sleep(Math.min(30_000, 250 * 2 ** attempt), init.signal ?? undefined);
79
+ }
80
+ }
81
+ class HttpError extends Error {
82
+ }
25
83
  //# sourceMappingURL=util.js.map
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,UAAU,OAAO,CAAI,KAAuB;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAI,KAAsB,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAU,CAAC,CAAC;AACtB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAc;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,KAAgC;IAC1D,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,QAAgB;IACtD,IAAI,KAAK;QAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,UAAU,OAAO,CAAI,KAAuB;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAI,KAAsB,CAAC,CAAC;IAC9D,OAAO,CAAC,KAAU,CAAC,CAAC;AACtB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,SAAS,CAAI,IAAS,EAAE,IAAY;IAClD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAU,EAAE,CAAC;IACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC9E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAc;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,WAAW,CAAC,KAAgC;IAC1D,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IACtC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,QAAgB;IACtD,IAAI,KAAK;QAAE,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,0HAA0H;AAC1H,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IACvD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAO,KAAU,EAAE,KAAa,EAAE,EAA2B;IACzF,MAAM,GAAG,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QAC/D,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,CAAC,CACH,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IACpD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAClC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACrC,YAAY,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gHAAgH;AAChH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAqB,EAAE,GAAW,EAAE,IAAI,GAAgB,EAAE;IACtF,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACrC,IAAI,GAAG,CAAC,EAAE;gBAAE,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;gBAAE,MAAM,IAAI,SAAS,CAAC,GAAG,GAAG,UAAU,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACpH,IAAI,OAAO,KAAK,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,UAAU,GAAG,CAAC,MAAM,UAAU,OAAO,WAAW,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,OAAO,KAAK,EAAE;gBAAE,MAAM,GAAG,CAAC;QACpF,CAAC;QACD,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,MAAM,SAAU,SAAQ,KAAK;CAAG"}
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@notuslabs/yail",
3
- "version": "0.2.1",
4
- "description": "Blockchain indexer with Ponder-style DX: HyperSync as the primary EVM source, Esplora for Bitcoin, ClickHouse as the only storage",
3
+ "version": "0.4.0",
4
+ "description": "Blockchain indexer with Ponder-style DX: HyperSync as the primary EVM and Solana source, Esplora for Bitcoin, ClickHouse as the only storage",
5
5
  "keywords": [
6
6
  "indexer",
7
7
  "blockchain",
8
8
  "ethereum",
9
9
  "evm",
10
10
  "bitcoin",
11
+ "solana",
11
12
  "hypersync",
12
13
  "envio",
13
14
  "clickhouse",