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,204 @@
1
+ "use strict";
2
+ /**
3
+ * OWS Adapter — Bridge between Open Wallet Standard and envoy.
4
+ *
5
+ * Uses `@open-wallet-standard/core` for local key management,
6
+ * policy-gated signing, and multi-chain address derivation.
7
+ * envoy handles the payment protocol layer (x402, MPP).
8
+ *
9
+ * Architecture:
10
+ * ```
11
+ * Agent → EnvoyClient → OWSAdapter → @open-wallet-standard/core
12
+ * ├── createWallet()
13
+ * ├── signTransaction()
14
+ * ├── signMessage()
15
+ * └── Policy Engine (spending limits)
16
+ * ```
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * import { createOwsAdapter } from 'envoy-pay';
21
+ *
22
+ * // Create adapter backed by OWS local wallet
23
+ * const adapter = createOwsAdapter({
24
+ * walletName: 'agent-treasury',
25
+ * chain: 'evm',
26
+ * chainId: 'eip155:8453',
27
+ * rpcUrl: 'https://mainnet.base.org',
28
+ * });
29
+ *
30
+ * // Use with envoy client
31
+ * const client = new EnvoyClient({ adapter });
32
+ * await client.handle402(response);
33
+ * ```
34
+ *
35
+ * @see https://github.com/open-wallet-standard/core
36
+ * @see OWS Specification: docs/00-specification.md
37
+ */
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createOwsAdapter = createOwsAdapter;
40
+ exports.createOwsPolicy = createOwsPolicy;
41
+ exports.createOwsAgentKey = createOwsAgentKey;
42
+ exports.importOwsWallet = importOwsWallet;
43
+ exports.importOwsWalletFromKey = importOwsWalletFromKey;
44
+ exports.exportOwsWallet = exportOwsWallet;
45
+ exports.listOwsWallets = listOwsWallets;
46
+ exports.deleteOwsWallet = deleteOwsWallet;
47
+ const core_1 = require("@open-wallet-standard/core");
48
+ // ═══ Adapter Factory ════════════════════════════════════════════════════
49
+ /**
50
+ * Create a PaymentAdapter backed by an OWS local wallet.
51
+ *
52
+ * The adapter automatically creates the wallet if it doesn't exist,
53
+ * and derives the address for the specified chain.
54
+ */
55
+ function createOwsAdapter(options) {
56
+ const { walletName, chain, chainId, rpcUrl, vaultPath, passphrase, accountIndex = 0, logger = () => { }, } = options;
57
+ // Ensure wallet exists
58
+ let walletInfo;
59
+ try {
60
+ walletInfo = (0, core_1.getWallet)(walletName, vaultPath);
61
+ logger(`[envoy] 📂 Loaded wallet: ${walletName} (${walletInfo.id})`);
62
+ }
63
+ catch {
64
+ // Wallet doesn't exist — create it
65
+ walletInfo = (0, core_1.createWallet)(walletName, passphrase, 12, vaultPath);
66
+ logger(`[envoy] 🆕 Created wallet: ${walletName} (${walletInfo.id})`);
67
+ }
68
+ // Find the address for our chain
69
+ const account = walletInfo.accounts.find((a) => a.chainId.startsWith(chainId.split(':')[0])) ?? walletInfo.accounts[0];
70
+ const address = account?.address ?? '0x0000000000000000000000000000000000000000';
71
+ const derivedChainName = options.chainName ?? mapChainName(chainId);
72
+ logger(`[envoy] 🔗 Chain: ${derivedChainName} (${chainId})`);
73
+ logger(`[envoy] 📍 Address: ${address}`);
74
+ // Build the PaymentAdapter interface
75
+ const adapter = {
76
+ chainName: derivedChainName,
77
+ caip2Id: chainId,
78
+ getAddress() {
79
+ return address;
80
+ },
81
+ async pay(destination, amount, _chainId) {
82
+ logger(`[envoy] 💳 Paying ${amount} to ${destination} on ${chainId}`);
83
+ try {
84
+ // For EVM chains, construct and sign+send a transaction
85
+ if (chain === 'evm') {
86
+ // Use signAndSend for on-chain settlement
87
+ const result = (0, core_1.signAndSend)(walletName, chain, amount, // tx hex — in production this would be a properly encoded tx
88
+ passphrase, accountIndex, rpcUrl, vaultPath);
89
+ logger(`[envoy] ✅ Transaction sent: ${result.txHash}`);
90
+ return result.txHash;
91
+ }
92
+ // For other chains, sign the transaction
93
+ const sig = (0, core_1.signTransaction)(walletName, chain, amount, passphrase, accountIndex, vaultPath);
94
+ logger(`[envoy] ✅ Signed: ${sig.signature.substring(0, 20)}...`);
95
+ return sig.signature;
96
+ }
97
+ catch (error) {
98
+ logger(`[envoy] ❌ Payment failed: ${error.message}`);
99
+ return null;
100
+ }
101
+ },
102
+ async getBalance() {
103
+ // OWS doesn't provide balance queries — return '0' and let
104
+ // the agent fund the wallet via `ows fund deposit`
105
+ return '0';
106
+ },
107
+ };
108
+ return adapter;
109
+ }
110
+ // ═══ OWS Wallet Management Helpers ═════════════════════════════════════
111
+ /**
112
+ * Create an OWS policy for agent spending limits.
113
+ *
114
+ * @example
115
+ * ```ts
116
+ * createOwsPolicy({
117
+ * id: 'agent-budget',
118
+ * name: 'Agent daily budget',
119
+ * allowedChains: ['eip155:8453'],
120
+ * expiresAt: '2026-12-31T23:59:59Z',
121
+ * });
122
+ * ```
123
+ */
124
+ function createOwsPolicy(options) {
125
+ const rules = [];
126
+ if (options.allowedChains) {
127
+ rules.push({
128
+ type: 'allowed_chains',
129
+ chain_ids: options.allowedChains,
130
+ });
131
+ }
132
+ if (options.expiresAt) {
133
+ rules.push({
134
+ type: 'expires_at',
135
+ timestamp: options.expiresAt,
136
+ });
137
+ }
138
+ const policy = JSON.stringify({
139
+ id: options.id,
140
+ name: options.name,
141
+ version: 1,
142
+ created_at: new Date().toISOString(),
143
+ rules,
144
+ action: 'deny',
145
+ });
146
+ (0, core_1.createPolicy)(policy, options.vaultPath);
147
+ }
148
+ /**
149
+ * Create a scoped OWS API key for agent access.
150
+ * The agent uses this token as the passphrase — it NEVER sees the private key.
151
+ *
152
+ * @returns The API key token (shown once — caller must save it)
153
+ */
154
+ function createOwsAgentKey(options) {
155
+ return (0, core_1.createApiKey)(options.name, [options.walletName], options.policyIds, options.passphrase, options.expiresAt, options.vaultPath);
156
+ }
157
+ /**
158
+ * Import an existing wallet into OWS from a mnemonic.
159
+ */
160
+ function importOwsWallet(name, mnemonic, passphrase, vaultPath) {
161
+ return (0, core_1.importWalletMnemonic)(name, mnemonic, passphrase, undefined, vaultPath);
162
+ }
163
+ /**
164
+ * Import an existing wallet from a private key.
165
+ */
166
+ function importOwsWalletFromKey(name, privateKeyHex, chain = 'evm', passphrase, vaultPath) {
167
+ return (0, core_1.importWalletPrivateKey)(name, privateKeyHex, passphrase, vaultPath, chain);
168
+ }
169
+ /**
170
+ * Export the mnemonic from an OWS wallet.
171
+ */
172
+ function exportOwsWallet(nameOrId, passphrase, vaultPath) {
173
+ return (0, core_1.exportWallet)(nameOrId, passphrase, vaultPath);
174
+ }
175
+ /**
176
+ * List all OWS wallets.
177
+ */
178
+ function listOwsWallets(vaultPath) {
179
+ return (0, core_1.listWallets)(vaultPath);
180
+ }
181
+ /**
182
+ * Delete an OWS wallet.
183
+ */
184
+ function deleteOwsWallet(nameOrId, vaultPath) {
185
+ return (0, core_1.deleteWallet)(nameOrId, vaultPath);
186
+ }
187
+ // ═══ Internal ═══════════════════════════════════════════════════════════
188
+ function mapChainName(caip2Id) {
189
+ const names = {
190
+ 'eip155:1': 'Ethereum',
191
+ 'eip155:8453': 'Base',
192
+ 'eip155:84532': 'Base Sepolia',
193
+ 'eip155:42161': 'Arbitrum',
194
+ 'eip155:10': 'Optimism',
195
+ 'eip155:137': 'Polygon',
196
+ 'solana:mainnet': 'Solana',
197
+ 'solana:devnet': 'Solana Devnet',
198
+ 'stellar:pubnet': 'Stellar',
199
+ 'xrpl:mainnet': 'XRPL',
200
+ 'bip122:000000000019d6689c085ae165831e93': 'Bitcoin',
201
+ };
202
+ return names[caip2Id] ?? caip2Id;
203
+ }
204
+ //# sourceMappingURL=ows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ows.js","sourceRoot":"","sources":["../../../src/adapters/ows.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SolanaPaymentAdapter = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const spl_token_1 = require("@solana/spl-token");
6
+ const logger_1 = require("../logger");
7
+ // ─── USDC Mint Addresses ────────────────────────────────────────────
8
+ /** Circle's official USDC on Solana mainnet. */
9
+ const USDC_MAINNET = new web3_js_1.PublicKey('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v');
10
+ /** Circle's USDC on Solana devnet (for testing). */
11
+ const USDC_DEVNET = new web3_js_1.PublicKey('4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU');
12
+ // ─── Solana Payment Adapter ─────────────────────────────────────────
13
+ /**
14
+ * SolanaPaymentAdapter — On-chain settlement on Solana.
15
+ *
16
+ * Supports:
17
+ * - Native SOL transfers (System Program)
18
+ * - USDC (SPL Token) transfers with automatic ATA creation
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * // SOL on devnet
23
+ * const adapter = new SolanaPaymentAdapter({
24
+ * secretKey: myKeypair.secretKey,
25
+ * network: 'devnet',
26
+ * asset: 'SOL',
27
+ * logger: console.log,
28
+ * });
29
+ *
30
+ * // USDC on mainnet
31
+ * const adapter = new SolanaPaymentAdapter({
32
+ * secretKey: myKeypair.secretKey,
33
+ * network: 'mainnet-beta',
34
+ * asset: 'USDC',
35
+ * });
36
+ * ```
37
+ *
38
+ * @see https://spl.solana.com/token — SPL Token program
39
+ * @see https://envoy.dev — envoy production infrastructure
40
+ */
41
+ class SolanaPaymentAdapter {
42
+ chainName;
43
+ caip2Id;
44
+ connection;
45
+ keypair;
46
+ asset;
47
+ usdcMint;
48
+ network;
49
+ log;
50
+ constructor(options) {
51
+ this.network = options.network ?? 'devnet';
52
+ this.asset = options.asset ?? 'SOL';
53
+ this.log = options.logger ?? logger_1.noopLogger;
54
+ // Set CAIP-2 ID
55
+ const chainRef = this.network === 'mainnet-beta' ? '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp' : '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z';
56
+ this.caip2Id = `solana:${chainRef}`;
57
+ this.chainName = `Solana ${this.network === 'mainnet-beta' ? 'Mainnet' : this.network === 'devnet' ? 'Devnet' : 'Testnet'}`;
58
+ // USDC mint per network
59
+ this.usdcMint = this.network === 'mainnet-beta' ? USDC_MAINNET : USDC_DEVNET;
60
+ // Connection
61
+ const rpcUrl = options.rpcUrl ?? (0, web3_js_1.clusterApiUrl)(this.network);
62
+ this.connection = new web3_js_1.Connection(rpcUrl, 'confirmed');
63
+ // Keypair
64
+ if (options.secretKey) {
65
+ const keyArray = options.secretKey instanceof Uint8Array
66
+ ? options.secretKey
67
+ : Uint8Array.from(options.secretKey);
68
+ this.keypair = web3_js_1.Keypair.fromSecretKey(keyArray);
69
+ }
70
+ else {
71
+ this.keypair = web3_js_1.Keypair.generate();
72
+ }
73
+ }
74
+ getAddress() {
75
+ return this.keypair.publicKey.toBase58();
76
+ }
77
+ /** Get SOL balance in SOL (not lamports). */
78
+ async getSolBalance() {
79
+ const lamports = await this.connection.getBalance(this.keypair.publicKey);
80
+ return (lamports / web3_js_1.LAMPORTS_PER_SOL).toFixed(9);
81
+ }
82
+ /** Get USDC balance (6 decimals). */
83
+ async getUsdcBalance() {
84
+ try {
85
+ const ata = await this.findAta(this.keypair.publicKey);
86
+ if (!ata)
87
+ return '0.000000';
88
+ const account = await (0, spl_token_1.getAccount)(this.connection, ata);
89
+ return (Number(account.amount) / 1e6).toFixed(6);
90
+ }
91
+ catch {
92
+ return '0.000000';
93
+ }
94
+ }
95
+ async pay(destination, amount, network) {
96
+ if (this.asset === 'USDC') {
97
+ return this.payUsdc(destination, amount);
98
+ }
99
+ return this.paySol(destination, amount);
100
+ }
101
+ // ── Native SOL transfer ─────────────────────────────────────────
102
+ async paySol(destination, amount) {
103
+ const tag = `[Solana/SOL]`;
104
+ try {
105
+ const lamports = BigInt(amount);
106
+ const solAmount = (Number(lamports) / web3_js_1.LAMPORTS_PER_SOL).toFixed(9);
107
+ const destPubkey = new web3_js_1.PublicKey(destination);
108
+ this.log(`${tag} 🚀 ${solAmount} SOL → ${destination.slice(0, 8)}…`);
109
+ // Balance check
110
+ const balance = await this.connection.getBalance(this.keypair.publicKey);
111
+ if (BigInt(balance) < lamports) {
112
+ this.log(`${tag} ❌ Insufficient: ${(balance / web3_js_1.LAMPORTS_PER_SOL).toFixed(9)} < ${solAmount} SOL`);
113
+ return null;
114
+ }
115
+ const tx = new web3_js_1.Transaction().add(web3_js_1.SystemProgram.transfer({
116
+ fromPubkey: this.keypair.publicKey,
117
+ toPubkey: destPubkey,
118
+ lamports: lamports,
119
+ }));
120
+ const signature = await this.connection.sendTransaction(tx, [this.keypair]);
121
+ await this.connection.confirmTransaction(signature, 'confirmed');
122
+ this.log(`${tag} ✅ ${signature}`);
123
+ return signature;
124
+ }
125
+ catch (error) {
126
+ this.log(`${tag} ❌ ${error.message}`);
127
+ return null;
128
+ }
129
+ }
130
+ // ── USDC SPL Token transfer ─────────────────────────────────────
131
+ async payUsdc(destination, amount) {
132
+ const tag = `[Solana/USDC]`;
133
+ try {
134
+ const atomicAmount = BigInt(amount);
135
+ const formatted = (Number(atomicAmount) / 1e6).toFixed(6);
136
+ const destPubkey = new web3_js_1.PublicKey(destination);
137
+ this.log(`${tag} 🚀 ${formatted} USDC → ${destination.slice(0, 8)}…`);
138
+ // Get or create sender's ATA
139
+ const senderAta = await (0, spl_token_1.getOrCreateAssociatedTokenAccount)(this.connection, this.keypair, // payer
140
+ this.usdcMint, // mint
141
+ this.keypair.publicKey // owner
142
+ );
143
+ // Balance check
144
+ if (senderAta.amount < atomicAmount) {
145
+ this.log(`${tag} ❌ Insufficient: ${(Number(senderAta.amount) / 1e6).toFixed(6)} < ${formatted} USDC`);
146
+ return null;
147
+ }
148
+ // Get or create destination ATA
149
+ const destAta = await (0, spl_token_1.getOrCreateAssociatedTokenAccount)(this.connection, this.keypair, // payer (creates ATA if needed)
150
+ this.usdcMint, // mint
151
+ destPubkey // owner
152
+ );
153
+ // Build transfer instruction
154
+ const tx = new web3_js_1.Transaction().add((0, spl_token_1.createTransferInstruction)(senderAta.address, // source
155
+ destAta.address, // destination
156
+ this.keypair.publicKey, // authority
157
+ atomicAmount, // amount
158
+ [], // multiSigners
159
+ spl_token_1.TOKEN_PROGRAM_ID));
160
+ const signature = await this.connection.sendTransaction(tx, [this.keypair]);
161
+ await this.connection.confirmTransaction(signature, 'confirmed');
162
+ this.log(`${tag} ✅ ${signature}`);
163
+ return signature;
164
+ }
165
+ catch (error) {
166
+ this.log(`${tag} ❌ ${error.message}`);
167
+ return null;
168
+ }
169
+ }
170
+ // ── Helpers ─────────────────────────────────────────────────────
171
+ /** Find the Associated Token Account for USDC. Returns null if none. */
172
+ async findAta(owner) {
173
+ try {
174
+ const ASSOCIATED_TOKEN_PROGRAM_ID = new web3_js_1.PublicKey('ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL');
175
+ // Compute the ATA deterministically
176
+ const [ata] = web3_js_1.PublicKey.findProgramAddressSync([
177
+ owner.toBuffer(),
178
+ spl_token_1.TOKEN_PROGRAM_ID.toBuffer(),
179
+ this.usdcMint.toBuffer(),
180
+ ], ASSOCIATED_TOKEN_PROGRAM_ID);
181
+ // Check if it exists
182
+ const info = await this.connection.getAccountInfo(ata);
183
+ return info ? ata : null;
184
+ }
185
+ catch {
186
+ return null;
187
+ }
188
+ }
189
+ /** Request SOL airdrop from devnet/testnet faucet (for testing). */
190
+ async requestAirdrop(amountSol = 1) {
191
+ if (this.network === 'mainnet-beta') {
192
+ this.log('[Solana] ❌ Cannot airdrop on mainnet');
193
+ return null;
194
+ }
195
+ try {
196
+ const lamports = amountSol * web3_js_1.LAMPORTS_PER_SOL;
197
+ this.log(`[Solana] 💧 Requesting ${amountSol} SOL airdrop…`);
198
+ const sig = await this.connection.requestAirdrop(this.keypair.publicKey, lamports);
199
+ await this.connection.confirmTransaction(sig, 'confirmed');
200
+ this.log(`[Solana] ✅ Airdrop: ${sig}`);
201
+ return sig;
202
+ }
203
+ catch (error) {
204
+ this.log(`[Solana] ❌ Airdrop failed: ${error.message}`);
205
+ return null;
206
+ }
207
+ }
208
+ }
209
+ exports.SolanaPaymentAdapter = SolanaPaymentAdapter;
210
+ //# sourceMappingURL=solana.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.js","sourceRoot":"","sources":["../../../src/adapters/solana.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.StellarPaymentAdapter = void 0;
37
+ const StellarSdk = __importStar(require("@stellar/stellar-sdk"));
38
+ const logger_1 = require("../logger");
39
+ /** Circle's official USDC issuer on Stellar mainnet. */
40
+ const USDC_ISSUER = 'GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN';
41
+ /**
42
+ * StellarPaymentAdapter — On-chain settlement on the Stellar network.
43
+ *
44
+ * Supports:
45
+ * - Native XLM payments (testnet default)
46
+ * - Circle USDC payments (production recommended)
47
+ *
48
+ * The production envoy stack settles USDC on Stellar mainnet.
49
+ * @see https://envoy.dev
50
+ * @see https://stellar.org/usdc
51
+ */
52
+ class StellarPaymentAdapter {
53
+ chainName = 'Stellar';
54
+ caip2Id;
55
+ keypair;
56
+ server;
57
+ networkPassphrase;
58
+ assetType;
59
+ log;
60
+ constructor(options) {
61
+ this.keypair = StellarSdk.Keypair.fromSecret(options.secretKey);
62
+ this.log = options.logger ?? logger_1.noopLogger;
63
+ this.assetType = options.asset ?? 'XLM';
64
+ const isMainnet = options.network === 'mainnet';
65
+ this.networkPassphrase = isMainnet
66
+ ? StellarSdk.Networks.PUBLIC
67
+ : StellarSdk.Networks.TESTNET;
68
+ this.caip2Id = isMainnet ? 'stellar:pubnet' : 'stellar:testnet';
69
+ this.server = new StellarSdk.Horizon.Server(options.horizonUrl ??
70
+ (isMainnet
71
+ ? 'https://horizon.stellar.org'
72
+ : 'https://horizon-testnet.stellar.org'));
73
+ }
74
+ getAddress() {
75
+ return this.keypair.publicKey();
76
+ }
77
+ /**
78
+ * Get the Stellar asset object based on configuration.
79
+ * - XLM: native asset (no trustline needed)
80
+ * - USDC: Circle's issued USDC (trustline required)
81
+ */
82
+ getAsset() {
83
+ if (this.assetType === 'USDC') {
84
+ return new StellarSdk.Asset('USDC', USDC_ISSUER);
85
+ }
86
+ return StellarSdk.Asset.native();
87
+ }
88
+ /**
89
+ * Convert atomic units to human-readable amount.
90
+ * Stellar uses 7 decimal places (stroops) for all assets.
91
+ */
92
+ formatAmount(stroops) {
93
+ return (parseInt(stroops, 10) / 1e7).toFixed(7);
94
+ }
95
+ async pay(destination, amount, network) {
96
+ try {
97
+ const asset = this.getAsset();
98
+ const humanAmount = this.formatAmount(amount);
99
+ const assetLabel = this.assetType === 'USDC' ? 'USDC' : 'XLM';
100
+ this.log(`[Stellar/${assetLabel}] 🚀 ${humanAmount} → ${destination.slice(0, 10)}…`);
101
+ const sourceAccount = await this.server.loadAccount(this.keypair.publicKey());
102
+ const tx = new StellarSdk.TransactionBuilder(sourceAccount, {
103
+ fee: StellarSdk.BASE_FEE,
104
+ networkPassphrase: this.networkPassphrase,
105
+ })
106
+ .addOperation(StellarSdk.Operation.payment({
107
+ destination,
108
+ asset,
109
+ amount: humanAmount,
110
+ }))
111
+ .setTimeout(30)
112
+ .build();
113
+ tx.sign(this.keypair);
114
+ this.log(`[Stellar/${assetLabel}] 📡 Submitting…`);
115
+ const response = await this.server.submitTransaction(tx);
116
+ this.log(`[Stellar/${assetLabel}] ✅ ${response.hash}`);
117
+ return response.hash;
118
+ }
119
+ catch (error) {
120
+ const detail = error?.response?.data?.extras?.result_codes || error.message;
121
+ this.log(`[Stellar] ❌ ${JSON.stringify(detail)}`);
122
+ return null;
123
+ }
124
+ }
125
+ /**
126
+ * Check if the account has a USDC trustline.
127
+ * Returns false if using XLM or if the trustline exists.
128
+ * Returns true if USDC is selected but trustline is missing.
129
+ */
130
+ async needsTrustline() {
131
+ if (this.assetType !== 'USDC')
132
+ return false;
133
+ try {
134
+ const account = await this.server.loadAccount(this.keypair.publicKey());
135
+ const hasTrustline = account.balances.some((b) => b.asset_type !== 'native' &&
136
+ b.asset_code === 'USDC' &&
137
+ b.asset_issuer === USDC_ISSUER);
138
+ return !hasTrustline;
139
+ }
140
+ catch {
141
+ return true;
142
+ }
143
+ }
144
+ /**
145
+ * Establish a USDC trustline (required before receiving USDC).
146
+ * Only needed once per account.
147
+ */
148
+ async createUsdcTrustline() {
149
+ try {
150
+ this.log('[Stellar/USDC] 🔗 Creating USDC trustline…');
151
+ const sourceAccount = await this.server.loadAccount(this.keypair.publicKey());
152
+ const tx = new StellarSdk.TransactionBuilder(sourceAccount, {
153
+ fee: StellarSdk.BASE_FEE,
154
+ networkPassphrase: this.networkPassphrase,
155
+ })
156
+ .addOperation(StellarSdk.Operation.changeTrust({
157
+ asset: new StellarSdk.Asset('USDC', USDC_ISSUER),
158
+ }))
159
+ .setTimeout(30)
160
+ .build();
161
+ tx.sign(this.keypair);
162
+ const response = await this.server.submitTransaction(tx);
163
+ this.log(`[Stellar/USDC] ✅ Trustline created: ${response.hash}`);
164
+ return response.hash;
165
+ }
166
+ catch (error) {
167
+ this.log(`[Stellar/USDC] ❌ Trustline failed: ${error.message}`);
168
+ return null;
169
+ }
170
+ }
171
+ }
172
+ exports.StellarPaymentAdapter = StellarPaymentAdapter;
173
+ //# sourceMappingURL=stellar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stellar.js","sourceRoot":"","sources":["../../../src/adapters/stellar.ts"],"names":[],"mappings":"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"}