web3-tools-mcp 2.0.2 → 3.0.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 (162) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/README.md +5 -0
  3. package/dist/anvil.d.ts +17 -19
  4. package/dist/anvil.d.ts.map +1 -1
  5. package/dist/anvil.js +124 -228
  6. package/dist/anvil.js.map +1 -1
  7. package/dist/chains.d.ts +9 -1
  8. package/dist/chains.d.ts.map +1 -1
  9. package/dist/chains.js +11 -2
  10. package/dist/chains.js.map +1 -1
  11. package/dist/client.d.ts.map +1 -1
  12. package/dist/client.js.map +1 -1
  13. package/dist/context.d.ts +22 -0
  14. package/dist/context.d.ts.map +1 -0
  15. package/dist/context.js +24 -0
  16. package/dist/context.js.map +1 -0
  17. package/dist/hosted.d.ts +12 -0
  18. package/dist/hosted.d.ts.map +1 -0
  19. package/dist/hosted.js +12 -0
  20. package/dist/hosted.js.map +1 -0
  21. package/dist/http-server.d.ts +13 -0
  22. package/dist/http-server.d.ts.map +1 -1
  23. package/dist/http-server.js +13 -4
  24. package/dist/http-server.js.map +1 -1
  25. package/dist/index.js +15 -11
  26. package/dist/index.js.map +1 -1
  27. package/dist/lib.d.ts +24 -0
  28. package/dist/lib.d.ts.map +1 -0
  29. package/dist/lib.js +23 -0
  30. package/dist/lib.js.map +1 -0
  31. package/dist/mcp-server.d.ts +4 -0
  32. package/dist/mcp-server.d.ts.map +1 -0
  33. package/dist/mcp-server.js +43 -0
  34. package/dist/mcp-server.js.map +1 -0
  35. package/dist/oauth.d.ts +41 -6
  36. package/dist/oauth.d.ts.map +1 -1
  37. package/dist/oauth.js +75 -41
  38. package/dist/oauth.js.map +1 -1
  39. package/dist/preview.d.ts +7 -0
  40. package/dist/preview.d.ts.map +1 -1
  41. package/dist/preview.js +14 -2
  42. package/dist/preview.js.map +1 -1
  43. package/dist/signing-requests.d.ts +81 -0
  44. package/dist/signing-requests.d.ts.map +1 -0
  45. package/dist/signing-requests.js +138 -0
  46. package/dist/signing-requests.js.map +1 -0
  47. package/dist/tools/index.d.ts +27 -1
  48. package/dist/tools/index.d.ts.map +1 -1
  49. package/dist/tools/index.js +37 -15
  50. package/dist/tools/index.js.map +1 -1
  51. package/dist/tools/{advanced.d.ts → read/advanced.d.ts} +30 -26
  52. package/dist/tools/read/advanced.d.ts.map +1 -0
  53. package/dist/tools/{advanced.js → read/advanced.js} +10 -10
  54. package/dist/tools/read/advanced.js.map +1 -0
  55. package/dist/tools/{balance.d.ts → read/balance.d.ts} +8 -7
  56. package/dist/tools/read/balance.d.ts.map +1 -0
  57. package/dist/tools/{balance.js → read/balance.js} +2 -2
  58. package/dist/tools/read/balance.js.map +1 -0
  59. package/dist/tools/{contract-info.d.ts → read/contract-info.d.ts} +18 -15
  60. package/dist/tools/read/contract-info.d.ts.map +1 -0
  61. package/dist/tools/{contract-info.js → read/contract-info.js} +2 -2
  62. package/dist/tools/read/contract-info.js.map +1 -0
  63. package/dist/tools/{contract.d.ts → read/contract.d.ts} +14 -12
  64. package/dist/tools/read/contract.d.ts.map +1 -0
  65. package/dist/tools/{contract.js → read/contract.js} +2 -2
  66. package/dist/tools/read/contract.js.map +1 -0
  67. package/dist/tools/{ens.d.ts → read/ens.d.ts} +30 -25
  68. package/dist/tools/read/ens.d.ts.map +1 -0
  69. package/dist/tools/{ens.js → read/ens.js} +2 -2
  70. package/dist/tools/read/ens.js.map +1 -0
  71. package/dist/tools/read/gas.d.ts +171 -0
  72. package/dist/tools/read/gas.d.ts.map +1 -0
  73. package/dist/tools/read/gas.js +368 -0
  74. package/dist/tools/read/gas.js.map +1 -0
  75. package/dist/tools/{logs.d.ts → read/logs.d.ts} +6 -5
  76. package/dist/tools/read/logs.d.ts.map +1 -0
  77. package/dist/tools/{logs.js → read/logs.js} +2 -2
  78. package/dist/tools/read/logs.js.map +1 -0
  79. package/dist/tools/{signatures.d.ts → read/signatures.d.ts} +8 -4
  80. package/dist/tools/read/signatures.d.ts.map +1 -0
  81. package/dist/tools/{signatures.js → read/signatures.js} +1 -1
  82. package/dist/tools/read/signatures.js.map +1 -0
  83. package/dist/tools/read/signing.d.ts +27 -0
  84. package/dist/tools/read/signing.d.ts.map +1 -0
  85. package/dist/tools/read/signing.js +75 -0
  86. package/dist/tools/read/signing.js.map +1 -0
  87. package/dist/tools/sign/errors.d.ts +9 -0
  88. package/dist/tools/sign/errors.d.ts.map +1 -0
  89. package/dist/tools/sign/errors.js +29 -0
  90. package/dist/tools/sign/errors.js.map +1 -0
  91. package/dist/tools/{transactions.d.ts → sign/transactions.d.ts} +48 -62
  92. package/dist/tools/sign/transactions.d.ts.map +1 -0
  93. package/dist/tools/sign/transactions.js +316 -0
  94. package/dist/tools/sign/transactions.js.map +1 -0
  95. package/dist/tools/sign/wallet.d.ts +50 -0
  96. package/dist/tools/sign/wallet.d.ts.map +1 -0
  97. package/dist/tools/sign/wallet.js +180 -0
  98. package/dist/tools/sign/wallet.js.map +1 -0
  99. package/dist/utils.d.ts +5 -2
  100. package/dist/utils.d.ts.map +1 -1
  101. package/dist/utils.js +5 -2
  102. package/dist/utils.js.map +1 -1
  103. package/dist/wallet-client.d.ts +33 -4
  104. package/dist/wallet-client.d.ts.map +1 -1
  105. package/dist/wallet-client.js +90 -24
  106. package/dist/wallet-client.js.map +1 -1
  107. package/dist/walletconnect.d.ts +100 -13
  108. package/dist/walletconnect.d.ts.map +1 -1
  109. package/dist/walletconnect.js +215 -50
  110. package/dist/walletconnect.js.map +1 -1
  111. package/package.json +10 -4
  112. package/src/anvil.ts +150 -271
  113. package/src/chains.ts +14 -2
  114. package/src/client.ts +0 -1
  115. package/src/context.ts +27 -0
  116. package/src/hosted.ts +11 -0
  117. package/src/http-server.ts +30 -5
  118. package/src/index.ts +15 -12
  119. package/src/lib.ts +24 -0
  120. package/src/mcp-server.ts +47 -0
  121. package/src/oauth.ts +98 -45
  122. package/src/preview.ts +21 -2
  123. package/src/signing-requests.ts +198 -0
  124. package/src/tools/index.ts +67 -16
  125. package/src/tools/{advanced.ts → read/advanced.ts} +13 -11
  126. package/src/tools/{balance.ts → read/balance.ts} +3 -3
  127. package/src/tools/{contract-info.ts → read/contract-info.ts} +3 -3
  128. package/src/tools/{contract.ts → read/contract.ts} +3 -3
  129. package/src/tools/{ens.ts → read/ens.ts} +3 -3
  130. package/src/tools/read/gas.ts +480 -0
  131. package/src/tools/{logs.ts → read/logs.ts} +3 -3
  132. package/src/tools/{signatures.ts → read/signatures.ts} +2 -2
  133. package/src/tools/read/signing.ts +86 -0
  134. package/src/tools/sign/errors.ts +28 -0
  135. package/src/tools/sign/transactions.ts +428 -0
  136. package/src/tools/sign/wallet.ts +216 -0
  137. package/src/utils.ts +5 -2
  138. package/src/wallet-client.ts +91 -22
  139. package/src/walletconnect.ts +250 -48
  140. package/dist/tools/advanced.d.ts.map +0 -1
  141. package/dist/tools/advanced.js.map +0 -1
  142. package/dist/tools/balance.d.ts.map +0 -1
  143. package/dist/tools/balance.js.map +0 -1
  144. package/dist/tools/contract-info.d.ts.map +0 -1
  145. package/dist/tools/contract-info.js.map +0 -1
  146. package/dist/tools/contract.d.ts.map +0 -1
  147. package/dist/tools/contract.js.map +0 -1
  148. package/dist/tools/ens.d.ts.map +0 -1
  149. package/dist/tools/ens.js.map +0 -1
  150. package/dist/tools/gas.d.ts +0 -99
  151. package/dist/tools/gas.d.ts.map +0 -1
  152. package/dist/tools/gas.js +0 -181
  153. package/dist/tools/gas.js.map +0 -1
  154. package/dist/tools/logs.d.ts.map +0 -1
  155. package/dist/tools/logs.js.map +0 -1
  156. package/dist/tools/signatures.d.ts.map +0 -1
  157. package/dist/tools/signatures.js.map +0 -1
  158. package/dist/tools/transactions.d.ts.map +0 -1
  159. package/dist/tools/transactions.js +0 -365
  160. package/dist/tools/transactions.js.map +0 -1
  161. package/src/tools/gas.ts +0 -219
  162. package/src/tools/transactions.ts +0 -456
