tapimo 0.10.1 → 0.10.2

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 (144) hide show
  1. package/dist/App.d.ts +1776 -1543
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/Webhooks.d.ts +1 -1
  4. package/dist/Webhooks.d.ts.map +1 -1
  5. package/dist/Webhooks.js +1 -1
  6. package/dist/Webhooks.js.map +1 -1
  7. package/dist/admin/apps/api-keys.d.ts +4 -4
  8. package/dist/analytics/Analytics.d.ts.map +1 -1
  9. package/dist/analytics/Analytics.js +206 -0
  10. package/dist/analytics/Analytics.js.map +1 -1
  11. package/dist/analytics/tables/requestEvents.d.ts +4 -0
  12. package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
  13. package/dist/analytics/tables/requestEvents.js +2 -0
  14. package/dist/analytics/tables/requestEvents.js.map +1 -1
  15. package/dist/apps/data/App.d.ts.map +1 -1
  16. package/dist/apps/data/App.js +2 -0
  17. package/dist/apps/data/App.js.map +1 -1
  18. package/dist/apps/data/routes/addresses.d.ts +340 -340
  19. package/dist/apps/data/routes/balances.d.ts.map +1 -1
  20. package/dist/apps/data/routes/balances.js +2 -6
  21. package/dist/apps/data/routes/balances.js.map +1 -1
  22. package/dist/apps/data/routes/coingecko.d.ts +176 -176
  23. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  24. package/dist/apps/data/routes/earn.js +63 -34
  25. package/dist/apps/data/routes/earn.js.map +1 -1
  26. package/dist/apps/data/routes/exchanges.d.ts +4 -0
  27. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  28. package/dist/apps/data/routes/exchanges.js +115 -77
  29. package/dist/apps/data/routes/exchanges.js.map +1 -1
  30. package/dist/apps/data/routes/indexer.d.ts +34 -34
  31. package/dist/apps/data/routes/receipts.d.ts +4 -3
  32. package/dist/apps/data/routes/receipts.d.ts.map +1 -1
  33. package/dist/apps/data/routes/receipts.js +15 -14
  34. package/dist/apps/data/routes/receipts.js.map +1 -1
  35. package/dist/apps/data/routes/tokens.d.ts +1 -1
  36. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  37. package/dist/apps/data/routes/tokens.js +4 -3
  38. package/dist/apps/data/routes/tokens.js.map +1 -1
  39. package/dist/apps/data/routes/transactions.d.ts +281 -281
  40. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  41. package/dist/apps/data/routes/transfers.js +25 -7
  42. package/dist/apps/data/routes/transfers.js.map +1 -1
  43. package/dist/apps/data/routes/webhooks.d.ts +380 -364
  44. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  45. package/dist/apps/data/routes/webhooks.js +16 -9
  46. package/dist/apps/data/routes/webhooks.js.map +1 -1
  47. package/dist/apps/data/routes/zones.d.ts +31 -31
  48. package/dist/apps/funding/App.d.ts +233 -0
  49. package/dist/apps/funding/App.d.ts.map +1 -1
  50. package/dist/apps/funding/routes/deposit-addresses.d.ts +330 -0
  51. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
  52. package/dist/apps/funding/routes/deposit-addresses.js +207 -11
  53. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  54. package/dist/apps/funding/routes/providers.d.ts +13 -13
  55. package/dist/apps/management/routes/faucet.d.ts +32 -32
  56. package/dist/apps/management/routes/members.d.ts +79 -79
  57. package/dist/apps/management/routes/usage.d.ts +80 -80
  58. package/dist/db/Db.d.ts.map +1 -1
  59. package/dist/db/Db.js +32 -0
  60. package/dist/db/Db.js.map +1 -1
  61. package/dist/db/tables/fundingDepositAddresses.d.ts +20 -0
  62. package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -1
  63. package/dist/db/tables/fundingDepositAddresses.js +17 -0
  64. package/dist/db/tables/fundingDepositAddresses.js.map +1 -1
  65. package/dist/db/tables/fundingDeposits.d.ts +41 -0
  66. package/dist/db/tables/fundingDeposits.d.ts.map +1 -1
  67. package/dist/db/tables/fundingDeposits.js +69 -0
  68. package/dist/db/tables/fundingDeposits.js.map +1 -1
  69. package/dist/internal/Auth.d.ts +0 -26
  70. package/dist/internal/Auth.d.ts.map +1 -1
  71. package/dist/internal/Auth.js +0 -33
  72. package/dist/internal/Auth.js.map +1 -1
  73. package/dist/internal/Credential.d.ts +27 -0
  74. package/dist/internal/Credential.d.ts.map +1 -0
  75. package/dist/internal/Credential.js +34 -0
  76. package/dist/internal/Credential.js.map +1 -0
  77. package/dist/internal/EarnRates.js +11 -7
  78. package/dist/internal/EarnRates.js.map +1 -1
  79. package/dist/internal/Log.d.ts +8 -0
  80. package/dist/internal/Log.d.ts.map +1 -1
  81. package/dist/internal/Log.js +4 -0
  82. package/dist/internal/Log.js.map +1 -1
  83. package/dist/internal/MetricSink.d.ts +24 -0
  84. package/dist/internal/MetricSink.d.ts.map +1 -1
  85. package/dist/internal/MetricSink.js +25 -0
  86. package/dist/internal/MetricSink.js.map +1 -1
  87. package/dist/internal/Tidx.d.ts +4 -3
  88. package/dist/internal/Tidx.d.ts.map +1 -1
  89. package/dist/internal/Tidx.js +2 -2
  90. package/dist/internal/Tidx.js.map +1 -1
  91. package/dist/internal/Viem.d.ts +4 -3
  92. package/dist/internal/Viem.d.ts.map +1 -1
  93. package/dist/internal/Viem.js +3 -2
  94. package/dist/internal/Viem.js.map +1 -1
  95. package/dist/internal/Webhooks.d.ts +2 -0
  96. package/dist/internal/Webhooks.d.ts.map +1 -1
  97. package/dist/internal/Webhooks.js +10 -3
  98. package/dist/internal/Webhooks.js.map +1 -1
  99. package/dist/internal/index.d.ts +1 -0
  100. package/dist/internal/index.d.ts.map +1 -1
  101. package/dist/internal/index.js +1 -0
  102. package/dist/internal/index.js.map +1 -1
  103. package/package.json +1 -1
  104. package/src/App.test.ts +30 -0
  105. package/src/Client.test-d.ts +33 -1
  106. package/src/Webhooks.ts +1 -1
  107. package/src/analytics/Analytics.test.ts +34 -0
  108. package/src/analytics/Analytics.ts +206 -0
  109. package/src/analytics/tables/requestEvents.ts +6 -0
  110. package/src/apps/composition.test.ts +1 -0
  111. package/src/apps/data/App.ts +2 -0
  112. package/src/apps/data/routes/balances.ts +2 -6
  113. package/src/apps/data/routes/earn.ts +64 -34
  114. package/src/apps/data/routes/exchanges.test.ts +8 -3
  115. package/src/apps/data/routes/exchanges.ts +134 -82
  116. package/src/apps/data/routes/receipts.ts +16 -14
  117. package/src/apps/data/routes/tokens.ts +3 -2
  118. package/src/apps/data/routes/transactions.bench.ts +8 -0
  119. package/src/apps/data/routes/transfers.ts +36 -10
  120. package/src/apps/data/routes/webhooks.ts +31 -10
  121. package/src/apps/funding/routes/deposit-addresses.test.ts +216 -2
  122. package/src/apps/funding/routes/deposit-addresses.ts +254 -18
  123. package/src/apps/funding/routes/transfers.test.ts +17 -2
  124. package/src/db/Db.ts +36 -0
  125. package/src/db/tables/fundingDepositAddresses.test.ts +28 -0
  126. package/src/db/tables/fundingDepositAddresses.ts +39 -0
  127. package/src/db/tables/fundingDeposits.test.ts +82 -0
  128. package/src/db/tables/fundingDeposits.ts +130 -0
  129. package/src/internal/Auth.test.ts +0 -48
  130. package/src/internal/Auth.ts +0 -59
  131. package/src/internal/Credential.test.ts +51 -0
  132. package/src/internal/Credential.ts +58 -0
  133. package/src/internal/EarnRates.ts +13 -7
  134. package/src/internal/Log.test.ts +3 -1
  135. package/src/internal/Log.ts +14 -0
  136. package/src/internal/MetricSink.test.ts +50 -1
  137. package/src/internal/MetricSink.ts +52 -0
  138. package/src/internal/Tidx.ts +5 -4
  139. package/src/internal/Viem.test.ts +4 -0
  140. package/src/internal/Viem.ts +6 -4
  141. package/src/internal/Webhooks.test.ts +9 -0
  142. package/src/internal/Webhooks.ts +10 -3
  143. package/src/internal/index.test.ts +1 -0
  144. package/src/internal/index.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"exchanges.d.ts","sourceRoot":"","sources":["../../../../src/apps/data/routes/exchanges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,MAAM,CAAA;AAWzC,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAM3C,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;AACzD,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAA;AASrD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AA0J3C,kDAAkD;AAClD,yBAAiB,MAAM,CAAC;IACtB;;;;;OAKG;IACI,MAAM,SAAS;;;;;;;;qBAkDrB,CAAA;IAcD,yDAAyD;IACzD,UAAiB,WAAW,CAAC;QAI3B,4DAA4D;QACrD,MAAM,MAAM,yBAYlB,CAAA;QAED,sEAAsE;QAC/D,MAAM,OAAO;;;UAE6D,CAAA;QAEjF,oDAAoD;QAC7C,MAAM,YAAY;;;YAGxB,CAAA;QAED,4EAA4E;QACrE,MAAM,KAAK;;;;;;;;;;0BAMsD,CAAA;QAExE,uEAAuE;QAChE,MAAM,OAAO;;;;;;;;;;0BAsCjB,CAAA;QAEH,uDAAuD;QAChD,MAAM,IAAI;;;;yBAeuD,CAAA;QAkBjE,MAAM,WAAW;;;;;;;;;;yBAoBgC,CAAA;QAExD,gDAAgD;QACzC,MAAM,IAAI;;;;;;yBAUuD,CAAA;QAExE,0EAA0E;QACnE,MAAM,SAAS;;;;;;;;yBAkEqE,CAAA;QAmG3F,kEAAkE;QAC3D,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BASkE,CAAA;KACxF;IAED,0EAA0E;IAC1E,UAAiB,YAAY,CAAC;QAC5B,mCAAmC;QAC5B,MAAM,OAAO;;;;;0BAyBlB,CAAA;QAEF,8BAA8B;QACvB,MAAM,QAAQ;;;;;;;;;;;;;yBAQnB,CAAA;KACH;IAED,0CAA0C;IAC1C,UAAiB,QAAQ,CAAC;QACxB;;;;WAIG;QACI,MAAM,OAAO;;;UAMjB,CAAA;QAEH;;;;WAIG;QACI,MAAM,YAAY;;;YAGxB,CAAA;QAED,uDAAuD;QAChD,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;0BAoBf,CAAA;QAEH,mDAAmD;QAC5C,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;yBA+CgE,CAAA;QAEjF,wEAAwE;QACjE,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAYlB,CAAA;KACJ;IAED,sEAAsE;IACtE,UAAiB,OAAO,CAAC;QACvB;;;;WAIG;QACI,MAAM,MAAM;;yBAMmD,CAAA;QAEtE,qEAAqE;QAC9D,MAAM,OAAO;;UAEqD,CAAA;QAEzE;;;WAGG;QACI,MAAM,YAAY;;YAGxB,CAAA;QAED,iDAAiD;QAC1C,MAAM,KAAK;;;;;;;;0BAKkD,CAAA;QAEpE,+EAA+E;QACxE,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;yBAAgB,CAAA;KACtC;IAED,kFAAkF;IAClF,UAAiB,QAAQ,CAAC;QACxB,sEAAsE;QAC/D,MAAM,OAAO;;;UAEyD,CAAA;QAE7E,oDAAoD;QAC7C,MAAM,YAAY;;;YAGxB,CAAA;QAED,+CAA+C;QACxC,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;0BAuCf,CAAA;QAEH,yEAAyE;QAClE,MAAM,QAAQ;;;;;;;;yBAGpB,CAAA;QAED,oFAAoF;QAC7E,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAsCd,CAAA;QAEH;;;;;;WAMG;QACI,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA0EsE,CAAA;QAEvF;;;;;;WAMG;QACH,uDAAuD;QAChD,MAAM,IAAI;;;;;;yBAWsD,CAAA;QAEhE,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAQqE,CAAA;KAC3F;IAED,wEAAwE;IACxE,UAAiB,WAAW,CAAC;QAC3B;;;WAGG;QACI,MAAM,MAAM;;yBAM0D,CAAA;QAE7E,mDAAmD;QAC5C,MAAM,QAAQ;;;;;;;UAEuE,CAAA;QAE5F,+DAA+D;QACxD,MAAM,MAAM;;;;;UAKhB,CAAA;QAEH;;;;WAIG;QACI,MAAM,OAAO;;UAEqD,CAAA;QAEzE;;;WAGG;QACI,MAAM,YAAY;;YAGxB,CAAA;QAED,+CAA+C;QACxC,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;0BAayD,CAAA;QAE3E;;;;;WAKG;QACI,MAAM,MAAM;;;;;;;;;;;;yBA6EwD,CAAA;QAE3E,6DAA6D;QACtD,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAoBoE,CAAA;KAC1F;IAED,mEAAmE;IACnE,UAAiB,KAAK,CAAC;QACrB,uEAAuE;QAChE,MAAM,MAAM;;yBAOuD,CAAA;QAE1E,4CAA4C;QACrC,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;yBAOhB,CAAA;KACF;IAED,0CAA0C;IAC1C,UAAiB,QAAQ,CAAC;QACxB,iDAAiD;QAC1C,MAAM,MAAM;;yBAAe,CAAA;QAElC;;;;WAIG;QACI,MAAM,OAAO;;UAEqD,CAAA;QAEzE;;;;WAIG;QACI,MAAM,YAAY;;YAGxB,CAAA;QAED,kDAAkD;QAC3C,MAAM,KAAK;;;;;;;;0BAK2C,CAAA;QAE7D;;;;;;;;;WASG;QACI,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAgFpB,CAAA;KACF;IAED,4FAA4F;IAC5F,UAAiB,SAAS,CAAC;QACzB;;;;WAIG;QACI,MAAM,OAAO;;;UAMjB,CAAA;QAEH;;;WAGG;QACI,MAAM,YAAY;;;YAGxB,CAAA;QAED,wDAAwD;QACjD,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;0BAqC0E,CAAA;QAE5F;;;;;;;WAOG;QACI,MAAM,YAAY;;;;;;;;;;;;;;;;;yBA8E+D,CAAA;QAExF,2EAA2E;QACpE,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAIkD,CAAA;QAEpE,0EAA0E;QACnE,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAsBlB,CAAA;KACJ;IAED,+CAA+C;IAC/C,UAAiB,aAAa,CAAC;QAC7B,wEAAwE;QACjE,MAAM,MAAM;;yBAAe,CAAA;QAElC,0DAA0D;QACnD,MAAM,KAAK;;;;;;;;;;;;;;;0BAYf,CAAA;QAEH;;;;WAIG;QACI,MAAM,IAAI;;;;;;;;;;yBAiDkD,CAAA;QAEnE,6CAA6C;QACtC,MAAM,QAAQ;;;;;;;;;;;;;;;;;yBAQqD,CAAA;KAC3E;IAED,4EAA4E;IAC5E,UAAiB,YAAY,CAAC;QAC5B;;;WAGG;QACI,MAAM,MAAM;;yBAM6D,CAAA;QAEhF;;;;WAIG;QACI,MAAM,OAAO;;UAEqD,CAAA;QAEzE;;;WAGG;QACI,MAAM,YAAY;;YAGxB,CAAA;QAED,gDAAgD;QACzC,MAAM,KAAK;;;;;;;;;0BAgB4D,CAAA;QAE9E;;;;;;WAMG;QACI,MAAM,KAAK;;;;;;yBA+BsD,CAAA;QAExE,4EAA4E;QACrE,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAmB2E,CAAA;KACjG;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,OAAO,GAAE,SAAS,CAAC,OAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
1
+ {"version":3,"file":"exchanges.d.ts","sourceRoot":"","sources":["../../../../src/apps/data/routes/exchanges.ts"],"names":[],"mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CA2zCxD;AAED,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IACjC,yCAAyC;IACzC,KAAK,OAAO,GAAG;QACb,iDAAiD;QACjD,EAAE,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,SAAS,CAAA;QACvC,8EAA8E;QAC9E,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAChC,CAAA;CACF;AA0/BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,kBAAkB,CACtC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAC3B,OAAO,EAAE,kBAAkB,CAAC,OAAO,GAClC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,CAmDlD;AAED,OAAO,WAAW,kBAAkB,CAAC;IACnC,gDAAgD;IAChD,KAAK,OAAO,GAAG;QACb,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;QACxC,2DAA2D;QAC3D,QAAQ,EAAE,MAAM,CAAA;QAChB,+DAA+D;QAC/D,QAAQ,EAAE,MAAM,CAAA;QAChB,oCAAoC;QACpC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;KAC5B,CAAA;IAED,mEAAmE;IACnE,KAAK,KAAK,GAAG;QACX,iEAAiE;QACjE,WAAW,EAAE,MAAM,CAAA;QACnB,yEAAyE;QACzE,KAAK,EAAE,OAAO,CAAA;QACd,iDAAiD;QACjD,QAAQ,EAAE,MAAM,CAAA;QAChB,gEAAgE;QAChE,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,SAAS,CAAA;QAC7D,uCAAuC;QACvC,IAAI,EAAE,MAAM,CAAA;QACZ,2CAA2C;QAC3C,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAqLD;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CACrC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAC3B,OAAO,EAAE,iBAAiB,CAAC,OAAO,GACjC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CA2B5D;AAED,OAAO,WAAW,iBAAiB,CAAC;IAClC,sDAAsD;IACtD,KAAK,OAAO,GAAG;QACb,mEAAmE;QACnE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;QACxB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;KACzC,CAAA;CACF;AAuyBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,mBAAmB,CACvC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAC3B,OAAO,EAAE,mBAAmB,CAAC,OAAO,GACnC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAmErC;AAED,MAAM,CAAC,OAAO,WAAW,mBAAmB,CAAC;IAC3C,KAAK,OAAO,GAAG;QACb,mEAAmE;QACnE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;QACxB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAA;QACxC,+EAA+E;QAC/E,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;IAED,iEAAiE;IACjE,KAAK,OAAO,GAAG;QACb,qDAAqD;QACrD,IAAI,EAAE,MAAM,CAAA;QACZ,wEAAwE;QACxE,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;IAED,KAAK,MAAM,GAAG;QACZ,8CAA8C;QAC9C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAC9B,yEAAyE;QACzE,SAAS,EAAE,OAAO,CAAA;KACnB,CAAA;CACF"}
@@ -1495,19 +1495,22 @@ export function exchanges(options = {}) {
1495
1495
  toTimestamp: options['timestamp.to'],
1496
1496
  transactionHash: options.transactionHash,
1497
1497
  });
