tapimo 0.0.2 → 0.2.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 (517) hide show
  1. package/README.md +38 -16
  2. package/dist/ApiKey.d.ts +14 -11
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +11 -12
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +207 -0
  7. package/dist/ApiKeys.d.ts.map +1 -0
  8. package/dist/ApiKeys.js +282 -0
  9. package/dist/ApiKeys.js.map +1 -0
  10. package/dist/App.d.ts +6771 -3819
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +145 -317
  13. package/dist/App.js.map +1 -1
  14. package/dist/Handler.d.ts +86 -0
  15. package/dist/Handler.d.ts.map +1 -0
  16. package/dist/Handler.js +83 -0
  17. package/dist/Handler.js.map +1 -0
  18. package/dist/Scope.d.ts +14 -4
  19. package/dist/Scope.d.ts.map +1 -1
  20. package/dist/Scope.js +16 -4
  21. package/dist/Scope.js.map +1 -1
  22. package/dist/Webhooks.d.ts +5 -7
  23. package/dist/Webhooks.d.ts.map +1 -1
  24. package/dist/Webhooks.js +11 -4
  25. package/dist/Webhooks.js.map +1 -1
  26. package/dist/admin/Access.d.ts +1 -3
  27. package/dist/admin/Access.d.ts.map +1 -1
  28. package/dist/admin/Access.js +1 -3
  29. package/dist/admin/Access.js.map +1 -1
  30. package/dist/admin/App.d.ts +167 -205
  31. package/dist/admin/App.d.ts.map +1 -1
  32. package/dist/admin/App.js +2 -4
  33. package/dist/admin/App.js.map +1 -1
  34. package/dist/admin/apps/api-keys.d.ts +105 -5
  35. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  36. package/dist/admin/apps/api-keys.js +75 -9
  37. package/dist/admin/apps/api-keys.js.map +1 -1
  38. package/dist/admin/apps/scopes.d.ts +6 -0
  39. package/dist/admin/apps/scopes.d.ts.map +1 -1
  40. package/dist/admin/apps/verified-tokens.d.ts +35 -149
  41. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  42. package/dist/admin/apps/verified-tokens.js +18 -39
  43. package/dist/admin/apps/verified-tokens.js.map +1 -1
  44. package/dist/admin/ui.generated.d.ts +1 -1
  45. package/dist/admin/ui.generated.js +1 -1
  46. package/dist/apps/data/App.d.ts +19176 -0
  47. package/dist/apps/data/App.d.ts.map +1 -0
  48. package/dist/apps/data/App.js +236 -0
  49. package/dist/apps/data/App.js.map +1 -0
  50. package/dist/apps/data/index.d.ts +3 -0
  51. package/dist/apps/data/index.d.ts.map +1 -0
  52. package/dist/apps/data/index.js +3 -0
  53. package/dist/apps/data/index.js.map +1 -0
  54. package/dist/apps/{activities.d.ts → data/routes/activities.d.ts} +32 -32
  55. package/dist/apps/{activities.d.ts.map → data/routes/activities.d.ts.map} +1 -1
  56. package/dist/apps/{activities.js → data/routes/activities.js} +13 -13
  57. package/dist/apps/data/routes/activities.js.map +1 -0
  58. package/dist/apps/{addresses.d.ts → data/routes/addresses.d.ts} +22 -22
  59. package/dist/apps/{addresses.d.ts.map → data/routes/addresses.d.ts.map} +1 -1
  60. package/dist/apps/{addresses.js → data/routes/addresses.js} +5 -5
  61. package/dist/apps/data/routes/addresses.js.map +1 -0
  62. package/dist/apps/{balances.d.ts → data/routes/balances.d.ts} +49 -49
  63. package/dist/apps/data/routes/balances.d.ts.map +1 -0
  64. package/dist/apps/{balances.js → data/routes/balances.js} +42 -11
  65. package/dist/apps/data/routes/balances.js.map +1 -0
  66. package/dist/apps/{blocks.d.ts → data/routes/blocks.d.ts} +47 -47
  67. package/dist/apps/data/routes/blocks.d.ts.map +1 -0
  68. package/dist/apps/{blocks.js → data/routes/blocks.js} +13 -13
  69. package/dist/apps/data/routes/blocks.js.map +1 -0
  70. package/dist/apps/{coingecko.d.ts → data/routes/coingecko.d.ts} +183 -183
  71. package/dist/apps/data/routes/coingecko.d.ts.map +1 -0
  72. package/dist/apps/{coingecko.js → data/routes/coingecko.js} +13 -13
  73. package/dist/apps/data/routes/coingecko.js.map +1 -0
  74. package/dist/apps/{exchanges.d.ts → data/routes/exchanges.d.ts} +460 -460
  75. package/dist/apps/data/routes/exchanges.d.ts.map +1 -0
  76. package/dist/apps/{exchanges.js → data/routes/exchanges.js} +19 -19
  77. package/dist/apps/data/routes/exchanges.js.map +1 -0
  78. package/dist/apps/{fee-amm.d.ts → data/routes/fee-amm.d.ts} +94 -94
  79. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -0
  80. package/dist/apps/{fee-amm.js → data/routes/fee-amm.js} +17 -17
  81. package/dist/apps/data/routes/fee-amm.js.map +1 -0
  82. package/dist/apps/{indexer.d.ts → data/routes/indexer.d.ts} +4 -4
  83. package/dist/apps/data/routes/indexer.d.ts.map +1 -0
  84. package/dist/apps/{indexer.js → data/routes/indexer.js} +13 -9
  85. package/dist/apps/data/routes/indexer.js.map +1 -0
  86. package/dist/apps/{receipts.d.ts → data/routes/receipts.d.ts} +6 -6
  87. package/dist/apps/data/routes/receipts.d.ts.map +1 -0
  88. package/dist/apps/{receipts.js → data/routes/receipts.js} +12 -12
  89. package/dist/apps/data/routes/receipts.js.map +1 -0
  90. package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +4 -4
  91. package/dist/apps/data/routes/rpc.d.ts.map +1 -0
  92. package/dist/apps/{rpc.js → data/routes/rpc.js} +6 -6
  93. package/dist/apps/data/routes/rpc.js.map +1 -0
  94. package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +4 -4
  95. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -0
  96. package/dist/apps/{tokenlist.js → data/routes/tokenlist.js} +8 -8
  97. package/dist/apps/data/routes/tokenlist.js.map +1 -0
  98. package/dist/apps/{tokens.d.ts → data/routes/tokens.d.ts} +11 -11
  99. package/dist/apps/data/routes/tokens.d.ts.map +1 -0
  100. package/dist/apps/{tokens.js → data/routes/tokens.js} +19 -19
  101. package/dist/apps/data/routes/tokens.js.map +1 -0
  102. package/dist/apps/{transactions.d.ts → data/routes/transactions.d.ts} +288 -288
  103. package/dist/apps/data/routes/transactions.d.ts.map +1 -0
  104. package/dist/apps/{transactions.js → data/routes/transactions.js} +13 -13
  105. package/dist/apps/data/routes/transactions.js.map +1 -0
  106. package/dist/apps/{transfers.d.ts → data/routes/transfers.d.ts} +35 -35
  107. package/dist/apps/data/routes/transfers.d.ts.map +1 -0
  108. package/dist/apps/{transfers.js → data/routes/transfers.js} +13 -13
  109. package/dist/apps/data/routes/transfers.js.map +1 -0
  110. package/dist/apps/{verified-tokens.d.ts → data/routes/verified-tokens.d.ts} +42 -42
  111. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -0
  112. package/dist/apps/{verified-tokens.js → data/routes/verified-tokens.js} +9 -9
  113. package/dist/apps/data/routes/verified-tokens.js.map +1 -0
  114. package/dist/apps/{webhooks.d.ts → data/routes/webhooks.d.ts} +66 -63
  115. package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
  116. package/dist/apps/{webhooks.js → data/routes/webhooks.js} +67 -59
  117. package/dist/apps/data/routes/webhooks.js.map +1 -0
  118. package/dist/apps/docs/App.d.ts +27 -0
  119. package/dist/apps/docs/App.d.ts.map +1 -0
  120. package/dist/apps/docs/App.js +122 -0
  121. package/dist/apps/docs/App.js.map +1 -0
  122. package/dist/{internal/OpenApi.fonts.d.ts → apps/docs/fonts.d.ts} +1 -1
  123. package/dist/apps/docs/fonts.d.ts.map +1 -0
  124. package/dist/{internal/OpenApi.fonts.js → apps/docs/fonts.js} +1 -1
  125. package/dist/apps/docs/fonts.js.map +1 -0
  126. package/dist/apps/docs/index.d.ts +2 -0
  127. package/dist/apps/docs/index.d.ts.map +1 -0
  128. package/dist/apps/docs/index.js +2 -0
  129. package/dist/apps/docs/index.js.map +1 -0
  130. package/dist/{internal/OpenApi.logo.d.ts → apps/docs/logo.d.ts} +1 -1
  131. package/dist/apps/docs/logo.d.ts.map +1 -0
  132. package/dist/{internal/OpenApi.logo.js → apps/docs/logo.js} +1 -1
  133. package/dist/apps/docs/logo.js.map +1 -0
  134. package/dist/apps/index.d.ts +4 -0
  135. package/dist/apps/index.d.ts.map +1 -0
  136. package/dist/apps/index.js +4 -0
  137. package/dist/apps/index.js.map +1 -0
  138. package/dist/apps/metadata.d.ts +7 -0
  139. package/dist/apps/metadata.d.ts.map +1 -0
  140. package/dist/apps/metadata.js +15 -0
  141. package/dist/apps/metadata.js.map +1 -0
  142. package/dist/apps/platform/App.d.ts +2985 -0
  143. package/dist/apps/platform/App.d.ts.map +1 -0
  144. package/dist/apps/platform/App.js +74 -0
  145. package/dist/apps/platform/App.js.map +1 -0
  146. package/dist/apps/platform/index.d.ts +2 -0
  147. package/dist/apps/platform/index.d.ts.map +1 -0
  148. package/dist/apps/platform/index.js +2 -0
  149. package/dist/apps/platform/index.js.map +1 -0
  150. package/dist/apps/platform/routes/api-keys.d.ts +681 -0
  151. package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
  152. package/dist/apps/platform/routes/api-keys.js +328 -0
  153. package/dist/apps/platform/routes/api-keys.js.map +1 -0
  154. package/dist/apps/platform/routes/invitations.d.ts +733 -0
  155. package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
  156. package/dist/apps/platform/routes/invitations.js +413 -0
  157. package/dist/apps/platform/routes/invitations.js.map +1 -0
  158. package/dist/apps/platform/routes/me.d.ts +95 -0
  159. package/dist/apps/platform/routes/me.d.ts.map +1 -0
  160. package/dist/apps/platform/routes/me.js +81 -0
  161. package/dist/apps/platform/routes/me.js.map +1 -0
  162. package/dist/apps/platform/routes/members.d.ts +554 -0
  163. package/dist/apps/platform/routes/members.d.ts.map +1 -0
  164. package/dist/apps/platform/routes/members.js +251 -0
  165. package/dist/apps/platform/routes/members.js.map +1 -0
  166. package/dist/apps/platform/routes/orgs.d.ts +582 -0
  167. package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
  168. package/dist/apps/platform/routes/orgs.js +265 -0
  169. package/dist/apps/platform/routes/orgs.js.map +1 -0
  170. package/dist/apps/platform/routes/projects.d.ts +740 -0
  171. package/dist/apps/platform/routes/projects.d.ts.map +1 -0
  172. package/dist/apps/platform/routes/projects.js +286 -0
  173. package/dist/apps/platform/routes/projects.js.map +1 -0
  174. package/dist/apps/relay/App.d.ts +41 -0
  175. package/dist/apps/relay/App.d.ts.map +1 -0
  176. package/dist/apps/relay/App.js +103 -0
  177. package/dist/apps/relay/App.js.map +1 -0
  178. package/dist/apps/relay/Sponsorships.d.ts +107 -0
  179. package/dist/apps/relay/Sponsorships.d.ts.map +1 -0
  180. package/dist/apps/relay/Sponsorships.js +193 -0
  181. package/dist/apps/relay/Sponsorships.js.map +1 -0
  182. package/dist/apps/relay/index.d.ts +3 -0
  183. package/dist/apps/relay/index.d.ts.map +1 -0
  184. package/dist/apps/relay/index.js +3 -0
  185. package/dist/apps/relay/index.js.map +1 -0
  186. package/dist/{Cli.d.ts → cli/Cli.d.ts} +13 -2
  187. package/dist/cli/Cli.d.ts.map +1 -0
  188. package/dist/cli/Cli.js +19 -0
  189. package/dist/cli/Cli.js.map +1 -0
  190. package/dist/cli/bin.d.ts +3 -0
  191. package/dist/cli/bin.d.ts.map +1 -0
  192. package/dist/cli/bin.js +4 -0
  193. package/dist/cli/bin.js.map +1 -0
  194. package/dist/cli/commands/admin.d.ts +15 -0
  195. package/dist/cli/commands/admin.d.ts.map +1 -0
  196. package/dist/cli/commands/admin.js +60 -0
  197. package/dist/cli/commands/admin.js.map +1 -0
  198. package/dist/cloudflare.d.ts +7 -0
  199. package/dist/cloudflare.d.ts.map +1 -1
  200. package/dist/cloudflare.js +9 -0
  201. package/dist/cloudflare.js.map +1 -1
  202. package/dist/db/Db.d.ts +113 -0
  203. package/dist/db/Db.d.ts.map +1 -0
  204. package/dist/db/Db.js +402 -0
  205. package/dist/db/Db.js.map +1 -0
  206. package/dist/db/Schema.d.ts +168 -0
  207. package/dist/db/Schema.d.ts.map +1 -0
  208. package/dist/db/Schema.js +229 -0
  209. package/dist/db/Schema.js.map +1 -0
  210. package/dist/db/tables/invitations.d.ts +84 -0
  211. package/dist/db/tables/invitations.d.ts.map +1 -0
  212. package/dist/db/tables/invitations.js +165 -0
  213. package/dist/db/tables/invitations.js.map +1 -0
  214. package/dist/db/tables/memberships.d.ts +108 -0
  215. package/dist/db/tables/memberships.d.ts.map +1 -0
  216. package/dist/db/tables/memberships.js +153 -0
  217. package/dist/db/tables/memberships.js.map +1 -0
  218. package/dist/db/tables/organizations.d.ts +123 -0
  219. package/dist/db/tables/organizations.d.ts.map +1 -0
  220. package/dist/db/tables/organizations.js +170 -0
  221. package/dist/db/tables/organizations.js.map +1 -0
  222. package/dist/db/tables/projects.d.ts +65 -0
  223. package/dist/db/tables/projects.d.ts.map +1 -0
  224. package/dist/db/tables/projects.js +75 -0
  225. package/dist/db/tables/projects.js.map +1 -0
  226. package/dist/db/tables/sponsoredTransactions.d.ts +120 -0
  227. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
  228. package/dist/db/tables/sponsoredTransactions.js +161 -0
  229. package/dist/db/tables/sponsoredTransactions.js.map +1 -0
  230. package/dist/db/tables/users.d.ts +48 -0
  231. package/dist/db/tables/users.d.ts.map +1 -0
  232. package/dist/db/tables/users.js +65 -0
  233. package/dist/db/tables/users.js.map +1 -0
  234. package/dist/db/tables/verifiedTokens.d.ts +53 -0
  235. package/dist/db/tables/verifiedTokens.d.ts.map +1 -0
  236. package/dist/db/tables/verifiedTokens.js +74 -0
  237. package/dist/db/tables/verifiedTokens.js.map +1 -0
  238. package/dist/db/tables/webhookDeliveries.d.ts +71 -0
  239. package/dist/db/tables/webhookDeliveries.d.ts.map +1 -0
  240. package/dist/db/tables/webhookDeliveries.js +119 -0
  241. package/dist/db/tables/webhookDeliveries.js.map +1 -0
  242. package/dist/db/tables/webhookSubscriptions.d.ts +158 -0
  243. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -0
  244. package/dist/db/tables/webhookSubscriptions.js +272 -0
  245. package/dist/db/tables/webhookSubscriptions.js.map +1 -0
  246. package/dist/handlers/internal/executionError.d.ts +25 -0
  247. package/dist/handlers/internal/executionError.d.ts.map +1 -0
  248. package/dist/handlers/internal/executionError.js +186 -0
  249. package/dist/handlers/internal/executionError.js.map +1 -0
  250. package/dist/handlers/internal/multisig.d.ts +233 -0
  251. package/dist/handlers/internal/multisig.d.ts.map +1 -0
  252. package/dist/handlers/internal/multisig.js +542 -0
  253. package/dist/handlers/internal/multisig.js.map +1 -0
  254. package/dist/handlers/internal/requestListener.d.ts +124 -0
  255. package/dist/handlers/internal/requestListener.d.ts.map +1 -0
  256. package/dist/handlers/internal/requestListener.js +173 -0
  257. package/dist/handlers/internal/requestListener.js.map +1 -0
  258. package/dist/handlers/internal/sponsorship.d.ts +113 -0
  259. package/dist/handlers/internal/sponsorship.d.ts.map +1 -0
  260. package/dist/handlers/internal/sponsorship.js +128 -0
  261. package/dist/handlers/internal/sponsorship.js.map +1 -0
  262. package/dist/handlers/internal/types.d.ts +284 -0
  263. package/dist/handlers/internal/types.d.ts.map +1 -0
  264. package/dist/handlers/internal/types.js +2 -0
  265. package/dist/handlers/internal/types.js.map +1 -0
  266. package/dist/handlers/internal/utils.d.ts +34 -0
  267. package/dist/handlers/internal/utils.d.ts.map +1 -0
  268. package/dist/handlers/internal/utils.js +131 -0
  269. package/dist/handlers/internal/utils.js.map +1 -0
  270. package/dist/handlers/relay.d.ts +123 -0
  271. package/dist/handlers/relay.d.ts.map +1 -0
  272. package/dist/handlers/relay.js +1278 -0
  273. package/dist/handlers/relay.js.map +1 -0
  274. package/dist/index.d.ts +4 -2
  275. package/dist/index.d.ts.map +1 -1
  276. package/dist/index.js +4 -2
  277. package/dist/index.js.map +1 -1
  278. package/dist/internal/Auth.d.ts +224 -16
  279. package/dist/internal/Auth.d.ts.map +1 -1
  280. package/dist/internal/Auth.js +572 -33
  281. package/dist/internal/Auth.js.map +1 -1
  282. package/dist/internal/Log.d.ts +7 -3
  283. package/dist/internal/Log.d.ts.map +1 -1
  284. package/dist/internal/Log.js +4 -0
  285. package/dist/internal/Log.js.map +1 -1
  286. package/dist/internal/OpenApi.d.ts +0 -19
  287. package/dist/internal/OpenApi.d.ts.map +1 -1
  288. package/dist/internal/OpenApi.js +0 -57
  289. package/dist/internal/OpenApi.js.map +1 -1
  290. package/dist/internal/RpcSchema.d.ts +10 -0
  291. package/dist/internal/RpcSchema.d.ts.map +1 -0
  292. package/dist/internal/RpcSchema.js +2 -0
  293. package/dist/internal/RpcSchema.js.map +1 -0
  294. package/dist/internal/Store.d.ts +49 -4
  295. package/dist/internal/Store.d.ts.map +1 -1
  296. package/dist/internal/Store.js +81 -5
  297. package/dist/internal/Store.js.map +1 -1
  298. package/dist/internal/VerifiedTokens.d.ts +15 -34
  299. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  300. package/dist/internal/VerifiedTokens.js +115 -159
  301. package/dist/internal/VerifiedTokens.js.map +1 -1
  302. package/dist/internal/Viem.d.ts +84 -0
  303. package/dist/internal/Viem.d.ts.map +1 -1
  304. package/dist/internal/Webhooks.d.ts +50 -36
  305. package/dist/internal/Webhooks.d.ts.map +1 -1
  306. package/dist/internal/Webhooks.js +92 -205
  307. package/dist/internal/Webhooks.js.map +1 -1
  308. package/package.json +37 -6
  309. package/src/ApiKey.test.ts +3 -3
  310. package/src/ApiKey.ts +11 -12
  311. package/src/ApiKeys.test.ts +278 -0
  312. package/src/ApiKeys.ts +358 -0
  313. package/src/App.test-d.ts +1 -1
  314. package/src/App.test.ts +40508 -19083
  315. package/src/App.ts +239 -416
  316. package/src/Client.test-d.ts +307 -16
  317. package/src/Handler.ts +154 -0
  318. package/src/Scope.ts +17 -4
  319. package/src/Webhooks.test.ts +8 -7
  320. package/src/Webhooks.ts +13 -7
  321. package/src/admin/Access.ts +1 -3
  322. package/src/admin/App.ts +19 -24
  323. package/src/admin/apps/api-keys.test.ts +70 -18
  324. package/src/admin/apps/api-keys.ts +92 -9
  325. package/src/admin/apps/scopes.test.ts +8 -0
  326. package/src/admin/apps/verified-tokens.test.ts +3 -30
  327. package/src/admin/apps/verified-tokens.ts +18 -37
  328. package/src/admin/ui.generated.ts +1 -1
  329. package/src/apps/composition.test.ts +66 -0
  330. package/src/apps/data/App.ts +295 -0
  331. package/src/apps/data/index.ts +2 -0
  332. package/src/apps/{activities.test.ts → data/routes/activities.test.ts} +3 -3
  333. package/src/apps/{activities.ts → data/routes/activities.ts} +15 -15
  334. package/src/apps/{addresses.ts → data/routes/addresses.ts} +6 -6
  335. package/src/apps/{balances.test.ts → data/routes/balances.test.ts} +6 -5
  336. package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
  337. package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +4 -4
  338. package/src/apps/{blocks.ts → data/routes/blocks.ts} +14 -14
  339. package/src/apps/{coingecko.test.ts → data/routes/coingecko.test.ts} +2 -2
  340. package/src/apps/{coingecko.ts → data/routes/coingecko.ts} +14 -14
  341. package/src/apps/{exchanges.test.ts → data/routes/exchanges.test.ts} +2 -2
  342. package/src/apps/{exchanges.ts → data/routes/exchanges.ts} +20 -20
  343. package/src/apps/{fee-amm.test.ts → data/routes/fee-amm.test.ts} +3 -3
  344. package/src/apps/{fee-amm.ts → data/routes/fee-amm.ts} +18 -18
  345. package/src/apps/{indexer.test.ts → data/routes/indexer.test.ts} +27 -6
  346. package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
  347. package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +4 -4
  348. package/src/apps/{receipts.ts → data/routes/receipts.ts} +13 -13
  349. package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +142 -13
  350. package/src/apps/{rpc.ts → data/routes/rpc.ts} +7 -7
  351. package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +8 -10
  352. package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
  353. package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +6 -5
  354. package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
  355. package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +4 -4
  356. package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
  357. package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +3 -3
  358. package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
  359. package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +27 -15
  360. package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
  361. package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +137 -150
  362. package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +83 -81
  363. package/src/apps/docs/App.ts +136 -0
  364. package/src/apps/docs/index.ts +1 -0
  365. package/src/apps/index.ts +3 -0
  366. package/src/apps/metadata.ts +23 -0
  367. package/src/apps/platform/App.ts +130 -0
  368. package/src/apps/platform/index.ts +1 -0
  369. package/src/apps/platform/routes/api-keys.test.ts +330 -0
  370. package/src/apps/platform/routes/api-keys.ts +427 -0
  371. package/src/apps/platform/routes/invitations.test.ts +361 -0
  372. package/src/apps/platform/routes/invitations.ts +519 -0
  373. package/src/apps/platform/routes/me.test.ts +121 -0
  374. package/src/apps/platform/routes/me.ts +106 -0
  375. package/src/apps/platform/routes/members.test.ts +195 -0
  376. package/src/apps/platform/routes/members.ts +313 -0
  377. package/src/apps/platform/routes/orgs.test.ts +313 -0
  378. package/src/apps/platform/routes/orgs.ts +343 -0
  379. package/src/apps/platform/routes/projects.test.ts +181 -0
  380. package/src/apps/platform/routes/projects.ts +367 -0
  381. package/src/apps/relay/App.test.ts +484 -0
  382. package/src/apps/relay/App.ts +128 -0
  383. package/src/apps/relay/Sponsorships.test.ts +375 -0
  384. package/src/apps/relay/Sponsorships.ts +305 -0
  385. package/src/apps/relay/index.ts +2 -0
  386. package/src/{Cli.test.ts → cli/Cli.test.ts} +10 -9
  387. package/src/{Cli.ts → cli/Cli.ts} +16 -9
  388. package/src/cli/bin.ts +4 -0
  389. package/src/cli/commands/admin.test.ts +71 -0
  390. package/src/cli/commands/admin.ts +60 -0
  391. package/src/cloudflare.ts +10 -0
  392. package/src/db/Db.test.ts +84 -0
  393. package/src/db/Db.ts +542 -0
  394. package/src/db/Schema.ts +301 -0
  395. package/src/db/tables/invitations.ts +198 -0
  396. package/src/db/tables/memberships.ts +208 -0
  397. package/src/db/tables/organizations.test.ts +160 -0
  398. package/src/db/tables/organizations.ts +232 -0
  399. package/src/db/tables/projects.ts +107 -0
  400. package/src/db/tables/sponsoredTransactions.test.ts +218 -0
  401. package/src/db/tables/sponsoredTransactions.ts +236 -0
  402. package/src/db/tables/users.ts +85 -0
  403. package/src/db/tables/verifiedTokens.ts +111 -0
  404. package/src/db/tables/webhookDeliveries.ts +159 -0
  405. package/src/db/tables/webhookSubscriptions.ts +358 -0
  406. package/src/handlers/internal/executionError.ts +207 -0
  407. package/src/handlers/internal/multisig.test.ts +818 -0
  408. package/src/handlers/internal/multisig.ts +823 -0
  409. package/src/handlers/internal/requestListener.ts +273 -0
  410. package/src/handlers/internal/sponsorship.ts +245 -0
  411. package/src/handlers/internal/types.ts +378 -0
  412. package/src/handlers/internal/utils.ts +153 -0
  413. package/src/handlers/relay.test.ts +2035 -0
  414. package/src/handlers/relay.ts +1623 -0
  415. package/src/index.ts +4 -2
  416. package/src/internal/Auth.test.ts +337 -21
  417. package/src/internal/Auth.ts +783 -44
  418. package/src/internal/Cursor.test.ts +3 -2
  419. package/src/internal/Log.test.ts +1 -1
  420. package/src/internal/Log.ts +11 -3
  421. package/src/internal/MetricSink.ts +1 -1
  422. package/src/internal/OpenApi.ts +0 -59
  423. package/src/internal/RateLimit.test.ts +1 -1
  424. package/src/internal/RpcSchema.ts +10 -0
  425. package/src/internal/Store.test.ts +150 -10
  426. package/src/internal/Store.ts +136 -11
  427. package/src/internal/Tidx.local.test.ts +1 -1
  428. package/src/internal/VerifiedTokens.test.ts +99 -115
  429. package/src/internal/VerifiedTokens.ts +123 -175
  430. package/src/internal/WebhookDestination.test.ts +1 -1
  431. package/src/internal/Webhooks.test.ts +111 -111
  432. package/src/internal/Webhooks.ts +103 -221
  433. package/dist/ApiKeySource.d.ts +0 -166
  434. package/dist/ApiKeySource.d.ts.map +0 -1
  435. package/dist/ApiKeySource.js +0 -234
  436. package/dist/ApiKeySource.js.map +0 -1
  437. package/dist/Cli.d.ts.map +0 -1
  438. package/dist/Cli.js +0 -13
  439. package/dist/Cli.js.map +0 -1
  440. package/dist/apps/activities.js.map +0 -1
  441. package/dist/apps/addresses.js.map +0 -1
  442. package/dist/apps/balances.d.ts.map +0 -1
  443. package/dist/apps/balances.js.map +0 -1
  444. package/dist/apps/blocks.d.ts.map +0 -1
  445. package/dist/apps/blocks.js.map +0 -1
  446. package/dist/apps/coingecko.d.ts.map +0 -1
  447. package/dist/apps/coingecko.js.map +0 -1
  448. package/dist/apps/exchanges.d.ts.map +0 -1
  449. package/dist/apps/exchanges.js.map +0 -1
  450. package/dist/apps/fee-amm.d.ts.map +0 -1
  451. package/dist/apps/fee-amm.js.map +0 -1
  452. package/dist/apps/indexer.d.ts.map +0 -1
  453. package/dist/apps/indexer.js.map +0 -1
  454. package/dist/apps/receipts.d.ts.map +0 -1
  455. package/dist/apps/receipts.js.map +0 -1
  456. package/dist/apps/rpc.d.ts.map +0 -1
  457. package/dist/apps/rpc.js.map +0 -1
  458. package/dist/apps/tokenlist.d.ts.map +0 -1
  459. package/dist/apps/tokenlist.js.map +0 -1
  460. package/dist/apps/tokens.d.ts.map +0 -1
  461. package/dist/apps/tokens.js.map +0 -1
  462. package/dist/apps/transactions.d.ts.map +0 -1
  463. package/dist/apps/transactions.js.map +0 -1
  464. package/dist/apps/transfers.d.ts.map +0 -1
  465. package/dist/apps/transfers.js.map +0 -1
  466. package/dist/apps/verified-tokens.d.ts.map +0 -1
  467. package/dist/apps/verified-tokens.js.map +0 -1
  468. package/dist/apps/webhooks.js.map +0 -1
  469. package/dist/internal/OpenApi.fonts.d.ts.map +0 -1
  470. package/dist/internal/OpenApi.fonts.js.map +0 -1
  471. package/dist/internal/OpenApi.logo.d.ts.map +0 -1
  472. package/dist/internal/OpenApi.logo.js.map +0 -1
  473. package/seeds/31318/icons/0x20c0000000000000000000000000000000000000.svg +0 -1
  474. package/seeds/31318/icons/0x20c0000000000000000000000000000000000001.svg +0 -1
  475. package/seeds/31318/icons/0x20c0000000000000000000000000000000000002.svg +0 -1
  476. package/seeds/31318/icons/0x20c0000000000000000000000000000000000003.svg +0 -1
  477. package/seeds/31318/verified-tokens.json +0 -30
  478. package/seeds/4217/icons/0x20c0000000000000000000000000000000000000.svg +0 -25
  479. package/seeds/4217/icons/0x20c000000000000000000000048c8f36df1c9a4a.svg +0 -1
  480. package/seeds/4217/icons/0x20c0000000000000000000000520792dcccccccc.svg +0 -1
  481. package/seeds/4217/icons/0x20c0000000000000000000000a6da882d075a4c3.svg +0 -4
  482. package/seeds/4217/icons/0x20c000000000000000000000111111111e910f0f.svg +0 -30
  483. package/seeds/4217/icons/0x20c00000000000000000000014f22ca97301eb73.svg +0 -1
  484. package/seeds/4217/icons/0x20c0000000000000000000001621e21f71cf12fb.svg +0 -1
  485. package/seeds/4217/icons/0x20c0000000000000000000002f52d5cc21a3207b.svg +0 -1
  486. package/seeds/4217/icons/0x20c0000000000000000000003158081efd85bfc2.svg +0 -11
  487. package/seeds/4217/icons/0x20c0000000000000000000003554d28269e0f3c2.svg +0 -1
  488. package/seeds/4217/icons/0x20c000000000000000000000383a23bacb546ab9.svg +0 -1
  489. package/seeds/4217/icons/0x20c00000000000000000000042109aef2f8b28e1.png +0 -0
  490. package/seeds/4217/icons/0x20c0000000000000000000005c0bac7cef389a11.svg +0 -1
  491. package/seeds/4217/icons/0x20c0000000000000000000006fd9a167923ba194.png +0 -0
  492. package/seeds/4217/icons/0x20c0000000000000000000007f7ba549dd0251b9.svg +0 -1
  493. package/seeds/4217/icons/0x20c0000000000000000000008191667423f70e67.svg +0 -5
  494. package/seeds/4217/icons/0x20c0000000000000000000008ee4fcff88888888.svg +0 -1
  495. package/seeds/4217/icons/0x20c0000000000000000000009a4a4b17e0dc6651.svg +0 -1
  496. package/seeds/4217/icons/0x20c000000000000000000000ab02d39df30bd17e.svg +0 -1
  497. package/seeds/4217/icons/0x20c000000000000000000000ae247a1130450f09.svg +0 -1
  498. package/seeds/4217/icons/0x20c000000000000000000000aeed2ec36a54d0e5.svg +0 -1
  499. package/seeds/4217/icons/0x20c000000000000000000000b9537d11c60e8b50.svg +0 -1
  500. package/seeds/4217/icons/0x20c000000000000000000000bd95bfb69fbe6ce3.svg +0 -1
  501. package/seeds/4217/icons/0x20c000000000000000000000c412ec89d0c08be5.svg +0 -1
  502. package/seeds/4217/icons/0x20c000000000000000000000f047dd7018e50367.png +0 -0
  503. package/seeds/4217/verified-tokens.json +0 -177
  504. package/seeds/42431/icons/0x20c0000000000000000000000000000000000000.svg +0 -25
  505. package/seeds/42431/icons/0x20c0000000000000000000000000000000000001.svg +0 -1
  506. package/seeds/42431/icons/0x20c0000000000000000000000000000000000002.svg +0 -1
  507. package/seeds/42431/icons/0x20c0000000000000000000000000000000000003.svg +0 -1
  508. package/seeds/42431/icons/0x20c0000000000000000000009e8d7eb59b783726.svg +0 -1
  509. package/seeds/42431/icons/0x20c000000000000000000000d72572838bbee59c.svg +0 -1
  510. package/seeds/42431/verified-tokens.json +0 -44
  511. package/seeds/openrpc/README.md +0 -27
  512. package/seeds/openrpc/execution-apis.json +0 -8989
  513. package/src/ApiKeySource.test-d.ts +0 -11
  514. package/src/ApiKeySource.test.ts +0 -295
  515. package/src/ApiKeySource.ts +0 -303
  516. /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
  517. /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
