tapimo 0.10.2 → 0.12.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 +4896 -2166
- package/dist/App.d.ts.map +1 -1
- package/dist/App.js +2 -2
- package/dist/App.js.map +1 -1
- package/dist/Assets.d.ts +15 -0
- package/dist/Assets.d.ts.map +1 -1
- package/dist/Assets.js +7 -0
- package/dist/Assets.js.map +1 -1
- package/dist/Webhooks.d.ts +0 -75
- package/dist/Webhooks.d.ts.map +1 -1
- package/dist/Webhooks.js +1 -143
- package/dist/Webhooks.js.map +1 -1
- package/dist/admin/App.d.ts +127 -78
- package/dist/admin/App.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.d.ts +115 -1
- package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
- package/dist/admin/apps/earn-vaults.js +59 -6
- package/dist/admin/apps/earn-vaults.js.map +1 -1
- package/dist/admin/apps/organizations.d.ts +3 -3
- package/dist/admin/apps/organizations.d.ts.map +1 -1
- package/dist/admin/apps/organizations.js +4 -2
- package/dist/admin/apps/organizations.js.map +1 -1
- package/dist/admin/apps/verified-tokens.d.ts +83 -83
- 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/data/App.d.ts +5924 -4310
- package/dist/apps/data/App.d.ts.map +1 -1
- package/dist/apps/data/App.js +61 -9
- package/dist/apps/data/App.js.map +1 -1
- package/dist/apps/data/ZoneSelection.d.ts +62 -0
- package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
- package/dist/apps/data/ZoneSelection.js +44 -0
- package/dist/apps/data/ZoneSelection.js.map +1 -0
- package/dist/apps/data/routes/activities.d.ts +2368 -5
- package/dist/apps/data/routes/activities.d.ts.map +1 -1
- package/dist/apps/data/routes/activities.js +423 -114
- package/dist/apps/data/routes/activities.js.map +1 -1
- package/dist/apps/data/routes/addresses.d.ts +131 -0
- package/dist/apps/data/routes/addresses.d.ts.map +1 -1
- package/dist/apps/data/routes/balances.d.ts +25 -25
- package/dist/apps/data/routes/balances.js +1 -1
- package/dist/apps/data/routes/balances.js.map +1 -1
- package/dist/apps/data/routes/blocks.d.ts +1 -1
- package/dist/apps/data/routes/blocks.js +1 -1
- package/dist/apps/data/routes/blocks.js.map +1 -1
- package/dist/apps/data/routes/earn.d.ts +135 -10
- package/dist/apps/data/routes/earn.d.ts.map +1 -1
- package/dist/apps/data/routes/earn.js +157 -25
- package/dist/apps/data/routes/earn.js.map +1 -1
- package/dist/apps/data/routes/exchanges.d.ts +829 -123
- package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
- package/dist/apps/data/routes/exchanges.js +16 -13
- package/dist/apps/data/routes/exchanges.js.map +1 -1
- package/dist/apps/data/routes/fee-amm.d.ts +26 -26
- package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
- package/dist/apps/data/routes/fee-amm.js +9 -11
- package/dist/apps/data/routes/fee-amm.js.map +1 -1
- package/dist/apps/data/routes/receipts.d.ts +54 -54
- package/dist/apps/data/routes/receipts.js +1 -1
- package/dist/apps/data/routes/receipts.js.map +1 -1
- package/dist/apps/data/routes/rpc.js +24 -10
- package/dist/apps/data/routes/rpc.js.map +1 -1
- package/dist/apps/data/routes/tokenlist.d.ts +12 -12
- package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
- package/dist/apps/data/routes/tokenlist.js +16 -15
- package/dist/apps/data/routes/tokenlist.js.map +1 -1
- package/dist/apps/data/routes/tokens.d.ts +17 -3
- package/dist/apps/data/routes/tokens.d.ts.map +1 -1
- package/dist/apps/data/routes/tokens.js +34 -15
- package/dist/apps/data/routes/tokens.js.map +1 -1
- package/dist/apps/data/routes/transactions.d.ts +1 -1
- package/dist/apps/data/routes/transactions.js +1 -1
- 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 +7 -9
- package/dist/apps/data/routes/transfers.js.map +1 -1
- package/dist/apps/data/routes/valuation.d.ts +21 -21
- package/dist/apps/data/routes/verified-tokens.d.ts +5 -5
- package/dist/apps/data/routes/webhooks.d.ts +1011 -151
- package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/data/routes/webhooks.js +126 -739
- package/dist/apps/data/routes/webhooks.js.map +1 -1
- package/dist/apps/data/routes/zones.d.ts +15 -15
- package/dist/apps/funding/App.d.ts +27 -27
- package/dist/apps/funding/routes/chains.d.ts.map +1 -1
- package/dist/apps/funding/routes/chains.js +5 -4
- package/dist/apps/funding/routes/chains.js.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.d.ts +18 -18
- package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
- package/dist/apps/funding/routes/deposit-addresses.js +8 -8
- package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
- package/dist/apps/funding/routes/providers.d.ts.map +1 -1
- package/dist/apps/funding/routes/providers.js +3 -2
- package/dist/apps/funding/routes/providers.js.map +1 -1
- package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
- package/dist/apps/funding/routes/quotes.js +2 -2
- package/dist/apps/funding/routes/quotes.js.map +1 -1
- package/dist/apps/funding/routes/transfers.d.ts +33 -33
- package/dist/apps/management/App.d.ts +1433 -322
- package/dist/apps/management/App.d.ts.map +1 -1
- package/dist/apps/management/Billing.d.ts.map +1 -1
- package/dist/apps/management/Billing.js +19 -6
- package/dist/apps/management/Billing.js.map +1 -1
- package/dist/apps/management/routes/api-keys.d.ts +154 -94
- package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
- package/dist/apps/management/routes/api-keys.js +76 -30
- package/dist/apps/management/routes/api-keys.js.map +1 -1
- package/dist/apps/management/routes/billing.d.ts +103 -30
- package/dist/apps/management/routes/billing.d.ts.map +1 -1
- package/dist/apps/management/routes/billing.js +91 -32
- package/dist/apps/management/routes/billing.js.map +1 -1
- package/dist/apps/management/routes/faucet.d.ts +12 -12
- package/dist/apps/management/routes/faucet.d.ts.map +1 -1
- package/dist/apps/management/routes/faucet.js +23 -12
- package/dist/apps/management/routes/faucet.js.map +1 -1
- package/dist/apps/management/routes/invitations.d.ts +46 -13
- package/dist/apps/management/routes/invitations.d.ts.map +1 -1
- package/dist/apps/management/routes/invitations.js +79 -29
- package/dist/apps/management/routes/invitations.js.map +1 -1
- package/dist/apps/management/routes/invite-links.d.ts +128 -83
- package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
- package/dist/apps/management/routes/invite-links.js +100 -41
- package/dist/apps/management/routes/invite-links.js.map +1 -1
- package/dist/apps/management/routes/me.d.ts +5 -5
- package/dist/apps/management/routes/me.d.ts.map +1 -1
- package/dist/apps/management/routes/me.js +14 -10
- package/dist/apps/management/routes/me.js.map +1 -1
- package/dist/apps/management/routes/members.d.ts +68 -47
- package/dist/apps/management/routes/members.d.ts.map +1 -1
- package/dist/apps/management/routes/members.js +37 -18
- package/dist/apps/management/routes/members.js.map +1 -1
- package/dist/apps/management/routes/orgs.d.ts +48 -8
- package/dist/apps/management/routes/orgs.d.ts.map +1 -1
- package/dist/apps/management/routes/orgs.js +48 -19
- package/dist/apps/management/routes/orgs.js.map +1 -1
- package/dist/apps/management/routes/projects.d.ts +130 -68
- package/dist/apps/management/routes/projects.d.ts.map +1 -1
- package/dist/apps/management/routes/projects.js +72 -21
- package/dist/apps/management/routes/projects.js.map +1 -1
- package/dist/apps/management/routes/scopes.d.ts.map +1 -1
- package/dist/apps/management/routes/scopes.js +8 -5
- package/dist/apps/management/routes/scopes.js.map +1 -1
- package/dist/apps/management/routes/usage.d.ts +38 -38
- package/dist/apps/management/routes/usage.d.ts.map +1 -1
- package/dist/apps/management/routes/usage.js +41 -31
- package/dist/apps/management/routes/usage.js.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.d.ts +34 -6
- package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
- package/dist/apps/management/routes/verified-token-requests.js +36 -17
- package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
- package/dist/apps/management/routes/webhooks.d.ts +1186 -197
- package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
- package/dist/apps/management/routes/webhooks.js +106 -38
- package/dist/apps/management/routes/webhooks.js.map +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
- package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
- package/dist/apps/mpp/internal/Adapter.js +12 -0
- package/dist/apps/mpp/internal/Adapter.js.map +1 -1
- package/dist/db/Db.d.ts +2 -0
- package/dist/db/Db.d.ts.map +1 -1
- package/dist/db/Db.js +61 -0
- package/dist/db/Db.js.map +1 -1
- package/dist/db/Schema.d.ts +30 -2
- package/dist/db/Schema.d.ts.map +1 -1
- package/dist/db/Schema.js +28 -3
- package/dist/db/Schema.js.map +1 -1
- package/dist/db/tables/earnVaults.d.ts +5 -1
- package/dist/db/tables/earnVaults.d.ts.map +1 -1
- package/dist/db/tables/earnVaults.js +5 -0
- package/dist/db/tables/earnVaults.js.map +1 -1
- package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
- package/dist/db/tables/webhookDeliveries.js +10 -0
- package/dist/db/tables/webhookDeliveries.js.map +1 -1
- package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
- package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
- package/dist/db/tables/webhookQueueCompletions.js +32 -0
- package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
- package/dist/db/tables/webhookQueueEvents.d.ts +16 -20
- package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
- package/dist/db/tables/webhookQueueEvents.js +68 -43
- package/dist/db/tables/webhookQueueEvents.js.map +1 -1
- package/dist/db/tables/webhookSubscriptions.d.ts +47 -72
- package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
- package/dist/db/tables/webhookSubscriptions.js +92 -105
- package/dist/db/tables/webhookSubscriptions.js.map +1 -1
- package/dist/internal/Auth.d.ts +8 -1
- package/dist/internal/Auth.d.ts.map +1 -1
- package/dist/internal/Auth.js +13 -3
- package/dist/internal/Auth.js.map +1 -1
- package/dist/internal/Cache.d.ts.map +1 -1
- package/dist/internal/Cache.js +11 -7
- package/dist/internal/Cache.js.map +1 -1
- package/dist/internal/EarnVaults.d.ts +41 -2
- package/dist/internal/EarnVaults.d.ts.map +1 -1
- package/dist/internal/EarnVaults.js +167 -0
- package/dist/internal/EarnVaults.js.map +1 -1
- package/dist/internal/MetricSink.d.ts +35 -125
- package/dist/internal/MetricSink.d.ts.map +1 -1
- package/dist/internal/MetricSink.js +50 -121
- package/dist/internal/MetricSink.js.map +1 -1
- package/dist/internal/OpenApi.d.ts +26 -22
- package/dist/internal/OpenApi.d.ts.map +1 -1
- package/dist/internal/OpenApi.js +128 -39
- package/dist/internal/OpenApi.js.map +1 -1
- package/dist/internal/Response.d.ts +13 -8
- package/dist/internal/Response.d.ts.map +1 -1
- package/dist/internal/Response.js +16 -5
- package/dist/internal/Response.js.map +1 -1
- package/dist/internal/Schema.d.ts +8 -8
- package/dist/internal/Schema.d.ts.map +1 -1
- package/dist/internal/Schema.js +10 -9
- package/dist/internal/Schema.js.map +1 -1
- package/dist/internal/Store.d.ts +15 -6
- package/dist/internal/Store.d.ts.map +1 -1
- package/dist/internal/Store.js +45 -15
- package/dist/internal/Store.js.map +1 -1
- package/dist/internal/Tidx.d.ts +2 -0
- package/dist/internal/Tidx.d.ts.map +1 -1
- package/dist/internal/Tidx.js +16 -4
- package/dist/internal/Tidx.js.map +1 -1
- package/dist/internal/WebhookTransfer.d.ts +1 -55
- package/dist/internal/WebhookTransfer.d.ts.map +1 -1
- package/dist/internal/WebhookTransfer.js +1 -239
- package/dist/internal/WebhookTransfer.js.map +1 -1
- package/dist/internal/Webhooks.d.ts +112 -56
- package/dist/internal/Webhooks.d.ts.map +1 -1
- package/dist/internal/Webhooks.js +124 -93
- package/dist/internal/Webhooks.js.map +1 -1
- package/dist/internal/funding/Deposit.d.ts +2 -2
- package/dist/internal/funding/Deposit.d.ts.map +1 -1
- package/dist/internal/funding/Deposit.js +9 -8
- package/dist/internal/funding/Deposit.js.map +1 -1
- package/dist/internal/funding/DepositAddress.d.ts +4 -4
- package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
- package/dist/internal/funding/DepositAddress.js +9 -8
- package/dist/internal/funding/DepositAddress.js.map +1 -1
- package/dist/internal/funding/DepositWebhook.d.ts +25 -0
- package/dist/internal/funding/DepositWebhook.d.ts.map +1 -0
- package/dist/internal/funding/DepositWebhook.js +74 -0
- package/dist/internal/funding/DepositWebhook.js.map +1 -0
- package/dist/internal/funding/Provider.d.ts.map +1 -1
- package/dist/internal/funding/Provider.js +13 -12
- package/dist/internal/funding/Provider.js.map +1 -1
- package/dist/internal/funding/Reconciliation.d.ts +6 -0
- package/dist/internal/funding/Reconciliation.d.ts.map +1 -1
- package/dist/internal/funding/Reconciliation.js +42 -10
- package/dist/internal/funding/Reconciliation.js.map +1 -1
- 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/stargate.d.ts +19 -0
- package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
- package/dist/internal/funding/providers/stargate.js +143 -0
- package/dist/internal/funding/providers/stargate.js.map +1 -0
- 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/dist/providers/index.d.ts +7 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -1
- package/package.json +2 -2
- package/src/App.test.ts +48 -0
- package/src/App.ts +7 -2
- package/src/Assets.test.ts +18 -0
- package/src/Assets.ts +22 -0
- package/src/Client.test-d.ts +287 -17
- package/src/Webhooks.ts +1 -220
- package/src/admin/apps/earn-vaults.test.ts +143 -0
- package/src/admin/apps/earn-vaults.ts +83 -6
- package/src/admin/apps/organizations.ts +6 -2
- package/src/admin/ui/src/routes/api-keys.tsx +36 -0
- package/src/admin/ui.generated.ts +151 -189
- package/src/apps/data/App.test.ts +31 -0
- package/src/apps/data/App.ts +64 -10
- package/src/apps/data/ZoneSelection.test.ts +196 -0
- package/src/apps/data/ZoneSelection.ts +108 -0
- package/src/apps/data/routes/activities.test.ts +435 -12
- package/src/apps/data/routes/activities.ts +562 -125
- package/src/apps/data/routes/balances.ts +1 -1
- package/src/apps/data/routes/blocks.ts +1 -1
- package/src/apps/data/routes/earn.test.ts +183 -23
- package/src/apps/data/routes/earn.ts +225 -29
- package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
- package/src/apps/data/routes/exchanges.test.ts +31 -1
- package/src/apps/data/routes/exchanges.ts +19 -15
- package/src/apps/data/routes/fee-amm.ts +18 -11
- package/src/apps/data/routes/receipts.ts +1 -1
- package/src/apps/data/routes/rpc.test.ts +75 -0
- package/src/apps/data/routes/rpc.ts +23 -9
- package/src/apps/data/routes/tokenlist.ts +21 -18
- package/src/apps/data/routes/tokens.test.ts +29 -0
- package/src/apps/data/routes/tokens.ts +38 -15
- package/src/apps/data/routes/transactions.ts +1 -1
- package/src/apps/data/routes/transfers.test.ts +3 -3
- package/src/apps/data/routes/transfers.ts +12 -9
- package/src/apps/data/routes/webhooks.test.ts +179 -1497
- package/src/apps/data/routes/webhooks.ts +156 -976
- package/src/apps/data/routes/zones.test.ts +19 -13
- package/src/apps/funding/routes/chains.test.ts +211 -7
- package/src/apps/funding/routes/chains.ts +19 -12
- package/src/apps/funding/routes/deposit-addresses.test.ts +394 -0
- package/src/apps/funding/routes/deposit-addresses.ts +84 -72
- package/src/apps/funding/routes/providers.ts +9 -5
- package/src/apps/funding/routes/quotes.test.ts +46 -0
- package/src/apps/funding/routes/quotes.ts +8 -5
- package/src/apps/funding/routes/transfers.test.ts +35 -32
- package/src/apps/management/Billing.test.ts +26 -0
- package/src/apps/management/Billing.ts +24 -7
- package/src/apps/management/routes/api-keys.test.ts +178 -0
- package/src/apps/management/routes/api-keys.ts +203 -144
- package/src/apps/management/routes/billing.test.ts +209 -0
- package/src/apps/management/routes/billing.ts +254 -177
- package/src/apps/management/routes/faucet.test.ts +39 -0
- package/src/apps/management/routes/faucet.ts +75 -41
- package/src/apps/management/routes/invitations.test.ts +216 -0
- package/src/apps/management/routes/invitations.ts +186 -109
- package/src/apps/management/routes/invite-links.test.ts +263 -1
- package/src/apps/management/routes/invite-links.ts +295 -214
- package/src/apps/management/routes/me.test.ts +49 -0
- package/src/apps/management/routes/me.ts +42 -32
- package/src/apps/management/routes/members.test.ts +124 -1
- package/src/apps/management/routes/members.ts +81 -51
- package/src/apps/management/routes/orgs.test.ts +176 -0
- package/src/apps/management/routes/orgs.ts +101 -59
- package/src/apps/management/routes/projects.test.ts +183 -0
- package/src/apps/management/routes/projects.ts +124 -60
- package/src/apps/management/routes/scopes.test.ts +44 -0
- package/src/apps/management/routes/scopes.ts +37 -28
- package/src/apps/management/routes/usage.test.ts +92 -0
- package/src/apps/management/routes/usage.ts +186 -151
- package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
- package/src/apps/management/routes/verified-token-requests.ts +166 -133
- package/src/apps/management/routes/webhooks.test.ts +313 -1
- package/src/apps/management/routes/webhooks.ts +220 -71
- package/src/apps/mpp/internal/Adapter.ts +13 -1
- package/src/db/Db.test.ts +42 -5
- package/src/db/Db.ts +85 -0
- package/src/db/Schema.ts +41 -3
- package/src/db/tables/earnVaults.test.ts +22 -0
- package/src/db/tables/earnVaults.ts +11 -1
- package/src/db/tables/organizations.test.ts +5 -2
- package/src/db/tables/webhookDeliveries.ts +13 -0
- package/src/db/tables/webhookQueueCompletions.ts +55 -0
- package/src/db/tables/webhookQueueEvents.ts +97 -57
- package/src/db/tables/webhookSubscriptions.ts +134 -144
- package/src/internal/Auth.ts +23 -5
- package/src/internal/Cache.ts +14 -7
- package/src/internal/EarnVaults.capabilities.test.ts +33 -0
- package/src/internal/EarnVaults.test.ts +79 -0
- package/src/internal/EarnVaults.ts +277 -0
- package/src/internal/MetricSink.test.ts +41 -373
- package/src/internal/MetricSink.ts +92 -273
- package/src/internal/OpenApi.ts +165 -49
- package/src/internal/Response.test.ts +95 -0
- package/src/internal/Response.ts +40 -2
- package/src/internal/Schema.test.ts +34 -0
- package/src/internal/Schema.ts +20 -9
- package/src/internal/Store.test.ts +186 -0
- package/src/internal/Store.ts +57 -17
- package/src/internal/Tidx.test.ts +19 -0
- package/src/internal/Tidx.ts +16 -4
- package/src/internal/WebhookTransfer.ts +1 -351
- package/src/internal/Webhooks.test.ts +222 -145
- package/src/internal/Webhooks.ts +234 -135
- package/src/internal/funding/Deposit.ts +71 -64
- package/src/internal/funding/DepositAddress.ts +50 -43
- package/src/internal/funding/DepositWebhook.test.ts +131 -0
- package/src/internal/funding/DepositWebhook.ts +101 -0
- package/src/internal/funding/Provider.ts +164 -142
- package/src/internal/funding/Reconciliation.test.ts +14 -0
- package/src/internal/funding/Reconciliation.ts +161 -86
- 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 +185 -0
- package/src/internal/funding/providers/stargate.ts +184 -0
- package/src/internal/webhookDestinations/slack.ts +15 -0
- package/src/providers/index.test.ts +1 -0
- package/src/providers/index.ts +9 -0
- package/src/Webhooks.bench.ts +0 -714
- package/src/Webhooks.memory.bench.ts +0 -250
- package/src/Webhooks.test.ts +0 -146
|
@@ -4,6 +4,7 @@ import type * as Db from '../../db/Db.js'
|
|
|
4
4
|
import * as FundingDepositAddresses from '../../db/tables/fundingDepositAddresses.js'
|
|
5
5
|
import * as FundingDeposits from '../../db/tables/fundingDeposits.js'
|
|
6
6
|
import * as Id from '../Id.js'
|
|
7
|
+
import * as OpenApi from '../OpenApi.js'
|
|
7
8
|
import * as Schema from '../Schema.js'
|
|
8
9
|
import * as Provider from './Provider.js'
|
|
9
10
|
|
|
@@ -115,22 +116,25 @@ export namespace schema {
|
|
|
115
116
|
)
|
|
116
117
|
|
|
117
118
|
/** Customer-safe explanation of a deposit status. */
|
|
118
|
-
export const StatusReason =
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
119
|
+
export const StatusReason = OpenApi.component(
|
|
120
|
+
z
|
|
121
|
+
.object({
|
|
122
|
+
code: z
|
|
123
|
+
.enum(statusReasonCodes)
|
|
124
|
+
.check(
|
|
125
|
+
z.describe('Stable machine-readable reason code.'),
|
|
126
|
+
z.meta({ examples: ['delivery_liquidity_unavailable'] }),
|
|
127
|
+
),
|
|
128
|
+
message: z
|
|
129
|
+
.string()
|
|
130
|
+
.check(
|
|
131
|
+
z.describe('Human-readable explanation of the current status.'),
|
|
132
|
+
z.meta({ examples: ['The required destination amount is not currently available.'] }),
|
|
133
|
+
),
|
|
134
|
+
})
|
|
135
|
+
.check(z.describe('Why a deposit needs attention or recovery.')),
|
|
136
|
+
'FundingDepositStatusReason',
|
|
137
|
+
)
|
|
134
138
|
|
|
135
139
|
/** Public fields persisted as the deposit snapshot. */
|
|
136
140
|
export const Snapshot = z
|
|
@@ -189,54 +193,57 @@ export namespace schema {
|
|
|
189
193
|
)
|
|
190
194
|
|
|
191
195
|
/** One detected funding deposit. */
|
|
192
|
-
export const FundingDeposit =
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
.
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
.
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
196
|
+
export const FundingDeposit = OpenApi.component(
|
|
197
|
+
z
|
|
198
|
+
.object({
|
|
199
|
+
createdAt: z.iso
|
|
200
|
+
.datetime()
|
|
201
|
+
.check(
|
|
202
|
+
z.describe('When the deposit was first detected (ISO 8601).'),
|
|
203
|
+
z.meta({ examples: ['2026-08-04T00:01:00.000Z'] }),
|
|
204
|
+
),
|
|
205
|
+
depositAddressId: Snapshot.shape.depositAddressId,
|
|
206
|
+
detectionTrigger: z.optional(DetectionTrigger),
|
|
207
|
+
destinationAmount: Snapshot.shape.destinationAmount,
|
|
208
|
+
destinationAmountRequired: Snapshot.shape.destinationAmountRequired,
|
|
209
|
+
destinationChain: Snapshot.shape.destinationChain,
|
|
210
|
+
destinationToken: Snapshot.shape.destinationToken,
|
|
211
|
+
destinationTransactionHashes: Snapshot.shape.destinationTransactionHashes,
|
|
212
|
+
id: z
|
|
213
|
+
.string()
|
|
214
|
+
.check(
|
|
215
|
+
z.regex(/^fdp_[A-Za-z0-9_-]+$/),
|
|
216
|
+
z.describe('Funding deposit id (`fdp_…`).'),
|
|
217
|
+
z.meta({ examples: ['fdp_001785792060000_2ZPE2gvateYEQ0dQslgvkhjx'] }),
|
|
218
|
+
),
|
|
219
|
+
provider: Snapshot.shape.provider,
|
|
220
|
+
recipient: Snapshot.shape.recipient,
|
|
221
|
+
refundAddress: Snapshot.shape.refundAddress,
|
|
222
|
+
refundAmount: Snapshot.shape.refundAmount,
|
|
223
|
+
refundTransactionHashes: Snapshot.shape.refundTransactionHashes,
|
|
224
|
+
sender: Snapshot.shape.sender,
|
|
225
|
+
sourceAmount: Snapshot.shape.sourceAmount,
|
|
226
|
+
sourceChain: Snapshot.shape.sourceChain,
|
|
227
|
+
sourceToken: Snapshot.shape.sourceToken,
|
|
228
|
+
sourceTransactionHashes: Snapshot.shape.sourceTransactionHashes,
|
|
229
|
+
sourceTransferIndex: z
|
|
230
|
+
.optional(z.number().check(z.int(), z.minimum(0)))
|
|
231
|
+
.check(
|
|
232
|
+
z.describe('Verified transfer position within the source transaction.'),
|
|
233
|
+
z.meta({ examples: [0] }),
|
|
234
|
+
),
|
|
235
|
+
status: Status,
|
|
236
|
+
statusReason: z.optional(StatusReason),
|
|
237
|
+
updatedAt: z.iso
|
|
238
|
+
.datetime()
|
|
239
|
+
.check(
|
|
240
|
+
z.describe('When the deposit last materially changed (ISO 8601).'),
|
|
241
|
+
z.meta({ examples: ['2026-08-04T00:02:00.000Z'] }),
|
|
242
|
+
),
|
|
243
|
+
})
|
|
244
|
+
.check(z.describe('One detected deposit and its delivery status.')),
|
|
245
|
+
'FundingDeposit',
|
|
246
|
+
)
|
|
240
247
|
}
|
|
241
248
|
|
|
242
249
|
/** Stored public snapshot of a funding deposit. */
|
|
@@ -3,6 +3,7 @@ import * as z from 'zod/mini'
|
|
|
3
3
|
import type * as Db from '../../db/Db.js'
|
|
4
4
|
import * as FundingDepositAddresses from '../../db/tables/fundingDepositAddresses.js'
|
|
5
5
|
import * as Id from '../Id.js'
|
|
6
|
+
import * as OpenApi from '../OpenApi.js'
|
|
6
7
|
import * as Provider from './Provider.js'
|
|
7
8
|
import * as Transfer from './Transfer.js'
|
|
8
9
|
|
|
@@ -83,51 +84,57 @@ export namespace schema {
|
|
|
83
84
|
.check(z.describe('Public route and ownership-independent fields of a deposit address.'))
|
|
84
85
|
|
|
85
86
|
/** One reusable funding deposit address. */
|
|
86
|
-
export const FundingDepositAddress =
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
87
|
+
export const FundingDepositAddress = OpenApi.component(
|
|
88
|
+
z
|
|
89
|
+
.object({
|
|
90
|
+
address: Snapshot.shape.address,
|
|
91
|
+
createdAt: z.iso
|
|
92
|
+
.datetime()
|
|
93
|
+
.check(
|
|
94
|
+
z.describe('When the deposit address was created (ISO 8601).'),
|
|
95
|
+
z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
|
|
96
|
+
),
|
|
97
|
+
destinationChain: Snapshot.shape.destinationChain,
|
|
98
|
+
destinationToken: Snapshot.shape.destinationToken,
|
|
99
|
+
id: z
|
|
100
|
+
.string()
|
|
101
|
+
.check(
|
|
102
|
+
z.regex(/^fda_[A-Za-z0-9_-]+$/),
|
|
103
|
+
z.describe('Funding deposit address id (`fda_…`).'),
|
|
104
|
+
z.meta({ examples: ['fda_001785792000000_2ZPE2gvateYEQ0dQslgvkhjx'] }),
|
|
105
|
+
),
|
|
106
|
+
provider: Snapshot.shape.provider,
|
|
107
|
+
recipient: Snapshot.shape.recipient,
|
|
108
|
+
refundAddress: Snapshot.shape.refundAddress,
|
|
109
|
+
sourceChain: Snapshot.shape.sourceChain,
|
|
110
|
+
sourceToken: Snapshot.shape.sourceToken,
|
|
111
|
+
status: Status,
|
|
112
|
+
subsidize: Snapshot.shape.subsidize,
|
|
113
|
+
updatedAt: z.iso
|
|
114
|
+
.datetime()
|
|
115
|
+
.check(
|
|
116
|
+
z.describe('When the deposit address last materially changed (ISO 8601).'),
|
|
117
|
+
z.meta({ examples: ['2026-08-04T00:00:00.000Z'] }),
|
|
118
|
+
),
|
|
119
|
+
})
|
|
120
|
+
.check(z.describe('One reusable address for funding a Tempo account.')),
|
|
121
|
+
'FundingDepositAddress',
|
|
122
|
+
)
|
|
119
123
|
|
|
120
124
|
/** A reusable funding deposit address with terms sampled during creation. */
|
|
121
|
-
export const CreatedFundingDepositAddress =
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
125
|
+
export const CreatedFundingDepositAddress = OpenApi.component(
|
|
126
|
+
z
|
|
127
|
+
.object({
|
|
128
|
+
...FundingDepositAddress.shape,
|
|
129
|
+
destinationAmount: Provider.schema.FundingQuote.shape.destinationAmount,
|
|
130
|
+
destinationAmountMin: Provider.schema.FundingQuote.shape.destinationAmountMin,
|
|
131
|
+
fees: z.array(Transfer.schema.Fee).check(z.describe('Fees applied to the quoted deposit.')),
|
|
132
|
+
quote: Provider.schema.QuoteDetails,
|
|
133
|
+
sourceAmount: Provider.schema.FundingQuote.shape.sourceAmount,
|
|
134
|
+
})
|
|
135
|
+
.check(z.describe('A reusable funding deposit address with current quoted delivery terms.')),
|
|
136
|
+
'CreatedFundingDepositAddress',
|
|
137
|
+
)
|
|
131
138
|
}
|
|
132
139
|
|
|
133
140
|
/** Stored public snapshot of a funding deposit address. */
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import * as TestApp from '../../../test/App.js'
|
|
2
|
+
import * as TestFunding from '../../../test/Funding.js'
|
|
3
|
+
import * as WebhookQueueEvents from '../../db/tables/webhookQueueEvents.js'
|
|
4
|
+
import * as Webhooks from '../Webhooks.js'
|
|
5
|
+
import * as Deposit from './Deposit.js'
|
|
6
|
+
import * as FundingDepositAddress from './DepositAddress.js'
|
|
7
|
+
import * as DepositWebhook from './DepositWebhook.js'
|
|
8
|
+
|
|
9
|
+
const db = TestApp.database()
|
|
10
|
+
|
|
11
|
+
describe('stage', () => {
|
|
12
|
+
test('matches owner, environment, project, and filters with stable event ids', async () => {
|
|
13
|
+
const orgId = 'org_funding_deposit_webhook'
|
|
14
|
+
const projectId = 'prj_funding_deposit_webhook'
|
|
15
|
+
const address = await FundingDepositAddress.create(db, {
|
|
16
|
+
apiKeyId: 'key_funding_deposit_webhook',
|
|
17
|
+
deliveryStrategy: 'provider',
|
|
18
|
+
environment: 'production',
|
|
19
|
+
now: new Date('2026-08-12T00:00:00.000Z'),
|
|
20
|
+
orgId,
|
|
21
|
+
projectId,
|
|
22
|
+
providerOutputToken: TestFunding.providerOutputToken(),
|
|
23
|
+
snapshot: TestFunding.depositAddressSnapshot({
|
|
24
|
+
address: 'TQn9Y2khEsLJW1ChVWFMSMeRDow5KcbLSE',
|
|
25
|
+
recipient: `0x${'ab'.repeat(20)}`,
|
|
26
|
+
}),
|
|
27
|
+
})
|
|
28
|
+
const deposit = await Deposit.create(db, {
|
|
29
|
+
now: new Date('2026-08-12T00:01:00.000Z'),
|
|
30
|
+
providerRequestId: 'relay_deposit_webhook',
|
|
31
|
+
snapshot: TestFunding.depositSnapshot(address.id),
|
|
32
|
+
sourceTransactionHash: `0x${'aa'.repeat(32)}`,
|
|
33
|
+
sourceTransferIndex: 0,
|
|
34
|
+
})
|
|
35
|
+
const completed = await Deposit.transition(db, {
|
|
36
|
+
expectedVersion: deposit.version,
|
|
37
|
+
id: deposit.id,
|
|
38
|
+
status: 'completed',
|
|
39
|
+
})
|
|
40
|
+
if (completed.type !== 'applied') throw new Error('Expected deposit transition to apply.')
|
|
41
|
+
|
|
42
|
+
const filters = {
|
|
43
|
+
depositAddressId: address.id,
|
|
44
|
+
recipient: address.recipient.toLowerCase(),
|
|
45
|
+
status: 'completed',
|
|
46
|
+
}
|
|
47
|
+
const org = await subscription({ filters, orgId })
|
|
48
|
+
const project = await subscription({ filters, orgId, projectId })
|
|
49
|
+
await subscription({ orgId, projectId: 'prj_funding_deposit_sibling' })
|
|
50
|
+
await subscription({ environment: 'sandbox', orgId })
|
|
51
|
+
await subscription({ filters: { status: 'refunded' }, orgId })
|
|
52
|
+
|
|
53
|
+
const first = await DepositWebhook.stage(db, { records: [completed.record] })
|
|
54
|
+
const second = await DepositWebhook.stage(db, { records: [completed.record] })
|
|
55
|
+
expect({ created: first.created, repeated: second.created }).toEqual({
|
|
56
|
+
created: 2,
|
|
57
|
+
repeated: 0,
|
|
58
|
+
})
|
|
59
|
+
expect(first.references.map((reference) => reference.subscriptionId)).toEqual([
|
|
60
|
+
org.id,
|
|
61
|
+
project.id,
|
|
62
|
+
])
|
|
63
|
+
const event = await WebhookQueueEvents.get(db, first.references[0]!)
|
|
64
|
+
expect(event?.envelope).toMatchObject({
|
|
65
|
+
chainId: 4217,
|
|
66
|
+
data: { id: completed.record.id, status: 'completed' },
|
|
67
|
+
id: first.references[0]!.eventId,
|
|
68
|
+
subscriptionId: org.id,
|
|
69
|
+
type: 'funding:deposit.updated',
|
|
70
|
+
})
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
describe('transition', () => {
|
|
75
|
+
test('commits the deposit version with its webhook obligation', async () => {
|
|
76
|
+
const orgId = 'org_funding_deposit_transition'
|
|
77
|
+
const address = await FundingDepositAddress.create(db, {
|
|
78
|
+
apiKeyId: 'key_funding_deposit_transition',
|
|
79
|
+
deliveryStrategy: 'provider',
|
|
80
|
+
environment: 'production',
|
|
81
|
+
now: new Date('2026-08-12T01:00:00.000Z'),
|
|
82
|
+
orgId,
|
|
83
|
+
providerOutputToken: TestFunding.providerOutputToken(),
|
|
84
|
+
snapshot: TestFunding.depositAddressSnapshot(),
|
|
85
|
+
})
|
|
86
|
+
const deposit = await Deposit.create(db, {
|
|
87
|
+
now: new Date('2026-08-12T01:01:00.000Z'),
|
|
88
|
+
providerRequestId: 'relay_deposit_transition',
|
|
89
|
+
snapshot: TestFunding.depositSnapshot(address.id),
|
|
90
|
+
sourceTransactionHash: `0x${'bb'.repeat(32)}`,
|
|
91
|
+
sourceTransferIndex: 0,
|
|
92
|
+
})
|
|
93
|
+
await subscription({ filters: {}, orgId })
|
|
94
|
+
|
|
95
|
+
const transitioned = await DepositWebhook.transition(db, {
|
|
96
|
+
expectedVersion: deposit.version,
|
|
97
|
+
id: deposit.id,
|
|
98
|
+
status: 'bridging',
|
|
99
|
+
})
|
|
100
|
+
if (transitioned.result.type !== 'applied') throw new Error('Expected applied transition.')
|
|
101
|
+
|
|
102
|
+
expect(transitioned.references).toHaveLength(1)
|
|
103
|
+
expect(await WebhookQueueEvents.get(db, transitioned.references[0]!)).toMatchObject({
|
|
104
|
+
envelope: {
|
|
105
|
+
data: { id: deposit.id, status: 'bridging' },
|
|
106
|
+
id: transitioned.references[0]!.eventId,
|
|
107
|
+
},
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
function subscription(options: subscription.Options) {
|
|
113
|
+
return Webhooks.createSubscription(db, {
|
|
114
|
+
chainId: 4217,
|
|
115
|
+
destination: { type: 'url', url: 'https://example.com/webhooks/tempo' },
|
|
116
|
+
environment: options.environment ?? 'production',
|
|
117
|
+
eventType: 'funding:deposit.updated',
|
|
118
|
+
filters: options.filters ?? { recipient: `0x${'ab'.repeat(20)}`, status: 'completed' },
|
|
119
|
+
owner: { orgId: options.orgId, type: 'api_key' },
|
|
120
|
+
...(options.projectId === undefined ? {} : { projectId: options.projectId }),
|
|
121
|
+
})
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
declare namespace subscription {
|
|
125
|
+
type Options = {
|
|
126
|
+
environment?: 'production' | 'sandbox' | undefined
|
|
127
|
+
filters?: Record<string, unknown> | undefined
|
|
128
|
+
orgId: string
|
|
129
|
+
projectId?: string | undefined
|
|
130
|
+
}
|
|
131
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type * as Db from '../../db/Db.js'
|
|
2
|
+
import * as FundingDeposits from '../../db/tables/fundingDeposits.js'
|
|
3
|
+
import * as WebhookSubscriptions from '../../db/tables/webhookSubscriptions.js'
|
|
4
|
+
import * as Webhooks from '../Webhooks.js'
|
|
5
|
+
import * as Deposit from './Deposit.js'
|
|
6
|
+
|
|
7
|
+
/** Applies a deposit transition and stages every matching webhook obligation atomically. */
|
|
8
|
+
export async function transition(
|
|
9
|
+
db: Db.Db,
|
|
10
|
+
options: Deposit.transition.Options,
|
|
11
|
+
): Promise<transition.Result> {
|
|
12
|
+
return db.transaction(async (tx) => {
|
|
13
|
+
const result = await Deposit.transition(tx, options)
|
|
14
|
+
if (result.type !== 'applied') return { references: [], result }
|
|
15
|
+
const staged = await stage(tx, { records: [result.record] })
|
|
16
|
+
return { references: staged.references, result }
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export declare namespace transition {
|
|
21
|
+
/** Transition result plus compact references for atomically staged obligations. */
|
|
22
|
+
type Result = {
|
|
23
|
+
/** Queue references staged with the applied transition. */
|
|
24
|
+
references: Webhooks.QueueReference[]
|
|
25
|
+
/** Version-guarded deposit transition outcome. */
|
|
26
|
+
result: Deposit.transition.Result
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Stages durable webhook obligations for committed funding deposit versions. */
|
|
31
|
+
export async function stage(
|
|
32
|
+
db: Db.Db,
|
|
33
|
+
options: stage.Options,
|
|
34
|
+
): Promise<Webhooks.ensureQueueEvents.Result> {
|
|
35
|
+
const dispatchables: Webhooks.ensureQueueEvents.Dispatchable[] = []
|
|
36
|
+
const now = new Date().toISOString()
|
|
37
|
+
for (const record of unique(options.records)) {
|
|
38
|
+
const chainId = destinationChainId(record)
|
|
39
|
+
if (chainId === undefined) continue
|
|
40
|
+
const subscriptions = await WebhookSubscriptions.listActiveForFundingDeposit(db, {
|
|
41
|
+
chainId,
|
|
42
|
+
environment: record.environment,
|
|
43
|
+
now,
|
|
44
|
+
orgId: record.orgId,
|
|
45
|
+
...(record.projectId === null ? {} : { projectId: record.projectId }),
|
|
46
|
+
})
|
|
47
|
+
const data = Deposit.toPublic(record)
|
|
48
|
+
for (const subscription of subscriptions) {
|
|
49
|
+
if (!matches(subscription.filters, data)) continue
|
|
50
|
+
dispatchables.push({
|
|
51
|
+
envelope: Webhooks.buildKeyedEnvelope({
|
|
52
|
+
createdAt: new Date(record.updatedAt),
|
|
53
|
+
data,
|
|
54
|
+
key: `${record.id}:${record.version}`,
|
|
55
|
+
subscription,
|
|
56
|
+
}),
|
|
57
|
+
subscription,
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return Webhooks.ensureQueueEvents(db, dispatchables)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export declare namespace stage {
|
|
65
|
+
/** Committed deposit changes eligible for customer webhook delivery. */
|
|
66
|
+
type Options = {
|
|
67
|
+
/** Latest committed funding deposit records. */
|
|
68
|
+
records: readonly FundingDeposits.Record[]
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function destinationChainId(record: FundingDeposits.Record): number | undefined {
|
|
73
|
+
const match = /^eip155:(\d+)$/.exec(record.snapshot.destinationChain.id)
|
|
74
|
+
if (!match) return undefined
|
|
75
|
+
const chainId = Number(match[1])
|
|
76
|
+
return Number.isSafeInteger(chainId) && chainId > 0 ? chainId : undefined
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function matches(filters: Record<string, unknown>, deposit: Deposit.Public): boolean {
|
|
80
|
+
if (
|
|
81
|
+
typeof filters['depositAddressId'] === 'string' &&
|
|
82
|
+
filters['depositAddressId'] !== deposit.depositAddressId
|
|
83
|
+
)
|
|
84
|
+
return false
|
|
85
|
+
if (
|
|
86
|
+
typeof filters['recipient'] === 'string' &&
|
|
87
|
+
filters['recipient'].toLowerCase() !== deposit.recipient.toLowerCase()
|
|
88
|
+
)
|
|
89
|
+
return false
|
|
90
|
+
if (typeof filters['status'] === 'string' && filters['status'] !== deposit.status) return false
|
|
91
|
+
return true
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function unique(records: readonly FundingDeposits.Record[]): FundingDeposits.Record[] {
|
|
95
|
+
const byId = new Map<string, FundingDeposits.Record>()
|
|
96
|
+
for (const record of records) {
|
|
97
|
+
const current = byId.get(record.id)
|
|
98
|
+
if (!current || current.version < record.version) byId.set(record.id, record)
|
|
99
|
+
}
|
|
100
|
+
return [...byId.values()]
|
|
101
|
+
}
|