@oobe-protocol-labs/synapse-sap-sdk 0.14.0 → 0.15.1

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 (513) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +986 -0
  3. package/dist/cjs/client.js +31 -14
  4. package/dist/cjs/client.js.map +1 -1
  5. package/dist/cjs/constants/addresses.js +143 -0
  6. package/dist/cjs/constants/addresses.js.map +1 -0
  7. package/dist/cjs/constants/index.js +64 -0
  8. package/dist/cjs/constants/index.js.map +1 -0
  9. package/dist/cjs/constants/limits.js +161 -0
  10. package/dist/cjs/constants/limits.js.map +1 -0
  11. package/dist/cjs/constants/network.js +81 -0
  12. package/dist/cjs/constants/network.js.map +1 -0
  13. package/dist/cjs/constants/payments.js +137 -0
  14. package/dist/cjs/constants/payments.js.map +1 -0
  15. package/dist/cjs/constants/programs.js +78 -0
  16. package/dist/cjs/constants/programs.js.map +1 -0
  17. package/dist/cjs/constants/seeds.js +76 -0
  18. package/dist/cjs/constants/seeds.js.map +1 -0
  19. package/dist/cjs/constants.js +39 -32
  20. package/dist/cjs/constants.js.map +1 -1
  21. package/dist/cjs/core/client.js +546 -0
  22. package/dist/cjs/core/client.js.map +1 -0
  23. package/dist/cjs/core/connection.js +350 -0
  24. package/dist/cjs/core/connection.js.map +1 -0
  25. package/dist/cjs/core/index.js +25 -0
  26. package/dist/cjs/core/index.js.map +1 -0
  27. package/dist/cjs/errors/index.js +334 -0
  28. package/dist/cjs/errors/index.js.map +1 -0
  29. package/dist/cjs/errors.js +15 -5
  30. package/dist/cjs/errors.js.map +1 -1
  31. package/dist/cjs/events/geyser.js +295 -0
  32. package/dist/cjs/events/geyser.js.map +1 -0
  33. package/dist/cjs/events/index.js +32 -26
  34. package/dist/cjs/events/index.js.map +1 -1
  35. package/dist/cjs/idl/index.js +63 -0
  36. package/dist/cjs/idl/index.js.map +1 -0
  37. package/dist/cjs/idl/synapse_agent_sap.json +14595 -0
  38. package/dist/cjs/instructions/agent.js +1 -0
  39. package/dist/cjs/instructions/agent.js.map +1 -1
  40. package/dist/cjs/instructions/attestation.js +1 -0
  41. package/dist/cjs/instructions/attestation.js.map +1 -1
  42. package/dist/cjs/instructions/digest.js +1 -0
  43. package/dist/cjs/instructions/digest.js.map +1 -1
  44. package/dist/cjs/instructions/dispute.js +1 -0
  45. package/dist/cjs/instructions/dispute.js.map +1 -1
  46. package/dist/cjs/instructions/escrow.js +1 -0
  47. package/dist/cjs/instructions/escrow.js.map +1 -1
  48. package/dist/cjs/instructions/global.js +1 -0
  49. package/dist/cjs/instructions/global.js.map +1 -1
  50. package/dist/cjs/instructions/indexing.js +1 -0
  51. package/dist/cjs/instructions/indexing.js.map +1 -1
  52. package/dist/cjs/instructions/misc.js +1 -0
  53. package/dist/cjs/instructions/misc.js.map +1 -1
  54. package/dist/cjs/instructions/session.js +1 -0
  55. package/dist/cjs/instructions/session.js.map +1 -1
  56. package/dist/cjs/instructions/staking.js +1 -0
  57. package/dist/cjs/instructions/staking.js.map +1 -1
  58. package/dist/cjs/instructions/subscription.js +1 -0
  59. package/dist/cjs/instructions/subscription.js.map +1 -1
  60. package/dist/cjs/instructions/tools.js +1 -0
  61. package/dist/cjs/instructions/tools.js.map +1 -1
  62. package/dist/cjs/instructions/vault.js +1 -0
  63. package/dist/cjs/instructions/vault.js.map +1 -1
  64. package/dist/cjs/modules/agent.js +272 -0
  65. package/dist/cjs/modules/agent.js.map +1 -0
  66. package/dist/cjs/modules/attestation.js +147 -0
  67. package/dist/cjs/modules/attestation.js.map +1 -0
  68. package/dist/cjs/modules/base.js +189 -0
  69. package/dist/cjs/modules/base.js.map +1 -0
  70. package/dist/cjs/modules/escrow-v2.js +607 -0
  71. package/dist/cjs/modules/escrow-v2.js.map +1 -0
  72. package/dist/cjs/modules/escrow.js +336 -0
  73. package/dist/cjs/modules/escrow.js.map +1 -0
  74. package/dist/cjs/modules/feedback.js +166 -0
  75. package/dist/cjs/modules/feedback.js.map +1 -0
  76. package/dist/cjs/modules/index.js +43 -0
  77. package/dist/cjs/modules/index.js.map +1 -0
  78. package/dist/cjs/modules/indexing.js +375 -0
  79. package/dist/cjs/modules/indexing.js.map +1 -0
  80. package/dist/cjs/modules/ledger.js +234 -0
  81. package/dist/cjs/modules/ledger.js.map +1 -0
  82. package/dist/cjs/modules/receipt.js +148 -0
  83. package/dist/cjs/modules/receipt.js.map +1 -0
  84. package/dist/cjs/modules/staking.js +159 -0
  85. package/dist/cjs/modules/staking.js.map +1 -0
  86. package/dist/cjs/modules/subscription.js +96 -0
  87. package/dist/cjs/modules/subscription.js.map +1 -0
  88. package/dist/cjs/modules/tools.js +345 -0
  89. package/dist/cjs/modules/tools.js.map +1 -0
  90. package/dist/cjs/modules/vault.js +427 -0
  91. package/dist/cjs/modules/vault.js.map +1 -0
  92. package/dist/cjs/parser/client.js +146 -0
  93. package/dist/cjs/parser/client.js.map +1 -0
  94. package/dist/cjs/parser/complete.js +177 -0
  95. package/dist/cjs/parser/complete.js.map +1 -0
  96. package/dist/cjs/parser/index.js +57 -0
  97. package/dist/cjs/parser/index.js.map +1 -0
  98. package/dist/cjs/parser/inner.js +185 -0
  99. package/dist/cjs/parser/inner.js.map +1 -0
  100. package/dist/cjs/parser/instructions.js +114 -0
  101. package/dist/cjs/parser/instructions.js.map +1 -0
  102. package/dist/cjs/parser/transaction.js +153 -0
  103. package/dist/cjs/parser/transaction.js.map +1 -0
  104. package/dist/cjs/parser/types.js +14 -0
  105. package/dist/cjs/parser/types.js.map +1 -0
  106. package/dist/cjs/pda/index.js +672 -0
  107. package/dist/cjs/pda/index.js.map +1 -0
  108. package/dist/cjs/plugin/index.js +952 -0
  109. package/dist/cjs/plugin/index.js.map +1 -0
  110. package/dist/cjs/plugin/protocols.js +282 -0
  111. package/dist/cjs/plugin/protocols.js.map +1 -0
  112. package/dist/cjs/plugin/schemas.js +863 -0
  113. package/dist/cjs/plugin/schemas.js.map +1 -0
  114. package/dist/cjs/postgres/adapter.js +715 -0
  115. package/dist/cjs/postgres/adapter.js.map +1 -0
  116. package/dist/cjs/postgres/index.js +50 -0
  117. package/dist/cjs/postgres/index.js.map +1 -0
  118. package/dist/cjs/postgres/serializers.js +381 -0
  119. package/dist/cjs/postgres/serializers.js.map +1 -0
  120. package/dist/cjs/postgres/sync.js +289 -0
  121. package/dist/cjs/postgres/sync.js.map +1 -0
  122. package/dist/cjs/postgres/types.js +44 -0
  123. package/dist/cjs/postgres/types.js.map +1 -0
  124. package/dist/cjs/registries/builder.js +414 -0
  125. package/dist/cjs/registries/builder.js.map +1 -0
  126. package/dist/cjs/registries/discovery.js +362 -0
  127. package/dist/cjs/registries/discovery.js.map +1 -0
  128. package/dist/cjs/registries/fairscale.js +639 -0
  129. package/dist/cjs/registries/fairscale.js.map +1 -0
  130. package/dist/cjs/registries/index.js +58 -0
  131. package/dist/cjs/registries/index.js.map +1 -0
  132. package/dist/cjs/registries/metaplex-bridge.js +743 -0
  133. package/dist/cjs/registries/metaplex-bridge.js.map +1 -0
  134. package/dist/cjs/registries/session.js +433 -0
  135. package/dist/cjs/registries/session.js.map +1 -0
  136. package/dist/cjs/registries/x402.js +668 -0
  137. package/dist/cjs/registries/x402.js.map +1 -0
  138. package/dist/cjs/types/accounts.js +13 -0
  139. package/dist/cjs/types/accounts.js.map +1 -0
  140. package/dist/cjs/types/common.js +13 -0
  141. package/dist/cjs/types/common.js.map +1 -0
  142. package/dist/cjs/types/endpoint.js +15 -0
  143. package/dist/cjs/types/endpoint.js.map +1 -0
  144. package/dist/cjs/types/enums.js +269 -0
  145. package/dist/cjs/types/enums.js.map +1 -0
  146. package/dist/cjs/types/index.js +41 -0
  147. package/dist/cjs/types/index.js.map +1 -0
  148. package/dist/cjs/types/instructions.js +92 -0
  149. package/dist/cjs/types/instructions.js.map +1 -0
  150. package/dist/cjs/types.js +4 -1
  151. package/dist/cjs/types.js.map +1 -1
  152. package/dist/cjs/utils/anchor-errors.js +453 -0
  153. package/dist/cjs/utils/anchor-errors.js.map +1 -0
  154. package/dist/cjs/utils/endpoint-validator.js +232 -0
  155. package/dist/cjs/utils/endpoint-validator.js.map +1 -0
  156. package/dist/cjs/utils/escrow-validation.js +219 -0
  157. package/dist/cjs/utils/escrow-validation.js.map +1 -0
  158. package/dist/cjs/utils/hash.js +109 -0
  159. package/dist/cjs/utils/hash.js.map +1 -0
  160. package/dist/cjs/utils/index.js +10 -4
  161. package/dist/cjs/utils/index.js.map +1 -1
  162. package/dist/cjs/utils/merchant-validator.js +246 -0
  163. package/dist/cjs/utils/merchant-validator.js.map +1 -0
  164. package/dist/cjs/utils/network-normalizer.js +236 -0
  165. package/dist/cjs/utils/network-normalizer.js.map +1 -0
  166. package/dist/cjs/utils/priority-fee.js +215 -0
  167. package/dist/cjs/utils/priority-fee.js.map +1 -0
  168. package/dist/cjs/utils/rpc-strategy.js +239 -0
  169. package/dist/cjs/utils/rpc-strategy.js.map +1 -0
  170. package/dist/cjs/utils/schemas.js +331 -0
  171. package/dist/cjs/utils/schemas.js.map +1 -0
  172. package/dist/cjs/utils/serialization.js +105 -0
  173. package/dist/cjs/utils/serialization.js.map +1 -0
  174. package/dist/cjs/utils/validate.js +1 -1
  175. package/dist/cjs/utils/validate.js.map +1 -1
  176. package/dist/cjs/utils/validation.js +36 -0
  177. package/dist/cjs/utils/validation.js.map +1 -0
  178. package/dist/cjs/utils/volume-curve.js +117 -0
  179. package/dist/cjs/utils/volume-curve.js.map +1 -0
  180. package/dist/cjs/utils/x402-direct.js +231 -0
  181. package/dist/cjs/utils/x402-direct.js.map +1 -0
  182. package/dist/esm/client.js +31 -14
  183. package/dist/esm/client.js.map +1 -1
  184. package/dist/esm/constants/addresses.d.ts +117 -0
  185. package/dist/esm/constants/addresses.d.ts.map +1 -0
  186. package/dist/esm/constants/addresses.js +140 -0
  187. package/dist/esm/constants/addresses.js.map +1 -0
  188. package/dist/esm/constants/index.d.ts +31 -0
  189. package/dist/esm/constants/index.d.ts.map +1 -0
  190. package/dist/esm/constants/index.js +35 -0
  191. package/dist/esm/constants/index.js.map +1 -0
  192. package/dist/esm/constants/limits.d.ts +149 -0
  193. package/dist/esm/constants/limits.d.ts.map +1 -0
  194. package/dist/esm/constants/limits.js +158 -0
  195. package/dist/esm/constants/limits.js.map +1 -0
  196. package/dist/esm/constants/network.d.ts +81 -0
  197. package/dist/esm/constants/network.d.ts.map +1 -0
  198. package/dist/esm/constants/network.js +78 -0
  199. package/dist/esm/constants/network.js.map +1 -0
  200. package/dist/esm/constants/payments.d.ts +121 -0
  201. package/dist/esm/constants/payments.d.ts.map +1 -0
  202. package/dist/esm/constants/payments.js +131 -0
  203. package/dist/esm/constants/payments.js.map +1 -0
  204. package/dist/esm/constants/programs.d.ts +69 -0
  205. package/dist/esm/constants/programs.d.ts.map +1 -0
  206. package/dist/esm/constants/programs.js +75 -0
  207. package/dist/esm/constants/programs.js.map +1 -0
  208. package/dist/esm/constants/seeds.d.ts +80 -0
  209. package/dist/esm/constants/seeds.d.ts.map +1 -0
  210. package/dist/esm/constants/seeds.js +73 -0
  211. package/dist/esm/constants/seeds.js.map +1 -0
  212. package/dist/esm/constants.d.ts +14 -27
  213. package/dist/esm/constants.d.ts.map +1 -1
  214. package/dist/esm/constants.js +16 -31
  215. package/dist/esm/constants.js.map +1 -1
  216. package/dist/esm/core/client.d.ts +452 -0
  217. package/dist/esm/core/client.d.ts.map +1 -0
  218. package/dist/esm/core/client.js +539 -0
  219. package/dist/esm/core/client.js.map +1 -0
  220. package/dist/esm/core/connection.d.ts +305 -0
  221. package/dist/esm/core/connection.d.ts.map +1 -0
  222. package/dist/esm/core/connection.js +345 -0
  223. package/dist/esm/core/connection.js.map +1 -0
  224. package/dist/esm/core/index.d.ts +20 -0
  225. package/dist/esm/core/index.d.ts.map +1 -0
  226. package/dist/esm/core/index.js +19 -0
  227. package/dist/esm/core/index.js.map +1 -0
  228. package/dist/esm/errors/index.d.ts +276 -0
  229. package/dist/esm/errors/index.d.ts.map +1 -0
  230. package/dist/esm/errors/index.js +325 -0
  231. package/dist/esm/errors/index.js.map +1 -0
  232. package/dist/esm/errors.d.ts +8 -0
  233. package/dist/esm/errors.d.ts.map +1 -1
  234. package/dist/esm/errors.js +8 -0
  235. package/dist/esm/errors.js.map +1 -1
  236. package/dist/esm/events/geyser.d.ts +150 -0
  237. package/dist/esm/events/geyser.d.ts.map +1 -0
  238. package/dist/esm/events/geyser.js +258 -0
  239. package/dist/esm/events/geyser.js.map +1 -0
  240. package/dist/esm/events/index.d.ts +11 -7
  241. package/dist/esm/events/index.d.ts.map +1 -1
  242. package/dist/esm/events/index.js +30 -26
  243. package/dist/esm/events/index.js.map +1 -1
  244. package/dist/esm/idl/index.d.ts +70 -0
  245. package/dist/esm/idl/index.d.ts.map +1 -0
  246. package/dist/esm/idl/index.js +57 -0
  247. package/dist/esm/idl/index.js.map +1 -0
  248. package/dist/esm/idl/synapse_agent_sap.json +14595 -0
  249. package/dist/esm/instructions/agent.js +1 -0
  250. package/dist/esm/instructions/agent.js.map +1 -1
  251. package/dist/esm/instructions/attestation.js +1 -0
  252. package/dist/esm/instructions/attestation.js.map +1 -1
  253. package/dist/esm/instructions/digest.js +1 -0
  254. package/dist/esm/instructions/digest.js.map +1 -1
  255. package/dist/esm/instructions/dispute.js +1 -0
  256. package/dist/esm/instructions/dispute.js.map +1 -1
  257. package/dist/esm/instructions/escrow.js +1 -0
  258. package/dist/esm/instructions/escrow.js.map +1 -1
  259. package/dist/esm/instructions/global.js +1 -0
  260. package/dist/esm/instructions/global.js.map +1 -1
  261. package/dist/esm/instructions/indexing.js +1 -0
  262. package/dist/esm/instructions/indexing.js.map +1 -1
  263. package/dist/esm/instructions/misc.js +1 -0
  264. package/dist/esm/instructions/misc.js.map +1 -1
  265. package/dist/esm/instructions/session.js +1 -0
  266. package/dist/esm/instructions/session.js.map +1 -1
  267. package/dist/esm/instructions/staking.js +1 -0
  268. package/dist/esm/instructions/staking.js.map +1 -1
  269. package/dist/esm/instructions/subscription.js +1 -0
  270. package/dist/esm/instructions/subscription.js.map +1 -1
  271. package/dist/esm/instructions/tools.js +1 -0
  272. package/dist/esm/instructions/tools.js.map +1 -1
  273. package/dist/esm/instructions/vault.js +1 -0
  274. package/dist/esm/instructions/vault.js.map +1 -1
  275. package/dist/esm/modules/agent.d.ts +166 -0
  276. package/dist/esm/modules/agent.d.ts.map +1 -0
  277. package/dist/esm/modules/agent.js +268 -0
  278. package/dist/esm/modules/agent.js.map +1 -0
  279. package/dist/esm/modules/attestation.d.ts +96 -0
  280. package/dist/esm/modules/attestation.d.ts.map +1 -0
  281. package/dist/esm/modules/attestation.js +143 -0
  282. package/dist/esm/modules/attestation.js.map +1 -0
  283. package/dist/esm/modules/base.d.ts +161 -0
  284. package/dist/esm/modules/base.d.ts.map +1 -0
  285. package/dist/esm/modules/base.js +185 -0
  286. package/dist/esm/modules/base.js.map +1 -0
  287. package/dist/esm/modules/escrow-v2.d.ts +169 -0
  288. package/dist/esm/modules/escrow-v2.d.ts.map +1 -0
  289. package/dist/esm/modules/escrow-v2.js +603 -0
  290. package/dist/esm/modules/escrow-v2.js.map +1 -0
  291. package/dist/esm/modules/escrow.d.ts +168 -0
  292. package/dist/esm/modules/escrow.d.ts.map +1 -0
  293. package/dist/esm/modules/escrow.js +332 -0
  294. package/dist/esm/modules/escrow.js.map +1 -0
  295. package/dist/esm/modules/feedback.d.ts +105 -0
  296. package/dist/esm/modules/feedback.d.ts.map +1 -0
  297. package/dist/esm/modules/feedback.js +162 -0
  298. package/dist/esm/modules/feedback.js.map +1 -0
  299. package/dist/esm/modules/index.d.ts +28 -0
  300. package/dist/esm/modules/index.d.ts.map +1 -0
  301. package/dist/esm/modules/index.js +27 -0
  302. package/dist/esm/modules/index.js.map +1 -0
  303. package/dist/esm/modules/indexing.d.ts +200 -0
  304. package/dist/esm/modules/indexing.d.ts.map +1 -0
  305. package/dist/esm/modules/indexing.js +371 -0
  306. package/dist/esm/modules/indexing.js.map +1 -0
  307. package/dist/esm/modules/ledger.d.ts +150 -0
  308. package/dist/esm/modules/ledger.d.ts.map +1 -0
  309. package/dist/esm/modules/ledger.js +230 -0
  310. package/dist/esm/modules/ledger.js.map +1 -0
  311. package/dist/esm/modules/receipt.d.ts +77 -0
  312. package/dist/esm/modules/receipt.d.ts.map +1 -0
  313. package/dist/esm/modules/receipt.js +144 -0
  314. package/dist/esm/modules/receipt.js.map +1 -0
  315. package/dist/esm/modules/staking.d.ts +51 -0
  316. package/dist/esm/modules/staking.d.ts.map +1 -0
  317. package/dist/esm/modules/staking.js +155 -0
  318. package/dist/esm/modules/staking.js.map +1 -0
  319. package/dist/esm/modules/subscription.d.ts +33 -0
  320. package/dist/esm/modules/subscription.d.ts.map +1 -0
  321. package/dist/esm/modules/subscription.js +92 -0
  322. package/dist/esm/modules/subscription.js.map +1 -0
  323. package/dist/esm/modules/tools.d.ts +182 -0
  324. package/dist/esm/modules/tools.d.ts.map +1 -0
  325. package/dist/esm/modules/tools.js +341 -0
  326. package/dist/esm/modules/tools.js.map +1 -0
  327. package/dist/esm/modules/vault.d.ts +240 -0
  328. package/dist/esm/modules/vault.d.ts.map +1 -0
  329. package/dist/esm/modules/vault.js +423 -0
  330. package/dist/esm/modules/vault.js.map +1 -0
  331. package/dist/esm/parser/client.d.ts +123 -0
  332. package/dist/esm/parser/client.d.ts.map +1 -0
  333. package/dist/esm/parser/client.js +142 -0
  334. package/dist/esm/parser/client.js.map +1 -0
  335. package/dist/esm/parser/complete.d.ts +90 -0
  336. package/dist/esm/parser/complete.d.ts.map +1 -0
  337. package/dist/esm/parser/complete.js +173 -0
  338. package/dist/esm/parser/complete.js.map +1 -0
  339. package/dist/esm/parser/index.d.ts +40 -0
  340. package/dist/esm/parser/index.d.ts.map +1 -0
  341. package/dist/esm/parser/index.js +43 -0
  342. package/dist/esm/parser/index.js.map +1 -0
  343. package/dist/esm/parser/inner.d.ts +114 -0
  344. package/dist/esm/parser/inner.d.ts.map +1 -0
  345. package/dist/esm/parser/inner.js +180 -0
  346. package/dist/esm/parser/inner.js.map +1 -0
  347. package/dist/esm/parser/instructions.d.ts +76 -0
  348. package/dist/esm/parser/instructions.d.ts.map +1 -0
  349. package/dist/esm/parser/instructions.js +109 -0
  350. package/dist/esm/parser/instructions.js.map +1 -0
  351. package/dist/esm/parser/transaction.d.ts +77 -0
  352. package/dist/esm/parser/transaction.d.ts.map +1 -0
  353. package/dist/esm/parser/transaction.js +149 -0
  354. package/dist/esm/parser/transaction.js.map +1 -0
  355. package/dist/esm/parser/types.d.ts +154 -0
  356. package/dist/esm/parser/types.d.ts.map +1 -0
  357. package/dist/esm/parser/types.js +13 -0
  358. package/dist/esm/parser/types.js.map +1 -0
  359. package/dist/esm/pda/index.d.ts +510 -0
  360. package/dist/esm/pda/index.d.ts.map +1 -0
  361. package/dist/esm/pda/index.js +638 -0
  362. package/dist/esm/pda/index.js.map +1 -0
  363. package/dist/esm/plugin/index.d.ts +171 -0
  364. package/dist/esm/plugin/index.d.ts.map +1 -0
  365. package/dist/esm/plugin/index.js +945 -0
  366. package/dist/esm/plugin/index.js.map +1 -0
  367. package/dist/esm/plugin/protocols.d.ts +152 -0
  368. package/dist/esm/plugin/protocols.d.ts.map +1 -0
  369. package/dist/esm/plugin/protocols.js +279 -0
  370. package/dist/esm/plugin/protocols.js.map +1 -0
  371. package/dist/esm/plugin/schemas.d.ts +829 -0
  372. package/dist/esm/plugin/schemas.d.ts.map +1 -0
  373. package/dist/esm/plugin/schemas.js +860 -0
  374. package/dist/esm/plugin/schemas.js.map +1 -0
  375. package/dist/esm/postgres/adapter.d.ts +355 -0
  376. package/dist/esm/postgres/adapter.d.ts.map +1 -0
  377. package/dist/esm/postgres/adapter.js +678 -0
  378. package/dist/esm/postgres/adapter.js.map +1 -0
  379. package/dist/esm/postgres/index.d.ts +24 -0
  380. package/dist/esm/postgres/index.d.ts.map +1 -0
  381. package/dist/esm/postgres/index.js +27 -0
  382. package/dist/esm/postgres/index.js.map +1 -0
  383. package/dist/esm/postgres/serializers.d.ts +30 -0
  384. package/dist/esm/postgres/serializers.d.ts.map +1 -0
  385. package/dist/esm/postgres/serializers.js +362 -0
  386. package/dist/esm/postgres/serializers.js.map +1 -0
  387. package/dist/esm/postgres/sync.d.ts +156 -0
  388. package/dist/esm/postgres/sync.d.ts.map +1 -0
  389. package/dist/esm/postgres/sync.js +285 -0
  390. package/dist/esm/postgres/sync.js.map +1 -0
  391. package/dist/esm/postgres/types.d.ts +167 -0
  392. package/dist/esm/postgres/types.d.ts.map +1 -0
  393. package/dist/esm/postgres/types.js +41 -0
  394. package/dist/esm/postgres/types.js.map +1 -0
  395. package/dist/esm/registries/builder.d.ts +340 -0
  396. package/dist/esm/registries/builder.d.ts.map +1 -0
  397. package/dist/esm/registries/builder.js +410 -0
  398. package/dist/esm/registries/builder.js.map +1 -0
  399. package/dist/esm/registries/discovery.d.ts +333 -0
  400. package/dist/esm/registries/discovery.d.ts.map +1 -0
  401. package/dist/esm/registries/discovery.js +358 -0
  402. package/dist/esm/registries/discovery.js.map +1 -0
  403. package/dist/esm/registries/fairscale.d.ts +680 -0
  404. package/dist/esm/registries/fairscale.d.ts.map +1 -0
  405. package/dist/esm/registries/fairscale.js +633 -0
  406. package/dist/esm/registries/fairscale.js.map +1 -0
  407. package/dist/esm/registries/index.d.ts +52 -0
  408. package/dist/esm/registries/index.d.ts.map +1 -0
  409. package/dist/esm/registries/index.js +46 -0
  410. package/dist/esm/registries/index.js.map +1 -0
  411. package/dist/esm/registries/metaplex-bridge.d.ts +489 -0
  412. package/dist/esm/registries/metaplex-bridge.d.ts.map +1 -0
  413. package/dist/esm/registries/metaplex-bridge.js +706 -0
  414. package/dist/esm/registries/metaplex-bridge.js.map +1 -0
  415. package/dist/esm/registries/session.d.ts +323 -0
  416. package/dist/esm/registries/session.d.ts.map +1 -0
  417. package/dist/esm/registries/session.js +429 -0
  418. package/dist/esm/registries/session.js.map +1 -0
  419. package/dist/esm/registries/x402.d.ts +530 -0
  420. package/dist/esm/registries/x402.d.ts.map +1 -0
  421. package/dist/esm/registries/x402.js +664 -0
  422. package/dist/esm/registries/x402.js.map +1 -0
  423. package/dist/esm/types/accounts.d.ts +765 -0
  424. package/dist/esm/types/accounts.d.ts.map +1 -0
  425. package/dist/esm/types/accounts.js +12 -0
  426. package/dist/esm/types/accounts.js.map +1 -0
  427. package/dist/esm/types/common.d.ts +166 -0
  428. package/dist/esm/types/common.d.ts.map +1 -0
  429. package/dist/esm/types/common.js +12 -0
  430. package/dist/esm/types/common.js.map +1 -0
  431. package/dist/esm/types/endpoint.d.ts +161 -0
  432. package/dist/esm/types/endpoint.d.ts.map +1 -0
  433. package/dist/esm/types/endpoint.js +14 -0
  434. package/dist/esm/types/endpoint.js.map +1 -0
  435. package/dist/esm/types/enums.d.ts +353 -0
  436. package/dist/esm/types/enums.d.ts.map +1 -0
  437. package/dist/esm/types/enums.js +266 -0
  438. package/dist/esm/types/enums.js.map +1 -0
  439. package/dist/esm/types/index.d.ts +29 -0
  440. package/dist/esm/types/index.d.ts.map +1 -0
  441. package/dist/esm/types/index.js +25 -0
  442. package/dist/esm/types/index.js.map +1 -0
  443. package/dist/esm/types/instructions.d.ts +400 -0
  444. package/dist/esm/types/instructions.d.ts.map +1 -0
  445. package/dist/esm/types/instructions.js +89 -0
  446. package/dist/esm/types/instructions.js.map +1 -0
  447. package/dist/esm/types.d.ts +28 -0
  448. package/dist/esm/types.d.ts.map +1 -1
  449. package/dist/esm/types.js +1 -0
  450. package/dist/esm/types.js.map +1 -1
  451. package/dist/esm/utils/anchor-errors.d.ts +61 -0
  452. package/dist/esm/utils/anchor-errors.d.ts.map +1 -0
  453. package/dist/esm/utils/anchor-errors.js +447 -0
  454. package/dist/esm/utils/anchor-errors.js.map +1 -0
  455. package/dist/esm/utils/endpoint-validator.d.ts +110 -0
  456. package/dist/esm/utils/endpoint-validator.d.ts.map +1 -0
  457. package/dist/esm/utils/endpoint-validator.js +226 -0
  458. package/dist/esm/utils/endpoint-validator.js.map +1 -0
  459. package/dist/esm/utils/escrow-validation.d.ts +145 -0
  460. package/dist/esm/utils/escrow-validation.d.ts.map +1 -0
  461. package/dist/esm/utils/escrow-validation.js +212 -0
  462. package/dist/esm/utils/escrow-validation.js.map +1 -0
  463. package/dist/esm/utils/hash.d.ts +75 -0
  464. package/dist/esm/utils/hash.d.ts.map +1 -0
  465. package/dist/esm/utils/hash.js +103 -0
  466. package/dist/esm/utils/hash.js.map +1 -0
  467. package/dist/esm/utils/index.d.ts +3 -1
  468. package/dist/esm/utils/index.d.ts.map +1 -1
  469. package/dist/esm/utils/index.js +6 -3
  470. package/dist/esm/utils/index.js.map +1 -1
  471. package/dist/esm/utils/merchant-validator.d.ts +176 -0
  472. package/dist/esm/utils/merchant-validator.d.ts.map +1 -0
  473. package/dist/esm/utils/merchant-validator.js +241 -0
  474. package/dist/esm/utils/merchant-validator.js.map +1 -0
  475. package/dist/esm/utils/network-normalizer.d.ts +120 -0
  476. package/dist/esm/utils/network-normalizer.d.ts.map +1 -0
  477. package/dist/esm/utils/network-normalizer.js +229 -0
  478. package/dist/esm/utils/network-normalizer.js.map +1 -0
  479. package/dist/esm/utils/priority-fee.d.ts +205 -0
  480. package/dist/esm/utils/priority-fee.d.ts.map +1 -0
  481. package/dist/esm/utils/priority-fee.js +209 -0
  482. package/dist/esm/utils/priority-fee.js.map +1 -0
  483. package/dist/esm/utils/rpc-strategy.d.ts +172 -0
  484. package/dist/esm/utils/rpc-strategy.d.ts.map +1 -0
  485. package/dist/esm/utils/rpc-strategy.js +231 -0
  486. package/dist/esm/utils/rpc-strategy.js.map +1 -0
  487. package/dist/esm/utils/schemas.d.ts +351 -0
  488. package/dist/esm/utils/schemas.d.ts.map +1 -0
  489. package/dist/esm/utils/schemas.js +320 -0
  490. package/dist/esm/utils/schemas.js.map +1 -0
  491. package/dist/esm/utils/serialization.d.ts +69 -0
  492. package/dist/esm/utils/serialization.d.ts.map +1 -0
  493. package/dist/esm/utils/serialization.js +98 -0
  494. package/dist/esm/utils/serialization.js.map +1 -0
  495. package/dist/esm/utils/validate.js +1 -1
  496. package/dist/esm/utils/validate.js.map +1 -1
  497. package/dist/esm/utils/validation.d.ts +29 -0
  498. package/dist/esm/utils/validation.d.ts.map +1 -0
  499. package/dist/esm/utils/validation.js +33 -0
  500. package/dist/esm/utils/validation.js.map +1 -0
  501. package/dist/esm/utils/volume-curve.d.ts +60 -0
  502. package/dist/esm/utils/volume-curve.d.ts.map +1 -0
  503. package/dist/esm/utils/volume-curve.js +114 -0
  504. package/dist/esm/utils/volume-curve.js.map +1 -0
  505. package/dist/esm/utils/x402-direct.d.ts +114 -0
  506. package/dist/esm/utils/x402-direct.d.ts.map +1 -0
  507. package/dist/esm/utils/x402-direct.js +228 -0
  508. package/dist/esm/utils/x402-direct.js.map +1 -0
  509. package/package.json +2 -2
  510. package/dist/esm/instructions/memory.d.ts +0 -8
  511. package/dist/esm/instructions/memory.d.ts.map +0 -1
  512. package/dist/esm/instructions/memory.js +0 -234
  513. package/dist/esm/instructions/memory.js.map +0 -1
