tapimo 0.0.0 → 0.0.2

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 (422) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +119 -0
  3. package/dist/ApiKey.d.ts +65 -0
  4. package/dist/ApiKey.d.ts.map +1 -0
  5. package/dist/ApiKey.js +105 -0
  6. package/dist/ApiKey.js.map +1 -0
  7. package/dist/ApiKeySource.d.ts +166 -0
  8. package/dist/ApiKeySource.d.ts.map +1 -0
  9. package/dist/ApiKeySource.js +234 -0
  10. package/dist/ApiKeySource.js.map +1 -0
  11. package/dist/App.d.ts +19317 -0
  12. package/dist/App.d.ts.map +1 -0
  13. package/dist/App.js +612 -0
  14. package/dist/App.js.map +1 -0
  15. package/dist/Assets.d.ts +44 -0
  16. package/dist/Assets.d.ts.map +1 -0
  17. package/dist/Assets.js +23 -0
  18. package/dist/Assets.js.map +1 -0
  19. package/dist/Auth.d.ts +2 -0
  20. package/dist/Auth.d.ts.map +1 -0
  21. package/dist/Auth.js +2 -0
  22. package/dist/Auth.js.map +1 -0
  23. package/dist/Cli.d.ts +21 -0
  24. package/dist/Cli.d.ts.map +1 -0
  25. package/dist/Cli.js +13 -0
  26. package/dist/Cli.js.map +1 -0
  27. package/dist/Client.d.ts +20 -0
  28. package/dist/Client.d.ts.map +1 -0
  29. package/dist/Client.js +24 -0
  30. package/dist/Client.js.map +1 -0
  31. package/dist/Metrics.d.ts +70 -0
  32. package/dist/Metrics.d.ts.map +1 -0
  33. package/dist/Metrics.js +91 -0
  34. package/dist/Metrics.js.map +1 -0
  35. package/dist/Scope.d.ts +35 -0
  36. package/dist/Scope.d.ts.map +1 -0
  37. package/dist/Scope.js +38 -0
  38. package/dist/Scope.js.map +1 -0
  39. package/dist/Webhooks.d.ts +79 -0
  40. package/dist/Webhooks.d.ts.map +1 -0
  41. package/dist/Webhooks.js +107 -0
  42. package/dist/Webhooks.js.map +1 -0
  43. package/dist/admin/Access.d.ts +41 -0
  44. package/dist/admin/Access.d.ts.map +1 -0
  45. package/dist/admin/Access.js +75 -0
  46. package/dist/admin/Access.js.map +1 -0
  47. package/dist/admin/App.d.ts +1221 -0
  48. package/dist/admin/App.d.ts.map +1 -0
  49. package/dist/admin/App.js +113 -0
  50. package/dist/admin/App.js.map +1 -0
  51. package/dist/admin/apps/api-keys.d.ts +209 -0
  52. package/dist/admin/apps/api-keys.d.ts.map +1 -0
  53. package/dist/admin/apps/api-keys.js +129 -0
  54. package/dist/admin/apps/api-keys.js.map +1 -0
  55. package/dist/admin/apps/scopes.d.ts +46 -0
  56. package/dist/admin/apps/scopes.d.ts.map +1 -0
  57. package/dist/admin/apps/scopes.js +41 -0
  58. package/dist/admin/apps/scopes.js.map +1 -0
  59. package/dist/admin/apps/verified-tokens.d.ts +1206 -0
  60. package/dist/admin/apps/verified-tokens.d.ts.map +1 -0
  61. package/dist/admin/apps/verified-tokens.js +485 -0
  62. package/dist/admin/apps/verified-tokens.js.map +1 -0
  63. package/dist/admin/index.d.ts +3 -0
  64. package/dist/admin/index.d.ts.map +1 -0
  65. package/dist/admin/index.js +3 -0
  66. package/dist/admin/index.js.map +1 -0
  67. package/dist/admin/ui.generated.d.ts +11 -0
  68. package/dist/admin/ui.generated.d.ts.map +1 -0
  69. package/dist/admin/ui.generated.js +43 -0
  70. package/dist/admin/ui.generated.js.map +1 -0
  71. package/dist/apps/activities.d.ts +18725 -0
  72. package/dist/apps/activities.d.ts.map +1 -0
  73. package/dist/apps/activities.js +3138 -0
  74. package/dist/apps/activities.js.map +1 -0
  75. package/dist/apps/addresses.d.ts +3662 -0
  76. package/dist/apps/addresses.d.ts.map +1 -0
  77. package/dist/apps/addresses.js +22 -0
  78. package/dist/apps/addresses.js.map +1 -0
  79. package/dist/apps/balances.d.ts +342 -0
  80. package/dist/apps/balances.d.ts.map +1 -0
  81. package/dist/apps/balances.js +393 -0
  82. package/dist/apps/balances.js.map +1 -0
  83. package/dist/apps/blocks.d.ts +931 -0
  84. package/dist/apps/blocks.d.ts.map +1 -0
  85. package/dist/apps/blocks.js +689 -0
  86. package/dist/apps/blocks.js.map +1 -0
  87. package/dist/apps/coingecko.d.ts +1053 -0
  88. package/dist/apps/coingecko.d.ts.map +1 -0
  89. package/dist/apps/coingecko.js +1015 -0
  90. package/dist/apps/coingecko.js.map +1 -0
  91. package/dist/apps/exchanges.d.ts +3000 -0
  92. package/dist/apps/exchanges.d.ts.map +1 -0
  93. package/dist/apps/exchanges.js +3570 -0
  94. package/dist/apps/exchanges.js.map +1 -0
  95. package/dist/apps/fee-amm.d.ts +640 -0
  96. package/dist/apps/fee-amm.d.ts.map +1 -0
  97. package/dist/apps/fee-amm.js +815 -0
  98. package/dist/apps/fee-amm.js.map +1 -0
  99. package/dist/apps/indexer.d.ts +116 -0
  100. package/dist/apps/indexer.d.ts.map +1 -0
  101. package/dist/apps/indexer.js +270 -0
  102. package/dist/apps/indexer.js.map +1 -0
  103. package/dist/apps/receipts.d.ts +1438 -0
  104. package/dist/apps/receipts.d.ts.map +1 -0
  105. package/dist/apps/receipts.js +874 -0
  106. package/dist/apps/receipts.js.map +1 -0
  107. package/dist/apps/rpc.d.ts +173 -0
  108. package/dist/apps/rpc.d.ts.map +1 -0
  109. package/dist/apps/rpc.js +191 -0
  110. package/dist/apps/rpc.js.map +1 -0
  111. package/dist/apps/tokenlist.d.ts +192 -0
  112. package/dist/apps/tokenlist.d.ts.map +1 -0
  113. package/dist/apps/tokenlist.js +153 -0
  114. package/dist/apps/tokenlist.js.map +1 -0
  115. package/dist/apps/tokens.d.ts +2246 -0
  116. package/dist/apps/tokens.d.ts.map +1 -0
  117. package/dist/apps/tokens.js +1789 -0
  118. package/dist/apps/tokens.js.map +1 -0
  119. package/dist/apps/transactions.d.ts +2327 -0
  120. package/dist/apps/transactions.d.ts.map +1 -0
  121. package/dist/apps/transactions.js +975 -0
  122. package/dist/apps/transactions.js.map +1 -0
  123. package/dist/apps/transfers.d.ts +589 -0
  124. package/dist/apps/transfers.d.ts.map +1 -0
  125. package/dist/apps/transfers.js +769 -0
  126. package/dist/apps/transfers.js.map +1 -0
  127. package/dist/apps/verified-tokens.d.ts +544 -0
  128. package/dist/apps/verified-tokens.d.ts.map +1 -0
  129. package/dist/apps/verified-tokens.js +234 -0
  130. package/dist/apps/verified-tokens.js.map +1 -0
  131. package/dist/apps/webhooks.d.ts +7684 -0
  132. package/dist/apps/webhooks.d.ts.map +1 -0
  133. package/dist/apps/webhooks.js +2112 -0
  134. package/dist/apps/webhooks.js.map +1 -0
  135. package/dist/cloudflare.d.ts +32 -0
  136. package/dist/cloudflare.d.ts.map +1 -0
  137. package/dist/cloudflare.js +45 -0
  138. package/dist/cloudflare.js.map +1 -0
  139. package/dist/index.d.ts +16 -0
  140. package/dist/index.d.ts.map +1 -0
  141. package/dist/index.js +16 -0
  142. package/dist/index.js.map +1 -0
  143. package/dist/internal/Auth.d.ts +298 -0
  144. package/dist/internal/Auth.d.ts.map +1 -0
  145. package/dist/internal/Auth.js +618 -0
  146. package/dist/internal/Auth.js.map +1 -0
  147. package/dist/internal/Cache.d.ts +74 -0
  148. package/dist/internal/Cache.d.ts.map +1 -0
  149. package/dist/internal/Cache.js +215 -0
  150. package/dist/internal/Cache.js.map +1 -0
  151. package/dist/internal/Cursor.d.ts +79 -0
  152. package/dist/internal/Cursor.d.ts.map +1 -0
  153. package/dist/internal/Cursor.js +116 -0
  154. package/dist/internal/Cursor.js.map +1 -0
  155. package/dist/internal/EdgeCache.d.ts +59 -0
  156. package/dist/internal/EdgeCache.d.ts.map +1 -0
  157. package/dist/internal/EdgeCache.js +174 -0
  158. package/dist/internal/EdgeCache.js.map +1 -0
  159. package/dist/internal/Log.d.ts +104 -0
  160. package/dist/internal/Log.d.ts.map +1 -0
  161. package/dist/internal/Log.js +118 -0
  162. package/dist/internal/Log.js.map +1 -0
  163. package/dist/internal/MetricSink.d.ts +65 -0
  164. package/dist/internal/MetricSink.d.ts.map +1 -0
  165. package/dist/internal/MetricSink.js +146 -0
  166. package/dist/internal/MetricSink.js.map +1 -0
  167. package/dist/internal/Mpp.d.ts +71 -0
  168. package/dist/internal/Mpp.d.ts.map +1 -0
  169. package/dist/internal/Mpp.js +105 -0
  170. package/dist/internal/Mpp.js.map +1 -0
  171. package/dist/internal/OpenApi.d.ts +313 -0
  172. package/dist/internal/OpenApi.d.ts.map +1 -0
  173. package/dist/internal/OpenApi.fonts.d.ts +2 -0
  174. package/dist/internal/OpenApi.fonts.d.ts.map +1 -0
  175. package/dist/internal/OpenApi.fonts.js +39 -0
  176. package/dist/internal/OpenApi.fonts.js.map +1 -0
  177. package/dist/internal/OpenApi.js +335 -0
  178. package/dist/internal/OpenApi.js.map +1 -0
  179. package/dist/internal/OpenApi.logo.d.ts +6 -0
  180. package/dist/internal/OpenApi.logo.d.ts.map +1 -0
  181. package/dist/internal/OpenApi.logo.js +19 -0
  182. package/dist/internal/OpenApi.logo.js.map +1 -0
  183. package/dist/internal/Path.d.ts +5 -0
  184. package/dist/internal/Path.d.ts.map +1 -0
  185. package/dist/internal/Path.js +16 -0
  186. package/dist/internal/Path.js.map +1 -0
  187. package/dist/internal/RateLimit.d.ts +60 -0
  188. package/dist/internal/RateLimit.d.ts.map +1 -0
  189. package/dist/internal/RateLimit.js +48 -0
  190. package/dist/internal/RateLimit.js.map +1 -0
  191. package/dist/internal/Response.d.ts +132 -0
  192. package/dist/internal/Response.d.ts.map +1 -0
  193. package/dist/internal/Response.js +72 -0
  194. package/dist/internal/Response.js.map +1 -0
  195. package/dist/internal/Schema.d.ts +257 -0
  196. package/dist/internal/Schema.d.ts.map +1 -0
  197. package/dist/internal/Schema.js +360 -0
  198. package/dist/internal/Schema.js.map +1 -0
  199. package/dist/internal/Store.d.ts +204 -0
  200. package/dist/internal/Store.d.ts.map +1 -0
  201. package/dist/internal/Store.js +291 -0
  202. package/dist/internal/Store.js.map +1 -0
  203. package/dist/internal/Tidx.d.ts +120 -0
  204. package/dist/internal/Tidx.d.ts.map +1 -0
  205. package/dist/internal/Tidx.js +156 -0
  206. package/dist/internal/Tidx.js.map +1 -0
  207. package/dist/internal/Timing.d.ts +22 -0
  208. package/dist/internal/Timing.d.ts.map +1 -0
  209. package/dist/internal/Timing.js +32 -0
  210. package/dist/internal/Timing.js.map +1 -0
  211. package/dist/internal/Ttl.d.ts +25 -0
  212. package/dist/internal/Ttl.d.ts.map +1 -0
  213. package/dist/internal/Ttl.js +49 -0
  214. package/dist/internal/Ttl.js.map +1 -0
  215. package/dist/internal/Value.d.ts +47 -0
  216. package/dist/internal/Value.d.ts.map +1 -0
  217. package/dist/internal/Value.js +122 -0
  218. package/dist/internal/Value.js.map +1 -0
  219. package/dist/internal/VerifiedTokens.d.ts +228 -0
  220. package/dist/internal/VerifiedTokens.d.ts.map +1 -0
  221. package/dist/internal/VerifiedTokens.js +450 -0
  222. package/dist/internal/VerifiedTokens.js.map +1 -0
  223. package/dist/internal/Viem.d.ts +2082 -0
  224. package/dist/internal/Viem.d.ts.map +1 -0
  225. package/dist/internal/Viem.js +63 -0
  226. package/dist/internal/Viem.js.map +1 -0
  227. package/dist/internal/WebhookDestination.d.ts +198 -0
  228. package/dist/internal/WebhookDestination.d.ts.map +1 -0
  229. package/dist/internal/WebhookDestination.js +170 -0
  230. package/dist/internal/WebhookDestination.js.map +1 -0
  231. package/dist/internal/Webhooks.d.ts +433 -0
  232. package/dist/internal/Webhooks.d.ts.map +1 -0
  233. package/dist/internal/Webhooks.js +489 -0
  234. package/dist/internal/Webhooks.js.map +1 -0
  235. package/dist/internal/webhookDestinations/betterStack.d.ts +26 -0
  236. package/dist/internal/webhookDestinations/betterStack.d.ts.map +1 -0
  237. package/dist/internal/webhookDestinations/betterStack.js +76 -0
  238. package/dist/internal/webhookDestinations/betterStack.js.map +1 -0
  239. package/dist/internal/webhookDestinations/slack.d.ts +59 -0
  240. package/dist/internal/webhookDestinations/slack.d.ts.map +1 -0
  241. package/dist/internal/webhookDestinations/slack.js +422 -0
  242. package/dist/internal/webhookDestinations/slack.js.map +1 -0
  243. package/dist/internal/webhookDestinations/url.d.ts +17 -0
  244. package/dist/internal/webhookDestinations/url.d.ts.map +1 -0
  245. package/dist/internal/webhookDestinations/url.js +130 -0
  246. package/dist/internal/webhookDestinations/url.js.map +1 -0
  247. package/dist/openrpc.json +5302 -0
  248. package/package.json +46 -4
  249. package/seeds/31318/icons/0x20c0000000000000000000000000000000000000.svg +1 -0
  250. package/seeds/31318/icons/0x20c0000000000000000000000000000000000001.svg +1 -0
  251. package/seeds/31318/icons/0x20c0000000000000000000000000000000000002.svg +1 -0
  252. package/seeds/31318/icons/0x20c0000000000000000000000000000000000003.svg +1 -0
  253. package/seeds/31318/verified-tokens.json +30 -0
  254. package/seeds/4217/icons/0x20c0000000000000000000000000000000000000.svg +25 -0
  255. package/seeds/4217/icons/0x20c000000000000000000000048c8f36df1c9a4a.svg +1 -0
  256. package/seeds/4217/icons/0x20c0000000000000000000000520792dcccccccc.svg +1 -0
  257. package/seeds/4217/icons/0x20c0000000000000000000000a6da882d075a4c3.svg +4 -0
  258. package/seeds/4217/icons/0x20c000000000000000000000111111111e910f0f.svg +30 -0
  259. package/seeds/4217/icons/0x20c00000000000000000000014f22ca97301eb73.svg +1 -0
  260. package/seeds/4217/icons/0x20c0000000000000000000001621e21f71cf12fb.svg +1 -0
  261. package/seeds/4217/icons/0x20c0000000000000000000002f52d5cc21a3207b.svg +1 -0
  262. package/seeds/4217/icons/0x20c0000000000000000000003158081efd85bfc2.svg +11 -0
  263. package/seeds/4217/icons/0x20c0000000000000000000003554d28269e0f3c2.svg +1 -0
  264. package/seeds/4217/icons/0x20c000000000000000000000383a23bacb546ab9.svg +1 -0
  265. package/seeds/4217/icons/0x20c00000000000000000000042109aef2f8b28e1.png +0 -0
  266. package/seeds/4217/icons/0x20c0000000000000000000005c0bac7cef389a11.svg +1 -0
  267. package/seeds/4217/icons/0x20c0000000000000000000006fd9a167923ba194.png +0 -0
  268. package/seeds/4217/icons/0x20c0000000000000000000007f7ba549dd0251b9.svg +1 -0
  269. package/seeds/4217/icons/0x20c0000000000000000000008191667423f70e67.svg +5 -0
  270. package/seeds/4217/icons/0x20c0000000000000000000008ee4fcff88888888.svg +1 -0
  271. package/seeds/4217/icons/0x20c0000000000000000000009a4a4b17e0dc6651.svg +1 -0
  272. package/seeds/4217/icons/0x20c000000000000000000000ab02d39df30bd17e.svg +1 -0
  273. package/seeds/4217/icons/0x20c000000000000000000000ae247a1130450f09.svg +1 -0
  274. package/seeds/4217/icons/0x20c000000000000000000000aeed2ec36a54d0e5.svg +1 -0
  275. package/seeds/4217/icons/0x20c000000000000000000000b9537d11c60e8b50.svg +1 -0
  276. package/seeds/4217/icons/0x20c000000000000000000000bd95bfb69fbe6ce3.svg +1 -0
  277. package/seeds/4217/icons/0x20c000000000000000000000c412ec89d0c08be5.svg +1 -0
  278. package/seeds/4217/icons/0x20c000000000000000000000f047dd7018e50367.png +0 -0
  279. package/seeds/4217/verified-tokens.json +177 -0
  280. package/seeds/42431/icons/0x20c0000000000000000000000000000000000000.svg +25 -0
  281. package/seeds/42431/icons/0x20c0000000000000000000000000000000000001.svg +1 -0
  282. package/seeds/42431/icons/0x20c0000000000000000000000000000000000002.svg +1 -0
  283. package/seeds/42431/icons/0x20c0000000000000000000000000000000000003.svg +1 -0
  284. package/seeds/42431/icons/0x20c0000000000000000000009e8d7eb59b783726.svg +1 -0
  285. package/seeds/42431/icons/0x20c000000000000000000000d72572838bbee59c.svg +1 -0
  286. package/seeds/42431/verified-tokens.json +44 -0
  287. package/seeds/openrpc/README.md +27 -0
  288. package/seeds/openrpc/execution-apis.json +8989 -0
  289. package/src/ApiKey.test.ts +91 -0
  290. package/src/ApiKey.ts +122 -0
  291. package/src/ApiKeySource.test-d.ts +11 -0
  292. package/src/ApiKeySource.test.ts +295 -0
  293. package/src/ApiKeySource.ts +303 -0
  294. package/src/App.test-d.ts +38 -0
  295. package/src/App.test.ts +65927 -0
  296. package/src/App.ts +855 -0
  297. package/src/Assets.ts +58 -0
  298. package/src/Auth.ts +1 -0
  299. package/src/Cli.test.ts +81 -0
  300. package/src/Cli.ts +38 -0
  301. package/src/Client.test-d.ts +1438 -0
  302. package/src/Client.test.ts +134 -0
  303. package/src/Client.ts +45 -0
  304. package/src/Metrics.ts +154 -0
  305. package/src/Scope.ts +50 -0
  306. package/src/Webhooks.test.ts +49 -0
  307. package/src/Webhooks.ts +172 -0
  308. package/src/admin/Access.test.ts +130 -0
  309. package/src/admin/Access.ts +87 -0
  310. package/src/admin/App.test.ts +225 -0
  311. package/src/admin/App.ts +216 -0
  312. package/src/admin/apps/api-keys.test.ts +156 -0
  313. package/src/admin/apps/api-keys.ts +157 -0
  314. package/src/admin/apps/scopes.test.ts +52 -0
  315. package/src/admin/apps/scopes.ts +47 -0
  316. package/src/admin/apps/verified-tokens.test.ts +415 -0
  317. package/src/admin/apps/verified-tokens.ts +566 -0
  318. package/src/admin/index.ts +2 -0
  319. package/src/admin/ui/plugin.ts +135 -0
  320. package/src/admin/ui/src/components/Checkbox.tsx +22 -0
  321. package/src/admin/ui/src/components/Dialog.tsx +32 -0
  322. package/src/admin/ui/src/components/MobileProfile.tsx +31 -0
  323. package/src/admin/ui/src/components/Page.tsx +53 -0
  324. package/src/admin/ui/src/components/TempoLogo.tsx +37 -0
  325. package/src/admin/ui/src/fonts/Pilat-Demi.woff2 +0 -0
  326. package/src/admin/ui/src/fonts/Pilat-Regular.woff2 +0 -0
  327. package/src/admin/ui/src/lib/api-keys.ts +63 -0
  328. package/src/admin/ui/src/lib/client.ts +15 -0
  329. package/src/admin/ui/src/lib/config.ts +57 -0
  330. package/src/admin/ui/src/lib/query-client.ts +26 -0
  331. package/src/admin/ui/src/lib/scopes.ts +25 -0
  332. package/src/admin/ui/src/lib/verified-tokens.ts +89 -0
  333. package/src/admin/ui/src/lib/wagmi.ts +18 -0
  334. package/src/admin/ui/src/routeTree.gen.ts +104 -0
  335. package/src/admin/ui/src/router.tsx +25 -0
  336. package/src/admin/ui/src/routes/__root.tsx +219 -0
  337. package/src/admin/ui/src/routes/api-keys.tsx +329 -0
  338. package/src/admin/ui/src/routes/index.tsx +7 -0
  339. package/src/admin/ui/src/routes/verified-tokens.tsx +331 -0
  340. package/src/admin/ui/src/styles.css +20 -0
  341. package/src/admin/ui/tsconfig.json +16 -0
  342. package/src/admin/ui/vite.config.ts +29 -0
  343. package/src/admin/ui.generated.ts +60 -0
  344. package/src/apps/activities.test.ts +1020 -0
  345. package/src/apps/activities.ts +3934 -0
  346. package/src/apps/addresses.ts +24 -0
  347. package/src/apps/balances.test.ts +274 -0
  348. package/src/apps/balances.ts +533 -0
  349. package/src/apps/blocks.test.ts +385 -0
  350. package/src/apps/blocks.ts +896 -0
  351. package/src/apps/coingecko.test.ts +218 -0
  352. package/src/apps/coingecko.ts +1383 -0
  353. package/src/apps/exchanges.test.ts +958 -0
  354. package/src/apps/exchanges.ts +4773 -0
  355. package/src/apps/fee-amm.test.ts +321 -0
  356. package/src/apps/fee-amm.ts +1121 -0
  357. package/src/apps/indexer.test.ts +153 -0
  358. package/src/apps/indexer.ts +330 -0
  359. package/src/apps/receipts.test.ts +285 -0
  360. package/src/apps/receipts.ts +1193 -0
  361. package/src/apps/rpc.test.ts +302 -0
  362. package/src/apps/rpc.ts +222 -0
  363. package/src/apps/tokenlist.test.ts +80 -0
  364. package/src/apps/tokenlist.ts +207 -0
  365. package/src/apps/tokens.test.ts +1062 -0
  366. package/src/apps/tokens.ts +2292 -0
  367. package/src/apps/transactions.test.ts +408 -0
  368. package/src/apps/transactions.ts +1363 -0
  369. package/src/apps/transfers.test.ts +371 -0
  370. package/src/apps/transfers.ts +1116 -0
  371. package/src/apps/verified-tokens.test.ts +114 -0
  372. package/src/apps/verified-tokens.ts +295 -0
  373. package/src/apps/webhooks.test.ts +1937 -0
  374. package/src/apps/webhooks.ts +2926 -0
  375. package/src/cloudflare.ts +55 -0
  376. package/src/index.ts +15 -0
  377. package/src/internal/Auth.test.ts +980 -0
  378. package/src/internal/Auth.ts +1012 -0
  379. package/src/internal/Cache.test.ts +240 -0
  380. package/src/internal/Cache.ts +262 -0
  381. package/src/internal/Cursor.test.ts +100 -0
  382. package/src/internal/Cursor.ts +149 -0
  383. package/src/internal/EdgeCache.test.ts +234 -0
  384. package/src/internal/EdgeCache.ts +224 -0
  385. package/src/internal/Errors.ts +14 -0
  386. package/src/internal/Log.test.ts +244 -0
  387. package/src/internal/Log.ts +216 -0
  388. package/src/internal/MetricSink.ts +220 -0
  389. package/src/internal/Mpp.test.ts +64 -0
  390. package/src/internal/Mpp.ts +141 -0
  391. package/src/internal/OpenApi.fonts.ts +38 -0
  392. package/src/internal/OpenApi.logo.ts +18 -0
  393. package/src/internal/OpenApi.ts +488 -0
  394. package/src/internal/Path.test.ts +14 -0
  395. package/src/internal/Path.ts +15 -0
  396. package/src/internal/RateLimit.test.ts +93 -0
  397. package/src/internal/RateLimit.ts +93 -0
  398. package/src/internal/Response.ts +131 -0
  399. package/src/internal/Schema.test.ts +34 -0
  400. package/src/internal/Schema.ts +523 -0
  401. package/src/internal/Store.test.ts +545 -0
  402. package/src/internal/Store.ts +526 -0
  403. package/src/internal/Tidx.local.test.ts +33 -0
  404. package/src/internal/Tidx.test.ts +294 -0
  405. package/src/internal/Tidx.ts +238 -0
  406. package/src/internal/Timing.test.ts +22 -0
  407. package/src/internal/Timing.ts +62 -0
  408. package/src/internal/Ttl.test.ts +18 -0
  409. package/src/internal/Ttl.ts +59 -0
  410. package/src/internal/Value.ts +114 -0
  411. package/src/internal/VerifiedTokens.test.ts +333 -0
  412. package/src/internal/VerifiedTokens.ts +645 -0
  413. package/src/internal/Viem.test.ts +115 -0
  414. package/src/internal/Viem.ts +165 -0
  415. package/src/internal/WebhookDestination.test.ts +648 -0
  416. package/src/internal/WebhookDestination.ts +331 -0
  417. package/src/internal/Webhooks.test.ts +668 -0
  418. package/src/internal/Webhooks.ts +940 -0
  419. package/src/internal/webhookDestinations/betterStack.ts +91 -0
  420. package/src/internal/webhookDestinations/slack.ts +496 -0
  421. package/src/internal/webhookDestinations/url.ts +128 -0
  422. package/src/openrpc.json +5302 -0