1498
- // `route` spans every swap and fill side, so one lookup resolves each
1499
- // token once for required RPC metadata and requested curated fields.
1500
- const tokensByAddress = await Tokens.resolveTokens(c, {
1501
- addresses: page.data.flatMap((swap) => swap.route),
1502
- chainId,
1503
- include: options.include,
1504
- });
1505
1498
  // Value amounts via their curated display currency; snapshot or rate
1506
1499
  // failures degrade the values to `null`, never the feed.
1507
1500
  const denomination = options['valuation.currency'];
1508
- const snapshot = denomination !== undefined && page.data.length > 0
1509
- ? await VerifiedTokens.snapshot(c, chainId).catch(() => undefined)
1510
- : undefined;
1501
+ // Mode, verified-token, and RPC metadata reads depend only on the
1502
+ // assembled page, so overlap them before enriching its rows.
1503
+ const [, snapshot, tokensByAddress] = await Promise.all([
1504
+ resolveSwapModes(c, { chainId, swaps: page.data }),
1505
+ denomination !== undefined && page.data.length > 0
1506
+ ? VerifiedTokens.snapshot(c, chainId).catch(() => undefined)
1507
+ : undefined,
1508
+ Tokens.resolveTokens(c, {
1509
+ addresses: page.data.flatMap((swap) => swap.route),
1510
+ chainId,
1511
+ include: options.include,
1512
+ }),
1513
+ ]);
1511
1514
  const rates = denomination
