tapimo 0.12.0 → 0.14.0
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/App.d.ts +11333 -9563
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +39 -3
- package/dist/App.js.map +1 -1
- package/dist/Scope.d.ts +2 -0
- package/dist/Scope.d.ts.map +1 -1
- package/dist/Scope.js +17 -0
- package/dist/Scope.js.map +1 -1
- package/dist/Webhooks.js +2 -2
- package/dist/Webhooks.js.map +1 -1
- package/dist/admin/App.d.ts +1064 -924
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.d.ts +80 -0
- package/dist/admin/apps/api-keys.d.ts.map +1 -1
- package/dist/admin/apps/api-keys.js +54 -0
- package/dist/admin/apps/api-keys.js.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +63 -15
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.js +2 -1
- package/dist/admin/apps/earn-vaults.js.map +1 -1
- package/dist/admin/apps/organizations.d.ts +92 -3
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +69 -7
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +7 -7
- 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 -151
- package/dist/admin/ui.generated.js.map +1 -1
- package/dist/apps/Zones.d.ts +28 -28
- package/dist/apps/Zones.js +7 -7
- package/dist/apps/data/App.d.ts +2909 -2523
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +26 -21
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/ZoneSelection.d.ts +8 -8
- package/dist/apps/data/ZoneSelection.d.ts.map +1 -1
- package/dist/apps/data/ZoneSelection.js +1 -1
- package/dist/apps/data/ZoneSelection.js.map +1 -1
- package/dist/apps/data/routes/activities.d.ts +588 -584
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +1561 -1239
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +22 -22
- package/dist/apps/data/routes/balances.d.ts +26 -26
- package/dist/apps/data/routes/balances.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.js +43 -16
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +44 -44
- package/dist/apps/data/routes/blocks.d.ts.map +1 -1
- package/dist/apps/data/routes/blocks.js +21 -11
- package/dist/apps/data/routes/blocks.js.map +1 -1
- package/dist/apps/data/routes/coingecko.d.ts +3 -3
- package/dist/apps/data/routes/earn.d.ts +201 -25
- package/dist/apps/data/routes/earn.d.ts.map +1 -1
- package/dist/apps/data/routes/earn.js +434 -75
- package/dist/apps/data/routes/earn.js.map +1 -1
- package/dist/apps/data/routes/exchanges.d.ts +160 -145
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +180 -114
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +2 -2
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +18 -19
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +155 -55
- package/dist/apps/data/routes/receipts.d.ts.map +1 -1
- package/dist/apps/data/routes/receipts.js +28 -10
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +13 -13
- package/dist/apps/data/routes/tokens.d.ts +5 -5
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +51 -20
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +7 -2
- package/dist/apps/data/routes/transactions.d.ts.map +1 -1
- package/dist/apps/data/routes/transactions.js +37 -17
- package/dist/apps/data/routes/transactions.js.map +1 -1
- package/dist/apps/data/routes/transfers.d.ts +13 -13
- package/dist/apps/data/routes/transfers.d.ts.map +1 -1
- package/dist/apps/data/routes/transfers.js +18 -12
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +31 -31
- package/dist/apps/data/routes/valuation.d.ts.map +1 -1
- package/dist/apps/data/routes/valuation.js +12 -7
- package/dist/apps/data/routes/valuation.js.map +1 -1
- package/dist/apps/data/routes/verified-tokens.d.ts +8 -8
- package/dist/apps/data/routes/webhooks.d.ts +816 -113
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +47 -5
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +14 -14
- package/dist/apps/data/routes/zones.js +1 -1
- package/dist/apps/funding/App.d.ts +466 -44
- package/dist/apps/funding/App.d.ts.map +1 -1
- package/dist/apps/funding/App.js +1 -1
- package/dist/apps/funding/App.js.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.d.ts +17 -17
- package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.js +17 -12
- package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
- package/dist/apps/funding/routes/transfers.d.ts +650 -57
- package/dist/apps/funding/routes/transfers.d.ts.map +1 -1
- package/dist/apps/funding/routes/transfers.js +238 -24
- package/dist/apps/funding/routes/transfers.js.map +1 -1
- package/dist/apps/management/App.d.ts +5120 -4152
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/Billing.d.ts +1 -1
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +17 -1
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +632 -81
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +236 -4
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +76 -76
- package/dist/apps/management/routes/faucet.d.ts +6 -6
- package/dist/apps/management/routes/invitations.d.ts +24 -24
- package/dist/apps/management/routes/invite-links.d.ts +4 -4
- package/dist/apps/management/routes/members.d.ts +16 -16
- package/dist/apps/management/routes/orgs.d.ts +20 -20
- package/dist/apps/management/routes/projects.d.ts +4 -4
- package/dist/apps/management/routes/usage.d.ts +8 -8
- package/dist/apps/management/routes/verified-token-requests.d.ts +17 -17
- package/dist/apps/management/routes/webhooks.d.ts +675 -25
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +21 -21
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/relay/App.d.ts.map +1 -1
- package/dist/apps/relay/App.js +115 -23
- package/dist/apps/relay/App.js.map +1 -1
- package/dist/apps/relay/Sponsorships.d.ts.map +1 -1
- package/dist/apps/relay/Sponsorships.js +27 -1
- package/dist/apps/relay/Sponsorships.js.map +1 -1
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +34 -1
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +11 -5
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +21 -3
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/fundingCatalog.d.ts +4 -2
- package/dist/db/tables/fundingCatalog.d.ts.map +1 -1
- package/dist/db/tables/fundingCatalog.js +5 -1
- package/dist/db/tables/fundingCatalog.js.map +1 -1
- package/dist/db/tables/fundingTransferTransactions.d.ts +38 -0
- package/dist/db/tables/fundingTransferTransactions.d.ts.map +1 -1
- package/dist/db/tables/fundingTransferTransactions.js +44 -3
- package/dist/db/tables/fundingTransferTransactions.js.map +1 -1
- package/dist/db/tables/fundingTransfers.d.ts +17 -0
- package/dist/db/tables/fundingTransfers.d.ts.map +1 -1
- package/dist/db/tables/fundingTransfers.js +21 -0
- package/dist/db/tables/fundingTransfers.js.map +1 -1
- package/dist/db/tables/organizations.d.ts +24 -0
- package/dist/db/tables/organizations.d.ts.map +1 -1
- package/dist/db/tables/organizations.js +27 -0
- package/dist/db/tables/organizations.js.map +1 -1
- package/dist/db/tables/projects.d.ts +25 -1
- package/dist/db/tables/projects.d.ts.map +1 -1
- package/dist/db/tables/projects.js +26 -0
- package/dist/db/tables/projects.js.map +1 -1
- package/dist/db/tables/sponsoredTransactions.d.ts +44 -0
- package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -1
- package/dist/db/tables/sponsoredTransactions.js +146 -13
- package/dist/db/tables/sponsoredTransactions.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +10 -6
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +9 -6
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/handlers/internal/utils.d.ts.map +1 -1
- package/dist/handlers/internal/utils.js +9 -0
- package/dist/handlers/internal/utils.js.map +1 -1
- package/dist/internal/Auth.d.ts +3 -1
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +6 -3
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/EarnVaults.d.ts +3 -3
- package/dist/internal/EarnVaults.js +5 -5
- package/dist/internal/EarnVaults.js.map +1 -1
- package/dist/internal/Fetch.d.ts +23 -0
- package/dist/internal/Fetch.d.ts.map +1 -0
- package/dist/internal/Fetch.js +26 -0
- package/dist/internal/Fetch.js.map +1 -0
- package/dist/internal/Log.d.ts +4 -2
- package/dist/internal/Log.d.ts.map +1 -1
- package/dist/internal/Log.js +16 -3
- package/dist/internal/Log.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +5 -3
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +13 -3
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Response.d.ts +1 -1
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Schema.d.ts +6 -3
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +8 -2
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +16 -3
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +82 -16
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +7 -2
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/Timeout.d.ts +36 -0
- package/dist/internal/Timeout.d.ts.map +1 -0
- package/dist/internal/Timeout.js +37 -0
- package/dist/internal/Timeout.js.map +1 -0
- package/dist/internal/Timing.d.ts +9 -0
- package/dist/internal/Timing.d.ts.map +1 -1
- package/dist/internal/Timing.js +7 -0
- package/dist/internal/Timing.js.map +1 -1
- package/dist/internal/Viem.d.ts +16 -1
- package/dist/internal/Viem.d.ts.map +1 -1
- package/dist/internal/Viem.js +12 -2
- package/dist/internal/Viem.js.map +1 -1
- package/dist/internal/WebhookDestination.d.ts.map +1 -1
- package/dist/internal/WebhookDestination.js +3 -0
- package/dist/internal/WebhookDestination.js.map +1 -1
- package/dist/internal/funding/Action.d.ts +9 -0
- package/dist/internal/funding/Action.d.ts.map +1 -1
- package/dist/internal/funding/Action.js +16 -8
- package/dist/internal/funding/Action.js.map +1 -1
- package/dist/internal/funding/Catalog.d.ts +9 -2
- package/dist/internal/funding/Catalog.d.ts.map +1 -1
- package/dist/internal/funding/Catalog.js +19 -8
- package/dist/internal/funding/Catalog.js.map +1 -1
- package/dist/internal/funding/DepositWebhook.d.ts.map +1 -1
- package/dist/internal/funding/DepositWebhook.js +2 -1
- package/dist/internal/funding/DepositWebhook.js.map +1 -1
- package/dist/internal/funding/Evidence.d.ts.map +1 -1
- package/dist/internal/funding/Evidence.js +2 -10
- package/dist/internal/funding/Evidence.js.map +1 -1
- package/dist/internal/funding/Provider.d.ts +108 -13
- package/dist/internal/funding/Provider.d.ts.map +1 -1
- package/dist/internal/funding/Provider.js +34 -8
- package/dist/internal/funding/Provider.js.map +1 -1
- package/dist/internal/funding/SourceObservation.d.ts.map +1 -1
- package/dist/internal/funding/SourceObservation.js +5 -7
- package/dist/internal/funding/SourceObservation.js.map +1 -1
- package/dist/internal/funding/Transfer.d.ts +114 -18
- package/dist/internal/funding/Transfer.d.ts.map +1 -1
- package/dist/internal/funding/Transfer.js +185 -55
- package/dist/internal/funding/Transfer.js.map +1 -1
- package/dist/internal/funding/TransferReconciliation.d.ts +52 -0
- package/dist/internal/funding/TransferReconciliation.d.ts.map +1 -0
- package/dist/internal/funding/TransferReconciliation.js +192 -0
- package/dist/internal/funding/TransferReconciliation.js.map +1 -0
- package/dist/internal/funding/TransferWebhook.d.ts +21 -0
- package/dist/internal/funding/TransferWebhook.d.ts.map +1 -0
- package/dist/internal/funding/TransferWebhook.js +43 -0
- package/dist/internal/funding/TransferWebhook.js.map +1 -0
- package/dist/internal/funding/index.d.ts +1 -0
- package/dist/internal/funding/index.d.ts.map +1 -1
- package/dist/internal/funding/index.js +1 -0
- package/dist/internal/funding/index.js.map +1 -1
- package/dist/internal/funding/providers/relay.d.ts.map +1 -1
- package/dist/internal/funding/providers/relay.js +3 -12
- package/dist/internal/funding/providers/relay.js.map +1 -1
- package/dist/internal/funding/providers/stargate.d.ts +127 -9
- package/dist/internal/funding/providers/stargate.d.ts.map +1 -1
- package/dist/internal/funding/providers/stargate.js +548 -112
- package/dist/internal/funding/providers/stargate.js.map +1 -1
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +1 -0
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/webhookDestinations/slack.d.ts.map +1 -1
- package/dist/internal/webhookDestinations/slack.js +16 -0
- package/dist/internal/webhookDestinations/slack.js.map +1 -1
- package/package.json +2 -2
- package/src/App.test.ts +100 -0
- package/src/App.ts +43 -3
- package/src/Client.test-d.ts +129 -2
- package/src/Scope.test.ts +20 -0
- package/src/Scope.ts +16 -0
- package/src/Webhooks.ts +2 -2
- package/src/admin/apps/api-keys.test.ts +75 -0
- package/src/admin/apps/api-keys.ts +64 -0
- package/src/admin/apps/earn-vaults.test.ts +1 -1
- package/src/admin/apps/earn-vaults.ts +2 -1
- package/src/admin/apps/organizations.test.ts +53 -1
- package/src/admin/apps/organizations.ts +90 -5
- package/src/admin/ui/src/lib/api-keys.ts +19 -0
- package/src/admin/ui/src/lib/organizations.test.ts +112 -1
- package/src/admin/ui/src/lib/organizations.ts +55 -0
- package/src/admin/ui/src/routes/api-keys.tsx +89 -2
- package/src/admin/ui/src/routes/organizations_.$orgId.tsx +116 -0
- package/src/admin/ui.generated.ts +189 -151
- package/src/apps/Zones.test.ts +7 -7
- package/src/apps/Zones.ts +7 -7
- package/src/apps/composition.test.ts +2 -1
- package/src/apps/data/App.test.ts +41 -0
- package/src/apps/data/App.ts +30 -21
- package/src/apps/data/ZoneSelection.test.ts +2 -2
- package/src/apps/data/ZoneSelection.ts +8 -8
- package/src/apps/data/routes/activities.test.ts +1526 -12
- package/src/apps/data/routes/activities.ts +1774 -1356
- package/src/apps/data/routes/balances.ts +133 -97
- package/src/apps/data/routes/blocks.test.ts +533 -0
- package/src/apps/data/routes/blocks.ts +35 -16
- package/src/apps/data/routes/earn.test.ts +373 -16
- package/src/apps/data/routes/earn.ts +548 -79
- package/src/apps/data/routes/earn.zone-access.test.ts +6 -6
- package/src/apps/data/routes/exchanges.test.ts +740 -15
- package/src/apps/data/routes/exchanges.ts +954 -753
- package/src/apps/data/routes/fee-amm.ts +17 -18
- package/src/apps/data/routes/receipts.ts +47 -16
- package/src/apps/data/routes/tokens.test.ts +578 -0
- package/src/apps/data/routes/tokens.ts +283 -225
- package/src/apps/data/routes/transactions.ts +68 -29
- package/src/apps/data/routes/transfers.test.ts +421 -0
- package/src/apps/data/routes/transfers.ts +45 -27
- package/src/apps/data/routes/valuation.ts +94 -78
- package/src/apps/data/routes/webhooks.test.ts +21 -5
- package/src/apps/data/routes/webhooks.ts +63 -8
- package/src/apps/data/routes/zones.test.ts +2 -2
- package/src/apps/data/routes/zones.ts +1 -1
- package/src/apps/funding/App.ts +12 -2
- package/src/apps/funding/routes/deposit-addresses.test.ts +29 -7
- package/src/apps/funding/routes/deposit-addresses.ts +19 -14
- package/src/apps/funding/routes/quotes.test.ts +5 -9
- package/src/apps/funding/routes/transfers.test.ts +901 -23
- package/src/apps/funding/routes/transfers.ts +347 -64
- package/src/apps/management/Billing.ts +18 -5
- package/src/apps/management/routes/api-keys.test.ts +220 -0
- package/src/apps/management/routes/api-keys.ts +280 -3
- package/src/apps/management/routes/webhooks.test.ts +3 -3
- package/src/apps/management/routes/webhooks.ts +24 -25
- package/src/apps/relay/App.test.ts +212 -1
- package/src/apps/relay/App.ts +158 -29
- package/src/apps/relay/Sponsorships.ts +24 -1
- package/src/db/Db.ts +48 -1
- package/src/db/Schema.ts +22 -4
- package/src/db/tables/earnVaults.test.ts +9 -9
- package/src/db/tables/fundingCatalog.test.ts +16 -2
- package/src/db/tables/fundingCatalog.ts +9 -3
- package/src/db/tables/fundingTransferTransactions.test.ts +43 -0
- package/src/db/tables/fundingTransferTransactions.ts +79 -3
- package/src/db/tables/fundingTransfers.test.ts +26 -0
- package/src/db/tables/fundingTransfers.ts +36 -0
- package/src/db/tables/organizations.test.ts +41 -0
- package/src/db/tables/organizations.ts +49 -0
- package/src/db/tables/projects.test.ts +55 -0
- package/src/db/tables/projects.ts +46 -1
- package/src/db/tables/sponsoredTransactions.test.ts +338 -0
- package/src/db/tables/sponsoredTransactions.ts +197 -13
- package/src/db/tables/webhookSubscriptions.ts +18 -11
- package/src/handlers/internal/utils.test.ts +53 -0
- package/src/handlers/internal/utils.ts +15 -0
- package/src/internal/Auth.ts +12 -4
- package/src/internal/EarnVaults.capabilities.test.ts +2 -2
- package/src/internal/EarnVaults.test.ts +1 -1
- package/src/internal/EarnVaults.ts +5 -5
- package/src/internal/Fetch.test.ts +46 -0
- package/src/internal/Fetch.ts +56 -0
- package/src/internal/Log.test-d.ts +2 -0
- package/src/internal/Log.test.ts +21 -0
- package/src/internal/Log.ts +22 -5
- package/src/internal/OpenApi.ts +14 -4
- package/src/internal/Response.ts +1 -1
- package/src/internal/Schema.test.ts +2 -0
- package/src/internal/Schema.ts +12 -2
- package/src/internal/Store.test.ts +178 -0
- package/src/internal/Store.ts +104 -18
- package/src/internal/Tidx.test.ts +2 -1
- package/src/internal/Tidx.ts +7 -2
- package/src/internal/Timeout.test.ts +35 -0
- package/src/internal/Timeout.ts +73 -0
- package/src/internal/Timing.ts +16 -0
- package/src/internal/Viem.ts +39 -3
- package/src/internal/WebhookDestination.ts +3 -0
- package/src/internal/Webhooks.test.ts +45 -0
- package/src/internal/funding/Action.test.ts +41 -1
- package/src/internal/funding/Action.ts +69 -41
- package/src/internal/funding/Catalog.test.ts +34 -0
- package/src/internal/funding/Catalog.ts +28 -11
- package/src/internal/funding/DepositWebhook.ts +2 -1
- package/src/internal/funding/Evidence.ts +2 -13
- package/src/internal/funding/Provider.test.ts +73 -0
- package/src/internal/funding/Provider.ts +125 -28
- package/src/internal/funding/SourceObservation.ts +5 -9
- package/src/internal/funding/Transfer.test.ts +155 -0
- package/src/internal/funding/Transfer.ts +387 -147
- package/src/internal/funding/TransferReconciliation.test.ts +147 -0
- package/src/internal/funding/TransferReconciliation.ts +264 -0
- package/src/internal/funding/TransferWebhook.test.ts +128 -0
- package/src/internal/funding/TransferWebhook.ts +67 -0
- package/src/internal/funding/index.test.ts +1 -0
- package/src/internal/funding/index.ts +1 -0
- package/src/internal/funding/providers/index.test.ts +4 -167
- package/src/internal/funding/providers/relay.test.ts +2 -2
- package/src/internal/funding/providers/relay.ts +3 -15
- package/src/internal/funding/providers/stargate.test.ts +328 -0
- package/src/internal/funding/providers/stargate.ts +807 -135
- package/src/internal/index.test.ts +1 -0
- package/src/internal/index.ts +1 -0
- package/src/internal/webhookDestinations/slack.ts +15 -0
|
@@ -17,15 +17,87 @@ export function insert(db: Db.Db, record: Record): Promise<Record | undefined> {
|
|
|
17
17
|
.insertInto('funding_transfer_transactions')
|
|
18
18
|
.values({
|
|
19
19
|
...record,
|
|
20
|
-
transactionRef: record.chainId.
|
|
21
|
-
? record.transactionRef.toLowerCase()
|
|
22
|
-
: record.transactionRef,
|
|
20
|
+
transactionRef: normalize(record.chainId, record.transactionRef),
|
|
23
21
|
})
|
|
24
22
|
.onConflict((oc) => oc.columns(['transferId', 'role', 'transactionRef']).doNothing())
|
|
25
23
|
.returningAll()
|
|
26
24
|
.executeTakeFirst()
|
|
27
25
|
}
|
|
28
26
|
|
|
27
|
+
/** Claims a source transaction for one transfer without racing another transfer. */
|
|
28
|
+
export async function claimSource(db: Db.Db, record: Record): Promise<claimSource.Result> {
|
|
29
|
+
const transactionRef = normalize(record.chainId, record.transactionRef)
|
|
30
|
+
const inserted = await db.kysely
|
|
31
|
+
.insertInto('funding_transfer_transactions')
|
|
32
|
+
.values({ ...record, transactionRef })
|
|
33
|
+
.onConflict((oc) => oc.doNothing())
|
|
34
|
+
.returningAll()
|
|
35
|
+
.executeTakeFirst()
|
|
36
|
+
if (inserted) return { record: inserted, type: 'claimed' }
|
|
37
|
+
const existing = await getSource(db, {
|
|
38
|
+
chainId: record.chainId,
|
|
39
|
+
transactionRef,
|
|
40
|
+
})
|
|
41
|
+
if (existing?.transferId === record.transferId) return { record: existing, type: 'replayed' }
|
|
42
|
+
return { type: 'conflict' }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export declare namespace claimSource {
|
|
46
|
+
/** Source transaction ownership outcome. */
|
|
47
|
+
type Result =
|
|
48
|
+
| { record: Record; type: 'claimed' }
|
|
49
|
+
| { record: Record; type: 'replayed' }
|
|
50
|
+
| { type: 'conflict' }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Gets the transfer that owns one source transaction reference. */
|
|
54
|
+
export function getSource(db: Db.Db, options: getSource.Options): Promise<Record | undefined> {
|
|
55
|
+
return db.kysely
|
|
56
|
+
.selectFrom('funding_transfer_transactions')
|
|
57
|
+
.selectAll()
|
|
58
|
+
.where('chainId', '=', options.chainId)
|
|
59
|
+
.where('role', '=', 'source')
|
|
60
|
+
.where('transactionRef', '=', normalize(options.chainId, options.transactionRef))
|
|
61
|
+
.executeTakeFirst()
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export declare namespace getSource {
|
|
65
|
+
/** Source transaction identity. */
|
|
66
|
+
type Options = {
|
|
67
|
+
/** CAIP-2 chain containing the transaction. */
|
|
68
|
+
chainId: string
|
|
69
|
+
/** EVM transaction hash or case-sensitive chain reference. */
|
|
70
|
+
transactionRef: string
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Removes one source transaction only when the transfer still owns it. */
|
|
75
|
+
export function removeSource(
|
|
76
|
+
db: Db.Db,
|
|
77
|
+
options: removeSource.Options,
|
|
78
|
+
): Promise<Record | undefined> {
|
|
79
|
+
return db.kysely
|
|
80
|
+
.deleteFrom('funding_transfer_transactions')
|
|
81
|
+
.where('chainId', '=', options.chainId)
|
|
82
|
+
.where('role', '=', 'source')
|
|
83
|
+
.where('transactionRef', '=', normalize(options.chainId, options.transactionHash))
|
|
84
|
+
.where('transferId', '=', options.transferId)
|
|
85
|
+
.returningAll()
|
|
86
|
+
.executeTakeFirst()
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export declare namespace removeSource {
|
|
90
|
+
/** Exact source evidence identity and owner. */
|
|
91
|
+
type Options = {
|
|
92
|
+
/** CAIP-2 chain containing the transaction. */
|
|
93
|
+
chainId: string
|
|
94
|
+
/** Source transaction reference. */
|
|
95
|
+
transactionHash: string
|
|
96
|
+
/** Owning transfer id (`ftr_…`). */
|
|
97
|
+
transferId: string
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
29
101
|
/** Lists a transfer's transaction references, oldest first. */
|
|
30
102
|
export function listByTransfer(db: Db.Db, transferId: string): Promise<Record[]> {
|
|
31
103
|
return db.kysely
|
|
@@ -35,3 +107,7 @@ export function listByTransfer(db: Db.Db, transferId: string): Promise<Record[]>
|
|
|
35
107
|
.orderBy('createdAt', 'asc')
|
|
36
108
|
.execute()
|
|
37
109
|
}
|
|
110
|
+
|
|
111
|
+
function normalize(chainId: string, transactionRef: string): string {
|
|
112
|
+
return chainId.startsWith('eip155:') ? transactionRef.toLowerCase() : transactionRef
|
|
113
|
+
}
|
|
@@ -49,6 +49,32 @@ describe('list', () => {
|
|
|
49
49
|
})
|
|
50
50
|
})
|
|
51
51
|
|
|
52
|
+
describe('listProcessing', () => {
|
|
53
|
+
test('returns only processing transfers for the provider', async () => {
|
|
54
|
+
const first = await seed({
|
|
55
|
+
snapshot: TestFunding.transferSnapshot({ provider: { id: 'stargate', name: 'Stargate' } }),
|
|
56
|
+
})
|
|
57
|
+
const second = await seed({
|
|
58
|
+
snapshot: TestFunding.transferSnapshot({ provider: { id: 'stargate', name: 'Stargate' } }),
|
|
59
|
+
})
|
|
60
|
+
const relay = await seed()
|
|
61
|
+
await Transfer.transition(db, { expectedVersion: 1, id: first.id, status: 'processing' })
|
|
62
|
+
await Transfer.transition(db, { expectedVersion: 1, id: second.id, status: 'processing' })
|
|
63
|
+
await Transfer.transition(db, { expectedVersion: 1, id: relay.id, status: 'processing' })
|
|
64
|
+
|
|
65
|
+
const page = await FundingTransfers.listProcessing(db, { limit: 1, providerId: 'stargate' })
|
|
66
|
+
const rest = await FundingTransfers.listProcessing(db, {
|
|
67
|
+
cursor: page[0]!.id,
|
|
68
|
+
limit: 1,
|
|
69
|
+
providerId: 'stargate',
|
|
70
|
+
})
|
|
71
|
+
expect([page.map((row) => row.id), rest.map((row) => row.id)]).toEqual([
|
|
72
|
+
[first.id],
|
|
73
|
+
[second.id],
|
|
74
|
+
])
|
|
75
|
+
})
|
|
76
|
+
})
|
|
77
|
+
|
|
52
78
|
describe('count', () => {
|
|
53
79
|
test('shares the list filter and stops at the cap', async () => {
|
|
54
80
|
const total = await FundingTransfers.count(db, owner, { cap: 100 })
|
|
@@ -40,6 +40,39 @@ export function get(db: Db.Db, id: string): Promise<Record | undefined> {
|
|
|
40
40
|
.executeTakeFirst()
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
/** Lists processing transfers for one provider, oldest first. */
|
|
44
|
+
export function listProcessing(db: Db.Db, options: listProcessing.Options): Promise<Record[]> {
|
|
45
|
+
let query = db.kysely
|
|
46
|
+
.selectFrom('funding_transfers')
|
|
47
|
+
.selectAll()
|
|
48
|
+
.where('providerId', '=', options.providerId)
|
|
49
|
+
.where('status', '=', 'processing')
|
|
50
|
+
if (options.cursor !== undefined) query = query.where('id', '>', options.cursor)
|
|
51
|
+
return query.orderBy('id', 'asc').limit(options.limit).execute()
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export declare namespace listProcessing {
|
|
55
|
+
/** Provider filter for one recovery scan. */
|
|
56
|
+
type Options = {
|
|
57
|
+
/** Exclusive lower bound from the prior recovery page. */
|
|
58
|
+
cursor?: string | undefined
|
|
59
|
+
/** Maximum transfers returned in one recovery page. */
|
|
60
|
+
limit: number
|
|
61
|
+
/** Funding provider id. */
|
|
62
|
+
providerId: string
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** Gets and locks a transfer for one atomic domain mutation. */
|
|
67
|
+
export function getForUpdate(db: Db.Db, id: string): Promise<Record | undefined> {
|
|
68
|
+
return db.kysely
|
|
69
|
+
.selectFrom('funding_transfers')
|
|
70
|
+
.selectAll()
|
|
71
|
+
.where('id', '=', id)
|
|
72
|
+
.forUpdate()
|
|
73
|
+
.executeTakeFirst()
|
|
74
|
+
}
|
|
75
|
+
|
|
43
76
|
/** Gets an owner-visible transfer by id; `undefined` for absent or foreign rows. */
|
|
44
77
|
export function getOwned(db: Db.Db, owner: Owner, id: string): Promise<Record | undefined> {
|
|
45
78
|
let query = db.kysely
|
|
@@ -120,6 +153,7 @@ export function update(db: Db.Db, options: update.Options): Promise<Record | und
|
|
|
120
153
|
return db.kysely
|
|
121
154
|
.updateTable('funding_transfers')
|
|
122
155
|
.set({
|
|
156
|
+
providerState: options.providerState,
|
|
123
157
|
snapshot: options.snapshot,
|
|
124
158
|
status: options.status,
|
|
125
159
|
statusReason: options.statusReason,
|
|
@@ -139,6 +173,8 @@ export declare namespace update {
|
|
|
139
173
|
expectedVersion: number
|
|
140
174
|
/** Transfer id (`ftr_…`). */
|
|
141
175
|
id: string
|
|
176
|
+
/** Replacement private provider state; omitted keeps the stored value. */
|
|
177
|
+
providerState?: Record['providerState'] | undefined
|
|
142
178
|
/** Replacement public snapshot. */
|
|
143
179
|
snapshot: Record['snapshot']
|
|
144
180
|
/** New lifecycle status. */
|
|
@@ -34,6 +34,8 @@ describe('create', () => {
|
|
|
34
34
|
"createdBy": null,
|
|
35
35
|
"id": "org_<id>",
|
|
36
36
|
"name": "Acme, Inc.",
|
|
37
|
+
"sponsorshipSubsidyDurationDays": null,
|
|
38
|
+
"sponsorshipSubsidyProjectSpendLimit": null,
|
|
37
39
|
"updatedAt": "<timestamp>",
|
|
38
40
|
"userId": null,
|
|
39
41
|
}
|
|
@@ -55,6 +57,8 @@ describe('create', () => {
|
|
|
55
57
|
"createdBy": "admin@tempo.xyz",
|
|
56
58
|
"id": "org_explicit",
|
|
57
59
|
"name": "Explicit",
|
|
60
|
+
"sponsorshipSubsidyDurationDays": null,
|
|
61
|
+
"sponsorshipSubsidyProjectSpendLimit": null,
|
|
58
62
|
"updatedAt": "<timestamp>",
|
|
59
63
|
"userId": null,
|
|
60
64
|
}
|
|
@@ -170,6 +174,43 @@ describe('update', () => {
|
|
|
170
174
|
})
|
|
171
175
|
})
|
|
172
176
|
|
|
177
|
+
describe('setSponsorshipSubsidy', () => {
|
|
178
|
+
test('behavior: replaces and disables the organization policy', async () => {
|
|
179
|
+
const db = create()
|
|
180
|
+
await db.migrate()
|
|
181
|
+
await Organizations.create(db, { id: 'org_1', name: 'One' })
|
|
182
|
+
|
|
183
|
+
const enabled = await Organizations.setSponsorshipSubsidy(db, 'org_1', {
|
|
184
|
+
durationDays: 90,
|
|
185
|
+
projectSpendLimit: '100.00',
|
|
186
|
+
})
|
|
187
|
+
expect({
|
|
188
|
+
durationDays: enabled?.sponsorshipSubsidyDurationDays,
|
|
189
|
+
projectSpendLimit: enabled?.sponsorshipSubsidyProjectSpendLimit,
|
|
190
|
+
}).toMatchInlineSnapshot(`
|
|
191
|
+
{
|
|
192
|
+
"durationDays": 90,
|
|
193
|
+
"projectSpendLimit": "100.00",
|
|
194
|
+
}
|
|
195
|
+
`)
|
|
196
|
+
|
|
197
|
+
const disabled = await Organizations.setSponsorshipSubsidy(db, 'org_1', {
|
|
198
|
+
durationDays: null,
|
|
199
|
+
projectSpendLimit: null,
|
|
200
|
+
})
|
|
201
|
+
expect({
|
|
202
|
+
durationDays: disabled?.sponsorshipSubsidyDurationDays,
|
|
203
|
+
projectSpendLimit: disabled?.sponsorshipSubsidyProjectSpendLimit,
|
|
204
|
+
}).toMatchInlineSnapshot(`
|
|
205
|
+
{
|
|
206
|
+
"durationDays": null,
|
|
207
|
+
"projectSpendLimit": null,
|
|
208
|
+
}
|
|
209
|
+
`)
|
|
210
|
+
await db.close()
|
|
211
|
+
})
|
|
212
|
+
})
|
|
213
|
+
|
|
173
214
|
describe('upsert', () => {
|
|
174
215
|
test('behavior: inserts when absent, defaulting name to the id', async () => {
|
|
175
216
|
const db = create()
|
|
@@ -31,6 +31,8 @@ export function create(db: Db.Db, input: create.Input): Promise<Record> {
|
|
|
31
31
|
createdBy: input.createdBy ?? null,
|
|
32
32
|
id: input.id ?? Id.generate('org'),
|
|
33
33
|
name: input.name,
|
|
34
|
+
sponsorshipSubsidyDurationDays: null,
|
|
35
|
+
sponsorshipSubsidyProjectSpendLimit: null,
|
|
34
36
|
updatedAt: now,
|
|
35
37
|
userId: input.userId ?? null,
|
|
36
38
|
})
|
|
@@ -70,6 +72,8 @@ export function createOwned(db: Db.Db, input: createOwned.Input): Promise<Record
|
|
|
70
72
|
createdBy: input.userId,
|
|
71
73
|
id: Id.generate('org'),
|
|
72
74
|
name: input.name,
|
|
75
|
+
sponsorshipSubsidyDurationDays: null,
|
|
76
|
+
sponsorshipSubsidyProjectSpendLimit: null,
|
|
73
77
|
updatedAt: now,
|
|
74
78
|
userId: input.userId,
|
|
75
79
|
})
|
|
@@ -422,6 +426,49 @@ export declare namespace update {
|
|
|
422
426
|
}
|
|
423
427
|
}
|
|
424
428
|
|
|
429
|
+
/**
|
|
430
|
+
* Replaces the organization's sponsorship subsidy policy. A null duration
|
|
431
|
+
* disables the program; an enabled policy may omit its per-project spend cap.
|
|
432
|
+
*
|
|
433
|
+
* @param db - The database.
|
|
434
|
+
* @param id - The organization id (`org_…`).
|
|
435
|
+
* @param input - The replacement subsidy policy.
|
|
436
|
+
* @returns The updated organization, or `undefined` when absent.
|
|
437
|
+
*/
|
|
438
|
+
export function setSponsorshipSubsidy(
|
|
439
|
+
db: Db.Db,
|
|
440
|
+
id: string,
|
|
441
|
+
input: setSponsorshipSubsidy.Input,
|
|
442
|
+
): Promise<Record | undefined> {
|
|
443
|
+
return db.kysely
|
|
444
|
+
.updateTable('organizations')
|
|
445
|
+
.set({
|
|
446
|
+
sponsorshipSubsidyDurationDays: input.durationDays,
|
|
447
|
+
sponsorshipSubsidyProjectSpendLimit: input.projectSpendLimit,
|
|
448
|
+
updatedAt: new Date().toISOString(),
|
|
449
|
+
})
|
|
450
|
+
.where('id', '=', id)
|
|
451
|
+
.returningAll()
|
|
452
|
+
.executeTakeFirst()
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
export declare namespace setSponsorshipSubsidy {
|
|
456
|
+
/** Replacement organization subsidy policy. */
|
|
457
|
+
type Input =
|
|
458
|
+
| {
|
|
459
|
+
/** Fixed promotion duration in days. */
|
|
460
|
+
durationDays: 90
|
|
461
|
+
/** Optional decimal USD spend cap applied independently to each project. */
|
|
462
|
+
projectSpendLimit: string | null
|
|
463
|
+
}
|
|
464
|
+
| {
|
|
465
|
+
/** Null disables the promotion. */
|
|
466
|
+
durationDays: null
|
|
467
|
+
/** Null disables the promotion. */
|
|
468
|
+
projectSpendLimit: null
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
425
472
|
/**
|
|
426
473
|
* Inserts an organization when absent (`ON CONFLICT DO NOTHING`) — the
|
|
427
474
|
* mint/backfill path, where a key's `orgId` must resolve to a real row. The
|
|
@@ -439,6 +486,8 @@ export async function upsert(db: Db.Db, input: upsert.Input): Promise<void> {
|
|
|
439
486
|
createdBy: input.createdBy ?? null,
|
|
440
487
|
id: input.id,
|
|
441
488
|
name: input.name ?? input.id,
|
|
489
|
+
sponsorshipSubsidyDurationDays: null,
|
|
490
|
+
sponsorshipSubsidyProjectSpendLimit: null,
|
|
442
491
|
updatedAt: now,
|
|
443
492
|
})
|
|
444
493
|
.onConflict((oc) => oc.column('id').doNothing())
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid'
|
|
2
|
+
|
|
3
|
+
import * as Runtime from '../../../test/runtime.js'
|
|
4
|
+
import * as Db from '../Db.js'
|
|
5
|
+
import * as Projects from './projects.js'
|
|
6
|
+
|
|
7
|
+
const create = () => Db.postgres({ connectionString: Runtime.postgresUrl, schema: `t_${nanoid()}` })
|
|
8
|
+
|
|
9
|
+
describe('activateSponsorship', () => {
|
|
10
|
+
test('behavior: stores the first activation time once', async () => {
|
|
11
|
+
const db = create()
|
|
12
|
+
await db.migrate()
|
|
13
|
+
const project = await Projects.create(db, { name: 'Privy app', orgId: 'org_1' })
|
|
14
|
+
|
|
15
|
+
const first = await Projects.activateSponsorship(db, {
|
|
16
|
+
at: '2026-01-01T00:00:00.000Z',
|
|
17
|
+
endsAt: '2026-04-01T00:00:00.000Z',
|
|
18
|
+
id: project.id,
|
|
19
|
+
orgId: 'org_1',
|
|
20
|
+
spendLimit: '100000000',
|
|
21
|
+
})
|
|
22
|
+
const second = await Projects.activateSponsorship(db, {
|
|
23
|
+
at: '2026-02-01T00:00:00.000Z',
|
|
24
|
+
endsAt: '2026-05-02T00:00:00.000Z',
|
|
25
|
+
id: project.id,
|
|
26
|
+
orgId: 'org_1',
|
|
27
|
+
spendLimit: '200000000',
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
expect(first?.sponsorshipSubsidyStartsAt).toMatchInlineSnapshot(`"2026-01-01T00:00:00.000Z"`)
|
|
31
|
+
expect(first?.sponsorshipSubsidyEndsAt).toMatchInlineSnapshot(`"2026-04-01T00:00:00.000Z"`)
|
|
32
|
+
expect(second?.sponsorshipSubsidyStartsAt).toBe(first?.sponsorshipSubsidyStartsAt)
|
|
33
|
+
expect(second?.sponsorshipSubsidyEndsAt).toBe(first?.sponsorshipSubsidyEndsAt)
|
|
34
|
+
expect(second?.sponsorshipSpendLimit).toBe(first?.sponsorshipSpendLimit)
|
|
35
|
+
expect(second?.sponsorshipSpendLimit).toBe('100000000')
|
|
36
|
+
await db.close()
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
test('behavior: requires matching organization ownership', async () => {
|
|
40
|
+
const db = create()
|
|
41
|
+
await db.migrate()
|
|
42
|
+
const project = await Projects.create(db, { name: 'Privy app', orgId: 'org_1' })
|
|
43
|
+
|
|
44
|
+
expect(
|
|
45
|
+
await Projects.activateSponsorship(db, {
|
|
46
|
+
at: '2026-01-01T00:00:00.000Z',
|
|
47
|
+
endsAt: '2026-04-01T00:00:00.000Z',
|
|
48
|
+
id: project.id,
|
|
49
|
+
orgId: 'org_2',
|
|
50
|
+
spendLimit: '100000000',
|
|
51
|
+
}),
|
|
52
|
+
).toBeUndefined()
|
|
53
|
+
await db.close()
|
|
54
|
+
})
|
|
55
|
+
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { sql, type Selectable } from 'kysely'
|
|
2
2
|
|
|
3
3
|
import * as Id from '../../internal/Id.js'
|
|
4
4
|
import type * as Db from '../Db.js'
|
|
@@ -26,6 +26,9 @@ export function create(db: Db.Db, input: create.Input): Promise<Record> {
|
|
|
26
26
|
id: Id.generate('prj'),
|
|
27
27
|
name: input.name,
|
|
28
28
|
orgId: input.orgId,
|
|
29
|
+
sponsorshipSubsidyEndsAt: null,
|
|
30
|
+
sponsorshipSubsidyStartsAt: null,
|
|
31
|
+
sponsorshipSpendLimit: null,
|
|
29
32
|
updatedAt: now,
|
|
30
33
|
})
|
|
31
34
|
.returningAll()
|
|
@@ -65,6 +68,48 @@ export function get(db: Db.Db, id: string): Promise<Record | undefined> {
|
|
|
65
68
|
return db.kysely.selectFrom('projects').selectAll().where('id', '=', id).executeTakeFirst()
|
|
66
69
|
}
|
|
67
70
|
|
|
71
|
+
/**
|
|
72
|
+
* Sets a project's sponsorship activation time once. Concurrent first
|
|
73
|
+
* requests converge on the same stored timestamp.
|
|
74
|
+
*
|
|
75
|
+
* @param db - The database.
|
|
76
|
+
* @param options - Project ownership and activation time.
|
|
77
|
+
* @returns The project with its stable activation time, or `undefined` when absent.
|
|
78
|
+
*/
|
|
79
|
+
export function activateSponsorship(
|
|
80
|
+
db: Db.Db,
|
|
81
|
+
options: activateSponsorship.Options,
|
|
82
|
+
): Promise<Record | undefined> {
|
|
83
|
+
return db.kysely
|
|
84
|
+
.updateTable('projects')
|
|
85
|
+
.set({
|
|
86
|
+
sponsorshipSpendLimit: sql`case when sponsorship_subsidy_starts_at is null then ${options.spendLimit} else sponsorship_spend_limit end`,
|
|
87
|
+
sponsorshipSubsidyEndsAt: sql`coalesce(sponsorship_subsidy_ends_at, ${options.endsAt})`,
|
|
88
|
+
sponsorshipSubsidyStartsAt: sql`coalesce(sponsorship_subsidy_starts_at, ${options.at})`,
|
|
89
|
+
updatedAt: sql`case when sponsorship_subsidy_starts_at is null then ${options.at} else updated_at end`,
|
|
90
|
+
})
|
|
91
|
+
.where('id', '=', options.id)
|
|
92
|
+
.where('orgId', '=', options.orgId)
|
|
93
|
+
.returningAll()
|
|
94
|
+
.executeTakeFirst()
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export declare namespace activateSponsorship {
|
|
98
|
+
/** Project activation inputs. */
|
|
99
|
+
type Options = {
|
|
100
|
+
/** Activation time used only when the project has not started its window. */
|
|
101
|
+
at: string
|
|
102
|
+
/** End of the promotion window, stored with the first activation. */
|
|
103
|
+
endsAt: string
|
|
104
|
+
/** Project id (`prj_…`). */
|
|
105
|
+
id: string
|
|
106
|
+
/** Owning organization id (`org_…`). */
|
|
107
|
+
orgId: string
|
|
108
|
+
/** Optional promotion cap in fee-token base units, stored only on first activation. */
|
|
109
|
+
spendLimit: string | null
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
68
113
|
/**
|
|
69
114
|
* Reads projects by id for operational attribution displays.
|
|
70
115
|
*
|