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,331 @@
1
+ import { Hash, Hex } from 'ox'
2
+
3
+ import type * as Webhooks from './Webhooks.js'
4
+ import * as core_betterStack from './webhookDestinations/betterStack.js'
5
+ import * as core_slack from './webhookDestinations/slack.js'
6
+ import * as core_url from './webhookDestinations/url.js'
7
+
8
+ export { assertBetterstackUrl, betterStack } from './webhookDestinations/betterStack.js'
9
+ export { assertSlackUrl, redactSlackUrl, slack } from './webhookDestinations/slack.js'
10
+ export { assertDeliverableUrl, url } from './webhookDestinations/url.js'
11
+
12
+ /**
13
+ * Where a subscription's matched events are delivered.
14
+ *
15
+ * - `url` — a subscriber HTTPS endpoint; the signed envelope is POSTed verbatim
16
+ * (HMAC in `tempo-signature`).
17
+ * - `slack` — a subscriber-supplied Slack incoming-webhook URL (`hooks.slack.com`).
18
+ * The envelope is formatted into a Slack Block Kit message and POSTed there
19
+ * with no signature (the URL is itself the shared secret). No OAuth.
20
+ * - `betterstack` — a Better Stack Telemetry source: an ingest host URL
21
+ * (`*.betterstackdata.com`) plus a source token. The envelope is POSTed as a
22
+ * structured log event authenticated with `Authorization: Bearer <token>`.
23
+ *
24
+ * A `Destination` is plain, serializable data — it is what a `Subscription`
25
+ * persists. The builders (`from`, `url`, `slack`, `betterStack`) return an
26
+ * {@link Instance}: the same data plus a bound {@link Instance.deliver}. `deliver`
27
+ * is a function property, so an instance serializes and structurally compares as
28
+ * the plain destination it is.
29
+ */
30
+ export type Destination = BetterStack | Slack | Url
31
+
32
+ /** A `url` delivery destination (a signed event POST to an HTTPS endpoint). */
33
+ export type Url = {
34
+ /** Destination kind. */
35
+ type: 'url'
36
+ /** Subscriber callback URL (validated `https`). */
37
+ url: string
38
+ }
39
+
40
+ /** A `slack` delivery destination (a formatted message to an incoming webhook). */
41
+ export type Slack = {
42
+ /** Destination kind. */
43
+ type: 'slack'
44
+ /** Slack incoming-webhook URL (`https://hooks.slack.com/services/…`). */
45
+ url: string
46
+ }
47
+
48
+ /** A `betterstack` delivery destination (a log event to a Better Stack source). */
49
+ export type BetterStack = {
50
+ /** Better Stack source token, sent as `Authorization: Bearer …`. */
51
+ token: string
52
+ /** Destination kind. */
53
+ type: 'betterstack'
54
+ /** Better Stack ingest host URL (`https://<host>.betterstackdata.com`). */
55
+ url: string
56
+ }
57
+
58
+ /**
59
+ * A built destination: the plain {@link Destination} data plus a `deliver`
60
+ * method that owns this transport's delivery logic (formatting, headers,
61
+ * signing, redirect policy). `deliver` is a function property, so it drops out of
62
+ * `JSON.stringify` — an instance serializes to just its data.
63
+ *
64
+ * There is no central delivery router: each provider carries its own transport.
65
+ * To deliver a persisted (plain) `Subscription.destination`, rebuild an instance
66
+ * with {@link from} and call `.deliver(...)`.
67
+ */
68
+ export type Instance<destination extends Destination = Destination> = destination & {
69
+ /** Delivers an envelope to this destination using its own transport. */
70
+ deliver: (options: deliver.Options) => Promise<Result>
71
+ }
72
+
73
+ export declare namespace deliver {
74
+ /** Options for {@link Instance.deliver}. */
75
+ type Options = {
76
+ /** The envelope to deliver. */
77
+ envelope: Webhooks.Envelope
78
+ /** `fetch` implementation; defaults to the global. Injectable for tests. */
79
+ fetch?: typeof globalThis.fetch | undefined
80
+ /** Monotonic clock in ms; defaults to `Date.now`. Injectable for tests. */
81
+ now?: (() => number) | undefined
82
+ /** Signing secret; required by the `url` transport, ignored by others. */
83
+ secret?: string | undefined
84
+ /** Abort the request after this many ms (default 10000). */
85
+ timeoutMs?: number | undefined
86
+ /** Unix timestamp (seconds) embedded in the signature; defaults to now. */
87
+ timestamp?: number | undefined
88
+ }
89
+ }
90
+
91
+ /** Outcome of a single delivery attempt, shared by every transport. */
92
+ export type Result = {
93
+ /** Wall-clock duration of the attempt in ms, when the request was made. */
94
+ durationMs?: number | undefined
95
+ /** Failure reason when `ok` is false. */
96
+ error?: string | undefined
97
+ /** Whether the destination accepted the delivery (2xx). */
98
+ ok: boolean
99
+ /** HTTP response status, when a response was received. */
100
+ status?: number | undefined
101
+ }
102
+
103
+ /**
104
+ * Canonical constructor: normalizes a value into a validated {@link Instance} by
105
+ * delegating to the matching builder (`url`, `slack`, `betterStack`), each of
106
+ * which owns its own transport. This is also how you deliver a persisted (plain)
107
+ * destination: `from(subscription.destination).deliver(...)`.
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * WebhookDestination.from('https://example.com/hook')
112
+ * WebhookDestination.from({ type: 'slack', url: 'https://hooks.slack.com/…' })
113
+ * ```
114
+ */
115
+ export function from(value: from.Value): Instance {
116
+ if (typeof value === 'string') return core_url.url(value)
117
+ if (value.type === 'slack') return core_slack.slack(value.url)
118
+ if (value.type === 'betterstack') return core_betterStack.betterStack(value)
119
+ return core_url.url(value.url)
120
+ }
121
+
122
+ export declare namespace from {
123
+ /** A destination object, or a bare HTTPS URL string (shorthand for `url`). */
124
+ type Value = Destination | string
125
+ }
126
+
127
+ /** Validates a destination's URL according to its transport-specific rules. */
128
+ export function assertDestination(destination: Destination): void {
129
+ if (destination.type === 'url') core_url.assertDeliverableUrl(destination.url)
130
+ else if (destination.type === 'slack') core_slack.assertSlackUrl(destination.url)
131
+ else core_betterStack.assertBetterstackUrl(destination.url)
132
+ }
133
+
134
+ /**
135
+ * A non-secret label for a destination, used in delivery-log `requestUrl`. Slack
136
+ * incoming-webhook URLs are bearer secrets, so `slack` destinations log a
137
+ * token-redacted form (see {@link core_slack.redactSlackUrl}) rather than the raw
138
+ * URL. Better Stack keeps its secret in a separate `token`, so its ingest URL
139
+ * logs verbatim.
140
+ */
141
+ export function destinationLabel(destination: Destination): string {
142
+ return destination.type === 'slack' ? core_slack.redactSlackUrl(destination.url) : destination.url
143
+ }
144
+
145
+ /**
146
+ * Low-level HTTP send shared by every transport: POSTs a prebuilt body/headers
147
+ * with a timeout and classifies the response into a {@link Result}. This is the
148
+ * network mechanic only — each provider owns its own body formatting, headers,
149
+ * signing, and redirect policy. Never throws.
150
+ */
151
+ export async function send(options: send.Options): Promise<Result> {
152
+ const fetch_ = options.fetch ?? globalThis.fetch
153
+ const clock = options.now ?? (() => Date.now())
154
+ const timeoutMs = options.timeoutMs ?? 10_000
155
+ const controller = new AbortController()
156
+ const timer = setTimeout(() => controller.abort(), timeoutMs)
157
+ const start = clock()
158
+ try {
159
+ const response = await fetch_(options.url, {
160
+ body: options.body,
161
+ headers: { 'content-type': 'application/json', ...options.headers },
162
+ method: 'POST',
163
+ // `manual` yields an opaque redirect (status 0) in Workers/browsers, or the
164
+ // raw 3xx status in Node — both are treated as a failed delivery.
165
+ redirect: 'manual',
166
+ signal: controller.signal,
167
+ })
168
+ const durationMs = clock() - start
169
+ if (
170
+ options.rejectRedirects &&
171
+ (response.status === 0 || (response.status >= 300 && response.status < 400))
172
+ )
173
+ return {
174
+ durationMs,
175
+ error: `redirect rejected (${response.status})`,
176
+ ok: false,
177
+ status: response.status || undefined,
178
+ }
179
+ if (response.status >= 200 && response.status < 300)
180
+ return { durationMs, ok: true, status: response.status }
181
+ return {
182
+ durationMs,
183
+ error: `${options.errorPrefix ?? ''}non-2xx response (${response.status})`,
184
+ ok: false,
185
+ status: response.status || undefined,
186
+ }
187
+ } catch (cause) {
188
+ const durationMs = clock() - start
189
+ const timedOut = cause instanceof Error && cause.name === 'AbortError'
190
+ return {
191
+ durationMs,
192
+ error: timedOut ? `timed out after ${timeoutMs}ms` : String(cause),
193
+ ok: false,
194
+ }
195
+ } finally {
196
+ clearTimeout(timer)
197
+ }
198
+ }
199
+
200
+ export declare namespace send {
201
+ /** Options for {@link send}. */
202
+ type Options = {
203
+ /** Serialized request body. */
204
+ body: string
205
+ /** Prefix for the non-2xx error message (e.g. `slack `). */
206
+ errorPrefix?: string | undefined
207
+ /** `fetch` implementation; defaults to the global. */
208
+ fetch?: typeof globalThis.fetch | undefined
209
+ /** Extra request headers merged over `content-type: application/json`. */
210
+ headers?: Record<string, string> | undefined
211
+ /** Monotonic clock in ms; defaults to `Date.now`. */
212
+ now?: (() => number) | undefined
213
+ /** Treat any 3xx/opaque redirect as a failed delivery (SSRF guard). */
214
+ rejectRedirects?: boolean | undefined
215
+ /** Abort the request after this many ms (default 10000). */
216
+ timeoutMs?: number | undefined
217
+ /** Destination URL. */
218
+ url: string
219
+ }
220
+ }
221
+
222
+ /** Header carrying the HMAC signature (`t=…,v1=…`). */
223
+ export const signatureHeader = 'tempo-signature'
224
+ /** Header carrying the idempotent event id (`evt_…`). */
225
+ export const eventIdHeader = 'tempo-event-id'
226
+ /** Header carrying the event type. */
227
+ export const eventTypeHeader = 'tempo-event-type'
228
+
229
+ /**
230
+ * Signs a delivery body with a per-subscription secret. Returns a Stripe-style
231
+ * header value `t=<unix>,v1=<hex>` where the timestamp guards against replay.
232
+ */
233
+ export function sign(options: sign.Options): string {
234
+ const timestamp = options.timestamp ?? Math.floor(Date.now() / 1_000)
235
+ const v1 = hmac(options.secret, `${timestamp}.${options.body}`)
236
+ return `t=${timestamp},v1=${v1}`
237
+ }
238
+
239
+ export declare namespace sign {
240
+ /** Options for {@link sign}. */
241
+ type Options = {
242
+ /** Raw request body to sign. */
243
+ body: string
244
+ /** Per-subscription signing secret. */
245
+ secret: string
246
+ /** Unix timestamp (seconds) to embed; defaults to now. */
247
+ timestamp?: number | undefined
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Verifies a signature produced by {@link sign}: recomputes the HMAC and
253
+ * rejects signatures older than `tolerance` seconds (default 300).
254
+ */
255
+ export function verify(options: verify.Options): boolean {
256
+ const parsed = parseSignature(options.signature)
257
+ if (!parsed) return false
258
+
259
+ const tolerance = options.tolerance ?? 300
260
+ const now = options.now ?? Math.floor(Date.now() / 1_000)
261
+ if (Math.abs(now - parsed.timestamp) > tolerance) return false
262
+
263
+ const expected = hmac(options.secret, `${parsed.timestamp}.${options.body}`)
264
+ return timingSafeEqual(expected, parsed.v1)
265
+ }
266
+
267
+ export declare namespace verify {
268
+ /** Options for {@link verify}. */
269
+ type Options = {
270
+ /** Raw request body that was signed. */
271
+ body: string
272
+ /** Current Unix timestamp (seconds); injectable for tests. */
273
+ now?: number | undefined
274
+ /** Per-subscription signing secret. */
275
+ secret: string
276
+ /** Signature header value (`t=…,v1=…`). */
277
+ signature: string
278
+ /** Maximum age in seconds before a signature is rejected. */
279
+ tolerance?: number | undefined
280
+ }
281
+ }
282
+
283
+ function hmac(secret: string, message: string): string {
284
+ return Hash.hmac256(Hex.fromString(secret), Hex.fromString(message)).slice(2)
285
+ }
286
+
287
+ function parseSignature(signature: string): { timestamp: number; v1: string } | null {
288
+ let timestamp: number | undefined
289
+ let v1: string | undefined
290
+ for (const part of signature.split(',')) {
291
+ const [key, value] = part.split('=', 2)
292
+ if (key === 't' && value) timestamp = Number(value)
293
+ else if (key === 'v1' && value) v1 = value
294
+ }
295
+ if (timestamp === undefined || Number.isNaN(timestamp) || !v1) return null
296
+ return { timestamp, v1 }
297
+ }
298
+
299
+ function timingSafeEqual(a: string, b: string): boolean {
300
+ if (a.length !== b.length) return false
301
+ let mismatch = 0
302
+ for (let index = 0; index < a.length; index++)
303
+ mismatch |= a.charCodeAt(index) ^ b.charCodeAt(index)
304
+ return mismatch === 0
305
+ }
306
+
307
+ /** Thrown when a subscriber URL fails SSRF/format validation. */
308
+ export class InvalidUrlError extends Error {
309
+ /** Why the URL was rejected. */
310
+ reason: InvalidUrlError.Reason
311
+ /** The rejected URL. */
312
+ url: string
313
+
314
+ constructor(reason: InvalidUrlError.Reason, url: string) {
315
+ super(`Webhook URL rejected (${reason}): ${url}`)
316
+ this.name = 'Webhooks.InvalidUrlError'
317
+ this.reason = reason
318
+ this.url = url
319
+ }
320
+ }
321
+
322
+ export declare namespace InvalidUrlError {
323
+ /** Reason a URL was rejected. */
324
+ type Reason =
325
+ | 'betterstack_host'
326
+ | 'blocked_host'
327
+ | 'credentials'
328
+ | 'malformed'
329
+ | 'protocol'
330
+ | 'slack_host'
331
+ }