@@ -0,0 +1,124 @@
1
+ import type * as http from 'node:http';
2
+ import type * as http2 from 'node:http2';
3
+ export interface RequestListenerOptions {
4
+ /**
5
+ * Overrides the host portion of the incoming request URL. By default the request URL host is
6
+ * derived from the HTTP `Host` header.
7
+ *
8
+ * For example, if you have a `$HOST` environment variable that contains the hostname of your
9
+ * server, you can use it to set the host of all incoming request URLs like so:
10
+ *
11
+ * ```ts
12
+ * createRequestListener(handler, { host: process.env.HOST })
13
+ * ```
14
+ */
15
+ host?: string;
16
+ /**
17
+ * An error handler that determines the response when the request handler throws an error. By
18
+ * default a 500 Internal Server Error response will be sent.
19
+ */
20
+ onError?: ErrorHandler;
21
+ /**
22
+ * Overrides the protocol of the incoming request URL. By default the request URL protocol is
23
+ * derived from the connection protocol. So e.g. when serving over HTTPS (using
24
+ * `https.createServer()`), the request URL will begin with `https:`.
25
+ */
26
+ protocol?: string;
27
+ }
28
+ /**
29
+ * Wraps a fetch handler in a Node.js request listener that can be used with:
30
+ *
31
+ * - [`http.createServer()`](https://nodejs.org/api/http.html#httpcreateserveroptions-requestlistener)
32
+ * - [`https.createServer()`](https://nodejs.org/api/https.html#httpscreateserveroptions-requestlistener)
33
+ * - [`http2.createServer()`](https://nodejs.org/api/http2.html#http2createserveroptions-onrequesthandler)
34
+ * - [`http2.createSecureServer()`](https://nodejs.org/api/http2.html#http2createsecureserveroptions-onrequesthandler)
35
+ *
36
+ * Example:
37
+ *
38
+ * ```ts
39
+ * import * as http from 'node:http';
40
+ * import { createRequestListener } from '@mjackson/node-fetch-server';
41
+ *
42
+ * async function handler(request) {
43
+ * return new Response('Hello, world!');
44
+ * }
45
+ *
46
+ * let server = http.createServer(
47
+ * createRequestListener(handler)
48
+ * );
49
+ *
50
+ * server.listen(3000);
51
+ * ```
52
+ *
53
+ * @param handler The fetch handler to use for processing incoming requests.
54
+ * @param options Request listener options.
55
+ * @returns A Node.js request listener function.
56
+ */
57
+ export declare function fromFetchHandler(handler: FetchHandler, options?: RequestListenerOptions): http.RequestListener;
58
+ export type RequestOptions = Omit<RequestListenerOptions, 'onError'>;
59
+ /**
60
+ * Creates a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) object from
61
+ *
62
+ * - a [`http.IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage)/[`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse) pair
63
+ * - a [`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#class-http2http2serverrequest)/[`http2.Http2ServerResponse`](https://nodejs.org/api/http2.html#class-http2http2serverresponse) pair
64
+ *
65
+ * @param req The incoming request object.
66
+ * @param res The server response object.
67
+ * @param options
68
+ * @returns A request object.
69
+ */
70
+ export declare function createRequest(req: http.IncomingMessage | http2.Http2ServerRequest, res: http.ServerResponse | http2.Http2ServerResponse, options?: RequestOptions): Request;
71
+ /**
72
+ * Creates a [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object from the headers in a Node.js
73
+ * [`http.IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage)/[`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#class-http2http2serverrequest).
74
+ *
75
+ * @param req The incoming request object.
76
+ * @returns A headers object.
77
+ */
78
+ export declare function createHeaders(req: http.IncomingMessage | http2.Http2ServerRequest): Headers;
79
+ /**
80
+ * Sends a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) to the client using a Node.js
81
+ * [`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse)/[`http2.Http2ServerResponse`](https://nodejs.org/api/http2.html#class-http2http2serverresponse)
82
+ * object.
83
+ *
84
+ * @param res The server response object.
85
+ * @param response The response to send.
86
+ */
87
+ export declare function sendResponse(res: http.ServerResponse | http2.Http2ServerResponse, response: Response): Promise<void>;
88
+ export declare function readStream(stream: ReadableStream<Uint8Array>): AsyncIterable<Uint8Array>;
89
+ export interface ClientAddress {
90
+ /**
91
+ * The IP address of the client that sent the request.
92
+ *
93
+ * [Node.js Reference](https://nodejs.org/api/net.html#socketremoteaddress)
94
+ */
95
+ address: string;
96
+ /**
97
+ * The family of the client IP address.
98
+ *
99
+ * [Node.js Reference](https://nodejs.org/api/net.html#socketremotefamily)
100
+ */
101
+ family: 'IPv4' | 'IPv6';
102
+ /**
103
+ * The remote port of the client that sent the request.
104
+ *
105
+ * [Node.js Reference](https://nodejs.org/api/net.html#socketremoteport)
106
+ */
107
+ port: number;
108
+ }
109
+ /**
110
+ * A function that handles an error that occurred during request handling. May return a response to
111
+ * send to the client, or `undefined` to allow the server to send a default error response.
112
+ *
113
+ * [MDN `Response` Reference](https://developer.mozilla.org/en-US/docs/Web/API/Response)
114
+ */
115
+ export type ErrorHandler = (error: unknown) => undefined | Response | Promise<undefined | Response>;
116
+ /**
117
+ * A function that handles an incoming request and returns a response.
118
+ *
119
+ * [MDN `Request` Reference](https://developer.mozilla.org/en-US/docs/Web/API/Request)
120
+ *
121
+ * [MDN `Response` Reference](https://developer.mozilla.org/en-US/docs/Web/API/Response)
122
+ */
123
+ export type FetchHandler = (request: Request, client: ClientAddress) => Response | Promise<Response>;
124
+ //# sourceMappingURL=requestListener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestListener.d.ts","sourceRoot":"","sources":["../../../src/handlers/internal/requestListener.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,IAAI,CAAC,eAAe,CAyBtB;AAuBD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAA;AAEpE;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,kBAAkB,EACpD,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,mBAAmB,EACpD,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAoCT;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,kBAAkB,GAAG,OAAO,CAU3F;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,mBAAmB,EACpD,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAuB,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,CAQ/F;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAA;IACf;;;;OAIG;IACH,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACvB;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAA;AAEnG;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA"}
@@ -0,0 +1,173 @@
1
+ // @ts-nocheck
2
+ // Credit: https://github.com/mjackson/remix-the-web/blob/main/packages/node-fetch-server/src/lib/request-listener.ts
3
+ /**
4
+ * Wraps a fetch handler in a Node.js request listener that can be used with:
5
+ *
6
+ * - [`http.createServer()`](https://nodejs.org/api/http.html#httpcreateserveroptions-requestlistener)
7
+ * - [`https.createServer()`](https://nodejs.org/api/https.html#httpscreateserveroptions-requestlistener)
8
+ * - [`http2.createServer()`](https://nodejs.org/api/http2.html#http2createserveroptions-onrequesthandler)
9
+ * - [`http2.createSecureServer()`](https://nodejs.org/api/http2.html#http2createsecureserveroptions-onrequesthandler)
10
+ *
11
+ * Example:
12
+ *
13
+ * ```ts
14
+ * import * as http from 'node:http';
15
+ * import { createRequestListener } from '@mjackson/node-fetch-server';
16
+ *
17
+ * async function handler(request) {
18
+ * return new Response('Hello, world!');
19
+ * }
20
+ *
21
+ * let server = http.createServer(
22
+ * createRequestListener(handler)
23
+ * );
24
+ *
25
+ * server.listen(3000);
26
+ * ```
27
+ *
28
+ * @param handler The fetch handler to use for processing incoming requests.
29
+ * @param options Request listener options.
30
+ * @returns A Node.js request listener function.
31
+ */
32
+ export function fromFetchHandler(handler, options) {
33
+ const onError = options?.onError ?? defaultErrorHandler;
34
+ return async (req, res) => {
35
+ const request = createRequest(req, res, options);
36
+ const client = {
37
+ address: req.socket.remoteAddress,
38
+ family: req.socket.remoteFamily,
39
+ port: req.socket.remotePort,
40
+ };
41
+ let response;
42
+ try {
43
+ response = await handler(request, client);
44
+ }
45
+ catch (error) {
46
+ try {
47
+ response = (await onError(error)) ?? internalServerError();
48
+ }
49
+ catch (error) {
50
+ console.error(`There was an error in the error handler: ${error}`);
51
+ response = internalServerError();
52
+ }
53
+ }
54
+ await sendResponse(res, response);
55
+ };
56
+ }
57
+ function defaultErrorHandler(error) {
58
+ console.error(error);
59
+ return internalServerError();
60
+ }
61
+ function internalServerError() {
62
+ return new Response(
63
+ // "Internal Server Error"
64
+ new Uint8Array([
65
+ 73, 110, 116, 101, 114, 110, 97, 108, 32, 83, 101, 114, 118, 101, 114, 32, 69, 114, 114, 111,
66
+ 114,
67
+ ]), {
68
+ headers: {
69
+ 'Content-Type': 'text/plain',
70
+ },
71
+ status: 500,
72
+ });
73
+ }
74
+ /**
75
+ * Creates a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) object from
76
+ *
77
+ * - a [`http.IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage)/[`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse) pair
78
+ * - a [`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#class-http2http2serverrequest)/[`http2.Http2ServerResponse`](https://nodejs.org/api/http2.html#class-http2http2serverresponse) pair
79
+ *
80
+ * @param req The incoming request object.
81
+ * @param res The server response object.
82
+ * @param options
83
+ * @returns A request object.
84
+ */
85
+ export function createRequest(req, res, options) {
86
+ const controller = new AbortController();
87
+ res.on('close', () => {
88
+ controller.abort();
89
+ });
90
+ const method = req.method ?? 'GET';
91
+ const headers = createHeaders(req);
92
+ const protocol = options?.protocol ?? ('encrypted' in req.socket && req.socket.encrypted ? 'https:' : 'http:');
93
+ const host = options?.host ?? headers.get('Host') ?? 'localhost';
94
+ const url = new URL(req.url, `${protocol}//${host}`);
95
+ const init = { headers, method, signal: controller.signal };
96
+ if (method !== 'GET' && method !== 'HEAD') {
97
+ init.body = new ReadableStream({
98
+ start(controller) {
99
+ req.on('data', (chunk) => {
100
+ controller.enqueue(new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength));
101
+ });
102
+ req.on('end', () => {
103
+ controller.close();
104
+ });
105
+ },
106
+ });
107
+ init.duplex = 'half';
108
+ }
109
+ return new Request(url, init);
110
+ }
111
+ /**
112
+ * Creates a [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object from the headers in a Node.js
113
+ * [`http.IncomingMessage`](https://nodejs.org/api/http.html#class-httpincomingmessage)/[`http2.Http2ServerRequest`](https://nodejs.org/api/http2.html#class-http2http2serverrequest).
114
+ *
115
+ * @param req The incoming request object.
116
+ * @returns A headers object.
117
+ */
118
+ export function createHeaders(req) {
119
+ const headers = new Headers();
120
+ const rawHeaders = req.rawHeaders;
121
+ for (let i = 0; i < rawHeaders.length; i += 2) {
122
+ if (rawHeaders[i]?.startsWith(':'))
123
+ continue;
124
+ headers.append(rawHeaders[i], rawHeaders[i + 1]);
125
+ }
126
+ return headers;
127
+ }
128
+ /**
129
+ * Sends a [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) to the client using a Node.js
130
+ * [`http.ServerResponse`](https://nodejs.org/api/http.html#class-httpserverresponse)/[`http2.Http2ServerResponse`](https://nodejs.org/api/http2.html#class-http2http2serverresponse)
131
+ * object.
132
+ *
133
+ * @param res The server response object.
134
+ * @param response The response to send.
135
+ */
136
+ export async function sendResponse(res, response) {
137
+ // Iterate over response.headers so we are sure to send multiple Set-Cookie headers correctly.
138
+ // These would incorrectly be merged into a single header if we tried to use
139
+ // `Object.fromEntries(response.headers.entries())`.
140
+ const headers = {};
141
+ for (const [key, value] of response.headers) {
142
+ if (key in headers) {
143
+ if (Array.isArray(headers[key])) {
144
+ headers[key].push(value);
145
+ }
146
+ else {
147
+ headers[key] = [headers[key], value];
148
+ }
149
+ }
150
+ else {
151
+ headers[key] = value;
152
+ }
153
+ }
154
+ ;
155
+ res.writeHead(response.status, headers);
156
+ if (response.body != null && res.req.method !== 'HEAD') {
157
+ for await (const chunk of readStream(response.body)) {
158
+ // @ts-expect-error - Node typings for http2 require a 2nd parameter to write but it's optional
159
+ res.write(chunk);
160
+ }
161
+ }
162
+ res.end();
163
+ }
164
+ export async function* readStream(stream) {
165
+ const reader = stream.getReader();
166
+ while (true) {
167
+ const { done, value } = await reader.read();
168
+ if (done)
169
+ break;
170
+ yield value;
171
+ }
172
+ }
173
+ //# sourceMappingURL=requestListener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestListener.js","sourceRoot":"","sources":["../../../src/handlers/internal/requestListener.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ import { type Hex } from 'ox';
2
+ import type { Address, Client } from 'viem';
3
+ import type { LocalAccount } from 'viem/accounts';
4
+ import { Transaction } from 'viem/tempo';
5
+ /**
6
+ * Sponsorship approval callback. The candidate always carries its `chainId`:
7
+ * raw submissions deserialize it, and fills validate only prepared/filled
8
+ * transactions.
9
+ */
10
+ export type Validate = (request: Transaction.TransactionRequest & {
11
+ chainId?: number | Hex.Hex | undefined;
12
+ }) => boolean | Promise<boolean>;
13
+ /** Returns sponsor metadata for `eth_fillTransaction` responses. */
14
+ export declare function getSponsor(options: getSponsor.Options): getSponsor.ReturnType;
15
+ export declare namespace getSponsor {
16
+ type Options = {
17
+ /** Account used for sponsorship. */
18
+ account: LocalAccount;
19
+ /** Optional display name. */
20
+ name?: string | undefined;
21
+ /** Optional display URL. */
22
+ url?: string | undefined;
23
+ };
24
+ type ReturnType = {
25
+ /** Sponsor address. */
26
+ address: Address;
27
+ /** Sponsor display name. */
28
+ name?: string | undefined;
29
+ /** Sponsor display URL. */
30
+ url?: string | undefined;
31
+ };
32
+ }
33
+ /** Returns whether the fee payer approves a filled transaction. */
34
+ export declare function shouldSponsor(options: shouldSponsor.Options): Promise<boolean>;
35
+ export declare namespace shouldSponsor {
36
+ type Options = {
37
+ /** Sender address from the original request. */
38
+ sender?: Address | undefined;
39
+ /** Filled transaction to validate. */
40
+ transaction: Record<string, unknown>;
41
+ /** Optional sponsorship approval callback. */
42
+ validate?: Validate | undefined;
43
+ };
44
+ }
45
+ /** Returns whether a raw Tempo transaction is explicitly requesting sponsorship. */
46
+ export declare function requestsRawSponsorship(serialized: `0x${string}`): boolean;
47
+ /** Returns `true` when a fill request already has the fields needed for sponsorship signing. */
48
+ export declare function isPreparedTransaction(value: Record<string, unknown>): boolean;
49
+ /** Signs a filled transaction as the fee payer. */
50
+ export declare function sign(options: sign.Options): Promise<{
51
+ from: `0x${string}` | undefined;
52
+ feePayerSignature: {
53
+ r: bigint;
54
+ s: bigint;
55
+ yParity: number;
56
+ };
57
+ }>;
58
+ export declare namespace sign {
59
+ type Options = {
60
+ /** Account used as the fee payer. */
61
+ account: LocalAccount;
62
+ /** Called once the fee payer has signed the fill. Awaited: a throw aborts the fill. */
63
+ onSponsored?: ((event: SponsoredEvent) => Promise<void> | void) | undefined;
64
+ /** Filled transaction to sign. */
65
+ transaction: Record<string, unknown>;
66
+ /** Sender address from the original request. */
67
+ sender?: Address | undefined;
68
+ };
69
+ }
70
+ /** Handles `eth_signRawTransaction` and broadcast methods for sponsored Tempo transactions. */
71
+ export declare function handleRawTransaction(options: handleRawTransaction.Options): Promise<`0x76${string}`>;
72
+ export declare namespace handleRawTransaction {
73
+ type Options = {
74
+ /** Account used as the fee payer. */
75
+ account: LocalAccount;
76
+ /** Optional token the fee payer prefers for sponsored raw transactions. */
77
+ feeToken?: Address | undefined;
78
+ /** Optional fee-token resolver used when the raw envelope omits `feeToken`. */
79
+ getFeeToken?: ((chainId: number) => Promise<Address | undefined>) | undefined;
80
+ /** Client resolver keyed by transaction `chainId`. */
81
+ getClient: (chainId?: number) => Client;
82
+ /** Raw transaction method to handle. */
83
+ method: 'eth_signRawTransaction' | 'eth_sendRawTransaction' | 'eth_sendRawTransactionSync';
84
+ /** Called once the fee payer has signed, before any broadcast. Awaited: a throw aborts the request. */
85
+ onSponsored?: ((event: SponsoredEvent) => Promise<void> | void) | undefined;
86
+ /** Incoming JSON-RPC request. */
87
+ request: {
88
+ params?: readonly unknown[] | undefined;
89
+ };
90
+ /** Sender address to use if it cannot be recovered from the raw envelope. */
91
+ sender?: Address | undefined;
92
+ /** Optional sponsorship approval callback. */
93
+ validate?: Validate | undefined;
94
+ };
95
+ }
96
+ /** Facts of one sponsorship commitment, emitted at fee-payer signing time. */
97
+ export type SponsoredEvent = {
98
+ /** Chain the sponsored transaction targets. */
99
+ chainId: number;
100
+ /** Fee token the sponsorship resolved, when known. */
101
+ feeToken?: Address | undefined;
102
+ /** Method that triggered sponsorship: a fill (intent) or a raw submission. */
103
+ method: 'eth_fillTransaction' | 'eth_signRawTransaction' | 'eth_sendRawTransaction' | 'eth_sendRawTransactionSync';
104
+ /** Transaction sender. */
105
+ sender: Address;
106
+ /** Fee-payer sign payload — a stable identity for the sponsored envelope. */
107
+ signPayload: Hex.Hex;
108
+ /** Serialized sponsored transaction (sender-unsigned for fill intents). */
109
+ transaction: Hex.Hex;
110
+ /** Transaction hash (keccak256 of the signed envelope); absent for fill intents, whose senders have not signed yet. */
111
+ transactionHash?: Hex.Hex | undefined;
112
+ };
113
+ //# sourceMappingURL=sponsorship.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sponsorship.d.ts","sourceRoot":"","sources":["../../../src/handlers/internal/sponsorship.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { Hash, RpcResponse, Signature } from 'ox';
2
+ import { TxEnvelopeTempo } from 'ox/tempo';
3
+ import { Transaction } from 'viem/tempo';
4
+ import * as Utils from './utils.js';
5
+ /** Returns sponsor metadata for `eth_fillTransaction` responses. */
6
+ export function getSponsor(options) {
7
+ const { account, name, url } = options;
8
+ return {
9
+ address: account.address,
10
+ ...(name ? { name } : {}),
11
+ ...(url ? { url } : {}),
12
+ };
13
+ }
14
+ /** Returns whether the fee payer approves a filled transaction. */
15
+ export async function shouldSponsor(options) {
16
+ const { sender, transaction, validate } = options;
17
+ if (!validate)
18
+ return true;
19
+ return await validate({
20
+ ...transaction,
21
+ from: sender,
22
+ });
23
+ }
24
+ /** Returns whether a raw Tempo transaction is explicitly requesting sponsorship. */
25
+ export function requestsRawSponsorship(serialized) {
26
+ if (!Utils.isSerializedTempoTransaction(serialized))
27
+ return false;
28
+ const transaction = Transaction.deserialize(serialized);
29
+ return 'feePayerSignature' in transaction && transaction.feePayerSignature === null;
30
+ }
31
+ /** Returns `true` when a fill request already has the fields needed for sponsorship signing. */
32
+ export function isPreparedTransaction(value) {
33
+ return (typeof value['from'] === 'string' &&
34
+ typeof Utils.resolveChainId(value['chainId']) === 'number' &&
35
+ typeof value['gas'] !== 'undefined' &&
36
+ typeof value['nonce'] !== 'undefined' &&
37
+ (typeof value['maxFeePerGas'] !== 'undefined' || typeof value['gasPrice'] !== 'undefined'));
38
+ }
39
+ /** Signs a filled transaction as the fee payer. */
40
+ export async function sign(options) {
41
+ const { account, transaction, sender } = options;
42
+ const from = transaction['from'] ?? sender;
43
+ const { signature: _, ...withoutSenderSig } = transaction;
44
+ const prepared = { ...withoutSenderSig, from };
45
+ if (!prepared.from)
46
+ throw new RpcResponse.InvalidParamsError({
47
+ message: 'Transaction sender must be provided before fee payer signing.',
48
+ });
49
+ if (!account.sign)
50
+ throw new Error('Fee payer account cannot sign transactions.');
51
+ const chainId = Utils.resolveChainId(transaction['chainId']);
52
+ if (chainId === undefined)
53
+ throw new RpcResponse.InvalidParamsError({
54
+ message: 'Transaction chainId must be provided before fee payer signing.',
55
+ });
56
+ const envelope = TxEnvelopeTempo.from(prepared);
57
+ const signPayload = TxEnvelopeTempo.getFeePayerSignPayload(envelope, { sender: prepared.from });
58
+ const feePayerSignature = Signature.from(await account.sign({ hash: signPayload }));
59
+ // Awaited before the signature leaves the relay: a fill-signed envelope can
60
+ // broadcast anywhere (even directly to a node), so the commitment records as
61
+ // an intent — no transaction hash until the sender signs.
62
+ const feeToken = transaction['feeToken'];
63
+ await options.onSponsored?.({
64
+ chainId,
65
+ ...(feeToken ? { feeToken } : {}),
66
+ method: 'eth_fillTransaction',
67
+ sender: prepared.from,
68
+ signPayload,
69
+ transaction: TxEnvelopeTempo.serialize(envelope, { feePayerSignature }),
70
+ });
71
+ return { ...prepared, feePayerSignature };
72
+ }
73
+ /** Handles `eth_signRawTransaction` and broadcast methods for sponsored Tempo transactions. */
74
+ export async function handleRawTransaction(options) {
75
+ const { account, feeToken: sponsorFeeToken, getClient, method, request, validate } = options;
76
+ const serialized = request.params?.[0];
77
+ if (!Utils.isSerializedTempoTransaction(serialized))
78
+ throw new RpcResponse.InvalidParamsError({
79
+ message: 'Only Tempo (0x76/0x78) transactions are supported.',
80
+ });
81
+ const transaction = Transaction.deserialize(serialized);
82
+ // Prefer sender recovered from raw envelope; multisig finalize path supplies fallback sender.
83
+ const sender = transaction.from ?? options.sender;
84
+ // Sponsorship only applies after sender has signed original transaction.
85
+ if (!transaction.signature || !sender)
86
+ throw new RpcResponse.InvalidParamsError({
87
+ message: 'Transaction must be signed by the sender before fee payer signing.',
88
+ });
89
+ if (!account.sign)
90
+ throw new Error('Fee payer account cannot sign transactions.');
91
+ const client = getClient(transaction.chainId);
92
+ const feeToken_chain = client.chain?.feeToken;
93
+ const feeToken = transaction.feeToken ??
94
+ sponsorFeeToken ??
95
+ (await options.getFeeToken?.(transaction.chainId)) ??
96
+ feeToken_chain;
97
+ const transaction_sponsored = feeToken ? { ...transaction, feeToken } : transaction;
98
+ if (validate && !(await validate(transaction_sponsored)))
99
+ throw new RpcResponse.InvalidParamsError({
100
+ message: 'Sponsorship rejected.',
101
+ });
102
+ const envelope = TxEnvelopeTempo.from(transaction_sponsored);
103
+ const signPayload = TxEnvelopeTempo.getFeePayerSignPayload(envelope, { sender });
104
+ const feePayerSignature = Signature.from(await account.sign({ hash: signPayload }));
105
+ const serializedTransaction = TxEnvelopeTempo.serialize(envelope, {
106
+ feePayerSignature,
107
+ signature: transaction.signature,
108
+ });
109
+ // Awaited before any broadcast so a recording failure refuses sponsorship —
110
+ // no sponsored transaction ever reaches the chain unrecorded.
111
+ await options.onSponsored?.({
112
+ chainId: transaction.chainId,
113
+ ...(feeToken ? { feeToken } : {}),
114
+ method,
115
+ sender,
116
+ signPayload,
117
+ transaction: serializedTransaction,
118
+ transactionHash: Hash.keccak256(serializedTransaction),
119
+ });
120
+ // Raw-sign requests stop after fee-payer signature is added; send methods broadcast it.
121
+ if (method === 'eth_signRawTransaction')
122
+ return serializedTransaction;
123
+ return await client.request({
124
+ method: method,
125
+ params: [serializedTransaction],
126
+ });
127
+ }
128
+ //# sourceMappingURL=sponsorship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sponsorship.js","sourceRoot":"","sources":["../../../src/handlers/internal/sponsorship.ts"],"names":[],"mappings":"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"}