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,59 @@
1
+ import type * as Webhooks from '../Webhooks.js';
2
+ import * as WebhookDestination from '../WebhookDestination.js';
3
+ /**
4
+ * Builds a `slack` destination. Its `deliver` formats the envelope into a
5
+ * per-event Block Kit message ({@link formatBlocks}) and POSTs it to the Slack
6
+ * incoming-webhook URL unsigned (the URL is the shared secret; host-locked to
7
+ * `hooks.slack.com`). Deliver with `.deliver({ envelope })`.
8
+ */
9
+ export declare function slack(url: string): WebhookDestination.Instance<WebhookDestination.Slack>;
10
+ /** A Slack `section.fields` / `context.elements` entry. */
11
+ type Field = {
12
+ text: string;
13
+ type: 'mrkdwn';
14
+ };
15
+ /** A Slack Block Kit block (loosely typed; only the shapes we emit). */
16
+ type Block = {
17
+ elements: Field[];
18
+ type: 'context';
19
+ } | {
20
+ fields: Field[];
21
+ type: 'section';
22
+ } | {
23
+ text: {
24
+ emoji: true;
25
+ text: string;
26
+ type: 'plain_text';
27
+ };
28
+ type: 'header';
29
+ } | {
30
+ text: Field;
31
+ type: 'section';
32
+ };
33
+ /**
34
+ * Formats an envelope into a Slack Block Kit message (`{ blocks, text }`) using a
35
+ * per-event layout. Every message shares the cross-cutting rules: a header (the
36
+ * subscription's `context.title` when set, else the event's friendly name), an
37
+ * optional description section, an event-specific lead + fields grid, and a
38
+ * trailing context line that always preserves the raw event type/id/chain/time.
39
+ * Pure and synchronous — all inputs come from the envelope or static chain data.
40
+ */
41
+ export declare function formatBlocks(envelope: Webhooks.Envelope): {
42
+ blocks: Block[];
43
+ text: string;
44
+ };
45
+ /**
46
+ * Validates a `slack` destination's incoming-webhook URL: must be `https` and
47
+ * hosted at {@link slackWebhookHost}. The host lock keeps `slack` destinations
48
+ * from becoming a generic "POST an unsigned message anywhere" primitive — a
49
+ * `slack` delivery carries no signature, so it must only ever reach Slack.
50
+ */
51
+ export declare function assertSlackUrl(input: string): URL;
52
+ /**
53
+ * Masks the secret path of a Slack incoming-webhook URL for logging, keeping the
54
+ * host so the destination is still recognizable: `https://hooks.slack.com/…`.
55
+ * Falls back to the bare origin if the URL can't be parsed.
56
+ */
57
+ export declare function redactSlackUrl(url: string): string;
58
+ export {};
59
+ //# sourceMappingURL=slack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/internal/webhookDestinations/slack.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,kBAAkB,MAAM,0BAA0B,CAAA;AAE9D;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAgBxF;AAED,2DAA2D;AAC3D,KAAK,KAAK,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAE7C,wEAAwE;AACxE,KAAK,KAAK,GACN;IAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GACtC;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAuBpC;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG;IAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA2D3F;AA6UD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAejD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlD"}
@@ -0,0 +1,422 @@
1
+ import { formatUnits } from 'viem';
2
+ import * as Viem from '../Viem.js';
3
+ import * as WebhookDestination from '../WebhookDestination.js';
4
+ /**
5
+ * Builds a `slack` destination. Its `deliver` formats the envelope into a
6
+ * per-event Block Kit message ({@link formatBlocks}) and POSTs it to the Slack
7
+ * incoming-webhook URL unsigned (the URL is the shared secret; host-locked to
8
+ * `hooks.slack.com`). Deliver with `.deliver({ envelope })`.
9
+ */
10
+ export function slack(url) {
11
+ assertSlackUrl(url);
12
+ return {
13
+ deliver(options) {
14
+ return WebhookDestination.send({
15
+ body: JSON.stringify(formatBlocks(options.envelope)),
16
+ errorPrefix: 'slack ',
17
+ fetch: options.fetch,
18
+ now: options.now,
19
+ timeoutMs: options.timeoutMs,
20
+ url,
21
+ });
22
+ },
23
+ type: 'slack',
24
+ url,
25
+ };
26
+ }
27
+ /** Per-event emoji + friendly header name; also the notification fallback lead. */
28
+ const friendlyName = {
29
+ 'block:created': ':link: Block created',
30
+ 'log:emitted': ':label: Log emitted',
31
+ ping: ':bell: Webhook test ping',
32
+ 'token:transfer': ':money_with_wings: Token transfer',
33
+ 'transaction:included': ':package: Transaction included',
34
+ };
35
+ /**
36
+ * Chain id → block-explorer base URL, derived from {@link Viem.chains}. Used to
37
+ * render addresses/hashes/tokens/blocks as explorer links; an unknown chain id
38
+ * (no base) degrades to plain truncated text.
39
+ */
40
+ const explorerBase = Object.fromEntries(Viem.chains.flatMap((chain) => {
41
+ const base = chain.blockExplorers?.default.url;
42
+ return base ? [[chain.id, base]] : [];
43
+ }));
44
+ /**
45
+ * Formats an envelope into a Slack Block Kit message (`{ blocks, text }`) using a
46
+ * per-event layout. Every message shares the cross-cutting rules: a header (the
47
+ * subscription's `context.title` when set, else the event's friendly name), an
48
+ * optional description section, an event-specific lead + fields grid, and a
49
+ * trailing context line that always preserves the raw event type/id/chain/time.
50
+ * Pure and synchronous — all inputs come from the envelope or static chain data.
51
+ */
52
+ export function formatBlocks(envelope) {
53
+ const base = explorerBase[envelope.chainId];
54
+ const data = typeof envelope.data === 'object' && envelope.data !== null
55
+ ? envelope.data
56
+ : {};
57
+ const layout = renderEvent(envelope.type, data, base);
58
+ const blocks = [
59
+ {
60
+ text: {
61
+ emoji: true,
62
+ text: clamp(envelope.context?.title ?? layout.header, 150),
63
+ type: 'plain_text',
64
+ },
65
+ type: 'header',
66
+ },
67
+ ];
68
+ if (envelope.context?.description !== undefined)
69
+ blocks.push({
70
+ text: { text: escape(envelope.context.description), type: 'mrkdwn' },
71
+ type: 'section',
72
+ });
73
+ if (layout.lead !== undefined)
74
+ blocks.push({ text: { text: layout.lead, type: 'mrkdwn' }, type: 'section' });
75
+ if (layout.fields.length > 0)
76
+ blocks.push({ fields: layout.fields.slice(0, 10), type: 'section' });
77
+ const metadata = envelope.context?.metadata;
78
+ if (metadata && Object.keys(metadata).length > 0)
79
+ blocks.push({
80
+ fields: Object.entries(metadata)
81
+ .slice(0, 10)
82
+ .map(([key, value]) => ({
83
+ text: `*${escape(key)}*\n${escape(value)}`,
84
+ type: 'mrkdwn',
85
+ })),
86
+ type: 'section',
87
+ });
88
+ blocks.push({
89
+ // Keep the raw event type/id/chain/time here so event identity survives a
90
+ // custom `context.title` header.
91
+ elements: [
92
+ {
93
+ text: `\`${escape(envelope.id)}\` · \`${escape(envelope.type)}\` · chain ${envelope.chainId}${date(envelope.createdAt) ? ` · ${date(envelope.createdAt)}` : ''}`,
94
+ type: 'mrkdwn',
95
+ },
96
+ ],
97
+ type: 'context',
98
+ });
99
+ // The notification/push preview: a custom title when set, else the event's
100
+ // one-line summary (with the chain appended). Never contains mrkdwn link /
101
+ // `<!date>` syntax.
102
+ return {
103
+ blocks,
104
+ text: envelope.context?.title ?? `${layout.text} · chain ${envelope.chainId}`,
105
+ };
106
+ }
107
+ /** Dispatches to the per-event layout builder. */
108
+ function renderEvent(type, data, base) {
109
+ if (type === 'token:transfer')
110
+ return transferLayout(data, base);
111
+ if (type === 'transaction:included')
112
+ return transactionLayout(data, base);
113
+ if (type === 'log:emitted')
114
+ return logLayout(data, base);
115
+ if (type === 'block:created')
116
+ return blockLayout(data, base);
117
+ return pingLayout();
118
+ }
119
+ function transferLayout(data, base) {
120
+ const amount = str(data['amount']);
121
+ const token = typeof data['token'] === 'object' && data['token'] !== null
122
+ ? data['token']
123
+ : undefined;
124
+ const human = humanAmount(amount, token);
125
+ const sender = str(data['sender']);
126
+ const recipient = str(data['recipient']);
127
+ const tokenAddress = str(data['address']);
128
+ const fields = [];
129
+ if (tokenAddress !== undefined)
130
+ field(fields, 'Token', tokenLink(base, tokenAddress, token?.symbol));
131
+ if (amount !== undefined)
132
+ field(fields, 'Amount', escape(human ?? amount));
133
+ if (sender !== undefined)
134
+ field(fields, 'Sender', addressLink(base, sender));
135
+ if (recipient !== undefined)
136
+ field(fields, 'Recipient', addressLink(base, recipient));
137
+ field(fields, 'Block', blockLink(base, data['blockNumber']));
138
+ if (str(data['transactionHash']) !== undefined)
139
+ field(fields, 'Tx', txLink(base, str(data['transactionHash'])));
140
+ field(fields, 'Timestamp', date(str(data['timestamp'])));
141
+ const lead = sender !== undefined && recipient !== undefined
142
+ ? `*${escape(human ?? amount ?? 'Transfer')}* from ${addressLink(base, sender)} → ${addressLink(base, recipient)}`
143
+ : undefined;
144
+ return {
145
+ fields,
146
+ header: friendlyName['token:transfer'],
147
+ ...(lead === undefined ? {} : { lead }),
148
+ text: `Token transfer · ${human ?? amount ?? 'transfer'}`,
149
+ };
150
+ }
151
+ function transactionLayout(data, base) {
152
+ const meta = typeof data['meta'] === 'object' && data['meta'] !== null ? data['meta'] : undefined;
153
+ const receipt = meta && typeof meta['receipt'] === 'object'
154
+ ? meta['receipt']
155
+ : undefined;
156
+ const status = receipt ? str(receipt['status']) : undefined;
157
+ const reverted = status === 'reverted';
158
+ const type = str(data['type']);
159
+ const sender = str(data['sender']);
160
+ const contractCreation = data['recipient'] === null;
161
+ const recipient = str(data['recipient']);
162
+ const recipientText = contractCreation
163
+ ? 'contract creation'
164
+ : recipient && addressLink(base, recipient);
165
+ const calls = Array.isArray(data['calls']) ? data['calls'] : undefined;
166
+ const fields = [];
167
+ if (status !== undefined)
168
+ field(fields, 'Status', escape(status));
169
+ if (type !== undefined)
170
+ field(fields, 'Type', escape(type));
171
+ if (sender !== undefined)
172
+ field(fields, 'Sender', addressLink(base, sender));
173
+ if (recipientText)
174
+ field(fields, 'Recipient', recipientText);
175
+ if (str(data['value']) !== undefined)
176
+ field(fields, 'Value', escape(str(data['value'])));
177
+ if (str(data['hash']) !== undefined)
178
+ field(fields, 'Tx', txLink(base, str(data['hash'])));
179
+ field(fields, 'Block', data['blockNumber'] === null ? 'pending' : blockLink(base, data['blockNumber']));
180
+ const gas = scalar(data['gas']);
181
+ const gasPrice = scalar(data['gasPrice']);
182
+ if (gas !== undefined)
183
+ field(fields, 'Gas', gasPrice === undefined ? escape(gas) : `${escape(gas)} @ ${escape(gasPrice)}`);
184
+ if (calls && calls.length > 0)
185
+ field(fields, 'Calls', String(calls.length));
186
+ field(fields, 'Timestamp', date(str(data['timestamp'])));
187
+ const accent = reverted ? ':x: *reverted* · ' : status === 'success' ? ':white_check_mark: ' : '';
188
+ const flow = sender !== undefined && recipientText
189
+ ? `${addressLink(base, sender)} → ${recipientText}`
190
+ : undefined;
191
+ const lead = flow === undefined && type === undefined && accent === ''
192
+ ? undefined
193
+ : `${accent}${type ? `${escape(type)} ` : ''}${flow ?? ''}`.trim();
194
+ return {
195
+ fields,
196
+ header: reverted ? ':x: Transaction reverted' : friendlyName['transaction:included'],
197
+ ...(lead ? { lead } : {}),
198
+ text: `Transaction included${status ? ` · ${status}` : ''}`,
199
+ };
200
+ }
201
+ function logLayout(data, base) {
202
+ const event = typeof data['event'] === 'object' && data['event'] !== null
203
+ ? data['event']
204
+ : undefined;
205
+ const name = event ? str(event['name']) : undefined;
206
+ const decoded = name !== undefined;
207
+ const address = str(data['address']);
208
+ const args = typeof data['args'] === 'object' && data['args'] !== null
209
+ ? data['args']
210
+ : undefined;
211
+ // Reserve the always-present coordinates first, then fill remaining slots (up
212
+ // to 10 total) with decoded args, with a trailing "…and N more" if truncated.
213
+ const fields = [];
214
+ if (address !== undefined)
215
+ field(fields, 'Contract', addressLink(base, address));
216
+ if (!decoded && event && str(event['topic0']) !== undefined)
217
+ field(fields, 'Topic0', escape(truncateHash(str(event['topic0']))));
218
+ field(fields, 'Block', blockLink(base, data['blockNumber']));
219
+ if (str(data['transactionHash']) !== undefined)
220
+ field(fields, 'Tx', txLink(base, str(data['transactionHash'])));
221
+ if (!decoded)
222
+ field(fields, 'Log index', scalar(data['logIndex']));
223
+ field(fields, 'Timestamp', date(str(data['timestamp'])));
224
+ if (decoded && args) {
225
+ const entries = Object.entries(args);
226
+ const room = Math.max(0, 10 - fields.length);
227
+ for (const [key, value] of entries.slice(0, room))
228
+ field(fields, key, argValue(value, base));
229
+ if (entries.length > room)
230
+ field(fields, '', `…and ${entries.length - room} more`);
231
+ }
232
+ const lead = decoded
233
+ ? `*${escape(name)}* on ${address ? addressLink(base, address) : 'contract'}`
234
+ : address !== undefined
235
+ ? `Log on ${addressLink(base, address)}${event && str(event['topic0'])
236
+ ? ` · topic0 ${escape(truncateHash(str(event['topic0'])))}`
237
+ : ''}`
238
+ : undefined;
239
+ return {
240
+ fields,
241
+ header: decoded ? clamp(`:label: Log: ${name}`, 150) : friendlyName['log:emitted'],
242
+ ...(lead === undefined ? {} : { lead }),
243
+ text: decoded
244
+ ? `Log: ${name}${address ? ` · ${truncateAddress(address)}` : ''}`
245
+ : `Log emitted${address ? ` · ${truncateAddress(address)}` : ''}`,
246
+ };
247
+ }
248
+ function blockLayout(data, base) {
249
+ const number = scalar(data['number']);
250
+ const txCount = scalar(data['transactionCount']);
251
+ const gasUsedNum = data['gasUsed'];
252
+ const gasLimitNum = data['gasLimit'];
253
+ const gasUsed = scalar(gasUsedNum);
254
+ const gasLimit = scalar(gasLimitNum);
255
+ const miner = str(data['miner']);
256
+ const proposer = str(data['proposer']);
257
+ const hash = str(data['hash']);
258
+ const fields = [];
259
+ field(fields, 'Number', blockLink(base, data['number']));
260
+ field(fields, 'Txns', txCount);
261
+ if (gasUsed !== undefined && gasLimit !== undefined)
262
+ field(fields, 'Gas', `${escape(gasUsed)} / ${escape(gasLimit)}`);
263
+ if (miner !== undefined)
264
+ field(fields, 'Producer', addressLink(base, miner));
265
+ if (proposer !== undefined)
266
+ field(fields, 'Proposer', addressLink(base, proposer));
267
+ if (hash !== undefined)
268
+ field(fields, 'Hash', blockHashLink(base, hash));
269
+ field(fields, 'Timestamp', date(str(data['timestamp'])));
270
+ const percent = typeof gasUsedNum === 'number' && typeof gasLimitNum === 'number' && gasLimitNum > 0
271
+ ? ` (${((gasUsedNum / gasLimitNum) * 100).toFixed(1)}%)`
272
+ : '';
273
+ const lead = txCount !== undefined
274
+ ? `*${escape(txCount)}* transactions${gasUsed !== undefined && gasLimit !== undefined
275
+ ? ` · gas ${escape(gasUsed)} / ${escape(gasLimit)}${percent}`
276
+ : ''}`
277
+ : undefined;
278
+ return {
279
+ fields,
280
+ header: number === undefined
281
+ ? friendlyName['block:created']
282
+ : clamp(`:link: Block created #${number}`, 150),
283
+ ...(lead === undefined ? {} : { lead }),
284
+ text: `Block created${number === undefined ? '' : ` #${number}`}${txCount === undefined ? '' : ` · ${txCount} txns`}`,
285
+ };
286
+ }
287
+ function pingLayout() {
288
+ return {
289
+ fields: [],
290
+ header: friendlyName.ping,
291
+ lead: 'Your Slack destination is wired up correctly.',
292
+ text: 'Webhook test ping',
293
+ };
294
+ }
295
+ /** Appends a `*Label*\nvalue` field when the value is present. */
296
+ function field(fields, label, value) {
297
+ if (value === undefined)
298
+ return;
299
+ fields.push({ text: label ? `*${label}*\n${value}` : value, type: 'mrkdwn' });
300
+ }
301
+ /** Renders a human token amount (`10.00 USDC`) from base units + metadata. */
302
+ function humanAmount(amount, token) {
303
+ if (amount === undefined)
304
+ return undefined;
305
+ if (token?.decimals === undefined)
306
+ return amount;
307
+ try {
308
+ const formatted = formatUnits(BigInt(amount), token.decimals);
309
+ return token.symbol ? `${formatted} ${token.symbol}` : formatted;
310
+ }
311
+ catch {
312
+ return amount;
313
+ }
314
+ }
315
+ /** Renders a decoded log arg: address args link, everything else escaped text. */
316
+ function argValue(value, base) {
317
+ if (typeof value === 'string' && /^0x[0-9a-fA-F]{40}$/.test(value))
318
+ return addressLink(base, value);
319
+ return escape(scalar(value) ?? JSON.stringify(value));
320
+ }
321
+ /** `<base/address/…|0x…>` when an explorer is known, else plain truncated text. */
322
+ function addressLink(base, address) {
323
+ return link(base, 'address', address, truncateAddress(address));
324
+ }
325
+ /** `<base/tx/…|0x…>` for a transaction hash. */
326
+ function txLink(base, hash) {
327
+ return link(base, 'tx', hash, truncateHash(hash));
328
+ }
329
+ /** `<base/token/…|SYMBOL>` (or truncated address) for a token contract. */
330
+ function tokenLink(base, address, symbol) {
331
+ return link(base, 'token', address, symbol ?? truncateAddress(address));
332
+ }
333
+ /** `<base/block/N|N>` for a block number (accepts number/string). */
334
+ function blockLink(base, number) {
335
+ const id = scalar(number);
336
+ if (id === undefined)
337
+ return undefined;
338
+ return link(base, 'block', id, id);
339
+ }
340
+ /** `<base/block/0x…|0x…>` linking a block by its hash. */
341
+ function blockHashLink(base, hash) {
342
+ return link(base, 'block', hash, truncateHash(hash));
343
+ }
344
+ /** Builds a Slack mrkdwn link, falling back to escaped plain text with no base. */
345
+ function link(base, path, id, label) {
346
+ if (!base)
347
+ return escape(label);
348
+ return `<${base}/${path}/${encodeURIComponent(id)}|${escape(label)}>`;
349
+ }
350
+ /** Localized time via Slack's `<!date>` token; `undefined` for a bad timestamp. */
351
+ function date(iso) {
352
+ if (iso === undefined)
353
+ return undefined;
354
+ const ms = Date.parse(iso);
355
+ if (Number.isNaN(ms))
356
+ return undefined;
357
+ return `<!date^${Math.floor(ms / 1_000)}^{date_short_pretty} {time}|${escape(iso)}>`;
358
+ }
359
+ /** Middle-truncates an address to `0x9e39…1754` (6+4). */
360
+ function truncateAddress(value) {
361
+ return value.length > 12 ? `${value.slice(0, 6)}…${value.slice(-4)}` : value;
362
+ }
363
+ /** Middle-truncates a hash to `0x3d24a706…24bbf9d3` (10+8). */
364
+ function truncateHash(value) {
365
+ return value.length > 20 ? `${value.slice(0, 10)}…${value.slice(-8)}` : value;
366
+ }
367
+ /** Escapes the three mrkdwn-significant characters in interpolated values. */
368
+ function escape(value) {
369
+ return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
370
+ }
371
+ /** Clamps a header string to Slack's length cap. */
372
+ function clamp(value, max) {
373
+ return value.length > max ? `${value.slice(0, max - 1)}…` : value;
374
+ }
375
+ /** Reads a string value, or `undefined` when the key isn't a string. */
376
+ function str(value) {
377
+ return typeof value === 'string' ? value : undefined;
378
+ }
379
+ /** Reads a scalar (number/bigint/boolean/string) value as a plain string. */
380
+ function scalar(value) {
381
+ if (typeof value === 'number' || typeof value === 'bigint' || typeof value === 'boolean')
382
+ return String(value);
383
+ return typeof value === 'string' ? value : undefined;
384
+ }
385
+ /** Host that Slack incoming-webhook URLs must use. */
386
+ const slackWebhookHost = 'hooks.slack.com';
387
+ /**
388
+ * Validates a `slack` destination's incoming-webhook URL: must be `https` and
389
+ * hosted at {@link slackWebhookHost}. The host lock keeps `slack` destinations
390
+ * from becoming a generic "POST an unsigned message anywhere" primitive — a
391
+ * `slack` delivery carries no signature, so it must only ever reach Slack.
392
+ */
393
+ export function assertSlackUrl(input) {
394
+ let url;
395
+ try {
396
+ url = new URL(input);
397
+ }
398
+ catch {
399
+ throw new WebhookDestination.InvalidUrlError('malformed', input);
400
+ }
401
+ if (url.protocol !== 'https:')
402
+ throw new WebhookDestination.InvalidUrlError('protocol', input);
403
+ if (url.username || url.password)
404
+ throw new WebhookDestination.InvalidUrlError('credentials', input);
405
+ if (url.hostname !== slackWebhookHost)
406
+ throw new WebhookDestination.InvalidUrlError('slack_host', input);
407
+ return url;
408
+ }
409
+ /**
410
+ * Masks the secret path of a Slack incoming-webhook URL for logging, keeping the
411
+ * host so the destination is still recognizable: `https://hooks.slack.com/…`.
412
+ * Falls back to the bare origin if the URL can't be parsed.
413
+ */
414
+ export function redactSlackUrl(url) {
415
+ try {
416
+ return `${new URL(url).origin}/…`;
417
+ }
418
+ catch {
419
+ return 'https://hooks.slack.com/…';
420
+ }
421
+ }
422
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/internal/webhookDestinations/slack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import * as WebhookDestination from '../WebhookDestination.js';
2
+ /**
3
+ * Builds a `url` destination. Its `deliver` serializes the envelope, signs the
4
+ * raw body with the subscription secret (HMAC in `tempo-signature`), re-runs the
5
+ * SSRF guard, and POSTs it rejecting redirects. The URL is SSRF-validated at
6
+ * construction time too. Deliver with `.deliver({ envelope, secret })`.
7
+ */
8
+ export declare function url(url: string): WebhookDestination.Instance<WebhookDestination.Url>;
9
+ /**
10
+ * Validates a subscriber URL, rejecting non-`https`, embedded credentials, and
11
+ * private/loopback/link-local/metadata hosts. Returns the parsed URL.
12
+ *
13
+ * This is a static guard; DNS-rebinding defense (resolving + re-checking at
14
+ * delivery time) is layered on later.
15
+ */
16
+ export declare function assertDeliverableUrl(input: string): URL;
17
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../../src/internal/webhookDestinations/url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,kBAAkB,MAAM,0BAA0B,CAAA;AAE9D;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAyCpF;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAevD"}