tapimo 0.10.0 → 0.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 (224) hide show
  1. package/dist/ApiKey.d.ts +2 -1
  2. package/dist/ApiKey.d.ts.map +1 -1
  3. package/dist/ApiKeys.d.ts +4 -2
  4. package/dist/ApiKeys.d.ts.map +1 -1
  5. package/dist/ApiKeys.js +26 -1
  6. package/dist/ApiKeys.js.map +1 -1
  7. package/dist/App.d.ts +3346 -2575
  8. package/dist/App.d.ts.map +1 -1
  9. package/dist/App.js +1 -0
  10. package/dist/App.js.map +1 -1
  11. package/dist/Webhooks.d.ts.map +1 -1
  12. package/dist/Webhooks.js +5 -5
  13. package/dist/Webhooks.js.map +1 -1
  14. package/dist/admin/App.d.ts +91 -84
  15. package/dist/admin/App.d.ts.map +1 -1
  16. package/dist/admin/apps/api-keys.d.ts +26 -17
  17. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  18. package/dist/admin/apps/api-keys.js +6 -0
  19. package/dist/admin/apps/api-keys.js.map +1 -1
  20. package/dist/admin/apps/organizations.d.ts +4 -2
  21. package/dist/admin/apps/organizations.d.ts.map +1 -1
  22. package/dist/admin/ui.generated.d.ts +1 -1
  23. package/dist/admin/ui.generated.js +69 -69
  24. package/dist/admin/ui.generated.js.map +1 -1
  25. package/dist/analytics/Analytics.d.ts.map +1 -1
  26. package/dist/analytics/Analytics.js +26 -0
  27. package/dist/analytics/Analytics.js.map +1 -1
  28. package/dist/apps/Zones.d.ts +4266 -82
  29. package/dist/apps/Zones.d.ts.map +1 -1
  30. package/dist/apps/Zones.js +27 -8
  31. package/dist/apps/Zones.js.map +1 -1
  32. package/dist/apps/data/App.d.ts +3467 -2696
  33. package/dist/apps/data/App.d.ts.map +1 -1
  34. package/dist/apps/data/routes/activities.d.ts +2999 -100
  35. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  36. package/dist/apps/data/routes/activities.js +340 -2
  37. package/dist/apps/data/routes/activities.js.map +1 -1
  38. package/dist/apps/data/routes/addresses.d.ts +850 -336
  39. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  40. package/dist/apps/data/routes/balances.d.ts +26 -26
  41. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  42. package/dist/apps/data/routes/balances.js +11 -3
  43. package/dist/apps/data/routes/balances.js.map +1 -1
  44. package/dist/apps/data/routes/blocks.d.ts +4 -4
  45. package/dist/apps/data/routes/coingecko.d.ts +176 -176
  46. package/dist/apps/data/routes/earn.d.ts +75 -75
  47. package/dist/apps/data/routes/earn.js +2 -2
  48. package/dist/apps/data/routes/earn.js.map +1 -1
  49. package/dist/apps/data/routes/exchanges.d.ts +120 -120
  50. package/dist/apps/data/routes/fee-amm.d.ts +24 -24
  51. package/dist/apps/data/routes/indexer.d.ts +35 -34
  52. package/dist/apps/data/routes/indexer.d.ts.map +1 -1
  53. package/dist/apps/data/routes/indexer.js +3 -2
  54. package/dist/apps/data/routes/indexer.js.map +1 -1
  55. package/dist/apps/data/routes/rpc.d.ts.map +1 -1
  56. package/dist/apps/data/routes/rpc.js +5 -1
  57. package/dist/apps/data/routes/rpc.js.map +1 -1
  58. package/dist/apps/data/routes/tokenlist.d.ts +12 -12
  59. package/dist/apps/data/routes/transactions.d.ts +281 -281
  60. package/dist/apps/data/routes/verified-tokens.d.ts +37 -37
  61. package/dist/apps/data/routes/webhooks.d.ts +418 -364
  62. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  63. package/dist/apps/data/routes/webhooks.js +161 -14
  64. package/dist/apps/data/routes/webhooks.js.map +1 -1
  65. package/dist/apps/data/routes/zones.d.ts +31 -31
  66. package/dist/apps/data/routes/zones.js +1 -1
  67. package/dist/apps/data/routes/zones.js.map +1 -1
  68. package/dist/apps/funding/App.d.ts +96 -96
  69. package/dist/apps/funding/routes/deposit-addresses.d.ts +52 -52
  70. package/dist/apps/funding/routes/deposit-addresses.js +1 -1
  71. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  72. package/dist/apps/funding/routes/providers.d.ts +13 -13
  73. package/dist/apps/funding/routes/transfers.d.ts +32 -32
  74. package/dist/apps/funding/routes/transfers.js +1 -1
  75. package/dist/apps/funding/routes/transfers.js.map +1 -1
  76. package/dist/apps/management/App.d.ts +418 -418
  77. package/dist/apps/management/routes/api-keys.d.ts +50 -50
  78. package/dist/apps/management/routes/billing.d.ts +72 -72
  79. package/dist/apps/management/routes/billing.js +1 -1
  80. package/dist/apps/management/routes/billing.js.map +1 -1
  81. package/dist/apps/management/routes/faucet.d.ts +37 -37
  82. package/dist/apps/management/routes/faucet.js +2 -2
  83. package/dist/apps/management/routes/faucet.js.map +1 -1
  84. package/dist/apps/management/routes/invite-links.d.ts +42 -42
  85. package/dist/apps/management/routes/me.d.ts +6 -6
  86. package/dist/apps/management/routes/members.d.ts +75 -75
  87. package/dist/apps/management/routes/projects.d.ts +40 -40
  88. package/dist/apps/management/routes/usage.d.ts +76 -76
  89. package/dist/apps/management/routes/webhooks.d.ts +49 -49
  90. package/dist/apps/mcp.d.ts.map +1 -1
  91. package/dist/apps/mcp.js +4 -1
  92. package/dist/apps/mcp.js.map +1 -1
  93. package/dist/db/Db.d.ts +2 -0
  94. package/dist/db/Db.d.ts.map +1 -1
  95. package/dist/db/Db.js +58 -0
  96. package/dist/db/Db.js.map +1 -1
  97. package/dist/db/Schema.d.ts +19 -0
  98. package/dist/db/Schema.d.ts.map +1 -1
  99. package/dist/db/Schema.js +24 -0
  100. package/dist/db/Schema.js.map +1 -1
  101. package/dist/db/tables/webhookQueueEvents.d.ts +122 -0
  102. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -0
  103. package/dist/db/tables/webhookQueueEvents.js +160 -0
  104. package/dist/db/tables/webhookQueueEvents.js.map +1 -0
  105. package/dist/db/tables/webhookSubscriptions.d.ts +2 -0
  106. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  107. package/dist/db/tables/webhookSubscriptions.js +10 -0
  108. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  109. package/dist/internal/Auth.d.ts +3 -0
  110. package/dist/internal/Auth.d.ts.map +1 -1
  111. package/dist/internal/Auth.js +6 -4
  112. package/dist/internal/Auth.js.map +1 -1
  113. package/dist/internal/MetricSink.d.ts +27 -0
  114. package/dist/internal/MetricSink.d.ts.map +1 -1
  115. package/dist/internal/MetricSink.js +29 -2
  116. package/dist/internal/MetricSink.js.map +1 -1
  117. package/dist/internal/RateLimit.d.ts +4 -6
  118. package/dist/internal/RateLimit.d.ts.map +1 -1
  119. package/dist/internal/RateLimit.js +15 -14
  120. package/dist/internal/RateLimit.js.map +1 -1
  121. package/dist/internal/Store.d.ts +2 -1
  122. package/dist/internal/Store.d.ts.map +1 -1
  123. package/dist/internal/Store.js +57 -18
  124. package/dist/internal/Store.js.map +1 -1
  125. package/dist/internal/Value.d.ts +2 -0
  126. package/dist/internal/Value.d.ts.map +1 -1
  127. package/dist/internal/Value.js +25 -0
  128. package/dist/internal/Value.js.map +1 -1
  129. package/dist/internal/WebhookTransfer.d.ts +20 -0
  130. package/dist/internal/WebhookTransfer.d.ts.map +1 -1
  131. package/dist/internal/WebhookTransfer.js +7 -4
  132. package/dist/internal/WebhookTransfer.js.map +1 -1
  133. package/dist/internal/Webhooks.d.ts +139 -0
  134. package/dist/internal/Webhooks.d.ts.map +1 -1
  135. package/dist/internal/Webhooks.js +129 -7
  136. package/dist/internal/Webhooks.js.map +1 -1
  137. package/dist/internal/funding/providers/relay.d.ts +3 -4
  138. package/dist/internal/funding/providers/relay.d.ts.map +1 -1
  139. package/dist/internal/funding/providers/relay.js +59 -8
  140. package/dist/internal/funding/providers/relay.js.map +1 -1
  141. package/package.json +3 -3
  142. package/src/ApiKeys.test.ts +20 -0
  143. package/src/ApiKeys.ts +28 -1
  144. package/src/App.test.ts +10 -8
  145. package/src/App.ts +1 -0
  146. package/src/Client.test-d.ts +1 -0
  147. package/src/Webhooks.ts +19 -17
  148. package/src/admin/apps/api-keys.test.ts +9 -0
  149. package/src/admin/apps/api-keys.ts +15 -0
  150. package/src/admin/ui/src/lib/query-client.ts +3 -2
  151. package/src/admin/ui/src/routes/api-keys.tsx +31 -9
  152. package/src/admin/ui.generated.ts +69 -69
  153. package/src/analytics/Analytics.test.ts +8 -0
  154. package/src/analytics/Analytics.ts +26 -0
  155. package/src/apps/Zones.test.ts +20 -3
  156. package/src/apps/Zones.ts +28 -8
  157. package/src/apps/composition.test.ts +1 -0
  158. package/src/apps/data/App.test.ts +2 -2
  159. package/src/apps/data/routes/activities.bench.ts +41 -0
  160. package/src/apps/data/routes/activities.test.ts +103 -2
  161. package/src/apps/data/routes/activities.ts +401 -2
  162. package/src/apps/data/routes/balances.bench.ts +21 -0
  163. package/src/apps/data/routes/balances.ts +11 -3
  164. package/src/apps/data/routes/blocks.bench.ts +34 -0
  165. package/src/apps/data/routes/coingecko.bench.ts +53 -0
  166. package/src/apps/data/routes/earn.bench.ts +71 -0
  167. package/src/apps/data/routes/earn.ts +2 -2
  168. package/src/apps/data/routes/exchanges.bench.ts +85 -0
  169. package/src/apps/data/routes/fee-amm.bench.ts +13 -0
  170. package/src/apps/data/routes/indexer.bench.ts +8 -0
  171. package/src/apps/data/routes/indexer.test.ts +2 -1
  172. package/src/apps/data/routes/indexer.ts +3 -2
  173. package/src/apps/data/routes/receipts.bench.ts +39 -0
  174. package/src/apps/data/routes/rpc.bench.ts +14 -0
  175. package/src/apps/data/routes/rpc.test.ts +27 -0
  176. package/src/apps/data/routes/rpc.ts +5 -1
  177. package/src/apps/data/routes/tokenlist.bench.ts +3 -0
  178. package/src/apps/data/routes/tokens.bench.ts +76 -0
  179. package/src/apps/data/routes/transactions.bench.ts +40 -0
  180. package/src/apps/data/routes/transfers.bench.ts +28 -0
  181. package/src/apps/data/routes/valuation.bench.ts +14 -0
  182. package/src/apps/data/routes/verified-tokens.bench.ts +8 -0
  183. package/src/apps/data/routes/webhooks.bench.ts +26 -0
  184. package/src/apps/data/routes/webhooks.scan.test.ts +326 -0
  185. package/src/apps/data/routes/webhooks.test.ts +53 -6
  186. package/src/apps/data/routes/webhooks.ts +221 -14
  187. package/src/apps/data/routes/zones.bench.ts +32 -0
  188. package/src/apps/data/routes/zones.test.ts +1 -1
  189. package/src/apps/data/routes/zones.ts +1 -1
  190. package/src/apps/funding/routes/chains.test.ts +1 -1
  191. package/src/apps/funding/routes/deposit-addresses.test.ts +1 -1
  192. package/src/apps/funding/routes/deposit-addresses.ts +1 -1
  193. package/src/apps/funding/routes/providers.test.ts +1 -1
  194. package/src/apps/funding/routes/quotes.test.ts +1 -1
  195. package/src/apps/funding/routes/transfers.test.ts +3 -6
  196. package/src/apps/funding/routes/transfers.ts +1 -1
  197. package/src/apps/management/routes/billing.ts +1 -1
  198. package/src/apps/management/routes/faucet.ts +2 -2
  199. package/src/apps/management/routes/me.test.ts +31 -0
  200. package/src/apps/mcp.ts +4 -1
  201. package/src/db/Db.ts +81 -0
  202. package/src/db/Schema.ts +32 -0
  203. package/src/db/tables/webhookQueueEvents.ts +285 -0
  204. package/src/db/tables/webhookSubscriptions.ts +15 -0
  205. package/src/internal/Auth.test.ts +61 -50
  206. package/src/internal/Auth.ts +9 -4
  207. package/src/internal/EarnVaults.test.ts +2 -2
  208. package/src/internal/MetricSink.test.ts +58 -1
  209. package/src/internal/MetricSink.ts +60 -2
  210. package/src/internal/RateLimit.test.ts +23 -18
  211. package/src/internal/RateLimit.ts +23 -15
  212. package/src/internal/Store.test.ts +99 -13
  213. package/src/internal/Store.ts +52 -17
  214. package/src/internal/Tidx.test.ts +4 -4
  215. package/src/internal/Value.test.ts +25 -0
  216. package/src/internal/Value.ts +29 -0
  217. package/src/internal/WebhookTransfer.test.ts +89 -0
  218. package/src/internal/WebhookTransfer.ts +11 -7
  219. package/src/internal/Webhooks.test.ts +479 -0
  220. package/src/internal/Webhooks.ts +281 -7
  221. package/src/internal/funding/Provider.test.ts +1 -1
  222. package/src/internal/funding/providers/index.test.ts +73 -3
  223. package/src/internal/funding/providers/relay.test.ts +1 -5
  224. package/src/internal/funding/providers/relay.ts +56 -12
