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,210 @@
1
+ "use strict";
2
+ /**
3
+ * OnchainOS API Provider for envoy
4
+ *
5
+ * Provides DEX aggregation (400+ DEX sources), gas estimation,
6
+ * and transaction broadcast via OKX OnchainOS infrastructure.
7
+ *
8
+ * This is an OPTIONAL provider — all existing direct viem/Uniswap
9
+ * flows continue to work unchanged.
10
+ *
11
+ * @see https://web3.okx.com/onchainos/dev-docs/trade/dex-api-introduction
12
+ */
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.OnchainOSProvider = void 0;
48
+ exports.createOnchainOSFromEnv = createOnchainOSFromEnv;
49
+ const crypto = __importStar(require("crypto"));
50
+ const https = __importStar(require("https"));
51
+ const logger_1 = require("../logger");
52
+ // ─── OnchainOS Provider ────────────────────────────────────────────
53
+ class OnchainOSProvider {
54
+ apiKey;
55
+ secretKey;
56
+ passphrase;
57
+ logger;
58
+ baseUrl = 'https://web3.okx.com';
59
+ constructor(config) {
60
+ this.apiKey = config.apiKey;
61
+ this.secretKey = config.secretKey;
62
+ this.passphrase = config.passphrase;
63
+ this.logger = config.logger ?? logger_1.noopLogger;
64
+ }
65
+ // ── Auth ─────────────────────────────────────────────────────────
66
+ sign(method, requestPath, queryString = '', body = '') {
67
+ const timestamp = new Date().toISOString();
68
+ const preHash = timestamp + method + requestPath + (method === 'GET' ? queryString : body);
69
+ const signature = crypto
70
+ .createHmac('sha256', this.secretKey)
71
+ .update(preHash)
72
+ .digest('base64');
73
+ return {
74
+ 'Content-Type': 'application/json',
75
+ 'OK-ACCESS-KEY': this.apiKey,
76
+ 'OK-ACCESS-SIGN': signature,
77
+ 'OK-ACCESS-TIMESTAMP': timestamp,
78
+ 'OK-ACCESS-PASSPHRASE': this.passphrase,
79
+ };
80
+ }
81
+ async request(method, path, params, body) {
82
+ return new Promise((resolve, reject) => {
83
+ const queryString = params
84
+ ? '?' + Object.entries(params).map(([k, v]) => `${k}=${encodeURIComponent(v)}`).join('&')
85
+ : '';
86
+ const bodyStr = body ? JSON.stringify(body) : '';
87
+ const headers = this.sign(method, path, queryString, bodyStr);
88
+ const options = {
89
+ hostname: 'web3.okx.com',
90
+ path: path + (method === 'GET' ? queryString : ''),
91
+ method,
92
+ headers,
93
+ };
94
+ this.logger(`OnchainOS ${method} ${path}${queryString}`);
95
+ const req = https.request(options, (res) => {
96
+ let data = '';
97
+ res.on('data', (chunk) => (data += chunk));
98
+ res.on('end', () => {
99
+ try {
100
+ const parsed = JSON.parse(data);
101
+ if (parsed.code === '0') {
102
+ resolve(parsed.data);
103
+ }
104
+ else {
105
+ reject(new Error(`OnchainOS API error ${parsed.code}: ${parsed.msg}`));
106
+ }
107
+ }
108
+ catch (e) {
109
+ reject(new Error(`OnchainOS parse error: ${data.substring(0, 200)}`));
110
+ }
111
+ });
112
+ });
113
+ req.on('error', reject);
114
+ if (method === 'POST' && bodyStr)
115
+ req.write(bodyStr);
116
+ req.end();
117
+ });
118
+ }
119
+ // ── DEX Aggregator ───────────────────────────────────────────────
120
+ /** Get all chains supported by the DEX aggregator. */
121
+ async getSupportedChains() {
122
+ return this.request('GET', '/api/v6/dex/aggregator/supported/chain');
123
+ }
124
+ /**
125
+ * Get a price quote for a token swap (no calldata — read-only).
126
+ * Routes through 400+ DEX sources for optimal pricing.
127
+ */
128
+ async getQuote(params) {
129
+ const result = await this.request('GET', '/api/v6/dex/aggregator/quote', {
130
+ chainIndex: params.chainIndex,
131
+ amount: params.amount,
132
+ fromTokenAddress: params.fromTokenAddress,
133
+ toTokenAddress: params.toTokenAddress,
134
+ ...(params.slippagePercent ? { slippagePercent: params.slippagePercent } : {}),
135
+ });
136
+ return result[0]?.routerResult ?? result[0];
137
+ }
138
+ /**
139
+ * Get swap transaction calldata for execution.
140
+ * Returns ready-to-sign transaction data.
141
+ */
142
+ async getSwapData(params) {
143
+ const result = await this.request('GET', '/api/v6/dex/aggregator/swap', {
144
+ chainIndex: params.chainIndex,
145
+ amount: params.amount,
146
+ fromTokenAddress: params.fromTokenAddress,
147
+ toTokenAddress: params.toTokenAddress,
148
+ userWalletAddress: params.userWalletAddress,
149
+ slippagePercent: params.slippagePercent ?? '0.5',
150
+ });
151
+ return result[0];
152
+ }
153
+ // ── Gas ──────────────────────────────────────────────────────────
154
+ /** Get current gas price for a chain. */
155
+ async getGasPrice(chainIndex) {
156
+ const result = await this.request('POST', '/api/v6/dex/pre-transaction/gas-price', undefined, { chainIndex });
157
+ return result[0];
158
+ }
159
+ // ── Wallet Balance ───────────────────────────────────────────────
160
+ /**
161
+ * Get total token balances for an address across a chain.
162
+ * Uses OnchainOS infrastructure — no direct RPC needed.
163
+ */
164
+ async getBalances(address, chainIndex) {
165
+ return this.request('GET', '/api/v6/wallet/asset/all-token-balances', {
166
+ address,
167
+ chainIndex,
168
+ });
169
+ }
170
+ // ── Tx History ───────────────────────────────────────────────────
171
+ /** Get transaction history for an address. */
172
+ async getTxHistory(address, chainIndex, limit = '20') {
173
+ return this.request('GET', '/api/v6/wallet/post-transaction/transactions-by-address', {
174
+ address,
175
+ chainIndex,
176
+ limit,
177
+ });
178
+ }
179
+ // ── Health Check ─────────────────────────────────────────────────
180
+ /**
181
+ * Test API connectivity — returns the number of supported DEX chains.
182
+ * Useful for verifying credentials at startup.
183
+ */
184
+ async healthCheck() {
185
+ try {
186
+ const chains = await this.getSupportedChains();
187
+ const xlayer = chains.some((c) => c.chainIndex === '196');
188
+ return { ok: true, chains: chains.length, xlayer };
189
+ }
190
+ catch {
191
+ return { ok: false, chains: 0, xlayer: false };
192
+ }
193
+ }
194
+ }
195
+ exports.OnchainOSProvider = OnchainOSProvider;
196
+ // ─── Factory ───────────────────────────────────────────────────────
197
+ /**
198
+ * Create an OnchainOS provider from environment variables.
199
+ * Expects: OKX_API_KEY, OKX_SECRET_KEY, OKX_PASSPHRASE
200
+ */
201
+ function createOnchainOSFromEnv(logger) {
202
+ const apiKey = process.env.OKX_API_KEY;
203
+ const secretKey = process.env.OKX_SECRET_KEY;
204
+ const passphrase = process.env.OKX_PASSPHRASE;
205
+ if (!apiKey || !secretKey || !passphrase) {
206
+ return null;
207
+ }
208
+ return new OnchainOSProvider({ apiKey, secretKey, passphrase, logger });
209
+ }
210
+ //# sourceMappingURL=onchainos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onchainos.js","sourceRoot":"","sources":["../../../src/providers/onchainos.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /**
3
+ * EIP-681 — Ethereum Payment URI builder.
4
+ *
5
+ * Generates URIs per EIP-681 standard for requesting ETH or ERC-20 payments.
6
+ * These URIs can be embedded in QR codes or shared as links.
7
+ *
8
+ * @see https://eips.ethereum.org/EIPS/eip-681
9
+ *
10
+ * @example
11
+ * ```
12
+ * // Native ETH payment
13
+ * ethereum:0xABC...?value=1e18
14
+ *
15
+ * // ERC-20 USDC transfer
16
+ * ethereum:0xUSDC_CONTRACT/transfer?address=0xABC...&uint256=500000
17
+ * ```
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.buildEip681Uri = buildEip681Uri;
21
+ /**
22
+ * Build an EIP-681 payment URI.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * // Native ETH
27
+ * buildEip681Uri({ to: '0xABC...', amount: '1.5' });
28
+ * // => 'ethereum:0xABC...?value=1500000000000000000'
29
+ *
30
+ * // USDC on Base
31
+ * buildEip681Uri({
32
+ * to: '0xABC...',
33
+ * amount: '10',
34
+ * asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
35
+ * chainId: 8453,
36
+ * decimals: 6,
37
+ * });
38
+ * // => 'ethereum:0x833589.../transfer?address=0xABC...&uint256=10000000&chainId=8453'
39
+ * ```
40
+ */
41
+ function buildEip681Uri(options) {
42
+ const { to, amount, asset, chainId, decimals } = options;
43
+ const isNative = !asset || asset === 'ETH' || asset === 'eth';
44
+ // EIP-681 carries the chain id in the PATH as `@<chainId>` (right after the
45
+ // target address) — NOT as a query param. A non-standard `?chainId=` is
46
+ // silently ignored by wallets, which then default to Ethereum mainnet and
47
+ // prompt to send on the WRONG chain. The `@<chainId>` form is what makes a
48
+ // Celo (42220) QR actually open as a Celo payment.
49
+ const chainSuffix = chainId && chainId !== 1 ? `@${chainId}` : '';
50
+ if (isNative) {
51
+ // Native: ethereum:<address>[@<chainId>]?value=<wei>
52
+ const d = decimals ?? 18;
53
+ const weiAmount = toAtomicUnits(amount, d);
54
+ const params = new URLSearchParams();
55
+ params.set('value', weiAmount);
56
+ return `ethereum:${to}${chainSuffix}?${params.toString()}`;
57
+ }
58
+ // ERC-20: ethereum:<token>[@<chainId>]/transfer?address=<recipient>&uint256=<amount>
59
+ const d = decimals ?? 6;
60
+ const atomicAmount = toAtomicUnits(amount, d);
61
+ const params = new URLSearchParams();
62
+ params.set('address', to);
63
+ params.set('uint256', atomicAmount);
64
+ return `ethereum:${asset}${chainSuffix}/transfer?${params.toString()}`;
65
+ }
66
+ /**
67
+ * Convert a human-readable amount to atomic units.
68
+ */
69
+ function toAtomicUnits(amount, decimals) {
70
+ const parts = amount.split('.');
71
+ const whole = parts[0] || '0';
72
+ const frac = (parts[1] || '').padEnd(decimals, '0').slice(0, decimals);
73
+ const combined = whole + frac;
74
+ // Remove leading zeros
75
+ return combined.replace(/^0+/, '') || '0';
76
+ }
77
+ //# sourceMappingURL=eip681.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eip681.js","sourceRoot":"","sources":["../../../src/requests/eip681.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;AAmCH,wCA2BC;AA/CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,cAAc,CAAC,OAAsB;IACnD,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,CAAC;IAE9D,4EAA4E;IAC5E,wEAAwE;IACxE,0EAA0E;IAC1E,2EAA2E;IAC3E,mDAAmD;IACnD,MAAM,WAAW,GAAG,OAAO,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAElE,IAAI,QAAQ,EAAE,CAAC;QACb,qDAAqD;QACrD,MAAM,CAAC,GAAG,QAAQ,IAAI,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC/B,OAAO,YAAY,EAAE,GAAG,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC7D,CAAC;IAED,qFAAqF;IACrF,MAAM,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC;IACxB,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACpC,OAAO,YAAY,KAAK,GAAG,WAAW,aAAa,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAc,EAAE,QAAgB;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC9B,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;IAC9B,uBAAuB;IACvB,OAAO,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildPaymentUri = exports.buildSolanaPayUri = exports.buildSep7Uri = exports.buildEip681Uri = void 0;
4
+ /**
5
+ * envoy — Payment Request URIs
6
+ *
7
+ * Generate chain-specific payment request URIs for receiving payments.
8
+ * Supports EIP-681 (EVM), SEP-7 (Stellar), and Solana Pay.
9
+ */
10
+ var eip681_1 = require("./eip681");
11
+ Object.defineProperty(exports, "buildEip681Uri", { enumerable: true, get: function () { return eip681_1.buildEip681Uri; } });
12
+ var sep7_1 = require("./sep7");
13
+ Object.defineProperty(exports, "buildSep7Uri", { enumerable: true, get: function () { return sep7_1.buildSep7Uri; } });
14
+ var solana_pay_1 = require("./solana-pay");
15
+ Object.defineProperty(exports, "buildSolanaPayUri", { enumerable: true, get: function () { return solana_pay_1.buildSolanaPayUri; } });
16
+ var universal_1 = require("./universal");
17
+ Object.defineProperty(exports, "buildPaymentUri", { enumerable: true, get: function () { return universal_1.buildPaymentUri; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/requests/index.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,mCAA8D;AAArD,wGAAA,cAAc,OAAA;AACvB,+BAAwD;AAA/C,oGAAA,YAAY,OAAA;AACrB,2CAAwE;AAA/D,+GAAA,iBAAiB,OAAA;AAC1B,yCAA+E;AAAtE,4GAAA,eAAe,OAAA"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * SEP-7 — Stellar Payment URI builder.
4
+ *
5
+ * Generates `web+stellar:` URIs per SEP-0007 for requesting
6
+ * XLM or custom asset payments on Stellar.
7
+ *
8
+ * @see https://github.com/nicohman/sep-0007
9
+ *
10
+ * @example
11
+ * ```
12
+ * web+stellar:pay?destination=GABCD...&amount=100&asset_code=USDC&asset_issuer=GA5Z...&memo=invoice123
13
+ * ```
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.buildSep7Uri = buildSep7Uri;
17
+ /**
18
+ * Build a SEP-7 Stellar payment URI.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * // Native XLM
23
+ * buildSep7Uri({ destination: 'GABCD...', amount: '100' });
24
+ * // => 'web+stellar:pay?destination=GABCD...&amount=100'
25
+ *
26
+ * // USDC on Stellar
27
+ * buildSep7Uri({
28
+ * destination: 'GABCD...',
29
+ * amount: '50',
30
+ * assetCode: 'USDC',
31
+ * assetIssuer: 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN',
32
+ * memo: 'invoice-42',
33
+ * });
34
+ * ```
35
+ */
36
+ function buildSep7Uri(options) {
37
+ const params = new URLSearchParams();
38
+ params.set('destination', options.destination);
39
+ params.set('amount', options.amount);
40
+ const isNative = !options.assetCode || options.assetCode === 'XLM';
41
+ if (!isNative) {
42
+ params.set('asset_code', options.assetCode);
43
+ if (options.assetIssuer) {
44
+ params.set('asset_issuer', options.assetIssuer);
45
+ }
46
+ }
47
+ if (options.memo) {
48
+ params.set('memo', options.memo);
49
+ params.set('memo_type', options.memoType ?? 'MEMO_TEXT');
50
+ }
51
+ if (options.callback)
52
+ params.set('callback', options.callback);
53
+ if (options.msg)
54
+ params.set('msg', options.msg);
55
+ if (options.networkPassphrase)
56
+ params.set('network_passphrase', options.networkPassphrase);
57
+ if (options.originDomain)
58
+ params.set('origin_domain', options.originDomain);
59
+ return `web+stellar:pay?${params.toString()}`;
60
+ }
61
+ //# sourceMappingURL=sep7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sep7.js","sourceRoot":"","sources":["../../../src/requests/sep7.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AA4CH,oCA0BC;AA7CD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,YAAY,CAAC,OAAoB;IAC/C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IAErC,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC;IAEnE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,SAAU,CAAC,CAAC;QAC7C,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,GAAG;QAAE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,iBAAiB;QAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3F,IAAI,OAAO,CAAC,YAAY;QAAE,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAE5E,OAAO,mBAAmB,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /**
3
+ * Solana Pay — Payment URI builder.
4
+ *
5
+ * Generates `solana:` URIs per the Solana Pay specification
6
+ * for requesting SOL or SPL token payments.
7
+ *
8
+ * @see https://docs.solanapay.com/spec
9
+ *
10
+ * @example
11
+ * ```
12
+ * solana:7abc...?amount=1.5&spl-token=EPjFW...&reference=ref123&label=MyStore&message=Order42
13
+ * ```
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.buildSolanaPayUri = buildSolanaPayUri;
17
+ /**
18
+ * Build a Solana Pay payment URI.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * // Native SOL
23
+ * buildSolanaPayUri({ recipient: '7abc...', amount: '1.5' });
24
+ * // => 'solana:7abc...?amount=1.5'
25
+ *
26
+ * // USDC SPL token
27
+ * buildSolanaPayUri({
28
+ * recipient: '7abc...',
29
+ * amount: '25.00',
30
+ * splToken: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
31
+ * label: 'envoy',
32
+ * message: 'Agent service payment',
33
+ * });
34
+ * ```
35
+ */
36
+ function buildSolanaPayUri(options) {
37
+ const params = new URLSearchParams();
38
+ params.set('amount', options.amount);
39
+ if (options.splToken)
40
+ params.set('spl-token', options.splToken);
41
+ if (options.reference)
42
+ params.set('reference', options.reference);
43
+ if (options.label)
44
+ params.set('label', options.label);
45
+ if (options.message)
46
+ params.set('message', options.message);
47
+ if (options.memo)
48
+ params.set('memo', options.memo);
49
+ return `solana:${options.recipient}?${params.toString()}`;
50
+ }
51
+ //# sourceMappingURL=solana-pay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-pay.js","sourceRoot":"","sources":["../../../src/requests/solana-pay.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAsCH,8CAYC;AA/BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,iBAAiB,CAAC,OAAyB;IACzD,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IAErC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC,IAAI,OAAO,CAAC,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,OAAO,CAAC,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,OAAO,UAAU,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildPaymentUri = buildPaymentUri;
4
+ /**
5
+ * Universal Payment URI builder — auto-detects chain and generates
6
+ * the appropriate payment URI format.
7
+ */
8
+ const eip681_1 = require("./eip681");
9
+ const sep7_1 = require("./sep7");
10
+ const solana_pay_1 = require("./solana-pay");
11
+ /**
12
+ * Build a payment URI for any supported chain.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const uri = buildPaymentUri({
17
+ * chain: 'evm',
18
+ * evm: { to: '0x...', amount: '0.5', chainId: 8453 },
19
+ * });
20
+ * ```
21
+ */
22
+ function buildPaymentUri(options) {
23
+ switch (options.chain) {
24
+ case 'evm':
25
+ if (!options.evm)
26
+ throw new Error('EVM options required for chain=evm');
27
+ return (0, eip681_1.buildEip681Uri)(options.evm);
28
+ case 'stellar':
29
+ if (!options.stellar)
30
+ throw new Error('Stellar options required for chain=stellar');
31
+ return (0, sep7_1.buildSep7Uri)(options.stellar);
32
+ case 'solana':
33
+ if (!options.solana)
34
+ throw new Error('Solana options required for chain=solana');
35
+ return (0, solana_pay_1.buildSolanaPayUri)(options.solana);
36
+ default:
37
+ throw new Error(`Unsupported chain: ${options.chain}`);
38
+ }
39
+ }
40
+ //# sourceMappingURL=universal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"universal.js","sourceRoot":"","sources":["../../../src/requests/universal.ts"],"names":[],"mappings":";;AA4BA,0CAcC;AA1CD;;;GAGG;AACH,qCAA8D;AAC9D,iCAAwD;AACxD,6CAAwE;AAWxE;;;;;;;;;;GAUG;AACH,SAAgB,eAAe,CAAC,OAAmC;IACjE,QAAQ,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,KAAK;YACR,IAAI,CAAC,OAAO,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACxE,OAAO,IAAA,uBAAc,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,KAAK,SAAS;YACZ,IAAI,CAAC,OAAO,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACpF,OAAO,IAAA,mBAAY,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACjF,OAAO,IAAA,8BAAiB,EAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C;YACE,MAAM,IAAI,KAAK,CAAC,sBAAsB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildReceipt = exports.createWebhookHandler = exports.createPaymentGate = exports.createMppGate = exports.createX402Gate = void 0;
4
+ /**
5
+ * envoy — Server-Side Payment Gating
6
+ *
7
+ * Express/Connect-compatible middleware for monetizing API endpoints.
8
+ * Supports both x402 and MPP (Machine Payment Protocol) standards.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { createPaymentGate } from 'envoy-pay/server';
13
+ *
14
+ * app.post('/api/premium',
15
+ * createPaymentGate({
16
+ * payTo: '0xYOUR_WALLET',
17
+ * amount: '500000', // 0.50 USDC
18
+ * asset: 'USDC',
19
+ * network: 'eip155:8453',
20
+ * }),
21
+ * (req, res) => { res.json({ data: 'premium content' }); }
22
+ * );
23
+ * ```
24
+ */
25
+ var x402_gate_1 = require("./x402-gate");
26
+ Object.defineProperty(exports, "createX402Gate", { enumerable: true, get: function () { return x402_gate_1.createX402Gate; } });
27
+ var mpp_gate_1 = require("./mpp-gate");
28
+ Object.defineProperty(exports, "createMppGate", { enumerable: true, get: function () { return mpp_gate_1.createMppGate; } });
29
+ var payment_gate_1 = require("./payment-gate");
30
+ Object.defineProperty(exports, "createPaymentGate", { enumerable: true, get: function () { return payment_gate_1.createPaymentGate; } });
31
+ var webhook_1 = require("./webhook");
32
+ Object.defineProperty(exports, "createWebhookHandler", { enumerable: true, get: function () { return webhook_1.createWebhookHandler; } });
33
+ var receipt_1 = require("./receipt");
34
+ Object.defineProperty(exports, "buildReceipt", { enumerable: true, get: function () { return receipt_1.buildReceipt; } });
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,yCAAkF;AAAzE,2GAAA,cAAc,OAAA;AACvB,uCAA+D;AAAtD,yGAAA,aAAa,OAAA;AACtB,+CAA2E;AAAlE,iHAAA,iBAAiB,OAAA;AAC1B,qCAAqE;AAA5D,+GAAA,oBAAoB,OAAA;AAC7B,qCAAmF;AAA1E,uGAAA,YAAY,OAAA"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMppGate = createMppGate;
4
+ const logger_1 = require("../logger");
5
+ let challengeCounter = 0;
6
+ /**
7
+ * Generate a unique challenge ID.
8
+ */
9
+ function generateChallengeId() {
10
+ challengeCounter++;
11
+ return `ch_${Date.now()}_${challengeCounter}`;
12
+ }
13
+ /**
14
+ * Creates an Express/Connect middleware that gates access behind MPP payments.
15
+ *
16
+ * When a request lacks a valid `Authorization: Payment` header, the middleware
17
+ * responds with 402 and a `WWW-Authenticate: Payment` challenge header.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * app.post('/api/premium', createMppGate({
22
+ * realm: 'api.example.com',
23
+ * method: 'stripe',
24
+ * amount: '50',
25
+ * currency: 'usd',
26
+ * recipient: 'acct_xxx',
27
+ * }), handler);
28
+ * ```
29
+ */
30
+ function createMppGate(config) {
31
+ const log = config.logger ?? logger_1.noopLogger;
32
+ const intent = config.intent ?? 'payment';
33
+ const currency = config.currency ?? 'usd';
34
+ const decimals = config.decimals ?? 2;
35
+ const ttlMs = config.ttlMs ?? 300000;
36
+ return async (req, res, next) => {
37
+ // Check for Authorization: Payment header
38
+ const authHeader = req.headers['authorization'];
39
+ if (!authHeader || !authHeader.startsWith('Payment ')) {
40
+ // No credential — return 402 with WWW-Authenticate challenge
41
+ log('[mpp-gate] 💰 No Authorization: Payment — returning 402 challenge');
42
+ const challengeId = generateChallengeId();
43
+ const expires = new Date(Date.now() + ttlMs).toISOString();
44
+ const requestObj = {
45
+ amount: config.amount,
46
+ currency,
47
+ decimals,
48
+ recipient: config.recipient,
49
+ };
50
+ const requestEncoded = Buffer.from(JSON.stringify(requestObj))
51
+ .toString('base64')
52
+ .replace(/\+/g, '-')
53
+ .replace(/\//g, '_')
54
+ .replace(/=+$/, '');
55
+ const challengeStr = `Payment id="${challengeId}",realm="${config.realm}",method="${config.method}",intent="${intent}",request="${requestEncoded}",expires="${expires}"`;
56
+ res.writeHead(402, {
57
+ 'WWW-Authenticate': challengeStr,
58
+ 'Content-Type': 'text/plain',
59
+ });
60
+ res.end('Payment Required');
61
+ return;
62
+ }
63
+ // Decode Payment credential
64
+ try {
65
+ const credentialBase64 = authHeader.slice('Payment '.length);
66
+ // Re-add base64 padding
67
+ const padded = credentialBase64
68
+ .replace(/-/g, '+')
69
+ .replace(/_/g, '/');
70
+ const decoded = Buffer.from(padded, 'base64').toString('utf-8');
71
+ const credential = JSON.parse(decoded);
72
+ // Validate credential structure
73
+ if (!credential.challenge?.id || !credential.payload?.transaction) {
74
+ log('[mpp-gate] ❌ Malformed credential');
75
+ res.writeHead(400, { 'Content-Type': 'application/json' });
76
+ res.end(JSON.stringify({ error: 'Malformed payment credential' }));
77
+ return;
78
+ }
79
+ // Check realm matches
80
+ if (credential.challenge.realm !== config.realm) {
81
+ log('[mpp-gate] ❌ Realm mismatch');
82
+ res.writeHead(403, { 'Content-Type': 'application/json' });
83
+ res.end(JSON.stringify({ error: 'Challenge realm mismatch' }));
84
+ return;
85
+ }
86
+ // Check expiration
87
+ if (credential.challenge.expires) {
88
+ const expiresAt = new Date(credential.challenge.expires).getTime();
89
+ if (Date.now() > expiresAt) {
90
+ log('[mpp-gate] ❌ Challenge expired');
91
+ res.writeHead(402, { 'Content-Type': 'application/json' });
92
+ res.end(JSON.stringify({ error: 'Challenge expired' }));
93
+ return;
94
+ }
95
+ }
96
+ // Custom verification
97
+ if (config.verifyCredential) {
98
+ const isValid = await config.verifyCredential(credential, credential.challenge.id);
99
+ if (!isValid) {
100
+ log('[mpp-gate] ❌ Credential verification failed');
101
+ res.writeHead(402, { 'Content-Type': 'application/json' });
102
+ res.end(JSON.stringify({ error: 'Payment verification failed' }));
103
+ return;
104
+ }
105
+ }
106
+ // Attach credential to request
107
+ req.mppPayment = credential;
108
+ log(`[mpp-gate] ✅ Payment verified: tx=${credential.payload.transaction.slice(0, 16)}…`);
109
+ next();
110
+ }
111
+ catch (err) {
112
+ log(`[mpp-gate] ❌ Failed to decode credential: ${err.message}`);
113
+ res.writeHead(400, { 'Content-Type': 'application/json' });
114
+ res.end(JSON.stringify({ error: 'Invalid Authorization: Payment header' }));
115
+ }
116
+ };
117
+ }
118
+ //# sourceMappingURL=mpp-gate.js.map