@symmio/trading-core 3.0.0 → 3.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 (650) hide show
  1. package/dist/core/chains/types.d.ts +197 -0
  2. package/dist/core/chains/types.d.ts.map +1 -1
  3. package/dist/core/chains/types.js.map +1 -1
  4. package/dist/core/config/merge-chain-config.d.ts.map +1 -1
  5. package/dist/core/config/merge-chain-config.js +49 -19
  6. package/dist/core/config/merge-chain-config.js.map +1 -1
  7. package/dist/gasless/abortable-sleep.d.ts +17 -0
  8. package/dist/gasless/abortable-sleep.d.ts.map +1 -0
  9. package/dist/gasless/abortable-sleep.js +21 -0
  10. package/dist/gasless/abortable-sleep.js.map +1 -0
  11. package/dist/gasless/assert-gateway-coherence.d.ts +20 -0
  12. package/dist/gasless/assert-gateway-coherence.d.ts.map +1 -0
  13. package/dist/gasless/assert-gateway-coherence.js +26 -0
  14. package/dist/gasless/assert-gateway-coherence.js.map +1 -0
  15. package/dist/gasless/batch/calls.d.ts +121 -0
  16. package/dist/gasless/batch/calls.d.ts.map +1 -0
  17. package/dist/gasless/batch/calls.js +36 -0
  18. package/dist/gasless/batch/calls.js.map +1 -0
  19. package/dist/gasless/batch/index.d.ts +2 -0
  20. package/dist/gasless/batch/index.d.ts.map +1 -0
  21. package/dist/gasless/batch/resolve-gasless-batch.d.ts +118 -0
  22. package/dist/gasless/batch/resolve-gasless-batch.d.ts.map +1 -0
  23. package/dist/gasless/batch/resolve-gasless-batch.js +89 -0
  24. package/dist/gasless/batch/resolve-gasless-batch.js.map +1 -0
  25. package/dist/gasless/classify-gasless-failure.d.ts +99 -0
  26. package/dist/gasless/classify-gasless-failure.d.ts.map +1 -0
  27. package/dist/gasless/classify-gasless-failure.js +60 -0
  28. package/dist/gasless/classify-gasless-failure.js.map +1 -0
  29. package/dist/gasless/confirm-gasless-request/confirm-gasless-request.d.ts +121 -0
  30. package/dist/gasless/confirm-gasless-request/confirm-gasless-request.d.ts.map +1 -0
  31. package/dist/gasless/confirm-gasless-request/confirm-gasless-request.js +73 -0
  32. package/dist/gasless/confirm-gasless-request/confirm-gasless-request.js.map +1 -0
  33. package/dist/gasless/confirm-gasless-request/index.d.ts +2 -0
  34. package/dist/gasless/confirm-gasless-request/index.d.ts.map +1 -0
  35. package/dist/gasless/constants.d.ts +24 -0
  36. package/dist/gasless/constants.d.ts.map +1 -0
  37. package/dist/gasless/constants.js +6 -0
  38. package/dist/gasless/constants.js.map +1 -0
  39. package/dist/gasless/delegation-preflight.d.ts +39 -0
  40. package/dist/gasless/delegation-preflight.d.ts.map +1 -0
  41. package/dist/gasless/delegation-preflight.js +33 -0
  42. package/dist/gasless/delegation-preflight.js.map +1 -0
  43. package/dist/gasless/dispatch/maybe-relay-as-gasless.d.ts +73 -0
  44. package/dist/gasless/dispatch/maybe-relay-as-gasless.d.ts.map +1 -0
  45. package/dist/gasless/dispatch/maybe-relay-as-gasless.js +189 -0
  46. package/dist/gasless/dispatch/maybe-relay-as-gasless.js.map +1 -0
  47. package/dist/gasless/eip712.d.ts +79 -0
  48. package/dist/gasless/eip712.d.ts.map +1 -0
  49. package/dist/gasless/eip712.js +60 -0
  50. package/dist/gasless/eip712.js.map +1 -0
  51. package/dist/gasless/errors.d.ts +132 -0
  52. package/dist/gasless/errors.d.ts.map +1 -0
  53. package/dist/gasless/errors.js +110 -0
  54. package/dist/gasless/errors.js.map +1 -0
  55. package/dist/gasless/events.d.ts +37 -0
  56. package/dist/gasless/events.d.ts.map +1 -0
  57. package/dist/gasless/events.js +34 -0
  58. package/dist/gasless/events.js.map +1 -0
  59. package/dist/gasless/fallback.d.ts +58 -0
  60. package/dist/gasless/fallback.d.ts.map +1 -0
  61. package/dist/gasless/fallback.js +34 -0
  62. package/dist/gasless/fallback.js.map +1 -0
  63. package/dist/gasless/format-gasless-operation.d.ts +37 -0
  64. package/dist/gasless/format-gasless-operation.d.ts.map +1 -0
  65. package/dist/gasless/format-gasless-operation.js +33 -0
  66. package/dist/gasless/format-gasless-operation.js.map +1 -0
  67. package/dist/gasless/gasless-url.d.ts +82 -0
  68. package/dist/gasless/gasless-url.d.ts.map +1 -0
  69. package/dist/gasless/gasless-url.js +70 -0
  70. package/dist/gasless/gasless-url.js.map +1 -0
  71. package/dist/gasless/gasless-wallet-execute/calls.d.ts +73 -0
  72. package/dist/gasless/gasless-wallet-execute/calls.d.ts.map +1 -0
  73. package/dist/gasless/gasless-wallet-execute/calls.js +24 -0
  74. package/dist/gasless/gasless-wallet-execute/calls.js.map +1 -0
  75. package/dist/gasless/gasless-wallet-execute/gasless-wallet-execute.d.ts +148 -0
  76. package/dist/gasless/gasless-wallet-execute/gasless-wallet-execute.d.ts.map +1 -0
  77. package/dist/gasless/gasless-wallet-execute/gasless-wallet-execute.js +120 -0
  78. package/dist/gasless/gasless-wallet-execute/gasless-wallet-execute.js.map +1 -0
  79. package/dist/gasless/gasless-wallet-execute/index.d.ts +5 -0
  80. package/dist/gasless/gasless-wallet-execute/index.d.ts.map +1 -0
  81. package/dist/gasless/gasless-wallet-execute/query.d.ts +18 -0
  82. package/dist/gasless/gasless-wallet-execute/query.d.ts.map +1 -0
  83. package/dist/gasless/gasless-wallet-execute/query.js +12 -0
  84. package/dist/gasless/gasless-wallet-execute/query.js.map +1 -0
  85. package/dist/gasless/gasless-wallet-execute/selectors.d.ts +38 -0
  86. package/dist/gasless/gasless-wallet-execute/selectors.d.ts.map +1 -0
  87. package/dist/gasless/gasless-wallet-execute/selectors.js +15 -0
  88. package/dist/gasless/gasless-wallet-execute/selectors.js.map +1 -0
  89. package/dist/gasless/get-gasless-batch-fee-quote/get-gasless-batch-fee-quote.d.ts +72 -0
  90. package/dist/gasless/get-gasless-batch-fee-quote/get-gasless-batch-fee-quote.d.ts.map +1 -0
  91. package/dist/gasless/get-gasless-batch-fee-quote/get-gasless-batch-fee-quote.js +42 -0
  92. package/dist/gasless/get-gasless-batch-fee-quote/get-gasless-batch-fee-quote.js.map +1 -0
  93. package/dist/gasless/get-gasless-batch-fee-quote/index.d.ts +3 -0
  94. package/dist/gasless/get-gasless-batch-fee-quote/index.d.ts.map +1 -0
  95. package/dist/gasless/get-gasless-batch-fee-quote/query.d.ts +47 -0
  96. package/dist/gasless/get-gasless-batch-fee-quote/query.d.ts.map +1 -0
  97. package/dist/gasless/get-gasless-batch-fee-quote/query.js +50 -0
  98. package/dist/gasless/get-gasless-batch-fee-quote/query.js.map +1 -0
  99. package/dist/gasless/get-gasless-deposit-policy/get-gasless-deposit-policy.d.ts +80 -0
  100. package/dist/gasless/get-gasless-deposit-policy/get-gasless-deposit-policy.d.ts.map +1 -0
  101. package/dist/gasless/get-gasless-deposit-policy/get-gasless-deposit-policy.js +61 -0
  102. package/dist/gasless/get-gasless-deposit-policy/get-gasless-deposit-policy.js.map +1 -0
  103. package/dist/gasless/get-gasless-deposit-policy/index.d.ts +3 -0
  104. package/dist/gasless/get-gasless-deposit-policy/index.d.ts.map +1 -0
  105. package/dist/gasless/get-gasless-deposit-policy/query.d.ts +51 -0
  106. package/dist/gasless/get-gasless-deposit-policy/query.d.ts.map +1 -0
  107. package/dist/gasless/get-gasless-deposit-policy/query.js +25 -0
  108. package/dist/gasless/get-gasless-deposit-policy/query.js.map +1 -0
  109. package/dist/gasless/get-gasless-fee-quote/encode-relay-batch-call-data.d.ts +27 -0
  110. package/dist/gasless/get-gasless-fee-quote/encode-relay-batch-call-data.d.ts.map +1 -0
  111. package/dist/gasless/get-gasless-fee-quote/encode-relay-batch-call-data.js +22 -0
  112. package/dist/gasless/get-gasless-fee-quote/encode-relay-batch-call-data.js.map +1 -0
  113. package/dist/gasless/get-gasless-fee-quote/fee-quote-errors.d.ts +61 -0
  114. package/dist/gasless/get-gasless-fee-quote/fee-quote-errors.d.ts.map +1 -0
  115. package/dist/gasless/get-gasless-fee-quote/fee-quote-errors.js +59 -0
  116. package/dist/gasless/get-gasless-fee-quote/fee-quote-errors.js.map +1 -0
  117. package/dist/gasless/get-gasless-fee-quote/get-gasless-fee-quote.d.ts +79 -0
  118. package/dist/gasless/get-gasless-fee-quote/get-gasless-fee-quote.d.ts.map +1 -0
  119. package/dist/gasless/get-gasless-fee-quote/get-gasless-fee-quote.js +53 -0
  120. package/dist/gasless/get-gasless-fee-quote/get-gasless-fee-quote.js.map +1 -0
  121. package/dist/gasless/get-gasless-fee-quote/index.d.ts +4 -0
  122. package/dist/gasless/get-gasless-fee-quote/index.d.ts.map +1 -0
  123. package/dist/gasless/get-gasless-fee-quote/query.d.ts +41 -0
  124. package/dist/gasless/get-gasless-fee-quote/query.d.ts.map +1 -0
  125. package/dist/gasless/get-gasless-fee-quote/query.js +31 -0
  126. package/dist/gasless/get-gasless-fee-quote/query.js.map +1 -0
  127. package/dist/gasless/get-gasless-request/get-gasless-request.d.ts +51 -0
  128. package/dist/gasless/get-gasless-request/get-gasless-request.d.ts.map +1 -0
  129. package/dist/gasless/get-gasless-request/get-gasless-request.js +15 -0
  130. package/dist/gasless/get-gasless-request/get-gasless-request.js.map +1 -0
  131. package/dist/gasless/get-gasless-request/index.d.ts +4 -0
  132. package/dist/gasless/get-gasless-request/index.d.ts.map +1 -0
  133. package/dist/gasless/get-gasless-request/query.d.ts +64 -0
  134. package/dist/gasless/get-gasless-request/query.d.ts.map +1 -0
  135. package/dist/gasless/get-gasless-request/query.js +42 -0
  136. package/dist/gasless/get-gasless-request/query.js.map +1 -0
  137. package/dist/gasless/get-gasless-request/to-gasless-request.d.ts +26 -0
  138. package/dist/gasless/get-gasless-request/to-gasless-request.d.ts.map +1 -0
  139. package/dist/gasless/get-gasless-request/to-gasless-request.js +62 -0
  140. package/dist/gasless/get-gasless-request/to-gasless-request.js.map +1 -0
  141. package/dist/gasless/get-gasless-request-transactions/get-gasless-request-transactions.d.ts +40 -0
  142. package/dist/gasless/get-gasless-request-transactions/get-gasless-request-transactions.d.ts.map +1 -0
  143. package/dist/gasless/get-gasless-request-transactions/get-gasless-request-transactions.js +15 -0
  144. package/dist/gasless/get-gasless-request-transactions/get-gasless-request-transactions.js.map +1 -0
  145. package/dist/gasless/get-gasless-request-transactions/index.d.ts +4 -0
  146. package/dist/gasless/get-gasless-request-transactions/index.d.ts.map +1 -0
  147. package/dist/gasless/get-gasless-request-transactions/query.d.ts +75 -0
  148. package/dist/gasless/get-gasless-request-transactions/query.d.ts.map +1 -0
  149. package/dist/gasless/get-gasless-request-transactions/query.js +37 -0
  150. package/dist/gasless/get-gasless-request-transactions/query.js.map +1 -0
  151. package/dist/gasless/get-gasless-request-transactions/to-gasless-request-transaction.d.ts +21 -0
  152. package/dist/gasless/get-gasless-request-transactions/to-gasless-request-transaction.d.ts.map +1 -0
  153. package/dist/gasless/get-gasless-request-transactions/to-gasless-request-transaction.js +27 -0
  154. package/dist/gasless/get-gasless-request-transactions/to-gasless-request-transaction.js.map +1 -0
  155. package/dist/gasless/get-gasless-wallet-address/get-gasless-wallet-address.d.ts +48 -0
  156. package/dist/gasless/get-gasless-wallet-address/get-gasless-wallet-address.d.ts.map +1 -0
  157. package/dist/gasless/get-gasless-wallet-address/get-gasless-wallet-address.js +20 -0
  158. package/dist/gasless/get-gasless-wallet-address/get-gasless-wallet-address.js.map +1 -0
  159. package/dist/gasless/get-gasless-wallet-address/index.d.ts +3 -0
  160. package/dist/gasless/get-gasless-wallet-address/index.d.ts.map +1 -0
  161. package/dist/gasless/get-gasless-wallet-address/query.d.ts +46 -0
  162. package/dist/gasless/get-gasless-wallet-address/query.d.ts.map +1 -0
  163. package/dist/gasless/get-gasless-wallet-address/query.js +25 -0
  164. package/dist/gasless/get-gasless-wallet-address/query.js.map +1 -0
  165. package/dist/gasless/get-gasless-wallet-creation-fee/get-gasless-wallet-creation-fee.d.ts +57 -0
  166. package/dist/gasless/get-gasless-wallet-creation-fee/get-gasless-wallet-creation-fee.d.ts.map +1 -0
  167. package/dist/gasless/get-gasless-wallet-creation-fee/get-gasless-wallet-creation-fee.js +17 -0
  168. package/dist/gasless/get-gasless-wallet-creation-fee/get-gasless-wallet-creation-fee.js.map +1 -0
  169. package/dist/gasless/get-gasless-wallet-creation-fee/index.d.ts +3 -0
  170. package/dist/gasless/get-gasless-wallet-creation-fee/index.d.ts.map +1 -0
  171. package/dist/gasless/get-gasless-wallet-creation-fee/query.d.ts +51 -0
  172. package/dist/gasless/get-gasless-wallet-creation-fee/query.d.ts.map +1 -0
  173. package/dist/gasless/get-gasless-wallet-creation-fee/query.js +25 -0
  174. package/dist/gasless/get-gasless-wallet-creation-fee/query.js.map +1 -0
  175. package/dist/gasless/get-gasless-wallet-nonce/get-gasless-wallet-nonce.d.ts +51 -0
  176. package/dist/gasless/get-gasless-wallet-nonce/get-gasless-wallet-nonce.d.ts.map +1 -0
  177. package/dist/gasless/get-gasless-wallet-nonce/get-gasless-wallet-nonce.js +21 -0
  178. package/dist/gasless/get-gasless-wallet-nonce/get-gasless-wallet-nonce.js.map +1 -0
  179. package/dist/gasless/get-gasless-wallet-nonce/index.d.ts +3 -0
  180. package/dist/gasless/get-gasless-wallet-nonce/index.d.ts.map +1 -0
  181. package/dist/gasless/get-gasless-wallet-nonce/query.d.ts +47 -0
  182. package/dist/gasless/get-gasless-wallet-nonce/query.d.ts.map +1 -0
  183. package/dist/gasless/get-gasless-wallet-nonce/query.js +25 -0
  184. package/dist/gasless/get-gasless-wallet-nonce/query.js.map +1 -0
  185. package/dist/gasless/get-session-key-selectors.d.ts +83 -0
  186. package/dist/gasless/get-session-key-selectors.d.ts.map +1 -0
  187. package/dist/gasless/get-session-key-selectors.js +25 -0
  188. package/dist/gasless/get-session-key-selectors.js.map +1 -0
  189. package/dist/gasless/http.d.ts +229 -0
  190. package/dist/gasless/http.d.ts.map +1 -0
  191. package/dist/gasless/http.js +165 -0
  192. package/dist/gasless/http.js.map +1 -0
  193. package/dist/gasless/index.d.ts +34 -0
  194. package/dist/gasless/index.d.ts.map +1 -0
  195. package/dist/gasless/is-newer-gasless-request.d.ts +32 -0
  196. package/dist/gasless/is-newer-gasless-request.d.ts.map +1 -0
  197. package/dist/gasless/is-newer-gasless-request.js +21 -0
  198. package/dist/gasless/is-newer-gasless-request.js.map +1 -0
  199. package/dist/gasless/nonce-lock.d.ts +180 -0
  200. package/dist/gasless/nonce-lock.d.ts.map +1 -0
  201. package/dist/gasless/nonce-lock.js +102 -0
  202. package/dist/gasless/nonce-lock.js.map +1 -0
  203. package/dist/gasless/observe-gasless-request.d.ts +65 -0
  204. package/dist/gasless/observe-gasless-request.d.ts.map +1 -0
  205. package/dist/gasless/observe-gasless-request.js +56 -0
  206. package/dist/gasless/observe-gasless-request.js.map +1 -0
  207. package/dist/gasless/query-poll-delay.d.ts +39 -0
  208. package/dist/gasless/query-poll-delay.d.ts.map +1 -0
  209. package/dist/gasless/query-poll-delay.js +14 -0
  210. package/dist/gasless/query-poll-delay.js.map +1 -0
  211. package/dist/gasless/relay-gasless-batch/index.d.ts +3 -0
  212. package/dist/gasless/relay-gasless-batch/index.d.ts.map +1 -0
  213. package/dist/gasless/relay-gasless-batch/query.d.ts +18 -0
  214. package/dist/gasless/relay-gasless-batch/query.d.ts.map +1 -0
  215. package/dist/gasless/relay-gasless-batch/query.js +12 -0
  216. package/dist/gasless/relay-gasless-batch/query.js.map +1 -0
  217. package/dist/gasless/relay-gasless-batch/relay-gasless-batch.d.ts +106 -0
  218. package/dist/gasless/relay-gasless-batch/relay-gasless-batch.d.ts.map +1 -0
  219. package/dist/gasless/relay-gasless-batch/relay-gasless-batch.js +145 -0
  220. package/dist/gasless/relay-gasless-batch/relay-gasless-batch.js.map +1 -0
  221. package/dist/gasless/relay-gasless-batch/sign-gasless-batch.d.ts +36 -0
  222. package/dist/gasless/relay-gasless-batch/sign-gasless-batch.d.ts.map +1 -0
  223. package/dist/gasless/relay-gasless-batch/sign-gasless-batch.js +24 -0
  224. package/dist/gasless/relay-gasless-batch/sign-gasless-batch.js.map +1 -0
  225. package/dist/gasless/relay-grant-delegation/index.d.ts +3 -0
  226. package/dist/gasless/relay-grant-delegation/index.d.ts.map +1 -0
  227. package/dist/gasless/relay-grant-delegation/query.d.ts +18 -0
  228. package/dist/gasless/relay-grant-delegation/query.d.ts.map +1 -0
  229. package/dist/gasless/relay-grant-delegation/query.js +12 -0
  230. package/dist/gasless/relay-grant-delegation/query.js.map +1 -0
  231. package/dist/gasless/relay-grant-delegation/relay-grant-delegation.d.ts +69 -0
  232. package/dist/gasless/relay-grant-delegation/relay-grant-delegation.d.ts.map +1 -0
  233. package/dist/gasless/relay-grant-delegation/relay-grant-delegation.js +57 -0
  234. package/dist/gasless/relay-grant-delegation/relay-grant-delegation.js.map +1 -0
  235. package/dist/gasless/relay-instant-operations/index.d.ts +3 -0
  236. package/dist/gasless/relay-instant-operations/index.d.ts.map +1 -0
  237. package/dist/gasless/relay-instant-operations/query.d.ts +18 -0
  238. package/dist/gasless/relay-instant-operations/query.d.ts.map +1 -0
  239. package/dist/gasless/relay-instant-operations/query.js +12 -0
  240. package/dist/gasless/relay-instant-operations/query.js.map +1 -0
  241. package/dist/gasless/relay-instant-operations/relay-instant-operations.d.ts +127 -0
  242. package/dist/gasless/relay-instant-operations/relay-instant-operations.d.ts.map +1 -0
  243. package/dist/gasless/relay-instant-operations/relay-instant-operations.js +42 -0
  244. package/dist/gasless/relay-instant-operations/relay-instant-operations.js.map +1 -0
  245. package/dist/gasless/relayable-writes.d.ts +163 -0
  246. package/dist/gasless/relayable-writes.d.ts.map +1 -0
  247. package/dist/gasless/relayable-writes.js +113 -0
  248. package/dist/gasless/relayable-writes.js.map +1 -0
  249. package/dist/gasless/resolve-gasless.d.ts +52 -0
  250. package/dist/gasless/resolve-gasless.d.ts.map +1 -0
  251. package/dist/gasless/resolve-gasless.js +19 -0
  252. package/dist/gasless/resolve-gasless.js.map +1 -0
  253. package/dist/gasless/resolve-wallet-identities.d.ts +30 -0
  254. package/dist/gasless/resolve-wallet-identities.d.ts.map +1 -0
  255. package/dist/gasless/resolve-wallet-identities.js +21 -0
  256. package/dist/gasless/resolve-wallet-identities.js.map +1 -0
  257. package/dist/gasless/resubmit-gasless-request/index.d.ts +3 -0
  258. package/dist/gasless/resubmit-gasless-request/index.d.ts.map +1 -0
  259. package/dist/gasless/resubmit-gasless-request/query.d.ts +19 -0
  260. package/dist/gasless/resubmit-gasless-request/query.d.ts.map +1 -0
  261. package/dist/gasless/resubmit-gasless-request/query.js +12 -0
  262. package/dist/gasless/resubmit-gasless-request/query.js.map +1 -0
  263. package/dist/gasless/resubmit-gasless-request/resubmit-gasless-request.d.ts +50 -0
  264. package/dist/gasless/resubmit-gasless-request/resubmit-gasless-request.d.ts.map +1 -0
  265. package/dist/gasless/resubmit-gasless-request/resubmit-gasless-request.js +52 -0
  266. package/dist/gasless/resubmit-gasless-request/resubmit-gasless-request.js.map +1 -0
  267. package/dist/gasless/settle-gasless-deposit-existing-account/index.d.ts +3 -0
  268. package/dist/gasless/settle-gasless-deposit-existing-account/index.d.ts.map +1 -0
  269. package/dist/gasless/settle-gasless-deposit-existing-account/query.d.ts +18 -0
  270. package/dist/gasless/settle-gasless-deposit-existing-account/query.d.ts.map +1 -0
  271. package/dist/gasless/settle-gasless-deposit-existing-account/query.js +12 -0
  272. package/dist/gasless/settle-gasless-deposit-existing-account/query.js.map +1 -0
  273. package/dist/gasless/settle-gasless-deposit-existing-account/settle-gasless-deposit-existing-account.d.ts +66 -0
  274. package/dist/gasless/settle-gasless-deposit-existing-account/settle-gasless-deposit-existing-account.d.ts.map +1 -0
  275. package/dist/gasless/settle-gasless-deposit-existing-account/settle-gasless-deposit-existing-account.js +36 -0
  276. package/dist/gasless/settle-gasless-deposit-existing-account/settle-gasless-deposit-existing-account.js.map +1 -0
  277. package/dist/gasless/settle-gasless-deposit-new-account/index.d.ts +3 -0
  278. package/dist/gasless/settle-gasless-deposit-new-account/index.d.ts.map +1 -0
  279. package/dist/gasless/settle-gasless-deposit-new-account/query.d.ts +18 -0
  280. package/dist/gasless/settle-gasless-deposit-new-account/query.d.ts.map +1 -0
  281. package/dist/gasless/settle-gasless-deposit-new-account/query.js +12 -0
  282. package/dist/gasless/settle-gasless-deposit-new-account/query.js.map +1 -0
  283. package/dist/gasless/settle-gasless-deposit-new-account/settle-gasless-deposit-new-account.d.ts +106 -0
  284. package/dist/gasless/settle-gasless-deposit-new-account/settle-gasless-deposit-new-account.d.ts.map +1 -0
  285. package/dist/gasless/settle-gasless-deposit-new-account/settle-gasless-deposit-new-account.js +43 -0
  286. package/dist/gasless/settle-gasless-deposit-new-account/settle-gasless-deposit-new-account.js.map +1 -0
  287. package/dist/gasless/status-read-limiter.d.ts +44 -0
  288. package/dist/gasless/status-read-limiter.d.ts.map +1 -0
  289. package/dist/gasless/status-read-limiter.js +28 -0
  290. package/dist/gasless/status-read-limiter.js.map +1 -0
  291. package/dist/gasless/to-gasless-deposit-receipt.d.ts +61 -0
  292. package/dist/gasless/to-gasless-deposit-receipt.d.ts.map +1 -0
  293. package/dist/gasless/to-gasless-deposit-receipt.js +36 -0
  294. package/dist/gasless/to-gasless-deposit-receipt.js.map +1 -0
  295. package/dist/gasless/to-gasless-submit-receipt.d.ts +60 -0
  296. package/dist/gasless/to-gasless-submit-receipt.d.ts.map +1 -0
  297. package/dist/gasless/to-gasless-submit-receipt.js +26 -0
  298. package/dist/gasless/to-gasless-submit-receipt.js.map +1 -0
  299. package/dist/gasless/transient-read.d.ts +32 -0
  300. package/dist/gasless/transient-read.d.ts.map +1 -0
  301. package/dist/gasless/transient-read.js +28 -0
  302. package/dist/gasless/transient-read.js.map +1 -0
  303. package/dist/gasless/types/generated/gasless-deposits.d.ts +170 -0
  304. package/dist/gasless/types/generated/gasless-deposits.d.ts.map +1 -0
  305. package/dist/gasless/types/generated/gasless-operations.d.ts +260 -0
  306. package/dist/gasless/types/generated/gasless-operations.d.ts.map +1 -0
  307. package/dist/gasless/types.d.ts +493 -0
  308. package/dist/gasless/types.d.ts.map +1 -0
  309. package/dist/gasless/types.js +33 -0
  310. package/dist/gasless/types.js.map +1 -0
  311. package/dist/gasless/unconfirmed-submit.d.ts +132 -0
  312. package/dist/gasless/unconfirmed-submit.d.ts.map +1 -0
  313. package/dist/gasless/unconfirmed-submit.js +49 -0
  314. package/dist/gasless/unconfirmed-submit.js.map +1 -0
  315. package/dist/gasless/wait-for-gasless-request/index.d.ts +2 -0
  316. package/dist/gasless/wait-for-gasless-request/index.d.ts.map +1 -0
  317. package/dist/gasless/wait-for-gasless-request/wait-for-gasless-request.d.ts +114 -0
  318. package/dist/gasless/wait-for-gasless-request/wait-for-gasless-request.d.ts.map +1 -0
  319. package/dist/gasless/wait-for-gasless-request/wait-for-gasless-request.js +77 -0
  320. package/dist/gasless/wait-for-gasless-request/wait-for-gasless-request.js.map +1 -0
  321. package/dist/gasless/wallet-id.d.ts +42 -0
  322. package/dist/gasless/wallet-id.d.ts.map +1 -0
  323. package/dist/gasless/wallet-id.js +25 -0
  324. package/dist/gasless/wallet-id.js.map +1 -0
  325. package/dist/gasless/wire-parse.d.ts +33 -0
  326. package/dist/gasless/wire-parse.d.ts.map +1 -0
  327. package/dist/gasless/wire-parse.js +14 -0
  328. package/dist/gasless/wire-parse.js.map +1 -0
  329. package/dist/gasless/wire-types.d.ts +73 -0
  330. package/dist/gasless/wire-types.d.ts.map +1 -0
  331. package/dist/gasless/write-request-registry.d.ts +56 -0
  332. package/dist/gasless/write-request-registry.d.ts.map +1 -0
  333. package/dist/gasless/write-request-registry.js +22 -0
  334. package/dist/gasless/write-request-registry.js.map +1 -0
  335. package/dist/index.d.ts +82 -17
  336. package/dist/index.d.ts.map +1 -1
  337. package/dist/index.js +568 -497
  338. package/dist/pools/listing-config/to-listing-config.js +2 -2
  339. package/dist/pools/listing-config/to-listing-config.js.map +1 -1
  340. package/dist/pools/market-detail/to-listing-market-detail.d.ts.map +1 -1
  341. package/dist/pools/market-detail/to-listing-market-detail.js +46 -40
  342. package/dist/pools/market-detail/to-listing-market-detail.js.map +1 -1
  343. package/dist/pools/markets/to-listing-market.d.ts.map +1 -1
  344. package/dist/pools/markets/to-listing-market.js +2 -1
  345. package/dist/pools/markets/to-listing-market.js.map +1 -1
  346. package/dist/pools/types/generated/listing-backend.d.ts +163 -16
  347. package/dist/pools/types/generated/listing-backend.d.ts.map +1 -1
  348. package/dist/pools/types/generated/listing-backend.js.map +1 -1
  349. package/dist/pools/types.d.ts +52 -2
  350. package/dist/pools/types.d.ts.map +1 -1
  351. package/dist/pools/types.js +6 -4
  352. package/dist/pools/types.js.map +1 -1
  353. package/dist/quotes/get-quote-funding/get-quote-funding.d.ts +3 -2
  354. package/dist/quotes/get-quote-funding/get-quote-funding.d.ts.map +1 -1
  355. package/dist/quotes/get-quote-funding/get-quote-funding.js.map +1 -1
  356. package/dist/quotes/get-quote-funding/types.d.ts +4 -2
  357. package/dist/quotes/get-quote-funding/types.d.ts.map +1 -1
  358. package/dist/quotes/get-quote-pending-funding/get-quote-pending-funding.d.ts +68 -0
  359. package/dist/quotes/get-quote-pending-funding/get-quote-pending-funding.d.ts.map +1 -0
  360. package/dist/quotes/get-quote-pending-funding/get-quote-pending-funding.js +34 -0
  361. package/dist/quotes/get-quote-pending-funding/get-quote-pending-funding.js.map +1 -0
  362. package/dist/quotes/get-quote-pending-funding/index.d.ts +4 -0
  363. package/dist/quotes/get-quote-pending-funding/index.d.ts.map +1 -0
  364. package/dist/quotes/get-quote-pending-funding/query.d.ts +58 -0
  365. package/dist/quotes/get-quote-pending-funding/query.d.ts.map +1 -0
  366. package/dist/quotes/get-quote-pending-funding/query.js +27 -0
  367. package/dist/quotes/get-quote-pending-funding/query.js.map +1 -0
  368. package/dist/quotes/get-quote-pending-funding/types.d.ts +19 -0
  369. package/dist/quotes/get-quote-pending-funding/types.d.ts.map +1 -0
  370. package/dist/quotes/get-quotes-events-by-type/get-quotes-events-by-type.d.ts +2 -1
  371. package/dist/quotes/get-quotes-events-by-type/get-quotes-events-by-type.d.ts.map +1 -1
  372. package/dist/quotes/get-quotes-events-by-type/get-quotes-events-by-type.js.map +1 -1
  373. package/dist/quotes/grouping/aggregate-group-funding.d.ts +9 -8
  374. package/dist/quotes/grouping/aggregate-group-funding.d.ts.map +1 -1
  375. package/dist/quotes/grouping/aggregate-group-funding.js.map +1 -1
  376. package/dist/quotes/grouping/partition-quotes.d.ts +30 -0
  377. package/dist/quotes/grouping/partition-quotes.d.ts.map +1 -1
  378. package/dist/quotes/grouping/partition-quotes.js +9 -6
  379. package/dist/quotes/grouping/partition-quotes.js.map +1 -1
  380. package/dist/quotes/index.d.ts +1 -0
  381. package/dist/quotes/index.d.ts.map +1 -1
  382. package/dist/quotes/unified-quote.d.ts +6 -6
  383. package/dist/quotes/unified-quote.js.map +1 -1
  384. package/dist/shared/errors/redact-url.d.ts +15 -0
  385. package/dist/shared/errors/redact-url.d.ts.map +1 -0
  386. package/dist/shared/errors/redact-url.js +9 -0
  387. package/dist/shared/errors/redact-url.js.map +1 -0
  388. package/dist/shared/errors/retry-after.d.ts +17 -0
  389. package/dist/shared/errors/retry-after.d.ts.map +1 -0
  390. package/dist/shared/errors/retry-after.js +16 -0
  391. package/dist/shared/errors/retry-after.js.map +1 -0
  392. package/dist/shared/errors/sanitized-api-error.d.ts +32 -0
  393. package/dist/shared/errors/sanitized-api-error.d.ts.map +1 -0
  394. package/dist/shared/errors/sanitized-api-error.js +41 -0
  395. package/dist/shared/errors/sanitized-api-error.js.map +1 -0
  396. package/dist/shared/errors/symm-error.d.ts +39 -4
  397. package/dist/shared/errors/symm-error.d.ts.map +1 -1
  398. package/dist/shared/errors/symm-error.js +29 -15
  399. package/dist/shared/errors/symm-error.js.map +1 -1
  400. package/dist/shared/types/properties.d.ts +53 -5
  401. package/dist/shared/types/properties.d.ts.map +1 -1
  402. package/dist/shared/utils/core-units.d.ts +82 -0
  403. package/dist/shared/utils/core-units.d.ts.map +1 -0
  404. package/dist/shared/utils/core-units.js +21 -0
  405. package/dist/shared/utils/core-units.js.map +1 -0
  406. package/dist/shared/utils/http-header.d.ts +16 -0
  407. package/dist/shared/utils/http-header.d.ts.map +1 -0
  408. package/dist/shared/utils/http-header.js +14 -0
  409. package/dist/shared/utils/http-header.js.map +1 -0
  410. package/dist/shared/utils/query.js +2 -1
  411. package/dist/shared/utils/query.js.map +1 -1
  412. package/dist/solvers/force-close/force-close-auto.d.ts +6 -2
  413. package/dist/solvers/force-close/force-close-auto.d.ts.map +1 -1
  414. package/dist/solvers/force-close/force-close-auto.js +2 -1
  415. package/dist/solvers/force-close/force-close-auto.js.map +1 -1
  416. package/dist/solvers/force-close/force-close-position.d.ts +9 -3
  417. package/dist/solvers/force-close/force-close-position.d.ts.map +1 -1
  418. package/dist/solvers/force-close/force-close-position.js +2 -1
  419. package/dist/solvers/force-close/force-close-position.js.map +1 -1
  420. package/dist/solvers/instant-open/instant-open/adapters/enigma-instant-open.js +12 -12
  421. package/dist/solvers/instant-open/instant-open/adapters/rasa-instant-open.js +7 -7
  422. package/dist/symmio-contracts/abi/index.d.ts +2 -0
  423. package/dist/symmio-contracts/abi/index.d.ts.map +1 -1
  424. package/dist/symmio-contracts/abi/v0.8.6/gasless-layer.d.ts +2323 -0
  425. package/dist/symmio-contracts/abi/v0.8.6/gasless-layer.d.ts.map +1 -0
  426. package/dist/symmio-contracts/abi/v0.8.6/gasless-layer.js +2706 -0
  427. package/dist/symmio-contracts/abi/v0.8.6/gasless-layer.js.map +1 -0
  428. package/dist/symmio-contracts/abi/v0.8.6/gasless-wallet.d.ts +137 -0
  429. package/dist/symmio-contracts/abi/v0.8.6/gasless-wallet.d.ts.map +1 -0
  430. package/dist/symmio-contracts/abi/v0.8.6/gasless-wallet.js +145 -0
  431. package/dist/symmio-contracts/abi/v0.8.6/gasless-wallet.js.map +1 -0
  432. package/dist/symmio-contracts/abi/v0.8.6/index.d.ts +2 -0
  433. package/dist/symmio-contracts/abi/v0.8.6/index.d.ts.map +1 -1
  434. package/dist/symmio-contracts/abi/v0.8.6/instant-layer.d.ts +1879 -37
  435. package/dist/symmio-contracts/abi/v0.8.6/instant-layer.d.ts.map +1 -1
  436. package/dist/symmio-contracts/abi/v0.8.6/instant-layer.js +2180 -50
  437. package/dist/symmio-contracts/abi/v0.8.6/instant-layer.js.map +1 -1
  438. package/dist/symmio-contracts/account-layer/actions/add-margin.d.ts +2 -2
  439. package/dist/symmio-contracts/account-layer/actions/add-margin.d.ts.map +1 -1
  440. package/dist/symmio-contracts/account-layer/actions/add-margin.js +34 -17
  441. package/dist/symmio-contracts/account-layer/actions/add-margin.js.map +1 -1
  442. package/dist/symmio-contracts/account-layer/actions/create-sub-accounts.d.ts +11 -2
  443. package/dist/symmio-contracts/account-layer/actions/create-sub-accounts.d.ts.map +1 -1
  444. package/dist/symmio-contracts/account-layer/actions/create-sub-accounts.js +33 -17
  445. package/dist/symmio-contracts/account-layer/actions/create-sub-accounts.js.map +1 -1
  446. package/dist/symmio-contracts/account-layer/actions/delete-sub-account.d.ts +9 -2
  447. package/dist/symmio-contracts/account-layer/actions/delete-sub-account.d.ts.map +1 -1
  448. package/dist/symmio-contracts/account-layer/actions/delete-sub-account.js +33 -16
  449. package/dist/symmio-contracts/account-layer/actions/delete-sub-account.js.map +1 -1
  450. package/dist/symmio-contracts/account-layer/actions/deposit-and-allocate-for-account.d.ts +8 -2
  451. package/dist/symmio-contracts/account-layer/actions/deposit-and-allocate-for-account.d.ts.map +1 -1
  452. package/dist/symmio-contracts/account-layer/actions/deposit-and-allocate-for-account.js +34 -17
  453. package/dist/symmio-contracts/account-layer/actions/deposit-and-allocate-for-account.js.map +1 -1
  454. package/dist/symmio-contracts/account-layer/actions/deposit-for-account.d.ts +8 -2
  455. package/dist/symmio-contracts/account-layer/actions/deposit-for-account.d.ts.map +1 -1
  456. package/dist/symmio-contracts/account-layer/actions/deposit-for-account.js +34 -17
  457. package/dist/symmio-contracts/account-layer/actions/deposit-for-account.js.map +1 -1
  458. package/dist/symmio-contracts/account-layer/actions/edit-account-name.d.ts +7 -2
  459. package/dist/symmio-contracts/account-layer/actions/edit-account-name.d.ts.map +1 -1
  460. package/dist/symmio-contracts/account-layer/actions/edit-account-name.js +34 -17
  461. package/dist/symmio-contracts/account-layer/actions/edit-account-name.js.map +1 -1
  462. package/dist/symmio-contracts/account-layer/actions/get-account-balance-info.d.ts +1 -1
  463. package/dist/symmio-contracts/account-layer/actions/get-account-balance-info.js.map +1 -1
  464. package/dist/symmio-contracts/account-layer/actions/get-account-balance-of.d.ts +9 -3
  465. package/dist/symmio-contracts/account-layer/actions/get-account-balance-of.d.ts.map +1 -1
  466. package/dist/symmio-contracts/account-layer/actions/get-account-balance-of.js.map +1 -1
  467. package/dist/symmio-contracts/account-layer/actions/remove-margin.d.ts +2 -2
  468. package/dist/symmio-contracts/account-layer/actions/remove-margin.d.ts.map +1 -1
  469. package/dist/symmio-contracts/account-layer/actions/remove-margin.js +41 -20
  470. package/dist/symmio-contracts/account-layer/actions/remove-margin.js.map +1 -1
  471. package/dist/symmio-contracts/account-layer/types.d.ts +3 -1
  472. package/dist/symmio-contracts/account-layer/types.d.ts.map +1 -1
  473. package/dist/symmio-contracts/account-layer/types.js.map +1 -1
  474. package/dist/symmio-contracts/instant-layer/actions/finalize-revoke-delegation.d.ts +60 -0
  475. package/dist/symmio-contracts/instant-layer/actions/finalize-revoke-delegation.d.ts.map +1 -0
  476. package/dist/symmio-contracts/instant-layer/actions/finalize-revoke-delegation.js +35 -0
  477. package/dist/symmio-contracts/instant-layer/actions/finalize-revoke-delegation.js.map +1 -0
  478. package/dist/symmio-contracts/instant-layer/actions/get-active-delegations.d.ts +91 -0
  479. package/dist/symmio-contracts/instant-layer/actions/get-active-delegations.d.ts.map +1 -0
  480. package/dist/symmio-contracts/instant-layer/actions/get-active-delegations.js +19 -0
  481. package/dist/symmio-contracts/instant-layer/actions/get-active-delegations.js.map +1 -0
  482. package/dist/symmio-contracts/instant-layer/actions/get-instant-layer-nonce.d.ts +36 -0
  483. package/dist/symmio-contracts/instant-layer/actions/get-instant-layer-nonce.d.ts.map +1 -0
  484. package/dist/symmio-contracts/instant-layer/actions/get-instant-layer-nonce.js +15 -0
  485. package/dist/symmio-contracts/instant-layer/actions/get-instant-layer-nonce.js.map +1 -0
  486. package/dist/symmio-contracts/instant-layer/actions/get-pending-revocation-etas.d.ts +79 -0
  487. package/dist/symmio-contracts/instant-layer/actions/get-pending-revocation-etas.d.ts.map +1 -0
  488. package/dist/symmio-contracts/instant-layer/actions/get-pending-revocation-etas.js +32 -0
  489. package/dist/symmio-contracts/instant-layer/actions/get-pending-revocation-etas.js.map +1 -0
  490. package/dist/symmio-contracts/instant-layer/actions/get-revocation-cooldown.d.ts +43 -0
  491. package/dist/symmio-contracts/instant-layer/actions/get-revocation-cooldown.d.ts.map +1 -0
  492. package/dist/symmio-contracts/instant-layer/actions/get-revocation-cooldown.js +14 -0
  493. package/dist/symmio-contracts/instant-layer/actions/get-revocation-cooldown.js.map +1 -0
  494. package/dist/symmio-contracts/instant-layer/actions/grant-delegation.d.ts +24 -3
  495. package/dist/symmio-contracts/instant-layer/actions/grant-delegation.d.ts.map +1 -1
  496. package/dist/symmio-contracts/instant-layer/actions/grant-delegation.js +48 -22
  497. package/dist/symmio-contracts/instant-layer/actions/grant-delegation.js.map +1 -1
  498. package/dist/symmio-contracts/instant-layer/actions/initiate-revoke-delegation.d.ts +62 -0
  499. package/dist/symmio-contracts/instant-layer/actions/initiate-revoke-delegation.d.ts.map +1 -0
  500. package/dist/symmio-contracts/instant-layer/actions/initiate-revoke-delegation.js +35 -0
  501. package/dist/symmio-contracts/instant-layer/actions/initiate-revoke-delegation.js.map +1 -0
  502. package/dist/symmio-contracts/instant-layer/index.d.ts +12 -0
  503. package/dist/symmio-contracts/instant-layer/index.d.ts.map +1 -1
  504. package/dist/symmio-contracts/instant-layer/query/finalize-revoke-delegation.d.ts +22 -0
  505. package/dist/symmio-contracts/instant-layer/query/finalize-revoke-delegation.d.ts.map +1 -0
  506. package/dist/symmio-contracts/instant-layer/query/finalize-revoke-delegation.js +12 -0
  507. package/dist/symmio-contracts/instant-layer/query/finalize-revoke-delegation.js.map +1 -0
  508. package/dist/symmio-contracts/instant-layer/query/get-active-delegations.d.ts +36 -0
  509. package/dist/symmio-contracts/instant-layer/query/get-active-delegations.d.ts.map +1 -0
  510. package/dist/symmio-contracts/instant-layer/query/get-active-delegations.js +29 -0
  511. package/dist/symmio-contracts/instant-layer/query/get-active-delegations.js.map +1 -0
  512. package/dist/symmio-contracts/instant-layer/query/get-instant-layer-nonce.d.ts +39 -0
  513. package/dist/symmio-contracts/instant-layer/query/get-instant-layer-nonce.d.ts.map +1 -0
  514. package/dist/symmio-contracts/instant-layer/query/get-instant-layer-nonce.js +27 -0
  515. package/dist/symmio-contracts/instant-layer/query/get-instant-layer-nonce.js.map +1 -0
  516. package/dist/symmio-contracts/instant-layer/query/get-is-delegation-active.js +7 -7
  517. package/dist/symmio-contracts/instant-layer/query/get-pending-revocation-etas.d.ts +42 -0
  518. package/dist/symmio-contracts/instant-layer/query/get-pending-revocation-etas.d.ts.map +1 -0
  519. package/dist/symmio-contracts/instant-layer/query/get-pending-revocation-etas.js +30 -0
  520. package/dist/symmio-contracts/instant-layer/query/get-pending-revocation-etas.js.map +1 -0
  521. package/dist/symmio-contracts/instant-layer/query/get-revocation-cooldown.d.ts +36 -0
  522. package/dist/symmio-contracts/instant-layer/query/get-revocation-cooldown.d.ts.map +1 -0
  523. package/dist/symmio-contracts/instant-layer/query/get-revocation-cooldown.js +21 -0
  524. package/dist/symmio-contracts/instant-layer/query/get-revocation-cooldown.js.map +1 -0
  525. package/dist/symmio-contracts/instant-layer/query/initiate-revoke-delegation.d.ts +22 -0
  526. package/dist/symmio-contracts/instant-layer/query/initiate-revoke-delegation.d.ts.map +1 -0
  527. package/dist/symmio-contracts/instant-layer/query/initiate-revoke-delegation.js +12 -0
  528. package/dist/symmio-contracts/instant-layer/query/initiate-revoke-delegation.js.map +1 -0
  529. package/dist/symmio-contracts/symmio/actions/allocate.d.ts +2 -2
  530. package/dist/symmio-contracts/symmio/actions/allocate.d.ts.map +1 -1
  531. package/dist/symmio-contracts/symmio/actions/allocate.js +2 -1
  532. package/dist/symmio-contracts/symmio/actions/allocate.js.map +1 -1
  533. package/dist/symmio-contracts/symmio/actions/approve-operational-fee.d.ts +87 -0
  534. package/dist/symmio-contracts/symmio/actions/approve-operational-fee.d.ts.map +1 -0
  535. package/dist/symmio-contracts/symmio/actions/approve-operational-fee.js +38 -0
  536. package/dist/symmio-contracts/symmio/actions/approve-operational-fee.js.map +1 -0
  537. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.d.ts +2 -2
  538. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.d.ts.map +1 -1
  539. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.js +2 -1
  540. package/dist/symmio-contracts/symmio/actions/deallocate-and-initiate-withdraw.js.map +1 -1
  541. package/dist/symmio-contracts/symmio/actions/deallocate.d.ts +2 -2
  542. package/dist/symmio-contracts/symmio/actions/deallocate.d.ts.map +1 -1
  543. package/dist/symmio-contracts/symmio/actions/deallocate.js +2 -1
  544. package/dist/symmio-contracts/symmio/actions/deallocate.js.map +1 -1
  545. package/dist/symmio-contracts/symmio/actions/finalize-withdraw-request.d.ts +15 -3
  546. package/dist/symmio-contracts/symmio/actions/finalize-withdraw-request.d.ts.map +1 -1
  547. package/dist/symmio-contracts/symmio/actions/finalize-withdraw-request.js +34 -17
  548. package/dist/symmio-contracts/symmio/actions/finalize-withdraw-request.js.map +1 -1
  549. package/dist/symmio-contracts/symmio/actions/force-cancel-close-request.d.ts +2 -2
  550. package/dist/symmio-contracts/symmio/actions/force-cancel-close-request.d.ts.map +1 -1
  551. package/dist/symmio-contracts/symmio/actions/force-cancel-close-request.js +2 -1
  552. package/dist/symmio-contracts/symmio/actions/force-cancel-close-request.js.map +1 -1
  553. package/dist/symmio-contracts/symmio/actions/force-cancel-quote.d.ts +2 -2
  554. package/dist/symmio-contracts/symmio/actions/force-cancel-quote.d.ts.map +1 -1
  555. package/dist/symmio-contracts/symmio/actions/force-cancel-quote.js +2 -1
  556. package/dist/symmio-contracts/symmio/actions/force-cancel-quote.js.map +1 -1
  557. package/dist/symmio-contracts/symmio/actions/get-operational-fee-allowance.d.ts +85 -0
  558. package/dist/symmio-contracts/symmio/actions/get-operational-fee-allowance.d.ts.map +1 -0
  559. package/dist/symmio-contracts/symmio/actions/get-operational-fee-allowance.js +29 -0
  560. package/dist/symmio-contracts/symmio/actions/get-operational-fee-allowance.js.map +1 -0
  561. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.d.ts +2 -2
  562. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.d.ts.map +1 -1
  563. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.js +2 -1
  564. package/dist/symmio-contracts/symmio/actions/initiate-withdraw.js.map +1 -1
  565. package/dist/symmio-contracts/symmio/actions/request-cancel-withdraw.d.ts +2 -2
  566. package/dist/symmio-contracts/symmio/actions/request-cancel-withdraw.d.ts.map +1 -1
  567. package/dist/symmio-contracts/symmio/actions/request-cancel-withdraw.js +2 -1
  568. package/dist/symmio-contracts/symmio/actions/request-cancel-withdraw.js.map +1 -1
  569. package/dist/symmio-contracts/symmio/actions/request-to-cancel-close-request.d.ts +2 -2
  570. package/dist/symmio-contracts/symmio/actions/request-to-cancel-close-request.d.ts.map +1 -1
  571. package/dist/symmio-contracts/symmio/actions/request-to-cancel-close-request.js +2 -1
  572. package/dist/symmio-contracts/symmio/actions/request-to-cancel-close-request.js.map +1 -1
  573. package/dist/symmio-contracts/symmio/actions/request-to-cancel-quote.d.ts +2 -2
  574. package/dist/symmio-contracts/symmio/actions/request-to-cancel-quote.d.ts.map +1 -1
  575. package/dist/symmio-contracts/symmio/actions/request-to-cancel-quote.js +2 -1
  576. package/dist/symmio-contracts/symmio/actions/request-to-cancel-quote.js.map +1 -1
  577. package/dist/symmio-contracts/symmio/actions/withdraw-auto.d.ts +9 -7
  578. package/dist/symmio-contracts/symmio/actions/withdraw-auto.d.ts.map +1 -1
  579. package/dist/symmio-contracts/symmio/actions/withdraw-auto.js +24 -22
  580. package/dist/symmio-contracts/symmio/actions/withdraw-auto.js.map +1 -1
  581. package/dist/symmio-contracts/symmio/actions/withdraw.d.ts +2 -2
  582. package/dist/symmio-contracts/symmio/actions/withdraw.d.ts.map +1 -1
  583. package/dist/symmio-contracts/symmio/actions/withdraw.js +4 -2
  584. package/dist/symmio-contracts/symmio/actions/withdraw.js.map +1 -1
  585. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/get-funding-fees-of-party-b.d.ts +43 -0
  586. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/get-funding-fees-of-party-b.d.ts.map +1 -0
  587. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/get-funding-fees-of-party-b.js +15 -0
  588. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/get-funding-fees-of-party-b.js.map +1 -0
  589. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/index.d.ts +4 -0
  590. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/index.d.ts.map +1 -0
  591. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/query.d.ts +43 -0
  592. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/query.d.ts.map +1 -0
  593. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/query.js +25 -0
  594. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/query.js.map +1 -0
  595. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/types.d.ts +85 -0
  596. package/dist/symmio-contracts/symmio/get-funding-fees-of-party-b/types.d.ts.map +1 -0
  597. package/dist/symmio-contracts/symmio/index.d.ts +5 -0
  598. package/dist/symmio-contracts/symmio/index.d.ts.map +1 -1
  599. package/dist/symmio-contracts/symmio/internal/call-as-sub-account.d.ts +2 -1
  600. package/dist/symmio-contracts/symmio/internal/call-as-sub-account.d.ts.map +1 -1
  601. package/dist/symmio-contracts/symmio/internal/call-as-sub-account.js +46 -17
  602. package/dist/symmio-contracts/symmio/internal/call-as-sub-account.js.map +1 -1
  603. package/dist/symmio-contracts/symmio/query/approve-operational-fee.d.ts +18 -0
  604. package/dist/symmio-contracts/symmio/query/approve-operational-fee.d.ts.map +1 -0
  605. package/dist/symmio-contracts/symmio/query/approve-operational-fee.js +12 -0
  606. package/dist/symmio-contracts/symmio/query/approve-operational-fee.js.map +1 -0
  607. package/dist/symmio-contracts/symmio/query/get-operational-fee-allowance.d.ts +35 -0
  608. package/dist/symmio-contracts/symmio/query/get-operational-fee-allowance.d.ts.map +1 -0
  609. package/dist/symmio-contracts/symmio/query/get-operational-fee-allowance.js +28 -0
  610. package/dist/symmio-contracts/symmio/query/get-operational-fee-allowance.js.map +1 -0
  611. package/dist/symmio-contracts/symmio/types.d.ts +6 -6
  612. package/dist/symmio-contracts/symmio/types.js.map +1 -1
  613. package/dist/symmio-subgraph/executeSubgraphRequest.d.ts +2 -1
  614. package/dist/symmio-subgraph/executeSubgraphRequest.d.ts.map +1 -1
  615. package/dist/symmio-subgraph/executeSubgraphRequest.js +24 -21
  616. package/dist/symmio-subgraph/executeSubgraphRequest.js.map +1 -1
  617. package/dist/websocket/gasless/close-code-policy.d.ts +51 -0
  618. package/dist/websocket/gasless/close-code-policy.d.ts.map +1 -0
  619. package/dist/websocket/gasless/close-code-policy.js +75 -0
  620. package/dist/websocket/gasless/close-code-policy.js.map +1 -0
  621. package/dist/websocket/gasless/gasless-stream-hub.d.ts +61 -0
  622. package/dist/websocket/gasless/gasless-stream-hub.d.ts.map +1 -0
  623. package/dist/websocket/gasless/gasless-stream-hub.js +311 -0
  624. package/dist/websocket/gasless/gasless-stream-hub.js.map +1 -0
  625. package/dist/websocket/gasless/index.d.ts +7 -0
  626. package/dist/websocket/gasless/index.d.ts.map +1 -0
  627. package/dist/websocket/gasless/parse-gasless-stream-message.d.ts +82 -0
  628. package/dist/websocket/gasless/parse-gasless-stream-message.d.ts.map +1 -0
  629. package/dist/websocket/gasless/parse-gasless-stream-message.js +136 -0
  630. package/dist/websocket/gasless/parse-gasless-stream-message.js.map +1 -0
  631. package/dist/websocket/gasless/resolve-gasless-stream-url.d.ts +58 -0
  632. package/dist/websocket/gasless/resolve-gasless-stream-url.d.ts.map +1 -0
  633. package/dist/websocket/gasless/resolve-gasless-stream-url.js +59 -0
  634. package/dist/websocket/gasless/resolve-gasless-stream-url.js.map +1 -0
  635. package/dist/websocket/gasless/types.d.ts +48 -0
  636. package/dist/websocket/gasless/types.d.ts.map +1 -0
  637. package/dist/websocket/gasless/watch-gasless-request.d.ts +72 -0
  638. package/dist/websocket/gasless/watch-gasless-request.d.ts.map +1 -0
  639. package/dist/websocket/gasless/watch-gasless-request.js +35 -0
  640. package/dist/websocket/gasless/watch-gasless-request.js.map +1 -0
  641. package/dist/websocket/index.d.ts +1 -0
  642. package/dist/websocket/index.d.ts.map +1 -1
  643. package/dist/websocket/socket/create-reconnecting-socket.d.ts +39 -6
  644. package/dist/websocket/socket/create-reconnecting-socket.d.ts.map +1 -1
  645. package/dist/websocket/socket/create-reconnecting-socket.js +92 -53
  646. package/dist/websocket/socket/create-reconnecting-socket.js.map +1 -1
  647. package/dist/websocket/socket/socket-status.d.ts +7 -2
  648. package/dist/websocket/socket/socket-status.d.ts.map +1 -1
  649. package/dist/websocket/socket/socket-status.js.map +1 -1
  650. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nonce-lock.js","names":[],"sources":["../../src/gasless/nonce-lock.ts"],"sourcesContent":["import type { Config } from \"../core/config\";\nimport { SymmError } from \"../shared/errors/symm-error\";\nimport { isGaslessAcceptedInstanceMismatchError } from \"./http\";\nimport { isGaslessAcceptanceInvalidError } from \"./to-gasless-submit-receipt\";\nimport { GaslessRequestStatus, type GaslessRequest, type GaslessService } from \"./types\";\nimport { getGaslessUnconfirmedSubmit } from \"./unconfirmed-submit\";\nimport { waitForGaslessRequest } from \"./wait-for-gasless-request/wait-for-gasless-request\";\n\n/**\n * Per-config serialization of gasless relays by **nonce stream**.\n *\n * Replay nonces are sequential and read fresh immediately before signing; two\n * concurrent relays built from the same read would sign the same nonce and one\n * would be rejected in simulation. This chains each stream's relays behind a\n * promise so the read-sign-submit critical section never overlaps. Keyed off\n * the `Config` object with a `WeakMap` so locks die with the config.\n *\n * @internal\n */\nconst locks = new WeakMap<Config, Map<string, Promise<unknown>>>();\n\n/**\n * The lock/stream key of an account's **InstantLayer** operation nonces, which\n * the contract counts per `signerAccount`.\n *\n * @param chainId - The chain the operation relays on.\n * @param signerAccount - The operation's `signerAccount.addr`.\n * @returns The stream key.\n *\n * @internal\n */\nexport function gaslessInstantNonceStreamKey(chainId: number, signerAccount: string): string {\n return `${chainId}:instant:${signerAccount.toLowerCase()}`;\n}\n\n/**\n * The lock/stream key of a **gasless-wallet operation** nonce stream.\n *\n * The two shapes mirror the contract's own storage. Wallet `0` counts in\n * `_legacyWalletOperationNonces[signerAccount]`, one stream per signer account\n * across every owner, so its key deliberately omits the owner — keying it by\n * owner would let two owners' relays sign the same legacy nonce. Every positive\n * id counts in `walletNonces[wallet][signerAccount]`, so its key carries both\n * the id and the owner that derives the wallet.\n *\n * @param chainId - The chain the operation relays on.\n * @param walletId - The selected wallet id.\n * @param owner - The wallet's owner.\n * @param signerAccount - The operation's `signerAccount.addr`.\n * @returns The stream key.\n *\n * @internal\n */\nexport function gaslessWalletNonceStreamKey(\n chainId: number,\n walletId: bigint,\n owner: string,\n signerAccount: string,\n): string {\n const signer = signerAccount.toLowerCase();\n return walletId === 0n\n ? `${chainId}:wallet:0:${signer}`\n : `${chainId}:wallet:${walletId}:${owner.toLowerCase()}:${signer}`;\n}\n\n/**\n * Run `task` exclusively for one nonce stream. Queued tasks run in FIFO order;\n * a failed task never blocks the next one, and the map entry is cleared once\n * the last queued task settles.\n *\n * @param config - The SDK config the locks belong to.\n * @param key - A stream key from {@link gaslessInstantNonceStreamKey} or {@link gaslessWalletNonceStreamKey}.\n * @param task - The read-sign-submit critical section.\n *\n * @internal\n */\nexport function withGaslessNonceLock<result>(\n config: Config,\n key: string,\n task: () => Promise<result>,\n): Promise<result> {\n return withGaslessNonceLocks(config, [key], task);\n}\n\n/**\n * Run `task` exclusively for **several** nonce streams at once — a batch that\n * signs on more than one stream (an account's InstantLayer stream plus one\n * stream per GaslessWallet id). The single-stream {@link withGaslessNonceLock}\n * is the one-key case.\n *\n * The task joins every stream's queue in the same synchronous step and starts\n * once all of their earlier tasks have settled. A task therefore only ever\n * waits on tasks queued before it, so two batches that share streams — in any\n * order — can never each hold one stream while waiting for the other's.\n *\n * @param config - The SDK config the locks belong to.\n * @param keys - The stream keys the task signs on; duplicates are ignored.\n * @param task - The read-sign-submit critical section.\n *\n * @internal\n */\nexport function withGaslessNonceLocks<result>(\n config: Config,\n keys: readonly string[],\n task: () => Promise<result>,\n): Promise<result> {\n let byKey = locks.get(config);\n if (!byKey) {\n byKey = new Map();\n locks.set(config, byKey);\n }\n const queues = byKey;\n const streams = [...new Set(keys)];\n\n const previous = Promise.all(streams.map((key) => queues.get(key) ?? Promise.resolve()));\n const run = previous.then(task, task);\n\n const settled = run.then(\n () => undefined,\n () => undefined,\n );\n for (const key of streams) queues.set(key, settled);\n void settled.then(() => {\n for (const key of streams) {\n if (queues.get(key) === settled) queues.delete(key);\n }\n });\n\n return run;\n}\n\n/**\n * A signature that left this SDK on one nonce stream and has not been seen\n * consumed on-chain yet.\n *\n * @internal\n */\ninterface GaslessPendingNonce {\n /** The highest nonce the submitted batch signed on this stream. */\n signedNonce: bigint;\n /** The accepted request's id, or `null` when the submit's outcome is unknown. */\n requestId: string | null;\n /** Which service stores the request. */\n service: GaslessService;\n /** The chain the request was submitted on. */\n chainId: number;\n /** When the signature expires (ms since epoch) — after that it can never land. */\n expiresAtMs: number;\n}\n\n/** The pending signature per stream, per config. @internal */\nconst pendingNonces = new WeakMap<Config, Map<string, GaslessPendingNonce>>();\n\n/**\n * The highest nonce a `succeeded` relay consumed, per stream, per config.\n *\n * `succeeded` is the relayer's node's view, and a public RPC can trail it by a\n * few blocks — long enough for the next write to read the old nonce and sign\n * it again. A consumed nonce stays consumed, so every read on the stream is\n * raised to this floor for as long as the config lives.\n *\n * @internal\n */\nconst consumedFloors = new WeakMap<Config, Map<string, bigint>>();\n\n/** How long a new caller may wait for a pending signature to resolve, whatever its deadline says. */\nconst GASLESS_NONCE_STREAM_WAIT_MS = 120_000;\n/** Cadence of the on-chain nonce re-read while waiting for an unconfirmed submit. */\nconst GASLESS_NONCE_STREAM_POLL_MS = 1_500;\n\nfunction pendingFor(config: Config): Map<string, GaslessPendingNonce> {\n let byKey = pendingNonces.get(config);\n if (!byKey) {\n byKey = new Map();\n pendingNonces.set(config, byKey);\n }\n return byKey;\n}\n\n/** Forget a stream's pending signature. @internal */\nexport function clearGaslessPendingNonce(config: Config, key: string): void {\n pendingNonces.get(config)?.delete(key);\n}\n\n/** Record that a stream has consumed at least `nonce`, whatever this config's RPC still reports. */\nfunction raiseConsumedFloor(config: Config, key: string, nonce: bigint): void {\n let byKey = consumedFloors.get(config);\n if (!byKey) {\n byKey = new Map();\n consumedFloors.set(config, byKey);\n }\n const floor = byKey.get(key);\n if (floor === undefined || nonce > floor) byKey.set(key, nonce);\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Whether a thrown submit error leaves the stream's signed nonce **possibly or\n * certainly consumed**, so the next caller must wait for it instead of signing\n * it again.\n *\n * Three shapes qualify, and the submit path narrows every ambiguity down to\n * them before they get here:\n *\n * - `GASLESS_SUBMIT_UNCONFIRMED` — the transport failed ambiguously, or a\n * `202` carried no `request_id`. Either way the batch may be executing.\n * - `GASLESS_ACCEPTANCE_INVALID` — the parser's own guard for that second case;\n * acceptance is certain and only the handle was lost, which makes the nonce\n * more likely to be consumed, not less.\n * - A `2xx` from the wrong protocol instance — accepted somewhere, so the\n * signature must be treated as spent.\n *\n * Every other failure is a rejection that consumed nothing: the gateway refused\n * the request before the service saw it, or the service answered with a verdict.\n *\n * @param err - Anything caught from a gasless submit.\n * @returns `true` when the stream must stay blocked until the nonce moves or the signature expires.\n *\n * @internal\n */\nexport function blocksGaslessNonceStream(err: unknown): boolean {\n return (\n getGaslessUnconfirmedSubmit(err) !== null ||\n isGaslessAcceptanceInvalidError(err) ||\n isGaslessAcceptedInstanceMismatchError(err)\n );\n}\n\n/**\n * Submit a relay while keeping the stream's pending-signature record honest.\n *\n * The lock only spans the submit, so the nonce a released lock leaves behind is\n * still unconsumed on-chain for as long as the relayer takes to broadcast. This\n * records what was signed so the **next** caller on the stream can wait for it\n * instead of signing the same nonce again.\n *\n * A blocking failure records `requestId: null`: the batch may have been\n * accepted (an ambiguous transport failure) or is known to have been accepted\n * without a trackable id, so the stream stays blocked until the nonce is seen\n * consumed or the signature expires. A definitive rejection records nothing —\n * nothing was accepted, so the nonce is free immediately.\n *\n * @param config - The SDK config.\n * @param key - The stream key the submit was signed on.\n * @param pending - What was signed: the highest nonce, the service, the chain and the signature deadline (seconds).\n * @param submit - Performs the POST and returns the acceptance receipt.\n * @param blocksStream - Whether a thrown error leaves the signed nonce possibly or certainly consumed; pass {@link blocksGaslessNonceStream}.\n * @returns Whatever `submit` resolved with.\n *\n * @internal\n */\nexport function submitOnGaslessNonceStream<result extends { requestId: string }>(\n config: Config,\n key: string,\n pending: { signedNonce: bigint; service: GaslessService; chainId: number; deadline: bigint },\n submit: () => Promise<result>,\n blocksStream: (err: unknown) => boolean,\n): Promise<result> {\n return submitOnGaslessNonceStreams(\n config,\n [{ key, signedNonce: pending.signedNonce }],\n pending,\n submit,\n blocksStream,\n );\n}\n\n/**\n * {@link submitOnGaslessNonceStream} for a submit that signed on **several**\n * streams — one relay request carrying an InstantLayer operation and a\n * GaslessWallet operation, say. Every stream records the same request, because\n * one request consumes all of them or none; each keeps its own highest signed\n * nonce.\n *\n * @param config - The SDK config.\n * @param streams - Each stream the submit signed on, with the highest nonce it signed there.\n * @param pending - The service, the chain and the signature deadline (seconds), shared by every stream.\n * @param submit - Performs the POST and returns the acceptance receipt.\n * @param blocksStream - Whether a thrown error leaves the signed nonces possibly or certainly consumed; pass {@link blocksGaslessNonceStream}.\n * @returns Whatever `submit` resolved with.\n *\n * @internal\n */\nexport async function submitOnGaslessNonceStreams<result extends { requestId: string }>(\n config: Config,\n streams: readonly { key: string; signedNonce: bigint }[],\n pending: { service: GaslessService; chainId: number; deadline: bigint },\n submit: () => Promise<result>,\n blocksStream: (err: unknown) => boolean,\n): Promise<result> {\n const expiresAtMs = Number(pending.deadline) * 1_000;\n const record = (requestId: string | null) => {\n for (const stream of streams) {\n pendingFor(config).set(stream.key, {\n signedNonce: stream.signedNonce,\n requestId,\n service: pending.service,\n chainId: pending.chainId,\n expiresAtMs,\n });\n }\n };\n\n let receipt: result;\n try {\n receipt = await submit();\n } catch (err) {\n if (blocksStream(err)) record(null);\n throw err;\n }\n\n record(receipt.requestId);\n return receipt;\n}\n\n/**\n * Read a stream's consumed nonce, waiting first for anything this SDK already\n * signed on it and has not seen land.\n *\n * The relayer forwards signed nonces; it never reserves, replaces or repairs\n * them. So signing `consumed + 1` while an earlier signature for that same\n * nonce is still in flight guarantees that one of the two reverts. Rather than\n * hold the lock for the whole broadcast (which would stall every later write\n * behind a slow relay), the lock is released at the `202` and the wait happens\n * lazily here, only when a new caller actually needs the stream.\n *\n * Waiting ends as soon as the pending request reaches **any** terminal status —\n * a failed one frees the nonce, a successful one advances it — or as soon as\n * the nonce is observed to have moved past what was signed. The budget is\n * `min(signature deadline, 120 s)`: past the deadline the signature can never\n * land, so the nonce is free.\n *\n * A successful terminal advances the stream without waiting for this RPC to\n * see the block. `succeeded` is the relayer's node's view and a public RPC can\n * trail it, so the signed nonce becomes a floor under every later read on the\n * stream; the relayer simulates the next submit against its own node, which\n * already has the block.\n *\n * @param config - The SDK config.\n * @param key - The stream key.\n * @param readConsumedNonce - Reads the stream's consumed nonce on-chain.\n * @returns The consumed nonce to sign from (sign `+ 1n`).\n * @throws {SymmError} `GASLESS_NONCE_STREAM_BUSY` when the budget runs out with a signature\n * still unaccounted for — signing now would collide with it.\n *\n * @internal\n */\nexport async function readGaslessStreamNonce(\n config: Config,\n key: string,\n readConsumedNonce: () => Promise<bigint>,\n): Promise<bigint> {\n /** Every read is raised to the nonce a `succeeded` relay on this stream is known to have consumed. */\n const readFloored = async () => {\n const read = await readConsumedNonce();\n const floor = consumedFloors.get(config)?.get(key);\n return floor !== undefined && floor > read ? floor : read;\n };\n\n const consumed = await readFloored();\n const pending = pendingFor(config).get(key);\n if (!pending) return consumed;\n\n const budgetEndsAt = Math.min(pending.expiresAtMs, Date.now() + GASLESS_NONCE_STREAM_WAIT_MS);\n /** Already consumed, or expired past any chance of landing: the stream is free. */\n if (pending.signedNonce <= consumed || budgetEndsAt <= Date.now()) {\n clearGaslessPendingNonce(config, key);\n return consumed;\n }\n\n if (pending.requestId !== null) {\n let terminal: GaslessRequest | null = null;\n try {\n terminal = await waitForGaslessRequest(config, {\n chainId: pending.chainId,\n requestId: pending.requestId,\n service: pending.service,\n until: \"terminal\",\n timeoutMs: budgetEndsAt - Date.now(),\n });\n } catch {\n /**\n * The wait timed out or the status read kept failing. The signature is\n * still unaccounted for, so fall through to watching the nonce itself —\n * the one fact that settles it without the service.\n */\n }\n\n if (terminal !== null) {\n /**\n * `succeeded` proves every signed nonce consumed — a relay that fails any\n * operation reverts whole — even while this RPC still reports the old one.\n * Any other terminal frees the nonce: `reverted` and `rejected` consumed\n * nothing, and since two signatures on one nonce never both execute, even\n * a `failed` transaction that mines late costs one rejection, never a\n * double run.\n */\n if (terminal.status === GaslessRequestStatus.SUCCEEDED) raiseConsumedFloor(config, key, pending.signedNonce);\n clearGaslessPendingNonce(config, key);\n return await readFloored();\n }\n }\n\n while (Date.now() < budgetEndsAt) {\n await sleep(GASLESS_NONCE_STREAM_POLL_MS);\n const latest = await readFloored();\n if (latest >= pending.signedNonce) {\n clearGaslessPendingNonce(config, key);\n return latest;\n }\n }\n\n throw new SymmError(\n \"api\",\n \"GASLESS_NONCE_STREAM_BUSY\",\n `Gasless: nonce ${pending.signedNonce} was signed on this stream${pending.requestId ? ` for request ${pending.requestId}` : \" for a submit that returned no trackable request id\"} and has not landed yet. Signing now would collide with it — wait for that request to finish, or for its deadline to pass, before retrying.`,\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Config } from '../core/config/index.js';