@@ -0,0 +1,664 @@
1
+ /**
2
+ * @module registries/x402
3
+ * @description x402 payment flow registry — high-level helpers for
4
+ * the complete x402 HTTP micropayment lifecycle.
5
+ *
6
+ * Implements the x402 payment standard on SAP:
7
+ *
8
+ * ┌──────────┐ HTTP 402 ┌──────────┐
9
+ * │ Client │ ──────────────→│ Agent │
10
+ * └────┬─────┘ └────┬─────┘
11
+ * │ 1. Discover pricing │
12
+ * │ 2. Create/fund escrow │
13
+ * │ 3. Call via x402 header │
14
+ * │ │
15
+ * │ 4. Agent serves request │
16
+ * │ 5. Agent settles onchain │
17
+ * │ ← PaymentSettledEvent ← │
18
+ * │ 6. Client verifies │
19
+ * └───────────────────────────┘
20
+ *
21
+ * This registry provides:
22
+ * - Pricing estimation with volume curve support
23
+ * - x402 HTTP header generation
24
+ * - Escrow lifecycle management
25
+ * - Settlement verification
26
+ * - Balance/expiry monitoring
27
+ *
28
+ * @category Registries
29
+ * @since v0.1.0
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const x402 = client.x402;
34
+ *
35
+ * // === CLIENT SIDE ===
36
+ *
37
+ * // 1. Estimate cost before committing
38
+ * const estimate = x402.estimateCost(agentWallet, 100);
39
+ *
40
+ * // 2. Prepare payment (creates escrow + deposits)
41
+ * const ctx = await x402.preparePayment(agentWallet, {
42
+ * pricePerCall: 1000,
43
+ * maxCalls: 100,
44
+ * deposit: 100_000,
45
+ * });
46
+ *
47
+ * // 3. Build x402 HTTP headers for API calls
48
+ * const headers = x402.buildPaymentHeaders(ctx);
49
+ *
50
+ * // 4. Check balance
51
+ * const balance = await x402.getBalance(agentWallet);
52
+ *
53
+ * // === AGENT SIDE ===
54
+ *
55
+ * // 5. Settle after serving calls
56
+ * const receipt = await x402.settle(depositorWallet, 5, serviceData);
57
+ *
58
+ * // 6. Batch settle for efficiency
59
+ * const batchReceipt = await x402.settleBatch(depositorWallet, settlements);
60
+ *
61
+ * // 7. Verify a settlement TX
62
+ * const verified = await x402.verifySettlement(txSignature);
63
+ * ```
64
+ */
65
+ import { SystemProgram, } from "@solana/web3.js";
66
+ import { BN } from "@coral-xyz/anchor";
67
+ import { deriveAgent, deriveAgentStats, deriveEscrow, deriveEscrowV2, } from "../pda";
68
+ import { sha256, hashToArray } from "../utils";
69
+ import { SapNetwork } from "../constants/network";
70
+ import { buildPriorityFeeIxs, computeBatchSettleCu, buildRpcOptions, } from "../utils/priority-fee";
71
+ // ═══════════════════════════════════════════════════════════════════
72
+ // x402 Registry
73
+ // ═══════════════════════════════════════════════════════════════════
74
+ /**
75
+ * @name X402Registry
76
+ * @description x402 payment flow registry for the SAP network.
77
+ *
78
+ * Provides the complete x402 HTTP micropayment lifecycle: pricing
79
+ * estimation, escrow management, HTTP header generation, settlement,
80
+ * and balance monitoring. Used by both clients (payers) and agents (payees).
81
+ *
82
+ * @category Registries
83
+ * @since v0.1.0
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * const x402 = client.x402;
88
+ *
89
+ * // Client: prepare payment and build headers
90
+ * const ctx = await x402.preparePayment(agentWallet, {
91
+ * pricePerCall: 1000, maxCalls: 100, deposit: 100_000,
92
+ * });
93
+ * const headers = x402.buildPaymentHeaders(ctx);
94
+ *
95
+ * // Agent: settle calls after serving
96
+ * const receipt = await x402.settle(depositorWallet, 5, "service-data");
97
+ * ```
98
+ */
99
+ export class X402Registry {
100
+ program;
101
+ wallet;
102
+ constructor(program) {
103
+ this.program = program;
104
+ this.wallet = program.provider.wallet.publicKey;
105
+ }
106
+ // ── Pricing & Estimation ─────────────────────────────
107
+ /**
108
+ * @name estimateCost
109
+ * @description Estimate the cost of N calls to an agent.
110
+ * Reads the escrow data if it exists, falls back to the agent’s pricing.
111
+ * Supports volume curve pricing for tiered cost calculation.
112
+ *
113
+ * @param agentWallet - Agent wallet address.
114
+ * @param calls - Number of calls to estimate.
115
+ * @param opts - Optional: provide pricing directly to avoid on-chain fetch.
116
+ * @param opts.pricePerCall - Base price per call.
117
+ * @param opts.volumeCurve - Volume curve breakpoints.
118
+ * @param opts.totalCallsBefore - Total calls already settled (for curve offset).
119
+ * @returns A {@link CostEstimate} with total cost and per-tier breakdown.
120
+ * @since v0.1.0
121
+ */
122
+ async estimateCost(agentWallet, calls, opts) {
123
+ let pricePerCall;
124
+ let volumeCurve;
125
+ let totalBefore;
126
+ if (opts?.pricePerCall) {
127
+ pricePerCall = opts.pricePerCall;
128
+ volumeCurve = opts.volumeCurve ?? [];
129
+ totalBefore = opts.totalCallsBefore ?? 0;
130
+ }
131
+ else {
132
+ // Try to read from existing escrow (V2 first, then V1)
133
+ const [agentPda] = deriveAgent(agentWallet);
134
+ const resolved = await this.resolveEscrow(agentPda, this.wallet);
135
+ if (resolved) {
136
+ pricePerCall = resolved.escrow.pricePerCall;
137
+ volumeCurve = resolved.escrow.volumeCurve ?? [];
138
+ totalBefore = resolved.escrow.totalCallsSettled.toNumber();
139
+ }
140
+ else {
141
+ // Fall back to agent's first pricing tier
142
+ const agent = await this.fetchNullable("agentAccount", agentPda);
143
+ if (!agent || agent.pricing.length === 0) {
144
+ return {
145
+ totalCost: new BN(0),
146
+ calls,
147
+ effectivePricePerCall: new BN(0),
148
+ hasVolumeCurve: false,
149
+ tiers: [],
150
+ };
151
+ }
152
+ pricePerCall = agent.pricing[0].pricePerCall;
153
+ volumeCurve = agent.pricing[0].volumeCurve ?? [];
154
+ totalBefore = 0;
155
+ }
156
+ }
157
+ return this.calculateCost(pricePerCall, volumeCurve, totalBefore, calls);
158
+ }
159
+ /**
160
+ * @name calculateCost
161
+ * @description Pure cost calculation (no network calls).
162
+ * Implements the same tiered pricing logic as the on-chain program.
163
+ *
164
+ * @param basePrice - Base price per call in smallest token unit.
165
+ * @param volumeCurve - Volume curve breakpoints.
166
+ * @param totalCallsBefore - Total calls already settled (cursor offset).
167
+ * @param calls - Number of calls to calculate cost for.
168
+ * @returns A {@link CostEstimate} with total cost and per-tier breakdown.
169
+ * @since v0.1.0
170
+ */
171
+ calculateCost(basePrice, volumeCurve, totalCallsBefore, calls) {
172
+ const tiers = [];
173
+ if (volumeCurve.length === 0) {
174
+ const totalCost = basePrice.mul(new BN(calls));
175
+ return {
176
+ totalCost,
177
+ calls,
178
+ effectivePricePerCall: basePrice,
179
+ hasVolumeCurve: false,
180
+ tiers: [{ calls, pricePerCall: basePrice, subtotal: totalCost }],
181
+ };
182
+ }
183
+ let remaining = calls;
184
+ let cursor = totalCallsBefore;
185
+ let totalCost = new BN(0);
186
+ while (remaining > 0) {
187
+ let currentPrice = basePrice;
188
+ let nextThreshold = null;
189
+ for (const bp of volumeCurve) {
190
+ const threshold = bp.afterCalls;
191
+ if (cursor >= threshold) {
192
+ currentPrice = bp.pricePerCall;
193
+ }
194
+ else {
195
+ nextThreshold = threshold;
196
+ break;
197
+ }
198
+ }
199
+ const callsAtPrice = nextThreshold !== null
200
+ ? Math.min(remaining, nextThreshold - cursor)
201
+ : remaining;
202
+ const subtotal = currentPrice.mul(new BN(callsAtPrice));
203
+ totalCost = totalCost.add(subtotal);
204
+ tiers.push({ calls: callsAtPrice, pricePerCall: currentPrice, subtotal });
205
+ remaining -= callsAtPrice;
206
+ cursor += callsAtPrice;
207
+ }
208
+ const effectivePricePerCall = calls > 0
209
+ ? totalCost.div(new BN(calls))
210
+ : new BN(0);
211
+ return {
212
+ totalCost,
213
+ calls,
214
+ effectivePricePerCall,
215
+ hasVolumeCurve: true,
216
+ tiers,
217
+ };
218
+ }
219
+ // ── Escrow Lifecycle (Client Side) ───────────────────
220
+ /**
221
+ * @name preparePayment
222
+ * @description Prepare an x402 payment flow — creates and funds an escrow.
223
+ * Derives the escrow PDA, sends the `createEscrow` instruction, and returns
224
+ * a {@link PaymentContext} for building x402 headers.
225
+ *
226
+ * @param agentWallet - The agent’s wallet public key.
227
+ * @param opts - Payment options (price, max calls, deposit, etc.).
228
+ * @returns A {@link PaymentContext} with escrow details and transaction signature.
229
+ * @since v0.1.0
230
+ * @deprecated Since v0.7.0 — Creates a V1 escrow. Use `client.escrowV2.create()` for
231
+ * V2 escrows with dispute windows, co-signing, and settlement security.
232
+ *
233
+ * @example
234
+ * ```ts
235
+ * const ctx = await x402.preparePayment(agentWallet, {
236
+ * pricePerCall: 1000,
237
+ * maxCalls: 100,
238
+ * deposit: 100_000,
239
+ * });
240
+ * ```
241
+ */
242
+ async preparePayment(agentWallet, opts) {
243
+ const [agentPda] = deriveAgent(agentWallet);
244
+ const [escrowPda] = deriveEscrow(agentPda, this.wallet);
245
+ const pricePerCall = new BN(opts.pricePerCall.toString());
246
+ const maxCalls = new BN((opts.maxCalls ?? 0).toString());
247
+ const initialDeposit = new BN(opts.deposit.toString());
248
+ const expiresAt = new BN((opts.expiresAt ?? 0).toString());
249
+ const volumeCurve = (opts.volumeCurve ?? []).map((v) => ({
250
+ afterCalls: v.afterCalls,
251
+ pricePerCall: new BN(v.pricePerCall.toString()),
252
+ }));
253
+ const txSignature = await this.methods
254
+ .createEscrow(pricePerCall, maxCalls, initialDeposit, expiresAt, volumeCurve, opts.tokenMint ?? null, opts.tokenDecimals ?? 9)
255
+ .accounts({
256
+ depositor: this.wallet,
257
+ agent: agentPda,
258
+ escrow: escrowPda,
259
+ systemProgram: SystemProgram.programId,
260
+ })
261
+ .rpc();
262
+ return {
263
+ escrowPda,
264
+ agentPda,
265
+ agentWallet,
266
+ depositorWallet: this.wallet,
267
+ pricePerCall,
268
+ maxCalls,
269
+ txSignature,
270
+ networkIdentifier: opts.networkIdentifier ?? SapNetwork.SOLANA_MAINNET,
271
+ };
272
+ }
273
+ /**
274
+ * @name addFunds
275
+ * @description Add more funds to an existing escrow.
276
+ *
277
+ * @param agentWallet - Agent wallet of the escrow.
278
+ * @param amount - Amount to deposit in smallest token unit.
279
+ * @returns The transaction signature.
280
+ * @since v0.1.0
281
+ * @deprecated Since v0.7.0 — Operates on V1 escrows only. Use `client.escrowV2.deposit()` instead.
282
+ */
283
+ async addFunds(agentWallet, amount) {
284
+ const [agentPda] = deriveAgent(agentWallet);
285
+ const [escrowPda] = deriveEscrow(agentPda, this.wallet);
286
+ return this.methods
287
+ .depositEscrow(new BN(amount.toString()))
288
+ .accounts({
289
+ depositor: this.wallet,
290
+ escrow: escrowPda,
291
+ systemProgram: SystemProgram.programId,
292
+ })
293
+ .rpc();
294
+ }
295
+ /**
296
+ * @name withdrawFunds
297
+ * @description Withdraw remaining funds from an escrow.
298
+ *
299
+ * @param agentWallet - Agent wallet of the escrow.
300
+ * @param amount - Amount to withdraw in smallest token unit.
301
+ * @returns The transaction signature.
302
+ * @since v0.1.0
303
+ * @deprecated Since v0.7.0 — Operates on V1 escrows only. Use `client.escrowV2.withdraw()` instead.
304
+ */
305
+ async withdrawFunds(agentWallet, amount) {
306
+ const [agentPda] = deriveAgent(agentWallet);
307
+ const [escrowPda] = deriveEscrow(agentPda, this.wallet);
308
+ return this.methods
309
+ .withdrawEscrow(new BN(amount.toString()))
310
+ .accounts({
311
+ depositor: this.wallet,
312
+ escrow: escrowPda,
313
+ systemProgram: SystemProgram.programId,
314
+ })
315
+ .rpc();
316
+ }
317
+ /**
318
+ * @name closeEscrow
319
+ * @description Close an empty escrow (balance must be 0).
320
+ * Reclaims the rent-exempt lamports.
321
+ *
322
+ * @param agentWallet - Agent wallet of the escrow.
323
+ * @returns The transaction signature.
324
+ * @since v0.1.0
325
+ * @deprecated Since v0.7.0 — Operates on V1 escrows only. Use `client.escrowV2.close()` instead.
326
+ */
327
+ async closeEscrow(agentWallet) {
328
+ const [agentPda] = deriveAgent(agentWallet);
329
+ const [escrowPda] = deriveEscrow(agentPda, this.wallet);
330
+ return this.methods
331
+ .closeEscrow()
332
+ .accounts({
333
+ depositor: this.wallet,
334
+ escrow: escrowPda,
335
+ })
336
+ .rpc();
337
+ }
338
+ // ── x402 HTTP Headers ────────────────────────────────
339
+ /**
340
+ * @name buildPaymentHeaders
341
+ * @description Build x402 HTTP headers for API requests.
342
+ * Include these headers when calling an agent’s x402 endpoint.
343
+ *
344
+ * @param ctx - Payment context from {@link X402Registry.preparePayment}.
345
+ * @param opts - Optional settings.
346
+ * @param opts.network - Solana cluster name (defaults to `"mainnet-beta"`).
347
+ * @returns An {@link X402Headers} object ready to merge into HTTP requests.
348
+ * @since v0.1.0
349
+ */
350
+ buildPaymentHeaders(ctx, opts) {
351
+ // Prefer: explicit override → ctx.networkIdentifier → default
352
+ const rawNetwork = opts?.network ?? ctx.networkIdentifier ?? SapNetwork.SOLANA_MAINNET;
353
+ return {
354
+ "X-Payment-Protocol": "SAP-x402",
355
+ "X-Payment-Escrow": ctx.escrowPda.toBase58(),
356
+ "X-Payment-Agent": ctx.agentPda.toBase58(),
357
+ "X-Payment-Depositor": ctx.depositorWallet.toBase58(),
358
+ "X-Payment-MaxCalls": ctx.maxCalls.toString(),
359
+ "X-Payment-PricePerCall": ctx.pricePerCall.toString(),
360
+ "X-Payment-Program": this.program.programId.toBase58(),
361
+ "X-Payment-Network": rawNetwork,
362
+ };
363
+ }
364
+ /**
365
+ * @name buildPaymentHeadersFromEscrow
366
+ * @description Build x402 headers directly from an agent wallet (fetches escrow data).
367
+ * Convenience method that fetches the escrow account on-chain.
368
+ *
369
+ * @param agentWallet - Agent wallet to look up the escrow for.
370
+ * @param opts - Optional settings.
371
+ * @param opts.network - Network identifier for the `X-Payment-Network` header.
372
+ * Defaults to `SapNetwork.SOLANA_MAINNET`.
373
+ * @returns An {@link X402Headers} object, or `null` if no escrow exists.
374
+ * @since v0.1.0
375
+ */
376
+ async buildPaymentHeadersFromEscrow(agentWallet, opts) {
377
+ const [agentPda] = deriveAgent(agentWallet);
378
+ const resolved = await this.resolveEscrow(agentPda, this.wallet);
379
+ if (!resolved)
380
+ return null;
381
+ const escrow = resolved.escrow;
382
+ return {
383
+ "X-Payment-Protocol": "SAP-x402",
384
+ "X-Payment-Escrow": resolved.escrowPda.toBase58(),
385
+ "X-Payment-Agent": agentPda.toBase58(),
386
+ "X-Payment-Depositor": this.wallet.toBase58(),
387
+ "X-Payment-MaxCalls": escrow.maxCalls.toString(),
388
+ "X-Payment-PricePerCall": escrow.pricePerCall.toString(),
389
+ "X-Payment-Program": this.program.programId.toBase58(),
390
+ "X-Payment-Network": opts?.network ?? SapNetwork.SOLANA_MAINNET,
391
+ };
392
+ }
393
+ // ── Settlement (Agent Side) ──────────────────────────
394
+ /**
395
+ * @name settle
396
+ * @description Settle calls — agent claims payment for calls served.
397
+ * Must be called by the agent owner wallet. Calculates the settlement
398
+ * amount using the escrow’s pricing and volume curve.
399
+ *
400
+ * @param depositorWallet - The client wallet that funded the escrow.
401
+ * @param callsToSettle - Number of calls to settle.
402
+ * @param serviceData - Raw service data (auto-hashed to `service_hash`).
403
+ * @param opts - Optional {@link SettleOptions} for priority fees and RPC tuning.
404
+ * @returns A {@link SettlementResult} with transaction details and amount.
405
+ * @since v0.1.0
406
+ * @updated v0.6.2 — Added optional `opts` parameter for priority fees.
407
+ *
408
+ * @example
409
+ * ```ts
410
+ * // Default (no priority fee)
411
+ * const receipt = await x402.settle(depositor, 1, "data");
412
+ *
413
+ * // Fast settlement with priority fee
414
+ * import { FAST_SETTLE_OPTIONS } from "@synapse-sap/sdk";
415
+ * const receipt = await x402.settle(depositor, 1, "data", FAST_SETTLE_OPTIONS);
416
+ *
417
+ * // Custom priority fee
418
+ * const receipt = await x402.settle(depositor, 1, "data", {
419
+ * priorityFeeMicroLamports: 10_000,
420
+ * computeUnits: 100_000,
421
+ * skipPreflight: true,
422
+ * });
423
+ * ```
424
+ */
425
+ async settle(depositorWallet, callsToSettle, serviceData, opts) {
426
+ const serviceHash = hashToArray(sha256(typeof serviceData === "string" ? serviceData : Buffer.from(serviceData)));
427
+ const [agentPda] = deriveAgent(this.wallet);
428
+ const [statsPda] = deriveAgentStats(agentPda);
429
+ // Auto-detect escrow version
430
+ const resolved = await this.resolveEscrow(agentPda, depositorWallet);
431
+ if (!resolved) {
432
+ throw new Error("No escrow found for this agent + depositor pair");
433
+ }
434
+ const escrow = resolved.escrow;
435
+ const escrowPda = resolved.escrowPda;
436
+ const estimate = this.calculateCost(escrow.pricePerCall, escrow.volumeCurve, escrow.totalCallsSettled.toNumber(), callsToSettle);
437
+ // Build priority fee instructions (empty array if no opts)
438
+ const preIxs = buildPriorityFeeIxs(opts);
439
+ const rpcOpts = buildRpcOptions(opts);
440
+ let builder;
441
+ if (resolved.version === 2) {
442
+ // V2: settleCallsV2 requires escrow_nonce (default 0)
443
+ builder = this.methods
444
+ .settleCallsV2(new BN(0), new BN(callsToSettle), serviceHash)
445
+ .accounts({
446
+ wallet: this.wallet,
447
+ agent: agentPda,
448
+ agentStats: statsPda,
449
+ escrow: escrowPda,
450
+ systemProgram: SystemProgram.programId,
451
+ });
452
+ }
453
+ else {
454
+ builder = this.methods
455
+ .settleCalls(new BN(callsToSettle), serviceHash)
456
+ .accounts({
457
+ wallet: this.wallet,
458
+ agent: agentPda,
459
+ agentStats: statsPda,
460
+ escrow: escrowPda,
461
+ systemProgram: SystemProgram.programId,
462
+ });
463
+ }
464
+ if (preIxs.length > 0) {
465
+ builder = builder.preInstructions(preIxs);
466
+ }
467
+ const txSignature = await builder.rpc(rpcOpts);
468
+ return {
469
+ txSignature,
470
+ callsSettled: callsToSettle,
471
+ amount: estimate.totalCost,
472
+ serviceHash,
473
+ };
474
+ }
475
+ /**
476
+ * @name settleBatch
477
+ * @description Batch settle — process up to 10 settlements in one TX.
478
+ * Must be called by the agent owner wallet. More gas-efficient than
479
+ * individual settlements.
480
+ *
481
+ * Optionally accepts {@link SettleOptions} to configure priority fees,
482
+ * compute budget, and RPC behavior for faster confirmation.
483
+ *
484
+ * @param depositorWallet - The client wallet that funded the escrow.
485
+ * @param entries - Array of `{ calls, serviceData }` settlement entries.
486
+ * @param opts - Optional {@link SettleOptions} for priority fees and RPC tuning.
487
+ * @returns A {@link BatchSettlementResult} with aggregated totals.
488
+ * @since v0.1.0
489
+ * @updated v0.6.2 — Added optional `opts` parameter for priority fees.
490
+ *
491
+ * @example
492
+ * ```ts
493
+ * import { FAST_BATCH_SETTLE_OPTIONS } from "@synapse-sap/sdk";
494
+ * const receipt = await x402.settleBatch(depositor, entries, FAST_BATCH_SETTLE_OPTIONS);
495
+ * ```
496
+ */
497
+ async settleBatch(depositorWallet, entries, opts) {
498
+ const settlements = entries.map((e) => ({
499
+ callsToSettle: new BN(e.calls),
500
+ serviceHash: hashToArray(sha256(typeof e.serviceData === "string" ? e.serviceData : Buffer.from(e.serviceData))),
501
+ }));
502
+ const totalCalls = entries.reduce((sum, e) => sum + e.calls, 0);
503
+ const [agentPda] = deriveAgent(this.wallet);
504
+ const [statsPda] = deriveAgentStats(agentPda);
505
+ // Auto-detect escrow version
506
+ const resolved = await this.resolveEscrow(agentPda, depositorWallet);
507
+ if (!resolved) {
508
+ throw new Error("No escrow found for this agent + depositor pair");
509
+ }
510
+ const escrow = resolved.escrow;
511
+ const escrowPda = resolved.escrowPda;
512
+ const estimate = this.calculateCost(escrow.pricePerCall, escrow.volumeCurve, escrow.totalCallsSettled.toNumber(), totalCalls);
513
+ // Auto-size CU to the batch length when the caller didn't pin one.
514
+ // Default Solana cap (200k) is tight past ~8 entries; a CU limit
515
+ // costs nothing extra (only caps the maximum charge).
516
+ const effectiveOpts = {
517
+ ...opts,
518
+ computeUnits: opts?.computeUnits ?? computeBatchSettleCu(settlements.length),
519
+ };
520
+ const preIxs = buildPriorityFeeIxs(effectiveOpts);
521
+ const rpcOpts = buildRpcOptions(effectiveOpts);
522
+ let builder = this.methods
523
+ .settleBatch(settlements)
524
+ .accountsPartial({
525
+ wallet: this.wallet,
526
+ agent: agentPda,
527
+ agentStats: statsPda,
528
+ escrow: escrowPda,
529
+ systemProgram: SystemProgram.programId,
530
+ });
531
+ if (preIxs.length > 0) {
532
+ builder = builder.preInstructions(preIxs);
533
+ }
534
+ const txSignature = await builder.rpc(rpcOpts);
535
+ return {
536
+ txSignature,
537
+ totalCalls,
538
+ totalAmount: estimate.totalCost,
539
+ settlementCount: entries.length,
540
+ };
541
+ }
542
+ // ── Balance & Status ─────────────────────────────────
543
+ /**
544
+ * @name getBalance
545
+ * @description Get the current escrow balance and status.
546
+ * Returns balance, deposit/settlement totals, remaining calls,
547
+ * expiry status, and affordable call estimate.
548
+ *
549
+ * @param agentWallet - Agent wallet of the escrow.
550
+ * @param depositor - Depositor wallet (defaults to caller).
551
+ * @returns An {@link EscrowBalance}, or `null` if no escrow exists.
552
+ * @since v0.1.0
553
+ */
554
+ async getBalance(agentWallet, depositor) {
555
+ const [agentPda] = deriveAgent(agentWallet);
556
+ const dep = depositor ?? this.wallet;
557
+ const resolved = await this.resolveEscrow(agentPda, dep);
558
+ if (!resolved)
559
+ return null;
560
+ const escrow = resolved.escrow;
561
+ const now = Math.floor(Date.now() / 1000);
562
+ const isExpired = escrow.expiresAt.toNumber() > 0 && now >= escrow.expiresAt.toNumber();
563
+ const maxCalls = escrow.maxCalls.toNumber();
564
+ const settled = escrow.totalCallsSettled.toNumber();
565
+ const callsRemaining = maxCalls > 0 ? maxCalls - settled : Infinity;
566
+ const pricePerCall = escrow.pricePerCall.toNumber();
567
+ const balance = escrow.balance.toNumber();
568
+ const affordableCalls = pricePerCall > 0
569
+ ? Math.floor(balance / pricePerCall)
570
+ : Infinity;
571
+ return {
572
+ balance: escrow.balance,
573
+ totalDeposited: escrow.totalDeposited,
574
+ totalSettled: escrow.totalSettled,
575
+ totalCallsSettled: escrow.totalCallsSettled,
576
+ callsRemaining: Math.min(callsRemaining, affordableCalls),
577
+ isExpired,
578
+ affordableCalls,
579
+ };
580
+ }
581
+ /**
582
+ * @name hasEscrow
583
+ * @description Check if an escrow exists for a given agent + depositor pair.
584
+ *
585
+ * @param agentWallet - Agent wallet to check.
586
+ * @param depositor - Depositor wallet (defaults to caller).
587
+ * @returns `true` if the escrow account exists on-chain.
588
+ * @since v0.1.0
589
+ */
590
+ async hasEscrow(agentWallet, depositor) {
591
+ const [agentPda] = deriveAgent(agentWallet);
592
+ const dep = depositor ?? this.wallet;
593
+ const conn = this.program.provider.connection;
594
+ // Check V2 first (nonce=0)
595
+ const [v2Pda] = deriveEscrowV2(agentPda, dep, 0);
596
+ const v2Info = await conn.getAccountInfo(v2Pda);
597
+ if (v2Info !== null)
598
+ return true;
599
+ // Fall back to V1
600
+ const [v1Pda] = deriveEscrow(agentPda, dep);
601
+ const v1Info = await conn.getAccountInfo(v1Pda);
602
+ return v1Info !== null;
603
+ }
604
+ /**
605
+ * @name fetchEscrow
606
+ * @description Fetch the raw escrow account data.
607
+ *
608
+ * @param agentWallet - Agent wallet of the escrow.
609
+ * @param depositor - Depositor wallet (defaults to caller).
610
+ * @returns The raw {@link EscrowAccountData}, or `null` if not found.
611
+ * @since v0.1.0
612
+ */
613
+ async fetchEscrow(agentWallet, depositor) {
614
+ const [agentPda] = deriveAgent(agentWallet);
615
+ const dep = depositor ?? this.wallet;
616
+ const resolved = await this.resolveEscrow(agentPda, dep);
617
+ return resolved?.escrow ?? null;
618
+ }
619
+ // ── Internals ────────────────────────────────────────
620
+ /**
621
+ * @name methods
622
+ * @description Accessor for the Anchor program methods namespace.
623
+ * @returns The program methods object for building RPC calls.
624
+ * @private
625
+ */
626
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
627
+ get methods() {
628
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
629
+ return this.program.methods;
630
+ }
631
+ /**
632
+ * @name fetchNullable
633
+ * @description Fetch an on-chain account by name and PDA. Returns `null` if not found.
634
+ * @param name - Anchor account discriminator name.
635
+ * @param pda - Account public key to fetch.
636
+ * @returns The deserialized account data, or `null` if the account does not exist.
637
+ * @private
638
+ */
639
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
640
+ async fetchNullable(name, pda) {
641
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
642
+ return this.program.account[name].fetchNullable(pda);
643
+ }
644
+ /**
645
+ * @name resolveEscrow
646
+ * @description Try to find an escrow: V2 (nonce=0) first, then V1 fallback.
647
+ * Returns the escrow data, PDA, and version indicator.
648
+ * @private
649
+ */
650
+ async resolveEscrow(agentPda, depositor) {
651
+ // Try V2 first (nonce=0 is the default)
652
+ const [v2Pda] = deriveEscrowV2(agentPda, depositor, 0);
653
+ const v2 = await this.fetchNullable("escrowAccountV2", v2Pda);
654
+ if (v2)
655
+ return { escrow: v2, escrowPda: v2Pda, version: 2 };
656
+ // Fall back to V1
657
+ const [v1Pda] = deriveEscrow(agentPda, depositor);
658
+ const v1 = await this.fetchNullable("escrowAccount", v1Pda);
659
+ if (v1)
660
+ return { escrow: v1, escrowPda: v1Pda, version: 1 };
661
+ return null;
662
+ }
663
+ }
664
+ //# sourceMappingURL=x402.js.map