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 @@
1
+ {"version":3,"file":"Viem.d.ts","sourceRoot":"","sources":["../../src/internal/Viem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { createClient, http, publicActions } from 'viem';
2
+ import { tempoActions } from 'viem/tempo';
3
+ import { tempoMainnet, tempoTestnet } from 'viem/tempo/chains';
4
+ /** Known Tempo chains keyed by id, for metadata lookups. */
5
+ export const chains = [tempoMainnet, tempoTestnet];
6
+ /** Tempo chain ids keyed by network. */
7
+ export const chainId = {
8
+ mainnet: tempoMainnet.id,
9
+ testnet: tempoTestnet.id,
10
+ };
11
+ /** Default Tempo chain id. */
12
+ export const defaultChainId = chainId.mainnet;
13
+ /** Whether a chain id is Tempo mainnet. */
14
+ export function isMainnet(id) {
15
+ return id === chainId.mainnet;
16
+ }
17
+ /** Default Tempo RPC URLs keyed by chain id. */
18
+ export const url = {
19
+ [chainId.mainnet]: 'https://rpc.tempo.xyz',
20
+ [chainId.testnet]: 'https://rpc.testnet.tempo.xyz',
21
+ };
22
+ /**
23
+ * Resolves the effective RPC config for a single request.
24
+ *
25
+ * Accepts either a static config object or a per-request resolver function. The
26
+ * resolver receives a {@link resolve.Context} (`chainId` plus the request
27
+ * `principal`), so callers can route traffic per caller — e.g. send anonymous
28
+ * (`principal.type === 'public'`) traffic to a separate, no-auth upstream. A
29
+ * `null` principal denotes a trusted, non-request caller (the scheduled
30
+ * webhook poller). A missing `url` falls back to the built-in public host map
31
+ * ({@link url}); a missing `basicAuth` means no Basic auth is sent.
32
+ *
33
+ * Memoization is keyed on the resolved output (see `App.create` and
34
+ * {@link Tidx.createGetClient}), not the context, so a resolver may branch on
35
+ * any principal field without unbounded client cardinality: callers that
36
+ * resolve to the same upstream share a client. Pass the result to
37
+ * {@link getClient} (or let `getClient` resolve for you) to build a client.
38
+ */
39
+ export function resolve(rpc, context) {
40
+ const config = typeof rpc === 'function' ? rpc(context) : rpc;
41
+ return {
42
+ basicAuth: config?.basicAuth,
43
+ url: (typeof config?.url === 'function' ? config.url(context.chainId) : config?.url) ??
44
+ url[context.chainId],
45
+ };
46
+ }
47
+ export function getClient(options) {
48
+ const { chainId = defaultChainId, principal = null, rpc } = options;
49
+ const { basicAuth, url: rpcUrl } = resolve(rpc, { chainId, principal });
50
+ return createClient({
51
+ // Auto-batch `eth_call`s within the same macrotask into a single
52
+ // deployless multicall. Lets call sites issue `Promise.all` of N reads
53
+ // (e.g. `balanceOf` across many tokens) and pay one RPC round-trip.
54
+ // Deployless mode bytecode-injects multicall3 so Tempo, which doesn't
55
+ // configure a deployed multicall3, can still serve the aggregated call.
56
+ batch: { multicall: { deployless: true } },
57
+ chain: { ...tempoMainnet, id: chainId },
58
+ transport: http(rpcUrl, basicAuth ? { fetchOptions: { headers: { Authorization: `Basic ${btoa(basicAuth)}` } } } : {}),
59
+ })
60
+ .extend(publicActions)
61
+ .extend(tempoActions());
62
+ }
63
+ //# sourceMappingURL=Viem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Viem.js","sourceRoot":"","sources":["../../src/internal/Viem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAM9D,4DAA4D;AAC5D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;AAElD,wCAAwC;AACxC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,OAAO,EAAE,YAAY,CAAC,EAAE;IACxB,OAAO,EAAE,YAAY,CAAC,EAAE;CAChB,CAAA;AAEV,8BAA8B;AAC9B,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAA;AAE7C,2CAA2C;AAC3C,MAAM,UAAU,SAAS,CAAC,EAAU;IAClC,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAA;AAC/B,CAAC;AAED,gDAAgD;AAChD,MAAM,CAAC,MAAM,GAAG,GAA2B;IACzC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,uBAAuB;IAC1C,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,+BAA+B;CACnD,CAAA;AAiBD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,OAAO,CACrB,GAA8B,EAC9B,OAAwB;IAExB,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IAC7D,OAAO;QACL,SAAS,EAAE,MAAM,EAAE,SAAS;QAC5B,GAAG,EACD,CAAC,OAAO,MAAM,EAAE,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC;YAC/E,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC;KACvB,CAAA;AACH,CAAC;AA4BD,MAAM,UAAU,SAAS,CAAC,OAA0B;IAClD,MAAM,EAAE,OAAO,GAAG,cAAc,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;IACnE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAA;IAEvE,OAAO,YAAY,CAAC;QAClB,iEAAiE;QACjE,uEAAuE;QACvE,oEAAoE;QACpE,sEAAsE;QACtE,wEAAwE;QACxE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE;QAC1C,KAAK,EAAE,EAAE,GAAG,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE;QACvC,SAAS,EAAE,IAAI,CACb,MAAM,EACN,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAC9F;KACF,CAAC;SACC,MAAM,CAAC,aAAa,CAAC;SACrB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,198 @@
1
+ import type * as Webhooks from './Webhooks.js';
2
+ export { assertBetterstackUrl, betterStack } from './webhookDestinations/betterStack.js';
3
+ export { assertSlackUrl, redactSlackUrl, slack } from './webhookDestinations/slack.js';
4
+ export { assertDeliverableUrl, url } from './webhookDestinations/url.js';
5
+ /**
6
+ * Where a subscription's matched events are delivered.
7
+ *
8
+ * - `url` — a subscriber HTTPS endpoint; the signed envelope is POSTed verbatim
9
+ * (HMAC in `tempo-signature`).
10
+ * - `slack` — a subscriber-supplied Slack incoming-webhook URL (`hooks.slack.com`).
11
+ * The envelope is formatted into a Slack Block Kit message and POSTed there
12
+ * with no signature (the URL is itself the shared secret). No OAuth.
13
+ * - `betterstack` — a Better Stack Telemetry source: an ingest host URL
14
+ * (`*.betterstackdata.com`) plus a source token. The envelope is POSTed as a
15
+ * structured log event authenticated with `Authorization: Bearer <token>`.
16
+ *
17
+ * A `Destination` is plain, serializable data — it is what a `Subscription`
18
+ * persists. The builders (`from`, `url`, `slack`, `betterStack`) return an
19
+ * {@link Instance}: the same data plus a bound {@link Instance.deliver}. `deliver`
20
+ * is a function property, so an instance serializes and structurally compares as
21
+ * the plain destination it is.
22
+ */
23
+ export type Destination = BetterStack | Slack | Url;
24
+ /** A `url` delivery destination (a signed event POST to an HTTPS endpoint). */
25
+ export type Url = {
26
+ /** Destination kind. */
27
+ type: 'url';
28
+ /** Subscriber callback URL (validated `https`). */
29
+ url: string;
30
+ };
31
+ /** A `slack` delivery destination (a formatted message to an incoming webhook). */
32
+ export type Slack = {
33
+ /** Destination kind. */
34
+ type: 'slack';
35
+ /** Slack incoming-webhook URL (`https://hooks.slack.com/services/…`). */
36
+ url: string;
37
+ };
38
+ /** A `betterstack` delivery destination (a log event to a Better Stack source). */
39
+ export type BetterStack = {
40
+ /** Better Stack source token, sent as `Authorization: Bearer …`. */
41
+ token: string;
42
+ /** Destination kind. */
43
+ type: 'betterstack';
44
+ /** Better Stack ingest host URL (`https://<host>.betterstackdata.com`). */
45
+ url: string;
46
+ };
47
+ /**
48
+ * A built destination: the plain {@link Destination} data plus a `deliver`
49
+ * method that owns this transport's delivery logic (formatting, headers,
50
+ * signing, redirect policy). `deliver` is a function property, so it drops out of
51
+ * `JSON.stringify` — an instance serializes to just its data.
52
+ *
53
+ * There is no central delivery router: each provider carries its own transport.
54
+ * To deliver a persisted (plain) `Subscription.destination`, rebuild an instance
55
+ * with {@link from} and call `.deliver(...)`.
56
+ */
57
+ export type Instance<destination extends Destination = Destination> = destination & {
58
+ /** Delivers an envelope to this destination using its own transport. */
59
+ deliver: (options: deliver.Options) => Promise<Result>;
60
+ };
61
+ export declare namespace deliver {
62
+ /** Options for {@link Instance.deliver}. */
63
+ type Options = {
64
+ /** The envelope to deliver. */
65
+ envelope: Webhooks.Envelope;
66
+ /** `fetch` implementation; defaults to the global. Injectable for tests. */
67
+ fetch?: typeof globalThis.fetch | undefined;
68
+ /** Monotonic clock in ms; defaults to `Date.now`. Injectable for tests. */
69
+ now?: (() => number) | undefined;
70
+ /** Signing secret; required by the `url` transport, ignored by others. */
71
+ secret?: string | undefined;
72
+ /** Abort the request after this many ms (default 10000). */
73
+ timeoutMs?: number | undefined;
74
+ /** Unix timestamp (seconds) embedded in the signature; defaults to now. */
75
+ timestamp?: number | undefined;
76
+ };
77
+ }
78
+ /** Outcome of a single delivery attempt, shared by every transport. */
79
+ export type Result = {
80
+ /** Wall-clock duration of the attempt in ms, when the request was made. */
81
+ durationMs?: number | undefined;
82
+ /** Failure reason when `ok` is false. */
83
+ error?: string | undefined;
84
+ /** Whether the destination accepted the delivery (2xx). */
85
+ ok: boolean;
86
+ /** HTTP response status, when a response was received. */
87
+ status?: number | undefined;
88
+ };
89
+ /**
90
+ * Canonical constructor: normalizes a value into a validated {@link Instance} by
91
+ * delegating to the matching builder (`url`, `slack`, `betterStack`), each of
92
+ * which owns its own transport. This is also how you deliver a persisted (plain)
93
+ * destination: `from(subscription.destination).deliver(...)`.
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * WebhookDestination.from('https://example.com/hook')
98
+ * WebhookDestination.from({ type: 'slack', url: 'https://hooks.slack.com/…' })
99
+ * ```
100
+ */
101
+ export declare function from(value: from.Value): Instance;
102
+ export declare namespace from {
103
+ /** A destination object, or a bare HTTPS URL string (shorthand for `url`). */
104
+ type Value = Destination | string;
105
+ }
106
+ /** Validates a destination's URL according to its transport-specific rules. */
107
+ export declare function assertDestination(destination: Destination): void;
108
+ /**
109
+ * A non-secret label for a destination, used in delivery-log `requestUrl`. Slack
110
+ * incoming-webhook URLs are bearer secrets, so `slack` destinations log a
111
+ * token-redacted form (see {@link core_slack.redactSlackUrl}) rather than the raw
112
+ * URL. Better Stack keeps its secret in a separate `token`, so its ingest URL
113
+ * logs verbatim.
114
+ */
115
+ export declare function destinationLabel(destination: Destination): string;
116
+ /**
117
+ * Low-level HTTP send shared by every transport: POSTs a prebuilt body/headers
118
+ * with a timeout and classifies the response into a {@link Result}. This is the
119
+ * network mechanic only — each provider owns its own body formatting, headers,
120
+ * signing, and redirect policy. Never throws.
121
+ */
122
+ export declare function send(options: send.Options): Promise<Result>;
123
+ export declare namespace send {
124
+ /** Options for {@link send}. */
125
+ type Options = {
126
+ /** Serialized request body. */
127
+ body: string;
128
+ /** Prefix for the non-2xx error message (e.g. `slack `). */
129
+ errorPrefix?: string | undefined;
130
+ /** `fetch` implementation; defaults to the global. */
131
+ fetch?: typeof globalThis.fetch | undefined;
132
+ /** Extra request headers merged over `content-type: application/json`. */
133
+ headers?: Record<string, string> | undefined;
134
+ /** Monotonic clock in ms; defaults to `Date.now`. */
135
+ now?: (() => number) | undefined;
136
+ /** Treat any 3xx/opaque redirect as a failed delivery (SSRF guard). */
137
+ rejectRedirects?: boolean | undefined;
138
+ /** Abort the request after this many ms (default 10000). */
139
+ timeoutMs?: number | undefined;
140
+ /** Destination URL. */
141
+ url: string;
142
+ };
143
+ }
144
+ /** Header carrying the HMAC signature (`t=…,v1=…`). */
145
+ export declare const signatureHeader = "tempo-signature";
146
+ /** Header carrying the idempotent event id (`evt_…`). */
147
+ export declare const eventIdHeader = "tempo-event-id";
148
+ /** Header carrying the event type. */
149
+ export declare const eventTypeHeader = "tempo-event-type";
150
+ /**
151
+ * Signs a delivery body with a per-subscription secret. Returns a Stripe-style
152
+ * header value `t=<unix>,v1=<hex>` where the timestamp guards against replay.
153
+ */
154
+ export declare function sign(options: sign.Options): string;
155
+ export declare namespace sign {
156
+ /** Options for {@link sign}. */
157
+ type Options = {
158
+ /** Raw request body to sign. */
159
+ body: string;
160
+ /** Per-subscription signing secret. */
161
+ secret: string;
162
+ /** Unix timestamp (seconds) to embed; defaults to now. */
163
+ timestamp?: number | undefined;
164
+ };
165
+ }
166
+ /**
167
+ * Verifies a signature produced by {@link sign}: recomputes the HMAC and
168
+ * rejects signatures older than `tolerance` seconds (default 300).
169
+ */
170
+ export declare function verify(options: verify.Options): boolean;
171
+ export declare namespace verify {
172
+ /** Options for {@link verify}. */
173
+ type Options = {
174
+ /** Raw request body that was signed. */
175
+ body: string;
176
+ /** Current Unix timestamp (seconds); injectable for tests. */
177
+ now?: number | undefined;
178
+ /** Per-subscription signing secret. */
179
+ secret: string;
180
+ /** Signature header value (`t=…,v1=…`). */
181
+ signature: string;
182
+ /** Maximum age in seconds before a signature is rejected. */
183
+ tolerance?: number | undefined;
184
+ };
185
+ }
186
+ /** Thrown when a subscriber URL fails SSRF/format validation. */
187
+ export declare class InvalidUrlError extends Error {
188
+ /** Why the URL was rejected. */
189
+ reason: InvalidUrlError.Reason;
190
+ /** The rejected URL. */
191
+ url: string;
192
+ constructor(reason: InvalidUrlError.Reason, url: string);
193
+ }
194
+ export declare namespace InvalidUrlError {
195
+ /** Reason a URL was rejected. */
196
+ type Reason = 'betterstack_host' | 'blocked_host' | 'credentials' | 'malformed' | 'protocol' | 'slack_host';
197
+ }
198
+ //# sourceMappingURL=WebhookDestination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhookDestination.d.ts","sourceRoot":"","sources":["../../src/internal/WebhookDestination.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import { Hash, Hex } from 'ox';
2
+ import * as core_betterStack from './webhookDestinations/betterStack.js';
3
+ import * as core_slack from './webhookDestinations/slack.js';
4
+ import * as core_url from './webhookDestinations/url.js';
5
+ export { assertBetterstackUrl, betterStack } from './webhookDestinations/betterStack.js';
6
+ export { assertSlackUrl, redactSlackUrl, slack } from './webhookDestinations/slack.js';
7
+ export { assertDeliverableUrl, url } from './webhookDestinations/url.js';
8
+ /**
9
+ * Canonical constructor: normalizes a value into a validated {@link Instance} by
10
+ * delegating to the matching builder (`url`, `slack`, `betterStack`), each of
11
+ * which owns its own transport. This is also how you deliver a persisted (plain)
12
+ * destination: `from(subscription.destination).deliver(...)`.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * WebhookDestination.from('https://example.com/hook')
17
+ * WebhookDestination.from({ type: 'slack', url: 'https://hooks.slack.com/…' })
18
+ * ```
19
+ */
20
+ export function from(value) {
21
+ if (typeof value === 'string')
22
+ return core_url.url(value);
23
+ if (value.type === 'slack')
24
+ return core_slack.slack(value.url);
25
+ if (value.type === 'betterstack')
26
+ return core_betterStack.betterStack(value);
27
+ return core_url.url(value.url);
28
+ }
29
+ /** Validates a destination's URL according to its transport-specific rules. */
30
+ export function assertDestination(destination) {
31
+ if (destination.type === 'url')
32
+ core_url.assertDeliverableUrl(destination.url);
33
+ else if (destination.type === 'slack')
34
+ core_slack.assertSlackUrl(destination.url);
35
+ else
36
+ core_betterStack.assertBetterstackUrl(destination.url);
37
+ }
38
+ /**
39
+ * A non-secret label for a destination, used in delivery-log `requestUrl`. Slack
40
+ * incoming-webhook URLs are bearer secrets, so `slack` destinations log a
41
+ * token-redacted form (see {@link core_slack.redactSlackUrl}) rather than the raw
42
+ * URL. Better Stack keeps its secret in a separate `token`, so its ingest URL
43
+ * logs verbatim.
44
+ */
45
+ export function destinationLabel(destination) {
46
+ return destination.type === 'slack' ? core_slack.redactSlackUrl(destination.url) : destination.url;
47
+ }
48
+ /**
49
+ * Low-level HTTP send shared by every transport: POSTs a prebuilt body/headers
50
+ * with a timeout and classifies the response into a {@link Result}. This is the
51
+ * network mechanic only — each provider owns its own body formatting, headers,
52
+ * signing, and redirect policy. Never throws.
53
+ */
54
+ export async function send(options) {
55
+ const fetch_ = options.fetch ?? globalThis.fetch;
56
+ const clock = options.now ?? (() => Date.now());
57
+ const timeoutMs = options.timeoutMs ?? 10_000;
58
+ const controller = new AbortController();
59
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
60
+ const start = clock();
61
+ try {
62
+ const response = await fetch_(options.url, {
63
+ body: options.body,
64
+ headers: { 'content-type': 'application/json', ...options.headers },
65
+ method: 'POST',
66
+ // `manual` yields an opaque redirect (status 0) in Workers/browsers, or the
67
+ // raw 3xx status in Node — both are treated as a failed delivery.
68
+ redirect: 'manual',
69
+ signal: controller.signal,
70
+ });
71
+ const durationMs = clock() - start;
72
+ if (options.rejectRedirects &&
73
+ (response.status === 0 || (response.status >= 300 && response.status < 400)))
74
+ return {
75
+ durationMs,
76
+ error: `redirect rejected (${response.status})`,
77
+ ok: false,
78
+ status: response.status || undefined,
79
+ };
80
+ if (response.status >= 200 && response.status < 300)
81
+ return { durationMs, ok: true, status: response.status };
82
+ return {
83
+ durationMs,
84
+ error: `${options.errorPrefix ?? ''}non-2xx response (${response.status})`,
85
+ ok: false,
86
+ status: response.status || undefined,
87
+ };
88
+ }
89
+ catch (cause) {
90
+ const durationMs = clock() - start;
91
+ const timedOut = cause instanceof Error && cause.name === 'AbortError';
92
+ return {
93
+ durationMs,
94
+ error: timedOut ? `timed out after ${timeoutMs}ms` : String(cause),
95
+ ok: false,
96
+ };
97
+ }
98
+ finally {
99
+ clearTimeout(timer);
100
+ }
101
+ }
102
+ /** Header carrying the HMAC signature (`t=…,v1=…`). */
103
+ export const signatureHeader = 'tempo-signature';
104
+ /** Header carrying the idempotent event id (`evt_…`). */
105
+ export const eventIdHeader = 'tempo-event-id';
106
+ /** Header carrying the event type. */
107
+ export const eventTypeHeader = 'tempo-event-type';
108
+ /**
109
+ * Signs a delivery body with a per-subscription secret. Returns a Stripe-style
110
+ * header value `t=<unix>,v1=<hex>` where the timestamp guards against replay.
111
+ */
112
+ export function sign(options) {
113
+ const timestamp = options.timestamp ?? Math.floor(Date.now() / 1_000);
114
+ const v1 = hmac(options.secret, `${timestamp}.${options.body}`);
115
+ return `t=${timestamp},v1=${v1}`;
116
+ }
117
+ /**
118
+ * Verifies a signature produced by {@link sign}: recomputes the HMAC and
119
+ * rejects signatures older than `tolerance` seconds (default 300).
120
+ */
121
+ export function verify(options) {
122
+ const parsed = parseSignature(options.signature);
123
+ if (!parsed)
124
+ return false;
125
+ const tolerance = options.tolerance ?? 300;
126
+ const now = options.now ?? Math.floor(Date.now() / 1_000);
127
+ if (Math.abs(now - parsed.timestamp) > tolerance)
128
+ return false;
129
+ const expected = hmac(options.secret, `${parsed.timestamp}.${options.body}`);
130
+ return timingSafeEqual(expected, parsed.v1);
131
+ }
132
+ function hmac(secret, message) {
133
+ return Hash.hmac256(Hex.fromString(secret), Hex.fromString(message)).slice(2);
134
+ }
135
+ function parseSignature(signature) {
136
+ let timestamp;
137
+ let v1;
138
+ for (const part of signature.split(',')) {
139
+ const [key, value] = part.split('=', 2);
140
+ if (key === 't' && value)
141
+ timestamp = Number(value);
142
+ else if (key === 'v1' && value)
143
+ v1 = value;
144
+ }
145
+ if (timestamp === undefined || Number.isNaN(timestamp) || !v1)
146
+ return null;
147
+ return { timestamp, v1 };
148
+ }
149
+ function timingSafeEqual(a, b) {
150
+ if (a.length !== b.length)
151
+ return false;
152
+ let mismatch = 0;
153
+ for (let index = 0; index < a.length; index++)
154
+ mismatch |= a.charCodeAt(index) ^ b.charCodeAt(index);
155
+ return mismatch === 0;
156
+ }
157
+ /** Thrown when a subscriber URL fails SSRF/format validation. */
158
+ export class InvalidUrlError extends Error {
159
+ /** Why the URL was rejected. */
160
+ reason;
161
+ /** The rejected URL. */
162
+ url;
163
+ constructor(reason, url) {
164
+ super(`Webhook URL rejected (${reason}): ${url}`);
165
+ this.name = 'Webhooks.InvalidUrlError';
166
+ this.reason = reason;
167
+ this.url = url;
168
+ }
169
+ }
170
+ //# sourceMappingURL=WebhookDestination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebhookDestination.js","sourceRoot":"","sources":["../../src/internal/WebhookDestination.ts"],"names":[],"mappings":"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"}