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
@@ -1,49 +1,38 @@
1
1
  import type { Context } from 'hono'
2
2
 
3
+ import * as TestApp from '../../test/App.js'
3
4
  import type * as App from '../App.js'
4
- import * as Store from './Store.js'
5
+ import * as Db from '../db/Db.js'
6
+ import * as core_VerifiedTokens from '../db/tables/verifiedTokens.js'
5
7
  import * as VerifiedTokens from './VerifiedTokens.js'
6
8
 
7
- // Seeds a store with the documented head + versioned blob layout for a
8
- // chain so `read`/`snapshot` can load it.
9
+ // Publishes a list at an explicit version so `read`/`snapshot` can load it
10
+ // (the write API generates monotonic versions; tests pin readable ones). Skips
11
+ // a matching version so vitest retries on a shared db stay idempotent.
9
12
  async function seed(
10
- store: Store.State,
13
+ db: Db.Db,
11
14
  chainId: number,
12
15
  version: string,
13
16
  list: readonly VerifiedTokens.Token[],
14
17
  ) {
15
- const updatedAt = '2024-01-01T00:00:00.000Z'
16
- await store.put(
17
- `verified-token:v1:${chainId}:snapshot:${version}`,
18
- JSON.stringify({ chainId, schema: 1, tokens: list, updatedAt, version }),
19
- )
20
- await store.put(
21
- `verified-token:v1:${chainId}:head`,
22
- JSON.stringify({ chainId, count: list.length, schema: 1, updatedAt, version }),
23
- )
18
+ if ((await core_VerifiedTokens.head(db, chainId))?.version === version) return
19
+ await core_VerifiedTokens.publish(db, chainId, {
20
+ tokens: list,
21
+ updatedAt: '2024-01-01T00:00:00.000Z',
22
+ version,
23
+ })
24
24
  }
25
25
 
26
- // Store wrapper that counts `get` calls per key prefix so tests can assert the
27
- // hot path does zero (fresh) or head-only (soft-stale) I/O.
28
- function counting(store: Store.State) {
29
- const counts = { head: 0, snapshot: 0 }
30
- return {
31
- counts,
32
- store: Store.from({
33
- ...store,
34
- get(key: string) {
35
- if (key.endsWith(':head')) counts.head++
36
- else if (key.includes(':snapshot:')) counts.snapshot++
37
- return store.get(key)
38
- },
39
- }),
40
- }
41
- }
26
+ // A database whose every query fails (nothing listens on port 1), proving a
27
+ // code path performed zero database I/O when a test passes with it.
28
+ const unreachable = () =>
29
+ Db.postgres({ connectionString: 'postgresql://postgres:postgres@127.0.0.1:1/none' })
42
30
 
