viem 2.56.9 → 2.57.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/_cjs/actions/public/waitForTransactionReceipt.js +12 -1
  3. package/_cjs/actions/public/waitForTransactionReceipt.js.map +1 -1
  4. package/_cjs/chains/definitions/blockdag.js +23 -0
  5. package/_cjs/chains/definitions/blockdag.js.map +1 -0
  6. package/_cjs/chains/definitions/candyChain.js +29 -0
  7. package/_cjs/chains/definitions/candyChain.js.map +1 -0
  8. package/_cjs/chains/definitions/creditCoin3Devnet.js +6 -0
  9. package/_cjs/chains/definitions/creditCoin3Devnet.js.map +1 -1
  10. package/_cjs/chains/definitions/creditCoin3Mainnet.js +6 -0
  11. package/_cjs/chains/definitions/creditCoin3Mainnet.js.map +1 -1
  12. package/_cjs/chains/definitions/creditCoin3Testnet.js +6 -0
  13. package/_cjs/chains/definitions/creditCoin3Testnet.js.map +1 -1
  14. package/_cjs/chains/definitions/kortana.js +23 -0
  15. package/_cjs/chains/definitions/kortana.js.map +1 -0
  16. package/_cjs/chains/index.js +20 -14
  17. package/_cjs/chains/index.js.map +1 -1
  18. package/_cjs/clients/createClientResolver.js +45 -0
  19. package/_cjs/clients/createClientResolver.js.map +1 -0
  20. package/_cjs/errors/version.js +1 -1
  21. package/_cjs/index.js +13 -9
  22. package/_cjs/index.js.map +1 -1
  23. package/_cjs/op-stack/actions/getGame.js +1 -1
  24. package/_cjs/op-stack/actions/getGame.js.map +1 -1
  25. package/_cjs/op-stack/actions/getGames.js +1 -1
  26. package/_cjs/op-stack/actions/getGames.js.map +1 -1
  27. package/_cjs/op-stack/actions/getTimeToNextGame.js +1 -1
  28. package/_cjs/op-stack/actions/getTimeToNextGame.js.map +1 -1
  29. package/_cjs/op-stack/actions/getTimeToNextL2Output.js +1 -1
  30. package/_cjs/op-stack/actions/getTimeToNextL2Output.js.map +1 -1
  31. package/_cjs/tempo/Client.js +2 -10
  32. package/_cjs/tempo/Client.js.map +1 -1
  33. package/_cjs/tempo/ExecutionError.js +290 -0
  34. package/_cjs/tempo/ExecutionError.js.map +1 -0
  35. package/_cjs/tempo/Relay.js +88 -0
  36. package/_cjs/tempo/Relay.js.map +1 -0
  37. package/_cjs/tempo/Transaction.js.map +1 -1
  38. package/_cjs/tempo/Transport.js +21 -12
  39. package/_cjs/tempo/Transport.js.map +1 -1
  40. package/_cjs/tempo/chainConfig.js +3 -0
  41. package/_cjs/tempo/chainConfig.js.map +1 -1
  42. package/_cjs/tempo/index.js +3 -3
  43. package/_cjs/tempo/index.js.map +1 -1
  44. package/_cjs/tempo/internal/relay/cache.js +74 -0
  45. package/_cjs/tempo/internal/relay/cache.js.map +1 -0
  46. package/_cjs/tempo/internal/relay/deadline.js +35 -0
  47. package/_cjs/tempo/internal/relay/deadline.js.map +1 -0
  48. package/_cjs/tempo/internal/relay/error.js +102 -0
  49. package/_cjs/tempo/internal/relay/error.js.map +1 -0
  50. package/_cjs/tempo/internal/relay/feePayer.js +426 -0
  51. package/_cjs/tempo/internal/relay/feePayer.js.map +1 -0
  52. package/_cjs/tempo/internal/relay/feeToken.js +143 -0
  53. package/_cjs/tempo/internal/relay/feeToken.js.map +1 -0
  54. package/_cjs/tempo/{Multisig.js → internal/relay/multisig.js} +132 -122
  55. package/_cjs/tempo/internal/relay/multisig.js.map +1 -0
  56. package/_cjs/tempo/internal/relay/plugin.js +13 -0
  57. package/_cjs/tempo/internal/relay/plugin.js.map +1 -0
  58. package/_cjs/tempo/internal/relay/preflight.js +58 -0
  59. package/_cjs/tempo/internal/relay/preflight.js.map +1 -0
  60. package/_cjs/tempo/internal/relay/request.js +319 -0
  61. package/_cjs/tempo/internal/relay/request.js.map +1 -0
  62. package/_cjs/tempo/internal/relay/simulate.js +267 -0
  63. package/_cjs/tempo/internal/relay/simulate.js.map +1 -0
  64. package/_cjs/tempo/internal/relay/utils.js +174 -0
  65. package/_cjs/tempo/internal/relay/utils.js.map +1 -0
  66. package/_cjs/tempo/internal/relay/virtualAddress.js +78 -0
  67. package/_cjs/tempo/internal/relay/virtualAddress.js.map +1 -0
  68. package/_cjs/tempo/internal/relay.js +139 -0
  69. package/_cjs/tempo/internal/relay.js.map +1 -0
  70. package/_cjs/tempo/multisig/Config.js +0 -2
  71. package/_cjs/tempo/multisig/Config.js.map +1 -1
  72. package/_cjs/tempo/multisig/Operation.js +1 -2
  73. package/_cjs/tempo/multisig/Operation.js.map +1 -1
  74. package/_cjs/tokens/definitions/ousd.js +16 -0
  75. package/_cjs/tokens/definitions/ousd.js.map +1 -0
  76. package/_cjs/tokens/index.js +3 -1
  77. package/_cjs/tokens/index.js.map +1 -1
  78. package/_cjs/tokens/sets.js +3 -0
  79. package/_cjs/tokens/sets.js.map +1 -1
  80. package/_cjs/utils/siwe/parseSiweMessage.js +3 -3
  81. package/_cjs/utils/siwe/parseSiweMessage.js.map +1 -1
  82. package/_esm/actions/public/waitForTransactionReceipt.js +15 -1
  83. package/_esm/actions/public/waitForTransactionReceipt.js.map +1 -1
  84. package/_esm/chains/definitions/blockdag.js +20 -0
  85. package/_esm/chains/definitions/blockdag.js.map +1 -0
  86. package/_esm/chains/definitions/candyChain.js +26 -0
  87. package/_esm/chains/definitions/candyChain.js.map +1 -0
  88. package/_esm/chains/definitions/creditCoin3Devnet.js +6 -0
  89. package/_esm/chains/definitions/creditCoin3Devnet.js.map +1 -1
  90. package/_esm/chains/definitions/creditCoin3Mainnet.js +6 -0
  91. package/_esm/chains/definitions/creditCoin3Mainnet.js.map +1 -1
  92. package/_esm/chains/definitions/creditCoin3Testnet.js +6 -0
  93. package/_esm/chains/definitions/creditCoin3Testnet.js.map +1 -1
  94. package/_esm/chains/definitions/kortana.js +20 -0
  95. package/_esm/chains/definitions/kortana.js.map +1 -0
  96. package/_esm/chains/index.js +3 -0
  97. package/_esm/chains/index.js.map +1 -1
  98. package/_esm/clients/createClientResolver.js +64 -0
  99. package/_esm/clients/createClientResolver.js.map +1 -0
  100. package/_esm/errors/version.js +1 -1
  101. package/_esm/index.js +2 -0
  102. package/_esm/index.js.map +1 -1
  103. package/_esm/op-stack/actions/getGame.js +1 -1
  104. package/_esm/op-stack/actions/getGame.js.map +1 -1
  105. package/_esm/op-stack/actions/getGames.js +1 -1
  106. package/_esm/op-stack/actions/getGames.js.map +1 -1
  107. package/_esm/op-stack/actions/getTimeToNextGame.js +2 -2
  108. package/_esm/op-stack/actions/getTimeToNextGame.js.map +1 -1
  109. package/_esm/op-stack/actions/getTimeToNextL2Output.js +2 -2
  110. package/_esm/op-stack/actions/getTimeToNextL2Output.js.map +1 -1
  111. package/_esm/tempo/Client.js +8 -14
  112. package/_esm/tempo/Client.js.map +1 -1
  113. package/_esm/tempo/ExecutionError.js +306 -0
  114. package/_esm/tempo/ExecutionError.js.map +1 -0
  115. package/_esm/tempo/Relay.js +170 -0
  116. package/_esm/tempo/Relay.js.map +1 -0
  117. package/_esm/tempo/Transaction.js.map +1 -1
  118. package/_esm/tempo/Transport.js +21 -46
  119. package/_esm/tempo/Transport.js.map +1 -1
  120. package/_esm/tempo/chainConfig.js +4 -0
  121. package/_esm/tempo/chainConfig.js.map +1 -1
  122. package/_esm/tempo/index.js +8 -3
  123. package/_esm/tempo/index.js.map +1 -1
  124. package/_esm/tempo/internal/relay/cache.js +72 -0
  125. package/_esm/tempo/internal/relay/cache.js.map +1 -0
  126. package/_esm/tempo/internal/relay/deadline.js +34 -0
  127. package/_esm/tempo/internal/relay/deadline.js.map +1 -0
  128. package/_esm/tempo/internal/relay/error.js +101 -0
  129. package/_esm/tempo/internal/relay/error.js.map +1 -0
  130. package/_esm/tempo/internal/relay/feePayer.js +442 -0
  131. package/_esm/tempo/internal/relay/feePayer.js.map +1 -0
  132. package/_esm/tempo/internal/relay/feeToken.js +143 -0
  133. package/_esm/tempo/internal/relay/feeToken.js.map +1 -0
  134. package/_esm/tempo/{Multisig.js → internal/relay/multisig.js} +133 -129
  135. package/_esm/tempo/internal/relay/multisig.js.map +1 -0
  136. package/_esm/tempo/internal/relay/plugin.js +10 -0
  137. package/_esm/tempo/internal/relay/plugin.js.map +1 -0
  138. package/_esm/tempo/internal/relay/preflight.js +57 -0
  139. package/_esm/tempo/internal/relay/preflight.js.map +1 -0
  140. package/_esm/tempo/internal/relay/request.js +321 -0
  141. package/_esm/tempo/internal/relay/request.js.map +1 -0
  142. package/_esm/tempo/internal/relay/simulate.js +277 -0
  143. package/_esm/tempo/internal/relay/simulate.js.map +1 -0
  144. package/_esm/tempo/internal/relay/utils.js +174 -0
  145. package/_esm/tempo/internal/relay/utils.js.map +1 -0
  146. package/_esm/tempo/internal/relay/virtualAddress.js +73 -0
  147. package/_esm/tempo/internal/relay/virtualAddress.js.map +1 -0
  148. package/_esm/tempo/internal/relay.js +138 -0
  149. package/_esm/tempo/internal/relay.js.map +1 -0
  150. package/_esm/tempo/multisig/Config.js +2 -1
  151. package/_esm/tempo/multisig/Config.js.map +1 -1
  152. package/_esm/tempo/multisig/Operation.js +1 -1
  153. package/_esm/tempo/multisig/Operation.js.map +1 -1
  154. package/_esm/tokens/definitions/ousd.js +25 -0
  155. package/_esm/tokens/definitions/ousd.js.map +1 -0
  156. package/_esm/tokens/index.js +1 -0
  157. package/_esm/tokens/index.js.map +1 -1
  158. package/_esm/tokens/sets.js +3 -0
  159. package/_esm/tokens/sets.js.map +1 -1
  160. package/_esm/utils/siwe/parseSiweMessage.js +3 -3
  161. package/_esm/utils/siwe/parseSiweMessage.js.map +1 -1
  162. package/_types/actions/public/waitForTransactionReceipt.d.ts.map +1 -1
  163. package/_types/chains/definitions/blockdag.d.ts +51 -0
  164. package/_types/chains/definitions/blockdag.d.ts.map +1 -0
  165. package/_types/chains/definitions/candyChain.d.ts +48 -0
  166. package/_types/chains/definitions/candyChain.d.ts.map +1 -0
  167. package/_types/chains/definitions/creditCoin3Devnet.d.ts +6 -9
  168. package/_types/chains/definitions/creditCoin3Devnet.d.ts.map +1 -1
  169. package/_types/chains/definitions/creditCoin3Mainnet.d.ts +6 -9
  170. package/_types/chains/definitions/creditCoin3Mainnet.d.ts.map +1 -1
  171. package/_types/chains/definitions/creditCoin3Testnet.d.ts +6 -9
  172. package/_types/chains/definitions/creditCoin3Testnet.d.ts.map +1 -1
  173. package/_types/chains/definitions/kortana.d.ts +51 -0
  174. package/_types/chains/definitions/kortana.d.ts.map +1 -0
  175. package/_types/chains/index.d.ts +3 -0
  176. package/_types/chains/index.d.ts.map +1 -1
  177. package/_types/clients/createClientResolver.d.ts +76 -0
  178. package/_types/clients/createClientResolver.d.ts.map +1 -0
  179. package/_types/errors/version.d.ts +1 -1
  180. package/_types/index.d.ts +2 -0
  181. package/_types/index.d.ts.map +1 -1
  182. package/_types/op-stack/actions/getGame.d.ts.map +1 -1
  183. package/_types/tempo/Capabilities.d.ts +7 -28
  184. package/_types/tempo/Capabilities.d.ts.map +1 -1
  185. package/_types/tempo/Client.d.ts +6 -15
  186. package/_types/tempo/Client.d.ts.map +1 -1
  187. package/_types/tempo/ExecutionError.d.ts +79 -0
  188. package/_types/tempo/ExecutionError.d.ts.map +1 -0
  189. package/_types/tempo/Relay.d.ts +302 -0
  190. package/_types/tempo/Relay.d.ts.map +1 -0
  191. package/_types/tempo/Transaction.d.ts +2 -1
  192. package/_types/tempo/Transaction.d.ts.map +1 -1
  193. package/_types/tempo/Transport.d.ts +15 -29
  194. package/_types/tempo/Transport.d.ts.map +1 -1
  195. package/_types/tempo/chainConfig.d.ts.map +1 -1
  196. package/_types/tempo/index.d.ts +8 -3
  197. package/_types/tempo/index.d.ts.map +1 -1
  198. package/_types/tempo/internal/relay/cache.d.ts +9 -0
  199. package/_types/tempo/internal/relay/cache.d.ts.map +1 -0
  200. package/_types/tempo/internal/relay/deadline.d.ts +4 -0
  201. package/_types/tempo/internal/relay/deadline.d.ts.map +1 -0
  202. package/_types/tempo/internal/relay/error.d.ts +47 -0
  203. package/_types/tempo/internal/relay/error.d.ts.map +1 -0
  204. package/_types/tempo/internal/relay/feePayer.d.ts +70 -0
  205. package/_types/tempo/internal/relay/feePayer.d.ts.map +1 -0
  206. package/_types/tempo/internal/relay/feeToken.d.ts +38 -0
  207. package/_types/tempo/internal/relay/feeToken.d.ts.map +1 -0
  208. package/_types/tempo/internal/relay/multisig.d.ts +4 -0
  209. package/_types/tempo/internal/relay/multisig.d.ts.map +1 -0
  210. package/_types/tempo/internal/relay/plugin.d.ts +5 -0
  211. package/_types/tempo/internal/relay/plugin.d.ts.map +1 -0
  212. package/_types/tempo/internal/relay/preflight.d.ts +17 -0
  213. package/_types/tempo/internal/relay/preflight.d.ts.map +1 -0
  214. package/_types/tempo/internal/relay/request.d.ts +16 -0
  215. package/_types/tempo/internal/relay/request.d.ts.map +1 -0
  216. package/_types/tempo/internal/relay/simulate.d.ts +59 -0
  217. package/_types/tempo/internal/relay/simulate.d.ts.map +1 -0
  218. package/_types/tempo/internal/relay/utils.d.ts +294 -0
  219. package/_types/tempo/internal/relay/utils.d.ts.map +1 -0
  220. package/_types/tempo/internal/relay/virtualAddress.d.ts +9 -0
  221. package/_types/tempo/internal/relay/virtualAddress.d.ts.map +1 -0
  222. package/_types/tempo/internal/relay.d.ts +4 -0
  223. package/_types/tempo/internal/relay.d.ts.map +1 -0
  224. package/_types/tempo/multisig/Config.d.ts +0 -13
  225. package/_types/tempo/multisig/Config.d.ts.map +1 -1
  226. package/_types/tempo/multisig/Operation.d.ts +0 -5
  227. package/_types/tempo/multisig/Operation.d.ts.map +1 -1
  228. package/_types/tokens/definitions/ousd.d.ts +25 -0
  229. package/_types/tokens/definitions/ousd.d.ts.map +1 -0
  230. package/_types/tokens/index.d.ts +1 -0
  231. package/_types/tokens/index.d.ts.map +1 -1
  232. package/_types/tokens/sets.d.ts +20 -0
  233. package/_types/tokens/sets.d.ts.map +1 -1
  234. package/_types/utils/siwe/parseSiweMessage.d.ts.map +1 -1
  235. package/actions/public/waitForTransactionReceipt.ts +16 -2
  236. package/chains/definitions/blockdag.ts +20 -0
  237. package/chains/definitions/candyChain.ts +26 -0
  238. package/chains/definitions/creditCoin3Devnet.ts +6 -0
  239. package/chains/definitions/creditCoin3Mainnet.ts +6 -0
  240. package/chains/definitions/creditCoin3Testnet.ts +6 -0
  241. package/chains/definitions/kortana.ts +20 -0
  242. package/chains/index.ts +3 -0
  243. package/clients/createClientResolver.ts +191 -0
  244. package/errors/version.ts +1 -1
  245. package/index.ts +6 -0
  246. package/op-stack/actions/getGame.ts +3 -1
  247. package/op-stack/actions/getGames.ts +1 -1
  248. package/op-stack/actions/getTimeToNextGame.ts +2 -2
  249. package/op-stack/actions/getTimeToNextL2Output.ts +2 -2
  250. package/package.json +1 -1
  251. package/tempo/Capabilities.ts +7 -29
  252. package/tempo/Client.ts +8 -38
  253. package/tempo/ExecutionError.ts +418 -0
  254. package/tempo/Relay.ts +428 -0
  255. package/tempo/Transaction.ts +2 -1
  256. package/tempo/Transport.ts +69 -60
  257. package/tempo/chainConfig.ts +4 -0
  258. package/tempo/index.ts +7 -3
  259. package/tempo/internal/relay/cache.ts +82 -0
  260. package/tempo/internal/relay/deadline.ts +45 -0
  261. package/tempo/internal/relay/error.ts +128 -0
  262. package/tempo/internal/relay/feePayer.ts +692 -0
  263. package/tempo/internal/relay/feeToken.ts +190 -0
  264. package/tempo/{Multisig.ts → internal/relay/multisig.ts} +162 -193
  265. package/tempo/internal/relay/plugin.ts +13 -0
  266. package/tempo/internal/relay/preflight.ts +81 -0
  267. package/tempo/internal/relay/request.ts +391 -0
  268. package/tempo/internal/relay/simulate.ts +367 -0
  269. package/tempo/internal/relay/utils.ts +202 -0
  270. package/tempo/internal/relay/virtualAddress.ts +95 -0
  271. package/tempo/internal/relay.ts +158 -0
  272. package/tempo/multisig/Config.ts +3 -2
  273. package/tempo/multisig/Operation.ts +1 -1
  274. package/tokens/definitions/ousd.ts +25 -0
  275. package/tokens/index.ts +1 -0
  276. package/tokens/sets.ts +3 -0
  277. package/utils/siwe/parseSiweMessage.ts +21 -13
  278. package/_cjs/tempo/Multisig.js.map +0 -1
  279. package/_esm/tempo/Multisig.js.map +0 -1
  280. package/_types/tempo/Multisig.d.ts +0 -37
  281. package/_types/tempo/Multisig.d.ts.map +0 -1
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExternalFeePayerUrl = void 0;
4
+ exports.create = create;
5
+ exports.sign = sign;
6
+ const ox_1 = require("ox");
7
+ const tempo_1 = require("ox/tempo");
8
+ const createClient_js_1 = require("../../../clients/createClient.js");
9
+ const http_js_1 = require("../../../clients/transports/http.js");
10
+ const Transaction = require("../../Transaction.js");
11
+ const Request = require("./request.js");
12
+ const Utils = require("./utils.js");
13
+ function create(options) {
14
+ const authorized = new WeakMap();
15
+ const allowedFeePayers = new Set(options.allowedFeePayers?.map((url) => ExternalFeePayerUrl.normalize(url, {
16
+ allowUnsafe: options.internal_allowUnsafeUrls,
17
+ })));
18
+ return {
19
+ async handleRequest(context, next) {
20
+ const { request } = context;
21
+ if (![
22
+ 'eth_fillTransaction',
23
+ 'eth_signRawTransaction',
24
+ 'eth_sendRawTransaction',
25
+ 'eth_sendRawTransactionSync',
26
+ ].includes(request.method))
27
+ return next();
28
+ const { client, getClient, options: requestOptions } = context;
29
+ const chainId = requestOptions.chainId;
30
+ const getTokens = (id) => context.resolveTokens(id);
31
+ const record = (details) => {
32
+ if (details && requestOptions.response)
33
+ requestOptions.response.sponsorship_details = details;
34
+ };
35
+ if (request.method !== 'eth_fillTransaction') {
36
+ if (!options.account) {
37
+ if (request.method === 'eth_signRawTransaction')
38
+ throw new ox_1.RpcResponse.MethodNotFoundError({
39
+ message: 'eth_signRawTransaction requires a fee payer to be configured on the relay. Add `Relay.feePayer({ account })` to enable transaction sponsorship.',
40
+ });
41
+ return next();
42
+ }
43
+ const serialized = request.params?.[0];
44
+ if (typeof serialized !== 'string' ||
45
+ !requestsRawSponsorship(serialized))
46
+ return next();
47
+ const result = await handleRawTransaction({
48
+ ...options,
49
+ account: options.account,
50
+ getClient,
51
+ getFeeToken: async (id) => (await getTokens(id))[0],
52
+ method: request.method,
53
+ request,
54
+ });
55
+ record(result.sponsorshipDetails);
56
+ return result.result;
57
+ }
58
+ const parameters = request.params[0];
59
+ const { feePayer: _, ...normalized } = Utils.normalizeFillTransactionRequest(parameters);
60
+ const external = typeof parameters.feePayer === 'string'
61
+ ? ExternalFeePayerUrl.normalize(parameters.feePayer, {
62
+ allowUnsafe: options.internal_allowUnsafeUrls ?? false,
63
+ })
64
+ : undefined;
65
+ if (external && !allowedFeePayers.has(external))
66
+ throw new ox_1.RpcResponse.InvalidParamsError({
67
+ message: 'External fee payer URL is not allowed.',
68
+ });
69
+ const wantsSponsorship = (!!options.account || !!external) && parameters.feePayer !== false;
70
+ if (options.account && !external)
71
+ delete normalized.feePayerSignature;
72
+ const base = { ...normalized, chainId };
73
+ if (!wantsSponsorship)
74
+ return Request.fill(client, base);
75
+ const token = options.feeToken ??
76
+ parameters.feeToken ??
77
+ (!options.validate || external
78
+ ? (await getTokens(chainId))[0]
79
+ : undefined);
80
+ const transaction = {
81
+ ...base,
82
+ feePayer: true,
83
+ ...(token ? { feeToken: token } : {}),
84
+ };
85
+ const prepared = isPreparedTransaction(transaction);
86
+ const fillClient = external
87
+ ? (0, createClient_js_1.createClient)({
88
+ chain: client.chain,
89
+ transport: (0, http_js_1.http)(external, {
90
+ fetchOptions: { redirect: 'error' },
91
+ retryCount: 0,
92
+ }),
93
+ })
94
+ : client;
95
+ const result = prepared && !external
96
+ ? { tx: transaction }
97
+ : await Request.fill(fillClient, transaction, external ? { ...requestOptions, retryCount: 0 } : requestOptions);
98
+ const filled = Utils.normalizeTempoTransaction(result.tx);
99
+ if ((!prepared || parameters.feePayer !== true) &&
100
+ filled.gas &&
101
+ !filled.feePayerSignature)
102
+ filled.gas += 20000n;
103
+ if (token && (!external || filled.feeToken == null))
104
+ Object.assign(filled, { feeToken: token });
105
+ const sponsored = external ||
106
+ !options.validate ||
107
+ (await shouldSponsor({
108
+ sender: parameters.from,
109
+ transaction: filled,
110
+ validate: options.validate,
111
+ }));
112
+ if (!sponsored)
113
+ return Request.fill(client, { ...base, feePayer: false });
114
+ const defer = typeof normalized.multisigSimulation === 'object' &&
115
+ normalized.multisigSimulation !== null;
116
+ const sponsor = sponsored
117
+ ? external
118
+ ? (result.capabilities?.sponsor ?? result.sponsor)
119
+ : options.account
120
+ ? getSponsor({ ...options, account: options.account })
121
+ : undefined
122
+ : undefined;
123
+ if (options.account && !external && !defer) {
124
+ delete filled.signature;
125
+ if (!filled.from)
126
+ filled.from = parameters.from;
127
+ authorized.set(context, tempo_1.TxEnvelopeTempo.getFeePayerSignPayload(tempo_1.TxEnvelopeTempo.from(filled), { sender: filled.from }));
128
+ }
129
+ return {
130
+ ...result,
131
+ ...(sponsor ? { sponsor } : {}),
132
+ tx: Utils.formatTempoTransaction(filled),
133
+ capabilities: {
134
+ ...result.capabilities,
135
+ sponsored: external
136
+ ? (result.capabilities?.sponsored ?? !!sponsor)
137
+ : !!sponsor,
138
+ ...(sponsor ? { sponsor } : {}),
139
+ },
140
+ };
141
+ },
142
+ async signTransaction(result, context) {
143
+ const approved = authorized.get(context);
144
+ authorized.delete(context);
145
+ const parameters = context.request.params[0];
146
+ if (!approved ||
147
+ !options.account ||
148
+ typeof parameters.feePayer === 'string' ||
149
+ parameters.feePayer === false ||
150
+ !result.capabilities?.sponsored ||
151
+ (typeof parameters.multisigSimulation === 'object' &&
152
+ parameters.multisigSimulation !== null))
153
+ return undefined;
154
+ const transaction = Utils.normalizeTempoTransaction(result.tx);
155
+ const payload = tempo_1.TxEnvelopeTempo.getFeePayerSignPayload(tempo_1.TxEnvelopeTempo.from(transaction), { sender: (transaction.from ?? parameters.from) });
156
+ if (payload !== approved)
157
+ throw new ox_1.RpcResponse.InvalidParamsError({
158
+ message: 'Sponsored transaction changed after validation.',
159
+ });
160
+ const signed = await sign({
161
+ account: options.account,
162
+ onSponsored: options.onSponsored,
163
+ sender: parameters.from,
164
+ transaction,
165
+ signal: context.options.signal,
166
+ });
167
+ if (signed.sponsorshipDetails && context.options.response)
168
+ context.options.response.sponsorship_details = signed.sponsorshipDetails;
169
+ const tx = Utils.formatTempoTransaction(signed.transaction);
170
+ return tx.feePayerSignature;
171
+ },
172
+ };
173
+ }
174
+ const refusalMessages = {
175
+ billing_past_due: 'Billing past due.',
176
+ billing_required: 'Billing required.',
177
+ fee_token_unsupported: 'Fee token unsupported.',
178
+ spend_limit_exceeded: 'Spend limit exceeded.',
179
+ tx_fee_limit_exceeded: 'Transaction fee limit exceeded.',
180
+ };
181
+ function getSponsor(options) {
182
+ const { account, name, url } = options;
183
+ return {
184
+ address: account.address,
185
+ ...(name ? { name } : {}),
186
+ ...(url ? { url } : {}),
187
+ };
188
+ }
189
+ async function shouldSponsor(options) {
190
+ const { sender, transaction, validate } = options;
191
+ if (!validate)
192
+ return true;
193
+ const verdict = await validate({
194
+ ...transaction,
195
+ from: sender,
196
+ });
197
+ return verdict === true;
198
+ }
199
+ function requestsRawSponsorship(serialized) {
200
+ if (!Utils.isSerializedTempoTransaction(serialized))
201
+ return false;
202
+ const transaction = Transaction.deserialize(serialized);
203
+ return ('feePayerSignature' in transaction && transaction.feePayerSignature === null);
204
+ }
205
+ function isPreparedTransaction(value) {
206
+ return (typeof value.from === 'string' &&
207
+ typeof Utils.resolveChainId(value.chainId) === 'number' &&
208
+ typeof value.gas !== 'undefined' &&
209
+ typeof value.nonce !== 'undefined' &&
210
+ (typeof value.maxFeePerGas !== 'undefined' ||
211
+ typeof value.gasPrice !== 'undefined'));
212
+ }
213
+ async function sign(options) {
214
+ const { account, transaction, sender } = options;
215
+ const from = transaction.from ?? sender;
216
+ const { signature: _, ...withoutSenderSig } = transaction;
217
+ const prepared = { ...withoutSenderSig, from };
218
+ if (!prepared.from)
219
+ throw new ox_1.RpcResponse.InvalidParamsError({
220
+ message: 'Transaction sender must be provided before fee payer signing.',
221
+ });
222
+ if (!account.sign)
223
+ throw new Error('Fee payer account cannot sign transactions.');
224
+ const chainId = Utils.resolveChainId(transaction.chainId);
225
+ if (chainId === undefined)
226
+ throw new ox_1.RpcResponse.InvalidParamsError({
227
+ message: 'Transaction chainId must be provided before fee payer signing.',
228
+ });
229
+ const envelope = tempo_1.TxEnvelopeTempo.from(prepared);
230
+ const signPayload = tempo_1.TxEnvelopeTempo.getFeePayerSignPayload(envelope, {
231
+ sender: prepared.from,
232
+ });
233
+ options.signal?.throwIfAborted();
234
+ const feePayerSignature = ox_1.Signature.from(await account.sign({ hash: signPayload }));
235
+ options.signal?.throwIfAborted();
236
+ const feeToken = transaction.feeToken;
237
+ const sponsorshipDetails = await options.onSponsored?.({
238
+ chainId,
239
+ ...(feeToken ? { feeToken } : {}),
240
+ method: 'eth_fillTransaction',
241
+ sender: prepared.from,
242
+ signPayload,
243
+ transaction: tempo_1.TxEnvelopeTempo.serialize(envelope, { feePayerSignature }),
244
+ });
245
+ return {
246
+ ...(sponsorshipDetails ? { sponsorshipDetails } : {}),
247
+ transaction: { ...prepared, feePayerSignature },
248
+ };
249
+ }
250
+ async function handleRawTransaction(options) {
251
+ const { account, feeToken: sponsorFeeToken, getClient, method, request, validate, } = options;
252
+ const serialized = request.params?.[0];
253
+ if (!Utils.isSerializedTempoTransaction(serialized))
254
+ throw new ox_1.RpcResponse.InvalidParamsError({
255
+ message: 'Only Tempo (0x76/0x78) transactions are supported.',
256
+ });
257
+ const transaction = Transaction.deserialize(serialized);
258
+ const sender = transaction.from ?? options.sender;
259
+ if (!transaction.signature || !sender)
260
+ throw new ox_1.RpcResponse.InvalidParamsError({
261
+ message: 'Transaction must be signed by the sender before fee payer signing.',
262
+ });
263
+ if (!account.sign)
264
+ throw new Error('Fee payer account cannot sign transactions.');
265
+ const client = getClient(transaction.chainId);
266
+ const feeToken_chain = client.chain?.feeToken;
267
+ const feeToken = transaction.feeToken ??
268
+ sponsorFeeToken ??
269
+ (await options.getFeeToken?.(transaction.chainId)) ??
270
+ feeToken_chain;
271
+ const transaction_sponsored = feeToken
272
+ ? { ...transaction, feeToken }
273
+ : transaction;
274
+ if (validate) {
275
+ const verdict = await validate(transaction_sponsored);
276
+ if (verdict !== true)
277
+ throw new ox_1.RpcResponse.InvalidParamsError(verdict === false
278
+ ? { message: 'Sponsorship rejected.' }
279
+ : { data: { code: verdict }, message: refusalMessages[verdict] });
280
+ }
281
+ const envelope = tempo_1.TxEnvelopeTempo.from(transaction_sponsored);
282
+ const signPayload = tempo_1.TxEnvelopeTempo.getFeePayerSignPayload(envelope, {
283
+ sender,
284
+ });
285
+ const feePayerSignature = ox_1.Signature.from(await account.sign({ hash: signPayload }));
286
+ const serializedTransaction = tempo_1.TxEnvelopeTempo.serialize(envelope, {
287
+ feePayerSignature,
288
+ signature: transaction.signature,
289
+ });
290
+ const sponsorshipDetails = await options.onSponsored?.({
291
+ chainId: transaction.chainId,
292
+ ...(feeToken ? { feeToken } : {}),
293
+ method,
294
+ sender,
295
+ signPayload,
296
+ transaction: serializedTransaction,
297
+ transactionHash: ox_1.Hash.keccak256(serializedTransaction),
298
+ });
299
+ const result = method === 'eth_signRawTransaction'
300
+ ? serializedTransaction
301
+ : await client.request({
302
+ method: method,
303
+ params: [
304
+ serializedTransaction,
305
+ ...(request.params?.slice(1) ?? []),
306
+ ],
307
+ });
308
+ return { result, ...(sponsorshipDetails ? { sponsorshipDetails } : {}) };
309
+ }
310
+ var ExternalFeePayerUrl;
311
+ (function (ExternalFeePayerUrl) {
312
+ function normalize(value, options = {}) {
313
+ let url;
314
+ try {
315
+ url = new URL(value);
316
+ }
317
+ catch {
318
+ throw new ox_1.RpcResponse.InvalidParamsError({
319
+ message: 'Invalid fee payer URL.',
320
+ });
321
+ }
322
+ const allowUnsafe = options.allowUnsafe === true;
323
+ if (url.protocol !== 'http:' && url.protocol !== 'https:')
324
+ throw new ox_1.RpcResponse.InvalidParamsError({
325
+ message: 'Invalid fee payer URL protocol.',
326
+ });
327
+ if (!allowUnsafe && url.protocol !== 'https:')
328
+ throw new ox_1.RpcResponse.InvalidParamsError({
329
+ message: 'Invalid fee payer URL protocol.',
330
+ });
331
+ if (!allowUnsafe && isUnsafeHostname(url.hostname))
332
+ throw new ox_1.RpcResponse.InvalidParamsError({
333
+ message: 'Invalid fee payer URL host.',
334
+ });
335
+ url.username = '';
336
+ url.password = '';
337
+ url.hash = '';
338
+ return url.href;
339
+ }
340
+ ExternalFeePayerUrl.normalize = normalize;
341
+ function isUnsafeHostname(hostname) {
342
+ const host = normalizeHostname(hostname);
343
+ if (host === 'localhost' || host.endsWith('.localhost'))
344
+ return true;
345
+ const ipv4 = parseIpv4(host);
346
+ if (ipv4)
347
+ return isUnsafeIpv4(ipv4);
348
+ if (!host.includes(':'))
349
+ return false;
350
+ const ipv6 = parseIpv6(host);
351
+ if (!ipv6)
352
+ return true;
353
+ return isUnsafeIpv6(ipv6);
354
+ }
355
+ function normalizeHostname(hostname) {
356
+ return hostname
357
+ .toLowerCase()
358
+ .replace(/^\[|\]$/g, '')
359
+ .split('%')[0];
360
+ }
361
+ function parseIpv4(value) {
362
+ const parts = value.split('.');
363
+ if (parts.length !== 4 || parts.some((part) => !/^\d+$/.test(part)))
364
+ return undefined;
365
+ const numbers = parts.map((part) => Number(part));
366
+ if (numbers.some((part) => !Number.isInteger(part) || part < 0 || part > 255))
367
+ return undefined;
368
+ return numbers;
369
+ }
370
+ function isUnsafeIpv4(parts) {
371
+ const [a, b] = parts;
372
+ if (a === 0 || a === 10 || a === 127)
373
+ return true;
374
+ if (a === 100 && b >= 64 && b <= 127)
375
+ return true;
376
+ if (a === 169 && b === 254)
377
+ return true;
378
+ if (a === 172 && b >= 16 && b <= 31)
379
+ return true;
380
+ if (a === 192 && b === 168)
381
+ return true;
382
+ return a >= 224;
383
+ }
384
+ function parseIpv6(value) {
385
+ const halves = value.split('::');
386
+ if (halves.length > 2)
387
+ return undefined;
388
+ const left = halves[0] ? halves[0].split(':') : [];
389
+ const right = halves[1] ? halves[1].split(':') : [];
390
+ const missing = halves.length === 2 ? 8 - left.length - right.length : 0;
391
+ if (missing < 0)
392
+ return undefined;
393
+ const parts = [...left, ...Array(missing).fill('0'), ...right];
394
+ if (parts.length !== 8)
395
+ return undefined;
396
+ const numbers = parts.map((part) => /^[\da-f]{1,4}$/i.test(part) ? Number.parseInt(part, 16) : NaN);
397
+ if (numbers.some((part) => !Number.isInteger(part) || part < 0 || part > 0xffff))
398
+ return undefined;
399
+ return numbers;
400
+ }
401
+ function isUnsafeIpv6(parts) {
402
+ const [a] = parts;
403
+ if (parts.every((part) => part === 0))
404
+ return true;
405
+ if (parts.slice(0, 7).every((part) => part === 0) && parts[7] === 1)
406
+ return true;
407
+ if ((a & 0xfe00) === 0xfc00)
408
+ return true;
409
+ if ((a & 0xffc0) === 0xfe80)
410
+ return true;
411
+ if ((a & 0xffc0) === 0xfec0)
412
+ return true;
413
+ if ((a & 0xff00) === 0xff00)
414
+ return true;
415
+ const ipv4 = ipv4FromIpv6(parts);
416
+ return ipv4 ? isUnsafeIpv4(ipv4) : false;
417
+ }
418
+ function ipv4FromIpv6(parts) {
419
+ const mapped = parts.slice(0, 5).every((part) => part === 0) && parts[5] === 0xffff;
420
+ const compatible = parts.slice(0, 6).every((part) => part === 0);
421
+ if (!mapped && !compatible)
422
+ return undefined;
423
+ return [parts[6] >> 8, parts[6] & 0xff, parts[7] >> 8, parts[7] & 0xff];
424
+ }
425
+ })(ExternalFeePayerUrl || (exports.ExternalFeePayerUrl = ExternalFeePayerUrl = {}));
426
+ //# sourceMappingURL=feePayer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feePayer.js","sourceRoot":"","sources":["../../../../tempo/internal/relay/feePayer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.create = create;
4
+ exports.getDefaultTokens = getDefaultTokens;
5
+ exports.resolveFeeToken = resolveFeeToken;
6
+ exports.resolveTokenMetadata = resolveTokenMetadata;
7
+ const ox_1 = require("ox");
8
+ const sets_js_1 = require("../../../tokens/sets.js");
9
+ const Actions = require("../../actions/index.js");
10
+ const Store = require("./cache.js");
11
+ const Preflight = require("./preflight.js");
12
+ const Utils = require("./utils.js");
13
+ const virtualAddress_js_1 = require("./virtualAddress.js");
14
+ function create() {
15
+ return {
16
+ async handleRequest(context, next) {
17
+ const { request } = context;
18
+ if (request.method !== 'eth_fillTransaction')
19
+ return next();
20
+ const parameters = request.params[0];
21
+ const transaction = Utils.normalizeFillTransactionRequest(parameters);
22
+ if (transaction.feeToken) {
23
+ context.request = {
24
+ ...request,
25
+ params: [
26
+ Utils.formatFillTransactionRequest(context.client, transaction),
27
+ ],
28
+ };
29
+ return next();
30
+ }
31
+ const tokens = await context.resolveTokens();
32
+ const candidates = [
33
+ ...tokens,
34
+ ...callTargetTokens(transaction).filter((token) => !tokens.some((candidate) => candidate.toLowerCase() === token.toLowerCase())),
35
+ ];
36
+ const resolved = transaction.feePayer
37
+ ? { feeToken: tokens[0], virtualAddresses: undefined }
38
+ : await resolveFeeToken(context.client, {
39
+ account: transaction.from,
40
+ feeToken: transaction.feeToken,
41
+ targets: (0, virtualAddress_js_1.getVirtualAddressTargets)((0, virtualAddress_js_1.extractCalls)(transaction)),
42
+ tokens: candidates,
43
+ });
44
+ const { feeToken, virtualAddresses } = resolved;
45
+ const selected = { ...transaction, ...(feeToken ? { feeToken } : {}) };
46
+ context.request = {
47
+ ...request,
48
+ params: [Utils.formatFillTransactionRequest(context.client, selected)],
49
+ };
50
+ await next();
51
+ const result = context.result;
52
+ context.result = {
53
+ ...result,
54
+ tx: {
55
+ ...result.tx,
56
+ ...(!result.tx.feeToken && feeToken ? { feeToken } : {}),
57
+ },
58
+ ...(virtualAddresses
59
+ ? { capabilities: { ...result.capabilities, virtualAddresses } }
60
+ : {}),
61
+ };
62
+ },
63
+ };
64
+ }
65
+ async function getDefaultTokens(chainId) {
66
+ return sets_js_1.tokens.tempo.flatMap((token) => {
67
+ const address = token.addresses[chainId];
68
+ return address ? [address] : [];
69
+ });
70
+ }
71
+ async function resolveFeeToken(client, options) {
72
+ const { feeToken, account, exclude, tokens } = options;
73
+ if (feeToken || !account)
74
+ return { feeToken, virtualAddresses: undefined };
75
+ const candidates = [
76
+ ...new Set(tokens?.map((token) => token.toLowerCase())),
77
+ ];
78
+ if (candidates.length > 100)
79
+ throw new ox_1.RpcResponse.InvalidParamsError({
80
+ message: 'Fee-token candidates exceed the limit of 100 tokens.',
81
+ });
82
+ const { preferredToken, preferredBalance, balances, virtualAddresses } = await Preflight.read(client, {
83
+ account,
84
+ tokens: candidates,
85
+ targets: options.targets,
86
+ });
87
+ const minimumBalance = options.minimumBalance ?? 1n;
88
+ if (preferredToken.toLowerCase() !== exclude?.toLowerCase() &&
89
+ preferredBalance >= minimumBalance)
90
+ return { feeToken: preferredToken, virtualAddresses };
91
+ let best;
92
+ for (const asset of balances) {
93
+ if (asset.balance < minimumBalance ||
94
+ asset.address.toLowerCase() === exclude?.toLowerCase())
95
+ continue;
96
+ if (!best || asset.balance > best.balance)
97
+ best = asset;
98
+ }
99
+ return { feeToken: best?.address, virtualAddresses };
100
+ }
101
+ function callTargetTokens(transaction) {
102
+ const calls = transaction.calls;
103
+ if (!calls)
104
+ return [];
105
+ const out = [];
106
+ const seen = new Set();
107
+ for (const c of calls) {
108
+ if (!c.to)
109
+ continue;
110
+ const lower = c.to.toLowerCase();
111
+ if (!lower.startsWith('0x20c0'))
112
+ continue;
113
+ if (seen.has(lower))
114
+ continue;
115
+ seen.add(lower);
116
+ out.push(c.to);
117
+ if (out.length > 100)
118
+ throw new ox_1.RpcResponse.InvalidParamsError({
119
+ message: 'Fee-token candidates exceed the limit of 100 tokens.',
120
+ });
121
+ }
122
+ return out;
123
+ }
124
+ async function resolveTokenMetadata(client, options) {
125
+ const { token, tokenMetadata, store } = options;
126
+ const meta = tokenMetadata?.[token] ?? tokenMetadata?.[token.toLowerCase()];
127
+ if (token.toLowerCase().startsWith('0x20c0') && meta)
128
+ return { decimals: 6, symbol: meta.symbol, name: meta.name };
129
+ const fetcher = () => Actions.token.getMetadata(client, { token });
130
+ const fallback = store
131
+ ? await Store.memoize(fetcher, {
132
+ key: `tokenMetadata:${client.chain?.id ?? 0}:${token.toLowerCase()}`,
133
+ store,
134
+ ttl: 24 * 60 * 60 * 1000,
135
+ })
136
+ : await fetcher();
137
+ return {
138
+ decimals: fallback.decimals ?? 6,
139
+ symbol: meta?.symbol || fallback.symbol,
140
+ name: meta?.name || fallback.name,
141
+ };
142
+ }
143
+ //# sourceMappingURL=feeToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feeToken.js","sourceRoot":"","sources":["../../../../tempo/internal/relay/feeToken.ts"],"names":[],"mappings":"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"}