tapimo 0.7.0 → 0.7.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/dist/ApiKeys.d.ts +24 -7
- package/dist/ApiKeys.d.ts.map +1 -1
- package/dist/ApiKeys.js +17 -5
- package/dist/ApiKeys.js.map +1 -1
- package/dist/App.d.ts +12104 -7861
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +191 -128
- package/dist/App.js.map +1 -1
- package/dist/Assets.d.ts +10 -0
- package/dist/Assets.d.ts.map +1 -1
- package/dist/Assets.js +17 -4
- package/dist/Assets.js.map +1 -1
- package/dist/Scope.d.ts +19 -8
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +25 -9
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.d.ts +1 -1
- package/dist/admin/App.d.ts +601 -20
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/App.js +12 -2
- package/dist/admin/App.js.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +94 -11
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +141 -32
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +1069 -0
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -0
- package/dist/admin/apps/earn-vaults.js +409 -0
- package/dist/admin/apps/earn-vaults.js.map +1 -0
- package/dist/admin/apps/verified-tokens.d.ts +166 -166
- package/dist/admin/ui.generated.d.ts +1 -1
- package/dist/admin/ui.generated.d.ts.map +1 -1
- package/dist/admin/ui.generated.js +151 -95
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/analytics/Analytics.d.ts +2 -0
- package/dist/analytics/Analytics.d.ts.map +1 -1
- package/dist/analytics/Analytics.js +18 -2
- package/dist/analytics/Analytics.js.map +1 -1
- package/dist/analytics/tables/requestEvents.d.ts +22 -1
- package/dist/analytics/tables/requestEvents.d.ts.map +1 -1
- package/dist/analytics/tables/requestEvents.js +59 -39
- package/dist/analytics/tables/requestEvents.js.map +1 -1
- package/dist/apps/Zones.d.ts +8335 -0
- package/dist/apps/Zones.d.ts.map +1 -0
- package/dist/apps/Zones.js +38 -0
- package/dist/apps/Zones.js.map +1 -0
- package/dist/apps/data/App.d.ts +14377 -10165
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +91 -19
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/FxOracle.d.ts +1 -1
- package/dist/apps/data/FxOracle.d.ts.map +1 -1
- package/dist/apps/data/index.d.ts +0 -1
- package/dist/apps/data/index.d.ts.map +1 -1
- package/dist/apps/data/index.js +0 -1
- package/dist/apps/data/index.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +32 -32
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +130 -65
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +312 -312
- package/dist/apps/data/routes/balances.d.ts +18 -18
- package/dist/apps/data/routes/balances.js +5 -5
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +176 -176
- package/dist/apps/data/routes/coingecko.d.ts.map +1 -1
- package/dist/apps/data/routes/coingecko.js +62 -35
- package/dist/apps/data/routes/coingecko.js.map +1 -1
- package/dist/apps/data/routes/earn.d.ts +2144 -0
- package/dist/apps/data/routes/earn.d.ts.map +1 -0
- package/dist/apps/data/routes/earn.js +947 -0
- package/dist/apps/data/routes/earn.js.map +1 -0
- package/dist/apps/data/routes/exchanges.d.ts +1231 -324
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +656 -193
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +59 -8
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/funding.d.ts +4092 -387
- package/dist/apps/data/routes/funding.d.ts.map +1 -1
- package/dist/apps/data/routes/funding.js +1403 -256
- package/dist/apps/data/routes/funding.js.map +1 -1
- package/dist/apps/data/routes/indexer.d.ts +5 -5
- package/dist/apps/data/routes/indexer.d.ts.map +1 -1
- package/dist/apps/data/routes/indexer.js +19 -2
- package/dist/apps/data/routes/indexer.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +265 -265
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +11 -11
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/rpc.d.ts +5 -5
- package/dist/apps/data/routes/rpc.d.ts.map +1 -1
- package/dist/apps/data/routes/rpc.js +211 -22
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +36 -36
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +49 -9
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +116 -88
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +198 -91
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +55 -55
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +78 -39
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +78 -29
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +165 -67
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +10 -10
- package/dist/apps/data/routes/valuation.js +2 -2
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/verified-tokens.js +34 -9
- package/dist/apps/data/routes/verified-tokens.js.map +1 -1
- package/dist/apps/data/routes/webhooks.d.ts +5 -3
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +175 -65
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +281 -0
- package/dist/apps/data/routes/zones.d.ts.map +1 -0
- package/dist/apps/data/routes/zones.js +252 -0
- package/dist/apps/data/routes/zones.js.map +1 -0
- package/dist/apps/docs/reference.js +6 -5
- package/dist/apps/docs/reference.js.map +1 -1
- package/dist/apps/index.d.ts +2 -1
- package/dist/apps/index.d.ts.map +1 -1
- package/dist/apps/index.js +2 -1
- package/dist/apps/index.js.map +1 -1
- package/dist/apps/management/App.d.ts +670 -670
- package/dist/apps/management/Billing.d.ts +8 -0
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +12 -0
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/Error.d.ts +12 -0
- package/dist/apps/management/Error.d.ts.map +1 -0
- package/dist/apps/management/Error.js +10 -0
- package/dist/apps/management/Error.js.map +1 -0
- package/dist/apps/management/routes/api-keys.d.ts +5 -5
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +2 -8
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +119 -119
- package/dist/apps/management/routes/faucet.d.ts +35 -35
- package/dist/apps/management/routes/invitations.d.ts +62 -62
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +4 -10
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts +30 -30
- package/dist/apps/management/routes/me.d.ts +6 -6
- package/dist/apps/management/routes/members.d.ts +78 -78
- package/dist/apps/management/routes/orgs.d.ts +48 -48
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +2 -8
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +9 -9
- package/dist/apps/management/routes/scopes.js +2 -2
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +80 -80
- package/dist/apps/management/routes/verified-token-requests.d.ts +36 -36
- package/dist/apps/management/routes/webhooks.d.ts +50 -50
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +15 -3
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/mpp/App.d.ts +55 -56
- package/dist/apps/mpp/App.d.ts.map +1 -1
- package/dist/apps/mpp/App.js +192 -27
- package/dist/apps/mpp/App.js.map +1 -1
- package/dist/apps/mpp/Mpp.d.ts +0 -20
- package/dist/apps/mpp/Mpp.d.ts.map +1 -1
- package/dist/apps/mpp/Mpp.js +0 -24
- package/dist/apps/mpp/Mpp.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts +40 -0
- package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Adapter.js +66 -0
- package/dist/apps/mpp/internal/Adapter.js.map +1 -0
- package/dist/apps/mpp/internal/Error.d.ts +4 -0
- package/dist/apps/mpp/internal/Error.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Error.js +41 -0
- package/dist/apps/mpp/internal/Error.js.map +1 -0
- package/dist/apps/mpp/internal/Idempotency.d.ts +33 -0
- package/dist/apps/mpp/internal/Idempotency.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Idempotency.js +28 -0
- package/dist/apps/mpp/internal/Idempotency.js.map +1 -0
- package/dist/apps/mpp/internal/Policy.d.ts +46 -0
- package/dist/apps/mpp/internal/Policy.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Policy.js +57 -0
- package/dist/apps/mpp/internal/Policy.js.map +1 -0
- package/dist/apps/mpp/internal/ScreenManager.d.ts +27 -0
- package/dist/apps/mpp/internal/ScreenManager.d.ts.map +1 -0
- package/dist/apps/mpp/internal/ScreenManager.js +18 -0
- package/dist/apps/mpp/internal/ScreenManager.js.map +1 -0
- package/dist/apps/mpp/internal/Screening.d.ts +35 -0
- package/dist/apps/mpp/internal/Screening.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Screening.js +20 -0
- package/dist/apps/mpp/internal/Screening.js.map +1 -0
- package/dist/apps/mpp/internal/Sponsorship.d.ts +36 -0
- package/dist/apps/mpp/internal/Sponsorship.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Sponsorship.js +103 -0
- package/dist/apps/mpp/internal/Sponsorship.js.map +1 -0
- package/dist/apps/mpp/internal/Utils.d.ts +7 -0
- package/dist/apps/mpp/internal/Utils.d.ts.map +1 -0
- package/dist/apps/mpp/internal/Utils.js +24 -0
- package/dist/apps/mpp/internal/Utils.js.map +1 -0
- package/dist/apps/relay/App.js +184 -24
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/apps/relay/Sponsorships.d.ts +4 -0
- package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
- package/dist/apps/relay/Sponsorships.js +16 -7
- package/dist/apps/relay/Sponsorships.js.map +1 -1
- package/dist/db/Db.d.ts +20 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +342 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +921 -1
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +269 -1
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earnVaults.d.ts +68 -0
- package/dist/db/tables/earnVaults.d.ts.map +1 -0
- package/dist/db/tables/earnVaults.js +72 -0
- package/dist/db/tables/earnVaults.js.map +1 -0
- package/dist/db/tables/fundingCatalog.d.ts +56 -0
- package/dist/db/tables/fundingCatalog.d.ts.map +1 -0
- package/dist/db/tables/fundingCatalog.js +85 -0
- package/dist/db/tables/fundingCatalog.js.map +1 -0
- package/dist/db/tables/fundingDepositAddresses.d.ts +159 -0
- package/dist/db/tables/fundingDepositAddresses.d.ts.map +1 -0
- package/dist/db/tables/fundingDepositAddresses.js +206 -0
- package/dist/db/tables/fundingDepositAddresses.js.map +1 -0
- package/dist/db/tables/fundingDeposits.d.ts +115 -0
- package/dist/db/tables/fundingDeposits.d.ts.map +1 -0
- package/dist/db/tables/fundingDeposits.js +100 -0
- package/dist/db/tables/fundingDeposits.js.map +1 -0
- package/dist/db/tables/fundingIdempotency.d.ts +91 -0
- package/dist/db/tables/fundingIdempotency.d.ts.map +1 -0
- package/dist/db/tables/fundingIdempotency.js +103 -0
- package/dist/db/tables/fundingIdempotency.js.map +1 -0
- package/dist/db/tables/fundingTransferEvents.d.ts +12 -0
- package/dist/db/tables/fundingTransferEvents.d.ts.map +1 -0
- package/dist/db/tables/fundingTransferEvents.js +18 -0
- package/dist/db/tables/fundingTransferEvents.js.map +1 -0
- package/dist/db/tables/fundingTransferTransactions.d.ts +15 -0
- package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -0
- package/dist/db/tables/fundingTransferTransactions.js +27 -0
- package/dist/db/tables/fundingTransferTransactions.js.map +1 -0
- package/dist/db/tables/fundingTransfers.d.ts +82 -0
- package/dist/db/tables/fundingTransfers.d.ts.map +1 -0
- package/dist/db/tables/fundingTransfers.js +89 -0
- package/dist/db/tables/fundingTransfers.js.map +1 -0
- package/dist/db/tables/organizations.d.ts +8 -0
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +35 -0
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/projects.d.ts +8 -0
- package/dist/db/tables/projects.d.ts.map +1 -1
- package/dist/db/tables/projects.js +16 -0
- package/dist/db/tables/projects.js.map +1 -1
- package/dist/db/tables/requestUsage.d.ts +13 -0
- package/dist/db/tables/requestUsage.d.ts.map +1 -1
- package/dist/db/tables/requestUsage.js +16 -0
- package/dist/db/tables/requestUsage.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +4 -2
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +14 -4
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/users.d.ts +8 -0
- package/dist/db/tables/users.d.ts.map +1 -1
- package/dist/db/tables/users.js +16 -0
- package/dist/db/tables/users.js.map +1 -1
- package/dist/db/tables/verifiedTokens.d.ts +14 -7
- package/dist/db/tables/verifiedTokens.d.ts.map +1 -1
- package/dist/db/tables/verifiedTokens.js +9 -7
- package/dist/db/tables/verifiedTokens.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +31 -1
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +24 -3
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/relay.js +108 -108
- package/dist/handlers/relay.js.map +1 -1
- package/dist/internal/Auth.d.ts +26 -0
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +35 -2
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +16 -10
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/Cursor.js +1 -1
- package/dist/internal/Cursor.js.map +1 -1
- package/dist/internal/EarnRates.d.ts +89 -0
- package/dist/internal/EarnRates.d.ts.map +1 -0
- package/dist/internal/EarnRates.js +266 -0
- package/dist/internal/EarnRates.js.map +1 -0
- package/dist/internal/EarnVaults.d.ts +171 -0
- package/dist/internal/EarnVaults.d.ts.map +1 -0
- package/dist/internal/EarnVaults.js +547 -0
- package/dist/internal/EarnVaults.js.map +1 -0
- package/dist/internal/EdgeCache.d.ts +9 -2
- package/dist/internal/EdgeCache.d.ts.map +1 -1
- package/dist/internal/EdgeCache.js +36 -9
- package/dist/internal/EdgeCache.js.map +1 -1
- package/dist/internal/Id.d.ts +11 -0
- package/dist/internal/Id.d.ts.map +1 -1
- package/dist/internal/Id.js +13 -0
- package/dist/internal/Id.js.map +1 -1
- package/dist/internal/Idempotency.d.ts +83 -0
- package/dist/internal/Idempotency.d.ts.map +1 -0
- package/dist/internal/Idempotency.js +113 -0
- package/dist/internal/Idempotency.js.map +1 -0
- package/dist/internal/Log.d.ts +64 -9
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +29 -7
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +47 -1
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +1 -1
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +3 -0
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Provider.d.ts +14 -0
- package/dist/internal/Provider.d.ts.map +1 -0
- package/dist/internal/Provider.js +5 -0
- package/dist/internal/Provider.js.map +1 -0
- package/dist/internal/Schema.d.ts +8 -3
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +24 -13
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +6 -0
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +35 -0
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts +43 -24
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +79 -11
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Viem.d.ts +82 -65
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +83 -12
- package/dist/internal/Viem.js.map +1 -1
- package/dist/internal/WebhookDestination.d.ts.map +1 -1
- package/dist/internal/WebhookDestination.js +34 -28
- package/dist/internal/WebhookDestination.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +9 -0
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +15 -10
- package/dist/internal/Webhooks.js.map +1 -1
- package/dist/internal/exchange/Provider.d.ts +219 -0
- package/dist/internal/exchange/Provider.d.ts.map +1 -0
- package/dist/internal/exchange/Provider.js +117 -0
- package/dist/internal/exchange/Provider.js.map +1 -0
- package/dist/internal/exchange/index.d.ts +2 -0
- package/dist/internal/exchange/index.d.ts.map +1 -0
- package/dist/internal/exchange/index.js +2 -0
- package/dist/internal/exchange/index.js.map +1 -0
- package/dist/internal/exchange/providers/uniswap.d.ts +57 -0
- package/dist/internal/exchange/providers/uniswap.d.ts.map +1 -0
- package/dist/internal/exchange/providers/uniswap.js +553 -0
- package/dist/internal/exchange/providers/uniswap.js.map +1 -0
- package/dist/internal/funding/Action.d.ts +55 -0
- package/dist/internal/funding/Action.d.ts.map +1 -0
- package/dist/internal/funding/Action.js +74 -0
- package/dist/internal/funding/Action.js.map +1 -0
- package/dist/internal/funding/Catalog.d.ts +107 -0
- package/dist/internal/funding/Catalog.d.ts.map +1 -0
- package/dist/internal/funding/Catalog.js +270 -0
- package/dist/internal/funding/Catalog.js.map +1 -0
- package/dist/internal/funding/Chain.d.ts +76 -0
- package/dist/internal/funding/Chain.d.ts.map +1 -0
- package/dist/internal/funding/Chain.js +38 -0
- package/dist/internal/funding/Chain.js.map +1 -0
- package/dist/internal/funding/Deposit.d.ts +366 -0
- package/dist/internal/funding/Deposit.d.ts.map +1 -0
- package/dist/internal/funding/Deposit.js +286 -0
- package/dist/internal/funding/Deposit.js.map +1 -0
- package/dist/internal/funding/DepositAddress.d.ts +345 -0
- package/dist/internal/funding/DepositAddress.d.ts.map +1 -0
- package/dist/internal/funding/DepositAddress.js +189 -0
- package/dist/internal/funding/DepositAddress.js.map +1 -0
- package/dist/internal/funding/Evidence.d.ts +52 -0
- package/dist/internal/funding/Evidence.d.ts.map +1 -0
- package/dist/internal/funding/Evidence.js +314 -0
- package/dist/internal/funding/Evidence.js.map +1 -0
- package/dist/internal/funding/Provider.d.ts +1186 -0
- package/dist/internal/funding/Provider.d.ts.map +1 -0
- package/dist/internal/funding/Provider.js +1081 -0
- package/dist/internal/funding/Provider.js.map +1 -0
- package/dist/internal/funding/Reconciliation.d.ts +113 -0
- package/dist/internal/funding/Reconciliation.d.ts.map +1 -0
- package/dist/internal/funding/Reconciliation.js +676 -0
- package/dist/internal/funding/Reconciliation.js.map +1 -0
- package/dist/internal/funding/Route.d.ts +21 -0
- package/dist/internal/funding/Route.d.ts.map +1 -0
- package/dist/internal/funding/Route.js +5 -0
- package/dist/internal/funding/Route.js.map +1 -0
- package/dist/internal/funding/Subsidy.d.ts +113 -0
- package/dist/internal/funding/Subsidy.d.ts.map +1 -0
- package/dist/internal/funding/Subsidy.js +138 -0
- package/dist/internal/funding/Subsidy.js.map +1 -0
- package/dist/internal/funding/Token.d.ts +41 -0
- package/dist/internal/funding/Token.d.ts.map +1 -0
- package/dist/internal/funding/Token.js +22 -0
- package/dist/internal/funding/Token.js.map +1 -0
- package/dist/internal/funding/Transfer.d.ts +643 -0
- package/dist/internal/funding/Transfer.d.ts.map +1 -0
- package/dist/internal/funding/Transfer.js +332 -0
- package/dist/internal/funding/Transfer.js.map +1 -0
- package/dist/internal/funding/index.d.ts +13 -0
- package/dist/internal/funding/index.d.ts.map +1 -0
- package/dist/internal/funding/index.js +13 -0
- package/dist/internal/funding/index.js.map +1 -0
- package/dist/internal/funding/providers/across.d.ts +21 -0
- package/dist/internal/funding/providers/across.d.ts.map +1 -0
- package/dist/internal/funding/providers/across.js +117 -0
- package/dist/internal/funding/providers/across.js.map +1 -0
- package/dist/internal/funding/providers/relay.d.ts +46 -0
- package/dist/internal/funding/providers/relay.d.ts.map +1 -0
- package/dist/internal/funding/providers/relay.js +464 -0
- package/dist/internal/funding/providers/relay.js.map +1 -0
- package/dist/internal/funding/providers/rhino.d.ts +15 -0
- package/dist/internal/funding/providers/rhino.d.ts.map +1 -0
- package/dist/internal/funding/providers/rhino.js +116 -0
- package/dist/internal/funding/providers/rhino.js.map +1 -0
- package/dist/internal/funding/providers/squid.d.ts +19 -0
- package/dist/internal/funding/providers/squid.d.ts.map +1 -0
- package/dist/internal/funding/providers/squid.js +120 -0
- package/dist/internal/funding/providers/squid.js.map +1 -0
- package/dist/internal/funding/providers/symbiosis.d.ts +20 -0
- package/dist/internal/funding/providers/symbiosis.d.ts.map +1 -0
- package/dist/internal/funding/providers/symbiosis.js +176 -0
- package/dist/internal/funding/providers/symbiosis.js.map +1 -0
- package/dist/internal/index.d.ts +5 -1
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +5 -1
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/webhookDestinations/url.js +61 -57
- package/dist/internal/webhookDestinations/url.js.map +1 -1
- package/dist/providers/index.d.ts +43 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +19 -0
- package/dist/providers/index.js.map +1 -0
- package/package.json +9 -4
- package/src/ApiKeys.test.ts +11 -7
- package/src/ApiKeys.ts +37 -9
- package/src/App.test.ts +85 -10
- package/src/App.ts +224 -137
- package/src/Assets.ts +29 -4
- package/src/Client.test-d.ts +650 -30
- package/src/Scope.test.ts +19 -0
- package/src/Scope.ts +28 -11
- package/src/Webhooks.test.ts +25 -0
- package/src/Webhooks.ts +1 -1
- package/src/admin/App.test.ts +9 -2
- package/src/admin/App.ts +32 -9
- package/src/admin/apps/api-keys.test.ts +167 -23
- package/src/admin/apps/api-keys.ts +166 -28
- package/src/admin/apps/earn-vaults.test.ts +338 -0
- package/src/admin/apps/earn-vaults.ts +572 -0
- package/src/admin/apps/scopes.test.ts +16 -1
- package/src/admin/ui/plugin.ts +2 -2
- package/src/admin/ui/src/components/EarnVaultForm.tsx +137 -0
- package/src/admin/ui/src/components/MobileProfile.tsx +2 -2
- package/src/admin/ui/src/components/Page.tsx +1 -1
- package/src/admin/ui/src/components/ThemeToggle.tsx +1 -1
- package/src/admin/ui/src/lib/api-keys.ts +37 -7
- package/src/admin/ui/src/lib/client.ts +1 -1
- package/src/admin/ui/src/lib/config.ts +1 -1
- package/src/admin/ui/src/lib/early-access.ts +8 -9
- package/src/admin/ui/src/lib/earn-vaults.ts +207 -0
- package/src/admin/ui/src/lib/format.ts +13 -0
- package/src/admin/ui/src/lib/organizations.test.ts +14 -4
- package/src/admin/ui/src/lib/organizations.ts +7 -1
- package/src/admin/ui/src/lib/response.ts +22 -0
- package/src/admin/ui/src/lib/scopes.test.ts +19 -11
- package/src/admin/ui/src/lib/scopes.ts +28 -7
- package/src/admin/ui/src/lib/verified-tokens.ts +10 -9
- package/src/admin/ui/src/routeTree.gen.ts +70 -7
- package/src/admin/ui/src/router.tsx +2 -2
- package/src/admin/ui/src/routes/__root.tsx +9 -8
- package/src/admin/ui/src/routes/api-keys.tsx +475 -64
- package/src/admin/ui/src/routes/early-access.tsx +5 -12
- package/src/admin/ui/src/routes/earn.vaults.tsx +348 -0
- package/src/admin/ui/src/routes/earn.vaults_.$vaultId.edit.tsx +154 -0
- package/src/admin/ui/src/routes/earn.vaults_.new.tsx +190 -0
- package/src/admin/ui/src/routes/organizations.tsx +4 -7
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +56 -54
- package/src/admin/ui/src/routes/verified-tokens.tsx +4 -4
- package/src/admin/ui/vite.config.ts +4 -1
- package/src/admin/ui.generated.ts +189 -95
- package/src/analytics/Analytics.test.ts +69 -10
- package/src/analytics/Analytics.ts +20 -1
- package/src/analytics/tables/requestEvents.ts +79 -37
- package/src/apps/Zones.test.ts +33 -0
- package/src/apps/Zones.ts +40 -0
- package/src/apps/composition.test.ts +84 -1
- package/src/apps/data/App.test.ts +38 -9
- package/src/apps/data/App.ts +96 -33
- package/src/apps/data/FxOracle.ts +1 -1
- package/src/apps/data/index.ts +0 -1
- package/src/apps/data/routes/activities.test.ts +82 -6
- package/src/apps/data/routes/activities.ts +131 -71
- package/src/apps/data/routes/balances.test.ts +50 -37
- package/src/apps/data/routes/balances.ts +5 -5
- package/src/apps/data/routes/blocks.test.ts +2 -0
- package/src/apps/data/routes/coingecko.test.ts +22 -0
- package/src/apps/data/routes/coingecko.ts +84 -48
- package/src/apps/data/routes/earn.test.ts +1108 -0
- package/src/apps/data/routes/earn.ts +1391 -0
- package/src/apps/data/routes/exchanges.test.ts +82 -33
- package/src/apps/data/routes/exchanges.ts +842 -227
- package/src/apps/data/routes/fee-amm.test.ts +4 -6
- package/src/apps/data/routes/fee-amm.ts +69 -12
- package/src/apps/data/routes/funding.test.ts +2712 -221
- package/src/apps/data/routes/funding.ts +1604 -387
- package/src/apps/data/routes/indexer.test.ts +43 -34
- package/src/apps/data/routes/indexer.ts +19 -2
- package/src/apps/data/routes/receipts.test.ts +5 -3
- package/src/apps/data/routes/receipts.ts +13 -11
- package/src/apps/data/routes/rpc.test.ts +446 -28
- package/src/apps/data/routes/rpc.ts +243 -25
- package/src/apps/data/routes/tokenlist.test.ts +15 -0
- package/src/apps/data/routes/tokenlist.ts +88 -22
- package/src/apps/data/routes/tokens.ts +262 -86
- package/src/apps/data/routes/transactions.test.ts +2 -0
- package/src/apps/data/routes/transactions.ts +77 -42
- package/src/apps/data/routes/transfers.test.ts +166 -4
- package/src/apps/data/routes/transfers.ts +216 -78
- package/src/apps/data/routes/valuation.test.ts +62 -9
- package/src/apps/data/routes/valuation.ts +2 -2
- package/src/apps/data/routes/verified-tokens.test.ts +51 -0
- package/src/apps/data/routes/verified-tokens.ts +52 -15
- package/src/apps/data/routes/webhooks.test.ts +432 -33
- package/src/apps/data/routes/webhooks.ts +189 -79
- package/src/apps/data/routes/zones.test.ts +473 -0
- package/src/apps/data/routes/zones.ts +338 -0
- package/src/apps/docs/reference.ts +8 -6
- package/src/apps/index.ts +2 -1
- package/src/apps/management/Billing.test.ts +29 -0
- package/src/apps/management/Billing.ts +23 -0
- package/src/apps/management/Error.ts +12 -0
- package/src/apps/management/routes/api-keys.test.ts +5 -3
- package/src/apps/management/routes/api-keys.ts +2 -9
- package/src/apps/management/routes/invitations.ts +4 -11
- package/src/apps/management/routes/orgs.ts +2 -9
- package/src/apps/management/routes/scopes.test.ts +7 -2
- package/src/apps/management/routes/scopes.ts +2 -2
- package/src/apps/management/routes/webhooks.test.ts +6 -1
- package/src/apps/management/routes/webhooks.ts +15 -3
- package/src/apps/mpp/App.ts +276 -29
- package/src/apps/mpp/Mpp.test.ts +631 -26
- package/src/apps/mpp/Mpp.ts +0 -42
- package/src/apps/mpp/internal/Adapter.ts +108 -3
- package/src/apps/mpp/internal/Error.test.ts +33 -0
- package/src/apps/mpp/internal/Error.ts +44 -6
- package/src/apps/mpp/internal/Idempotency.test.ts +213 -0
- package/src/apps/mpp/internal/Idempotency.ts +59 -5
- package/src/apps/mpp/internal/Policy.test.ts +122 -0
- package/src/apps/mpp/internal/Policy.ts +98 -0
- package/src/apps/mpp/internal/ScreenManager.test.ts +68 -0
- package/src/apps/mpp/internal/ScreenManager.ts +41 -0
- package/src/apps/mpp/internal/Screening.ts +40 -3
- package/src/apps/mpp/internal/Sponsorship.ts +144 -0
- package/src/apps/mpp/internal/Utils.ts +30 -0
- package/src/apps/relay/App.test.ts +495 -64
- package/src/apps/relay/App.ts +234 -24
- package/src/apps/relay/Sponsorships.test.ts +51 -0
- package/src/apps/relay/Sponsorships.ts +19 -7
- package/src/db/Db.ts +439 -0
- package/src/db/Schema.ts +325 -2
- package/src/db/tables/earnVaults.test.ts +185 -0
- package/src/db/tables/earnVaults.ts +151 -0
- package/src/db/tables/fundingCatalog.test.ts +108 -0
- package/src/db/tables/fundingCatalog.ts +157 -0
- package/src/db/tables/fundingDepositAddresses.test.ts +580 -0
- package/src/db/tables/fundingDepositAddresses.ts +376 -0
- package/src/db/tables/fundingDeposits.test.ts +261 -0
- package/src/db/tables/fundingDeposits.ts +229 -0
- package/src/db/tables/fundingIdempotency.test.ts +182 -0
- package/src/db/tables/fundingIdempotency.ts +180 -0
- package/src/db/tables/fundingTransferEvents.ts +28 -0
- package/src/db/tables/fundingTransferTransactions.test.ts +69 -0
- package/src/db/tables/fundingTransferTransactions.ts +37 -0
- package/src/db/tables/fundingTransfers.test.ts +89 -0
- package/src/db/tables/fundingTransfers.ts +153 -0
- package/src/db/tables/organizations.test.ts +88 -0
- package/src/db/tables/organizations.ts +42 -1
- package/src/db/tables/projects.ts +16 -0
- package/src/db/tables/requestUsage.ts +23 -0
- package/src/db/tables/sponsoredTransactions.test.ts +52 -2
- package/src/db/tables/sponsoredTransactions.ts +18 -6
- package/src/db/tables/users.ts +16 -0
- package/src/db/tables/verifiedTokens.ts +19 -14
- package/src/db/tables/webhookSubscriptions.ts +58 -3
- package/src/handlers/relay.test.ts +2 -0
- package/src/handlers/relay.ts +95 -99
- package/src/internal/Auth.test.ts +48 -0
- package/src/internal/Auth.ts +61 -2
- package/src/internal/Cache.ts +13 -9
- package/src/internal/Cursor.test.ts +2 -2
- package/src/internal/Cursor.ts +1 -1
- package/src/internal/EarnRates.test.ts +125 -0
- package/src/internal/EarnRates.ts +409 -0
- package/src/internal/EarnVaults.test.ts +195 -0
- package/src/internal/EarnVaults.ts +876 -0
- package/src/internal/EdgeCache.test.ts +37 -5
- package/src/internal/EdgeCache.ts +39 -7
- package/src/internal/Id.ts +14 -0
- package/src/internal/Idempotency.test.ts +109 -0
- package/src/internal/Idempotency.ts +237 -0
- package/src/internal/Log.test-d.ts +41 -8
- package/src/internal/Log.test.ts +189 -8
- package/src/internal/Log.ts +124 -17
- package/src/internal/MetricSink.test.ts +244 -4
- package/src/internal/MetricSink.ts +51 -1
- package/src/internal/OpenApi.ts +3 -0
- package/src/internal/Provider.test.ts +17 -0
- package/src/internal/Provider.ts +17 -0
- package/src/internal/Schema.test.ts +13 -0
- package/src/internal/Schema.ts +41 -24
- package/src/internal/Store.test.ts +25 -0
- package/src/internal/Store.ts +46 -0
- package/src/internal/Tidx.local.test.ts +78 -3
- package/src/internal/Tidx.test.ts +212 -18
- package/src/internal/Tidx.ts +112 -32
- package/src/internal/VerifiedTokens.test.ts +15 -0
- package/src/internal/Viem.test.ts +170 -17
- package/src/internal/Viem.ts +111 -28
- package/src/internal/WebhookDestination.ts +25 -23
- package/src/internal/Webhooks.test.ts +59 -0
- package/src/internal/Webhooks.ts +34 -10
- package/src/internal/exchange/Provider.test.ts +216 -0
- package/src/internal/exchange/Provider.ts +326 -0
- package/src/internal/exchange/index.test.ts +6 -0
- package/src/internal/exchange/index.ts +1 -0
- package/src/internal/exchange/providers/uniswap.test.ts +122 -0
- package/src/internal/exchange/providers/uniswap.ts +682 -0
- package/src/internal/funding/Action.test.ts +138 -0
- package/src/internal/funding/Action.ts +117 -0
- package/src/internal/funding/Catalog.test.ts +311 -0
- package/src/internal/funding/Catalog.ts +347 -0
- package/src/internal/funding/Chain.test.ts +79 -0
- package/src/internal/funding/Chain.ts +120 -0
- package/src/internal/funding/Deposit.test.ts +26 -0
- package/src/internal/funding/Deposit.ts +453 -0
- package/src/internal/funding/DepositAddress.test.ts +18 -0
- package/src/internal/funding/DepositAddress.ts +312 -0
- package/src/internal/funding/Evidence.test.ts +297 -0
- package/src/internal/funding/Evidence.ts +430 -0
- package/src/internal/funding/Provider.test.ts +1328 -0
- package/src/internal/funding/Provider.ts +1796 -0
- package/src/internal/funding/Reconciliation.local.test.ts +504 -0
- package/src/internal/funding/Reconciliation.test.ts +2020 -0
- package/src/internal/funding/Reconciliation.ts +930 -0
- package/src/internal/funding/Route.test.ts +66 -0
- package/src/internal/funding/Route.ts +29 -0
- package/src/internal/funding/Subsidy.local.test.ts +152 -0
- package/src/internal/funding/Subsidy.test.ts +75 -0
- package/src/internal/funding/Subsidy.ts +260 -0
- package/src/internal/funding/Token.test.ts +47 -0
- package/src/internal/funding/Token.ts +59 -0
- package/src/internal/funding/Transfer.test.ts +369 -0
- package/src/internal/funding/Transfer.ts +522 -0
- package/src/internal/funding/index.test.ts +20 -0
- package/src/internal/funding/index.ts +12 -0
- package/src/internal/funding/providers/across.ts +149 -0
- package/src/{apps/data/FundingQuoteProviders.test.ts → internal/funding/providers/index.test.ts} +178 -157
- package/src/internal/funding/providers/relay.test.ts +474 -0
- package/src/internal/funding/providers/relay.ts +559 -0
- package/src/internal/funding/providers/rhino.ts +139 -0
- package/src/internal/funding/providers/squid.ts +151 -0
- package/src/internal/funding/providers/symbiosis.ts +221 -0
- package/src/internal/index.test.ts +5 -1
- package/src/internal/index.ts +5 -1
- package/src/internal/webhookDestinations/url.ts +49 -45
- package/src/providers/index.test.ts +14 -0
- package/src/providers/index.ts +54 -0
- package/dist/apps/data/FundingQuoteProviders.d.ts +0 -174
- package/dist/apps/data/FundingQuoteProviders.d.ts.map +0 -1
- package/dist/apps/data/FundingQuoteProviders.js +0 -775
- package/dist/apps/data/FundingQuoteProviders.js.map +0 -1
- package/dist/internal/FundingQuotes.d.ts +0 -864
- package/dist/internal/FundingQuotes.d.ts.map +0 -1
- package/dist/internal/FundingQuotes.js +0 -672
- package/dist/internal/FundingQuotes.js.map +0 -1
- package/src/apps/data/FundingQuoteProviders.ts +0 -1043
- package/src/internal/FundingQuotes.test.ts +0 -456
- package/src/internal/FundingQuotes.ts +0 -944
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { LocalAccount } from 'viem/accounts';
|
|
2
|
+
import type * as Viem from '../../../internal/Viem.js';
|
|
3
|
+
import * as Store from '../../../internal/Store.js';
|
|
4
|
+
import * as Mpp from '../Mpp.js';
|
|
5
|
+
import * as Screening from './Screening.js';
|
|
6
|
+
/** MPPX lifecycle adapter. */
|
|
7
|
+
export type Adapter = {
|
|
8
|
+
/** Broadcasts a validated MPP credential. */
|
|
9
|
+
broadcast(input: Mpp.RelayInput): Promise<Mpp.BroadcastResponse>;
|
|
10
|
+
/** Validates an MPP credential without broadcasting it. */
|
|
11
|
+
verify(input: Mpp.RelayInput): Promise<Mpp.VerifyResponse>;
|
|
12
|
+
};
|
|
13
|
+
/** Creates an adapter for Tempo charge credentials. */
|
|
14
|
+
export declare function create(options: create.Options): Adapter;
|
|
15
|
+
export declare namespace create {
|
|
16
|
+
/** Dependencies used to validate and broadcast Tempo credentials. */
|
|
17
|
+
type Options = {
|
|
18
|
+
/** Default Tempo chain for challenges that omit a chain id. */
|
|
19
|
+
chainId: number;
|
|
20
|
+
/** Optional account used to sponsor Tempo pull transactions. */
|
|
21
|
+
feePayer?: LocalAccount | undefined;
|
|
22
|
+
/** Resolves a Tempo client for each credential chain. */
|
|
23
|
+
getClient: Viem.GetClient;
|
|
24
|
+
/** Address-screening provider. */
|
|
25
|
+
provider?: Screening.Provider | undefined;
|
|
26
|
+
/** Reports an unexpected relay failure without passing through its cause. */
|
|
27
|
+
reportUnknown?: ((options: {
|
|
28
|
+
operation: 'broadcast' | 'verify';
|
|
29
|
+
}) => void) | undefined;
|
|
30
|
+
/** Cache used for screening results. */
|
|
31
|
+
screeningStore: Store.Store;
|
|
32
|
+
/** Screening-cache duration. @default `Ttl.days(1)` */
|
|
33
|
+
screeningTtl?: number | undefined;
|
|
34
|
+
/** Durable state used for MPPX replay protection. */
|
|
35
|
+
state: Store.State;
|
|
36
|
+
/** Measures a named relay operation. */
|
|
37
|
+
time?: (<value>(name: string, fn: () => Promise<value>) => Promise<value>) | undefined;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=Adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Adapter.d.ts","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,KAAK,IAAI,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAA;AACnD,OAAO,KAAK,GAAG,MAAM,WAAW,CAAA;AAEhC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAI3C,8BAA8B;AAC9B,MAAM,MAAM,OAAO,GAAG;IACpB,6CAA6C;IAC7C,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAChE,2DAA2D;IAC3D,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;CAC3D,CAAA;AAED,uDAAuD;AACvD,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAsEvD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,qEAAqE;IACrE,KAAK,OAAO,GAAG;QACb,+DAA+D;QAC/D,OAAO,EAAE,MAAM,CAAA;QACf,gEAAgE;QAChE,QAAQ,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;QACnC,yDAAyD;QACzD,SAAS,EAAE,IAAI,CAAC,SAAS,CAAA;QACzB,kCAAkC;QAClC,QAAQ,CAAC,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzC,6EAA6E;QAC7E,aAAa,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;YAAE,SAAS,EAAE,WAAW,GAAG,QAAQ,CAAA;SAAE,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;QACtF,wCAAwC;QACxC,cAAc,EAAE,KAAK,CAAC,KAAK,CAAA;QAC3B,uDAAuD;QACvD,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACjC,qDAAqD;QACrD,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;QAClB,wCAAwC;QACxC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAA;KACvF,CAAA;CACF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as Mppx from 'mppx';
|
|
2
|
+
import { tempo } from 'mppx/server';
|
|
3
|
+
import * as Store from '../../../internal/Store.js';
|
|
4
|
+
import * as Mpp from '../Mpp.js';
|
|
5
|
+
import * as MppError from './Error.js';
|
|
6
|
+
import * as Screening from './Screening.js';
|
|
7
|
+
import * as ScreenManager from './ScreenManager.js';
|
|
8
|
+
import * as Utils from './Utils.js';
|
|
9
|
+
/** Creates an adapter for Tempo charge credentials. */
|
|
10
|
+
export function create(options) {
|
|
11
|
+
const { chainId, feePayer, getClient, provider = Screening.allowAll, reportUnknown, screeningStore, screeningTtl = Screening.defaultTtl, state, time = (_, fn) => fn(), } = options;
|
|
12
|
+
const screenManager = ScreenManager.create({
|
|
13
|
+
chainId,
|
|
14
|
+
provider,
|
|
15
|
+
store: screeningStore,
|
|
16
|
+
ttl: screeningTtl,
|
|
17
|
+
});
|
|
18
|
+
const methods = [
|
|
19
|
+
tempo.charge({
|
|
20
|
+
...(feePayer ? { feePayer } : {}),
|
|
21
|
+
getClient: ({ chainId: chainId_option }) => getClient(chainId_option),
|
|
22
|
+
store: Utils.mppxStore(state),
|
|
23
|
+
}),
|
|
24
|
+
];
|
|
25
|
+
/** Validates and screens a credential, rejecting when either check fails. */
|
|
26
|
+
async function validateOrThrow(input) {
|
|
27
|
+
const result = await time('mpp_validate', () => Mppx.Method.validateCredential(methods, Mppx.Credential.from(input)));
|
|
28
|
+
await time('mpp_screen', () => screenManager.screen(Utils.addresses(result)));
|
|
29
|
+
}
|
|
30
|
+
function failure(cause, operation) {
|
|
31
|
+
const error = MppError.map(cause);
|
|
32
|
+
if (error.code === Mpp.relayErrorCode.unknown)
|
|
33
|
+
reportUnknown?.({ operation });
|
|
34
|
+
return { error, success: false };
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
async broadcast(input) {
|
|
38
|
+
try {
|
|
39
|
+
await validateOrThrow(input);
|
|
40
|
+
const result = await time('mpp_broadcast', () => Mppx.Method.broadcastCredential(methods, Mppx.Credential.from(input)));
|
|
41
|
+
return {
|
|
42
|
+
receipt: {
|
|
43
|
+
...(result.externalId ? { externalId: result.externalId } : {}),
|
|
44
|
+
method: result.method,
|
|
45
|
+
reference: result.reference,
|
|
46
|
+
timestamp: result.timestamp,
|
|
47
|
+
},
|
|
48
|
+
success: true,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (cause) {
|
|
52
|
+
return failure(cause, 'broadcast');
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
async verify(input) {
|
|
56
|
+
try {
|
|
57
|
+
await validateOrThrow(input);
|
|
58
|
+
return { success: true };
|
|
59
|
+
}
|
|
60
|
+
catch (cause) {
|
|
61
|
+
return failure(cause, 'verify');
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=Adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Adapter.js","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAInC,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAA;AACnD,OAAO,KAAK,GAAG,MAAM,WAAW,CAAA;AAChC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAC3C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AACnD,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAUnC,uDAAuD;AACvD,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,MAAM,EACJ,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAC7B,aAAa,EACb,cAAc,EACd,YAAY,GAAG,SAAS,CAAC,UAAU,EACnC,KAAK,EACL,IAAI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GACvB,GAAG,OAAO,CAAA;IACX,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC;QACzC,OAAO;QACP,QAAQ;QACR,KAAK,EAAE,cAAc;QACrB,GAAG,EAAE,YAAY;KAClB,CAAC,CAAA;IACF,MAAM,OAAO,GAAG;QACd,KAAK,CAAC,MAAM,CAAC;YACX,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,CACzC,SAAS,CAAC,cAA0C,CAAC;YACvD,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;SAC9B,CAAC;KACM,CAAA;IAEV,6EAA6E;IAC7E,KAAK,UAAU,eAAe,CAAC,KAAqB;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE,CAC7C,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACrE,CAAA;QACD,MAAM,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IAC/E,CAAC;IAED,SAAS,OAAO,CAAC,KAAc,EAAE,SAAiC;QAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACjC,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,cAAc,CAAC,OAAO;YAAE,aAAa,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;QAC7E,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAW,CAAA;IAC3C,CAAC;IAED,OAAO;QACL,KAAK,CAAC,SAAS,CAAC,KAAK;YACnB,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,KAAK,CAAC,CAAA;gBAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,CAC9C,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACtE,CAAA;gBACD,OAAO;oBACL,OAAO,EAAE;wBACP,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/D,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;qBAC5B;oBACD,OAAO,EAAE,IAAI;iBACd,CAAA;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,KAAK;YAChB,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,KAAK,CAAC,CAAA;gBAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Error.d.ts","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Error.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,WAAW,CAAA;AAIhC,+DAA+D;AAC/D,wBAAgB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAAC,UAAU,CAmClD"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as Mppx from 'mppx';
|
|
2
|
+
import * as Mpp from '../Mpp.js';
|
|
3
|
+
import * as Policy from './Policy.js';
|
|
4
|
+
import * as ScreenManager from './ScreenManager.js';
|
|
5
|
+
/** Maps an MPPX failure to the public relay error contract. */
|
|
6
|
+
export function map(cause) {
|
|
7
|
+
const message = cause instanceof Error ? cause.message : undefined;
|
|
8
|
+
switch (true) {
|
|
9
|
+
case cause instanceof ScreenManager.RejectedError:
|
|
10
|
+
return error(Mpp.relayErrorCode.screenRejected, 'Address screening rejected the payment.');
|
|
11
|
+
case cause instanceof Policy.UnsupportedChainError:
|
|
12
|
+
case cause instanceof Mppx.Errors.PaymentMethodUnsupportedError:
|
|
13
|
+
return error(Mpp.relayErrorCode.unsupported, message);
|
|
14
|
+
case cause instanceof Policy.PolicyDeniedError:
|
|
15
|
+
return error(Mpp.relayErrorCode.policyDenied, message);
|
|
16
|
+
case cause instanceof Mppx.Errors.PaymentExpiredError:
|
|
17
|
+
return error(Mpp.relayErrorCode.expired, message);
|
|
18
|
+
case cause instanceof Mppx.Errors.InsufficientBalanceError:
|
|
19
|
+
case cause instanceof Mppx.Errors.PaymentInsufficientError:
|
|
20
|
+
return error(Mpp.relayErrorCode.insufficientFunds, message);
|
|
21
|
+
case cause instanceof Mppx.Errors.InvalidChallengeError:
|
|
22
|
+
case cause instanceof Mppx.Errors.VerificationFailedError:
|
|
23
|
+
return error(/\balready (?:been )?used\b/i.test(message ?? '')
|
|
24
|
+
? Mpp.relayErrorCode.alreadyUsed
|
|
25
|
+
: Mpp.relayErrorCode.invalidPayment, message);
|
|
26
|
+
case cause instanceof Mppx.Errors.InvalidPayloadError:
|
|
27
|
+
case cause instanceof Mppx.Errors.InvalidSignatureError:
|
|
28
|
+
case cause instanceof Mppx.Errors.MalformedCredentialError:
|
|
29
|
+
return error(Mpp.relayErrorCode.invalidPayment, message);
|
|
30
|
+
case message?.toLowerCase().includes('simulation'):
|
|
31
|
+
return error(Mpp.relayErrorCode.simulationFailed, message);
|
|
32
|
+
case message?.toLowerCase().includes('broadcast'):
|
|
33
|
+
return error(Mpp.relayErrorCode.broadcastFailed, message);
|
|
34
|
+
default:
|
|
35
|
+
return error(Mpp.relayErrorCode.unknown, message);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function error(code, message) {
|
|
39
|
+
return message === undefined ? { code } : { code, message };
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=Error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Error.js","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,KAAK,GAAG,MAAM,WAAW,CAAA;AAChC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,+DAA+D;AAC/D,MAAM,UAAU,GAAG,CAAC,KAAc;IAChC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;IAElE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK,YAAY,aAAa,CAAC,aAAa;YAC/C,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,yCAAyC,CAAC,CAAA;QAC5F,KAAK,KAAK,YAAY,MAAM,CAAC,qBAAqB,CAAC;QACnD,KAAK,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,6BAA6B;YAC7D,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACvD,KAAK,KAAK,YAAY,MAAM,CAAC,iBAAiB;YAC5C,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;QACxD,KAAK,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,mBAAmB;YACnD,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACnD,KAAK,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC;QAC3D,KAAK,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,wBAAwB;YACxD,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAA;QAC7D,KAAK,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;QACxD,KAAK,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,uBAAuB;YACvD,OAAO,KAAK,CACV,6BAA6B,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;gBAC/C,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW;gBAChC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EACrC,OAAO,CACR,CAAA;QACH,KAAK,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC;QACtD,KAAK,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;QACxD,KAAK,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,wBAAwB;YACxD,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;QAC1D,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;YAChD,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;QAC5D,KAAK,OAAO,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC/C,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;QAC3D;YACE,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,IAAwB,EAAE,OAA2B;IAClE,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AAC7D,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as core_Idempotency from '../../../internal/Idempotency.js';
|
|
2
|
+
import type * as Mpp from '../Mpp.js';
|
|
3
|
+
/**
|
|
4
|
+
* API-level retry coordination for `POST /v1/mpp/broadcast`, backed by the
|
|
5
|
+
* shared coordinator in `internal/Idempotency.ts`.
|
|
6
|
+
*
|
|
7
|
+
* MPPX consumes payment proofs, preventing settlement replay. This module instead lets a caller recover a successful receipt after a transport timeout.
|
|
8
|
+
*/
|
|
9
|
+
/** Identity for one caller-supplied idempotent broadcast request. */
|
|
10
|
+
export type Identity = core_Idempotency.Identity;
|
|
11
|
+
/** Returns a stable digest without retaining credential contents in durable state. */
|
|
12
|
+
export declare function inputHash(input: Mpp.RelayInput): string;
|
|
13
|
+
/** Claims a broadcast request or returns its current outcome. */
|
|
14
|
+
export declare function claim(options: claim.Options): Promise<claim.Result>;
|
|
15
|
+
export declare namespace claim {
|
|
16
|
+
/** Outcome from attempting to claim an idempotency key. */
|
|
17
|
+
type Result = core_Idempotency.claim.Result<Mpp.BroadcastResponse>;
|
|
18
|
+
/** Dependencies for claiming one idempotency key. */
|
|
19
|
+
type Options = core_Idempotency.claim.Options;
|
|
20
|
+
}
|
|
21
|
+
/** Persists a successful response for an owned request claim. */
|
|
22
|
+
export declare function complete(options: complete.Options): Promise<void>;
|
|
23
|
+
export declare namespace complete {
|
|
24
|
+
/** Dependencies for persisting one terminal broadcast response. */
|
|
25
|
+
type Options = core_Idempotency.complete.Options<Mpp.BroadcastResponse>;
|
|
26
|
+
}
|
|
27
|
+
/** Releases an owned retryable request claim. */
|
|
28
|
+
export declare function release(options: release.Options): Promise<void>;
|
|
29
|
+
export declare namespace release {
|
|
30
|
+
/** Dependencies for releasing one idempotency claim. */
|
|
31
|
+
type Options = core_Idempotency.release.Options;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=Idempotency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Idempotency.d.ts","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,kCAAkC,CAAA;AAEpE,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAA;AAErC;;;;;GAKG;AAEH,qEAAqE;AACrE,MAAM,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAA;AAYhD,sFAAsF;AACtF,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,UAE9C;AAED,iEAAiE;AACjE,wBAAgB,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAEnE;AAED,MAAM,CAAC,OAAO,WAAW,KAAK,CAAC;IAC7B,2DAA2D;IAC3D,KAAK,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAElE,qDAAqD;IACrD,KAAK,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAA;CAC9C;AAED,iEAAiE;AACjE,wBAAgB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjE;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,mEAAmE;IACnE,KAAK,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;CACxE;AAED,iDAAiD;AACjD,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/D;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,wDAAwD;IACxD,KAAK,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAA;CAChD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as core_Idempotency from '../../../internal/Idempotency.js';
|
|
2
|
+
import * as Ttl from '../../../internal/Ttl.js';
|
|
3
|
+
const broadcast = core_Idempotency.create({
|
|
4
|
+
namespace: 'mpp:relay:v1',
|
|
5
|
+
// Covers the confirmation wait after a credential has passed its
|
|
6
|
+
// five-second validity window.
|
|
7
|
+
pendingTtl: Ttl.minutes(1),
|
|
8
|
+
// Retains a successful settlement receipt for client recovery after
|
|
9
|
+
// transport failures.
|
|
10
|
+
receiptTtl: Ttl.days(1),
|
|
11
|
+
});
|
|
12
|
+
/** Returns a stable digest without retaining credential contents in durable state. */
|
|
13
|
+
export function inputHash(input) {
|
|
14
|
+
return core_Idempotency.inputHash(input);
|
|
15
|
+
}
|
|
16
|
+
/** Claims a broadcast request or returns its current outcome. */
|
|
17
|
+
export function claim(options) {
|
|
18
|
+
return broadcast.claim(options);
|
|
19
|
+
}
|
|
20
|
+
/** Persists a successful response for an owned request claim. */
|
|
21
|
+
export function complete(options) {
|
|
22
|
+
return broadcast.complete(options);
|
|
23
|
+
}
|
|
24
|
+
/** Releases an owned retryable request claim. */
|
|
25
|
+
export function release(options) {
|
|
26
|
+
return broadcast.release(options);
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=Idempotency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Idempotency.js","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Idempotency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,kCAAkC,CAAA;AACpE,OAAO,KAAK,GAAG,MAAM,0BAA0B,CAAA;AAa/C,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAwB;IAC/D,SAAS,EAAE,cAAc;IACzB,iEAAiE;IACjE,+BAA+B;IAC/B,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1B,oEAAoE;IACpE,sBAAsB;IACtB,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;CACxB,CAAC,CAAA;AAEF,sFAAsF;AACtF,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,OAAO,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC1C,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,KAAK,CAAC,OAAsB;IAC1C,OAAO,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AACjC,CAAC;AAUD,iEAAiE;AACjE,MAAM,UAAU,QAAQ,CAAC,OAAyB;IAChD,OAAO,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AACpC,CAAC;AAOD,iDAAiD;AACjD,MAAM,UAAU,OAAO,CAAC,OAAwB;IAC9C,OAAO,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { LocalAccount } from 'viem/accounts';
|
|
2
|
+
import type * as Auth from '../../../internal/Auth.js';
|
|
3
|
+
import type * as Db from '../../../db/Db.js';
|
|
4
|
+
import type * as Mpp from '../Mpp.js';
|
|
5
|
+
/** Resolves the chain declared by a Tempo charge challenge. */
|
|
6
|
+
export declare function chainId(input: Mpp.RelayInput): number | undefined;
|
|
7
|
+
/** Whether a Tempo charge credential requests platform fee sponsorship. */
|
|
8
|
+
export declare function requiresFeePayer(input: Mpp.RelayInput): boolean;
|
|
9
|
+
/** Refuses credentials outside the chains served by this API deployment. */
|
|
10
|
+
export declare function assertSupportedChain(options: assertSupportedChain.Options): void;
|
|
11
|
+
export declare namespace assertSupportedChain {
|
|
12
|
+
/** Chain-selection inputs. */
|
|
13
|
+
type Options = {
|
|
14
|
+
/** Resolved credential chain. */
|
|
15
|
+
chainId: number;
|
|
16
|
+
/** Chains served by this API deployment. */
|
|
17
|
+
supportedChainIds: ReadonlySet<number>;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
/** Authorizes managed fee sponsorship for one broadcast request. */
|
|
21
|
+
export declare function authorizeFeePayer(options: authorizeFeePayer.Options): Promise<LocalAccount | undefined>;
|
|
22
|
+
export declare namespace authorizeFeePayer {
|
|
23
|
+
/** Dependencies used to authorize managed fee sponsorship. */
|
|
24
|
+
type Options = {
|
|
25
|
+
/** Credential chain. */
|
|
26
|
+
chainId: number;
|
|
27
|
+
/** Primary database for authoritative billing enforcement. */
|
|
28
|
+
db: Db.Db;
|
|
29
|
+
/** Managed fee-payer account, when configured. */
|
|
30
|
+
feePayer?: LocalAccount | undefined;
|
|
31
|
+
/** MPP credential being broadcast. */
|
|
32
|
+
input: Mpp.RelayInput;
|
|
33
|
+
/** Authenticated request principal. */
|
|
34
|
+
principal?: Auth.Principal | undefined;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/** Raised when an MPP credential selects a chain this deployment does not serve. */
|
|
38
|
+
export declare class UnsupportedChainError extends Error {
|
|
39
|
+
name: string;
|
|
40
|
+
constructor(chainId: number);
|
|
41
|
+
}
|
|
42
|
+
/** Raised when a caller is not eligible for managed fee sponsorship. */
|
|
43
|
+
export declare class PolicyDeniedError extends Error {
|
|
44
|
+
name: string;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=Policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Policy.d.ts","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,KAAK,KAAK,IAAI,MAAM,2BAA2B,CAAA;AACtD,OAAO,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAG5C,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAA;AAErC,+DAA+D;AAC/D,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAIjE;AAED,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,WAGrD;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,CAAC,OAAO,QAGzE;AAED,MAAM,CAAC,OAAO,WAAW,oBAAoB,CAAC;IAC5C,8BAA8B;IAC9B,KAAK,OAAO,GAAG;QACb,iCAAiC;QACjC,OAAO,EAAE,MAAM,CAAA;QACf,4CAA4C;QAC5C,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;KACvC,CAAA;CACF;AAED,oEAAoE;AACpE,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,iBAAiB,CAAC,OAAO,GACjC,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAiBnC;AAED,MAAM,CAAC,OAAO,WAAW,iBAAiB,CAAC;IACzC,8DAA8D;IAC9D,KAAK,OAAO,GAAG;QACb,wBAAwB;QACxB,OAAO,EAAE,MAAM,CAAA;QACf,8DAA8D;QAC9D,EAAE,EAAE,EAAE,CAAC,EAAE,CAAA;QACT,kDAAkD;QAClD,QAAQ,CAAC,EAAE,YAAY,GAAG,SAAS,CAAA;QACnC,sCAAsC;QACtC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAA;QACrB,uCAAuC;QACvC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;KACvC,CAAA;CACF;AAYD,oFAAoF;AACpF,qBAAa,qBAAsB,SAAQ,KAAK;IACrC,IAAI,SAAqC;IAElD,YAAY,OAAO,EAAE,MAAM,EAE1B;CACF;AAED,wEAAwE;AACxE,qBAAa,iBAAkB,SAAQ,KAAK;IACjC,IAAI,SAAiC;CAC/C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as Viem from '../../../internal/Viem.js';
|
|
2
|
+
import * as Billing from '../../management/Billing.js';
|
|
3
|
+
/** Resolves the chain declared by a Tempo charge challenge. */
|
|
4
|
+
export function chainId(input) {
|
|
5
|
+
const request = input.challenge.request;
|
|
6
|
+
const details = record(request['methodDetails']);
|
|
7
|
+
return number(details?.['chainId']) ?? number(request['chainId']);
|
|
8
|
+
}
|
|
9
|
+
/** Whether a Tempo charge credential requests platform fee sponsorship. */
|
|
10
|
+
export function requiresFeePayer(input) {
|
|
11
|
+
const request = input.challenge.request;
|
|
12
|
+
return record(request['methodDetails'])?.['feePayer'] === true && request['feePayer'] !== false;
|
|
13
|
+
}
|
|
14
|
+
/** Refuses credentials outside the chains served by this API deployment. */
|
|
15
|
+
export function assertSupportedChain(options) {
|
|
16
|
+
const { chainId, supportedChainIds } = options;
|
|
17
|
+
if (!supportedChainIds.has(chainId))
|
|
18
|
+
throw new UnsupportedChainError(chainId);
|
|
19
|
+
}
|
|
20
|
+
/** Authorizes managed fee sponsorship for one broadcast request. */
|
|
21
|
+
export async function authorizeFeePayer(options) {
|
|
22
|
+
const { chainId, db, feePayer, input, principal } = options;
|
|
23
|
+
if (!feePayer || !requiresFeePayer(input))
|
|
24
|
+
return feePayer;
|
|
25
|
+
if (principal?.type !== 'api_key')
|
|
26
|
+
throw new PolicyDeniedError('Fee sponsorship requires an API key.');
|
|
27
|
+
if (!Viem.isMainnet(chainId))
|
|
28
|
+
return feePayer;
|
|
29
|
+
if (principal.environment !== 'production')
|
|
30
|
+
throw new PolicyDeniedError('Mainnet fee sponsorship requires a production API key.');
|
|
31
|
+
const status = await Billing.status(db, principal.orgId);
|
|
32
|
+
if (status !== 'active')
|
|
33
|
+
throw new PolicyDeniedError(status === 'past_due'
|
|
34
|
+
? 'Billing is past due.'
|
|
35
|
+
: 'Active billing is required for mainnet fee sponsorship.');
|
|
36
|
+
return feePayer;
|
|
37
|
+
}
|
|
38
|
+
function record(value) {
|
|
39
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
40
|
+
? value
|
|
41
|
+
: undefined;
|
|
42
|
+
}
|
|
43
|
+
function number(value) {
|
|
44
|
+
return typeof value === 'number' && Number.isSafeInteger(value) ? value : undefined;
|
|
45
|
+
}
|
|
46
|
+
/** Raised when an MPP credential selects a chain this deployment does not serve. */
|
|
47
|
+
export class UnsupportedChainError extends Error {
|
|
48
|
+
name = 'Mpp.Policy.UnsupportedChainError';
|
|
49
|
+
constructor(chainId) {
|
|
50
|
+
super(`Unsupported chain id ${chainId}.`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** Raised when a caller is not eligible for managed fee sponsorship. */
|
|
54
|
+
export class PolicyDeniedError extends Error {
|
|
55
|
+
name = 'Mpp.Policy.PolicyDeniedError';
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=Policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Policy.js","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Policy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,IAAI,MAAM,2BAA2B,CAAA;AACjD,OAAO,KAAK,OAAO,MAAM,6BAA6B,CAAA;AAGtD,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,KAAqB;IAC3C,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAA;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAA;IAChD,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;AACnE,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAC,KAAqB;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAA;IACvC,OAAO,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,CAAA;AACjG,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,oBAAoB,CAAC,OAAqC;IACxE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAA;IAC9C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC/E,CAAC;AAYD,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAkC;IAElC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAC3D,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC1D,IAAI,SAAS,EAAE,IAAI,KAAK,SAAS;QAC/B,MAAM,IAAI,iBAAiB,CAAC,sCAAsC,CAAC,CAAA;IACrE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAAE,OAAO,QAAQ,CAAA;IAC7C,IAAI,SAAS,CAAC,WAAW,KAAK,YAAY;QACxC,MAAM,IAAI,iBAAiB,CAAC,wDAAwD,CAAC,CAAA;IAEvF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;IACxD,IAAI,MAAM,KAAK,QAAQ;QACrB,MAAM,IAAI,iBAAiB,CACzB,MAAM,KAAK,UAAU;YACnB,CAAC,CAAC,sBAAsB;YACxB,CAAC,CAAC,yDAAyD,CAC9D,CAAA;IACH,OAAO,QAAQ,CAAA;AACjB,CAAC;AAkBD,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAChE,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,SAAS,CAAA;AACf,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AACrF,CAAC;AAED,oFAAoF;AACpF,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,GAAG,kCAAkC,CAAA;IAElD,YAAY,OAAe;QACzB,KAAK,CAAC,wBAAwB,OAAO,GAAG,CAAC,CAAA;IAC3C,CAAC;CACF;AAED,wEAAwE;AACxE,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,GAAG,8BAA8B,CAAA;CAC/C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as Store from '../../../internal/Store.js';
|
|
2
|
+
import * as Screening from './Screening.js';
|
|
3
|
+
/** Coordinates concurrent cached screening before credential processing. */
|
|
4
|
+
export type Manager = {
|
|
5
|
+
/** Rejects when any payment participant fails screening. */
|
|
6
|
+
screen(addresses: readonly string[]): Promise<void>;
|
|
7
|
+
};
|
|
8
|
+
/** Creates a cached address-screening manager. */
|
|
9
|
+
export declare function create(options: create.Options): Manager;
|
|
10
|
+
export declare namespace create {
|
|
11
|
+
/** Dependencies for cached address screening. */
|
|
12
|
+
type Options = {
|
|
13
|
+
/** Tempo chain that owns the screened addresses. */
|
|
14
|
+
chainId: number;
|
|
15
|
+
/** Address-screening provider. */
|
|
16
|
+
provider?: Screening.Provider | undefined;
|
|
17
|
+
/** Cache used for screening results. */
|
|
18
|
+
store: Store.Store;
|
|
19
|
+
/** Cache duration. @default `Ttl.days(1)` */
|
|
20
|
+
ttl?: number | undefined;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Indicates that an address-screening provider rejected a participant. */
|
|
24
|
+
export declare class RejectedError extends Error {
|
|
25
|
+
name: string;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ScreenManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenManager.d.ts","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/ScreenManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAA;AACnD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C,4EAA4E;AAC5E,MAAM,MAAM,OAAO,GAAG;IACpB,4DAA4D;IAC5D,MAAM,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACpD,CAAA;AAED,kDAAkD;AAClD,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAWvD;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,iDAAiD;IACjD,KAAK,OAAO,GAAG;QACb,oDAAoD;QACpD,OAAO,EAAE,MAAM,CAAA;QACf,kCAAkC;QAClC,QAAQ,CAAC,EAAE,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAA;QACzC,wCAAwC;QACxC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;QAClB,6CAA6C;QAC7C,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KACzB,CAAA;CACF;AAED,2EAA2E;AAC3E,qBAAa,aAAc,SAAQ,KAAK;IAC7B,IAAI,SAAoC;CAClD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Store from '../../../internal/Store.js';
|
|
2
|
+
import * as Screening from './Screening.js';
|
|
3
|
+
/** Creates a cached address-screening manager. */
|
|
4
|
+
export function create(options) {
|
|
5
|
+
const { chainId, provider = Screening.allowAll, store, ttl = Screening.defaultTtl } = options;
|
|
6
|
+
return {
|
|
7
|
+
async screen(addresses) {
|
|
8
|
+
const results = await Promise.all(addresses.map((address) => Screening.screen({ address, chainId, provider, store, ttl })));
|
|
9
|
+
if (results.some((result) => !result.allowed))
|
|
10
|
+
throw new RejectedError();
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** Indicates that an address-screening provider rejected a participant. */
|
|
15
|
+
export class RejectedError extends Error {
|
|
16
|
+
name = 'Mpp.ScreenManager.RejectedError';
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=ScreenManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScreenManager.js","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/ScreenManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAA;AACnD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAQ3C,kDAAkD;AAClD,MAAM,UAAU,MAAM,CAAC,OAAuB;IAC5C,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,OAAO,CAAA;IAE7F,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,SAAS;YACpB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CACzF,CAAA;YACD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,aAAa,EAAE,CAAA;QAC1E,CAAC;KACF,CAAA;AACH,CAAC;AAgBD,2EAA2E;AAC3E,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,GAAG,iCAAiC,CAAA;CAClD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as Store from '../../../internal/Store.js';
|
|
2
|
+
/** Address-screening result. */
|
|
3
|
+
export type Result = {
|
|
4
|
+
allowed: boolean;
|
|
5
|
+
};
|
|
6
|
+
/** Address-screening provider. */
|
|
7
|
+
export type Provider = {
|
|
8
|
+
/** Screens one normalized account address on a Tempo chain. */
|
|
9
|
+
screen(options: {
|
|
10
|
+
address: string;
|
|
11
|
+
chainId: number;
|
|
12
|
+
}): Promise<Result>;
|
|
13
|
+
};
|
|
14
|
+
/** Allows every address while the external screening provider is unconfigured. */
|
|
15
|
+
export declare const allowAll: Provider;
|
|
16
|
+
/** Screens one address, caching the provider result by chain and normalized address. */
|
|
17
|
+
export declare function screen(options: screen.Options): Promise<Result>;
|
|
18
|
+
export declare namespace screen {
|
|
19
|
+
/** Dependencies used to screen an address. */
|
|
20
|
+
type Options = {
|
|
21
|
+
/** Normalized account address. */
|
|
22
|
+
address: string;
|
|
23
|
+
/** Tempo chain identifier. */
|
|
24
|
+
chainId: number;
|
|
25
|
+
/** Address-screening provider. */
|
|
26
|
+
provider: Provider;
|
|
27
|
+
/** Cache used for provider results. */
|
|
28
|
+
store: Store.Store;
|
|
29
|
+
/** Cache duration. @default `Ttl.days(1)` */
|
|
30
|
+
ttl?: number | undefined;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Default address-screening cache lifetime (24 hours). */
|
|
34
|
+
export declare const defaultTtl: number;
|
|
35
|
+
//# sourceMappingURL=Screening.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screening.d.ts","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Screening.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAA;AAGnD,gCAAgC;AAChC,MAAM,MAAM,MAAM,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAA;AAEzC,kCAAkC;AAClC,MAAM,MAAM,QAAQ,GAAG;IACrB,+DAA+D;IAC/D,MAAM,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACvE,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,QAAQ,EAAE,QAItB,CAAA;AAED,wFAAwF;AACxF,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAOrE;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,8CAA8C;IAC9C,KAAK,OAAO,GAAG;QACb,kCAAkC;QAClC,OAAO,EAAE,MAAM,CAAA;QACf,8BAA8B;QAC9B,OAAO,EAAE,MAAM,CAAA;QACf,kCAAkC;QAClC,QAAQ,EAAE,QAAQ,CAAA;QAClB,uCAAuC;QACvC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAA;QAClB,6CAA6C;QAC7C,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KACzB,CAAA;CACF;AAED,2DAA2D;AAC3D,eAAO,MAAM,UAAU,QAAc,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as Store from '../../../internal/Store.js';
|
|
2
|
+
import * as Ttl from '../../../internal/Ttl.js';
|
|
3
|
+
/** Allows every address while the external screening provider is unconfigured. */
|
|
4
|
+
export const allowAll = {
|
|
5
|
+
async screen() {
|
|
6
|
+
return { allowed: true };
|
|
7
|
+
},
|
|
8
|
+
};
|
|
9
|
+
/** Screens one address, caching the provider result by chain and normalized address. */
|
|
10
|
+
export async function screen(options) {
|
|
11
|
+
const { address, chainId, provider, store, ttl = defaultTtl } = options;
|
|
12
|
+
return Store.memoize(() => provider.screen({ address, chainId }), {
|
|
13
|
+
key: `mpp:screen:v1:${chainId}:${address.toLowerCase()}`,
|
|
14
|
+
store,
|
|
15
|
+
ttl,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/** Default address-screening cache lifetime (24 hours). */
|
|
19
|
+
export const defaultTtl = Ttl.days(1);
|
|
20
|
+
//# sourceMappingURL=Screening.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screening.js","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Screening.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAA;AACnD,OAAO,KAAK,GAAG,MAAM,0BAA0B,CAAA;AAW/C,kFAAkF;AAClF,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,KAAK,CAAC,MAAM;QACV,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC1B,CAAC;CACF,CAAA;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAuB;IAClD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,UAAU,EAAE,GAAG,OAAO,CAAA;IACvE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;QAChE,GAAG,EAAE,iBAAiB,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE;QACxD,KAAK;QACL,GAAG;KACJ,CAAC,CAAA;AACJ,CAAC;AAkBD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { LocalAccount } from 'viem/accounts';
|
|
2
|
+
import type * as Auth from '../../../internal/Auth.js';
|
|
3
|
+
import type * as Db from '../../../db/Db.js';
|
|
4
|
+
/** Wraps a managed fee payer to record its signed transaction before broadcast. */
|
|
5
|
+
export declare function decorate(options: decorate.Options): LocalAccount;
|
|
6
|
+
export declare namespace decorate {
|
|
7
|
+
/** Dependencies used to record one MPP-sponsored transaction. */
|
|
8
|
+
type Options = {
|
|
9
|
+
/** Account that MPPX uses to add the fee-payer signature. */
|
|
10
|
+
account: LocalAccount;
|
|
11
|
+
/** Records the signed transaction before it can reach the network. */
|
|
12
|
+
onSigned: (options: {
|
|
13
|
+
serializedTransaction: `0x${string}`;
|
|
14
|
+
}) => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** Records a sponsorship and atomically enforces its billing limits. */
|
|
18
|
+
export declare function record(options: record.Options): Promise<void>;
|
|
19
|
+
export declare namespace record {
|
|
20
|
+
/** Dependencies used to persist one MPP sponsorship. */
|
|
21
|
+
type Options = {
|
|
22
|
+
/** Primary database for billing enforcement and sponsorship state. */
|
|
23
|
+
db: Db.Db;
|
|
24
|
+
/** Cached database used for verified-token reads. */
|
|
25
|
+
dbCached: Db.Db;
|
|
26
|
+
/** API key that requested sponsorship. */
|
|
27
|
+
principal: Extract<Auth.Principal, {
|
|
28
|
+
type: 'api_key';
|
|
29
|
+
}>;
|
|
30
|
+
/** Final fee-payer-signed transaction, before broadcast. */
|
|
31
|
+
serializedTransaction: `0x${string}`;
|
|
32
|
+
/** Platform per-transaction cap in fee-token base units. */
|
|
33
|
+
txFeeLimit: bigint;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=Sponsorship.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sponsorship.d.ts","sourceRoot":"","sources":["../../../../src/apps/mpp/internal/Sponsorship.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAGjD,OAAO,KAAK,KAAK,IAAI,MAAM,2BAA2B,CAAA;AAEtD,OAAO,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAQ5C,mFAAmF;AACnF,wBAAgB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,GAAG,YAAY,CAchE;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,iEAAiE;IACjE,KAAK,OAAO,GAAG;QACb,6DAA6D;QAC7D,OAAO,EAAE,YAAY,CAAA;QACrB,sEAAsE;QACtE,QAAQ,EAAE,CAAC,OAAO,EAAE;YAAE,qBAAqB,EAAE,KAAK,MAAM,EAAE,CAAA;SAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;KAC/E,CAAA;CACF;AAUD,wEAAwE;AACxE,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EnE;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,wDAAwD;IACxD,KAAK,OAAO,GAAG;QACb,sEAAsE;QACtE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAA;QACT,qDAAqD;QACrD,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAA;QACf,0CAA0C;QAC1C,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE,IAAI,EAAE,SAAS,CAAA;SAAE,CAAC,CAAA;QACvD,4DAA4D;QAC5D,qBAAqB,EAAE,KAAK,MAAM,EAAE,CAAA;QACpC,4DAA4D;QAC5D,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Hash } from 'ox';
|
|
2
|
+
import { TxEnvelopeTempo } from 'ox/tempo';
|
|
3
|
+
import { TokenId, Transaction } from 'viem/tempo';
|
|
4
|
+
import * as BillingSettings from '../../../db/tables/billingSettings.js';
|
|
5
|
+
import * as SponsoredTransactions from '../../../db/tables/sponsoredTransactions.js';
|
|
6
|
+
import * as Fees from '../../../internal/Fees.js';
|
|
7
|
+
import * as VerifiedTokens from '../../../internal/VerifiedTokens.js';
|
|
8
|
+
import * as Viem from '../../../internal/Viem.js';
|
|
9
|
+
import * as Billing from '../../management/Billing.js';
|
|
10
|
+
import * as Policy from './Policy.js';
|
|
11
|
+
/** Wraps a managed fee payer to record its signed transaction before broadcast. */
|
|
12
|
+
export function decorate(options) {
|
|
13
|
+
const { account, onSigned } = options;
|
|
14
|
+
const signTransaction = account.signTransaction.bind(account);
|
|
15
|
+
return new Proxy(account, {
|
|
16
|
+
get(target, property, receiver) {
|
|
17
|
+
if (property !== 'signTransaction')
|
|
18
|
+
return Reflect.get(target, property, receiver);
|
|
19
|
+
return async (...parameters) => {
|
|
20
|
+
const serializedTransaction = await signTransaction(...parameters);
|
|
21
|
+
await onSigned({ serializedTransaction });
|
|
22
|
+
return serializedTransaction;
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/** Records a sponsorship and atomically enforces its billing limits. */
|
|
28
|
+
export async function record(options) {
|
|
29
|
+
const { db, dbCached, principal, serializedTransaction, txFeeLimit } = options;
|
|
30
|
+
const transaction = Transaction.deserialize(serializedTransaction);
|
|
31
|
+
if (!transaction.from)
|
|
32
|
+
throw new Policy.PolicyDeniedError('Fee-sponsored transaction must declare a sender.');
|
|
33
|
+
if (typeof transaction.chainId !== 'number')
|
|
34
|
+
throw new Policy.PolicyDeniedError('Fee-sponsored transaction must declare a chain id.');
|
|
35
|
+
const chainId = transaction.chainId;
|
|
36
|
+
const feeMax = Fees.maxOf(transaction);
|
|
37
|
+
if (feeMax === undefined)
|
|
38
|
+
throw new Policy.PolicyDeniedError('Fee-sponsored transaction must declare a fee limit.');
|
|
39
|
+
const feeToken = (() => {
|
|
40
|
+
try {
|
|
41
|
+
return transaction.feeToken === undefined
|
|
42
|
+
? undefined
|
|
43
|
+
: TokenId.toAddress(transaction.feeToken);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
throw new Policy.PolicyDeniedError('Fee-sponsored transaction uses an invalid fee token.');
|
|
47
|
+
}
|
|
48
|
+
})();
|
|
49
|
+
const mainnet = Viem.isMainnet(chainId);
|
|
50
|
+
const settings = mainnet ? await BillingSettings.get(db, principal.orgId) : undefined;
|
|
51
|
+
let currency;
|
|
52
|
+
if (mainnet) {
|
|
53
|
+
const verified = feeToken
|
|
54
|
+
? (await VerifiedTokens.read(dbCached, chainId))?.byAddress.get(feeToken.toLowerCase())
|
|
55
|
+
: undefined;
|
|
56
|
+
if (!verified ||
|
|
57
|
+
verified.currency.toLowerCase() !== 'usd' ||
|
|
58
|
+
verified.decimals !== Fees.tokenDecimals)
|
|
59
|
+
throw new Policy.PolicyDeniedError('Fee-sponsored transaction uses an unsupported fee token.');
|
|
60
|
+
currency = verified.currency.toLowerCase();
|
|
61
|
+
const cap = (() => {
|
|
62
|
+
if (settings?.txFeeLimit == null)
|
|
63
|
+
return txFeeLimit;
|
|
64
|
+
const org = Billing.toBaseUnits(settings.txFeeLimit);
|
|
65
|
+
return org < txFeeLimit ? org : txFeeLimit;
|
|
66
|
+
})();
|
|
67
|
+
if (feeMax > cap)
|
|
68
|
+
throw new Policy.PolicyDeniedError('Transaction fee limit exceeded.');
|
|
69
|
+
}
|
|
70
|
+
const envelope = TxEnvelopeTempo.deserialize(serializedTransaction);
|
|
71
|
+
const signPayload = TxEnvelopeTempo.getFeePayerSignPayload(envelope, { sender: transaction.from });
|
|
72
|
+
const input = {
|
|
73
|
+
apiKeyId: principal.id,
|
|
74
|
+
billable: mainnet && principal.environment === 'production',
|
|
75
|
+
chainId,
|
|
76
|
+
...(currency ? { currency } : {}),
|
|
77
|
+
environment: principal.environment,
|
|
78
|
+
feeMax: feeMax.toString(),
|
|
79
|
+
...(feeToken ? { feeToken } : {}),
|
|
80
|
+
orgId: principal.orgId,
|
|
81
|
+
...(principal.projectId === undefined ? {} : { projectId: principal.projectId }),
|
|
82
|
+
signPayload,
|
|
83
|
+
transaction: serializedTransaction,
|
|
84
|
+
transactionHash: Hash.keccak256(serializedTransaction),
|
|
85
|
+
};
|
|
86
|
+
if (settings?.spendLimit == null) {
|
|
87
|
+
await SponsoredTransactions.upsert(db, input);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
await SponsoredTransactions.reserve(db, input, {
|
|
92
|
+
chainIds: [Viem.chainId.mainnet],
|
|
93
|
+
max: Billing.toBaseUnits(settings.spendLimit),
|
|
94
|
+
since: Billing.periodStart(settings.period),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (cause) {
|
|
98
|
+
if (cause instanceof SponsoredTransactions.PeriodSpendLimitError)
|
|
99
|
+
throw new Policy.PolicyDeniedError('Spend limit exceeded.');
|
|
100
|
+
throw cause;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=Sponsorship.js.map
|