43
- // Minimal context that returns a verified-tokens feature config (or none).
44
- function context(config?: App.create.VerifiedTokens): Context<App.Environment> {
31
+ // Minimal context serving the verified-tokens feature config and the app db
32
+ // (both the fresh and cached bindings, as `App.create` sets them).
33
+ function context(db: Db.Db, config?: App.data.VerifiedTokens): Context<App.Environment> {
45
34
  return {
46
- get: (key: string) => (key === 'verifiedTokens' ? config : undefined),
35
+ get: (key: string) => (key === 'verifiedTokens' ? (config ?? {}) : key === 'db' || key === 'dbCached' ? db : undefined), // prettier-ignore
47
36
  } as unknown as Context<App.Environment>
48
37
  }
49
38
 
@@ -111,14 +100,14 @@ describe('compile', () => {
111
100
  })
112
101
 
113
102
  describe('read', () => {
114
- test('returns null when the chain has no head', async () => {
115
- expect(await VerifiedTokens.read(Store.memory(), 4217)).toBe(null)
103
+ test('returns null when the chain has no list', async () => {
104
+ expect(await VerifiedTokens.read(TestApp.database(), 4217)).toBe(null)
116
105
  })
117
106
 
118
- test('compiles the snapshot the head points at', async () => {
119
- const store = Store.memory()
120
- await seed(store, 4217, 'v1', tokens)
121
- const snapshot = await VerifiedTokens.read(store, 4217)
107
+ test('compiles the latest snapshot', async () => {
108
+ const db = TestApp.database()
109
+ await seed(db, 4217, 'v1', tokens)
110
+ const snapshot = await VerifiedTokens.read(db, 4217)
122
111
  expect(snapshot?.version).toBe('v1')
123
112
  expect(snapshot?.list.map((token) => token.symbol)).toMatchInlineSnapshot(`
124
113
  [
@@ -129,21 +118,13 @@ describe('read', () => {
129
118
  `)
130
119
  })
131
120
 
132
- test('throws when the head points at a missing snapshot blob', async () => {
133
- const store = Store.memory()
134
- await store.put(
135
- 'verified-token:v1:4217:head',
136
- JSON.stringify({
137
- chainId: 4217,
138
- count: 0,
139
- schema: 1,
140
- updatedAt: '2024-01-01T00:00:00.000Z',
141
- version: 'ghost',
142
- }),
143
- )
144
- await expect(VerifiedTokens.read(store, 4217)).rejects.toThrowErrorMatchingInlineSnapshot(
145
- `[VerifiedTokens.TornStateError: verified-token head for chain 4217 points at missing snapshot version "ghost".]`,
146
- )
121
+ test('serves the latest publish as the head', async () => {
122
+ const db = TestApp.database()
123
+ await seed(db, 4217, 'v1', tokens)
124
+ await seed(db, 4217, 'v2', tokens.slice(0, 1))
125
+ const snapshot = await VerifiedTokens.read(db, 4217)
126
+ expect(snapshot?.version).toBe('v2')
127
+ expect(snapshot?.list.map((token) => token.symbol)).toEqual(['aUSD'])
147
128
  })
148
129
  })
149
130
 
@@ -157,51 +138,54 @@ describe('snapshot', () => {
157
138
  expect(snapshot.list).toEqual([])
158
139
  })
159
140
 
160
- // The following cases run in order and share the module-level per-isolate cache
161
- // for chain 42431: cold load → fresh → soft-stale unchanged → soft-stale changed.
162
- test('cold-loads from the store when a head exists', async () => {
163
- const store = Store.memory()
164
- await seed(store, 42431, 'v1', tokens)
165
- const snapshot = await VerifiedTokens.snapshot(context({ store }), 42431)
141
+ // The following cases run in order and share the module-level per-isolate
142
+ // cache for chain 42431 (and one seeded db): cold load → fresh → soft-stale
143
+ // unchanged soft-stale changed.
144
+ const db = TestApp.database()
145
+
146
+ test('cold-loads from the database when a list exists', async () => {
147
+ await seed(db, 42431, 'v1', tokens)
148
+ const snapshot = await VerifiedTokens.snapshot(context(db), 42431)
166
149
  expect(snapshot.version).toBe('v1')
167
150
  expect(snapshot.byAddress.size).toBe(tokens.length)
168
151
  })
169
152
 
170
- test('serves fresh lookups with zero store I/O', async () => {
171
- const { counts, store } = counting(Store.memory())
172
- const snapshot = await VerifiedTokens.snapshot(context({ refreshMs: 60_000, store }), 42431)
153
+ test('serves fresh lookups with zero database I/O', async () => {
154
+ // Every query against this db fails, so a pass proves the fresh window
155
+ // never touched the database.
156
+ const snapshot = await VerifiedTokens.snapshot(
157
+ context(unreachable(), { refreshMs: 60_000 }),
158
+ 42431,
159
+ )
173
160
  expect(snapshot.version).toBe('v1')
174
- expect(counts).toEqual({ head: 0, snapshot: 0 })
175
161
  })
176
162
 
177
- test('soft-stale reads only the head when the version is unchanged', async () => {
178
- const base = Store.memory()
179
- await seed(base, 42431, 'v1', tokens)
180
- const { counts, store } = counting(base)
163
+ test('soft-stale keeps serving an unchanged version', async () => {
181
164
  // refreshMs 0 forces the soft-stale path; the current snapshot is returned
182
165
  // immediately and the head-only refresh runs in the background.
183
- const snapshot = await VerifiedTokens.snapshot(context({ refreshMs: 0, store }), 42431)
166
+ const snapshot = await VerifiedTokens.snapshot(context(db, { refreshMs: 0 }), 42431)
184
167
  expect(snapshot.version).toBe('v1')
185
168
  await flush()
186
- expect(counts).toEqual({ head: 1, snapshot: 0 })
187
169
  })
188
170
 
189
171
  test('soft-stale recompiles when the version changed', async () => {
190
- const store = Store.memory()
191
- await seed(store, 42431, 'v2', tokens.slice(0, 1))
172
+ await seed(db, 42431, 'v2', tokens.slice(0, 1))
192
173
  // Stale call returns the existing v1 immediately, refreshes to v2 in background.
193
- const stale = await VerifiedTokens.snapshot(context({ refreshMs: 0, store }), 42431)
174
+ const stale = await VerifiedTokens.snapshot(context(db, { refreshMs: 0 }), 42431)
194
175
  expect(stale.version).toBe('v1')
195
- await flush()
196
- // Next call sees the refreshed cell (fresh window) and returns v2.
197
- const fresh = await VerifiedTokens.snapshot(context({ refreshMs: 60_000, store }), 42431)
198
- expect(fresh.version).toBe('v2')
176
+ // The refresh round-trips Postgres, so poll the (fresh-window, zero-I/O)
177
+ // cell until it lands rather than racing a single macrotask.
178
+ await vi.waitFor(async () => {
179
+ const fresh = await VerifiedTokens.snapshot(context(db, { refreshMs: 60_000 }), 42431)
180
+ expect(fresh.version).toBe('v2')
181
+ })
182
+ const fresh = await VerifiedTokens.snapshot(context(db, { refreshMs: 60_000 }), 42431)
199
183
  expect(fresh.list.map((token) => token.symbol)).toEqual(['aUSD'])
200
184
  })
201
185
 
202
- test('cold-loads an empty snapshot when the store has no head', async () => {
203
- // Chain 4217 has no configured cell yet and an empty store → empty snapshot.
204
- const snapshot = await VerifiedTokens.snapshot(context({ store: Store.memory() }), 4217)
186
+ test('cold-loads an empty snapshot when the chain has no rows', async () => {
187
+ // Chain 4217 has no configured cell yet and an empty database → empty snapshot.
188
+ const snapshot = await VerifiedTokens.snapshot(context(TestApp.database()), 4217)
205
189
  expect(snapshot.version).toBe('empty')
206
190
  expect(snapshot.list).toEqual([])
207
191
  })
@@ -217,9 +201,9 @@ const newToken = {
217
201
 
218
202
  describe('replace', () => {
219
203
  test('publishes the list and round-trips through read', async () => {
220
- const store = Store.memory()
221
- const { snapshot } = await VerifiedTokens.replace(store, 42431, tokens)
222
- const read = await VerifiedTokens.read(store, 42431)
204
+ const db = TestApp.database()
205
+ const { snapshot } = await VerifiedTokens.replace(db, 42431, tokens)
206
+ const read = await VerifiedTokens.read(db, 42431)
223
207
  expect(read?.version).toBe(snapshot.version)
224
208
  expect(read?.list.map((token) => token.symbol)).toEqual(['aUSD', 'bEUR', 'cUSD'])
225
209
  // Addresses are normalized to lowercase on write.
@@ -227,16 +211,16 @@ describe('replace', () => {
227
211
  })
228
212
 
229
213
  test('advances the head version on each publish', async () => {
230
- const store = Store.memory()
231
- const first = await VerifiedTokens.replace(store, 42431, tokens)
232
- const second = await VerifiedTokens.replace(store, 42431, tokens.slice(0, 1))
214
+ const db = TestApp.database()
215
+ const first = await VerifiedTokens.replace(db, 42431, tokens)
216
+ const second = await VerifiedTokens.replace(db, 42431, tokens.slice(0, 1))
233
217
  expect(second.snapshot.version > first.snapshot.version).toBe(true)
234
218
  })
235
219
 
236
220
  test('rejects a duplicate address in the input', async () => {
237
- const store = Store.memory()
221
+ const db = TestApp.database()
238
222
  await expect(
239
- VerifiedTokens.replace(store, 42431, [tokens[0]!, tokens[0]!]),
223
+ VerifiedTokens.replace(db, 42431, [tokens[0]!, tokens[0]!]),
240
224
  ).rejects.toThrowErrorMatchingInlineSnapshot(
241
225
  `[VerifiedTokens.DuplicateAddressError: verified token 0xaaa0000000000000000000000000000000000001 already exists on chain 42431.]`,
242
226
  )
@@ -245,35 +229,35 @@ describe('replace', () => {
245
229
 
246
230
  describe('create', () => {
247
231
  test('appends a token preserving order', async () => {
248
- const store = Store.memory()
249
- await VerifiedTokens.replace(store, 42431, tokens)
250
- const { snapshot, token } = await VerifiedTokens.create(store, { ...newToken, chainId: 42431 })
232
+ const db = TestApp.database()
233
+ await VerifiedTokens.replace(db, 42431, tokens)
234
+ const { snapshot, token } = await VerifiedTokens.create(db, { ...newToken, chainId: 42431 })
251
235
  expect(token.address).toBe('0xddd0000000000000000000000000000000000004')
252
236
  expect(snapshot.list.map((t) => t.symbol)).toEqual(['aUSD', 'bEUR', 'cUSD', 'dGBP'])
253
237
  })
254
238
 
255
239
  test('rejects a duplicate address', async () => {
256
- const store = Store.memory()
257
- await VerifiedTokens.replace(store, 42431, tokens)
258
- await expect(
259
- VerifiedTokens.create(store, { ...tokens[0]!, chainId: 42431 }),
260
- ).rejects.toThrowError(VerifiedTokens.DuplicateAddressError)
240
+ const db = TestApp.database()
241
+ await VerifiedTokens.replace(db, 42431, tokens)
242
+ await expect(VerifiedTokens.create(db, { ...tokens[0]!, chainId: 42431 })).rejects.toThrowError(
243
+ VerifiedTokens.DuplicateAddressError,
244
+ )
261
245
  })
262
246
 
263
247
  test('rejects a case-insensitive duplicate symbol', async () => {
264
- const store = Store.memory()
265
- await VerifiedTokens.replace(store, 42431, tokens)
248
+ const db = TestApp.database()
249
+ await VerifiedTokens.replace(db, 42431, tokens)
266
250
  await expect(
267
- VerifiedTokens.create(store, { ...newToken, chainId: 42431, symbol: 'AUSD' }),
251
+ VerifiedTokens.create(db, { ...newToken, chainId: 42431, symbol: 'AUSD' }),
268
252
  ).rejects.toThrowError(VerifiedTokens.DuplicateSymbolError)
269
253
  })
270
254
  })
271
255
 
272
256
  describe('patch', () => {
273
257
  test('edits fields in place, preserving order', async () => {
274
- const store = Store.memory()
275
- await VerifiedTokens.replace(store, 42431, tokens)
276
- const { snapshot, token } = await VerifiedTokens.patch(store, 42431, tokens[1]!.address, {
258
+ const db = TestApp.database()
259
+ await VerifiedTokens.replace(db, 42431, tokens)
260
+ const { snapshot, token } = await VerifiedTokens.patch(db, 42431, tokens[1]!.address, {
277
261
  name: 'Beta Euro',
278
262
  })
279
263
  expect(token.name).toBe('Beta Euro')
@@ -283,35 +267,35 @@ describe('patch', () => {
283
267
  })
284
268
 
285
269
  test('throws NotFoundError for an unknown address', async () => {
286
- const store = Store.memory()
287
- await VerifiedTokens.replace(store, 42431, tokens)
270
+ const db = TestApp.database()
271
+ await VerifiedTokens.replace(db, 42431, tokens)
288
272
  await expect(
289
- VerifiedTokens.patch(store, 42431, newToken.address, { name: 'x' }),
273
+ VerifiedTokens.patch(db, 42431, newToken.address, { name: 'x' }),
290
274
  ).rejects.toThrowError(VerifiedTokens.NotFoundError)
291
275
  })
292
276
 
293
277
  test('rejects an If-Match version mismatch', async () => {
294
- const store = Store.memory()
295
- await VerifiedTokens.replace(store, 42431, tokens)
278
+ const db = TestApp.database()
279
+ await VerifiedTokens.replace(db, 42431, tokens)
296
280
  await expect(
297
- VerifiedTokens.patch(store, 42431, tokens[0]!.address, { name: 'x' }, { ifMatch: 'stale' }),
281
+ VerifiedTokens.patch(db, 42431, tokens[0]!.address, { name: 'x' }, { ifMatch: 'stale' }),
298
282
  ).rejects.toThrowError(VerifiedTokens.VersionMismatchError)
299
283
  })
300
284
  })
301
285
 
302
286
  describe('remove', () => {
303
287
  test('removes a token and publishes', async () => {
304
- const store = Store.memory()
305
- await VerifiedTokens.replace(store, 42431, tokens)
306
- const { snapshot } = await VerifiedTokens.remove(store, 42431, tokens[0]!.address)
288
+ const db = TestApp.database()
289
+ await VerifiedTokens.replace(db, 42431, tokens)
290
+ const { snapshot } = await VerifiedTokens.remove(db, 42431, tokens[0]!.address)
307
291
  expect(snapshot.list.map((t) => t.symbol)).toEqual(['bEUR', 'cUSD'])
308
292
  expect(snapshot.byAddress.has(tokens[0]!.address.toLowerCase())).toBe(false)
309
293
  })
310
294
 
311
295
  test('throws NotFoundError for an unknown address', async () => {
312
- const store = Store.memory()
313
- await VerifiedTokens.replace(store, 42431, tokens)
314
- await expect(VerifiedTokens.remove(store, 42431, newToken.address)).rejects.toThrowError(
296
+ const db = TestApp.database()
297
+ await VerifiedTokens.replace(db, 42431, tokens)
298
+ await expect(VerifiedTokens.remove(db, 42431, newToken.address)).rejects.toThrowError(
315
299
  VerifiedTokens.NotFoundError,
316
300
  )
317
301
  })
@@ -326,8 +310,8 @@ describe('prime', () => {
326
310
  version: 'primed',
327
311
  })
328
312
  VerifiedTokens.prime(42431, primed)
329
- // Within the fresh window the primed snapshot is served with no store read.
330
- const snapshot = await VerifiedTokens.snapshot(context({ refreshMs: 60_000, store: Store.memory() }), 42431) // prettier-ignore
313
+ // Within the fresh window the primed snapshot is served with no database read.
314
+ const snapshot = await VerifiedTokens.snapshot(context(unreachable(), { refreshMs: 60_000 }), 42431) // prettier-ignore
331
315
  expect(snapshot).toBe(primed)
332
316
  })
333
317
  })