2
+ import { SymmError } from '../shared/errors/symm-error.js';
3
+ import { GaslessRequest, GaslessService } from './types.js';
4
+ /**
5
+ * How a status wait follows a workflow.
6
+ *
7
+ * - `"auto"` (default): subscribe to the gateway's status stream when the
8
+ * deployment enables it, and poll only while the stream is not delivering.
9
+ * - `"poll"`: HTTP polling only — the transport the SDK has always used.
10
+ */
11
+ export type GaslessStatusTransport = "auto" | "poll";
12
+ /**
13
+ * What the stream is doing for one workflow, from a status wait's point of view.
14
+ *
15
+ * - `"pending"` — dialing, or subscribed and waiting for the first record. The
16
+ * wait holds its first HTTP read for a moment, since the answer is coming.
17
+ * - `"live"` — delivering; polling stands down.
18
+ * - `"unavailable"` — it will not deliver for now (unreachable, not on this
19
+ * instance, over the subscription cap, disabled). Poll, and do not wait.
20
+ *
21
+ * @internal
22
+ */
23
+ export type GaslessObserverState = "pending" | "live" | "unavailable";
24
+ /**
25
+ * A live view of one workflow, fed by the status stream.
26
+ *
27
+ * The wait loop owns the HTTP polling; this only tells it what the stream is
28
+ * doing for the workflow and hands over the records it delivered. The split
29
+ * keeps one rule intact: a `watch*` never issues HTTP, and a poller never
30
+ * pretends to be a subscription.
31
+ *
32
+ * @internal
33
+ */
34
+ export interface GaslessStatusObserver {
35
+ /** What the stream is doing for this workflow right now. */
36
+ state(): GaslessObserverState;
37
+ /** Take the newest record the stream delivered since the last call, if any. */
38
+ take(): GaslessRequest | null;
39
+ /**
40
+ * Resolve on the next stream delivery, on a change in {@link state}, or after
41
+ * `timeoutMs` — whichever comes first. The wait loop uses it instead of a
42
+ * blind sleep, so a stream update is acted on the moment it lands and a
43
+ * stream that gives up is not waited on for the full window.
44
+ */
45
+ wait(timeoutMs: number, signal?: AbortSignal): Promise<void>;
46
+ /** Release the subscription. */
47
+ close(): void;
48
+ }
49
+ /**
50
+ * Subscribe to a workflow's status stream, when the deployment has one.
51
+ *
52
+ * Returns `null` when the chain cannot stream (no gasless block, streams not
53
+ * enabled, a proxy with no declared gateway origin) or when the subscription
54
+ * throws, so the caller simply keeps polling. Stream errors are reported
55
+ * through `onTransportIssue` and never surface as workflow failures.
56
+ *
57
+ * @internal
58
+ */
59
+ export declare function createGaslessStatusObserver(config: Config, parameters: {
60
+ chainId?: number;
61
+ requestId: string;
62
+ service: GaslessService;
63
+ onTransportIssue?: (error: SymmError) => void;
64
+ }): GaslessStatusObserver | null;
65
+ //# sourceMappingURL=observe-gasless-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe-gasless-request.d.ts","sourceRoot":"","sources":["../../src/gasless/observe-gasless-request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC;AAEtE;;;;;;;;;GASG;AACH,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,KAAK,IAAI,oBAAoB,CAAC;IAC9B,+EAA+E;IAC/E,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC;IAC9B;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,gCAAgC;IAChC,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE;IACV,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,cAAc,CAAC;IACxB,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;CAC/C,GACA,qBAAqB,GAAG,IAAI,CA8E9B"}
@@ -0,0 +1,56 @@
1
+ import { supportsGaslessStatusStream as e, watchGaslessRequest as t } from "../websocket/gasless/watch-gasless-request.js";
2
+ //#region src/gasless/observe-gasless-request.ts
3
+ function n(n, r) {
4
+ let { chainId: i, requestId: a, service: o, onTransportIssue: s } = r;
5
+ if (!e(n, {
6
+ chainId: i,
7
+ service: o
8
+ })) return null;
9
+ let c = "pending", l = null, u = null;
10
+ function d() {
11
+ let e = u;
12
+ u = null, e?.();
13
+ }
14
+ let f;
15
+ try {
16
+ f = t(n, {
17
+ chainId: i,
18
+ requestId: a,
19
+ service: o,
20
+ onUpdate: (e) => {
21
+ e.request && (l = e.request), d();
22
+ },
23
+ onStatusChange: (e) => {
24
+ let t = e === "live" ? "live" : e === "idle" || e === "connecting" ? "pending" : "unavailable";
25
+ t !== c && (c = t, d());
26
+ },
27
+ onError: (e) => {
28
+ try {
29
+ s?.(e);
30
+ } catch {}
31
+ }
32
+ });
33
+ } catch {
34
+ return null;
35
+ }
36
+ return {
37
+ state: () => c,
38
+ take: () => {
39
+ let e = l;
40
+ return l = null, e;
41
+ },
42
+ wait: (e, t) => new Promise((n) => {
43
+ let r = !1, i = () => {
44
+ r || (r = !0, clearTimeout(a), t?.removeEventListener("abort", i), u = null, n());
45
+ }, a = setTimeout(i, e);
46
+ u = i, t?.addEventListener("abort", i, { once: !0 });
47
+ }),
48
+ close: () => {
49
+ u = null, f();
50
+ }
51
+ };
52
+ }
53
+ //#endregion
54
+ export { n as createGaslessStatusObserver };
55
+
56
+ //# sourceMappingURL=observe-gasless-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe-gasless-request.js","names":[],"sources":["../../src/gasless/observe-gasless-request.ts"],"sourcesContent":["import type { Config } from \"../core/config\";\nimport type { SymmError } from \"../shared/errors/symm-error\";\nimport { supportsGaslessStatusStream, watchGaslessRequest } from \"../websocket/gasless/watch-gasless-request\";\nimport type { GaslessRequest, GaslessService } from \"./types\";\n\n/**\n * How a status wait follows a workflow.\n *\n * - `\"auto\"` (default): subscribe to the gateway's status stream when the\n * deployment enables it, and poll only while the stream is not delivering.\n * - `\"poll\"`: HTTP polling only — the transport the SDK has always used.\n */\nexport type GaslessStatusTransport = \"auto\" | \"poll\";\n\n/**\n * What the stream is doing for one workflow, from a status wait's point of view.\n *\n * - `\"pending\"` — dialing, or subscribed and waiting for the first record. The\n * wait holds its first HTTP read for a moment, since the answer is coming.\n * - `\"live\"` — delivering; polling stands down.\n * - `\"unavailable\"` — it will not deliver for now (unreachable, not on this\n * instance, over the subscription cap, disabled). Poll, and do not wait.\n *\n * @internal\n */\nexport type GaslessObserverState = \"pending\" | \"live\" | \"unavailable\";\n\n/**\n * A live view of one workflow, fed by the status stream.\n *\n * The wait loop owns the HTTP polling; this only tells it what the stream is\n * doing for the workflow and hands over the records it delivered. The split\n * keeps one rule intact: a `watch*` never issues HTTP, and a poller never\n * pretends to be a subscription.\n *\n * @internal\n */\nexport interface GaslessStatusObserver {\n /** What the stream is doing for this workflow right now. */\n state(): GaslessObserverState;\n /** Take the newest record the stream delivered since the last call, if any. */\n take(): GaslessRequest | null;\n /**\n * Resolve on the next stream delivery, on a change in {@link state}, or after\n * `timeoutMs` — whichever comes first. The wait loop uses it instead of a\n * blind sleep, so a stream update is acted on the moment it lands and a\n * stream that gives up is not waited on for the full window.\n */\n wait(timeoutMs: number, signal?: AbortSignal): Promise<void>;\n /** Release the subscription. */\n close(): void;\n}\n\n/**\n * Subscribe to a workflow's status stream, when the deployment has one.\n *\n * Returns `null` when the chain cannot stream (no gasless block, streams not\n * enabled, a proxy with no declared gateway origin) or when the subscription\n * throws, so the caller simply keeps polling. Stream errors are reported\n * through `onTransportIssue` and never surface as workflow failures.\n *\n * @internal\n */\nexport function createGaslessStatusObserver(\n config: Config,\n parameters: {\n chainId?: number;\n requestId: string;\n service: GaslessService;\n onTransportIssue?: (error: SymmError) => void;\n },\n): GaslessStatusObserver | null {\n const { chainId, requestId, service, onTransportIssue } = parameters;\n if (!supportsGaslessStatusStream(config, { chainId, service })) return null;\n\n let state: GaslessObserverState = \"pending\";\n let pending: GaslessRequest | null = null;\n let wake: (() => void) | null = null;\n\n function notify(): void {\n const resume = wake;\n wake = null;\n resume?.();\n }\n\n let unwatch: () => void;\n try {\n unwatch = watchGaslessRequest(config, {\n chainId,\n requestId,\n service,\n onUpdate: (update) => {\n if (update.request) pending = update.request;\n notify();\n },\n onStatusChange: (status) => {\n /**\n * Waking on the `live` flag alone would sleep through the one\n * transition a settling wait most needs: `connecting -> degraded`, the\n * stream saying it cannot answer. Both are \"not live\", so a wait would\n * burn its whole settle window before reading over HTTP.\n */\n const next: GaslessObserverState =\n status === \"live\" ? \"live\" : status === \"idle\" || status === \"connecting\" ? \"pending\" : \"unavailable\";\n if (next !== state) {\n state = next;\n notify();\n }\n },\n onError: (error) => {\n try {\n onTransportIssue?.(error);\n } catch {\n /** An observer must never break the wait it is observing. */\n }\n },\n });\n } catch {\n /** An unsupported or misconfigured stream is not a wait failure: poll instead. */\n return null;\n }\n\n return {\n state: () => state,\n take: () => {\n const record = pending;\n pending = null;\n return record;\n },\n wait: (timeoutMs, signal) =>\n new Promise<void>((resolve) => {\n let settled = false;\n const finish = (): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", finish);\n wake = null;\n resolve();\n };\n const timer = setTimeout(finish, timeoutMs);\n wake = finish;\n signal?.addEventListener(\"abort\", finish, { once: true });\n }),\n close: () => {\n wake = null;\n unwatch();\n },\n };\n}\n"],"mappings":";;AA+DA,SAAgB,EACd,GACA,GAM8B;CAC9B,IAAM,EAAE,YAAS,cAAW,YAAS,wBAAqB;CAC1D,IAAI,CAAC,EAA4B,GAAQ;EAAE;EAAS;CAAQ,CAAC,GAAG,OAAO;CAEvE,IAAI,IAA8B,WAC9B,IAAiC,MACjC,IAA4B;CAEhC,SAAS,IAAe;EACtB,IAAM,IAAS;EAEf,AADA,IAAO,MACP,IAAS;CACX;CAEA,IAAI;CACJ,IAAI;EACF,IAAU,EAAoB,GAAQ;GACpC;GACA;GACA;GACA,WAAW,MAAW;IAEpB,AADI,EAAO,YAAS,IAAU,EAAO,UACrC,EAAO;GACT;GACA,iBAAiB,MAAW;IAO1B,IAAM,IACJ,MAAW,SAAS,SAAS,MAAW,UAAU,MAAW,eAAe,YAAY;IAC1F,AAAI,MAAS,MACX,IAAQ,GACR,EAAO;GAEX;GACA,UAAU,MAAU;IAClB,IAAI;KACF,IAAmB,CAAK;IAC1B,QAAQ,CAER;GACF;EACF,CAAC;CACH,QAAQ;EAEN,OAAO;CACT;CAEA,OAAO;EACL,aAAa;EACb,YAAY;GACV,IAAM,IAAS;GAEf,OADA,IAAU,MACH;EACT;EACA,OAAO,GAAW,MAChB,IAAI,SAAe,MAAY;GAC7B,IAAI,IAAU,IACR,UAAqB;IACrB,MACJ,IAAU,IACV,aAAa,CAAK,GAClB,GAAQ,oBAAoB,SAAS,CAAM,GAC3C,IAAO,MACP,EAAQ;GACV,GACM,IAAQ,WAAW,GAAQ,CAAS;GAE1C,AADA,IAAO,GACP,GAAQ,iBAAiB,SAAS,GAAQ,EAAE,MAAM,GAAK,CAAC;EAC1D,CAAC;EACH,aAAa;GAEX,AADA,IAAO,MACP,EAAQ;EACV;CACF;AACF"}
@@ -0,0 +1,39 @@
1
+ import { GaslessRequestStatus } from './types.js';
2
+ /**
3
+ * The slice of a TanStack query's state the poll jitter is seeded from. Both
4
+ * fields are millisecond timestamps that move on every settled fetch.
5
+ */
6
+ interface GaslessPollSeedState {
7
+ dataUpdatedAt?: number;
8
+ errorUpdatedAt?: number;
9
+ }
10
+ /**
11
+ * The jittered poll delay for a query's current state: stable between renders,
12
+ * redrawn after every fetch.
13
+ *
14
+ * A `refetchInterval` callback must **not** return a fresh random number on
15
+ * every call. TanStack recomputes it inside `QueryObserver.setOptions` and
16
+ * restarts the countdown whenever the value differs from the running one, and
17
+ * React calls `setOptions` on every render. A `Math.random()` delay therefore
18
+ * restarts the timer on each render, so a component that re-renders faster than
19
+ * the band — a price tick, a relay-progress publish, StrictMode — fetches once
20
+ * and never polls again: exactly the frozen-at-`queued` UI this cadence exists
21
+ * to prevent.
22
+ *
23
+ * Seeding the draw with the timestamps of the last settled fetch keeps the
24
+ * jitter that the shared anonymous budget needs — every fetch moves the seed,
25
+ * so every poll draws again — while the value stays constant for as long as
26
+ * nothing has been fetched.
27
+ *
28
+ * @param status - The last known request status, or `undefined` before the first fetch.
29
+ * @param state - The query's `state`; only its update timestamps are read.
30
+ * @returns Milliseconds until the next poll, or `false` once the record is terminal.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * refetchInterval: (query) => gaslessQueryPollDelay(query.state.data?.status, query.state);
35
+ * ```
36
+ */
37
+ export declare function gaslessQueryPollDelay(status: GaslessRequestStatus | undefined, state: GaslessPollSeedState): number | false;
38
+ export {};
39
+ //# sourceMappingURL=query-poll-delay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-poll-delay.d.ts","sourceRoot":"","sources":["../../src/gasless/query-poll-delay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEtE;;;GAGG;AACH,UAAU,oBAAoB;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAcD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,oBAAoB,GAAG,SAAS,EACxC,KAAK,EAAE,oBAAoB,GAC1B,MAAM,GAAG,KAAK,CAGhB"}
@@ -0,0 +1,14 @@
1
+ import { gaslessPollDelay as e } from "./types.js";
2
+ //#region src/gasless/query-poll-delay.ts
3
+ function t(e) {
4
+ let t = e + 1831565813 | 0;
5
+ return t = Math.imul(t ^ t >>> 15, t | 1), t ^= t + Math.imul(t ^ t >>> 7, t | 61), ((t ^ t >>> 14) >>> 0) / 4294967296;
6
+ }
7
+ function n(n, r) {
8
+ let i = t((r.dataUpdatedAt ?? 0) ^ (r.errorUpdatedAt ?? 0));
9
+ return e(n, () => i);
10
+ }
11
+ //#endregion
12
+ export { n as gaslessQueryPollDelay };
13
+
14
+ //# sourceMappingURL=query-poll-delay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-poll-delay.js","names":[],"sources":["../../src/gasless/query-poll-delay.ts"],"sourcesContent":["import { gaslessPollDelay, type GaslessRequestStatus } from \"./types\";\n\n/**\n * The slice of a TanStack query's state the poll jitter is seeded from. Both\n * fields are millisecond timestamps that move on every settled fetch.\n */\ninterface GaslessPollSeedState {\n dataUpdatedAt?: number;\n errorUpdatedAt?: number;\n}\n\n/**\n * One deterministic draw in `[0, 1)` from an integer seed — a single mulberry32\n * mixing step. The same seed always yields the same number, which is the whole\n * point here.\n */\nfunction seededDraw(seed: number): number {\n let t = (seed + 0x6d2b79f5) | 0;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4_294_967_296;\n}\n\n/**\n * The jittered poll delay for a query's current state: stable between renders,\n * redrawn after every fetch.\n *\n * A `refetchInterval` callback must **not** return a fresh random number on\n * every call. TanStack recomputes it inside `QueryObserver.setOptions` and\n * restarts the countdown whenever the value differs from the running one, and\n * React calls `setOptions` on every render. A `Math.random()` delay therefore\n * restarts the timer on each render, so a component that re-renders faster than\n * the band — a price tick, a relay-progress publish, StrictMode — fetches once\n * and never polls again: exactly the frozen-at-`queued` UI this cadence exists\n * to prevent.\n *\n * Seeding the draw with the timestamps of the last settled fetch keeps the\n * jitter that the shared anonymous budget needs — every fetch moves the seed,\n * so every poll draws again — while the value stays constant for as long as\n * nothing has been fetched.\n *\n * @param status - The last known request status, or `undefined` before the first fetch.\n * @param state - The query's `state`; only its update timestamps are read.\n * @returns Milliseconds until the next poll, or `false` once the record is terminal.\n *\n * @example\n * ```ts\n * refetchInterval: (query) => gaslessQueryPollDelay(query.state.data?.status, query.state);\n * ```\n */\nexport function gaslessQueryPollDelay(\n status: GaslessRequestStatus | undefined,\n state: GaslessPollSeedState,\n): number | false {\n const draw = seededDraw((state.dataUpdatedAt ?? 0) ^ (state.errorUpdatedAt ?? 0));\n return gaslessPollDelay(status, () => draw);\n}\n"],"mappings":";;AAgBA,SAAS,EAAW,GAAsB;CACxC,IAAI,IAAK,IAAO,aAAc;CAG9B,OAFA,IAAI,KAAK,KAAK,IAAK,MAAM,IAAK,IAAI,CAAC,GACnC,KAAK,IAAI,KAAK,KAAK,IAAK,MAAM,GAAI,IAAI,EAAE,KAC/B,IAAK,MAAM,QAAS,KAAK;AACpC;AA6BA,SAAgB,EACd,GACA,GACgB;CAChB,IAAM,IAAO,GAAY,EAAM,iBAAiB,MAAM,EAAM,kBAAkB,EAAE;CAChF,OAAO,EAAiB,SAAc,CAAI;AAC5C"}
@@ -0,0 +1,3 @@
1
+ export * from './query.js';
2
+ export * from './relay-gasless-batch.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/gasless/relay-gasless-batch/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Config } from '../../core/config/index.js';
2
+ import { RelayGaslessBatchParameters, RelayGaslessBatchReturnType } from './relay-gasless-batch.js';
3
+ /**
4
+ * Build TanStack Mutation options for {@link relayGaslessBatch}.
5
+ *
6
+ * @param config - The SDK config.
7
+ * @returns Options to pass to `useMutation`.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * useMutation(relayGaslessBatchMutationOptions(config));
12
+ * ```
13
+ */
14
+ export declare function relayGaslessBatchMutationOptions(config: Config): {
15
+ mutationKey: readonly ["relayGaslessBatch"];
16
+ mutationFn: (variables: RelayGaslessBatchParameters) => Promise<RelayGaslessBatchReturnType>;
17
+ };
18
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/gasless/relay-gasless-batch/query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EACjC,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;;;GAUG;AACH,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,MAAM;;4BAGnC,2BAA2B,KAAG,OAAO,CAAC,2BAA2B,CAAC;EAG7F"}
@@ -0,0 +1,12 @@
1
+ import { relayGaslessBatch as e } from "./relay-gasless-batch.js";
2
+ //#region src/gasless/relay-gasless-batch/query.ts
3
+ function t(t) {
4
+ return {
5
+ mutationKey: ["relayGaslessBatch"],
6
+ mutationFn: (n) => e(t, n)
7
+ };
8
+ }
9
+ //#endregion
10
+ export { t as relayGaslessBatchMutationOptions };
11
+
12
+ //# sourceMappingURL=query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","names":[],"sources":["../../../src/gasless/relay-gasless-batch/query.ts"],"sourcesContent":["import type { Config } from \"../../core/config\";\nimport {\n relayGaslessBatch,\n type RelayGaslessBatchParameters,\n type RelayGaslessBatchReturnType,\n} from \"./relay-gasless-batch\";\n\n/**\n * Build TanStack Mutation options for {@link relayGaslessBatch}.\n *\n * @param config - The SDK config.\n * @returns Options to pass to `useMutation`.\n *\n * @example\n * ```ts\n * useMutation(relayGaslessBatchMutationOptions(config));\n * ```\n */\nexport function relayGaslessBatchMutationOptions(config: Config) {\n return {\n mutationKey: [\"relayGaslessBatch\"] as const,\n mutationFn: (variables: RelayGaslessBatchParameters): Promise<RelayGaslessBatchReturnType> =>\n relayGaslessBatch(config, variables),\n };\n}\n"],"mappings":";;AAkBA,SAAgB,EAAiC,GAAgB;CAC/D,OAAO;EACL,aAAa,CAAC,mBAAmB;EACjC,aAAa,MACX,EAAkB,GAAQ,CAAS;CACvC;AACF"}
@@ -0,0 +1,106 @@
1
+ import { Address } from 'viem';
2
+ import { Config } from '../../core/config/index.js';
3
+ import { ChainIdParameter, Compute, FromParameter } from '../../shared/types/properties.js';
4
+ import { GaslessBatchCall } from '../batch/calls.js';
5
+ import { GaslessSubmitReceipt } from '../types.js';
6
+ /**
7
+ * Parameters for {@link relayGaslessBatch}.
8
+ */
9
+ export type RelayGaslessBatchParameters = Compute<ChainIdParameter & FromParameter & {
10
+ /**
11
+ * The sub-account every operation runs under: the `signerAccount` of each
12
+ * relayable write, whose InstantLayer nonces the batch consumes and whose
13
+ * delegations authorize a session key; the billing account (a virtual
14
+ * account bills its parent); and, for GaslessWallet entries, the account
15
+ * whose owner's wallets execute — `ownerOf(account)`, so a sub-account
16
+ * resolves to its owner's wallets.
17
+ *
18
+ * Margin writes run under the virtual account's **parent** sub-account,
19
+ * with the virtual account as a calldata argument.
20
+ */
21
+ account: Address;
22
+ /**
23
+ * The calls, in execution order. The batch is **atomic**: one revert rolls
24
+ * back every call and every fee. Each is signed separately — the protocol
25
+ * has no batch signature — so a browser wallet shows one prompt per call,
26
+ * while a session key signs them silently.
27
+ */
28
+ calls: readonly GaslessBatchCall[];
29
+ /**
30
+ * Free-form workflow label (1-128 characters) stored with the request for
31
+ * metrics and vendor support. Defaults to the calls' own labels joined with
32
+ * `+` (`"approveOperationalFee+allocate"`), or `"gaslessBatch"` when that is
33
+ * too long. Fees are **not** keyed from it.
34
+ */
35
+ operationType?: string;
36
+ /** Non-secret client correlation data stored with the request. */
37
+ metadata?: Record<string, unknown>;
38
+ }>;
39
+ /** Return type of {@link relayGaslessBatch}. */
40
+ export type RelayGaslessBatchReturnType = GaslessSubmitReceipt;
41
+ /**
42
+ * Relay **several gasless actions as one request** — one atomic transaction the
43
+ * GaslessQ relayer broadcasts and pays gas for.
44
+ *
45
+ * Give each relayable write as `{ functionName, args }` (with an optional
46
+ * `abi`) or raw `{ data }` — the target contract is resolved from its selector —
47
+ * and calls the owner's GaslessWallet makes as `{ walletCalls, walletId }`. The
48
+ * forms mix freely:
49
+ *
50
+ * 1. every call is encoded and checked before any network call — a write the
51
+ * relayer cannot carry throws `GASLESS_NOT_RELAYABLE`;
52
+ * 2. a session key's delegations are checked before any prompt
53
+ * (`execution.preflightDelegation`, default on);
54
+ * 3. fresh nonces are read and sequenced per stream — the account's InstantLayer
55
+ * nonces for the writes, each wallet id's own nonces for its entries;
56
+ * 4. the batch is priced on-chain before any prompt (`execution.preflightFee`,
57
+ * default on) — a quote the contract refuses throws, a quote that fails for
58
+ * transport reasons does not block;
59
+ * 5. each operation is signed — one EIP-712 prompt per call, in order;
60
+ * 6. one `relay-instant` request carries them all, with one wallet id per
61
+ * operation (`0` for every write).
62
+ *
63
+ * The fee is collected **after** the whole batch executes, so an operational-fee
64
+ * approval earlier in the batch already covers the calls after it. Preview the
65
+ * same calls with {@link getGaslessBatchFeeQuote}.
66
+ *
67
+ * Fire-and-forget, like {@link relayInstantOperations}: persist the receipt's
68
+ * `requestId`, `owner`, `walletIds` and `idempotencyKey`, then follow the
69
+ * request to a terminal status. A `202` is the point of no return. React
70
+ * consumers should reach for `useRelayGaslessBatch`, which confirms the request
71
+ * before it resolves.
72
+ *
73
+ * @param config - The SDK config (must have a `getWalletClient` resolver).
74
+ * @param parameters - The account, the calls, and optional chain / signer / label overrides.
75
+ * @returns The acceptance receipt; persist it immediately.
76
+ * @throws {SymmError} `GASLESS_NOT_CONFIGURED` / `GASLESS_UNSUPPORTED_CONTRACTS_VERSION`.
77
+ * @throws {SymmError} `GASLESS_EMPTY_BATCH`, `GASLESS_NOT_RELAYABLE` or `GASLESS_WALLET_ID_INVALID`
78
+ * before any network call.
79
+ * @throws {SymmError} `GASLESS_CONFIG_INCOHERENT` when the GaslessLayer verifies another InstantLayer.
80
+ * @throws {SymmError} `GASLESS_SIGNER_NOT_DELEGATED` when a session key is missing a selector —
81
+ * grant `getGaslessBatchSelectors(calls)` on `account`.
82
+ * @throws {SymmError} `GASLESS_FREE_QUOTA_EXHAUSTED`, `GASLESS_FEE_QUOTE_REVERTED` or
83
+ * `GASLESS_LAYER_INTERFACE_UNSUPPORTED` from the fee pre-flight, before any prompt.
84
+ * @throws {SymmError} `GASLESS_NONCE_STREAM_BUSY` when an earlier relay on one of the
85
+ * batch's nonce streams is still unaccounted for.
86
+ * @throws {SymmApiError} `GASLESS_RELAY_SUBMIT_FAILED` on HTTP failure, and
87
+ * `GASLESS_SUBMIT_UNCONFIRMED` when the outcome could not be established — replay it with
88
+ * `resubmitGaslessRequest`, never by signing the batch again.
89
+ * @throws The wallet's own error when the user rejects a prompt; nothing is submitted.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * import { relayGaslessBatch } from "@symmio/trading-core";
94
+ *
95
+ * // Approve the gateway's fee allowance and use it in the same request.
96
+ * const receipt = await relayGaslessBatch(config, {
97
+ * account: subAccount,
98
+ * calls: [
99
+ * { functionName: "approveOperationalFeeWithMultiplier", args: [[gaslessLayer], [budget18], [10_000n]] },
100
+ * { functionName: "allocate", args: [amount] },
101
+ * ],
102
+ * });
103
+ * ```
104
+ */
105
+ export declare function relayGaslessBatch(config: Config, parameters: RelayGaslessBatchParameters): Promise<RelayGaslessBatchReturnType>;
106
+ //# sourceMappingURL=relay-gasless-batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-gasless-batch.d.ts","sourceRoot":"","sources":["../../../src/gasless/relay-gasless-batch/relay-gasless-batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,OAAO,EAAY,MAAM,MAAM,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAK9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AA0BvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAQrD;;GAEG;AACH,MAAM,MAAM,2BAA2B,GAAG,OAAO,CAC/C,gBAAgB,GACd,aAAa,GAAG;IACd;;;;;;;;;;OAUG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,KAAK,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACnC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CACJ,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,2BAA2B,GAAG,oBAAoB,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,2BAA2B,GACtC,OAAO,CAAC,2BAA2B,CAAC,CAyKtC"}
@@ -0,0 +1,145 @@
1
+ import { SymmError as e } from "../../shared/errors/symm-error.js";
2
+ import { generateSalt as t } from "../../solvers/instant-open/shared/operations.js";
3
+ import { getInstantLayerNonce as n } from "../../symmio-contracts/instant-layer/actions/get-instant-layer-nonce.js";
4
+ import { assertGaslessGatewayCoherence as r } from "../assert-gateway-coherence.js";
5
+ import { getIsDelegationActive as i } from "../../symmio-contracts/instant-layer/actions/get-is-delegation-active.js";
6
+ import { findUndelegatedGaslessSelectors as a, getCachedGaslessAccountOwner as o } from "../delegation-preflight.js";
7
+ import { resolveGaslessService as s } from "../resolve-gasless.js";
8
+ import { generateGaslessIdempotencyKey as c, postGaslessSubmit as l, resolveGaslessHttp as u } from "../http.js";
9
+ import { toGaslessWalletIdWire as d } from "../wallet-id.js";
10
+ import { getGaslessFeeQuote as f } from "../get-gasless-fee-quote/get-gasless-fee-quote.js";
11
+ import { toGaslessSubmitReceipt as p } from "../to-gasless-submit-receipt.js";
12
+ import { blocksGaslessNonceStream as m, gaslessInstantNonceStreamKey as h, gaslessWalletNonceStreamKey as g, readGaslessStreamNonce as _, submitOnGaslessNonceStreams as v, withGaslessNonceLocks as y } from "../nonce-lock.js";
13
+ import { formatGaslessOperation as b } from "../format-gasless-operation.js";
14
+ import { getGaslessWalletExecuteSelectors as x } from "../gasless-wallet-execute/selectors.js";
15
+ import { getGaslessWalletNonce as S } from "../get-gasless-wallet-nonce/get-gasless-wallet-nonce.js";
16
+ import { resolveGaslessWalletIdentities as C } from "../resolve-wallet-identities.js";
17
+ import { buildGaslessBatchOperations as w, defaultGaslessBatchOperationType as T, distinctGaslessBatchWalletIds as E, readGaslessBatchWalletTargets as D, resolveGaslessBatchEntries as O } from "../batch/resolve-gasless-batch.js";
18
+ import { signGaslessBatchOperations as k } from "./sign-gasless-batch.js";
19
+ import { isAddressEqual as A } from "viem";
20
+ //#region src/gasless/relay-gasless-batch/relay-gasless-batch.ts
21
+ var j = 1200;
22
+ async function M(i, x) {
23
+ let { account: S, calls: A, from: M, metadata: F } = x, I = s(i, { chainId: x.chainId }), L = i.getChainConfig(x.chainId), R = L.chainId, z = O(L.addresses, A), B = x.operationType ?? T(z), V = u(i, {
24
+ chainId: R,
25
+ service: "operations"
26
+ }), H = I.execution ?? {}, U = z.flatMap((e) => e.type === "instant" ? [e.selector] : []), W = E(z);
27
+ U.length > 0 && await r(i, R, I);
28
+ let G = await i.getWalletClient({
29
+ chainId: R,
30
+ from: M
31
+ }), K = G.account.address, q = W.length > 0 ? await C(i, {
32
+ chainId: R,
33
+ account: S
34
+ }) : null;
35
+ if (H.preflightDelegation ?? !0) {
36
+ let t = [...U.length > 0 ? await a(i, {
37
+ chainId: R,
38
+ signer: K,
39
+ signerAccount: S,
40
+ selectors: U
41
+ }) : [], ...q ? await P(i, {
42
+ chainId: R,
43
+ signer: K,
44
+ identities: q,
45
+ entries: z
46
+ }) : []];
47
+ if (t.length > 0) throw new e("validation", "GASLESS_SIGNER_NOT_DELEGATED", `Gasless: signer ${K} holds no active InstantLayer delegation from ${S} for selector(s) ${[...new Set(t)].join(", ")}. Grant getGaslessBatchSelectors(calls) to the session key on ${S}, or sign the batch with the account's owner.`);
48
+ }
49
+ let J = q?.ownerWallet ?? await o(i, R, S).catch(() => null) ?? K, Y = U.length > 0 ? h(R, S) : null, X = new Map(W.map((e) => [e, g(R, e, J, S)]));
50
+ return y(i, [...Y === null ? [] : [Y], ...X.values()], async () => {
51
+ let [r, a, o] = await Promise.all([
52
+ Y === null ? 0n : _(i, Y, () => n(i, {
53
+ chainId: R,
54
+ account: S
55
+ })),
56
+ D(i, {
57
+ chainId: R,
58
+ owner: J,
59
+ walletIds: W
60
+ }),
61
+ N(i, {
62
+ chainId: R,
63
+ owner: J,
64
+ account: S,
65
+ walletKeys: X
66
+ })
67
+ ]), s = BigInt(Math.floor(Date.now() / 1e3) + j), u = w(z, {
68
+ signer: K,
69
+ account: S,
70
+ deadline: s,
71
+ instantNonce: r,
72
+ walletTargets: a,
73
+ walletNonces: o,
74
+ salt: t
75
+ });
76
+ if (H.preflightFee ?? !0) try {
77
+ await f(i, {
78
+ chainId: R,
79
+ operations: u.operations.map((e, t) => ({
80
+ operation: e,
81
+ walletId: u.walletIds[t]
82
+ }))
83
+ });
84
+ } catch (t) {
85
+ if (t instanceof e) throw t;
86
+ }
87
+ let h = await k(i, {
88
+ chainId: R,
89
+ walletClient: G,
90
+ entries: z,
91
+ operations: u.operations
92
+ }), g = c(), y = {
93
+ idempotencyKey: g,
94
+ userAddress: J,
95
+ accountId: S,
96
+ operationType: B,
97
+ signedOps: u.operations.map(b),
98
+ signatures: h,
99
+ walletIds: u.walletIds.map(d),
100
+ fills: u.operations.map(() => []),
101
+ flexFillerSignatures: u.operations.map(() => []),
102
+ ...F === void 0 ? {} : { metadata: F }
103
+ };
104
+ return v(i, [...Y === null || u.lastInstantNonce === null ? [] : [{
105
+ key: Y,
106
+ signedNonce: u.lastInstantNonce
107
+ }], ...[...X].map(([e, t]) => ({
108
+ key: t,
109
+ signedNonce: u.lastWalletNonces.get(e) ?? 0n
110
+ }))], {
111
+ service: "operations",
112
+ chainId: R,
113
+ deadline: s
114
+ }, async () => p(await l(V, "/gateway/relay-instant", y, g), {
115
+ owner: J,
116
+ walletIds: u.walletIds,
117
+ idempotencyKey: g,
118
+ protocolInstance: V.protocolInstance
119
+ }), m);
120
+ });
121
+ }
122
+ async function N(e, t) {
123
+ let { chainId: n, owner: r, account: i, walletKeys: a } = t, o = await Promise.all([...a].map(async ([t, a]) => [t, await _(e, a, () => S(e, {
124
+ chainId: n,
125
+ owner: r,
126
+ walletId: t,
127
+ account: i
128
+ }))]));
129
+ return new Map(o);
130
+ }
131
+ async function P(e, t) {
132
+ let { chainId: n, signer: r, identities: a, entries: o } = t;
133
+ if (A(r, a.ownerWallet)) return [];
134
+ let s = [...new Set(o.flatMap((e) => e.type === "wallet" ? x(e.walletCalls) : []))], c = await Promise.all(s.map((t) => i(e, {
135
+ chainId: n,
136
+ account: a.canonicalAccount,
137
+ delegate: r,
138
+ selector: t
139
+ })));
140
+ return s.filter((e, t) => !c[t]);
141
+ }
142
+ //#endregion
143
+ export { M as relayGaslessBatch };
144
+
145
+ //# sourceMappingURL=relay-gasless-batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay-gasless-batch.js","names":[],"sources":["../../../src/gasless/relay-gasless-batch/relay-gasless-batch.ts"],"sourcesContent":["import { isAddressEqual, type Address, type Hex } from \"viem\";\nimport type { Config } from \"../../core/config\";\nimport { SymmError } from \"../../shared/errors/symm-error\";\nimport type { ChainIdParameter, Compute, FromParameter } from \"../../shared/types/properties\";\nimport { generateSalt } from \"../../solvers/instant-open/shared/operations\";\nimport { getInstantLayerNonce } from \"../../symmio-contracts/instant-layer/actions/get-instant-layer-nonce\";\nimport { getIsDelegationActive } from \"../../symmio-contracts/instant-layer/actions/get-is-delegation-active\";\nimport { assertGaslessGatewayCoherence } from \"../assert-gateway-coherence\";\nimport type { GaslessBatchCall } from \"../batch/calls\";\nimport {\n buildGaslessBatchOperations,\n defaultGaslessBatchOperationType,\n distinctGaslessBatchWalletIds,\n readGaslessBatchWalletTargets,\n resolveGaslessBatchEntries,\n type ResolvedGaslessBatchEntry,\n} from \"../batch/resolve-gasless-batch\";\nimport { findUndelegatedGaslessSelectors, getCachedGaslessAccountOwner } from \"../delegation-preflight\";\nimport { formatGaslessOperation } from \"../format-gasless-operation\";\nimport { getGaslessWalletExecuteSelectors } from \"../gasless-wallet-execute/selectors\";\nimport { getGaslessFeeQuote } from \"../get-gasless-fee-quote/get-gasless-fee-quote\";\nimport { getGaslessWalletNonce } from \"../get-gasless-wallet-nonce/get-gasless-wallet-nonce\";\nimport { generateGaslessIdempotencyKey, postGaslessSubmit, resolveGaslessHttp } from \"../http\";\nimport {\n blocksGaslessNonceStream,\n gaslessInstantNonceStreamKey,\n gaslessWalletNonceStreamKey,\n readGaslessStreamNonce,\n submitOnGaslessNonceStreams,\n withGaslessNonceLocks,\n} from \"../nonce-lock\";\nimport { resolveGaslessService } from \"../resolve-gasless\";\nimport { resolveGaslessWalletIdentities, type GaslessWalletIdentities } from \"../resolve-wallet-identities\";\nimport { toGaslessSubmitReceipt } from \"../to-gasless-submit-receipt\";\nimport type { GaslessSubmitReceipt } from \"../types\";\nimport { toGaslessWalletIdWire } from \"../wallet-id\";\nimport type { GaslessWireOperationAccepted, GaslessWireRelayInstantRequest } from \"../wire-types\";\nimport { signGaslessBatchOperations } from \"./sign-gasless-batch\";\n\n/** How long a batch's signatures stay valid — room for one wallet prompt per operation. */\nconst GASLESS_BATCH_DEADLINE_SECONDS = 20 * 60;\n\n/**\n * Parameters for {@link relayGaslessBatch}.\n */\nexport type RelayGaslessBatchParameters = Compute<\n ChainIdParameter &\n FromParameter & {\n /**\n * The sub-account every operation runs under: the `signerAccount` of each\n * relayable write, whose InstantLayer nonces the batch consumes and whose\n * delegations authorize a session key; the billing account (a virtual\n * account bills its parent); and, for GaslessWallet entries, the account\n * whose owner's wallets execute — `ownerOf(account)`, so a sub-account\n * resolves to its owner's wallets.\n *\n * Margin writes run under the virtual account's **parent** sub-account,\n * with the virtual account as a calldata argument.\n */\n account: Address;\n /**\n * The calls, in execution order. The batch is **atomic**: one revert rolls\n * back every call and every fee. Each is signed separately — the protocol\n * has no batch signature — so a browser wallet shows one prompt per call,\n * while a session key signs them silently.\n */\n calls: readonly GaslessBatchCall[];\n /**\n * Free-form workflow label (1-128 characters) stored with the request for\n * metrics and vendor support. Defaults to the calls' own labels joined with\n * `+` (`\"approveOperationalFee+allocate\"`), or `\"gaslessBatch\"` when that is\n * too long. Fees are **not** keyed from it.\n */\n operationType?: string;\n /** Non-secret client correlation data stored with the request. */\n metadata?: Record<string, unknown>;\n }\n>;\n\n/** Return type of {@link relayGaslessBatch}. */\nexport type RelayGaslessBatchReturnType = GaslessSubmitReceipt;\n\n/**\n * Relay **several gasless actions as one request** — one atomic transaction the\n * GaslessQ relayer broadcasts and pays gas for.\n *\n * Give each relayable write as `{ functionName, args }` (with an optional\n * `abi`) or raw `{ data }` — the target contract is resolved from its selector —\n * and calls the owner's GaslessWallet makes as `{ walletCalls, walletId }`. The\n * forms mix freely:\n *\n * 1. every call is encoded and checked before any network call — a write the\n * relayer cannot carry throws `GASLESS_NOT_RELAYABLE`;\n * 2. a session key's delegations are checked before any prompt\n * (`execution.preflightDelegation`, default on);\n * 3. fresh nonces are read and sequenced per stream — the account's InstantLayer\n * nonces for the writes, each wallet id's own nonces for its entries;\n * 4. the batch is priced on-chain before any prompt (`execution.preflightFee`,\n * default on) — a quote the contract refuses throws, a quote that fails for\n * transport reasons does not block;\n * 5. each operation is signed — one EIP-712 prompt per call, in order;\n * 6. one `relay-instant` request carries them all, with one wallet id per\n * operation (`0` for every write).\n *\n * The fee is collected **after** the whole batch executes, so an operational-fee\n * approval earlier in the batch already covers the calls after it. Preview the\n * same calls with {@link getGaslessBatchFeeQuote}.\n *\n * Fire-and-forget, like {@link relayInstantOperations}: persist the receipt's\n * `requestId`, `owner`, `walletIds` and `idempotencyKey`, then follow the\n * request to a terminal status. A `202` is the point of no return. React\n * consumers should reach for `useRelayGaslessBatch`, which confirms the request\n * before it resolves.\n *\n * @param config - The SDK config (must have a `getWalletClient` resolver).\n * @param parameters - The account, the calls, and optional chain / signer / label overrides.\n * @returns The acceptance receipt; persist it immediately.\n * @throws {SymmError} `GASLESS_NOT_CONFIGURED` / `GASLESS_UNSUPPORTED_CONTRACTS_VERSION`.\n * @throws {SymmError} `GASLESS_EMPTY_BATCH`, `GASLESS_NOT_RELAYABLE` or `GASLESS_WALLET_ID_INVALID`\n * before any network call.\n * @throws {SymmError} `GASLESS_CONFIG_INCOHERENT` when the GaslessLayer verifies another InstantLayer.\n * @throws {SymmError} `GASLESS_SIGNER_NOT_DELEGATED` when a session key is missing a selector —\n * grant `getGaslessBatchSelectors(calls)` on `account`.\n * @throws {SymmError} `GASLESS_FREE_QUOTA_EXHAUSTED`, `GASLESS_FEE_QUOTE_REVERTED` or\n * `GASLESS_LAYER_INTERFACE_UNSUPPORTED` from the fee pre-flight, before any prompt.\n * @throws {SymmError} `GASLESS_NONCE_STREAM_BUSY` when an earlier relay on one of the\n * batch's nonce streams is still unaccounted for.\n * @throws {SymmApiError} `GASLESS_RELAY_SUBMIT_FAILED` on HTTP failure, and\n * `GASLESS_SUBMIT_UNCONFIRMED` when the outcome could not be established — replay it with\n * `resubmitGaslessRequest`, never by signing the batch again.\n * @throws The wallet's own error when the user rejects a prompt; nothing is submitted.\n *\n * @example\n * ```ts\n * import { relayGaslessBatch } from \"@symmio/trading-core\";\n *\n * // Approve the gateway's fee allowance and use it in the same request.\n * const receipt = await relayGaslessBatch(config, {\n * account: subAccount,\n * calls: [\n * { functionName: \"approveOperationalFeeWithMultiplier\", args: [[gaslessLayer], [budget18], [10_000n]] },\n * { functionName: \"allocate\", args: [amount] },\n * ],\n * });\n * ```\n */\nexport async function relayGaslessBatch(\n config: Config,\n parameters: RelayGaslessBatchParameters,\n): Promise<RelayGaslessBatchReturnType> {\n const { account, calls, from, metadata } = parameters;\n const gasless = resolveGaslessService(config, { chainId: parameters.chainId });\n const chain = config.getChainConfig(parameters.chainId);\n const chainId = chain.chainId;\n\n const entries = resolveGaslessBatchEntries(chain.addresses, calls);\n const operationType = parameters.operationType ?? defaultGaslessBatchOperationType(entries);\n const context = resolveGaslessHttp(config, { chainId, service: \"operations\" });\n const execution = gasless.execution ?? {};\n\n const instantSelectors = entries.flatMap((entry) => (entry.type === \"instant\" ? [entry.selector] : []));\n const walletIds = distinctGaslessBatchWalletIds(entries);\n\n /** Relayable writes sign for the configured InstantLayer; make sure the gateway verifies that one. */\n if (instantSelectors.length > 0) await assertGaslessGatewayCoherence(config, chainId, gasless);\n\n const walletClient = await config.getWalletClient({ chainId, from });\n const signer = walletClient.account.address;\n\n const identities = walletIds.length > 0 ? await resolveGaslessWalletIdentities(config, { chainId, account }) : null;\n\n /**\n * Delegation pre-flight, before any signature prompt: a session key missing a\n * selector would otherwise sign every operation, and the relayer's simulation\n * would reject the batch after the user paid for the prompts.\n */\n if (execution.preflightDelegation ?? true) {\n const missing = [\n ...(instantSelectors.length > 0\n ? await findUndelegatedGaslessSelectors(config, {\n chainId,\n signer,\n signerAccount: account,\n selectors: instantSelectors,\n })\n : []),\n ...(identities ? await findUndelegatedWalletSelectors(config, { chainId, signer, identities, entries }) : []),\n ];\n if (missing.length > 0) {\n throw new SymmError(\n \"validation\",\n \"GASLESS_SIGNER_NOT_DELEGATED\",\n `Gasless: signer ${signer} holds no active InstantLayer delegation from ${account} for selector(s) ${[...new Set(missing)].join(\", \")}. Grant getGaslessBatchSelectors(calls) to the session key on ${account}, or sign the batch with the account's owner.`,\n );\n }\n }\n\n /**\n * `userAddress` is the service's tracking identity: the owner of the account's\n * wallets, else the sub-account's owner. The signer may be a session key that\n * owns nothing, so an unreadable owner falls back to it rather than failing\n * the batch over a tracking label.\n */\n const owner =\n identities?.ownerWallet ??\n (await getCachedGaslessAccountOwner(config, chainId, account).catch(() => null)) ??\n signer;\n\n const instantKey = instantSelectors.length > 0 ? gaslessInstantNonceStreamKey(chainId, account) : null;\n const walletKeys = new Map(\n walletIds.map((walletId) => [walletId, gaslessWalletNonceStreamKey(chainId, walletId, owner, account)] as const),\n );\n const streamKeys = [...(instantKey === null ? [] : [instantKey]), ...walletKeys.values()];\n\n /**\n * The locks span read-sign-submit on every stream the batch signs on. They are\n * released at the `202`; the signed nonces are recorded on each stream so the\n * next caller waits for them lazily instead of signing them again.\n */\n return withGaslessNonceLocks(config, streamKeys, async () => {\n const [instantNonce, walletTargets, walletNonces] = await Promise.all([\n instantKey === null\n ? 0n\n : readGaslessStreamNonce(config, instantKey, () => getInstantLayerNonce(config, { chainId, account })),\n readGaslessBatchWalletTargets(config, { chainId, owner, walletIds }),\n readWalletNonces(config, { chainId, owner, account, walletKeys }),\n ]);\n\n const deadline = BigInt(Math.floor(Date.now() / 1000) + GASLESS_BATCH_DEADLINE_SECONDS);\n const built = buildGaslessBatchOperations(entries, {\n signer,\n account,\n deadline,\n instantNonce,\n walletTargets,\n walletNonces,\n salt: generateSalt,\n });\n\n /** Fee pre-flight before any signature prompt. */\n if (execution.preflightFee ?? true) {\n try {\n await getGaslessFeeQuote(config, {\n chainId,\n operations: built.operations.map((operation, index) => ({ operation, walletId: built.walletIds[index] })),\n });\n } catch (err) {\n /**\n * A refused quote — an exhausted free quota, a batch the contract\n * rejects, a GaslessLayer without the quote interface — means the relay\n * would fail the same way, and nothing is signed yet.\n */\n if (err instanceof SymmError) throw err;\n /**\n * Anything else is inconclusive: a transport or RPC failure of the quote\n * read itself. The relayer simulates the full transaction before\n * accepting it, so signing proceeds.\n */\n }\n }\n\n const signatures = await signGaslessBatchOperations(config, {\n chainId,\n walletClient,\n entries,\n operations: built.operations,\n });\n\n /**\n * One key per signature: the operations were just signed, so the key is\n * minted here. Replaying a lost response is `resubmitGaslessRequest`'s job,\n * which reuses this key with the exact bytes that went with it.\n */\n const idempotencyKey = generateGaslessIdempotencyKey();\n const body: GaslessWireRelayInstantRequest = {\n idempotencyKey,\n userAddress: owner,\n accountId: account,\n operationType,\n signedOps: built.operations.map(formatGaslessOperation),\n signatures,\n walletIds: built.walletIds.map(toGaslessWalletIdWire),\n fills: built.operations.map(() => []),\n flexFillerSignatures: built.operations.map(() => []),\n ...(metadata !== undefined ? { metadata } : {}),\n };\n\n const streams = [\n ...(instantKey === null || built.lastInstantNonce === null\n ? []\n : [{ key: instantKey, signedNonce: built.lastInstantNonce }]),\n ...[...walletKeys].map(([walletId, key]) => ({\n key,\n signedNonce: built.lastWalletNonces.get(walletId) ?? 0n,\n })),\n ];\n\n return submitOnGaslessNonceStreams(\n config,\n streams,\n { service: \"operations\", chainId, deadline },\n async () => {\n const raw = await postGaslessSubmit<GaslessWireOperationAccepted>(\n context,\n \"/gateway/relay-instant\",\n body,\n idempotencyKey,\n );\n return toGaslessSubmitReceipt(raw, {\n owner,\n walletIds: built.walletIds,\n idempotencyKey,\n protocolInstance: context.protocolInstance,\n });\n },\n blocksGaslessNonceStream,\n );\n });\n}\n\n/**\n * The consumed wallet-operation nonce of each wallet a batch executes from,\n * waiting first for anything this SDK already signed on that stream.\n */\nasync function readWalletNonces(\n config: Config,\n parameters: { chainId: number; owner: Address; account: Address; walletKeys: ReadonlyMap<bigint, string> },\n): Promise<Map<bigint, bigint>> {\n const { chainId, owner, account, walletKeys } = parameters;\n const entries = await Promise.all(\n [...walletKeys].map(\n async ([walletId, key]) =>\n [\n walletId,\n await readGaslessStreamNonce(config, key, () =>\n getGaslessWalletNonce(config, { chainId, owner, walletId, account }),\n ),\n ] as const,\n ),\n );\n return new Map(entries);\n}\n\n/**\n * The wallet-entry selectors a delegate may not relay: the GaslessLayer demands\n * a delegation for the wallet-execution sentinel **and every inner selector**,\n * on the account's canonical delegator. The wallet's owner needs none.\n */\nasync function findUndelegatedWalletSelectors(\n config: Config,\n parameters: {\n chainId: number;\n signer: Address;\n identities: GaslessWalletIdentities;\n entries: readonly ResolvedGaslessBatchEntry[];\n },\n): Promise<Hex[]> {\n const { chainId, signer, identities, entries } = parameters;\n if (isAddressEqual(signer, identities.ownerWallet)) return [];\n\n const required = [\n ...new Set(\n entries.flatMap((entry) => (entry.type === \"wallet\" ? getGaslessWalletExecuteSelectors(entry.walletCalls) : [])),\n ),\n ];\n const active = await Promise.all(\n required.map((selector) =>\n getIsDelegationActive(config, { chainId, account: identities.canonicalAccount, delegate: signer, selector }),\n ),\n );\n return required.filter((_, index) => !active[index]);\n}\n"],"mappings":"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"}