@@ -0,0 +1,618 @@
1
+ import { createMiddleware } from 'hono/factory';
2
+ import { matchedRoutes } from 'hono/route';
3
+ import { findTargetHandler } from 'hono/utils/handler';
4
+ import { Credential } from 'mppx';
5
+ import { Mppx, tempo } from 'mppx/hono';
6
+ import * as ApiKeySource from '../ApiKeySource.js';
7
+ import * as ApiKey from '../ApiKey.js';
8
+ import * as OpenApi from './OpenApi.js';
9
+ import * as RateLimit from './RateLimit.js';
10
+ import * as Response from './Response.js';
11
+ import * as Schema from './Schema.js';
12
+ import * as Scope from '../Scope.js';
13
+ import * as Viem from './Viem.js';
14
+ const policySymbol = Symbol('tempo-api.auth.policy');
15
+ /** Reads the authenticated principal from a Hono context. */
16
+ export function getPrincipal(c) {
17
+ return c.get('principal') ?? null;
18
+ }
19
+ /**
20
+ * Always false at runtime, but typed as `boolean` so handlers can include a
21
+ * never-reached access-error branch in Hono's inferred response union.
22
+ */
23
+ export const narrowAccess = false;
24
+ /** Typed auth/payment error response for Hono client inference. Never reached at runtime. */
25
+ export function accessError(c) {
26
+ const status = Number(c.req.header('tempo-narrow-access-status'));
27
+ if (status === 400)
28
+ return Response.error(c, {
29
+ code: 'api_key_malformed',
30
+ message: 'Malformed API key',
31
+ status: 400,
32
+ });
33
+ if (status === 401) {
34
+ const code = c.req.header('tempo-narrow-access-code') === 'api_key_missing'
35
+ ? 'api_key_missing'
36
+ : 'api_key_invalid';
37
+ return Response.error(c, {
38
+ code,
39
+ message: 'Missing or invalid API key',
40
+ status: 401,
41
+ });
42
+ }
43
+ if (status === 403)
44
+ return Response.error(c, {
45
+ code: 'api_key_forbidden',
46
+ message: 'API key missing required scope',
47
+ status: 403,
48
+ });
49
+ const code = c.req.header('tempo-narrow-access-code') === 'rate_limit_exceeded'
50
+ ? 'rate_limit_exceeded'
51
+ : 'payment_required';
52
+ return Response.error(c, {
53
+ code,
54
+ message: 'Payment required or rate limit exceeded',
55
+ status: 429,
56
+ });
57
+ }
58
+ /** Typed auth/payment error response for Hono client inference. Never reached at runtime. */
59
+ export function paidAccessError(c) {
60
+ const status = Number(c.req.header('tempo-narrow-access-status'));
61
+ if (status !== 402)
62
+ return accessError(c);
63
+ // MPP owns the 402 challenge body and headers; it is intentionally not the
64
+ // API's JSON error envelope.
65
+ return c.body(null, 402);
66
+ }
67
+ /** Creates auth middleware for protected OpenAPI routes. */
68
+ export function middleware(options) {
69
+ const { charge = {}, ...mpp } = options.mpp === false ? {} : (options.mpp ?? {});
70
+ const defaults = laneDefaults(options);
71
+ const base = basePolicy(options, defaults);
72
+ // Resolution is cached per isolate by default (positive 60s / negative 10s,
73
+ // keyed by token sha256 — see `ApiKeySource.cached`) so hot keys skip the
74
+ // backend read on the auth path of every request. Pass `apiKey.cache: false`
75
+ // when instant revocation matters more than the per-request read.
76
+ const source = (() => {
77
+ if (options.apiKey === false || !options.apiKey?.source)
78
+ return ApiKeySource.noop;
79
+ if (options.apiKey.cache === false)
80
+ return options.apiKey.source;
81
+ return ApiKeySource.cached(options.apiKey.source, options.apiKey.cache);
82
+ })();
83
+ const auth = {
84
+ ...(options.apiKey === false
85
+ ? {}
86
+ : {
87
+ apiKey: {
88
+ ...(options.apiKey?.rateLimits ? { rateLimits: options.apiKey.rateLimits } : {}),
89
+ source,
90
+ },
91
+ }),
92
+ ...(options.mpp === false
93
+ ? {}
94
+ : {
95
+ mpp: Mppx.create({
96
+ ...mpp,
97
+ methods: [tempo.charge({ amount: '0.001', ...charge })],
98
+ secretKey: mpp.secretKey ?? crypto.randomUUID(),
99
+ }),
100
+ }),
101
+ rateLimit: RateLimit.memory(options.rateLimit),
102
+ };
103
+ return createMiddleware((c, next) => {
104
+ const route = openApiRoute(c);
105
+ if (!route)
106
+ return next();
107
+ const { key, description } = route;
108
+ const overrides = options.overrides;
109
+ const endpointPolicy = resolvePolicy(base, defaults, [...policies(c), overrides?.[key]], description);
110
+ if (!endpointPolicy)
111
+ return next();
112
+ c.set('auth', auth);
113
+ return require(endpointPolicy)(c, next);
114
+ });
115
+ }
116
+ /** Creates route middleware that contributes an auth policy override. */
117
+ export function policy(options) {
118
+ const middleware = createMiddleware((_, next) => next());
119
+ middleware[policySymbol] = options;
120
+ return middleware;
121
+ }
122
+ function laneDefaults(options) {
123
+ const apiKey = options.apiKey === false ? undefined : options.apiKey;
124
+ const public_ = options.public === false ? undefined : options.public;
125
+ return {
126
+ apiKey: {
127
+ // `rateLimit` is intentionally omitted: `policy.apiKey.rateLimit` means an
128
+ // explicit per-route cap (precedence tier 2), not the config default. The
129
+ // config default (tier 5) lives on `auth.apiKey.rateLimits['*']` and is
130
+ // applied by `resolveApiKeyLimit` at consume time.
131
+ //
132
+ // Default-closed to a full-access key: a route that declares no scopes
133
+ // requires the `'*'` wildcard, so a narrowly-scoped key only reaches
134
+ // routes that explicitly grant its scope. Routes opt into specific
135
+ // catalog scopes via `Auth.policy`.
136
+ scopes: apiKey?.scopes ?? [Scope.wildcard],
137
+ },
138
+ mpp: { charge: {} },
139
+ public: { rateLimit: public_?.rateLimit ?? { perMinute: 60 } },
140
+ };
141
+ }
142
+ /**
143
+ * Base policy before route overrides. Default-closed except the API-key lane:
144
+ * a route that declares nothing is API-key-only, and must opt into the public
145
+ * and paid lanes explicitly. This makes a partial override fail safe — omitting
146
+ * a lane leaves it closed rather than silently inheriting open access.
147
+ */
148
+ function basePolicy(options, defaults) {
149
+ return options.apiKey === false ? {} : { apiKey: defaults.apiKey };
150
+ }
151
+ function resolvePolicy(base, defaults, overrides, description) {
152
+ let apiKey = base.apiKey;
153
+ let mpp = base.mpp;
154
+ let public_ = base.public;
155
+ for (const override of overrides) {
156
+ if (override === false)
157
+ return undefined;
158
+ if (!override)
159
+ continue;
160
+ apiKey = resolveApiKeyLane(apiKey, override.apiKey, defaults.apiKey);
161
+ mpp = resolveMppLane(mpp, override.mpp, defaults.mpp);
162
+ public_ = resolvePublicLane(public_, override.public, defaults.public);
163
+ }
164
+ // The OpenAPI summary/description rides along as the payment-challenge
165
+ // description. It is metadata, not a policy override, so it only applies when
166
+ // the paid lane is actually enabled and has no explicit description already.
167
+ if (mpp && description !== undefined && mpp.charge.description === undefined)
168
+ mpp = { charge: { ...mpp.charge, description } };
169
+ if (!apiKey && !mpp && !public_)
170
+ return undefined;
171
+ return {
172
+ ...(apiKey ? { apiKey } : {}),
173
+ ...(mpp ? { mpp } : {}),
174
+ ...(public_ ? { public: public_ } : {}),
175
+ };
176
+ }
177
+ function resolveApiKeyLane(current, override, default_) {
178
+ if (override === undefined)
179
+ return current;
180
+ if (override === false)
181
+ return undefined;
182
+ if (override === true)
183
+ return current ?? default_;
184
+ const base = current ?? default_;
185
+ return {
186
+ rateLimit: override.rateLimit ?? base.rateLimit,
187
+ scopes: override.scopes ?? base.scopes,
188
+ };
189
+ }
190
+ function resolveMppLane(current, override, default_) {
191
+ if (override === undefined)
192
+ return current;
193
+ if (override === false)
194
+ return undefined;
195
+ if (override === true)
196
+ return current ?? default_;
197
+ const base = current ?? default_;
198
+ return { charge: { ...base.charge, ...override.charge } };
199
+ }
200
+ function resolvePublicLane(current, override, default_) {
201
+ if (override === undefined)
202
+ return current;
203
+ if (override === false)
204
+ return undefined;
205
+ if (override === true)
206
+ return current ?? default_;
207
+ const base = current ?? default_;
208
+ return { rateLimit: override.rateLimit ?? base.rateLimit };
209
+ }
210
+ function openApiRoute(c) {
211
+ const route = matchedRoutes(c)
212
+ .slice(c.req.routeIndex + 1)
213
+ .find((route) => !!openApiSpec(route));
214
+ if (!route)
215
+ return undefined;
216
+ const spec = openApiSpec(route);
217
+ if (!spec)
218
+ return undefined;
219
+ const description = typeof spec.summary === 'string' ? spec.summary : spec.description;
220
+ return {
221
+ key: endpointKey(c, route),
222
+ description: typeof description === 'string' ? description : undefined,
223
+ };
224
+ }
225
+ function policies(c) {
226
+ return matchedRoutes(c)
227
+ .slice(c.req.routeIndex + 1)
228
+ .map(policyFromRoute)
229
+ .filter((policy) => policy !== undefined);
230
+ }
231
+ function openApiSpec(route) {
232
+ const handler = findTargetHandler(route.handler);
233
+ const metadata = handler[OpenApi.uniqueSymbol];
234
+ if (!metadata || !('spec' in metadata))
235
+ return undefined;
236
+ return metadata.spec;
237
+ }
238
+ function policyFromRoute(route) {
239
+ const handler = findTargetHandler(route.handler);
240
+ return handler[policySymbol];
241
+ }
242
+ /**
243
+ * Maps each documented operation id to its resolved access lanes by reading the
244
+ * `policy` overrides co-located on the app's routes. This is the single source
245
+ * of truth for per-operation `security` and the `402` response in the generated
246
+ * OpenAPI document (see `App.create`): the API-key lane is default-on, and the
247
+ * public/MPP lanes apply only where a route opts in via {@link policy}.
248
+ */
249
+ export function describeAccess(app) {
250
+ const groups = new Map();
251
+ for (const route of app.routes) {
252
+ const key = `${route.method} ${route.path}`;
253
+ const group = groups.get(key) ?? { overrides: [] };
254
+ const spec = openApiSpec(route);
255
+ if (typeof spec?.operationId === 'string')
256
+ group.operationId = spec.operationId;
257
+ const override = policyFromRoute(route);
258
+ if (override)
259
+ group.overrides.push(override);
260
+ groups.set(key, group);
261
+ }
262
+ const access = {};
263
+ for (const { operationId, overrides } of groups.values()) {
264
+ if (!operationId)
265
+ continue;
266
+ let apiKey = true;
267
+ let scopes = [];
268
+ let public_ = false;
269
+ let mpp = false;
270
+ for (const override of overrides) {
271
+ if (override.apiKey !== undefined)
272
+ apiKey = override.apiKey !== false;
273
+ if (override.apiKey && override.apiKey !== true && override.apiKey.scopes)
274
+ scopes = override.apiKey.scopes;
275
+ if (override.public !== undefined)
276
+ public_ = override.public !== false;
277
+ if (override.mpp !== undefined)
278
+ mpp = override.mpp !== false;
279
+ }
280
+ access[operationId] = { mpp, public: public_, scopes: apiKey ? scopes : [] };
281
+ }
282
+ return access;
283
+ }
284
+ function endpointKey(c, route) {
285
+ return `${route.method.toUpperCase()} ${stripBasePath(normalizeRoutePath(route.path), basePath(c))}`;
286
+ }
287
+ function normalizeRoutePath(path) {
288
+ // Hono stores regex-constrained params as `:name{...}`. Auth overrides use
289
+ // the stable public route shape, e.g. `GET /tokens/:symbol`.
290
+ return path
291
+ .split('/')
292
+ .map((segment) => {
293
+ if (!segment.startsWith(':'))
294
+ return segment;
295
+ const pattern = segment.indexOf('{');
296
+ return pattern === -1 ? segment : segment.slice(0, pattern);
297
+ })
298
+ .join('/');
299
+ }
300
+ function stripBasePath(path, basePath) {
301
+ if (!basePath || basePath === '/')
302
+ return path;
303
+ if (path === basePath)
304
+ return '/';
305
+ if (path.startsWith(`${basePath}/`))
306
+ return path.slice(basePath.length);
307
+ return path;
308
+ }
309
+ function basePath(c) {
310
+ const variables = c.var;
311
+ return typeof variables['basePath'] === 'string' ? variables['basePath'] : undefined;
312
+ }
313
+ /** Requires route access through API key, public quota, or MPP payment. */
314
+ export function require(policy) {
315
+ return createMiddleware(async (c, next) => {
316
+ const auth = c.get('auth');
317
+ const credential = getApiKeyCredential(c);
318
+ // The deprecated `key` query param has now been consumed for auth. Strip it
319
+ // from the request URL so it never reaches a route's query validator —
320
+ // endpoint query schemas are `z.strictObject`, so an unexpected `key`
321
+ // param would otherwise fail validation with `query_invalid`, breaking the
322
+ // legacy `?key=...` lane on every strict-query endpoint.
323
+ stripLegacyAuthQuery(c);
324
+ if (credential === false)
325
+ return jsonError(c, {
326
+ code: 'api_key_malformed',
327
+ message: 'Malformed API key',
328
+ status: 400,
329
+ });
330
+ const hasPayment = hasPaymentCredential(c) && isPaymentEnabled(auth, policy);
331
+ if (credential) {
332
+ const apiKey = await auth.apiKey?.source.resolve(credential.token);
333
+ if (!apiKey)
334
+ return jsonError(c, {
335
+ code: 'api_key_invalid',
336
+ message: 'Invalid API key',
337
+ status: 401,
338
+ });
339
+ // Sandbox keys are restricted to non-mainnet chains. An explicit
340
+ // `chainId` of mainnet makes the key unusable for this request, so it is
341
+ // ignored and the request falls through to the public policy below (as if
342
+ // no key were presented). A request that omits `chainId` is steered to
343
+ // testnet so a sandbox key still "just works" without passing `?chainId`.
344
+ const explicitChain = explicitChainId(c);
345
+ const sandboxOnMainnet = apiKey.environment === 'sandbox' &&
346
+ explicitChain !== undefined &&
347
+ Viem.isMainnet(explicitChain);
348
+ if (!sandboxOnMainnet) {
349
+ if (apiKey.environment === 'sandbox' &&
350
+ explicitChain === undefined &&
351
+ Viem.isMainnet(c.get('chainId') ?? Viem.defaultChainId))
352
+ // `chainId` lives on the app's `Variables`, not the narrower auth
353
+ // contract, so it is read/written through an untyped cast.
354
+ c.set('chainId', Viem.chainId.testnet);
355
+ const principal = principalFromApiKey(apiKey);
356
+ c.set('principal', principal);
357
+ const missing = apiKey.scopes.includes(Scope.wildcard)
358
+ ? []
359
+ : (policy.apiKey?.scopes.filter((scope) => !apiKey.scopes.includes(scope)) ?? []);
360
+ if (missing.length > 0)
361
+ return jsonError(c, {
362
+ code: 'api_key_forbidden',
363
+ message: 'API key missing required scope',
364
+ status: 403,
365
+ });
366
+ if (hasPayment)
367
+ return requirePayment(c, next, {
368
+ auth,
369
+ payment: { reason: 'api_key_over_quota', type: 'mpp' },
370
+ policy,
371
+ principal,
372
+ });
373
+ if (policy.apiKey) {
374
+ // A route consumes exactly one quota bucket: its single required scope,
375
+ // else `'*'` (zero scopes). Routes today require at most one scope; a
376
+ // future multi-scope route buckets against its first scope.
377
+ const scope = policy.apiKey.scopes[0] ?? Scope.wildcard;
378
+ const limit = resolveApiKeyLimit({ apiKey, auth, policy: policy.apiKey, scope });
379
+ const result = await consumeRateLimit(auth, {
380
+ key: `api_key:${apiKey.id}:scope:${scope}`,
381
+ limit,
382
+ });
383
+ if (result) {
384
+ setRateLimitHeaders(c, result);
385
+ // Surface the bucket so callers can correlate a 429 with the exhausted
386
+ // quota. Set before the over-quota branch so it rides the 429 (an MPP
387
+ // 402 challenge is owned by mppx and drops these headers — by design).
388
+ c.header('RateLimit-Scope', scope);
389
+ }
390
+ if (result && !result.allowed)
391
+ return requirePaymentOrRateLimit(c, next, {
392
+ auth,
393
+ payment: { reason: 'api_key_over_quota', type: 'mpp' },
394
+ policy,
395
+ principal,
396
+ rateLimit: result,
397
+ });
398
+ }
399
+ return next();
400
+ }
401
+ }
402
+ const publicPrincipal = principalFromPublic(c);
403
+ if (hasPayment) {
404
+ c.set('principal', publicPrincipal);
405
+ return requirePayment(c, next, {
406
+ auth,
407
+ payment: { reason: 'public_over_quota', type: 'mpp' },
408
+ policy,
409
+ principal: publicPrincipal,
410
+ });
411
+ }
412
+ const limit = policy.public?.rateLimit;
413
+ if (limit) {
414
+ const result = await consumeRateLimit(auth, {
415
+ key: `public:${publicPrincipal.id}`,
416
+ limit,
417
+ });
418
+ if (result)
419
+ setRateLimitHeaders(c, result);
420
+ if (!result || result.allowed) {
421
+ c.set('principal', publicPrincipal);
422
+ return next();
423
+ }
424
+ c.set('principal', publicPrincipal);
425
+ return requirePaymentOrRateLimit(c, next, {
426
+ auth,
427
+ payment: { reason: 'public_over_quota', type: 'mpp' },
428
+ policy,
429
+ principal: publicPrincipal,
430
+ rateLimit: result,
431
+ });
432
+ }
433
+ if (isPaymentEnabled(auth, policy)) {
434
+ c.set('principal', publicPrincipal);
435
+ return requirePayment(c, next, {
436
+ auth,
437
+ payment: { reason: 'public_over_quota', type: 'mpp' },
438
+ policy,
439
+ principal: publicPrincipal,
440
+ });
441
+ }
442
+ return jsonError(c, {
443
+ code: 'api_key_missing',
444
+ message: 'Missing API key',
445
+ status: 401,
446
+ });
447
+ });
448
+ }
449
+ function consumeRateLimit(auth, options) {
450
+ if (!auth.rateLimit)
451
+ return Promise.resolve(null);
452
+ // Fail open: a rate-limit store error (e.g. a lost Durable Object
453
+ // connection) degrades to unenforced quota instead of failing the request.
454
+ return auth.rateLimit.consume(options).catch((error) => {
455
+ console.error('[auth] rate-limit consume failed; failing open', error);
456
+ return null;
457
+ });
458
+ }
459
+ /**
460
+ * Resolves the rate limit for an API-key request against a quota bucket.
461
+ * Most-specific wins: a per-key per-scope grant is the only thing that pierces a
462
+ * route's protective cap; the per-key `'*'` default does not (so a premium key
463
+ * can't silently blow past an expensive endpoint's ceiling). Per-key values live
464
+ * in the optional {@link ApiKey.ApiKey.rateLimits} map and stay `undefined` until a
465
+ * record source populates them, so until then only tiers 2/4/5/6 apply.
466
+ */
467
+ function resolveApiKeyLimit(options) {
468
+ const { apiKey, auth, policy, scope } = options;
469
+ return (apiKey.rateLimits?.[scope] ?? // 1. per-key, per-scope
470
+ policy?.rateLimit ?? // 2. route override (protective cap)
471
+ apiKey.rateLimits?.[Scope.wildcard] ?? // 3. per-key default
472
+ auth.apiKey?.rateLimits?.[scope] ?? // 4. config per-scope
473
+ auth.apiKey?.rateLimits?.[Scope.wildcard] ?? { perMinute: 100 } // 5. config default // 6. hardcoded fallback
474
+ );
475
+ }
476
+ function getApiKeyCredential(c) {
477
+ const header = c.req.header('tempo-api-key');
478
+ if (header)
479
+ return { token: header };
480
+ // `Authorization: Bearer` compatibility fallback. Must not consume or reject
481
+ // `Authorization: Payment` (MPP), which is a distinct credential — a request
482
+ // carrying only a payment scheme falls through to the deprecated lanes below
483
+ // (which find nothing) and resolves to no API-key credential.
484
+ const authorization = c.req.header('authorization');
485
+ if (authorization && !Credential.extractPaymentScheme(authorization)) {
486
+ const match = /^Bearer\s+(.+)$/i.exec(authorization);
487
+ if (!match?.[1])
488
+ return false;
489
+ return { token: match[1] };
490
+ }
491
+ // Deprecated fallbacks carried over from the v1 API so existing integrations
492
+ // keep authenticating: the `x-api-key` header and the `key` query parameter.
493
+ const legacyHeader = c.req.header('x-api-key');
494
+ if (legacyHeader)
495
+ return { token: legacyHeader };
496
+ const legacyQuery = c.req.query('key');
497
+ if (legacyQuery)
498
+ return { token: legacyQuery };
499
+ return null;
500
+ }
501
+ /**
502
+ * Remove the deprecated `key` auth query param from the request URL once it has
503
+ * been read for authentication. Route query schemas are strict
504
+ * (`z.strictObject`), so leaving `key` in the query string would make the
505
+ * downstream validator reject the request as `query_invalid`. Stripping it
506
+ * keeps the legacy `?key=...` auth lane working on strict-query endpoints
507
+ * (e.g. `GET /v1/tokens`).
508
+ */
509
+ function stripLegacyAuthQuery(c) {
510
+ const url = new URL(c.req.url);
511
+ if (!url.searchParams.has('key'))
512
+ return;
513
+ url.searchParams.delete('key');
514
+ c.req.raw = new Request(url, c.req.raw);
515
+ }
516
+ /**
517
+ * Reads an explicit `chainId`/`chain_id` query parameter, normalized to a
518
+ * numeric chain id. Returns `undefined` when absent or malformed (a malformed
519
+ * value falls through to the route's own validation). Mirrors the resolution in
520
+ * `App.create`'s unsupported-chain guard.
521
+ */
522
+ function explicitChainId(c) {
523
+ const raw = c.req.query('chainId') ?? c.req.query('chain_id');
524
+ if (raw === undefined)
525
+ return undefined;
526
+ const parsed = Schema.ChainId.safeParse(raw);
527
+ return parsed.success ? parsed.data : undefined;
528
+ }
529
+ function getRequestId(c) {
530
+ const variables = c.var;
531
+ return typeof variables['requestId'] === 'string' ? variables['requestId'] : undefined;
532
+ }
533
+ function hasPaymentCredential(c) {
534
+ const authorization = c.req.header('authorization');
535
+ if (!authorization)
536
+ return false;
537
+ return !!Credential.extractPaymentScheme(authorization);
538
+ }
539
+ function isPaymentEnabled(auth, policy) {
540
+ return !!auth.mpp && !!policy.mpp;
541
+ }
542
+ function jsonError(c, options) {
543
+ const requestId = getRequestId(c);
544
+ // Auth error envelopes embed per-request state and must not be cached.
545
+ c.header('Cache-Control', 'no-store');
546
+ c.set('errorCode', options.code);
547
+ return c.json({
548
+ error: {
549
+ code: options.code,
550
+ message: options.message,
551
+ },
552
+ ...(requestId === undefined ? {} : { requestId }),
553
+ }, options.status);
554
+ }
555
+ function payer(c) {
556
+ try {
557
+ return Credential.fromRequest(c.req.raw).source;
558
+ }
559
+ catch {
560
+ return undefined;
561
+ }
562
+ }
563
+ function principalFromApiKey(apiKey) {
564
+ return {
565
+ apiKey,
566
+ environment: apiKey.environment,
567
+ id: apiKey.id,
568
+ orgId: apiKey.orgId,
569
+ type: 'api_key',
570
+ };
571
+ }
572
+ function principalFromPublic(c) {
573
+ const forwarded = c.req.header('x-forwarded-for')?.split(',')[0]?.trim();
574
+ return {
575
+ id: c.req.header('cf-connecting-ip') ??
576
+ c.req.header('x-real-ip') ??
577
+ forwarded ??
578
+ c.req.header('x-test-client-ip') ??
579
+ 'anonymous',
580
+ type: 'public',
581
+ };
582
+ }
583
+ async function requirePayment(c, next, options) {
584
+ const middleware = options.auth.mpp?.charge(options.policy.mpp?.charge ?? {});
585
+ if (!middleware)
586
+ return jsonError(c, {
587
+ code: 'payment_required',
588
+ message: 'Payment required',
589
+ status: 429,
590
+ });
591
+ return middleware(c, async () => {
592
+ const payer_ = payer(c);
593
+ c.set('principal', {
594
+ ...options.principal,
595
+ payment: {
596
+ ...options.payment,
597
+ ...(payer_ === undefined ? {} : { payer: payer_ }),
598
+ },
599
+ });
600
+ await next();
601
+ });
602
+ }
603
+ function requirePaymentOrRateLimit(c, next, options) {
604
+ if (isPaymentEnabled(options.auth, options.policy))
605
+ return requirePayment(c, next, options);
606
+ c.header('Retry-After', String(Math.max(options.rateLimit.reset - Math.ceil(Date.now() / 1_000), 1)));
607
+ return jsonError(c, {
608
+ code: 'rate_limit_exceeded',
609
+ message: 'Rate limit exceeded',
610
+ status: 429,
611
+ });
612
+ }
613
+ function setRateLimitHeaders(c, result) {
614
+ c.header('RateLimit-Limit', String(result.limit));
615
+ c.header('RateLimit-Remaining', String(result.remaining));
616
+ c.header('RateLimit-Reset', String(result.reset));
617
+ }
618
+ //# sourceMappingURL=Auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Auth.js","sourceRoot":"","sources":["../../src/internal/Auth.ts"],"names":[],"mappings":"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"}