@@ -184,6 +184,14 @@ describe('migrations', () => {
184
184
  for (const column of Object.keys(row)) expect(sql).toContain(column)
185
185
  expect(sql).toContain('timings Map(String, Float64)')
186
186
  })
187
+
188
+ test('the migrations declare query benchmark history', () => {
189
+ const sql = Analytics.migrations.map((migration) => migration.sql).join('\n')
190
+ expect(sql).toContain('CREATE TABLE IF NOT EXISTS query_benchmark_results')
191
+ expect(sql).toContain('ORDER BY (chain_id, query, metric, timestamp, run_id)')
192
+ expect(sql).toContain('rpc_url String')
193
+ expect(sql).toContain('tidx_url String')
194
+ })
187
195
  })
188
196
 
189
197
  describe('get', () => {
@@ -192,6 +192,32 @@ export const migrations: readonly Migration[] = [
192
192
  ADD COLUMN IF NOT EXISTS timings Map(String, Float64)
193
193
  `,
194
194
  },
195
+ {
196
+ name: '0005_query_benchmark_results',
197
+ sql: `
198
+ CREATE TABLE IF NOT EXISTS query_benchmark_results (
199
+ timestamp DateTime64(3, 'UTC'),
200
+ run_id String,
201
+ repository LowCardinality(String),
202
+ git_sha String,
203
+ git_ref LowCardinality(String),
204
+ chain_id UInt32,
205
+ chain LowCardinality(String),
206
+ query String,
207
+ metric LowCardinality(String),
208
+ mean_ms Float64,
209
+ min_ms Float64,
210
+ max_ms Float64,
211
+ samples UInt16,
212
+ tidx_queries Array(String),
213
+ rpc_url String,
214
+ tidx_url String
215
+ )
216
+ ENGINE = ReplacingMergeTree
217
+ PARTITION BY toYYYYMM(timestamp)
218
+ ORDER BY (chain_id, query, metric, timestamp, run_id)
219
+ `,
220
+ },
195
221
  ]
196
222
 
197
223
  /**
@@ -5,10 +5,12 @@ describe('chains', () => {
5
5
  expect(Zones.chains).toMatchObject([
6
6
  {
7
7
  contracts: {
8
- messenger: { address: '0xc9C88278eA934A03CE8c90793F0B903e1C63B735' },
9
- portal: { address: '0xd8fDA2e3f421F272C56752cBCf5Ae0782c8B9ed2' },
8
+ messenger: { address: '0x2fB7Aba18510622cd88F5f45B3AC0E7Dd70606a5' },
9
+ portal: { address: '0x5765e8B9003054e479df44D12D3dEeaADEfa8b7c' },
10
+ verifier: { address: '0xfa16b9C6A356a096F0e7ceF0135C393A81d4a355' },
10
11
  },
11
- id: 421_700_001,
12
+ id: 1_424_310_001,
13
+ name: 'zone-moderato-internal',
12
14
  rpcUrls: {
13
15
  default: { http: ['https://zone-internal-rpc.testnet.tempo.xyz'] },
14
16
  internal: { http: ['https://zone-internal-rpc.testnet.tempo.xyz'] },
@@ -16,6 +18,21 @@ describe('chains', () => {
16
18
  },
17
19
  sourceId: 42_431,
18
20
  },
21
+ {
22
+ contracts: {
23
+ messenger: { address: '0x171699d2B5211414C23E5Cd306d05046b78FdD16' },
24
+ portal: { address: '0xe5208b9604972CA6a2E1EF656a9d2bDF2e530B9A' },
25
+ verifier: { address: '0x3E7C1cC9C049052eb061116A4Ee7a7C281fa1F30' },
26
+ },
27
+ id: 421_700_001,
28
+ name: 'zone-mainnet-internal',
29
+ rpcUrls: {
30
+ default: { http: ['https://zone-internal-rpc.tempo.xyz'] },
31
+ internal: { http: ['https://zone-internal-rpc.tempo.xyz'] },
32
+ tidx: { http: ['https://indexer-zone-internal.tempo.xyz'] },
33
+ },
34
+ sourceId: 4_217,
35
+ },
19
36
  {
20
37
  contracts: {
21
38
  messenger: { address: '0x5A4d000000000000000000000000000000000000' },
package/src/apps/Zones.ts CHANGED
@@ -1,16 +1,17 @@
1
1
  import { defineChain } from 'viem'
2
- import { tempoDevnet, tempoTestnet } from 'viem/tempo/chains'
2
+ import { tempo, tempoDevnet, tempoTestnet } from 'viem/tempo/chains'
3
3
 
4
- /** Moderato Zone on Tempo testnet. */
5
- export const zoneModerato = defineChain({
4
+ /** Internal Moderato Zone on Tempo testnet. */
5
+ export const zoneModeratoInternal = defineChain({
6
6
  ...tempoTestnet,
7
7
  contracts: {
8
8
  ...tempoTestnet.contracts,
9
- messenger: { address: '0xc9C88278eA934A03CE8c90793F0B903e1C63B735' },
10
- portal: { address: '0xd8fDA2e3f421F272C56752cBCf5Ae0782c8B9ed2' },
9
+ messenger: { address: '0x2fB7Aba18510622cd88F5f45B3AC0E7Dd70606a5' },
10
+ portal: { address: '0x5765e8B9003054e479df44D12D3dEeaADEfa8b7c' },
11
+ verifier: { address: '0xfa16b9C6A356a096F0e7ceF0135C393A81d4a355' },
11
12
  },
12
- id: 421_700_001,
13
- name: 'zone-moderato',
13
+ id: 1_424_310_001,
14
+ name: 'zone-moderato-internal',
14
15
  rpcUrls: {
15
16
  default: { http: ['https://zone-internal-rpc.testnet.tempo.xyz'] },
16
17
  internal: { http: ['https://zone-internal-rpc.testnet.tempo.xyz'] },
@@ -19,6 +20,25 @@ export const zoneModerato = defineChain({
19
20
  sourceId: tempoTestnet.id,
20
21
  })
21
22
 
23
+ /** Internal Zone on Tempo mainnet. */
24
+ export const zoneMainnetInternal = defineChain({
25
+ ...tempo,
26
+ contracts: {
27
+ ...tempo.contracts,
28
+ messenger: { address: '0x171699d2B5211414C23E5Cd306d05046b78FdD16' },
29
+ portal: { address: '0xe5208b9604972CA6a2E1EF656a9d2bDF2e530B9A' },
30
+ verifier: { address: '0x3E7C1cC9C049052eb061116A4Ee7a7C281fa1F30' },
31
+ },
32
+ id: 421_700_001,
33
+ name: 'zone-mainnet-internal',
34
+ rpcUrls: {
35
+ default: { http: ['https://zone-internal-rpc.tempo.xyz'] },
36
+ internal: { http: ['https://zone-internal-rpc.tempo.xyz'] },
37
+ tidx: { http: ['https://indexer-zone-internal.tempo.xyz'] },
38
+ },
39
+ sourceId: tempo.id,
40
+ })
41
+
22
42
  /** Stable hosted Zone on Tempo devnet. */
23
43
  export const zoneStable = defineChain({
24
44
  ...tempoDevnet,
@@ -38,4 +58,4 @@ export const zoneStable = defineChain({
38
58
  })
39
59
 
40
60
  /** Hosted Zone chains served by the API and admin. */
41
- export const chains = [zoneModerato, zoneStable] as const
61
+ export const chains = [zoneModeratoInternal, zoneMainnetInternal, zoneStable] as const
@@ -197,6 +197,7 @@ describe('data()', () => {
197
197
  42431,
198
198
  421700001,
199
199
  421700006,
200
+ 1424310001,
200
201
  ],
201
202
  }
202
203
  `)
@@ -436,8 +436,8 @@ describe('sandbox chain guard', () => {
436
436
  })
437
437
 
438
438
  async function exhaustPublicQuota(store: Store.Store) {
439
- const limit = { perMinute: 60 }
439
+ const limit = { limit: 60, period: 'minute' } satisfies RateLimit.Limit
440
440
  const rateLimit = RateLimit.memory({ store })
441
- for (let index = 0; index < limit.perMinute; index++)
441
+ for (let index = 0; index < limit.limit; index++)
442
442
  await rateLimit.consume({ key: 'public:anonymous', limit })
443
443
  }
@@ -0,0 +1,41 @@
1
+ import * as QueryBench from '../../../../test/QueryBench.js'
2
+
3
+ const fixtures = {
4
+ 4217: {
5
+ address: '0xc24357119432595a547cb2c1e41c51d753645519',
6
+ transactionHash: '0x7f98e4b2bf4d1444b257526f7dd294ac3480d73cd91f723bf0df6062d1ba1c82',
7
+ },
8
+ 42431: {
9
+ address: '0x15496d3123afb2cfadc0ac068eadd11d0f8ae799',
10
+ transactionHash: '0x1c8ccebb169f863b72388cc057fcecee240032eb7d2c64aa6f6fb8e5a60d3f9a',
11
+ },
12
+ } as const
13
+
14
+ QueryBench.bench({
15
+ name: 'getAddressActivities',
16
+ path: {
17
+ 4217: `/v1/addresses/${fixtures[4217].address}/activities`,
18
+ 42431: `/v1/addresses/${fixtures[42431].address}/activities`,
19
+ },
20
+ queries: [
21
+ 'group=true',
22
+ 'include=token.logoUri',
23
+ 'include=token.verified',
24
+ 'logs=true',
25
+ 'valuation.currency=USD',
26
+ ],
27
+ })
28
+
29
+ QueryBench.bench({
30
+ name: 'getTransactionActivities',
31
+ path: {
32
+ 4217: `/v1/transactions/${fixtures[4217].transactionHash}/activities`,
33
+ 42431: `/v1/transactions/${fixtures[42431].transactionHash}/activities`,
34
+ },
35
+ queries: [
36
+ 'include=token.logoUri',
37
+ 'include=token.verified',
38
+ 'logs=true',
39
+ 'valuation.currency=USD',
40
+ ],
41
+ })
@@ -699,11 +699,12 @@ describe('Activities.list precompile classification', () => {
699
699
  logIdx: number
700
700
  }): Activities.Row {
701
701
  type Param = { indexed?: boolean; name?: string; type: string }
702
- const event = Abis.abis.find((a) => a.type === 'event' && a.name === options.eventName) as {
702
+ const abi = [...Abis.abis, ...Abis.earnRouter, ...Abis.earnVault]
703
+ const event = abi.find((a) => a.type === 'event' && a.name === options.eventName) as {
703
704
  inputs: readonly Param[]
704
705
  }
705
706
  const topics = encodeEventTopics({
706
- abi: Abis.abis,
707
+ abi,
707
708
  eventName: options.eventName as never,
708
709
  args: options.args as never,
709
710
  }) as (string | null)[]
@@ -751,6 +752,106 @@ describe('Activities.list precompile classification', () => {
751
752
  return items
752
753
  }
753
754
 
755
+ test('classifies every Earn vault and private-router event', async () => {
756
+ const requestId = `0x${'c'.repeat(64)}` as Hex.Hex
757
+ const cases = [
758
+ ['Deposited', { assets: 100n, caller: viewer, earnShares: 90n, receiver: viewer }],
759
+ [
760
+ 'VenueSharesDeposited',
761
+ {
762
+ caller: viewer,
763
+ earnShares: 90n,
764
+ receivedEngineShares: 95n,
765
+ receiver: viewer,
766
+ requestedVenueShares: 100n,
767
+ },
768
+ ],
769
+ ['Redeemed', { assets: 100n, caller: viewer, earnShares: 90n, receiver: viewer }],
770
+ ['WithdrewExact', { assets: 100n, caller: viewer, earnSharesBurned: 90n, receiver: viewer }],
771
+ ['RedeemRequested', { earnShares: 90n, receiver: viewer, requestId, requester: viewer }],
772
+ [
773
+ 'RedeemFinalized',
774
+ { asset: tokenA, assets: 100n, earnShares: 90n, receiver: viewer, requestId },
775
+ ],
776
+ ['RedeemCancelled', { earnShares: 90n, receiver: viewer, requestId }],
777
+ [
778
+ 'EarnDeposit',
779
+ {
780
+ actionId: requestId,
781
+ earnShares: 90n,
782
+ earnVault: tokenA,
783
+ inputAmount: 100n,
784
+ inputToken: tokenA,
785
+ vaultAssets: 100n,
786
+ zoneDepositHash: requestId,
787
+ },
788
+ ],
789
+ [
790
+ 'EarnRedeem',
791
+ {
792
+ actionId: requestId,
793
+ earnShares: 90n,
794
+ earnVault: tokenA,
795
+ outputAmount: 100n,
796
+ outputToken: tokenA,
797
+ vaultAssets: 100n,
798
+ zoneDepositHash: requestId,
799
+ },
800
+ ],
801
+ ] as const
802
+
803
+ const types = []
804
+ for (const [eventName, args] of cases) {
805
+ const items = await classify([logRow({ address: tokenA, args, eventName, logIdx: 0 })])
806
+ types.push(items[0]?.type)
807
+ }
808
+
809
+ expect(types).toMatchInlineSnapshot(`
810
+ [
811
+ "assets-deposited",
812
+ "shares-deposited",
813
+ "shares-redeemed",
814
+ "assets-withdrawn",
815
+ "shares-redemption-requested",
816
+ "shares-redemption-finalized",
817
+ "shares-redemption-cancelled",
818
+ "private-assets-deposited",
819
+ "private-shares-redeemed",
820
+ ]
821
+ `)
822
+ })
823
+
824
+ test('prefers a private Earn event over its underlying vault event', async () => {
825
+ const actionId = `0x${'c'.repeat(64)}` as Hex.Hex
826
+ const items = await classify([
827
+ logRow({
828
+ address: tokenA,
829
+ args: { assets: 100n, caller: viewer, earnShares: 90n, receiver: viewer },
830
+ eventName: 'Deposited',
831
+ logIdx: 0,
832
+ }),
833
+ logRow({
834
+ address: tokenA,
835
+ args: {
836
+ actionId,
837
+ earnShares: 90n,
838
+ earnVault: tokenA,
839
+ inputAmount: 100n,
840
+ inputToken: tokenA,
841
+ vaultAssets: 100n,
842
+ zoneDepositHash: actionId,
843
+ },
844
+ eventName: 'EarnDeposit',
845
+ logIdx: 1,
846
+ }),
847
+ ])
848
+ expect(items.map((item) => item.type)).toMatchInlineSnapshot(`
849
+ [
850
+ "private-assets-deposited",
851
+ ]
852
+ `)
853
+ })
854
+
754
855
  test('classifies ChannelOpened as `channel-opened` with the deposit token', async () => {
755
856
  const items = await classify([
756
857
  logRow({