1512
1515
  ? await Valuation.ratesFor(c, {
1513
1516
  currencies: snapshot
@@ -2193,26 +2196,37 @@ export function exchanges(options = {}) {
2193
2196
  const options = c.req.valid('query');
2194
2197
  const chainId = options.chainId ?? c.get('chainId');
2195
2198
  try {
2196
- const pairs = await getPairIndex(c, { chainId });
2197
- const target = pairs.get(baseAddress);
2198
- if (!target)
2199
- return pairNotFoundError(c, { base: baseAddress, pairIndex: pairs });
2200
- const { asks, bids } = await getPairDepth(c, {
2201
- chainId,
2202
- levels: options.levels,
2203
- pair: target,
2199
+ // Pair definitions are immutable after creation, so cache successful
2200
+ // point lookups without making unknown pairs stale.
2201
+ const target = await Store.memoize(async () => (await getPairsByBase(c, { bases: [baseAddress], chainId })).get(baseAddress), {
2202
+ key: `exchange:v1:${chainId}:pair-by-base:${baseAddress}:v1`,
2203
+ store: c.get('store'),
2204
+ ttl: Ttl.minutes(5),
2204
2205
  });
2205
- // Token metadata is opt-in. Resolve once per pair and spread onto the
2206
- // top-level `base`/`quote` PairToken slots. The Level rows carry no
2207
- // token references so no per-row enrichment is needed.
2206
+ if (!target)
2207
+ return pairNotFoundError(c, {
2208
+ base: baseAddress,
2209
+ pairIndex: await getPairIndex(c, { chainId }),
2210
+ });
2211
+ // Token metadata is opt-in and resolves once per pair onto the top-level
2212
+ // `base`/`quote` slots. Run it alongside the independent depth RPC scan.
2213
+ const [{ asks, bids }, tokensByAddress] = await Promise.all([
2214
+ getPairDepth(c, {
2215
+ chainId,
2216
+ levels: options.levels,
2217
+ pair: target,
2218
+ }),
2219
+ options.include.includes('tokens')
2220
+ ? Tokens.resolveTokens(c, {
2221
+ addresses: [target.base, target.quote],
2222
+ chainId,
2223
+ include: tokenFields,
2224
+ })
2225
+ : undefined,
2226
+ ]);
2208
2227
  let base = { address: target.base };
2209
2228
  let quote = { address: target.quote };
2210
- if (options.include.includes('tokens')) {
2211
- const tokensByAddress = await Tokens.resolveTokens(c, {
2212
- addresses: [target.base, target.quote],
2213
- chainId,
2214
- include: tokenFields,
2215
- });
2229
+ if (tokensByAddress) {
2216
2230
  const baseMeta = tokensByAddress.get(target.base);
2217
2231
  const quoteMeta = tokensByAddress.get(target.quote);
2218
2232
  if (baseMeta)
@@ -2651,6 +2665,11 @@ async function getSwaps(c, options) {
2651
2665
  // the group timestamp.
2652
2666
  const fetchGroups = (activeCursor, batchLimit, window) => {
2653
2667
  const { having, where } = withCursorSql(activeCursor);
2668
+ const windowFilters = window === 'indexedHead'
2669
+ ? [
2670
+ `f.block_num >= greatest(toInt128((SELECT max(num) FROM blocks)) - ${swapWindowBlocks - 1}, toInt128(0))`,
2671
+ ]
2672
+ : [`f.block_num >= ${window.lo}`, `f.block_num <= ${window.hi}`];
2654
2673
  return tidx.fetch({
2655
2674
  chainId,
2656
2675
  engine: 'clickhouse',
@@ -2660,7 +2679,7 @@ async function getSwaps(c, options) {
2660
2679
  groupArray(tuple(f.log_idx, toString(f."orderId"), f.maker,
2661
2680
  toString(f."amountFilled"), f."partialFill")) AS fills
2662
2681
  FROM dex_fills f
2663
- WHERE ${[...where, `f.block_num >= ${window.lo}`, `f.block_num <= ${window.hi}`].join(' AND ')}
2682
+ WHERE ${[...where, ...windowFilters].join(' AND ')}
2664
2683
  GROUP BY f.block_num, f.tx_hash, f.taker
2665
2684
  ${having}
2666
2685
  ORDER BY block_num ${direction}, first_idx ${direction}
@@ -2707,20 +2726,17 @@ async function getSwaps(c, options) {
2707
2726
  ...new Set(groups.flatMap((group) => group.fills.map((fill) => fill.orderId))),
2708
2727
  ],
2709
2728
  }));
2710
- // Each fill's book quote: from a targeted `dex_pairs` lookup of this
2711
- // batch's bases when indexed, else the base token's on-chain
2712
- // `quoteToken()` — some books predate the indexer's `PairCreated`
2713
- // decode (genesis system books) and have no `dex_pairs` row.
2729
+ // Each fill's book quote comes back with its order state when indexed;
2730
+ // otherwise read the base token's on-chain `quoteToken()` — some books
2731
+ // predate the indexer's `PairCreated` decode (genesis system books).
2714
2732
  const bases = [
2715
2733
  ...new Set([...states.values()].flatMap((events) => events.map((event) => event.token))),
2716
2734
  ];
2717
- const pairs = await getPairsByBase(c, { bases, chainId });
2718
2735
  const quoteByBase = new Map();
2719
- for (const bookBase of bases) {
2720
- const indexed = pairs.get(bookBase);
2721
- if (indexed)
2722
- quoteByBase.set(bookBase, indexed.quote);
2723
- }
2736
+ for (const events of states.values())
2737
+ for (const event of events)
2738
+ if (event.quoteToken !== undefined)
2739
+ quoteByBase.set(event.token, event.quoteToken);
2724
2740
  const fallback = await Timing.time(c, 'swap_quotes', () => resolveBookQuotes(c, {
2725
2741
  bases: bases.filter((bookBase) => !quoteByBase.has(bookBase)),
2726
2742
  chainId,
@@ -2808,6 +2824,15 @@ async function getSwaps(c, options) {
2808
2824
  }
2809
2825
  : undefined;
2810
2826
  }
2827
+ // The newest unfiltered page can derive its 100k-block lower bound from
2828
+ // `blocks` inside the grouped query, avoiding a separate TIDX request.
2829
+ if (order === 'desc' &&
2830
+ cursorBlock === undefined &&
2831
+ fromBlock === undefined &&
2832
+ fromTimestamp === undefined &&
2833
+ toBlock === undefined &&
2834
+ toTimestamp === undefined)
2835
+ return { firstWindow: 'indexedHead', hi: Number.MAX_SAFE_INTEGER, lo: 0 };
2811
2836
  const result = await tidx.fetch({
2812
2837
  chainId,
2813
2838
  engine: 'clickhouse',
@@ -2831,7 +2856,8 @@ async function getSwaps(c, options) {
2831
2856
  const batchLimit = limit + 1;
2832
2857
  let activeCursor = cursor;
2833
2858
  // Selective scans jump to the next populated block through a bounded
2834
- // lookup. Unfiltered scans retain the fixed-stride min/max sweep.
2859
+ // lookup. Unfiltered scans retain the fixed-stride min/max sweep after
2860
+ // the newest page's indexed-head window.
2835
2861
  const windowFrom = async (anchor, knownMatchingBlock) => {
2836
2862
  if (order === 'desc') {
2837
2863
  const value = Math.min(upperBound, anchor ?? upperBound);
@@ -2846,12 +2872,18 @@ async function getSwaps(c, options) {
2846
2872
  ? { hi: Math.min(upperBound, lo + swapWindowBlocks - 1), lo }
2847
2873
  : undefined;
2848
2874
  };
2849
- let window = await windowFrom(cursorBlock, bounds.firstMatchingBlock);
2875
+ let window = bounds.firstWindow ?? (await windowFrom(cursorBlock, bounds.firstMatchingBlock));
2850
2876
  // Slide to the next disjoint window away from the newest block and reset
2851
2877
  // the cursor: every row in the next window is already past the cursor
2852
2878
  // anchor in the requested order, so no anchor refinement is needed.
2853
- const slideWindow = async () => {
2879
+ const slideWindow = async (indexedHeadAnchor) => {
2854
2880
  activeCursor = undefined;
2881
+ if (window === 'indexedHead') {
2882
+ const matchingBlock = await findMatchingBlock(indexedHeadAnchor);
2883
+ window =
2884
+ matchingBlock === undefined ? undefined : await windowFrom(matchingBlock, matchingBlock);
2885
+ return;
2886
+ }
2855
2887
  window =
2856
2888
  window === undefined
2857
2889
  ? undefined
@@ -2886,7 +2918,7 @@ async function getSwaps(c, options) {
2886
2918
  // A short batch exhausts this window; a full one may leave more groups
2887
2919
  // in it, so advance the keyset cursor and re-query the same window.
2888
2920
  if (!fetchedFull) {
2889
- await slideWindow();
2921
+ await slideWindow(order === 'desc' ? tail.blockNumber - 1 : tail.blockNumber + 1);
2890
2922
  continue;
2891
2923
  }
2892
2924
  const next = cursorAfterWholeGroup(tail);
@@ -2914,12 +2946,7 @@ async function getSwaps(c, options) {
2914
2946
  last.swap.fills[0].logIndex,
2915
2947
  ])
2916
2948
  : null;
2917
- const data = pageRows.map((candidate) => candidate.swap);
2918
- // Recover each swap's `mode` from transaction calldata — deferred to here
2919
- // so the candidate scan never pays the `txs` lookup for rows beyond the
2920
- // page. Best-effort: a failed lookup leaves `mode: null`.
2921
- await resolveSwapModes(c, { chainId, swaps: data });
2922
- return { data, nextCursor };
2949
+ return { data: pageRows.map((candidate) => candidate.swap), nextCursor };
2923
2950
  });
2924
2951
  }
2925
2952
  /**
@@ -2986,6 +3013,8 @@ function parseGroupRow(row) {
2986
3013
  * history compressed to the latest event (`argMax`, sentinel position
2987
3014
  * `(-1, -1)` so it sorts first) plus every raw in-page event, so an order
2988
3015
  * that flips between two of its page fills resolves each fill correctly.
3016
+ * The same query attaches each book's indexed quote token, avoiding a second
3017
+ * TIDX request; callers retain an RPC fallback for books absent from the index.
2989
3018
  * `logs` is sorted by `(address, selector, block_num, log_idx)` with a
2990
3019
  * `topic1` bloom index, so both halves are pruned range reads. Returned
2991
3020
  * per-order event lists are position-sorted.
@@ -3007,16 +3036,27 @@ export async function resolveOrderStates(c, options) {
3007
3036
  chainId,
3008
3037
  engine: 'clickhouse',
3009
3038
  query: `
3010
- SELECT topic1, argMax(topic3, (block_num, log_idx)) AS t3,
3011
- argMax(data, (block_num, log_idx)) AS payload,
3012
- toInt64(-1) AS bn, toInt32(-1) AS li
3013
- FROM logs
3014
- WHERE ${eventFilter} AND block_num < ${minBlock}
3015
- GROUP BY topic1
3016
- UNION ALL
3017
- SELECT topic1, topic3 AS t3, data AS payload, block_num AS bn, log_idx AS li
3018
- FROM logs
3019
- WHERE ${eventFilter} AND block_num >= ${minBlock} AND block_num <= ${maxBlock}
3039
+ WITH states AS (
3040
+ SELECT topic1, argMax(topic3, (block_num, log_idx)) AS t3,
3041
+ argMax(data, (block_num, log_idx)) AS payload,
3042
+ toInt64(-1) AS bn, toInt32(-1) AS li
3043
+ FROM logs
3044
+ WHERE ${eventFilter} AND block_num < ${minBlock}
3045
+ GROUP BY topic1
3046
+ UNION ALL
3047
+ SELECT topic1, topic3 AS t3, data AS payload, block_num AS bn, log_idx AS li
3048
+ FROM logs
3049
+ WHERE ${eventFilter} AND block_num >= ${minBlock} AND block_num <= ${maxBlock}
3050
+ )
3051
+ SELECT states.*, pairs.quote AS quote_token
3052
+ FROM states
3053
+ LEFT JOIN (
3054
+ -- Preserve the oldest-pair rule without sorting the complete table.
3055
+ SELECT base, argMin(quote, (block_num, log_idx)) AS quote
3056
+ FROM dex_pairs
3057
+ WHERE address = '${stablecoinDex}'
3058
+ GROUP BY base
3059
+ ) AS pairs ON pairs.base = concat('0x', lower(substring(states.t3, 27)))
3020
3060
  `,
3021
3061
  });
3022
3062
  for (const row of result.rows) {
@@ -3045,6 +3085,7 @@ function parseStateRow(row) {
3045
3085
  const payload = Value.toText(row['payload']);
3046
3086
  const blockNumber = Value.toNumber(row['bn']);
3047
3087
  const logIndex = Value.toNumber(row['li']);
3088
+ const quoteToken = Schema.TokenAddress.safeParse(row['quote_token']);
3048
3089
  if (topic1 === undefined ||
3049
3090
  !/^0x[0-9a-fA-F]{64}$/.test(topic1) ||
3050
3091
  topic3 === undefined ||
@@ -3064,6 +3105,7 @@ function parseStateRow(row) {
3064
3105
  blockNumber,
3065
3106
  isBid,
3066
3107
  logIndex,
3108
+ ...(quoteToken.success ? { quoteToken: quoteToken.data } : {}),
3067
3109
  tick,
3068
3110
  token: `0x${topic3.slice(26).toLowerCase()}`,
3069
3111
  },
@@ -3493,15 +3535,10 @@ const orderScanCap = 5000;
3493
3535
  const globalOrderScanCap = 2000;
3494
3536
  /**
3495
3537
  * Batch size for `OrderCancelled` / `OrderFilled` `WHERE "orderId" IN (...)`
3496
- * lookups. ClickHouse evaluates the IN-list against the `topic1` bloom-filter
3497
- * index after the TIDX pushdown rewrite re-encodes each literal (see
3498
- * `tempoxyz/ak47` commit `273d88d`); very large lists still inflate SQL parse
3499
- * cost, but each batch is also an independent transient-error round trip, so
3500
- * 1000 balances parse cost against keeping the batch count (and thus the
3501
- * failure surface) low — a typical pair snapshot still resolves in one trip and
3502
- * the capped global feed in ~two.
3538
+ * lookups. A 2000-ID batch uses indexed state paths while native fill
3539
+ * aggregation keeps the response below SQL and result limits.
3503
3540
  */
3504
- const orderInBatchSize = 1000;
3541
+ const orderInBatchSize = 2000;
3505
3542
  /**
3506
3543
  * Signed-int16 bias used to encode `tick` in the cursor as a non-negative
3507
3544
  * uint string. `Cursor.Field === 'int'` is non-negative-only, so signed ticks
@@ -3518,8 +3555,8 @@ const orderCursorTickBias = 32768;
3518
3555
  * when scoped (string column with a bloom-filter index on `topic1`), and the
3519
3556
  * fill / cancellation joins use `WHERE "orderId" IN (...)` against the same
3520
3557
  * index. The decoded `tick` column has no ClickHouse index, so tick sort is
3521
- * still applied app-side. Aggregation also runs in the app because
3522
- * indexer-side `SUM(...)` over decoded columns is currently unreliable.
3558
+ * still applied app-side. ClickHouse aggregates fills per order before the
3559
+ * app computes each remaining amount.
3523
3560
  *
3524
3561
  * `remaining = OrderPlaced.amount - sum(OrderFilled.amountFilled)`; orders
3525
3562
  * with an `OrderCancelled` event are excluded outright. Each row is annotated
@@ -3989,7 +4026,7 @@ async function fetchCancelledByIds(c, options) {
3989
4026
  query: `
3990
4027
  SELECT "orderId"
3991
4028
  FROM OrderCancelled
3992
- WHERE "orderId" IN (${batch.join(', ')})
4029
+ WHERE address = '${stablecoinDex}' AND "orderId" IN (${batch.join(', ')})
3993
4030
  `,
3994
4031
  signatures: [orderCancelledSignature],
3995
4032
  });
@@ -4002,10 +4039,9 @@ async function fetchCancelledByIds(c, options) {
4002
4039
  return cancelled;
4003
4040
  }
4004
4041
  /**
4005
- * Sums `amountFilled` per `orderId` across all matching `OrderFilled` rows in
4006
- * the snapshot window via batched `WHERE "orderId" IN (...)` queries. Each
4007
- * placement may have many partial fills, so the loader sums them in the app
4008
- * (indexer-side `SUM(...)` over decoded columns is currently unreliable).
4042
+ * Sums `amountFilled` per `orderId` across all matching native `dex_fills`
4043
+ * rows in the snapshot window via batched `WHERE "orderId" IN (...)` queries.
4044
+ * Native aggregation bounds results, and stringification preserves UInt256 precision through JSON parsing.
4009
4045
  */
4010
4046
  async function fetchFillSumsByIds(c, options) {
4011
4047
  const { chainId, orderIds } = options;
@@ -4021,18 +4057,20 @@ async function fetchFillSumsByIds(c, options) {
4021
4057
  const result = await tidx.fetch({
4022
4058
  chainId,
4023
4059
  engine: 'clickhouse',
4060
+ // Dynamic order IDs prevent signature-backed row inference; each aggregate is validated below before use.
4024
4061
  query: `
4025
- SELECT "orderId", "amountFilled"
4062
+ SELECT "orderId", toString(sum("amountFilled")) AS amount_filled
4026
4063
  FROM dex_fills
4027
- WHERE "orderId" IN (${batch.join(', ')})
4064
+ WHERE address = '${stablecoinDex}' AND "orderId" IN (${batch.join(', ')})
4065
+ GROUP BY "orderId"
4028
4066
  `,
4029
4067
  });
4030
4068
  for (const row of result.rows) {
4031
4069
  const id = Value.toIntegerString(row['orderId']);
4032
- const filled = Value.toIntegerString(row['amountFilled']);
4070
+ const filled = Value.toIntegerString(row['amount_filled']);
4033
4071
  if (id === undefined || filled === undefined)
4034
4072
  continue;
4035
- sums.set(id, (sums.get(id) ?? 0n) + BigInt(filled));
4073
+ sums.set(id, BigInt(filled));
4036
4074
  }
4037
4075
  }
4038
4076
  return sums;