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.
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/dist/ApiKey.d.ts +65 -0
- package/dist/ApiKey.d.ts.map +1 -0
- package/dist/ApiKey.js +105 -0
- package/dist/ApiKey.js.map +1 -0
- package/dist/ApiKeySource.d.ts +166 -0
- package/dist/ApiKeySource.d.ts.map +1 -0
- package/dist/ApiKeySource.js +234 -0
- package/dist/ApiKeySource.js.map +1 -0
- package/dist/App.d.ts +19317 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +612 -0
- package/dist/App.js.map +1 -0
- package/dist/Assets.d.ts +44 -0
- package/dist/Assets.d.ts.map +1 -0
- package/dist/Assets.js +23 -0
- package/dist/Assets.js.map +1 -0
- package/dist/Auth.d.ts +2 -0
- package/dist/Auth.d.ts.map +1 -0
- package/dist/Auth.js +2 -0
- package/dist/Auth.js.map +1 -0
- package/dist/Cli.d.ts +21 -0
- package/dist/Cli.d.ts.map +1 -0
- package/dist/Cli.js +13 -0
- package/dist/Cli.js.map +1 -0
- package/dist/Client.d.ts +20 -0
- package/dist/Client.d.ts.map +1 -0
- package/dist/Client.js +24 -0
- package/dist/Client.js.map +1 -0
- package/dist/Metrics.d.ts +70 -0
- package/dist/Metrics.d.ts.map +1 -0
- package/dist/Metrics.js +91 -0
- package/dist/Metrics.js.map +1 -0
- package/dist/Scope.d.ts +35 -0
- package/dist/Scope.d.ts.map +1 -0
- package/dist/Scope.js +38 -0
- package/dist/Scope.js.map +1 -0
- package/dist/Webhooks.d.ts +79 -0
- package/dist/Webhooks.d.ts.map +1 -0
- package/dist/Webhooks.js +107 -0
- package/dist/Webhooks.js.map +1 -0
- package/dist/admin/Access.d.ts +41 -0
- package/dist/admin/Access.d.ts.map +1 -0
- package/dist/admin/Access.js +75 -0
- package/dist/admin/Access.js.map +1 -0
- package/dist/admin/App.d.ts +1221 -0
- package/dist/admin/App.d.ts.map +1 -0
- package/dist/admin/App.js +113 -0
- package/dist/admin/App.js.map +1 -0
- package/dist/admin/apps/api-keys.d.ts +209 -0
- package/dist/admin/apps/api-keys.d.ts.map +1 -0
- package/dist/admin/apps/api-keys.js +129 -0
- package/dist/admin/apps/api-keys.js.map +1 -0
- package/dist/admin/apps/scopes.d.ts +46 -0
- package/dist/admin/apps/scopes.d.ts.map +1 -0
- package/dist/admin/apps/scopes.js +41 -0
- package/dist/admin/apps/scopes.js.map +1 -0
- package/dist/admin/apps/verified-tokens.d.ts +1206 -0
- package/dist/admin/apps/verified-tokens.d.ts.map +1 -0
- package/dist/admin/apps/verified-tokens.js +485 -0
- package/dist/admin/apps/verified-tokens.js.map +1 -0
- package/dist/admin/index.d.ts +3 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +3 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/ui.generated.d.ts +11 -0
- package/dist/admin/ui.generated.d.ts.map +1 -0
- package/dist/admin/ui.generated.js +43 -0
- package/dist/admin/ui.generated.js.map +1 -0
- package/dist/apps/activities.d.ts +18725 -0
- package/dist/apps/activities.d.ts.map +1 -0
- package/dist/apps/activities.js +3138 -0
- package/dist/apps/activities.js.map +1 -0
- package/dist/apps/addresses.d.ts +3662 -0
- package/dist/apps/addresses.d.ts.map +1 -0
- package/dist/apps/addresses.js +22 -0
- package/dist/apps/addresses.js.map +1 -0
- package/dist/apps/balances.d.ts +342 -0
- package/dist/apps/balances.d.ts.map +1 -0
- package/dist/apps/balances.js +393 -0
- package/dist/apps/balances.js.map +1 -0
- package/dist/apps/blocks.d.ts +931 -0
- package/dist/apps/blocks.d.ts.map +1 -0
- package/dist/apps/blocks.js +689 -0
- package/dist/apps/blocks.js.map +1 -0
- package/dist/apps/coingecko.d.ts +1053 -0
- package/dist/apps/coingecko.d.ts.map +1 -0
- package/dist/apps/coingecko.js +1015 -0
- package/dist/apps/coingecko.js.map +1 -0
- package/dist/apps/exchanges.d.ts +3000 -0
- package/dist/apps/exchanges.d.ts.map +1 -0
- package/dist/apps/exchanges.js +3570 -0
- package/dist/apps/exchanges.js.map +1 -0
- package/dist/apps/fee-amm.d.ts +640 -0
- package/dist/apps/fee-amm.d.ts.map +1 -0
- package/dist/apps/fee-amm.js +815 -0
- package/dist/apps/fee-amm.js.map +1 -0
- package/dist/apps/indexer.d.ts +116 -0
- package/dist/apps/indexer.d.ts.map +1 -0
- package/dist/apps/indexer.js +270 -0
- package/dist/apps/indexer.js.map +1 -0
- package/dist/apps/receipts.d.ts +1438 -0
- package/dist/apps/receipts.d.ts.map +1 -0
- package/dist/apps/receipts.js +874 -0
- package/dist/apps/receipts.js.map +1 -0
- package/dist/apps/rpc.d.ts +173 -0
- package/dist/apps/rpc.d.ts.map +1 -0
- package/dist/apps/rpc.js +191 -0
- package/dist/apps/rpc.js.map +1 -0
- package/dist/apps/tokenlist.d.ts +192 -0
- package/dist/apps/tokenlist.d.ts.map +1 -0
- package/dist/apps/tokenlist.js +153 -0
- package/dist/apps/tokenlist.js.map +1 -0
- package/dist/apps/tokens.d.ts +2246 -0
- package/dist/apps/tokens.d.ts.map +1 -0
- package/dist/apps/tokens.js +1789 -0
- package/dist/apps/tokens.js.map +1 -0
- package/dist/apps/transactions.d.ts +2327 -0
- package/dist/apps/transactions.d.ts.map +1 -0
- package/dist/apps/transactions.js +975 -0
- package/dist/apps/transactions.js.map +1 -0
- package/dist/apps/transfers.d.ts +589 -0
- package/dist/apps/transfers.d.ts.map +1 -0
- package/dist/apps/transfers.js +769 -0
- package/dist/apps/transfers.js.map +1 -0
- package/dist/apps/verified-tokens.d.ts +544 -0
- package/dist/apps/verified-tokens.d.ts.map +1 -0
- package/dist/apps/verified-tokens.js +234 -0
- package/dist/apps/verified-tokens.js.map +1 -0
- package/dist/apps/webhooks.d.ts +7684 -0
- package/dist/apps/webhooks.d.ts.map +1 -0
- package/dist/apps/webhooks.js +2112 -0
- package/dist/apps/webhooks.js.map +1 -0
- package/dist/cloudflare.d.ts +32 -0
- package/dist/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare.js +45 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/Auth.d.ts +298 -0
- package/dist/internal/Auth.d.ts.map +1 -0
- package/dist/internal/Auth.js +618 -0
- package/dist/internal/Auth.js.map +1 -0
- package/dist/internal/Cache.d.ts +74 -0
- package/dist/internal/Cache.d.ts.map +1 -0
- package/dist/internal/Cache.js +215 -0
- package/dist/internal/Cache.js.map +1 -0
- package/dist/internal/Cursor.d.ts +79 -0
- package/dist/internal/Cursor.d.ts.map +1 -0
- package/dist/internal/Cursor.js +116 -0
- package/dist/internal/Cursor.js.map +1 -0
- package/dist/internal/EdgeCache.d.ts +59 -0
- package/dist/internal/EdgeCache.d.ts.map +1 -0
- package/dist/internal/EdgeCache.js +174 -0
- package/dist/internal/EdgeCache.js.map +1 -0
- package/dist/internal/Log.d.ts +104 -0
- package/dist/internal/Log.d.ts.map +1 -0
- package/dist/internal/Log.js +118 -0
- package/dist/internal/Log.js.map +1 -0
- package/dist/internal/MetricSink.d.ts +65 -0
- package/dist/internal/MetricSink.d.ts.map +1 -0
- package/dist/internal/MetricSink.js +146 -0
- package/dist/internal/MetricSink.js.map +1 -0
- package/dist/internal/Mpp.d.ts +71 -0
- package/dist/internal/Mpp.d.ts.map +1 -0
- package/dist/internal/Mpp.js +105 -0
- package/dist/internal/Mpp.js.map +1 -0
- package/dist/internal/OpenApi.d.ts +313 -0
- package/dist/internal/OpenApi.d.ts.map +1 -0
- package/dist/internal/OpenApi.fonts.d.ts +2 -0
- package/dist/internal/OpenApi.fonts.d.ts.map +1 -0
- package/dist/internal/OpenApi.fonts.js +39 -0
- package/dist/internal/OpenApi.fonts.js.map +1 -0
- package/dist/internal/OpenApi.js +335 -0
- package/dist/internal/OpenApi.js.map +1 -0
- package/dist/internal/OpenApi.logo.d.ts +6 -0
- package/dist/internal/OpenApi.logo.d.ts.map +1 -0
- package/dist/internal/OpenApi.logo.js +19 -0
- package/dist/internal/OpenApi.logo.js.map +1 -0
- package/dist/internal/Path.d.ts +5 -0
- package/dist/internal/Path.d.ts.map +1 -0
- package/dist/internal/Path.js +16 -0
- package/dist/internal/Path.js.map +1 -0
- package/dist/internal/RateLimit.d.ts +60 -0
- package/dist/internal/RateLimit.d.ts.map +1 -0
- package/dist/internal/RateLimit.js +48 -0
- package/dist/internal/RateLimit.js.map +1 -0
- package/dist/internal/Response.d.ts +132 -0
- package/dist/internal/Response.d.ts.map +1 -0
- package/dist/internal/Response.js +72 -0
- package/dist/internal/Response.js.map +1 -0
- package/dist/internal/Schema.d.ts +257 -0
- package/dist/internal/Schema.d.ts.map +1 -0
- package/dist/internal/Schema.js +360 -0
- package/dist/internal/Schema.js.map +1 -0
- package/dist/internal/Store.d.ts +204 -0
- package/dist/internal/Store.d.ts.map +1 -0
- package/dist/internal/Store.js +291 -0
- package/dist/internal/Store.js.map +1 -0
- package/dist/internal/Tidx.d.ts +120 -0
- package/dist/internal/Tidx.d.ts.map +1 -0
- package/dist/internal/Tidx.js +156 -0
- package/dist/internal/Tidx.js.map +1 -0
- package/dist/internal/Timing.d.ts +22 -0
- package/dist/internal/Timing.d.ts.map +1 -0
- package/dist/internal/Timing.js +32 -0
- package/dist/internal/Timing.js.map +1 -0
- package/dist/internal/Ttl.d.ts +25 -0
- package/dist/internal/Ttl.d.ts.map +1 -0
- package/dist/internal/Ttl.js +49 -0
- package/dist/internal/Ttl.js.map +1 -0
- package/dist/internal/Value.d.ts +47 -0
- package/dist/internal/Value.d.ts.map +1 -0
- package/dist/internal/Value.js +122 -0
- package/dist/internal/Value.js.map +1 -0
- package/dist/internal/VerifiedTokens.d.ts +228 -0
- package/dist/internal/VerifiedTokens.d.ts.map +1 -0
- package/dist/internal/VerifiedTokens.js +450 -0
- package/dist/internal/VerifiedTokens.js.map +1 -0
- package/dist/internal/Viem.d.ts +2082 -0
- package/dist/internal/Viem.d.ts.map +1 -0
- package/dist/internal/Viem.js +63 -0
- package/dist/internal/Viem.js.map +1 -0
- package/dist/internal/WebhookDestination.d.ts +198 -0
- package/dist/internal/WebhookDestination.d.ts.map +1 -0
- package/dist/internal/WebhookDestination.js +170 -0
- package/dist/internal/WebhookDestination.js.map +1 -0
- package/dist/internal/Webhooks.d.ts +433 -0
- package/dist/internal/Webhooks.d.ts.map +1 -0
- package/dist/internal/Webhooks.js +489 -0
- package/dist/internal/Webhooks.js.map +1 -0
- package/dist/internal/webhookDestinations/betterStack.d.ts +26 -0
- package/dist/internal/webhookDestinations/betterStack.d.ts.map +1 -0
- package/dist/internal/webhookDestinations/betterStack.js +76 -0
- package/dist/internal/webhookDestinations/betterStack.js.map +1 -0
- package/dist/internal/webhookDestinations/slack.d.ts +59 -0
- package/dist/internal/webhookDestinations/slack.d.ts.map +1 -0
- package/dist/internal/webhookDestinations/slack.js +422 -0
- package/dist/internal/webhookDestinations/slack.js.map +1 -0
- package/dist/internal/webhookDestinations/url.d.ts +17 -0
- package/dist/internal/webhookDestinations/url.d.ts.map +1 -0
- package/dist/internal/webhookDestinations/url.js +130 -0
- package/dist/internal/webhookDestinations/url.js.map +1 -0
- package/dist/openrpc.json +5302 -0
- package/package.json +46 -4
- package/seeds/31318/icons/0x20c0000000000000000000000000000000000000.svg +1 -0
- package/seeds/31318/icons/0x20c0000000000000000000000000000000000001.svg +1 -0
- package/seeds/31318/icons/0x20c0000000000000000000000000000000000002.svg +1 -0
- package/seeds/31318/icons/0x20c0000000000000000000000000000000000003.svg +1 -0
- package/seeds/31318/verified-tokens.json +30 -0
- package/seeds/4217/icons/0x20c0000000000000000000000000000000000000.svg +25 -0
- package/seeds/4217/icons/0x20c000000000000000000000048c8f36df1c9a4a.svg +1 -0
- package/seeds/4217/icons/0x20c0000000000000000000000520792dcccccccc.svg +1 -0
- package/seeds/4217/icons/0x20c0000000000000000000000a6da882d075a4c3.svg +4 -0
- package/seeds/4217/icons/0x20c000000000000000000000111111111e910f0f.svg +30 -0
- package/seeds/4217/icons/0x20c00000000000000000000014f22ca97301eb73.svg +1 -0
- package/seeds/4217/icons/0x20c0000000000000000000001621e21f71cf12fb.svg +1 -0
- package/seeds/4217/icons/0x20c0000000000000000000002f52d5cc21a3207b.svg +1 -0
- package/seeds/4217/icons/0x20c0000000000000000000003158081efd85bfc2.svg +11 -0
- package/seeds/4217/icons/0x20c0000000000000000000003554d28269e0f3c2.svg +1 -0
- package/seeds/4217/icons/0x20c000000000000000000000383a23bacb546ab9.svg +1 -0
- package/seeds/4217/icons/0x20c00000000000000000000042109aef2f8b28e1.png +0 -0
- package/seeds/4217/icons/0x20c0000000000000000000005c0bac7cef389a11.svg +1 -0
- package/seeds/4217/icons/0x20c0000000000000000000006fd9a167923ba194.png +0 -0
- package/seeds/4217/icons/0x20c0000000000000000000007f7ba549dd0251b9.svg +1 -0
- package/seeds/4217/icons/0x20c0000000000000000000008191667423f70e67.svg +5 -0
- package/seeds/4217/icons/0x20c0000000000000000000008ee4fcff88888888.svg +1 -0
- package/seeds/4217/icons/0x20c0000000000000000000009a4a4b17e0dc6651.svg +1 -0
- package/seeds/4217/icons/0x20c000000000000000000000ab02d39df30bd17e.svg +1 -0
- package/seeds/4217/icons/0x20c000000000000000000000ae247a1130450f09.svg +1 -0
- package/seeds/4217/icons/0x20c000000000000000000000aeed2ec36a54d0e5.svg +1 -0
- package/seeds/4217/icons/0x20c000000000000000000000b9537d11c60e8b50.svg +1 -0
- package/seeds/4217/icons/0x20c000000000000000000000bd95bfb69fbe6ce3.svg +1 -0
- package/seeds/4217/icons/0x20c000000000000000000000c412ec89d0c08be5.svg +1 -0
- package/seeds/4217/icons/0x20c000000000000000000000f047dd7018e50367.png +0 -0
- package/seeds/4217/verified-tokens.json +177 -0
- package/seeds/42431/icons/0x20c0000000000000000000000000000000000000.svg +25 -0
- package/seeds/42431/icons/0x20c0000000000000000000000000000000000001.svg +1 -0
- package/seeds/42431/icons/0x20c0000000000000000000000000000000000002.svg +1 -0
- package/seeds/42431/icons/0x20c0000000000000000000000000000000000003.svg +1 -0
- package/seeds/42431/icons/0x20c0000000000000000000009e8d7eb59b783726.svg +1 -0
- package/seeds/42431/icons/0x20c000000000000000000000d72572838bbee59c.svg +1 -0
- package/seeds/42431/verified-tokens.json +44 -0
- package/seeds/openrpc/README.md +27 -0
- package/seeds/openrpc/execution-apis.json +8989 -0
- package/src/ApiKey.test.ts +91 -0
- package/src/ApiKey.ts +122 -0
- package/src/ApiKeySource.test-d.ts +11 -0
- package/src/ApiKeySource.test.ts +295 -0
- package/src/ApiKeySource.ts +303 -0
- package/src/App.test-d.ts +38 -0
- package/src/App.test.ts +65927 -0
- package/src/App.ts +855 -0
- package/src/Assets.ts +58 -0
- package/src/Auth.ts +1 -0
- package/src/Cli.test.ts +81 -0
- package/src/Cli.ts +38 -0
- package/src/Client.test-d.ts +1438 -0
- package/src/Client.test.ts +134 -0
- package/src/Client.ts +45 -0
- package/src/Metrics.ts +154 -0
- package/src/Scope.ts +50 -0
- package/src/Webhooks.test.ts +49 -0
- package/src/Webhooks.ts +172 -0
- package/src/admin/Access.test.ts +130 -0
- package/src/admin/Access.ts +87 -0
- package/src/admin/App.test.ts +225 -0
- package/src/admin/App.ts +216 -0
- package/src/admin/apps/api-keys.test.ts +156 -0
- package/src/admin/apps/api-keys.ts +157 -0
- package/src/admin/apps/scopes.test.ts +52 -0
- package/src/admin/apps/scopes.ts +47 -0
- package/src/admin/apps/verified-tokens.test.ts +415 -0
- package/src/admin/apps/verified-tokens.ts +566 -0
- package/src/admin/index.ts +2 -0
- package/src/admin/ui/plugin.ts +135 -0
- package/src/admin/ui/src/components/Checkbox.tsx +22 -0
- package/src/admin/ui/src/components/Dialog.tsx +32 -0
- package/src/admin/ui/src/components/MobileProfile.tsx +31 -0
- package/src/admin/ui/src/components/Page.tsx +53 -0
- package/src/admin/ui/src/components/TempoLogo.tsx +37 -0
- package/src/admin/ui/src/fonts/Pilat-Demi.woff2 +0 -0
- package/src/admin/ui/src/fonts/Pilat-Regular.woff2 +0 -0
- package/src/admin/ui/src/lib/api-keys.ts +63 -0
- package/src/admin/ui/src/lib/client.ts +15 -0
- package/src/admin/ui/src/lib/config.ts +57 -0
- package/src/admin/ui/src/lib/query-client.ts +26 -0
- package/src/admin/ui/src/lib/scopes.ts +25 -0
- package/src/admin/ui/src/lib/verified-tokens.ts +89 -0
- package/src/admin/ui/src/lib/wagmi.ts +18 -0
- package/src/admin/ui/src/routeTree.gen.ts +104 -0
- package/src/admin/ui/src/router.tsx +25 -0
- package/src/admin/ui/src/routes/__root.tsx +219 -0
- package/src/admin/ui/src/routes/api-keys.tsx +329 -0
- package/src/admin/ui/src/routes/index.tsx +7 -0
- package/src/admin/ui/src/routes/verified-tokens.tsx +331 -0
- package/src/admin/ui/src/styles.css +20 -0
- package/src/admin/ui/tsconfig.json +16 -0
- package/src/admin/ui/vite.config.ts +29 -0
- package/src/admin/ui.generated.ts +60 -0
- package/src/apps/activities.test.ts +1020 -0
- package/src/apps/activities.ts +3934 -0
- package/src/apps/addresses.ts +24 -0
- package/src/apps/balances.test.ts +274 -0
- package/src/apps/balances.ts +533 -0
- package/src/apps/blocks.test.ts +385 -0
- package/src/apps/blocks.ts +896 -0
- package/src/apps/coingecko.test.ts +218 -0
- package/src/apps/coingecko.ts +1383 -0
- package/src/apps/exchanges.test.ts +958 -0
- package/src/apps/exchanges.ts +4773 -0
- package/src/apps/fee-amm.test.ts +321 -0
- package/src/apps/fee-amm.ts +1121 -0
- package/src/apps/indexer.test.ts +153 -0
- package/src/apps/indexer.ts +330 -0
- package/src/apps/receipts.test.ts +285 -0
- package/src/apps/receipts.ts +1193 -0
- package/src/apps/rpc.test.ts +302 -0
- package/src/apps/rpc.ts +222 -0
- package/src/apps/tokenlist.test.ts +80 -0
- package/src/apps/tokenlist.ts +207 -0
- package/src/apps/tokens.test.ts +1062 -0
- package/src/apps/tokens.ts +2292 -0
- package/src/apps/transactions.test.ts +408 -0
- package/src/apps/transactions.ts +1363 -0
- package/src/apps/transfers.test.ts +371 -0
- package/src/apps/transfers.ts +1116 -0
- package/src/apps/verified-tokens.test.ts +114 -0
- package/src/apps/verified-tokens.ts +295 -0
- package/src/apps/webhooks.test.ts +1937 -0
- package/src/apps/webhooks.ts +2926 -0
- package/src/cloudflare.ts +55 -0
- package/src/index.ts +15 -0
- package/src/internal/Auth.test.ts +980 -0
- package/src/internal/Auth.ts +1012 -0
- package/src/internal/Cache.test.ts +240 -0
- package/src/internal/Cache.ts +262 -0
- package/src/internal/Cursor.test.ts +100 -0
- package/src/internal/Cursor.ts +149 -0
- package/src/internal/EdgeCache.test.ts +234 -0
- package/src/internal/EdgeCache.ts +224 -0
- package/src/internal/Errors.ts +14 -0
- package/src/internal/Log.test.ts +244 -0
- package/src/internal/Log.ts +216 -0
- package/src/internal/MetricSink.ts +220 -0
- package/src/internal/Mpp.test.ts +64 -0
- package/src/internal/Mpp.ts +141 -0
- package/src/internal/OpenApi.fonts.ts +38 -0
- package/src/internal/OpenApi.logo.ts +18 -0
- package/src/internal/OpenApi.ts +488 -0
- package/src/internal/Path.test.ts +14 -0
- package/src/internal/Path.ts +15 -0
- package/src/internal/RateLimit.test.ts +93 -0
- package/src/internal/RateLimit.ts +93 -0
- package/src/internal/Response.ts +131 -0
- package/src/internal/Schema.test.ts +34 -0
- package/src/internal/Schema.ts +523 -0
- package/src/internal/Store.test.ts +545 -0
- package/src/internal/Store.ts +526 -0
- package/src/internal/Tidx.local.test.ts +33 -0
- package/src/internal/Tidx.test.ts +294 -0
- package/src/internal/Tidx.ts +238 -0
- package/src/internal/Timing.test.ts +22 -0
- package/src/internal/Timing.ts +62 -0
- package/src/internal/Ttl.test.ts +18 -0
- package/src/internal/Ttl.ts +59 -0
- package/src/internal/Value.ts +114 -0
- package/src/internal/VerifiedTokens.test.ts +333 -0
- package/src/internal/VerifiedTokens.ts +645 -0
- package/src/internal/Viem.test.ts +115 -0
- package/src/internal/Viem.ts +165 -0
- package/src/internal/WebhookDestination.test.ts +648 -0
- package/src/internal/WebhookDestination.ts +331 -0
- package/src/internal/Webhooks.test.ts +668 -0
- package/src/internal/Webhooks.ts +940 -0
- package/src/internal/webhookDestinations/betterStack.ts +91 -0
- package/src/internal/webhookDestinations/slack.ts +496 -0
- package/src/internal/webhookDestinations/url.ts +128 -0
- package/src/openrpc.json +5302 -0
package/dist/Assets.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary asset store for static API assets (e.g. token logos), keyed by the
|
|
3
|
+
* loader layout `<chainId>/<path>`. Token icons are content-addressed by address
|
|
4
|
+
* (`4217/icons/0x…`, no extension); the stored content-type carries the format.
|
|
5
|
+
* Shared by the main API ({@link App.create}'s `assets`, read) and the admin app
|
|
6
|
+
* (`Admin.create`'s `assets`, read + write).
|
|
7
|
+
*/
|
|
8
|
+
/** A static asset: its bytes plus content type. */
|
|
9
|
+
export type Asset = {
|
|
10
|
+
/** Asset bytes. */
|
|
11
|
+
body: ArrayBuffer;
|
|
12
|
+
/** MIME type to serve the asset with. */
|
|
13
|
+
contentType: string;
|
|
14
|
+
};
|
|
15
|
+
/** A binary asset store keyed by `<chainId>/<path>`. */
|
|
16
|
+
export type Assets = {
|
|
17
|
+
/** Reads an asset by `key`, or `undefined` when absent. */
|
|
18
|
+
get(key: string): Promise<Asset | undefined>;
|
|
19
|
+
/** Stores an asset at `key`, replacing any existing object. Omit for read-only stores. */
|
|
20
|
+
put?: ((key: string, asset: Asset) => Promise<void>) | undefined;
|
|
21
|
+
};
|
|
22
|
+
/** Backs {@link Assets} with a Cloudflare R2 bucket. */
|
|
23
|
+
export declare function cloudflareR2(bucket: cloudflareR2.Bucket): Assets;
|
|
24
|
+
export declare namespace cloudflareR2 {
|
|
25
|
+
/** Minimal Cloudflare R2 bucket shape used by this adapter. */
|
|
26
|
+
type Bucket = {
|
|
27
|
+
/** Gets an object, or `null` when absent. */
|
|
28
|
+
get(key: string): Promise<{
|
|
29
|
+
/** Reads the object body as bytes. */
|
|
30
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
31
|
+
/** HTTP metadata stored with the object. */
|
|
32
|
+
httpMetadata?: {
|
|
33
|
+
contentType?: string | undefined;
|
|
34
|
+
} | undefined;
|
|
35
|
+
} | null>;
|
|
36
|
+
/** Writes an object. */
|
|
37
|
+
put(key: string, value: ArrayBuffer, options?: {
|
|
38
|
+
httpMetadata?: {
|
|
39
|
+
contentType?: string | undefined;
|
|
40
|
+
} | undefined;
|
|
41
|
+
}): Promise<unknown>;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=Assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Assets.d.ts","sourceRoot":"","sources":["../src/Assets.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,mDAAmD;AACnD,MAAM,MAAM,KAAK,GAAG;IAClB,mBAAmB;IACnB,IAAI,EAAE,WAAW,CAAA;IACjB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,wDAAwD;AACxD,MAAM,MAAM,MAAM,GAAG;IACnB,2DAA2D;IAC3D,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;IAC5C,0FAA0F;IAC1F,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAA;CACjE,CAAA;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,GAAG,MAAM,CAahE;AAED,MAAM,CAAC,OAAO,WAAW,YAAY,CAAC;IACpC,+DAA+D;IAC/D,KAAK,MAAM,GAAG;QACZ,6CAA6C;QAC7C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;YACxB,sCAAsC;YACtC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;YACnC,4CAA4C;YAC5C,YAAY,CAAC,EAAE;gBAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;aAAE,GAAG,SAAS,CAAA;SAChE,GAAG,IAAI,CAAC,CAAA;QACT,wBAAwB;QACxB,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE;YAAE,YAAY,CAAC,EAAE;gBAAE,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;aAAE,GAAG,SAAS,CAAA;SAAE,GAC5E,OAAO,CAAC,OAAO,CAAC,CAAA;KACpB,CAAA;CACF"}
|
package/dist/Assets.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary asset store for static API assets (e.g. token logos), keyed by the
|
|
3
|
+
* loader layout `<chainId>/<path>`. Token icons are content-addressed by address
|
|
4
|
+
* (`4217/icons/0x…`, no extension); the stored content-type carries the format.
|
|
5
|
+
* Shared by the main API ({@link App.create}'s `assets`, read) and the admin app
|
|
6
|
+
* (`Admin.create`'s `assets`, read + write).
|
|
7
|
+
*/
|
|
8
|
+
/** Backs {@link Assets} with a Cloudflare R2 bucket. */
|
|
9
|
+
export function cloudflareR2(bucket) {
|
|
10
|
+
return {
|
|
11
|
+
async get(key) {
|
|
12
|
+
const object = await bucket.get(key);
|
|
13
|
+
if (!object)
|
|
14
|
+
return undefined;
|
|
15
|
+
return {
|
|
16
|
+
body: await object.arrayBuffer(),
|
|
17
|
+
contentType: object.httpMetadata?.contentType ?? 'application/octet-stream',
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
put: (key, { body, contentType }) => bucket.put(key, body, { httpMetadata: { contentType } }).then(() => undefined),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=Assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Assets.js","sourceRoot":"","sources":["../src/Assets.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,MAA2B;IACtD,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,GAAG;YACX,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACpC,IAAI,CAAC,MAAM;gBAAE,OAAO,SAAS,CAAA;YAC7B,OAAO;gBACL,IAAI,EAAE,MAAM,MAAM,CAAC,WAAW,EAAE;gBAChC,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,WAAW,IAAI,0BAA0B;aAC5E,CAAA;QACH,CAAC;QACD,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;KACjF,CAAA;AACH,CAAC"}
|
package/dist/Auth.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/Auth.js
ADDED
package/dist/Auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Auth.js","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/Cli.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Cli as incur_Cli, Fetch, type Openapi } from 'incur';
|
|
2
|
+
/** Creates an incur CLI backed by a hosted Tempo API. */
|
|
3
|
+
export declare function from(url: string | URL, options?: from.Options): incur_Cli.Cli<{}, undefined, undefined, undefined>;
|
|
4
|
+
export declare namespace from {
|
|
5
|
+
/** Options for creating a Tempo API CLI from a hosted API. */
|
|
6
|
+
type Options = {
|
|
7
|
+
/** CLI description. */
|
|
8
|
+
description?: string | undefined;
|
|
9
|
+
/** CLI name. */
|
|
10
|
+
name?: string | undefined;
|
|
11
|
+
/** OpenAPI document source. Relative paths resolve from the API URL. */
|
|
12
|
+
openapi?: Openapi.OpenAPISource | undefined;
|
|
13
|
+
/** OpenAPI command generation configuration. Defaults to namespace mode. */
|
|
14
|
+
openapiConfig?: Openapi.Config | undefined;
|
|
15
|
+
/** Request options applied to API calls. */
|
|
16
|
+
request?: Fetch.fromRequest.Options | undefined;
|
|
17
|
+
/** CLI version. */
|
|
18
|
+
version?: string | undefined;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=Cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.d.ts","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAE,KAAK,OAAO,EAAE,MAAM,OAAO,CAAA;AAE7D,yDAAyD;AACzD,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAE,IAAI,CAAC,OAAY,sDAgBjE;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,8DAA8D;IAC9D,KAAK,OAAO,GAAG;QACb,uBAAuB;QACvB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,gBAAgB;QAChB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,wEAAwE;QACxE,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,GAAG,SAAS,CAAA;QAC3C,4EAA4E;QAC5E,aAAa,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAA;QAC1C,4CAA4C;QAC5C,OAAO,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,SAAS,CAAA;QAC/C,mBAAmB;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;CACF"}
|
package/dist/Cli.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Cli as incur_Cli, Fetch } from 'incur';
|
|
2
|
+
/** Creates an incur CLI backed by a hosted Tempo API. */
|
|
3
|
+
export function from(url, options = {}) {
|
|
4
|
+
const { description = 'Tempo API CLI', name = 'tempo-api', openapi = 'openapi.json', request, version = '0.0.0', } = options;
|
|
5
|
+
return incur_Cli.create(name, {
|
|
6
|
+
description,
|
|
7
|
+
fetch: Fetch.fromRequest(url, request),
|
|
8
|
+
openapi,
|
|
9
|
+
openapiConfig: options.openapiConfig ?? { mode: 'namespace' },
|
|
10
|
+
version,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=Cli.js.map
|
package/dist/Cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.js","sourceRoot":"","sources":["../src/Cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,EAAgB,MAAM,OAAO,CAAA;AAE7D,yDAAyD;AACzD,MAAM,UAAU,IAAI,CAAC,GAAiB,EAAE,OAAO,GAAiB,EAAE;IAChE,MAAM,EACJ,WAAW,GAAG,eAAe,EAC7B,IAAI,GAAG,WAAW,EAClB,OAAO,GAAG,cAAc,EACxB,OAAO,EACP,OAAO,GAAG,OAAO,GAClB,GAAG,OAAO,CAAA;IAEX,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE;QAC5B,WAAW;QACX,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;QACtC,OAAO;QACP,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE;QAC7D,OAAO;KACR,CAAC,CAAA;AACJ,CAAC"}
|
package/dist/Client.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { hc, type ClientRequestOptions } from 'hono/client';
|
|
2
|
+
import type * as App from './App.js';
|
|
3
|
+
/** Default hosted Tempo API URL. */
|
|
4
|
+
export declare const defaultUrl = "https://api.tempo.xyz";
|
|
5
|
+
/** Creates a typed client for the hosted Tempo API. */
|
|
6
|
+
export declare function create(options?: create.Options): create.ReturnType;
|
|
7
|
+
/** Typed Hono client for the Tempo API. */
|
|
8
|
+
export type Client = ReturnType<typeof hc<App.App>>;
|
|
9
|
+
export declare namespace create {
|
|
10
|
+
/** Typed Hono client returned by {@link create}. */
|
|
11
|
+
type ReturnType = Client;
|
|
12
|
+
/** Options for creating a typed Tempo API client. */
|
|
13
|
+
type Options = ClientRequestOptions & {
|
|
14
|
+
/** API key sent on the canonical `tempo-api-key` header. */
|
|
15
|
+
apiKey?: string | undefined;
|
|
16
|
+
/** Tempo API URL. Defaults to {@link defaultUrl}. */
|
|
17
|
+
url?: string | undefined;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=Client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Client.d.ts","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAE3D,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAA;AAEpC,oCAAoC;AACpC,eAAO,MAAM,UAAU,0BAA0B,CAAA;AAEjD,uDAAuD;AACvD,wBAAgB,MAAM,CAAC,OAAO,GAAE,MAAM,CAAC,OAAY,GAAG,MAAM,CAAC,UAAU,CAKtE;AAED,2CAA2C;AAC3C,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAEnD,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,oDAAoD;IACpD,KAAK,UAAU,GAAG,MAAM,CAAA;IAExB,qDAAqD;IACrD,KAAK,OAAO,GAAG,oBAAoB,GAAG;QACpC,4DAA4D;QAC5D,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B,qDAAqD;QACrD,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KACzB,CAAA;CACF"}
|
package/dist/Client.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { hc } from 'hono/client';
|
|
2
|
+
/** Default hosted Tempo API URL. */
|
|
3
|
+
export const defaultUrl = 'https://api.tempo.xyz';
|
|
4
|
+
/** Creates a typed client for the hosted Tempo API. */
|
|
5
|
+
export function create(options = {}) {
|
|
6
|
+
const { apiKey, url = defaultUrl, ...client } = options;
|
|
7
|
+
const mergedHeaders = headers(client.headers, apiKey);
|
|
8
|
+
if (!mergedHeaders)
|
|
9
|
+
return hc(url, client);
|
|
10
|
+
return hc(url, { ...client, headers: mergedHeaders });
|
|
11
|
+
}
|
|
12
|
+
function headers(base, apiKey) {
|
|
13
|
+
if (!apiKey)
|
|
14
|
+
return base;
|
|
15
|
+
if (typeof base === 'function')
|
|
16
|
+
return async () => mergeHeaders(await base(), apiKey);
|
|
17
|
+
return mergeHeaders(base, apiKey);
|
|
18
|
+
}
|
|
19
|
+
function mergeHeaders(base, apiKey) {
|
|
20
|
+
const headers = new Headers(base);
|
|
21
|
+
headers.set('tempo-api-key', apiKey);
|
|
22
|
+
return Object.fromEntries(headers.entries());
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=Client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Client.js","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAA6B,MAAM,aAAa,CAAA;AAI3D,oCAAoC;AACpC,MAAM,CAAC,MAAM,UAAU,GAAG,uBAAuB,CAAA;AAEjD,uDAAuD;AACvD,MAAM,UAAU,MAAM,CAAC,OAAO,GAAmB,EAAE;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,UAAU,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,CAAA;IACvD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IACrD,IAAI,CAAC,aAAa;QAAE,OAAO,EAAE,CAAU,GAAG,EAAE,MAAM,CAAC,CAAA;IACnD,OAAO,EAAE,CAAU,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;AAChE,CAAC;AAkBD,SAAS,OAAO,CACd,IAAqC,EACrC,MAA0B;IAE1B,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IACxB,IAAI,OAAO,IAAI,KAAK,UAAU;QAAE,OAAO,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;IACrF,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,IAAwC,EAAE,MAAc;IAC5E,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;IACpC,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;AAC9C,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type * as Log from './internal/Log.js';
|
|
2
|
+
/** Tag values a metric backend accepts. */
|
|
3
|
+
export type Tags = Record<string, string | number | boolean | undefined | null>;
|
|
4
|
+
/**
|
|
5
|
+
* The bounded StatsD-style surface the built-in metric sinks emit to, plus an
|
|
6
|
+
* optional high-cardinality {@link Metrics.analytics} hook. Apps supply a
|
|
7
|
+
* concrete backend — e.g. {@link cloudflare} — so core carries no metrics-vendor
|
|
8
|
+
* dependency. Pass it as `metrics` to `App.create` and the webhook poller/queue
|
|
9
|
+
* handlers.
|
|
10
|
+
*/
|
|
11
|
+
export type Metrics = {
|
|
12
|
+
/**
|
|
13
|
+
* Optional per-request analytics sink, called once with the request-log entry
|
|
14
|
+
* for every response. Unlike the StatsD `count`/`gauge`/`histogram` surface
|
|
15
|
+
* (which stays low-cardinality), this hook carries the full entry — caller
|
|
16
|
+
* ids, org ids, route, status — for a wide-event store (e.g. ClickHouse).
|
|
17
|
+
* Attach it via {@link cloudflare}'s `analytics` option (or {@link from} for a
|
|
18
|
+
* custom backend); omit it to drop analytics. May be async; `App.create` does
|
|
19
|
+
* not await it.
|
|
20
|
+
*/
|
|
21
|
+
analytics?: ((entry: Log.Entry) => Promise<void> | void) | undefined;
|
|
22
|
+
/** Increments a counter; same name+tags are summed. */
|
|
23
|
+
count(name: string, value: number, tags?: Tags): void;
|
|
24
|
+
/** Ships accumulated metrics. */
|
|
25
|
+
flush(): void;
|
|
26
|
+
/** Sets a gauge; last write wins for the same name+tags. */
|
|
27
|
+
gauge(name: string, value: number, tags?: Tags): void;
|
|
28
|
+
/** Records a histogram observation. */
|
|
29
|
+
histogram(name: string, value: number, tags?: Tags): void;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Creates a {@link Metrics} from a value, type-checking it against the contract.
|
|
33
|
+
* The escape hatch for bringing your own backend (Datadog, Prometheus, …):
|
|
34
|
+
* author the implementation inline and have it validated against {@link Metrics}.
|
|
35
|
+
*/
|
|
36
|
+
export declare function from<const metrics extends Metrics>(metrics: metrics): metrics;
|
|
37
|
+
/** Options for the {@link cloudflare} preset and its backend. */
|
|
38
|
+
export declare namespace cloudflare {
|
|
39
|
+
/** Shared context handed to the {@link Options.analytics} factory. */
|
|
40
|
+
type Context = {
|
|
41
|
+
/** Resolved `enabled` flag; the analytics sink should drop events when false. */
|
|
42
|
+
enabled: boolean;
|
|
43
|
+
/** Deployment environment, also added as the `environment` global tag. */
|
|
44
|
+
environment?: string | undefined;
|
|
45
|
+
/** Service name, also added as the `service` global tag. */
|
|
46
|
+
service?: string | undefined;
|
|
47
|
+
};
|
|
48
|
+
type Options = {
|
|
49
|
+
/**
|
|
50
|
+
* Builds the per-request {@link Metrics.analytics} hook from the shared
|
|
51
|
+
* {@link Context}, so the sink reuses `enabled`/`environment`/`service`
|
|
52
|
+
* instead of repeating them. Omit to drop analytics.
|
|
53
|
+
*/
|
|
54
|
+
analytics?: ((context: Context) => Metrics['analytics']) | undefined;
|
|
55
|
+
/** Set false (e.g. in local `wrangler dev`) to drop every metric and analytics event. Default true. */
|
|
56
|
+
enabled?: boolean | undefined;
|
|
57
|
+
/** Deployment environment, added as the `environment` global tag and shared with {@link Options.analytics}. */
|
|
58
|
+
environment?: string | undefined;
|
|
59
|
+
/** Service name, added as the `service` global tag and shared with {@link Options.analytics}. */
|
|
60
|
+
service?: string | undefined;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A Cloudflare Workers {@link Metrics} — pass it as `metrics` to `App.create`
|
|
65
|
+
* and the webhook poller/queue handlers. It buffers metrics and emits them on
|
|
66
|
+
* `flush()` as `cwm-`-prefixed `console.log` lines (one per ≤250 KiB batch) for
|
|
67
|
+
* a Workers Logs → metrics pipeline to scrape; no external dependency.
|
|
68
|
+
*/
|
|
69
|
+
export declare function cloudflare(options?: cloudflare.Options): Metrics;
|
|
70
|
+
//# sourceMappingURL=Metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metrics.d.ts","sourceRoot":"","sources":["../src/Metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,mBAAmB,CAAA;AAE7C,2CAA2C;AAC3C,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC,CAAA;AAE/E;;;;;;GAMG;AACH,MAAM,MAAM,OAAO,GAAG;IACpB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAA;IACpE,uDAAuD;IACvD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IACrD,iCAAiC;IACjC,KAAK,IAAI,IAAI,CAAA;IACb,4DAA4D;IAC5D,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IACrD,uCAAuC;IACvC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAC1D,CAAA;AAED;;;;GAIG;AACH,wBAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,SAAS,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAE7E;AAED,iEAAiE;AACjE,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,sEAAsE;IACtE,KAAK,OAAO,GAAG;QACb,iFAAiF;QACjF,OAAO,EAAE,OAAO,CAAA;QAChB,0EAA0E;QAC1E,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,4DAA4D;QAC5D,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;IACD,KAAK,OAAO,GAAG;QACb;;;;WAIG;QACH,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,SAAS,CAAA;QACpE,uGAAuG;QACvG,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;QAC7B,+GAA+G;QAC/G,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAChC,iGAAiG;QACjG,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC7B,CAAA;CACF;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,UAAU,CAAC,OAAY,GAAG,OAAO,CA8EpE"}
|
package/dist/Metrics.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a {@link Metrics} from a value, type-checking it against the contract.
|
|
3
|
+
* The escape hatch for bringing your own backend (Datadog, Prometheus, …):
|
|
4
|
+
* author the implementation inline and have it validated against {@link Metrics}.
|
|
5
|
+
*/
|
|
6
|
+
export function from(metrics) {
|
|
7
|
+
return metrics;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A Cloudflare Workers {@link Metrics} — pass it as `metrics` to `App.create`
|
|
11
|
+
* and the webhook poller/queue handlers. It buffers metrics and emits them on
|
|
12
|
+
* `flush()` as `cwm-`-prefixed `console.log` lines (one per ≤250 KiB batch) for
|
|
13
|
+
* a Workers Logs → metrics pipeline to scrape; no external dependency.
|
|
14
|
+
*/
|
|
15
|
+
export function cloudflare(options = {}) {
|
|
16
|
+
const enabled = options.enabled !== false;
|
|
17
|
+
const analytics = options.analytics?.({
|
|
18
|
+
enabled,
|
|
19
|
+
environment: options.environment,
|
|
20
|
+
service: options.service,
|
|
21
|
+
});
|
|
22
|
+
if (!enabled)
|
|
23
|
+
return { analytics, count() { }, flush() { }, gauge() { }, histogram() { } };
|
|
24
|
+
const globalTags = {
|
|
25
|
+
...(options.environment === undefined ? {} : { environment: options.environment }),
|
|
26
|
+
...(options.service === undefined ? {} : { service: options.service }),
|
|
27
|
+
};
|
|
28
|
+
const counts = new Map();
|
|
29
|
+
const gauges = new Map();
|
|
30
|
+
const histograms = [];
|
|
31
|
+
const key = (name, tags) => {
|
|
32
|
+
let s = name;
|
|
33
|
+
for (const k of Object.keys(tags).sort())
|
|
34
|
+
s += `\0${k}\0${tags[k]}`;
|
|
35
|
+
return s;
|
|
36
|
+
};
|
|
37
|
+
const withGlobal = (tags) => ({ ...globalTags, ...tags });
|
|
38
|
+
return {
|
|
39
|
+
analytics,
|
|
40
|
+
count(name, value, tags) {
|
|
41
|
+
const merged = withGlobal(tags);
|
|
42
|
+
const k = key(name, merged);
|
|
43
|
+
const existing = counts.get(k);
|
|
44
|
+
if (existing)
|
|
45
|
+
existing.v += value;
|
|
46
|
+
else
|
|
47
|
+
counts.set(k, { n: name, t: 'c', tags: merged, ts: 0, v: value });
|
|
48
|
+
},
|
|
49
|
+
flush() {
|
|
50
|
+
const ts = Date.now();
|
|
51
|
+
const entries = [];
|
|
52
|
+
for (const e of counts.values())
|
|
53
|
+
entries.push({ ...e, ts });
|
|
54
|
+
for (const e of gauges.values())
|
|
55
|
+
entries.push({ ...e, ts });
|
|
56
|
+
entries.push(...histograms);
|
|
57
|
+
counts.clear();
|
|
58
|
+
gauges.clear();
|
|
59
|
+
histograms.length = 0;
|
|
60
|
+
if (!entries.length)
|
|
61
|
+
return;
|
|
62
|
+
// Emit as `cwm-[…]` lines, splitting batches over the size cap. Serialize
|
|
63
|
+
// with the field order the Workers Logs pipeline emits (`t,n,v,tags,ts`).
|
|
64
|
+
const parts = entries.map((e) => JSON.stringify({ t: e.t, n: e.n, v: e.v, tags: e.tags, ts: e.ts }));
|
|
65
|
+
let buf = [];
|
|
66
|
+
let bufLen = 0;
|
|
67
|
+
for (const part of parts) {
|
|
68
|
+
// 5 bytes for the `cwm-[` / `]` frame, plus one comma per joined part.
|
|
69
|
+
const wouldBe = 5 + (buf.length + 1) + bufLen + part.length;
|
|
70
|
+
// 250 KiB: the largest `console.log` payload Workers Logs keeps untruncated.
|
|
71
|
+
if (buf.length > 0 && wouldBe > 250 * 1024) {
|
|
72
|
+
console.log(`cwm-[${buf.join(',')}]`);
|
|
73
|
+
buf = [];
|
|
74
|
+
bufLen = 0;
|
|
75
|
+
}
|
|
76
|
+
buf.push(part);
|
|
77
|
+
bufLen += part.length;
|
|
78
|
+
}
|
|
79
|
+
if (buf.length)
|
|
80
|
+
console.log(`cwm-[${buf.join(',')}]`);
|
|
81
|
+
},
|
|
82
|
+
gauge(name, value, tags) {
|
|
83
|
+
const merged = withGlobal(tags);
|
|
84
|
+
gauges.set(key(name, merged), { n: name, t: 'g', tags: merged, ts: 0, v: value });
|
|
85
|
+
},
|
|
86
|
+
histogram(name, value, tags) {
|
|
87
|
+
histograms.push({ n: name, t: 'h', tags: withGlobal(tags), ts: Date.now(), v: value });
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=Metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metrics.js","sourceRoot":"","sources":["../src/Metrics.ts"],"names":[],"mappings":"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"}
|
package/dist/Scope.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The issuable API-key scope vocabulary: the single source of truth for the
|
|
3
|
+
* `/scopes` catalog, for key minting (`ApiKeySource.Source.mint`), and for the scopes
|
|
4
|
+
* required by route policies (`Auth.policy`). Exposing it publicly lets operator
|
|
5
|
+
* tooling (e.g. the provisioning CLI) validate scopes against the same list the
|
|
6
|
+
* server enforces.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Wildcard scope. A key whose `scopes` contains this value satisfies every
|
|
10
|
+
* required scope, so it never needs re-provisioning when new scopes are added.
|
|
11
|
+
* Use sparingly — it grants full access.
|
|
12
|
+
*/
|
|
13
|
+
export declare const wildcard = "*";
|
|
14
|
+
/**
|
|
15
|
+
* The issuable API-key scope vocabulary — the single source of truth for the
|
|
16
|
+
* `/scopes` catalog and for key minting. Route policies require values from this
|
|
17
|
+
* set; {@link wildcard} (`'*'`) is an implicit grant-all and is intentionally
|
|
18
|
+
* not listed as an issuable scope.
|
|
19
|
+
*/
|
|
20
|
+
export declare const catalog: readonly [{
|
|
21
|
+
readonly description: 'Read public chain data: tokens, transactions, transfers, blocks, and receipts.';
|
|
22
|
+
readonly scope: 'data:read';
|
|
23
|
+
}, {
|
|
24
|
+
readonly description: 'Run ad-hoc queries against the raw indexer passthrough.';
|
|
25
|
+
readonly scope: 'indexer:query';
|
|
26
|
+
}, {
|
|
27
|
+
readonly description: 'Read webhook subscriptions.';
|
|
28
|
+
readonly scope: 'webhooks:read';
|
|
29
|
+
}, {
|
|
30
|
+
readonly description: 'Create, update, and delete webhook subscriptions.';
|
|
31
|
+
readonly scope: 'webhooks:write';
|
|
32
|
+
}];
|
|
33
|
+
/** Issuable API-key scope identifier — the union of every {@link catalog} entry. */
|
|
34
|
+
export type Id = (typeof catalog)[number]['scope'];
|
|
35
|
+
//# sourceMappingURL=Scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scope.d.ts","sourceRoot":"","sources":["../src/Scope.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,eAAO,MAAM,QAAQ,MAAM,CAAA;AAU3B;;;;;GAKG;AACH,eAAO,MAAM,OAAO;0BAEH,gFAAgF;oBACtF,WAAW;;0BAGL,yDAAyD;oBAC/D,eAAe;;0BAGT,6BAA6B;oBACnC,eAAe;;0BAGT,mDAAmD;oBACzD,gBAAgB;EAEU,CAAA;AAErC,oFAAoF;AACpF,MAAM,MAAM,EAAE,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAA"}
|
package/dist/Scope.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The issuable API-key scope vocabulary: the single source of truth for the
|
|
3
|
+
* `/scopes` catalog, for key minting (`ApiKeySource.Source.mint`), and for the scopes
|
|
4
|
+
* required by route policies (`Auth.policy`). Exposing it publicly lets operator
|
|
5
|
+
* tooling (e.g. the provisioning CLI) validate scopes against the same list the
|
|
6
|
+
* server enforces.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Wildcard scope. A key whose `scopes` contains this value satisfies every
|
|
10
|
+
* required scope, so it never needs re-provisioning when new scopes are added.
|
|
11
|
+
* Use sparingly — it grants full access.
|
|
12
|
+
*/
|
|
13
|
+
export const wildcard = '*';
|
|
14
|
+
/**
|
|
15
|
+
* The issuable API-key scope vocabulary — the single source of truth for the
|
|
16
|
+
* `/scopes` catalog and for key minting. Route policies require values from this
|
|
17
|
+
* set; {@link wildcard} (`'*'`) is an implicit grant-all and is intentionally
|
|
18
|
+
* not listed as an issuable scope.
|
|
19
|
+
*/
|
|
20
|
+
export const catalog = [
|
|
21
|
+
{
|
|
22
|
+
description: 'Read public chain data: tokens, transactions, transfers, blocks, and receipts.',
|
|
23
|
+
scope: 'data:read',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
description: 'Run ad-hoc queries against the raw indexer passthrough.',
|
|
27
|
+
scope: 'indexer:query',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
description: 'Read webhook subscriptions.',
|
|
31
|
+
scope: 'webhooks:read',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
description: 'Create, update, and delete webhook subscriptions.',
|
|
35
|
+
scope: 'webhooks:write',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
//# sourceMappingURL=Scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scope.js","sourceRoot":"","sources":["../src/Scope.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAA;AAU3B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB;QACE,WAAW,EAAE,gFAAgF;QAC7F,KAAK,EAAE,WAAW;KACnB;IACD;QACE,WAAW,EAAE,yDAAyD;QACtE,KAAK,EAAE,eAAe;KACvB;IACD;QACE,WAAW,EAAE,6BAA6B;QAC1C,KAAK,EAAE,eAAe;KACvB;IACD;QACE,WAAW,EAAE,mDAAmD;QAChE,KAAK,EAAE,gBAAgB;KACxB;CACkC,CAAA"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import * as AppWebhooks from './apps/webhooks.js';
|
|
2
|
+
import type * as Store from './internal/Store.js';
|
|
3
|
+
import type * as Metrics from './Metrics.js';
|
|
4
|
+
import * as Tidx from './internal/Tidx.js';
|
|
5
|
+
import * as Viem from './internal/Viem.js';
|
|
6
|
+
export * from './internal/Webhooks.js';
|
|
7
|
+
export { eventTypes, schema } from './apps/webhooks.js';
|
|
8
|
+
/**
|
|
9
|
+
* Builds a scheduled webhook poller bound to a state store and chain config.
|
|
10
|
+
*
|
|
11
|
+
* This is the entry point a host runtime drives on a timer (a Cloudflare
|
|
12
|
+
* `scheduled` cron handler, a self-host `setInterval`, …). Each {@link
|
|
13
|
+
* Poller.tick} scans active subscriptions from their cursors up to `head -
|
|
14
|
+
* confirmations` and dispatches matching events.
|
|
15
|
+
*
|
|
16
|
+
* The monitoring event types (`log:emitted`, `block:created`,
|
|
17
|
+
* `transaction:included`) scan a confirmed window directly over JSON-RPC, so the
|
|
18
|
+
* poller builds memoized viem clients (via {@link Viem.getClient}); the legacy
|
|
19
|
+
* `token:transfer` type still reads from TIDX, so it
|
|
20
|
+
* also builds memoized TIDX clients (via {@link Tidx.createGetClient}) when a
|
|
21
|
+
* `tidx` config is supplied. The poller keeps `App.create` a pure Hono app: it
|
|
22
|
+
* constructs its own clients instead of reaching into app internals, and owns no
|
|
23
|
+
* request state.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createPoller(options: createPoller.Options): createPoller.Poller;
|
|
26
|
+
export declare namespace createPoller {
|
|
27
|
+
/** A row to dispatch, paired with its owning subscription. */
|
|
28
|
+
type Dispatchable = AppWebhooks.poll.Dispatchable;
|
|
29
|
+
/** Delivery transport: hands a matched event to a queue or delivers inline. */
|
|
30
|
+
type Dispatch = NonNullable<AppWebhooks.poll.Options['dispatch']>;
|
|
31
|
+
/** Summary counters returned by {@link Poller.tick}. */
|
|
32
|
+
type Result = AppWebhooks.poll.Result;
|
|
33
|
+
/** Knobs shared by every {@link Poller.tick}; each is overridable per tick. */
|
|
34
|
+
type Defaults = {
|
|
35
|
+
/** Max matching rows scanned per subscription per tick (default 100). */
|
|
36
|
+
batchSize?: number | undefined;
|
|
37
|
+
/** Reorg-safety window: only emit blocks this far behind head (default 2). */
|
|
38
|
+
confirmations?: number | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Delivery transport. Defaults to inline `deliverAndRecord` (self-host); on
|
|
41
|
+
* Cloudflare pass a Queue producer so retry/backoff/DLQ are native.
|
|
42
|
+
*/
|
|
43
|
+
dispatch?: Dispatch | undefined;
|
|
44
|
+
/** Event types to poll (default all). */
|
|
45
|
+
eventTypes?: AppWebhooks.poll.Options['eventTypes'];
|
|
46
|
+
/** Backfill cap: most blocks an RPC scanner inspects per tick (default 1000). */
|
|
47
|
+
maxBlocks?: number | undefined;
|
|
48
|
+
/** Clock for envelope timestamps; injectable for tests. */
|
|
49
|
+
now?: (() => Date) | undefined;
|
|
50
|
+
};
|
|
51
|
+
/** Options for {@link createPoller}. */
|
|
52
|
+
type Options = Defaults & {
|
|
53
|
+
/** Tempo chain id polled when a tick omits one. */
|
|
54
|
+
defaultChainId?: Viem.ChainId | undefined;
|
|
55
|
+
/** Metrics backend; emits `webhook:tick` per tick and `webhook:enqueue` per dispatch. */
|
|
56
|
+
metrics?: Metrics.Metrics | undefined;
|
|
57
|
+
/** RPC options for the viem clients the monitoring scanners read from. */
|
|
58
|
+
rpc?: Viem.getClient.Rpc | undefined;
|
|
59
|
+
/** TIDX query client options for the legacy `token:transfer` type. */
|
|
60
|
+
tidx?: Tidx.getClient.Tidx | undefined;
|
|
61
|
+
/** Webhook state store (subscriptions + cursors). */
|
|
62
|
+
webhook: {
|
|
63
|
+
store: Store.State;
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
/** Per-tick overrides; falls back to the {@link Options} defaults. */
|
|
67
|
+
type TickOptions = Defaults & {
|
|
68
|
+
/** Chain to poll this tick (default `options.defaultChainId`). */
|
|
69
|
+
chainId?: Viem.ChainId | undefined;
|
|
70
|
+
/** Chain head to work back from; resolved from RPC when omitted. */
|
|
71
|
+
headBlockNumber?: bigint | number | undefined;
|
|
72
|
+
};
|
|
73
|
+
/** A scheduled webhook poller. */
|
|
74
|
+
type Poller = {
|
|
75
|
+
/** Runs one poll tick, resolving the indexed head when not supplied. */
|
|
76
|
+
tick(options?: TickOptions): Promise<Result>;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=Webhooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Webhooks.d.ts","sourceRoot":"","sources":["../src/Webhooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,oBAAoB,CAAA;AAEjD,OAAO,KAAK,KAAK,KAAK,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAM1C,cAAc,wBAAwB,CAAA;AAMtC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,MAAM,CA6E/E;AAED,MAAM,CAAC,OAAO,WAAW,YAAY,CAAC;IACpC,8DAA8D;IAC9D,KAAK,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,YAAY,CAAA;IAEjD,+EAA+E;IAC/E,KAAK,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;IAEjE,wDAAwD;IACxD,KAAK,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAA;IAErC,+EAA+E;IAC/E,KAAK,QAAQ,GAAG;QACd,yEAAyE;QACzE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,8EAA8E;QAC9E,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAClC;;;WAGG;QACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAA;QAC/B,yCAAyC;QACzC,UAAU,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QACnD,iFAAiF;QACjF,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,2DAA2D;QAC3D,GAAG,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;KAC/B,CAAA;IAED,wCAAwC;IACxC,KAAK,OAAO,GAAG,QAAQ,GAAG;QACxB,mDAAmD;QACnD,cAAc,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QACzC,yFAAyF;QACzF,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,SAAS,CAAA;QACrC,0EAA0E;QAC1E,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,CAAA;QACpC,sEAAsE;QACtE,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAA;QACtC,qDAAqD;QACrD,OAAO,EAAE;YAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;SAAE,CAAA;KAChC,CAAA;IAED,sEAAsE;IACtE,KAAK,WAAW,GAAG,QAAQ,GAAG;QAC5B,kEAAkE;QAClE,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;QAClC,oEAAoE;QACpE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAC9C,CAAA;IAED,kCAAkC;IAClC,KAAK,MAAM,GAAG;QACZ,wEAAwE;QACxE,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;KAC7C,CAAA;CACF"}
|