envoy-pay 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (364) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/LICENSE +200 -0
  3. package/README.md +529 -0
  4. package/dist/cjs/adapters/base.js +174 -0
  5. package/dist/cjs/adapters/base.js.map +1 -0
  6. package/dist/cjs/adapters/evm.js +339 -0
  7. package/dist/cjs/adapters/evm.js.map +1 -0
  8. package/dist/cjs/adapters/index.js +15 -0
  9. package/dist/cjs/adapters/index.js.map +1 -0
  10. package/dist/cjs/adapters/ows.js +204 -0
  11. package/dist/cjs/adapters/ows.js.map +1 -0
  12. package/dist/cjs/adapters/solana.js +210 -0
  13. package/dist/cjs/adapters/solana.js.map +1 -0
  14. package/dist/cjs/adapters/stellar.js +173 -0
  15. package/dist/cjs/adapters/stellar.js.map +1 -0
  16. package/dist/cjs/adapters/stripe.js +338 -0
  17. package/dist/cjs/adapters/stripe.js.map +1 -0
  18. package/dist/cjs/adapters/types.js +3 -0
  19. package/dist/cjs/adapters/types.js.map +1 -0
  20. package/dist/cjs/client.js +309 -0
  21. package/dist/cjs/client.js.map +1 -0
  22. package/dist/cjs/contracts/abis/EnvoyFacilitator.js +197 -0
  23. package/dist/cjs/contracts/abis/EnvoyFacilitator.js.map +1 -0
  24. package/dist/cjs/contracts/addresses.js +42 -0
  25. package/dist/cjs/contracts/addresses.js.map +1 -0
  26. package/dist/cjs/contracts/facilitator.js +225 -0
  27. package/dist/cjs/contracts/facilitator.js.map +1 -0
  28. package/dist/cjs/contracts/index.js +21 -0
  29. package/dist/cjs/contracts/index.js.map +1 -0
  30. package/dist/cjs/facilitator/facilitator-service.js +305 -0
  31. package/dist/cjs/facilitator/facilitator-service.js.map +1 -0
  32. package/dist/cjs/facilitator/fee-calculator.js +134 -0
  33. package/dist/cjs/facilitator/fee-calculator.js.map +1 -0
  34. package/dist/cjs/facilitator/index.js +12 -0
  35. package/dist/cjs/facilitator/index.js.map +1 -0
  36. package/dist/cjs/facilitator/types.js +99 -0
  37. package/dist/cjs/facilitator/types.js.map +1 -0
  38. package/dist/cjs/identity/agent-card.js +143 -0
  39. package/dist/cjs/identity/agent-card.js.map +1 -0
  40. package/dist/cjs/identity/agent-identity.js +166 -0
  41. package/dist/cjs/identity/agent-identity.js.map +1 -0
  42. package/dist/cjs/identity/did-resolver.js +149 -0
  43. package/dist/cjs/identity/did-resolver.js.map +1 -0
  44. package/dist/cjs/identity/erc8004/abis.js +218 -0
  45. package/dist/cjs/identity/erc8004/abis.js.map +1 -0
  46. package/dist/cjs/identity/erc8004/identity.js +268 -0
  47. package/dist/cjs/identity/erc8004/identity.js.map +1 -0
  48. package/dist/cjs/identity/erc8004/index.js +36 -0
  49. package/dist/cjs/identity/erc8004/index.js.map +1 -0
  50. package/dist/cjs/identity/erc8004/reputation.js +110 -0
  51. package/dist/cjs/identity/erc8004/reputation.js.map +1 -0
  52. package/dist/cjs/identity/erc8004/types.js +3 -0
  53. package/dist/cjs/identity/erc8004/types.js.map +1 -0
  54. package/dist/cjs/identity/index.js +61 -0
  55. package/dist/cjs/identity/index.js.map +1 -0
  56. package/dist/cjs/identity/owner-registry.js +140 -0
  57. package/dist/cjs/identity/owner-registry.js.map +1 -0
  58. package/dist/cjs/identity/reputation.js +193 -0
  59. package/dist/cjs/identity/reputation.js.map +1 -0
  60. package/dist/cjs/identity/types.js +16 -0
  61. package/dist/cjs/identity/types.js.map +1 -0
  62. package/dist/cjs/index.js +72 -0
  63. package/dist/cjs/index.js.map +1 -0
  64. package/dist/cjs/logger.js +7 -0
  65. package/dist/cjs/logger.js.map +1 -0
  66. package/dist/cjs/monitor/evm-watcher.js +165 -0
  67. package/dist/cjs/monitor/evm-watcher.js.map +1 -0
  68. package/dist/cjs/monitor/index.js +32 -0
  69. package/dist/cjs/monitor/index.js.map +1 -0
  70. package/dist/cjs/monitor/multi-watcher.js +94 -0
  71. package/dist/cjs/monitor/multi-watcher.js.map +1 -0
  72. package/dist/cjs/monitor/solana-watcher.js +172 -0
  73. package/dist/cjs/monitor/solana-watcher.js.map +1 -0
  74. package/dist/cjs/monitor/stellar-watcher.js +125 -0
  75. package/dist/cjs/monitor/stellar-watcher.js.map +1 -0
  76. package/dist/cjs/mpp.js +187 -0
  77. package/dist/cjs/mpp.js.map +1 -0
  78. package/dist/cjs/policy.js +71 -0
  79. package/dist/cjs/policy.js.map +1 -0
  80. package/dist/cjs/providers/bridge.js +323 -0
  81. package/dist/cjs/providers/bridge.js.map +1 -0
  82. package/dist/cjs/providers/onchainos.js +210 -0
  83. package/dist/cjs/providers/onchainos.js.map +1 -0
  84. package/dist/cjs/requests/eip681.js +77 -0
  85. package/dist/cjs/requests/eip681.js.map +1 -0
  86. package/dist/cjs/requests/index.js +18 -0
  87. package/dist/cjs/requests/index.js.map +1 -0
  88. package/dist/cjs/requests/sep7.js +61 -0
  89. package/dist/cjs/requests/sep7.js.map +1 -0
  90. package/dist/cjs/requests/solana-pay.js +51 -0
  91. package/dist/cjs/requests/solana-pay.js.map +1 -0
  92. package/dist/cjs/requests/universal.js +40 -0
  93. package/dist/cjs/requests/universal.js.map +1 -0
  94. package/dist/cjs/server/index.js +35 -0
  95. package/dist/cjs/server/index.js.map +1 -0
  96. package/dist/cjs/server/mpp-gate.js +118 -0
  97. package/dist/cjs/server/mpp-gate.js.map +1 -0
  98. package/dist/cjs/server/payment-gate.js +92 -0
  99. package/dist/cjs/server/payment-gate.js.map +1 -0
  100. package/dist/cjs/server/receipt.js +52 -0
  101. package/dist/cjs/server/receipt.js.map +1 -0
  102. package/dist/cjs/server/webhook.js +122 -0
  103. package/dist/cjs/server/webhook.js.map +1 -0
  104. package/dist/cjs/server/x402-gate.js +103 -0
  105. package/dist/cjs/server/x402-gate.js.map +1 -0
  106. package/dist/cjs/solana.js +14 -0
  107. package/dist/cjs/solana.js.map +1 -0
  108. package/dist/cjs/stellar.js +14 -0
  109. package/dist/cjs/stellar.js.map +1 -0
  110. package/dist/cjs/wallet/balance-aggregator.js +149 -0
  111. package/dist/cjs/wallet/balance-aggregator.js.map +1 -0
  112. package/dist/cjs/wallet/chain-router.js +254 -0
  113. package/dist/cjs/wallet/chain-router.js.map +1 -0
  114. package/dist/cjs/wallet/index.js +15 -0
  115. package/dist/cjs/wallet/index.js.map +1 -0
  116. package/dist/cjs/wallet/intent-resolver.js +145 -0
  117. package/dist/cjs/wallet/intent-resolver.js.map +1 -0
  118. package/dist/cjs/wallet/session-manager.js +170 -0
  119. package/dist/cjs/wallet/session-manager.js.map +1 -0
  120. package/dist/cjs/wallet/types.js +14 -0
  121. package/dist/cjs/wallet/types.js.map +1 -0
  122. package/dist/cjs/wallet/unified-wallet.js +253 -0
  123. package/dist/cjs/wallet/unified-wallet.js.map +1 -0
  124. package/dist/esm/adapters/base.js +170 -0
  125. package/dist/esm/adapters/base.js.map +1 -0
  126. package/dist/esm/adapters/evm.js +334 -0
  127. package/dist/esm/adapters/evm.js.map +1 -0
  128. package/dist/esm/adapters/index.js +6 -0
  129. package/dist/esm/adapters/index.js.map +1 -0
  130. package/dist/esm/adapters/ows.js +194 -0
  131. package/dist/esm/adapters/ows.js.map +1 -0
  132. package/dist/esm/adapters/solana.js +206 -0
  133. package/dist/esm/adapters/solana.js.map +1 -0
  134. package/dist/esm/adapters/stellar.js +136 -0
  135. package/dist/esm/adapters/stellar.js.map +1 -0
  136. package/dist/esm/adapters/stripe.js +334 -0
  137. package/dist/esm/adapters/stripe.js.map +1 -0
  138. package/dist/esm/adapters/types.js +2 -0
  139. package/dist/esm/adapters/types.js.map +1 -0
  140. package/dist/esm/client.js +302 -0
  141. package/dist/esm/client.js.map +1 -0
  142. package/dist/esm/contracts/abis/EnvoyFacilitator.js +194 -0
  143. package/dist/esm/contracts/abis/EnvoyFacilitator.js.map +1 -0
  144. package/dist/esm/contracts/addresses.js +38 -0
  145. package/dist/esm/contracts/addresses.js.map +1 -0
  146. package/dist/esm/contracts/facilitator.js +218 -0
  147. package/dist/esm/contracts/facilitator.js.map +1 -0
  148. package/dist/esm/contracts/index.js +8 -0
  149. package/dist/esm/contracts/index.js.map +1 -0
  150. package/dist/esm/facilitator/facilitator-service.js +301 -0
  151. package/dist/esm/facilitator/facilitator-service.js.map +1 -0
  152. package/dist/esm/facilitator/fee-calculator.js +130 -0
  153. package/dist/esm/facilitator/fee-calculator.js.map +1 -0
  154. package/dist/esm/facilitator/index.js +5 -0
  155. package/dist/esm/facilitator/index.js.map +1 -0
  156. package/dist/esm/facilitator/types.js +96 -0
  157. package/dist/esm/facilitator/types.js.map +1 -0
  158. package/dist/esm/identity/agent-card.js +139 -0
  159. package/dist/esm/identity/agent-card.js.map +1 -0
  160. package/dist/esm/identity/agent-identity.js +162 -0
  161. package/dist/esm/identity/agent-identity.js.map +1 -0
  162. package/dist/esm/identity/did-resolver.js +145 -0
  163. package/dist/esm/identity/did-resolver.js.map +1 -0
  164. package/dist/esm/identity/erc8004/abis.js +215 -0
  165. package/dist/esm/identity/erc8004/abis.js.map +1 -0
  166. package/dist/esm/identity/erc8004/identity.js +250 -0
  167. package/dist/esm/identity/erc8004/identity.js.map +1 -0
  168. package/dist/esm/identity/erc8004/index.js +13 -0
  169. package/dist/esm/identity/erc8004/index.js.map +1 -0
  170. package/dist/esm/identity/erc8004/reputation.js +105 -0
  171. package/dist/esm/identity/erc8004/reputation.js.map +1 -0
  172. package/dist/esm/identity/erc8004/types.js +2 -0
  173. package/dist/esm/identity/erc8004/types.js.map +1 -0
  174. package/dist/esm/identity/index.js +19 -0
  175. package/dist/esm/identity/index.js.map +1 -0
  176. package/dist/esm/identity/owner-registry.js +136 -0
  177. package/dist/esm/identity/owner-registry.js.map +1 -0
  178. package/dist/esm/identity/reputation.js +189 -0
  179. package/dist/esm/identity/reputation.js.map +1 -0
  180. package/dist/esm/identity/types.js +15 -0
  181. package/dist/esm/identity/types.js.map +1 -0
  182. package/dist/esm/index.js +37 -0
  183. package/dist/esm/index.js.map +1 -0
  184. package/dist/esm/logger.js +3 -0
  185. package/dist/esm/logger.js.map +1 -0
  186. package/dist/esm/monitor/evm-watcher.js +162 -0
  187. package/dist/esm/monitor/evm-watcher.js.map +1 -0
  188. package/dist/esm/monitor/index.js +25 -0
  189. package/dist/esm/monitor/index.js.map +1 -0
  190. package/dist/esm/monitor/multi-watcher.js +91 -0
  191. package/dist/esm/monitor/multi-watcher.js.map +1 -0
  192. package/dist/esm/monitor/solana-watcher.js +169 -0
  193. package/dist/esm/monitor/solana-watcher.js.map +1 -0
  194. package/dist/esm/monitor/stellar-watcher.js +122 -0
  195. package/dist/esm/monitor/stellar-watcher.js.map +1 -0
  196. package/dist/esm/mpp.js +175 -0
  197. package/dist/esm/mpp.js.map +1 -0
  198. package/dist/esm/policy.js +67 -0
  199. package/dist/esm/policy.js.map +1 -0
  200. package/dist/esm/providers/bridge.js +319 -0
  201. package/dist/esm/providers/bridge.js.map +1 -0
  202. package/dist/esm/providers/onchainos.js +172 -0
  203. package/dist/esm/providers/onchainos.js.map +1 -0
  204. package/dist/esm/requests/eip681.js +74 -0
  205. package/dist/esm/requests/eip681.js.map +1 -0
  206. package/dist/esm/requests/index.js +11 -0
  207. package/dist/esm/requests/index.js.map +1 -0
  208. package/dist/esm/requests/sep7.js +58 -0
  209. package/dist/esm/requests/sep7.js.map +1 -0
  210. package/dist/esm/requests/solana-pay.js +48 -0
  211. package/dist/esm/requests/solana-pay.js.map +1 -0
  212. package/dist/esm/requests/universal.js +37 -0
  213. package/dist/esm/requests/universal.js.map +1 -0
  214. package/dist/esm/server/index.js +27 -0
  215. package/dist/esm/server/index.js.map +1 -0
  216. package/dist/esm/server/mpp-gate.js +115 -0
  217. package/dist/esm/server/mpp-gate.js.map +1 -0
  218. package/dist/esm/server/payment-gate.js +89 -0
  219. package/dist/esm/server/payment-gate.js.map +1 -0
  220. package/dist/esm/server/receipt.js +48 -0
  221. package/dist/esm/server/receipt.js.map +1 -0
  222. package/dist/esm/server/webhook.js +119 -0
  223. package/dist/esm/server/webhook.js.map +1 -0
  224. package/dist/esm/server/x402-gate.js +100 -0
  225. package/dist/esm/server/x402-gate.js.map +1 -0
  226. package/dist/esm/solana.js +8 -0
  227. package/dist/esm/solana.js.map +1 -0
  228. package/dist/esm/stellar.js +8 -0
  229. package/dist/esm/stellar.js.map +1 -0
  230. package/dist/esm/wallet/balance-aggregator.js +145 -0
  231. package/dist/esm/wallet/balance-aggregator.js.map +1 -0
  232. package/dist/esm/wallet/chain-router.js +250 -0
  233. package/dist/esm/wallet/chain-router.js.map +1 -0
  234. package/dist/esm/wallet/index.js +7 -0
  235. package/dist/esm/wallet/index.js.map +1 -0
  236. package/dist/esm/wallet/intent-resolver.js +141 -0
  237. package/dist/esm/wallet/intent-resolver.js.map +1 -0
  238. package/dist/esm/wallet/session-manager.js +166 -0
  239. package/dist/esm/wallet/session-manager.js.map +1 -0
  240. package/dist/esm/wallet/types.js +13 -0
  241. package/dist/esm/wallet/types.js.map +1 -0
  242. package/dist/esm/wallet/unified-wallet.js +249 -0
  243. package/dist/esm/wallet/unified-wallet.js.map +1 -0
  244. package/dist/types/adapters/base.d.ts +53 -0
  245. package/dist/types/adapters/base.d.ts.map +1 -0
  246. package/dist/types/adapters/evm.d.ts +93 -0
  247. package/dist/types/adapters/evm.d.ts.map +1 -0
  248. package/dist/types/adapters/index.d.ts +7 -0
  249. package/dist/types/adapters/index.d.ts.map +1 -0
  250. package/dist/types/adapters/ows.d.ts +123 -0
  251. package/dist/types/adapters/ows.d.ts.map +1 -0
  252. package/dist/types/adapters/solana.d.ts +77 -0
  253. package/dist/types/adapters/solana.d.ts.map +1 -0
  254. package/dist/types/adapters/stellar.d.ts +67 -0
  255. package/dist/types/adapters/stellar.d.ts.map +1 -0
  256. package/dist/types/adapters/stripe.d.ts +206 -0
  257. package/dist/types/adapters/stripe.d.ts.map +1 -0
  258. package/dist/types/adapters/types.d.ts +110 -0
  259. package/dist/types/adapters/types.d.ts.map +1 -0
  260. package/dist/types/client.d.ts +89 -0
  261. package/dist/types/client.d.ts.map +1 -0
  262. package/dist/types/contracts/abis/EnvoyFacilitator.d.ts +296 -0
  263. package/dist/types/contracts/abis/EnvoyFacilitator.d.ts.map +1 -0
  264. package/dist/types/contracts/addresses.d.ts +24 -0
  265. package/dist/types/contracts/addresses.d.ts.map +1 -0
  266. package/dist/types/contracts/facilitator.d.ts +172 -0
  267. package/dist/types/contracts/facilitator.d.ts.map +1 -0
  268. package/dist/types/contracts/index.d.ts +6 -0
  269. package/dist/types/contracts/index.d.ts.map +1 -0
  270. package/dist/types/facilitator/facilitator-service.d.ts +69 -0
  271. package/dist/types/facilitator/facilitator-service.d.ts.map +1 -0
  272. package/dist/types/facilitator/fee-calculator.d.ts +48 -0
  273. package/dist/types/facilitator/fee-calculator.d.ts.map +1 -0
  274. package/dist/types/facilitator/index.d.ts +5 -0
  275. package/dist/types/facilitator/index.d.ts.map +1 -0
  276. package/dist/types/facilitator/types.d.ts +221 -0
  277. package/dist/types/facilitator/types.d.ts.map +1 -0
  278. package/dist/types/identity/agent-card.d.ts +83 -0
  279. package/dist/types/identity/agent-card.d.ts.map +1 -0
  280. package/dist/types/identity/agent-identity.d.ts +102 -0
  281. package/dist/types/identity/agent-identity.d.ts.map +1 -0
  282. package/dist/types/identity/did-resolver.d.ts +70 -0
  283. package/dist/types/identity/did-resolver.d.ts.map +1 -0
  284. package/dist/types/identity/erc8004/abis.d.ts +336 -0
  285. package/dist/types/identity/erc8004/abis.d.ts.map +1 -0
  286. package/dist/types/identity/erc8004/identity.d.ts +109 -0
  287. package/dist/types/identity/erc8004/identity.d.ts.map +1 -0
  288. package/dist/types/identity/erc8004/index.d.ts +15 -0
  289. package/dist/types/identity/erc8004/index.d.ts.map +1 -0
  290. package/dist/types/identity/erc8004/reputation.d.ts +52 -0
  291. package/dist/types/identity/erc8004/reputation.d.ts.map +1 -0
  292. package/dist/types/identity/erc8004/types.d.ts +31 -0
  293. package/dist/types/identity/erc8004/types.d.ts.map +1 -0
  294. package/dist/types/identity/index.d.ts +10 -0
  295. package/dist/types/identity/index.d.ts.map +1 -0
  296. package/dist/types/identity/owner-registry.d.ts +68 -0
  297. package/dist/types/identity/owner-registry.d.ts.map +1 -0
  298. package/dist/types/identity/reputation.d.ts +66 -0
  299. package/dist/types/identity/reputation.d.ts.map +1 -0
  300. package/dist/types/identity/types.d.ts +182 -0
  301. package/dist/types/identity/types.d.ts.map +1 -0
  302. package/dist/types/index.d.ts +17 -0
  303. package/dist/types/index.d.ts.map +1 -0
  304. package/dist/types/logger.d.ts +10 -0
  305. package/dist/types/logger.d.ts.map +1 -0
  306. package/dist/types/monitor/evm-watcher.d.ts +40 -0
  307. package/dist/types/monitor/evm-watcher.d.ts.map +1 -0
  308. package/dist/types/monitor/index.d.ts +25 -0
  309. package/dist/types/monitor/index.d.ts.map +1 -0
  310. package/dist/types/monitor/multi-watcher.d.ts +48 -0
  311. package/dist/types/monitor/multi-watcher.d.ts.map +1 -0
  312. package/dist/types/monitor/solana-watcher.d.ts +36 -0
  313. package/dist/types/monitor/solana-watcher.d.ts.map +1 -0
  314. package/dist/types/monitor/stellar-watcher.d.ts +34 -0
  315. package/dist/types/monitor/stellar-watcher.d.ts.map +1 -0
  316. package/dist/types/mpp.d.ts +153 -0
  317. package/dist/types/mpp.d.ts.map +1 -0
  318. package/dist/types/policy.d.ts +40 -0
  319. package/dist/types/policy.d.ts.map +1 -0
  320. package/dist/types/providers/bridge.d.ts +162 -0
  321. package/dist/types/providers/bridge.d.ts.map +1 -0
  322. package/dist/types/providers/onchainos.d.ts +128 -0
  323. package/dist/types/providers/onchainos.d.ts.map +1 -0
  324. package/dist/types/requests/eip681.d.ts +51 -0
  325. package/dist/types/requests/eip681.d.ts.map +1 -0
  326. package/dist/types/requests/index.d.ts +11 -0
  327. package/dist/types/requests/index.d.ts.map +1 -0
  328. package/dist/types/requests/sep7.d.ts +56 -0
  329. package/dist/types/requests/sep7.d.ts.map +1 -0
  330. package/dist/types/requests/solana-pay.d.ts +50 -0
  331. package/dist/types/requests/solana-pay.d.ts.map +1 -0
  332. package/dist/types/requests/universal.d.ts +28 -0
  333. package/dist/types/requests/universal.d.ts.map +1 -0
  334. package/dist/types/server/index.d.ts +27 -0
  335. package/dist/types/server/index.d.ts.map +1 -0
  336. package/dist/types/server/mpp-gate.d.ts +66 -0
  337. package/dist/types/server/mpp-gate.d.ts.map +1 -0
  338. package/dist/types/server/payment-gate.d.ts +33 -0
  339. package/dist/types/server/payment-gate.d.ts.map +1 -0
  340. package/dist/types/server/receipt.d.ts +52 -0
  341. package/dist/types/server/receipt.d.ts.map +1 -0
  342. package/dist/types/server/webhook.d.ts +46 -0
  343. package/dist/types/server/webhook.d.ts.map +1 -0
  344. package/dist/types/server/x402-gate.d.ts +70 -0
  345. package/dist/types/server/x402-gate.d.ts.map +1 -0
  346. package/dist/types/solana.d.ts +7 -0
  347. package/dist/types/solana.d.ts.map +1 -0
  348. package/dist/types/stellar.d.ts +7 -0
  349. package/dist/types/stellar.d.ts.map +1 -0
  350. package/dist/types/wallet/balance-aggregator.d.ts +51 -0
  351. package/dist/types/wallet/balance-aggregator.d.ts.map +1 -0
  352. package/dist/types/wallet/chain-router.d.ts +44 -0
  353. package/dist/types/wallet/chain-router.d.ts.map +1 -0
  354. package/dist/types/wallet/index.d.ts +7 -0
  355. package/dist/types/wallet/index.d.ts.map +1 -0
  356. package/dist/types/wallet/intent-resolver.d.ts +39 -0
  357. package/dist/types/wallet/intent-resolver.d.ts.map +1 -0
  358. package/dist/types/wallet/session-manager.d.ts +57 -0
  359. package/dist/types/wallet/session-manager.d.ts.map +1 -0
  360. package/dist/types/wallet/types.d.ts +161 -0
  361. package/dist/types/wallet/types.d.ts.map +1 -0
  362. package/dist/types/wallet/unified-wallet.d.ts +122 -0
  363. package/dist/types/wallet/unified-wallet.d.ts.map +1 -0
  364. package/package.json +194 -0
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * MPP — Machine Payments Protocol utilities.
4
+ *
5
+ * Handles parsing/building of MPP-standard headers:
6
+ * - WWW-Authenticate: Payment (Challenge)
7
+ * - Authorization: Payment (Credential)
8
+ * - Payment-Receipt (Receipt)
9
+ *
10
+ * @see https://mpp.dev/protocol/challenges
11
+ * @see https://mpp.dev/protocol/credentials
12
+ * @see https://mpp.dev/protocol/receipts
13
+ * @see https://paymentauth.org — IETF specification
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.base64urlEncode = base64urlEncode;
17
+ exports.base64urlDecode = base64urlDecode;
18
+ exports.parseMppChallenge = parseMppChallenge;
19
+ exports.parseMppChallenges = parseMppChallenges;
20
+ exports.decodeChallengeRequest = decodeChallengeRequest;
21
+ exports.buildMppCredential = buildMppCredential;
22
+ exports.buildAuthorizationHeader = buildAuthorizationHeader;
23
+ exports.parseMppReceipt = parseMppReceipt;
24
+ exports.detectProtocol = detectProtocol;
25
+ exports.extractMppChallenges = extractMppChallenges;
26
+ // ─── Base64url helpers ──────────────────────────────────────────────
27
+ /**
28
+ * Encode string to base64url (RFC 4648 §5).
29
+ * No padding, URL-safe alphabet.
30
+ */
31
+ function base64urlEncode(str) {
32
+ const b64 = Buffer.from(str, 'utf-8').toString('base64');
33
+ return b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
34
+ }
35
+ /**
36
+ * Decode base64url string.
37
+ */
38
+ function base64urlDecode(str) {
39
+ // Restore standard base64
40
+ let b64 = str.replace(/-/g, '+').replace(/_/g, '/');
41
+ // Add padding
42
+ while (b64.length % 4 !== 0)
43
+ b64 += '=';
44
+ return Buffer.from(b64, 'base64').toString('utf-8');
45
+ }
46
+ // ─── Challenge parsing ──────────────────────────────────────────────
47
+ /**
48
+ * Parse a `WWW-Authenticate: Payment` header value into an MppChallenge.
49
+ *
50
+ * Format:
51
+ * ```
52
+ * Payment id="abc", realm="mpp.dev", method="stripe", intent="charge",
53
+ * expires="2025-01-15T12:05:00Z", request="eyJhbW91bnQ..."
54
+ * ```
55
+ *
56
+ * @param header — Raw header value (with or without "Payment " prefix)
57
+ * @returns Parsed challenge object
58
+ * @throws Error if required fields are missing
59
+ */
60
+ function parseMppChallenge(header) {
61
+ // Strip "Payment " prefix if present
62
+ let raw = header.trim();
63
+ if (raw.startsWith('Payment ')) {
64
+ raw = raw.slice(8);
65
+ }
66
+ // Parse RFC 7235 auth-param format: key="value", key="value"
67
+ const params = parseAuthParams(raw);
68
+ // Validate required fields
69
+ const required = ['id', 'realm', 'method', 'intent', 'request'];
70
+ for (const key of required) {
71
+ if (!params[key]) {
72
+ throw new Error(`MPP Challenge missing required field: ${key}`);
73
+ }
74
+ }
75
+ return {
76
+ id: params.id,
77
+ realm: params.realm,
78
+ method: params.method,
79
+ intent: params.intent,
80
+ request: params.request,
81
+ expires: params.expires,
82
+ description: params.description,
83
+ };
84
+ }
85
+ /**
86
+ * Parse multiple `WWW-Authenticate: Payment` headers.
87
+ * Servers can offer multiple payment options.
88
+ */
89
+ function parseMppChallenges(headers) {
90
+ return headers.map(parseMppChallenge);
91
+ }
92
+ /**
93
+ * Decode the `request` field of a Challenge into a structured object.
94
+ */
95
+ function decodeChallengeRequest(challenge) {
96
+ const json = base64urlDecode(challenge.request);
97
+ return JSON.parse(json);
98
+ }
99
+ // ─── Credential building ────────────────────────────────────────────
100
+ /**
101
+ * Build an MPP Credential for the `Authorization: Payment` header.
102
+ *
103
+ * @param challenge — The challenge being responded to
104
+ * @param source — DID or identifier of the payer
105
+ * @param payload — Method-specific proof (SPT for Stripe, tx for Tempo)
106
+ * @returns Base64url-encoded credential string
107
+ */
108
+ function buildMppCredential(challenge, source, payload) {
109
+ const credential = {
110
+ challenge,
111
+ source,
112
+ payload,
113
+ };
114
+ return base64urlEncode(JSON.stringify(credential));
115
+ }
116
+ /**
117
+ * Build the full `Authorization` header value.
118
+ */
119
+ function buildAuthorizationHeader(challenge, source, payload) {
120
+ return `Payment ${buildMppCredential(challenge, source, payload)}`;
121
+ }
122
+ // ─── Receipt parsing ────────────────────────────────────────────────
123
+ /**
124
+ * Parse a `Payment-Receipt` header.
125
+ */
126
+ function parseMppReceipt(header) {
127
+ try {
128
+ const json = base64urlDecode(header.trim());
129
+ return JSON.parse(json);
130
+ }
131
+ catch {
132
+ return { raw: header };
133
+ }
134
+ }
135
+ // ─── Protocol detection ─────────────────────────────────────────────
136
+ /**
137
+ * Detect whether a 402 response uses MPP or x402 protocol.
138
+ *
139
+ * MPP: has `WWW-Authenticate: Payment` header
140
+ * x402: has JSON body with `x402Version` and `accepts[]`
141
+ */
142
+ function detectProtocol(headers, body) {
143
+ // Check for MPP: WWW-Authenticate header with Payment scheme
144
+ const wwwAuth = headers['www-authenticate'] || headers['WWW-Authenticate'];
145
+ if (wwwAuth) {
146
+ const values = Array.isArray(wwwAuth) ? wwwAuth : [wwwAuth];
147
+ if (values.some((v) => v.trim().startsWith('Payment '))) {
148
+ return 'mpp';
149
+ }
150
+ }
151
+ // Check for x402: JSON body with x402Version
152
+ if (body && typeof body === 'object' && ('x402Version' in body || 'accepts' in body)) {
153
+ return 'x402';
154
+ }
155
+ return 'unknown';
156
+ }
157
+ /**
158
+ * Extract all MPP challenges from response headers.
159
+ * Handles both single and multiple WWW-Authenticate headers.
160
+ */
161
+ function extractMppChallenges(headers) {
162
+ const wwwAuth = headers['www-authenticate'] || headers['WWW-Authenticate'];
163
+ if (!wwwAuth)
164
+ return [];
165
+ const values = Array.isArray(wwwAuth) ? wwwAuth : [wwwAuth];
166
+ return values
167
+ .filter((v) => v.trim().startsWith('Payment '))
168
+ .map(parseMppChallenge);
169
+ }
170
+ // ─── Internal helpers ───────────────────────────────────────────────
171
+ /**
172
+ * Parse RFC 7235 auth-param format.
173
+ * `key="value", key="value"`
174
+ */
175
+ function parseAuthParams(raw) {
176
+ const params = {};
177
+ // Match key="value" pairs, handling escaped quotes
178
+ const regex = /(\w+)="((?:[^"\\]|\\.)*)"/g;
179
+ let match;
180
+ while ((match = regex.exec(raw)) !== null) {
181
+ const [, key, value] = match;
182
+ // Unescape backslash-escaped characters
183
+ params[key] = value.replace(/\\(.)/g, '$1');
184
+ }
185
+ return params;
186
+ }
187
+ //# sourceMappingURL=mpp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mpp.js","sourceRoot":"","sources":["../../src/mpp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * PolicyEngine — On-device budget controller for autonomous AI agents.
4
+ *
5
+ * Enforces per-transaction caps, monthly rolling budgets, and optional
6
+ * destination whitelists so that an agent can never overspend without
7
+ * explicit human approval.
8
+ *
9
+ * Fail-closed: if any check fails, the payment is rejected.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PolicyEngine = void 0;
13
+ const logger_1 = require("./logger");
14
+ class PolicyEngine {
15
+ policy;
16
+ currentMonthSpent = 0;
17
+ log;
18
+ constructor(policy, logger) {
19
+ this.policy = policy;
20
+ this.log = logger ?? logger_1.noopLogger;
21
+ }
22
+ /**
23
+ * Returns `true` if the proposed spend passes every policy gate.
24
+ * Fail-closed: any unrecognised state returns `false`.
25
+ */
26
+ checkPolicy(amountUsd, destination) {
27
+ if (amountUsd <= 0) {
28
+ this.log(`[Policy] 🚫 Invalid amount: $${amountUsd}`);
29
+ return false;
30
+ }
31
+ if (amountUsd > this.policy.maxAmountPerTransaction) {
32
+ this.log(`[Policy] 🚫 $${amountUsd} exceeds per-tx limit of $${this.policy.maxAmountPerTransaction}`);
33
+ return false;
34
+ }
35
+ if (this.currentMonthSpent + amountUsd > this.policy.monthlyBudget) {
36
+ this.log(`[Policy] 🚫 $${amountUsd} would exceed monthly budget of $${this.policy.monthlyBudget} (spent: $${this.currentMonthSpent})`);
37
+ return false;
38
+ }
39
+ if (this.policy.allowedDestinations &&
40
+ this.policy.allowedDestinations.length > 0 &&
41
+ destination &&
42
+ !this.policy.allowedDestinations.includes(destination)) {
43
+ this.log(`[Policy] 🚫 Destination ${destination} not in whitelist`);
44
+ return false;
45
+ }
46
+ return true;
47
+ }
48
+ /** Record a successful spend against the rolling budget. */
49
+ recordSpend(amountUsd) {
50
+ this.currentMonthSpent += amountUsd;
51
+ this.log(`[Policy] 📊 Spent $${amountUsd} — total: $${this.currentMonthSpent}/$${this.policy.monthlyBudget}`);
52
+ }
53
+ /** Get total USD spent in the current period. */
54
+ getSpent() {
55
+ return this.currentMonthSpent;
56
+ }
57
+ /** Get remaining USD budget. */
58
+ getRemainingBudget() {
59
+ return Math.max(0, this.policy.monthlyBudget - this.currentMonthSpent);
60
+ }
61
+ /** Reset the spend counter (e.g. on month rollover or for testing). */
62
+ resetBudget() {
63
+ this.currentMonthSpent = 0;
64
+ }
65
+ /** Get a snapshot of the current policy configuration. */
66
+ getPolicy() {
67
+ return { ...this.policy };
68
+ }
69
+ }
70
+ exports.PolicyEngine = PolicyEngine;
71
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/policy.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,qCAA8C;AAW9C,MAAa,YAAY;IAKb;IAJF,iBAAiB,GAAG,CAAC,CAAC;IACtB,GAAG,CAAS;IAEpB,YACU,MAAoB,EAC5B,MAAe;QADP,WAAM,GAAN,MAAM,CAAc;QAG5B,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,mBAAU,CAAC;IAClC,CAAC;IAED;;;OAGG;IACI,WAAW,CAAC,SAAiB,EAAE,WAAoB;QACxD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC;YACtD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC;YACpD,IAAI,CAAC,GAAG,CACN,gBAAgB,SAAS,6BAA6B,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAC5F,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YACnE,IAAI,CAAC,GAAG,CACN,gBAAgB,SAAS,oCAAoC,IAAI,CAAC,MAAM,CAAC,aAAa,aAAa,IAAI,CAAC,iBAAiB,GAAG,CAC7H,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IACE,IAAI,CAAC,MAAM,CAAC,mBAAmB;YAC/B,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC;YAC1C,WAAW;YACX,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,WAAW,CAAC,EACtD,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,2BAA2B,WAAW,mBAAmB,CAAC,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4DAA4D;IACrD,WAAW,CAAC,SAAiB;QAClC,IAAI,CAAC,iBAAiB,IAAI,SAAS,CAAC;QACpC,IAAI,CAAC,GAAG,CACN,sBAAsB,SAAS,cAAc,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CACpG,CAAC;IACJ,CAAC;IAED,iDAAiD;IAC1C,QAAQ;QACb,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED,gCAAgC;IACzB,kBAAkB;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACzE,CAAC;IAED,uEAAuE;IAChE,WAAW;QAChB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,0DAA0D;IACnD,SAAS;QACd,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;CACF;AA3ED,oCA2EC"}
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ /**
3
+ * Cross-Chain Bridge Module for envoy
4
+ *
5
+ * Provides cross-chain token transfers between any supported EVM chain
6
+ * using the OnchainOS DEX cross-chain API.
7
+ *
8
+ * Strategies:
9
+ * 1. OnchainOS Cross-Chain — single-tx bridge via OKX aggregated bridges
10
+ * (Stargate, Across, Celer, etc.)
11
+ * 2. Two-Step — swap to bridgeable token on source → bridge → swap on dest
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const bridge = new CrossChainBridge({ provider: okxProvider });
16
+ *
17
+ * // Get quote: Base USDC → X Layer USDC
18
+ * const quote = await bridge.getQuote({
19
+ * fromChainIndex: '8453',
20
+ * toChainIndex: '196',
21
+ * fromTokenAddress: USDC_BASE,
22
+ * toTokenAddress: USDC_XLAYER,
23
+ * amount: '1000000', // 1 USDC
24
+ * });
25
+ *
26
+ * // Execute bridge (requires signer)
27
+ * const result = await bridge.execute(quote, walletClient);
28
+ * ```
29
+ */
30
+ Object.defineProperty(exports, "__esModule", { value: true });
31
+ exports.CrossChainBridge = void 0;
32
+ const logger_1 = require("../logger");
33
+ // ─── Chain Constants ────────────────────────────────────────────────
34
+ const CHAIN_INFO = {
35
+ '42220': { name: 'Celo', nativeSymbol: 'CELO', nativeAddress: '0x471EcE3750Da237f93B8E339c536989b8978a438' },
36
+ '1': { name: 'Ethereum', nativeSymbol: 'ETH', nativeAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' },
37
+ '137': { name: 'Polygon', nativeSymbol: 'MATIC', nativeAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' },
38
+ '42161': { name: 'Arbitrum', nativeSymbol: 'ETH', nativeAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' },
39
+ '10': { name: 'Optimism', nativeSymbol: 'ETH', nativeAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' },
40
+ '8453': { name: 'Base', nativeSymbol: 'ETH', nativeAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' },
41
+ '196': { name: 'X Layer', nativeSymbol: 'OKB', nativeAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' },
42
+ '56': { name: 'BNB Chain', nativeSymbol: 'BNB', nativeAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' },
43
+ '43114': { name: 'Avalanche', nativeSymbol: 'AVAX', nativeAddress: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' },
44
+ '501': { name: 'Solana', nativeSymbol: 'SOL', nativeAddress: '11111111111111111111111111111111' },
45
+ };
46
+ /** USDC addresses on chains where we support bridging. */
47
+ const USDC_ADDRESSES = {
48
+ '42220': '0xcebA9300f2b948710d2653dD7B07f33A8B32118C',
49
+ '1': '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
50
+ '137': '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
51
+ '42161': '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
52
+ '10': '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
53
+ '8453': '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
54
+ '196': '0x74b7f16337b8972027f6196a17a631ac6de26d22',
55
+ };
56
+ class CrossChainBridge {
57
+ provider;
58
+ logger;
59
+ constructor(config) {
60
+ this.provider = config.provider;
61
+ this.logger = config.logger ?? logger_1.noopLogger;
62
+ }
63
+ // ── Supported Routes ────────────────────────────────────────────
64
+ /** Get all chains supported for cross-chain bridging. */
65
+ getSupportedChains() {
66
+ return Object.entries(CHAIN_INFO).map(([chainIndex, info]) => ({
67
+ chainIndex,
68
+ name: info.name,
69
+ nativeSymbol: info.nativeSymbol,
70
+ hasUsdc: chainIndex in USDC_ADDRESSES,
71
+ }));
72
+ }
73
+ /** Get USDC address on a given chain, or null if not supported. */
74
+ getUsdcAddress(chainIndex) {
75
+ return USDC_ADDRESSES[chainIndex] ?? null;
76
+ }
77
+ /** Check if a route is supported (both chains must be in our registry). */
78
+ isRouteSupported(fromChainIndex, toChainIndex) {
79
+ return fromChainIndex in CHAIN_INFO && toChainIndex in CHAIN_INFO && fromChainIndex !== toChainIndex;
80
+ }
81
+ // ── Quote ──────────────────────────────────────────────────────
82
+ /**
83
+ * Get a bridge quote for cross-chain transfer.
84
+ *
85
+ * Strategy:
86
+ * 1. Try OnchainOS cross-chain API (aggregated bridges)
87
+ * 2. If unavailable, compute a two-step route:
88
+ * Source chain DEX swap → Bridge via USDC → Dest chain DEX swap
89
+ */
90
+ async getQuote(params) {
91
+ if (!this.isRouteSupported(params.fromChainIndex, params.toChainIndex)) {
92
+ throw new Error(`Unsupported bridge route: ${params.fromChainIndex} → ${params.toChainIndex}`);
93
+ }
94
+ this.logger(`Bridge quote: ${CHAIN_INFO[params.fromChainIndex]?.name} → ${CHAIN_INFO[params.toChainIndex]?.name}`);
95
+ // Strategy 1: Try OnchainOS cross-chain API
96
+ try {
97
+ return await this.getCrossChainQuote(params);
98
+ }
99
+ catch (e) {
100
+ this.logger(`OnchainOS cross-chain unavailable, using two-step route`);
101
+ }
102
+ // Strategy 2: Two-step via USDC bridge
103
+ return this.getTwoStepQuote(params);
104
+ }
105
+ /**
106
+ * Get a bridge quote using OnchainOS cross-chain API.
107
+ * This aggregates multiple bridges (Stargate, Across, Celer, etc.)
108
+ */
109
+ async getCrossChainQuote(params) {
110
+ // Use the v5 cross-chain API (when available on upgraded plans)
111
+ const queryParams = {
112
+ fromChainId: params.fromChainIndex,
113
+ toChainId: params.toChainIndex,
114
+ fromTokenAddress: params.fromTokenAddress,
115
+ toTokenAddress: params.toTokenAddress,
116
+ amount: params.amount,
117
+ slippagePercent: params.slippagePercent ?? '1',
118
+ };
119
+ if (params.userWalletAddress) {
120
+ queryParams.userWalletAddress = params.userWalletAddress;
121
+ }
122
+ // This calls the OnchainOS cross-chain endpoint
123
+ // Currently requires upgraded API plan
124
+ const result = await this.provider.request('GET', '/api/v5/dex/cross-chain/quote', queryParams);
125
+ const data = Array.isArray(result) ? result[0] : result;
126
+ return {
127
+ route: {
128
+ bridgeName: data.bridgeName ?? 'OnchainOS Bridge',
129
+ steps: [
130
+ {
131
+ type: 'bridge',
132
+ chainIndex: params.fromChainIndex,
133
+ protocol: data.bridgeName ?? 'aggregated',
134
+ fromToken: params.fromTokenAddress,
135
+ toToken: params.toTokenAddress,
136
+ amount: params.amount,
137
+ },
138
+ ],
139
+ description: `${CHAIN_INFO[params.fromChainIndex]?.name} → ${CHAIN_INFO[params.toChainIndex]?.name} via ${data.bridgeName ?? 'OnchainOS'}`,
140
+ },
141
+ toTokenAmount: data.toTokenAmount ?? data.receiveAmount ?? '0',
142
+ fromToken: {
143
+ symbol: data.fromToken?.tokenSymbol ?? 'UNKNOWN',
144
+ decimals: parseInt(data.fromToken?.decimal ?? '18'),
145
+ address: params.fromTokenAddress,
146
+ },
147
+ toToken: {
148
+ symbol: data.toToken?.tokenSymbol ?? 'UNKNOWN',
149
+ decimals: parseInt(data.toToken?.decimal ?? '18'),
150
+ address: params.toTokenAddress,
151
+ },
152
+ estimatedFeeUsd: data.estimateFee ?? '0',
153
+ estimatedTimeSeconds: parseInt(data.estimateTime ?? '300'),
154
+ minReceiveAmount: data.minReceiveAmount ?? data.receiveAmount ?? '0',
155
+ tx: data.tx ? {
156
+ from: data.tx.from,
157
+ to: data.tx.to,
158
+ data: data.tx.data,
159
+ value: data.tx.value ?? '0',
160
+ gas: data.tx.gas ?? '300000',
161
+ gasPrice: data.tx.gasPrice ?? '0',
162
+ chainId: params.fromChainIndex,
163
+ } : undefined,
164
+ };
165
+ }
166
+ /**
167
+ * Get a two-step bridge quote:
168
+ * 1. Swap source token → USDC on source chain (if needed)
169
+ * 2. Bridge USDC across chains (estimated)
170
+ * 3. Swap USDC → target token on dest chain (if needed)
171
+ */
172
+ async getTwoStepQuote(params) {
173
+ const sourceUsdc = USDC_ADDRESSES[params.fromChainIndex];
174
+ const destUsdc = USDC_ADDRESSES[params.toChainIndex];
175
+ const steps = [];
176
+ let currentAmount = params.amount;
177
+ let usdcAmount = currentAmount;
178
+ // Step 1: If source token is NOT USDC, swap to USDC first
179
+ const isSourceUsdc = params.fromTokenAddress.toLowerCase() === sourceUsdc?.toLowerCase();
180
+ if (!isSourceUsdc && sourceUsdc) {
181
+ try {
182
+ const swapQuote = await this.provider.getQuote({
183
+ chainIndex: params.fromChainIndex,
184
+ fromTokenAddress: params.fromTokenAddress,
185
+ toTokenAddress: sourceUsdc,
186
+ amount: currentAmount,
187
+ });
188
+ usdcAmount = swapQuote.toTokenAmount;
189
+ steps.push({
190
+ type: 'swap',
191
+ chainIndex: params.fromChainIndex,
192
+ protocol: swapQuote.dexRouterList?.[0]?.dexProtocol?.dexName ?? 'DEX',
193
+ fromToken: params.fromTokenAddress,
194
+ toToken: sourceUsdc,
195
+ amount: currentAmount,
196
+ });
197
+ this.logger(`Step 1: Swap on ${CHAIN_INFO[params.fromChainIndex]?.name}: ${currentAmount} → ${usdcAmount} USDC`);
198
+ }
199
+ catch {
200
+ // If swap quote fails, pass through
201
+ usdcAmount = currentAmount;
202
+ }
203
+ }
204
+ // Step 2: Bridge USDC across chains
205
+ steps.push({
206
+ type: 'bridge',
207
+ chainIndex: params.fromChainIndex,
208
+ protocol: 'USDC Native Bridge',
209
+ fromToken: sourceUsdc ?? params.fromTokenAddress,
210
+ toToken: destUsdc ?? params.toTokenAddress,
211
+ amount: usdcAmount,
212
+ });
213
+ // Estimate bridge fee (~0.1% + gas)
214
+ const bridgeFeeRate = 0.001;
215
+ const afterBridge = Math.floor(Number(usdcAmount) * (1 - bridgeFeeRate)).toString();
216
+ this.logger(`Step 2: Bridge ${usdcAmount} USDC → ${CHAIN_INFO[params.toChainIndex]?.name}`);
217
+ // Step 3: If destination token is NOT USDC, swap on destination
218
+ let finalAmount = afterBridge;
219
+ const isDestUsdc = params.toTokenAddress.toLowerCase() === destUsdc?.toLowerCase();
220
+ if (!isDestUsdc && destUsdc) {
221
+ try {
222
+ const destSwapQuote = await this.provider.getQuote({
223
+ chainIndex: params.toChainIndex,
224
+ fromTokenAddress: destUsdc,
225
+ toTokenAddress: params.toTokenAddress,
226
+ amount: afterBridge,
227
+ });
228
+ finalAmount = destSwapQuote.toTokenAmount;
229
+ steps.push({
230
+ type: 'swap',
231
+ chainIndex: params.toChainIndex,
232
+ protocol: destSwapQuote.dexRouterList?.[0]?.dexProtocol?.dexName ?? 'DEX',
233
+ fromToken: destUsdc,
234
+ toToken: params.toTokenAddress,
235
+ amount: afterBridge,
236
+ });
237
+ this.logger(`Step 3: Swap on ${CHAIN_INFO[params.toChainIndex]?.name}: ${afterBridge} USDC → ${finalAmount}`);
238
+ }
239
+ catch {
240
+ finalAmount = afterBridge;
241
+ }
242
+ }
243
+ const fromInfo = CHAIN_INFO[params.fromChainIndex];
244
+ const toInfo = CHAIN_INFO[params.toChainIndex];
245
+ return {
246
+ route: {
247
+ bridgeName: 'Two-Step Bridge (Swap → Bridge → Swap)',
248
+ steps,
249
+ description: `${fromInfo?.name} → USDC Bridge → ${toInfo?.name}`,
250
+ },
251
+ toTokenAmount: finalAmount,
252
+ fromToken: {
253
+ symbol: isSourceUsdc ? 'USDC' : fromInfo?.nativeSymbol ?? 'UNKNOWN',
254
+ decimals: isSourceUsdc ? 6 : 18,
255
+ address: params.fromTokenAddress,
256
+ },
257
+ toToken: {
258
+ symbol: isDestUsdc ? 'USDC' : toInfo?.nativeSymbol ?? 'UNKNOWN',
259
+ decimals: isDestUsdc ? 6 : 18,
260
+ address: params.toTokenAddress,
261
+ },
262
+ estimatedFeeUsd: (Number(usdcAmount) * bridgeFeeRate / 1e6).toFixed(4),
263
+ estimatedTimeSeconds: 300, // ~5 minutes typical
264
+ minReceiveAmount: Math.floor(Number(finalAmount) * 0.99).toString(), // 1% slippage
265
+ };
266
+ }
267
+ // ── Convenience Methods ────────────────────────────────────────
268
+ /**
269
+ * Quick bridge: USDC between any two supported chains.
270
+ * Simplest cross-chain transfer — USDC in, USDC out.
271
+ */
272
+ async bridgeUsdc(fromChainIndex, toChainIndex, amount, userWalletAddress) {
273
+ const fromUsdc = USDC_ADDRESSES[fromChainIndex];
274
+ const toUsdc = USDC_ADDRESSES[toChainIndex];
275
+ if (!fromUsdc || !toUsdc) {
276
+ throw new Error(`USDC not supported on chain ${!fromUsdc ? fromChainIndex : toChainIndex}`);
277
+ }
278
+ return this.getQuote({
279
+ fromChainIndex,
280
+ toChainIndex,
281
+ fromTokenAddress: fromUsdc,
282
+ toTokenAddress: toUsdc,
283
+ amount,
284
+ userWalletAddress,
285
+ });
286
+ }
287
+ /**
288
+ * Bridge native token from one chain to another.
289
+ * e.g. ETH (Base) → OKB (X Layer)
290
+ */
291
+ async bridgeNative(fromChainIndex, toChainIndex, amount, userWalletAddress) {
292
+ const fromNative = CHAIN_INFO[fromChainIndex]?.nativeAddress;
293
+ const toNative = CHAIN_INFO[toChainIndex]?.nativeAddress;
294
+ if (!fromNative || !toNative) {
295
+ throw new Error(`Chain not supported: ${fromChainIndex} or ${toChainIndex}`);
296
+ }
297
+ return this.getQuote({
298
+ fromChainIndex,
299
+ toChainIndex,
300
+ fromTokenAddress: fromNative,
301
+ toTokenAddress: toNative,
302
+ amount,
303
+ userWalletAddress,
304
+ });
305
+ }
306
+ /**
307
+ * Get estimated bridge time between two chains (seconds).
308
+ */
309
+ getEstimatedTime(fromChainIndex, toChainIndex) {
310
+ // L2 → L2 (and Celo L1-with-fast-finality) is fastest (~2-5 min)
311
+ const l2s = ['42220', '8453', '42161', '10', '196'];
312
+ if (l2s.includes(fromChainIndex) && l2s.includes(toChainIndex)) {
313
+ return 180; // 3 minutes
314
+ }
315
+ // L1 → L2 or L2 → L1
316
+ if (fromChainIndex === '1' || toChainIndex === '1') {
317
+ return 600; // 10 minutes
318
+ }
319
+ return 300; // 5 minutes default
320
+ }
321
+ }
322
+ exports.CrossChainBridge = CrossChainBridge;
323
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../../src/providers/bridge.ts"],"names":[],"mappings":"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"}