package/dist/chains.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { arbitrum, avalanche, base, bsc, gnosis, linea, localhost, mainnet, optimism, polygon, sonic, unichain, zksync } from 'viem/chains';
2
+ import { HOSTED } from './hosted.js';
2
3
  const TABLE = {
3
4
  mainnet: {
4
5
  chain: mainnet,
@@ -103,6 +104,14 @@ const TABLE = {
103
104
  // Widened: `as const` above is only there to infer ChainName from the keys, and reading a
104
105
  // literal entry would otherwise lose the fields that not every chain sets.
105
106
  export const CHAINS = TABLE;
106
- /** Tuple rather than array, because `z.enum` needs a non-empty literal list. */
107
- export const SUPPORTED_CHAINS = Object.keys(CHAINS);
107
+ /**
108
+ * Chains the tools will accept.
109
+ *
110
+ * `localhost` is dropped when hosted. It resolves to the machine running the server, so on
111
+ * a shared host it is not the caller's dev node — it is a way to aim requests at whatever
112
+ * that host has listening on its own loopback.
113
+ *
114
+ * Tuple rather than array, because `z.enum` needs a non-empty literal list.
115
+ */
116
+ export const SUPPORTED_CHAINS = (HOSTED ? Object.keys(CHAINS).filter((name) => name !== 'localhost') : Object.keys(CHAINS));
108
117
  //# sourceMappingURL=chains.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chains.js","sourceRoot":"","sources":["../src/chains.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chains.js","sourceRoot":"","sources":["../src/chains.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAQ,MAAM,MAAM,CAAA;AAC/C,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAa9C,6FAA6F;AAC7F,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEzD,qBAAa,aAAa;IAGZ,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,OAAO,CAAqC;gBAEhC,MAAM,EAAE,MAAM;IAElC,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY;IAc7C,SAAS,IAAI,MAAM;IAInB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAIvC,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAIxC,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAIzD,yEAAyE;IACzE,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,SAAK,GAAG,MAAM,GAAG,SAAS;CAIjE;AAID,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAGrE;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAQ,MAAM,MAAM,CAAA;AAC/C,OAAO,EAAU,KAAK,SAAS,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAa9C,6FAA6F;AAC7F,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEzD,qBAAa,aAAa;IAGZ,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,OAAO,CAAqC;gBAEhC,MAAM,EAAE,MAAM;IAElC,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,YAAY;IAc7C,SAAS,IAAI,MAAM;IAInB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAGvC,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAIxC,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAIzD,yEAAyE;IACzE,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,SAAK,GAAG,MAAM,GAAG,SAAS;CAIjE;AAID,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAGrE;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAA;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,6FAA6F;AAC7F,SAAS,SAAS,CAAC,SAAoB,EAAE,MAAc;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IACvD,IAAI,OAAO,IAAI,MAAM,CAAC,aAAa;QAAE,OAAO,WAAW,OAAO,qBAAqB,MAAM,CAAC,aAAa,EAAE,CAAA;IACzG,IAAI,MAAM,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO,WAAW,MAAM,iBAAiB,MAAM,CAAC,YAAY,EAAE,CAAA;IACjG,OAAO,QAAQ,CAAA;AACjB,CAAC;AAKD,MAAM,OAAO,aAAa;IAGJ;IAFZ,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAA;IAEpD,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEtC,SAAS,CAAC,SAAoB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC1C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,yFAAyF;QACzF,MAAM,MAAM,GAAG,kBAAkB,CAAC;YAChC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK;YAC9B,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;SAC3C,CAAiB,CAAA;QAElB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACnC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,SAAS,CAAC,SAAoB;QAC5B,OAAO,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1C,CAAC;IAED,UAAU,CAAC,SAAoB;QAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,CAAA;IACnC,CAAC;IAED,eAAe,CAAC,SAAoB;QAClC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAA;IACpC,CAAC;IAED,yEAAyE;IACzE,WAAW,CAAC,SAAoB,EAAE,IAAI,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAA;QACzC,OAAO,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACxD,CAAC;CACF;AAED,IAAI,aAAa,GAAyB,IAAI,CAAA;AAE9C,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;IACzC,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAkB,MAAM,aAAa,CAAA;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,6FAA6F;AAC7F,SAAS,SAAS,CAAC,SAAoB,EAAE,MAAc;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,CAAA;IAChD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IAEzB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IACvD,IAAI,OAAO,IAAI,MAAM,CAAC,aAAa;QAAE,OAAO,WAAW,OAAO,qBAAqB,MAAM,CAAC,aAAa,EAAE,CAAA;IACzG,IAAI,MAAM,IAAI,MAAM,CAAC,YAAY;QAAE,OAAO,WAAW,MAAM,iBAAiB,MAAM,CAAC,YAAY,EAAE,CAAA;IACjG,OAAO,QAAQ,CAAA;AACjB,CAAC;AAKD,MAAM,OAAO,aAAa;IAGJ;IAFZ,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAA;IAEpD,YAAoB,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAEtC,SAAS,CAAC,SAAoB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC1C,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,yFAAyF;QACzF,MAAM,MAAM,GAAG,kBAAkB,CAAC;YAChC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK;YAC9B,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;SAC3C,CAAiB,CAAA;QAElB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;QACnC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,SAAS,CAAC,SAAoB;QAC5B,OAAO,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1C,CAAC;IACD,UAAU,CAAC,SAAoB;QAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,CAAA;IACnC,CAAC;IAED,eAAe,CAAC,SAAoB;QAClC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAA;IACpC,CAAC;IAED,yEAAyE;IACzE,WAAW,CAAC,SAAoB,EAAE,IAAI,GAAG,EAAE;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAA;QACzC,OAAO,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;IACxD,CAAC;CACF;AAED,IAAI,aAAa,GAAyB,IAAI,CAAA;AAE9C,MAAM,UAAU,uBAAuB,CAAC,MAAc;IACpD,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAA;IACzC,OAAO,aAAa,CAAA;AACtB,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,aAAa,CAAA;AACtB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
2
+ /**
3
+ * Who a tool call is acting for.
4
+ *
5
+ * A hosted server can carry several people, and signing must never cross between them: a
6
+ * transaction belongs to the person whose agent asked for it and reaches only their wallet.
7
+ *
8
+ * Passed explicitly from the tool wrapper down to whatever looks up a signer. Ambient
9
+ * storage would read better at the call sites and fail worse: a context lost across some
10
+ * later boundary would silently fall back to the shared identity, which is the same
11
+ * cross-tenant delivery the room boundary exists to prevent — and it would not show up in
12
+ * a test, because tests run inside the context.
13
+ */
14
+ /** Every self-hosted run, and every call arriving without an authenticated identity. */
15
+ export declare const DEFAULT_IDENTITY = "default";
16
+ /**
17
+ * The identity an authenticated request belongs to. Hosted multi-tenancy is what fills
18
+ * this in; a single-credential server authenticates the deployment, not a person, so
19
+ * everyone on it is the same user.
20
+ */
21
+ export declare function identityFrom(authInfo?: AuthInfo): string;
22
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAA;AAE9E;;;;;;;;;;;GAWG;AAEH,wFAAwF;AACxF,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAGxD"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Who a tool call is acting for.
3
+ *
4
+ * A hosted server can carry several people, and signing must never cross between them: a
5
+ * transaction belongs to the person whose agent asked for it and reaches only their wallet.
6
+ *
7
+ * Passed explicitly from the tool wrapper down to whatever looks up a signer. Ambient
8
+ * storage would read better at the call sites and fail worse: a context lost across some
9
+ * later boundary would silently fall back to the shared identity, which is the same
10
+ * cross-tenant delivery the room boundary exists to prevent — and it would not show up in
11
+ * a test, because tests run inside the context.
12
+ */
13
+ /** Every self-hosted run, and every call arriving without an authenticated identity. */
14
+ export const DEFAULT_IDENTITY = 'default';
15
+ /**
16
+ * The identity an authenticated request belongs to. Hosted multi-tenancy is what fills
17
+ * this in; a single-credential server authenticates the deployment, not a person, so
18
+ * everyone on it is the same user.
19
+ */
20
+ export function identityFrom(authInfo) {
21
+ const address = authInfo?.extra?.address;
22
+ return typeof address === 'string' && address ? address : DEFAULT_IDENTITY;
23
+ }
24
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AAEH,wFAAwF;AACxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAA;AAEzC;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,QAAmB;IAC9C,MAAM,OAAO,GAAG,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAA;IACxC,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAA;AAC5E,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Whether this process serves other people over HTTP, rather than one person on their own
3
+ * machine over stdio. It decides what a caller may reach: `localhost` as a chain, a tracing
4
+ * node on loopback, a browser to open. Every module that guards one of those reads it here.
5
+ *
6
+ * An environment variable rather than an argument, because the chain list is baked into the
7
+ * tool schemas as they are defined — so the answer has to exist before this package is
8
+ * imported, not when a server is started. The CLI sets MCP_HTTP_PORT; a host assembling its
9
+ * own server sets MCP_HOSTED=1, and startHttpServer refuses to run without one of them.
10
+ */
11
+ export declare const HOSTED: boolean;
12
+ //# sourceMappingURL=hosted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted.d.ts","sourceRoot":"","sources":["../src/hosted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,SAA+D,CAAA"}
package/dist/hosted.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Whether this process serves other people over HTTP, rather than one person on their own
3
+ * machine over stdio. It decides what a caller may reach: `localhost` as a chain, a tracing
4
+ * node on loopback, a browser to open. Every module that guards one of those reads it here.
5
+ *
6
+ * An environment variable rather than an argument, because the chain list is baked into the
7
+ * tool schemas as they are defined — so the answer has to exist before this package is
8
+ * imported, not when a server is started. The CLI sets MCP_HTTP_PORT; a host assembling its
9
+ * own server sets MCP_HOSTED=1, and startHttpServer refuses to run without one of them.
10
+ */
11
+ export const HOSTED = Boolean(process.env.MCP_HTTP_PORT || process.env.MCP_HOSTED);
12
+ //# sourceMappingURL=hosted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hosted.js","sourceRoot":"","sources":["../src/hosted.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA"}
@@ -1,4 +1,6 @@
1
+ import type { OAuthServerProvider } from '@modelcontextprotocol/sdk/server/auth/provider.js';
1
2
  import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { type Express } from 'express';
2
4
  import type { WalletRelay } from 'web3-wallet-relay';
3
5
  export interface HttpServerOptions {
4
6
  port?: number;
@@ -9,6 +11,17 @@ export interface HttpServerOptions {
9
11
  /** Serve the signing page on this same server, so browser signing works when hosted. */
10
12
  walletRelay?: WalletRelay;
11
13
  createMcpServer: () => McpServer;
14
+ /**
15
+ * Who may connect, and as whom.
16
+ *
17
+ * The default authenticates the deployment rather than a person: one token, shared. A
18
+ * host serving several people supplies its own — logging them in however it likes, and
19
+ * putting the identity in the issued token's `extra`, which is where the tools read it
20
+ * from. `MCP_TOKEN` is then no longer required.
21
+ */
22
+ provider?: OAuthServerProvider;
23
+ /** A host's own routes, mounted before the signing page claims whatever is left at the root. */
24
+ routes?: (app: Express) => void;
12
25
  }
13
26
  export declare function startHttpServer(options: HttpServerOptions): Promise<{
14
27
  url: string;
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAGxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAmBpD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wFAAwF;IACxF,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,eAAe,EAAE,MAAM,SAAS,CAAA;CACjC;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAiF5H"}
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAA;AAE5F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAExE,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAoBpD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wFAAwF;IACxF,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,eAAe,EAAE,MAAM,SAAS,CAAA;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,mBAAmB,CAAA;IAC9B,gGAAgG;IAChG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CAChC;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6F5H"}
@@ -2,6 +2,7 @@ import { requireBearerAuth } from '@modelcontextprotocol/sdk/server/auth/middlew
2
2
  import { getOAuthProtectedResourceMetadataUrl, mcpAuthRouter } from '@modelcontextprotocol/sdk/server/auth/router.js';
3
3
  import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
4
4
  import express from 'express';
5
+ import { HOSTED } from './hosted.js';
5
6
  import { SingleUserOAuthProvider } from './oauth.js';
6
7
  /**
7
8
  * Serve the MCP over HTTP instead of stdio, so the server can live somewhere other than the
@@ -18,17 +19,24 @@ import { SingleUserOAuthProvider } from './oauth.js';
18
19
  */
19
20
  const DEFAULT_PORT = 3457;
20
21
  export async function startHttpServer(options) {
22
+ // The guards a shared host needs — no `localhost` chain, no loopback tracing node, no
23
+ // browser opened on the server — were decided when the package loaded, and cannot be
24
+ // switched on from here.
25
+ if (!HOSTED) {
26
+ throw new Error('Serving over HTTP needs MCP_HOSTED=1 (or MCP_HTTP_PORT) in the environment before web3-tools-mcp is imported');
27
+ }
21
28
  const port = options.port ?? Number(process.env.MCP_HTTP_PORT) ?? DEFAULT_PORT;
22
29
  const host = options.host ?? process.env.MCP_HTTP_HOST ?? '0.0.0.0';
23
30
  const token = options.token ?? process.env.MCP_TOKEN;
24
31
  // A reachable MCP server with a paired phone can push signing prompts at that phone. It
25
- // never runs without a token.
26
- if (!token) {
32
+ // never runs unauthenticated — either a host brought its own way to log people in, or
33
+ // there is a token.
34
+ if (!options.provider && !token) {
27
35
  throw new Error('MCP_TOKEN is required to serve MCP over HTTP — anyone reaching the URL could request signatures');
28
36
  }
29
37
  const publicUrl = options.publicUrl ?? process.env.MCP_PUBLIC_URL ?? `http://localhost:${port}`;
30
38
  const issuer = new URL(publicUrl);
31
- const provider = new SingleUserOAuthProvider(token);
39
+ const provider = options.provider ?? new SingleUserOAuthProvider(token);
32
40
  const app = express();
33
41
  app.use(express.json());
34
42
  // The login form posts a token, so the authorize route needs form bodies too.
@@ -53,6 +61,7 @@ export async function startHttpServer(options) {
53
61
  verifier: provider,
54
62
  resourceMetadataUrl: getOAuthProtectedResourceMetadataUrl(new URL('/mcp', issuer))
55
63
  });
64
+ options.routes?.(app);
56
65
  app.all('/mcp', authenticate, async (req, res) => {
57
66
  const mcp = options.createMcpServer();
58
67
  const transport = new StreamableHTTPServerTransport({ sessionIdGenerator: undefined, enableJsonResponse: true });
@@ -82,7 +91,7 @@ export async function startHttpServer(options) {
82
91
  let walletUrl;
83
92
  if (options.walletRelay) {
84
93
  options.walletRelay.attach(server, (relayApp) => app.use(relayApp));
85
- walletUrl = `${publicUrl.replace(/\/$/, '')}/#t=${options.walletRelay.token}`;
94
+ walletUrl = `${publicUrl.replace(/\/$/, '')}/#t=${options.walletRelay.signerToken}`;
86
95
  }
87
96
  return { url: `${publicUrl.replace(/\/$/, '')}/mcp`, port: server.address().port, walletUrl };
88
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
3
  import { WalletRelay } from 'web3-wallet-relay';
5
4
  import packageJson from '../package.json' with { type: 'json' };
6
5
  import { initializeClientManager, SUPPORTED_CHAINS } from './client.js';
6
+ import { DEFAULT_IDENTITY } from './context.js';
7
7
  import { startHttpServer } from './http-server.js';
8
8
  import { attachLogServer } from './log.js';
9
- import { registerAllTools } from './tools/index.js';
9
+ import { createMcpServer } from './mcp-server.js';
10
10
  import { parseCommandLineArgs } from './utils.js';
11
- import { getWalletClient } from './wallet-client.js';
11
+ import { allWalletClients, configureWalletRelay, getWalletClient } from './wallet-client.js';
12
12
  // Parse configuration
13
13
  const config = parseCommandLineArgs();
14
14
  // Show help if requested
@@ -39,12 +39,15 @@ ENVIRONMENT VARIABLES:
39
39
  WALLETCONNECT_PROJECT_ID Alternative to --walletconnect-project-id
40
40
  CUSTOM_RPC Alternative to --custom-rpc
41
41
  MCP_HTTP_PORT Serve MCP over HTTP on this port instead of stdio
42
+ MCP_HOSTED Apply the hosted guards without the CLI (library use)
42
43
  MCP_TOKEN Bearer token required by the HTTP transport
43
44
  MCP_PUBLIC_URL Public URL of this server, advertised in OAuth metadata
44
45
  UPSTASH_REDIS_REST_URL Keep WalletConnect sessions in Redis, not on disk
45
46
  UPSTASH_REDIS_REST_TOKEN
46
47
  WALLET_SERVER_URL URL of a hosted wallet relay (omit to run one locally)
47
- WALLET_TOKEN Shared pairing token for the wallet relay
48
+ WALLET_TOKEN Secret the wallet relay signs its room tokens with
49
+ ANVIL_RPC_URL Node exposing debug_traceCall (default: 127.0.0.1:8545)
50
+ ANVIL_ALLOW_RESET Let tracing re-fork that node, clearing its state
48
51
 
49
52
  SUPPORTED CHAINS:
50
53
  ${SUPPORTED_CHAINS.join(', ')}
@@ -86,11 +89,6 @@ if (config.customRpcUrls) {
86
89
  }
87
90
  // Initialize client manager
88
91
  initializeClientManager(config);
89
- function createMcpServer() {
90
- const server = new McpServer({ name: 'web3-tools-mcp', version: packageJson.version }, { capabilities: { logging: {} } });
91
- registerAllTools(server);
92
- return server;
93
- }
94
92
  const httpMode = Boolean(process.env.MCP_HTTP_PORT);
95
93
  const httpPort = Number(process.env.MCP_HTTP_PORT);
96
94
  /**
@@ -105,7 +103,13 @@ const httpPort = Number(process.env.MCP_HTTP_PORT);
105
103
  const hostedRelay = httpMode
106
104
  ? new WalletRelay({ token: process.env.WALLET_TOKEN, publicUrl: process.env.MCP_PUBLIC_URL })
107
105
  : undefined;
108
- const wallet = getWalletClient(hostedRelay ? { port: httpPort, token: hostedRelay.token } : undefined);
106
+ // Hosted, the relay is this process's own, on the platform's port. Set before any client
107
+ // is made, so every identity's client reaches that one rather than starting its own.
108
+ if (hostedRelay)
109
+ configureWalletRelay({ port: httpPort, token: hostedRelay.token });
110
+ // Outside any tool call, so this is the shared identity — the only one a self-hosted
111
+ // server ever has, and the one a hosted server uses before anybody has authenticated.
112
+ const wallet = getWalletClient(DEFAULT_IDENTITY);
109
113
  // Hosted, the relay is attached to the HTTP server, so connect only once that is listening.
110
114
  const walletReady = httpMode
111
115
  ? Promise.resolve()
@@ -121,7 +125,7 @@ async function shutdown(reason) {
121
125
  return;
122
126
  shuttingDown = true;
123
127
  console.error(`[MCP] Shutting down (${reason})`);
124
- await wallet.stop().catch(() => { });
128
+ await Promise.all(allWalletClients().map((client) => client.stop().catch(() => { })));
125
129
  process.exit(0);
126
130
  }
127
131
  process.stdin.on('end', () => shutdown('client disconnected'));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAE5F,sBAAsB;AACtB,MAAM,MAAM,GAAG,oBAAoB,EAAE,CAAA;AAErC,yBAAyB;AACzB,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC;yBACW,WAAW,CAAC,OAAO;EAC1C,WAAW,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAmCrB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;;YAcnB,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAClE,WAAW,CAAC,IAAI,CAAC,GAAG;;;CAG/B,CAAC,CAAA;IACA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,yBAAyB;AACzB,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;AACrD,CAAC;AACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;AACnD,CAAC;AACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAA;AAClD,CAAC;AACD,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAA;AACtF,CAAC;AACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;AAC5E,CAAC;AAED,4BAA4B;AAC5B,uBAAuB,CAAC,MAAM,CAAC,CAAA;AAE/B,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;AAElD;;;;;;;;GAQG;AACH,MAAM,WAAW,GAAG,QAAQ;IAC1B,CAAC,CAAC,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;IAC7F,CAAC,CAAC,SAAS,CAAA;AAEb,yFAAyF;AACzF,qFAAqF;AACrF,IAAI,WAAW;IAAE,oBAAoB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAA;AAEnF,qFAAqF;AACrF,sFAAsF;AACtF,MAAM,MAAM,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAA;AAEhD,4FAA4F;AAC5F,MAAM,WAAW,GAAG,QAAQ;IAC1B,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;IACnB,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAC/D,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC3E,CAAC,CAAC,CAAA;AAEN,wFAAwF;AACxF,6FAA6F;AAC7F,IAAI,YAAY,GAAG,KAAK,CAAA;AACxB,KAAK,UAAU,QAAQ,CAAC,MAAc;IACpC,IAAI,YAAY;QAAE,OAAM;IACxB,YAAY,GAAG,IAAI,CAAA;IACnB,OAAO,CAAC,KAAK,CAAC,wBAAwB,MAAM,GAAG,CAAC,CAAA;IAChD,MAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAA;AAC9D,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAA;AAChE,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;AAChD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAA;AAE9C,eAAe;AACf,KAAK,UAAU,IAAI;IACjB,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,MAAM,eAAe,CAAC,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAA;QAC/F,OAAO,CAAC,KAAK,CAAC,sCAAsC,GAAG,EAAE,CAAC,CAAA;QAE1D,qFAAqF;QACrF,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACrC,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;QACF,IAAI,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,iCAAiC,SAAS,EAAE,CAAC,CAAA;QAE1E,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAA;QAClG,CAAC;QACD,OAAM;IACR,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,GAAG,eAAe,EAAE,CAAA;IAChC,eAAe,CAAC,MAAM,CAAC,CAAA;IACvB,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IAC/B,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;IACvD,qFAAqF;IACrF,MAAM,WAAW,CAAA;IACjB,OAAO,CAAC,KAAK,CAAC,iCAAiC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACnE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
package/dist/lib.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ /**
2
+ * What this package offers a host that serves it to other people.
3
+ *
4
+ * The CLI at `index.ts` is a program: importing it parses argv, starts a relay and runs a
5
+ * server. This is the library half — nothing here has an effect until it is called, so a
6
+ * deployment can assemble its own server with its own way of deciding who may do what.
7
+ *
8
+ * The split in what each side owns is deliberate. This package knows how to talk to chains
9
+ * and wallets and how to keep one person's signing away from another's; it holds no opinion
10
+ * about who anybody is, what they are allowed, or what it costs. Those are policy, and they
11
+ * belong to whatever is doing the serving.
12
+ */
13
+ export { initializeClientManager, SUPPORTED_CHAINS } from './client.js';
14
+ export { DEFAULT_IDENTITY, identityFrom } from './context.js';
15
+ export { type HttpServerOptions, startHttpServer } from './http-server.js';
16
+ export { attachLogServer, log } from './log.js';
17
+ export { createMcpServer } from './mcp-server.js';
18
+ export { type Login, OAuthProvider, SingleUserOAuthProvider, tokenLogin } from './oauth.js';
19
+ export { registerAllTools, type ToolGroup, type ToolMiddleware, toolGroup } from './tools/index.js';
20
+ export type { ChainName, Config, ToolResult } from './types.js';
21
+ export { parseCommandLineArgs } from './utils.js';
22
+ export { allWalletClients, configureWalletRelay, getWalletClient, WalletClient } from './wallet-client.js';
23
+ export { getPhoneSigner, PhoneSigner, qrSvg } from './walletconnect.js';
24
+ //# sourceMappingURL=lib.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,KAAK,KAAK,EAAE,aAAa,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACnG,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC1G,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/lib.js ADDED
@@ -0,0 +1,23 @@
1
+ /**
2
+ * What this package offers a host that serves it to other people.
3
+ *
4
+ * The CLI at `index.ts` is a program: importing it parses argv, starts a relay and runs a
5
+ * server. This is the library half — nothing here has an effect until it is called, so a
6
+ * deployment can assemble its own server with its own way of deciding who may do what.
7
+ *
8
+ * The split in what each side owns is deliberate. This package knows how to talk to chains
9
+ * and wallets and how to keep one person's signing away from another's; it holds no opinion
10
+ * about who anybody is, what they are allowed, or what it costs. Those are policy, and they
11
+ * belong to whatever is doing the serving.
12
+ */
13
+ export { initializeClientManager, SUPPORTED_CHAINS } from './client.js';
14
+ export { DEFAULT_IDENTITY, identityFrom } from './context.js';
15
+ export { startHttpServer } from './http-server.js';
16
+ export { attachLogServer, log } from './log.js';
17
+ export { createMcpServer } from './mcp-server.js';
18
+ export { OAuthProvider, SingleUserOAuthProvider, tokenLogin } from './oauth.js';
19
+ export { registerAllTools, toolGroup } from './tools/index.js';
20
+ export { parseCommandLineArgs } from './utils.js';
21
+ export { allWalletClients, configureWalletRelay, getWalletClient, WalletClient } from './wallet-client.js';
22
+ export { getPhoneSigner, PhoneSigner, qrSvg } from './walletconnect.js';
23
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC7D,OAAO,EAA0B,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAC1E,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAc,aAAa,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,gBAAgB,EAAuC,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEnG,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC1G,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { type ToolMiddleware } from './tools/index.js';
3
+ export declare function createMcpServer(middleware?: ToolMiddleware): McpServer;
4
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AAEnE,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AA+BxE,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAatE"}
@@ -0,0 +1,43 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import packageJson from '../package.json' with { type: 'json' };
3
+ import { registerAllTools } from './tools/index.js';
4
+ /**
5
+ * A server with every tool registered, ready to be connected to a transport.
6
+ *
7
+ * Exists so a host does not have to construct one itself. Reaching for the MCP SDK from
8
+ * outside would mean a second copy of it, and two copies of the same class are two
9
+ * unrelated types as far as a compiler is concerned — the error arrives at the seam rather
10
+ * than where the mistake was made.
11
+ */
12
+ /**
13
+ * What a client shows for this server, when it has somewhere to fetch it from.
14
+ *
15
+ * Only when a public URL is known: the icon has to be same-origin with the MCP endpoint and
16
+ * fetchable without credentials, which is true of the signing page's own static files and
17
+ * not true of anything a stdio server could offer. A client that cannot resolve it falls
18
+ * back to a letter, which is what it already does.
19
+ */
20
+ function identity() {
21
+ const publicUrl = process.env.MCP_PUBLIC_URL?.replace(/\/$/, '');
22
+ if (!publicUrl)
23
+ return {};
24
+ return {
25
+ websiteUrl: publicUrl,
26
+ icons: [
27
+ { src: `${publicUrl}/icon.png`, mimeType: 'image/png', sizes: ['512x512'] },
28
+ { src: `${publicUrl}/icon.svg`, mimeType: 'image/svg+xml', sizes: ['any'] }
29
+ ]
30
+ };
31
+ }
32
+ export function createMcpServer(middleware) {
33
+ const server = new McpServer({
34
+ name: 'web3-tools-mcp',
35
+ version: packageJson.version,
36
+ title: 'Web3 Tools',
37
+ description: packageJson.description,
38
+ ...identity()
39
+ }, { capabilities: { logging: {} } });
40
+ registerAllTools(server, middleware);
41
+ return server;
42
+ }
43
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAA;AACnE,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAuB,MAAM,kBAAkB,CAAA;AAExE;;;;;;;GAOG;AACH;;;;;;;GAOG;AACH,SAAS,QAAQ;IACf,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAChE,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,CAAA;IAEzB,OAAO;QACL,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE;YACL,EAAE,GAAG,EAAE,GAAG,SAAS,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE;YAC3E,EAAE,GAAG,EAAE,GAAG,SAAS,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;SAC5E;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAA2B;IACzD,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,GAAG,QAAQ,EAAE;KACd,EACD,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAClC,CAAA;IACD,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACpC,OAAO,MAAM,CAAA;AACf,CAAC"}
package/dist/oauth.d.ts CHANGED
@@ -3,26 +3,61 @@ import type { AuthorizationParams, OAuthServerProvider } from '@modelcontextprot
3
3
  import type { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
4
4
  import type { OAuthClientInformationFull, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
5
5
  import type { Response } from 'express';
6
- export declare class SingleUserOAuthProvider implements OAuthServerProvider {
7
- private accessToken;
6
+ /**
7
+ * How a deployment decides who is at the authorize screen.
8
+ *
9
+ * Deliberately free of any type from the MCP SDK, a chain library, or this package: an
10
+ * implementation renders a page and reads back a form, and everything about *how* somebody
11
+ * proves who they are — a shared token, a wallet signature, a company SSO — stays outside.
12
+ * Returning an address makes the issued token that person's; returning none authenticates
13
+ * the deployment rather than anybody in particular.
14
+ */
15
+ export interface Login {
16
+ /** The page served at GET /authorize. `hidden` must be placed inside its form. */
17
+ page(hidden: string, error?: string): string | Promise<string>;
18
+ /** Reads the posted form. An `error` re-renders the page; an `address` names the person. */
19
+ identify(form: Record<string, string>): Promise<{
20
+ address?: string;
21
+ error?: string;
22
+ }>;
23
+ /**
24
+ * Form fields this login owns. They are kept out of the hidden inputs replayed into the
25
+ * page, so a credential can never be echoed back into the HTML.
26
+ */
27
+ owns?: string[];
28
+ }
29
+ /** The default: one shared credential, so a self-hoster needs no identity provider. */
30
+ export declare function tokenLogin(accessToken: string): Login;
31
+ export declare class OAuthProvider implements OAuthServerProvider {
32
+ private login;
33
+ private staticToken?;
8
34
  private store;
9
- constructor(accessToken: string);
35
+ /**
36
+ * `staticToken` is accepted verbatim in an Authorization header, for clients that can send
37
+ * one and skip the flow entirely. It names no person, so it carries no identity.
38
+ */
39
+ constructor(login: Login, staticToken?: string | undefined);
10
40
  get clientsStore(): OAuthRegisteredClientsStore;
11
41
  /**
12
- * GET renders the token prompt; POST checks it and redirects back with a code. Handling
13
- * both here keeps the whole login inside the SDK's authorize route.
42
+ * GET renders the login; POST hands the form to it and, if it names somebody, redirects
43
+ * back with a code. Handling both here keeps the whole login inside the SDK's authorize
44
+ * route, which is the only place the client will follow a redirect from.
14
45
  */
15
46
  authorize(client: OAuthClientInformationFull, params: AuthorizationParams, res: Response): Promise<void>;
16
47
  challengeForAuthorizationCode(_client: OAuthClientInformationFull, authorizationCode: string): Promise<string>;
17
48
  exchangeAuthorizationCode(client: OAuthClientInformationFull, authorizationCode: string): Promise<OAuthTokens>;
18
49
  exchangeRefreshToken(client: OAuthClientInformationFull, refreshToken: string, scopes?: string[]): Promise<OAuthTokens>;
19
50
  private issue;
20
- /** Accepts an issued token, or MCP_TOKEN itself so a client that can send a header still works. */
51
+ /** Accepts an issued token, or the static one so a client that can send a header still works. */
21
52
  verifyAccessToken(token: string): Promise<AuthInfo>;
22
53
  revokeToken(_client: OAuthClientInformationFull, request: {
23
54
  token: string;
24
55
  }): Promise<void>;
25
56
  }
57
+ /** One shared credential, which is all a self-hosted server needs. */
58
+ export declare class SingleUserOAuthProvider extends OAuthProvider {
59
+ constructor(accessToken: string);
60
+ }
26
61
  /** PKCE helper, used by the tests to drive the flow the way a real client would. */
27
62
  export declare function pkce(): {
28
63
  verifier: string;
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAA;AAEnG,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAA;AACjH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAA;AAC9E,OAAO,KAAK,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AACvG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAsHvC,qBAAa,uBAAwB,YAAW,mBAAmB;IAGrD,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,KAAK,CAAc;gBAEP,WAAW,EAAE,MAAM;IAEvC,IAAI,YAAY,IAAI,2BAA2B,CAkB9C;IAED;;;OAGG;IACG,SAAS,CAAC,MAAM,EAAE,0BAA0B,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCxG,6BAA6B,CAAC,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9G,yBAAyB,CAAC,MAAM,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAU9G,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;YAS/G,KAAK;IAiBnB,mGAAmG;IAC7F,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAkBnD,WAAW,CAAC,OAAO,EAAE,0BAA0B,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAIlG;AAED,oFAAoF;AACpF,wBAAgB,IAAI,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAI9D"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kDAAkD,CAAA;AAEnG,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAA;AACjH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAA;AAC9E,OAAO,KAAK,EAAE,0BAA0B,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAA;AACvG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAuFvC;;;;;;;;GAQG;AACH,MAAM,WAAW,KAAK;IACpB,kFAAkF;IAClF,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAC9D,4FAA4F;IAC5F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACrF;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAcD,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAuBrD;AAED,qBAAa,aAAc,YAAW,mBAAmB;IAQrD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,WAAW,CAAC;IARtB,OAAO,CAAC,KAAK,CAAc;IAE3B;;;OAGG;gBAEO,KAAK,EAAE,KAAK,EACZ,WAAW,CAAC,EAAE,MAAM,YAAA;IAG9B,IAAI,YAAY,IAAI,2BAA2B,CAkB9C;IAED;;;;OAIG;IACG,SAAS,CAAC,MAAM,EAAE,0BAA0B,EAAE,MAAM,EAAE,mBAAmB,EAAE,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA0CxG,6BAA6B,CAAC,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9G,yBAAyB,CAAC,MAAM,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAU9G,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;YAU/G,KAAK;IAiBnB,iGAAiG;IAC3F,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA0BnD,WAAW,CAAC,OAAO,EAAE,0BAA0B,EAAE,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAIlG;AAED,sEAAsE;AACtE,qBAAa,uBAAwB,SAAQ,aAAa;gBAC5C,WAAW,EAAE,MAAM;CAGhC;AAED,oFAAoF;AACpF,wBAAgB,IAAI,IAAI;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAI9D"}